Prechádzať zdrojové kódy

fix:日期处理优化

wangzaijun 13 hodín pred
rodič
commit
e33552f663

+ 3 - 0
mo-daq/src/main/java/com/smppw/modaq/application/service/EmailParseApiServiceImpl.java

@@ -101,8 +101,10 @@ public class EmailParseApiServiceImpl implements EmailParseApiService {
     public List<UploadReportResult> uploadUrlReport(UploadUrlReportParams params) {
         List<UploadReportParams.ReportInfo> reportInfos = ListUtil.list(false);
         List<UploadUrlReportParams.UrlReportInfo> urlReportInfos = params.getReportInfos();
+        List<String> contents = ListUtil.list(false);
         for (UploadUrlReportParams.UrlReportInfo urlReportInfo : urlReportInfos) {
             String reportUrl = urlReportInfo.getReportUrl();
+            contents.add(reportUrl);
             String filename;
             if (StrUtil.isNotBlank(getFileExtension(urlReportInfo.getReportName()))) {
                 filename = urlReportInfo.getReportName();
@@ -124,6 +126,7 @@ public class EmailParseApiServiceImpl implements EmailParseApiService {
         }
         UploadReportParams req = new UploadReportParams();
         req.setReportInfos(reportInfos);
+        req.setContent(String.join(",\n", contents));
         if (StrUtil.isBlank(params.getTitle())) {
             req.setTitle("报告上传解析-url");
         } else {

+ 0 - 12
mo-daq/src/main/java/com/smppw/modaq/common/conts/DateConst.java

@@ -1,12 +0,0 @@
-package com.smppw.modaq.common.conts;
-
-public class DateConst {
-
-    public final static String YYYY_MM_DD_HH_MM_SS = "yyyy-MM-dd HH:mm:ss";
-    public final static String YYYY_MM_DD_HH_MM = "yyyy-MM-dd HH:mm";
-    public final static String YYYY_MM_DD = "yyyy-MM-dd";
-    public final static String YYYYMMDD = "yyyyMMdd";
-    public final static String YYYYMMDDHHMMSS = "yyyyMMddHHmmssSSS";
-    public final static String YYYYMMDDHHMMSS24 = "yyyyMMddHHmmss";
-
-}

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

@@ -14,6 +14,7 @@ import java.util.List;
 @Getter
 public class UploadReportParams {
     private String title;
+    private String content;
     private List<ReportInfo> reportInfos;
 
     public UploadReportParams() {

+ 14 - 8
mo-daq/src/main/java/com/smppw/modaq/domain/service/EmailParseService.java

@@ -2,6 +2,7 @@ package com.smppw.modaq.domain.service;
 
 import cn.hutool.core.collection.CollUtil;
 import cn.hutool.core.collection.ListUtil;
+import cn.hutool.core.date.DatePattern;
 import cn.hutool.core.date.DateUtil;
 import cn.hutool.core.exceptions.ExceptionUtil;
 import cn.hutool.core.io.FileUtil;
@@ -18,7 +19,6 @@ import com.smppw.modaq.application.components.report.writer.ReportWriter;
 import com.smppw.modaq.application.components.report.writer.ReportWriterFactory;
 import com.smppw.modaq.application.util.EmailUtil;
 import com.smppw.modaq.common.conts.Constants;
-import com.smppw.modaq.common.conts.DateConst;
 import com.smppw.modaq.common.conts.EmailParseStatusConst;
 import com.smppw.modaq.common.conts.EmailTypeConst;
 import com.smppw.modaq.common.enums.ReportMonthlyType;
@@ -380,7 +380,11 @@ public class EmailParseService {
         }
         // 重新判断类型
         this.recheckEmailType(emailTitle, dtos);
+        // 解析数据和报告列表构建
         EmailInfoDTO emailInfo = new EmailInfoDTO(emailTitle, dtos);
+        if (StrUtil.isNotBlank(params.getContent())) {
+            emailInfo.setEmailContent(params.getContent());
+        }
         Long totalSize = dtos.stream().map(EmailZipFileDTO::getFileSize).reduce(0L, Long::sum);
         EmailParseInfoDO emailDo = this.buildEmailParseInfo("upload", emailInfo, totalSize);
         Integer emailId = this.saveEmailParseInfo(emailDo);
@@ -451,6 +455,8 @@ public class EmailParseService {
      * @param dtos       邮件信息(包含所有解压后的文件)
      */
     private void checkEmailFileInfo(String emailTitle, List<EmailZipFileDTO> dtos) {
+        // 删除前置处理失败的文件
+        dtos.removeIf(e -> !Objects.equals(1, e.getParseStatus()));
         // 如果压缩包里面既有pdf又有其他格式的文件,说明其他格式的文件是不需要解析的
         List<String> exts = dtos.stream().map(EmailZipFileDTO::getExtName).distinct().toList();
         if (exts.contains(Constants.FILE_PDF) && exts.size() > 1) {
@@ -469,7 +475,7 @@ public class EmailParseService {
             // 不支持的类型
             Integer type = dto.getEmailType();
             if (!EmailTypeConst.SUPPORT_EMAIL_TYPES.contains(type)) {
-                log.info("邮件{} 类型{} 不支持解析。", emailTitle, type);
+                log.warn("邮件{} 报告{} 的类型是{} 不支持解析。", emailTitle, filename, type);
                 removeIterator.remove();
             }
         }
@@ -864,7 +870,7 @@ public class EmailParseService {
      *
      * @param fileId     文件ID
      * @param reportType 报告类型
-     * @param reportName   报告名称
+     * @param reportName 报告名称
      * @return /
      */
     private ReportData buildNvlReportData(Integer fileId, ReportType reportType, String reportName) {
@@ -989,7 +995,7 @@ public class EmailParseService {
         emailParseInfoDO.setId(null);
         emailParseInfoDO.setSenderEmail(emailInfo.getSenderEmail());
         emailParseInfoDO.setEmail(emailAddress);
-        emailParseInfoDO.setEmailDate(DateUtil.parse(emailInfo.getEmailDate(), DateConst.YYYY_MM_DD_HH_MM_SS));
+        emailParseInfoDO.setEmailDate(DateUtil.parseDateTime(emailInfo.getEmailDate()));
         emailParseInfoDO.setParseDate(new Date());
         emailParseInfoDO.setEmailTitle(emailInfo.getEmailTitle());
         emailParseInfoDO.setEmailContent(emailInfo.getEmailContent());
@@ -1074,7 +1080,7 @@ public class EmailParseService {
             }
             try {
                 Date emailDate = message.getSentDate();
-                String emailDateStr = DateUtil.format(emailDate, DateConst.YYYY_MM_DD_HH_MM_SS);
+                String emailDateStr = DateUtil.formatDateTime(emailDate);
                 if (log.isInfoEnabled()) {
                     log.info("{} 邮件{} 数据获取中,邮件时间:{}", folderName, emailTitle, emailDateStr);
                 }
@@ -1190,16 +1196,16 @@ public class EmailParseService {
         emailContentInfoDTO.setFilePath(saveFile.getAbsolutePath());
         emailContentInfoDTO.setEmailAddress(account);
         emailContentInfoDTO.setEmailTitle(subject);
-        emailContentInfoDTO.setEmailDate(DateUtil.format(sendDate, DateConst.YYYY_MM_DD_HH_MM_SS));
+        emailContentInfoDTO.setEmailDate(DateUtil.formatDateTime(sendDate));
         emailContentInfoDTOList.add(emailContentInfoDTO);
     }
 
     public File generateSavePath(String account, Date sendDate, String fileName) {
-        String emailDateStr = DateUtil.format(sendDate, DateConst.YYYYMMDD);
+        String emailDateStr = DateUtil.formatDate(sendDate);
         String filePath = this.path + File.separator + account + File.separator +
                 emailDateStr + File.separator + "original" + File.separator;
         // 压缩包重名时的后面的压缩包会覆盖前面压缩包的问题(不考虑普通文件)
-        String emailDate = DateUtil.format(sendDate, DateConst.YYYYMMDDHHMMSS24);
+        String emailDate = DateUtil.format(sendDate, DatePattern.PURE_DATETIME_PATTERN);
         String realName = ArchiveUtil.isArchive(fileName) ? emailDate + fileName : fileName;
         return FileUtil.file(filePath + realName);
     }

+ 2 - 2
mo-daq/src/main/java/com/smppw/modaq/infrastructure/util/ConvertUtil.java

@@ -3,7 +3,6 @@ package com.smppw.modaq.infrastructure.util;
 import cn.hutool.core.date.DatePattern;
 import cn.hutool.core.date.DateUtil;
 import cn.hutool.core.util.StrUtil;
-import com.smppw.modaq.common.conts.DateConst;
 import com.smppw.modaq.common.conts.PatternConsts;
 
 import java.math.BigDecimal;
@@ -33,8 +32,9 @@ public class ConvertUtil {
                 // 日期格式化,支持格式如下:yyyy年MM月dd日、yyyy-MM-dd、yyyy/MM/dd、yyyy_MM_dd和yyyyMMdd
                 return DateUtil.parse(matcher.group(),
                         DatePattern.CHINESE_DATE_PATTERN,
-                        DateConst.YYYYMMDD,
+                        DatePattern.PURE_DATE_PATTERN,
                         DatePattern.NORM_DATE_PATTERN,
+                        DatePattern.CHINESE_DATE_PATTERN,
                         "yyyy/MM/dd",
                         "yyyy_MM_dd",
                         "yyyy.MM.dd",

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

@@ -2,8 +2,6 @@ package com.smppw.modaq;
 
 import cn.hutool.core.collection.ListUtil;
 import cn.hutool.core.date.DateUtil;
-import com.smppw.modaq.application.service.EmailParseApiService;
-import com.smppw.modaq.common.conts.DateConst;
 import com.smppw.modaq.common.conts.EmailTypeConst;
 import com.smppw.modaq.domain.dto.MailboxInfoDTO;
 import com.smppw.modaq.domain.service.EmailParseService;
@@ -20,14 +18,11 @@ public class MoDaqApplicationTests {
     @Autowired
     private EmailParseService emailParseService;
 
-    @Autowired
-    private EmailParseApiService emailParseApiService;
-
     @Test
     public void letterTest() {
         MailboxInfoDTO emailInfoDTO = this.buildMailbox("**@simuwang.com", "**");
-        Date startDate = DateUtil.parse("2025-06-18 17:00:00", DateConst.YYYY_MM_DD_HH_MM_SS);
-        Date endDate = DateUtil.parse("2025-06-18 18:56:00", DateConst.YYYY_MM_DD_HH_MM_SS);
+        Date startDate = DateUtil.parseDateTime("2025-06-18 17:00:00");
+        Date endDate = DateUtil.parseDateTime("2025-06-18 18:56:00");
         try {
             List<String> folderNames = ListUtil.list(false);
 //            folderNames.add("其他文件夹/报告公告");
@@ -42,8 +37,8 @@ public class MoDaqApplicationTests {
     @Test
     public void reportTest() {
         MailboxInfoDTO emailInfoDTO = this.buildMailbox("*@simuwang.com", "*");
-        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);
+        Date startDate = DateUtil.parseDateTime("2025-06-19 17:30:00");
+        Date endDate = DateUtil.parseDateTime("2025-06-19 17:57:00");
         try {
             List<String> folderNames = ListUtil.list(false);
 //            folderNames.add("其他文件夹/报告公告");