Explorar el Código

fix:遗漏的时间区间

wangzaijun hace 1 mes
padre
commit
81c07eaa17

+ 13 - 13
mo-daq/src/main/java/com/smppw/modaq/application/task/ParseSchedulerTask.java

@@ -31,21 +31,21 @@ public class ParseSchedulerTask {
 
     @PostConstruct
     public void executeOnStartup() {
-//        try {
-//            // 定期报告从 其他文件夹/报告公告 文件夹获取邮件
-//            this.emailParseApiService.parseEmail(
-//                    DateUtil.parseDateTime("2025-05-12 10:24:00"),
-//                    DateUtil.parseDateTime("2025-05-12 10:25:00"),
-//                    ListUtil.of("其他文件夹/报告公告"), EmailTypeConst.REPORT_EMAIL_TYPES);
-//        } catch (Exception e) {
-//            logger.error(ExceptionUtil.getMessage(e));
-//        }
+        try {
+            // 定期报告从 其他文件夹/报告公告 文件夹获取邮件
+            this.emailParseApiService.parseEmail(
+                    DateUtil.parseDateTime("2025-05-15 11:15:00"),
+                    DateUtil.parseDateTime("2025-05-15 15:25:00"),
+                    ListUtil.of("其他文件夹/报告公告"), EmailTypeConst.REPORT_EMAIL_TYPES);
+        } catch (Exception e) {
+            logger.error(ExceptionUtil.getMessage(e));
+        }
 
         try {
             // 确认函从 INBOX 文件夹获取邮件
             this.emailParseApiService.parseEmail(
-                    DateUtil.parseDateTime("2025-05-13 16:31:00"),
-                    DateUtil.parseDateTime("2025-05-13 16:32:00"),
+                    DateUtil.parseDateTime("2025-05-15 11:44:00"),
+                    DateUtil.parseDateTime("2025-05-15 16:32:00"),
                     null, ListUtil.of(EmailTypeConst.REPORT_LETTER_EMAIL_TYPE));
         } catch (Exception e) {
             logger.error(ExceptionUtil.getMessage(e));
@@ -55,7 +55,7 @@ public class ParseSchedulerTask {
     /**
      * 定时任务每11分钟执行一次
      */
-    @Scheduled(cron = "0 */11 * * * ?")
+    @Scheduled(cron = "0 0 15 * * ?")
     public void letter() {
         String taskKey = "mo_email_parse_letter_task";
         TaskRecordDO task = this.taskRecordService.getTaskRecord(taskKey, 11 * 2 * 60);
@@ -87,7 +87,7 @@ public class ParseSchedulerTask {
     /**
      * 定时任务每60分钟执行一次
      */
-    @Scheduled(cron = "0 15 */1 * * ?")
+    @Scheduled(cron = "0 0 15 * * ?")
     public void report() {
         String taskKey = "mo_email_parser_report_task";
         TaskRecordDO task = this.taskRecordService.getTaskRecord(taskKey, 60 * 2 * 60);

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

@@ -293,80 +293,80 @@ public class EmailParseService {
                 dto.setEmailType(emailType);
             }
 
-            for (EmailZipFileDTO dto : dtos) {
-                String filename = dto.getFilename();
+//            for (EmailZipFileDTO dto : dtos) {
+//                String filename = dto.getFilename();
+//                Integer emailType = dto.getEmailType();
+//                ReportType reportType = ReportParseUtils.matchReportType(emailType, filename);
+//                String reportDate = ReportParseUtils.matchReportDate(reportType, filename);
+//                System.out.println(filename + ",emailType=" + emailType + ",reportType=" + reportType + ",reportDate=" + reportDate);
+//            }
+
+            // 数据库已存在的数据过滤
+            Iterator<EmailZipFileDTO> iterator = dtos.iterator();
+            while (iterator.hasNext()) {
+                EmailZipFileDTO dto = iterator.next();
                 Integer emailType = dto.getEmailType();
-                ReportType reportType = ReportParseUtils.matchReportType(emailType, filename);
-                String reportDate = ReportParseUtils.matchReportDate(reportType, filename);
-                System.out.println(filename + ",emailType=" + emailType + ",reportType=" + reportType + ",reportDate=" + reportDate);
+                String filename = dto.getFilename();
+                int count = 0;
+                if (Objects.equals(emailType, EmailTypeConst.REPORT_LETTER_EMAIL_TYPE)) {
+                    // 确认单
+                    count = this.emailFileInfoMapper.getLetterFilenameSuccessCount(emailTitle, filename);
+                } else if (Objects.equals(emailType, EmailTypeConst.REPORT_EMAIL_TYPE)) {
+                    // 定期报告
+                    count = this.emailFileInfoMapper.getAmacFilenameSuccessCount(emailTitle, filename);
+                } else if (Objects.equals(emailType, EmailTypeConst.REPORT_WEEKLY_TYPE)) {
+                    // 管理人周报
+                    count = this.emailFileInfoMapper.getWeeklyFilenameSuccessCount(emailTitle, filename);
+                } else if (Objects.equals(emailType, EmailTypeConst.REPORT_OTHER_TYPE)) {
+                    // 其他报告
+                    count = this.emailFileInfoMapper.getOtherFilenameSuccessCount(emailTitle, filename);
+                } else {
+                    log.info("邮件{} 类型{} 不支持解析。", emailTitle, emailType);
+                    iterator.remove();
+                }
+                if (count > 0) {
+                    iterator.remove();
+                    log.info("邮件{} 附件{} 已存在解析成功的记录,不用重新解析。", emailTitle, filename);
+                }
+            }
+            if (CollUtil.isEmpty(dtos)) {
+                log.info("邮件{} 所有文件都已经解析成功过,不能重复解析了", emailTitle);
+                continue;
             }
 
-//            // 数据库已存在的数据过滤
-//            Iterator<EmailZipFileDTO> iterator = dtos.iterator();
-//            while (iterator.hasNext()) {
-//                EmailZipFileDTO dto = iterator.next();
-//                Integer emailType = dto.getEmailType();
-//                String filename = dto.getFilename();
-//                int count = 0;
-//                if (Objects.equals(emailType, EmailTypeConst.REPORT_LETTER_EMAIL_TYPE)) {
-//                    // 确认单
-//                    count = this.emailFileInfoMapper.getLetterFilenameSuccessCount(emailTitle, filename);
-//                } else if (Objects.equals(emailType, EmailTypeConst.REPORT_EMAIL_TYPE)) {
-//                    // 定期报告
-//                    count = this.emailFileInfoMapper.getAmacFilenameSuccessCount(emailTitle, filename);
-//                } else if (Objects.equals(emailType, EmailTypeConst.REPORT_WEEKLY_TYPE)) {
-//                    // 管理人周报
-//                    count = this.emailFileInfoMapper.getWeeklyFilenameSuccessCount(emailTitle, filename);
-//                } else if (Objects.equals(emailType, EmailTypeConst.REPORT_OTHER_TYPE)) {
-//                    // 其他报告
-//                    count = this.emailFileInfoMapper.getOtherFilenameSuccessCount(emailTitle, filename);
-//                } else {
-//                    log.info("邮件{} 类型{} 不支持解析。", emailTitle, emailType);
-//                    iterator.remove();
-//                }
-//                if (count > 0) {
-//                    iterator.remove();
-//                    log.info("邮件{} 附件{} 已存在解析成功的记录,不用重新解析。", emailTitle, filename);
-//                }
-//            }
-//            if (CollUtil.isEmpty(dtos)) {
-//                log.info("邮件{} 所有文件都已经解析成功过,不能重复解析了", emailTitle);
-//                continue;
-//            }
-//
-//            Integer emailId = emailDto.getEmailId();
-//            EmailParseInfoDO emailParseInfoDO = this.buildEmailParseInfo(emailId, emailAddress, emailDto);
-//            emailParseInfoDO.setEmailKey(emailKey);
-//            emailId = this.saveEmailParseInfo(emailParseInfoDO);
-//            if (emailId == null) {
-//                continue;
-//            }
-//            for (EmailZipFileDTO zipFile : dtos) {
-//                EmailFileInfoDO emailFile = this.saveEmailFileInfo(emailId, zipFile.getFilename(), zipFile.getFilepath());
-//                // 解析并保存报告
-//                ParseResult<ReportData> parseResult = this.parseReportAndHandleResult(emailTitle, emailFile, zipFile);
-//                dataList.add(parseResult);
-//            }
-//
-//            String failReason = null;
-//            int emailParseStatus = EmailParseStatusConst.SUCCESS;
-//            // 报告邮件有一条失败就表示整个邮件解析失败
-//            if (CollUtil.isNotEmpty(dataList)) {
-//                // ai解析结果
-//                List<ReportData> aiParaseList = dataList.stream().map(ParseResult::getData)
-//                        .filter(Objects::nonNull).filter(e -> Objects.equals(true, e.getAiParse())).toList();
-//                if (CollUtil.isNotEmpty(aiParaseList)) {
-//                    for (ReportData data : aiParaseList) {
-//                        this.emailFileInfoMapper.updateAiParseByFileId(data.getBaseInfo().getFileId(), data.getAiParse(), data.getAiFileId());
-//                    }
-//                }
-//                long failNum = dataList.stream().filter(e -> !Objects.equals(EmailParseStatusConst.SUCCESS, e.getStatus())).count();
-//                if (failNum > 0) {
-//                    emailParseStatus = EmailParseStatusConst.FAIL;
-//                    failReason = dataList.stream().map(ParseResult::getMsg).collect(Collectors.joining(";"));
-//                }
-//            }
-//            emailParseInfoMapper.updateParseStatus(emailId, emailParseStatus, failReason);
+            Integer emailId = emailDto.getEmailId();
+            EmailParseInfoDO emailParseInfoDO = this.buildEmailParseInfo(emailId, emailAddress, emailDto);
+            emailParseInfoDO.setEmailKey(emailKey);
+            emailId = this.saveEmailParseInfo(emailParseInfoDO);
+            if (emailId == null) {
+                continue;
+            }
+            for (EmailZipFileDTO zipFile : dtos) {
+                EmailFileInfoDO emailFile = this.saveEmailFileInfo(emailId, zipFile.getFilename(), zipFile.getFilepath());
+                // 解析并保存报告
+                ParseResult<ReportData> parseResult = this.parseReportAndHandleResult(emailTitle, emailFile, zipFile);
+                dataList.add(parseResult);
+            }
+
+            String failReason = null;
+            int emailParseStatus = EmailParseStatusConst.SUCCESS;
+            // 报告邮件有一条失败就表示整个邮件解析失败
+            if (CollUtil.isNotEmpty(dataList)) {
+                // ai解析结果
+                List<ReportData> aiParaseList = dataList.stream().map(ParseResult::getData)
+                        .filter(Objects::nonNull).filter(e -> Objects.equals(true, e.getAiParse())).toList();
+                if (CollUtil.isNotEmpty(aiParaseList)) {
+                    for (ReportData data : aiParaseList) {
+                        this.emailFileInfoMapper.updateAiParseByFileId(data.getBaseInfo().getFileId(), data.getAiParse(), data.getAiFileId());
+                    }
+                }
+                long failNum = dataList.stream().filter(e -> !Objects.equals(EmailParseStatusConst.SUCCESS, e.getStatus())).count();
+                if (failNum > 0) {
+                    emailParseStatus = EmailParseStatusConst.FAIL;
+                    failReason = dataList.stream().map(ParseResult::getMsg).collect(Collectors.joining(";"));
+                }
+            }
+            emailParseInfoMapper.updateParseStatus(emailId, emailParseStatus, failReason);
         }
     }