Browse Source

fix:系列优化

wangzaijun 18 hours ago
parent
commit
a2ea05e3e9

BIN
compressed_image.jpg


+ 2 - 1
mo-daq/src/main/java/com/smppw/modaq/application/components/report/writer/AbstractReportWriter.java

@@ -1,5 +1,6 @@
 package com.smppw.modaq.application.components.report.writer;
 
+import cn.hutool.core.util.StrUtil;
 import com.smppw.modaq.domain.dto.report.ReportBaseInfoDTO;
 import com.smppw.modaq.domain.dto.report.ReportData;
 import com.smppw.modaq.domain.dto.report.ReportFundInfoDTO;
@@ -43,7 +44,7 @@ public abstract class AbstractReportWriter<T extends ReportData> implements Repo
 
     private void saveFundInfo(T reportData) {
         ReportFundInfoDTO fundInfo = reportData.getFundInfo();
-        if (fundInfo != null) {
+        if (fundInfo != null && StrUtil.isAllNotBlank(fundInfo.getFundName(), fundInfo.getFundCode())) {
             this.fundInfoMapper.insert(fundInfo.toEntity());
         }
     }

+ 1 - 1
mo-daq/src/main/java/com/smppw/modaq/domain/dto/EmailZipFileDTO.java

@@ -56,7 +56,7 @@ public class EmailZipFileDTO {
 
     @Override
     public String toString() {
-        return "EmailZipFileDTO{" +
+        return "{" +
                 "emailTitle='" + emailTitle + '\'' +
                 ", filename='" + filename + '\'' +
                 ", filepath='" + filepath + '\'' +

+ 4 - 0
mo-daq/src/main/java/com/smppw/modaq/domain/entity/EmailParseInfoDO.java

@@ -43,6 +43,10 @@ public class EmailParseInfoDO {
     @TableField(value = "email_title")
     private String emailTitle;
     /**
+     * 邮件内容(html格式)
+     */
+    private String emailContent;
+    /**
      * 邮件类型,1-净值,2-估值表,3-定期报告
      */
     @TableField(value = "email_type")

+ 16 - 12
mo-daq/src/main/java/com/smppw/modaq/domain/service/EmailParseService.java

@@ -144,8 +144,8 @@ public class EmailParseService {
             emailTypes = ListUtil.of(EmailTypeConst.REPORT_LETTER_EMAIL_TYPE);
         }
         if (log.isInfoEnabled()) {
-            log.info("开始邮件解析 -> 邮箱信息:{},开始时间:{},结束时间:{}", mailboxInfoDTO, DateUtil.format(startDate,
-                    DateConst.YYYY_MM_DD_HH_MM_SS), DateUtil.format(endDate, DateConst.YYYY_MM_DD_HH_MM_SS));
+            log.info("开始邮件解析 -> 邮箱信息:{},开始时间:{},结束时间:{}", mailboxInfoDTO,
+                    DateUtil.formatDateTime(startDate), DateUtil.formatDateTime(endDate));
         }
         Map<String, List<EmailContentInfoDTO>> emailContentMap;
         try {
@@ -156,21 +156,21 @@ public class EmailParseService {
         }
         if (MapUtil.isEmpty(emailContentMap)) {
             log.warn("未采集到邮件 -> 邮箱配置信息:{},开始时间:{},结束时间:{}", mailboxInfoDTO,
-                    DateUtil.format(startDate, DateConst.YYYY_MM_DD_HH_MM_SS), DateUtil.format(endDate, DateConst.YYYY_MM_DD_HH_MM_SS));
+                    DateUtil.formatDateTime(startDate), DateUtil.formatDateTime(endDate));
             return;
         }
         for (Map.Entry<String, List<EmailContentInfoDTO>> emailEntry : emailContentMap.entrySet()) {
-            List<EmailContentInfoDTO> emailContentInfoDTOList = emailEntry.getValue();
-            if (CollUtil.isEmpty(emailContentInfoDTOList)) {
+            List<EmailContentInfoDTO> dtoList = emailEntry.getValue();
+            if (CollUtil.isEmpty(dtoList)) {
                 log.warn("未采集到正文或附件");
                 continue;
             }
-            EmailContentInfoDTO dto = emailContentInfoDTOList.get(0);
+            EmailContentInfoDTO dto = dtoList.get(0);
             String emailTitle = dto.getEmailTitle();
             if (log.isInfoEnabled()) {
                 log.info("开始解析邮件数据 -> 邮件主题:{},邮件日期:{}", emailTitle, dto.getEmailDate());
             }
-            Long totalSize = emailContentInfoDTOList.stream().map(EmailContentInfoDTO::getFileSize).reduce(0L, Long::sum);
+            Long totalSize = dtoList.stream().map(EmailContentInfoDTO::getFileSize).reduce(0L, Long::sum);
             String errMsg = null;
             int status = 1;
             List<EmailZipFileDTO> emailFileList = ListUtil.list(false);
@@ -179,7 +179,7 @@ public class EmailParseService {
                 status = 0;
                 errMsg = "邮件中存在超大附件,需要手动处理该邮件";
             } else {
-                for (EmailContentInfoDTO emailDto : emailContentInfoDTOList) {
+                for (EmailContentInfoDTO emailDto : dtoList) {
                     // 正文不用解压附件
                     if (emailDto.getFileName() != null && emailDto.getFileName().endsWith(Constants.FILE_HTML)) {
                         continue;
@@ -229,7 +229,7 @@ public class EmailParseService {
                 // 保存相关信息 -> 邮件信息表,邮件文件表,邮件净值表,邮件规模表,基金净值表
                 this.saveRelatedTable(emailId, emailInfo);
                 log.info("结束邮件解析 -> 邮箱信息:{},开始时间:{},结束时间:{}", emailEntry.getValue(),
-                        DateUtil.format(startDate, DateConst.YYYY_MM_DD_HH_MM_SS), DateUtil.format(endDate, DateConst.YYYY_MM_DD_HH_MM_SS));
+                        DateUtil.formatDateTime(startDate), DateUtil.formatDateTime(endDate));
             }
         }
     }
@@ -395,7 +395,9 @@ public class EmailParseService {
         return resultList;
     }
 
-    private void parseAndUpdateResult(Integer emailId, EmailInfoDTO emailInfo, List<ParseResult<ReportData>> dataList) {
+    private void parseAndUpdateResult(Integer emailId,
+                                      EmailInfoDTO emailInfo,
+                                      List<ParseResult<ReportData>> dataList) {
         this.parseResults(emailInfo, dataList);
         String failReason = null;
         int emailParseStatus = EmailParseStatusConst.SUCCESS;
@@ -491,7 +493,7 @@ public class EmailParseService {
             }
         }
         if (CollUtil.isEmpty(dtos)) {
-            log.info("邮件{} 所有文件都已经解析成功过,不能重复解析了", emailTitle);
+            log.info("邮件{} 经校验没有需要解析的报告文件。", emailTitle);
             return;
         }
         if (log.isInfoEnabled()) {
@@ -508,6 +510,7 @@ public class EmailParseService {
     private void parseResults(EmailInfoDTO emailInfo,
                               List<ParseResult<ReportData>> resultList) {
         String emailTitle = emailInfo.getEmailTitle();
+        // 拷贝一个新的集合,方便操作不影响原集合
         List<EmailZipFileDTO> dtos = ListUtil.toList(emailInfo.getEmailFileList());
         if (CollUtil.isEmpty(dtos)) {
             return;
@@ -977,6 +980,7 @@ public class EmailParseService {
         emailParseInfoDO.setEmailDate(DateUtil.parse(emailInfo.getEmailDate(), DateConst.YYYY_MM_DD_HH_MM_SS));
         emailParseInfoDO.setParseDate(new Date());
         emailParseInfoDO.setEmailTitle(emailInfo.getEmailTitle());
+        emailParseInfoDO.setEmailContent(emailInfo.getEmailContent());
         emailParseInfoDO.setParseStatus(EmailParseStatusConst.SUCCESS);
         emailParseInfoDO.setAttrSize(totalSize);
         emailParseInfoDO.setIsvalid(1);
@@ -1198,7 +1202,7 @@ public class EmailParseService {
                 if (log.isDebugEnabled()) {
                     log.debug("邮件{} 获取的正文不做解析,内容是 {}", subject, bodyPartContent);
                 }
-                if (StrUtil.startWithIgnoreCase(bodyPart.getContentType(), MediaType.TEXT_PLAIN_VALUE)) {
+                if (StrUtil.startWithIgnoreCase(bodyPart.getContentType(), MediaType.TEXT_HTML_VALUE)) {
                     contents[0] = bodyPartContent.toString();
                 }
                 continue;

+ 1 - 1
mo-daq/src/test/java/com/smppw/modaq/MoDaqApplicationTests.java

@@ -42,7 +42,7 @@ public class MoDaqApplicationTests {
     @Test
     public void reportTest() {
         MailboxInfoDTO emailInfoDTO = this.buildMailbox("*@simuwang.com", "*");
-        Date startDate = DateUtil.parse("2025-06-19 10:30:00", DateConst.YYYY_MM_DD_HH_MM_SS);
+        Date startDate = DateUtil.parse("2025-06-19 17:30:00", DateConst.YYYY_MM_DD_HH_MM_SS);
         Date endDate = DateUtil.parse("2025-06-19 17:57:00", DateConst.YYYY_MM_DD_HH_MM_SS);
         try {
             List<String> folderNames = ListUtil.list(false);