Selaa lähdekoodia

fix:邮件解析结果优化

wangzaijun 1 päivä sitten
vanhempi
commit
a66ef7278f

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

@@ -116,7 +116,7 @@ public class EmailParseApiServiceImpl implements EmailParseApiService {
                     Files.copy(is, Path.of(filepath));
                 } catch (IOException e) {
                     log.warn("文件{} 上传失败:{}", filename, ExceptionUtil.stacktraceToString(e));
-                    dataList.add(new UploadReportResult(filepath, ReportParseStatus.FILE_UPLOAD_FAIL));
+                    dataList.add(new UploadReportResult(filename, ReportParseStatus.FILE_UPLOAD_FAIL));
                 }
             }
             params.getReportInfos().add(new UploadReportParams.ReportInfo(filepath));

+ 4 - 0
mo-daq/src/main/java/com/smppw/modaq/domain/dto/EmailInfoDTO.java

@@ -1,9 +1,11 @@
 package com.smppw.modaq.domain.dto;
 
 import cn.hutool.core.collection.ListUtil;
+import cn.hutool.core.date.DateUtil;
 import lombok.Getter;
 import lombok.Setter;
 
+import java.util.Date;
 import java.util.List;
 
 @Setter
@@ -41,6 +43,8 @@ public class EmailInfoDTO {
     public EmailInfoDTO(String emailTitle, List<EmailZipFileDTO> emailFileList) {
         this();
         this.emailTitle = emailTitle;
+        this.senderEmail = "upload";
+        this.emailDate = DateUtil.formatDateTime(new Date());
         this.emailFileList = emailFileList;
     }
 

+ 7 - 5
mo-daq/src/main/java/com/smppw/modaq/domain/dto/UploadReportResult.java

@@ -7,21 +7,23 @@ import lombok.Setter;
 @Setter
 @Getter
 public class UploadReportResult {
-    private String reportPath;
+    private Integer fileId;
+    private String reportName;
     private int status;
     private String msg;
 
     public UploadReportResult() {
     }
 
-    public UploadReportResult(String reportPath, int status, String msg) {
-        this.reportPath = reportPath;
+    public UploadReportResult(Integer fileId, String reportName, int status, String msg) {
+        this.fileId = fileId;
+        this.reportName = reportName;
         this.status = status;
         this.msg = msg;
     }
 
-    public UploadReportResult(String reportPath, ReportParseStatus status) {
-        this.reportPath = reportPath;
+    public UploadReportResult(String reportName, ReportParseStatus status) {
+        this.reportName = reportName;
         this.status = status.getCode();
         this.msg = status.getMsg();
     }

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

@@ -332,21 +332,7 @@ public class EmailParseService {
     public void saveRelatedTable(Integer emailId, EmailInfoDTO emailInfo) {
         // 解析并保存数据
         List<ParseResult<ReportData>> dataList = ListUtil.list(true);
-        this.parseResults(emailInfo, dataList);
-
-        String failReason = null;
-        int emailParseStatus = EmailParseStatusConst.SUCCESS;
-        // 报告邮件有一条失败就表示整个邮件解析失败
-        if (CollUtil.isNotEmpty(dataList)) {
-            List<EmailFileInfoDO> entityList = this.buildEmailFileInfo(dataList);
-            this.emailFileInfoMapper.batchUpdateByFileId(entityList);
-            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(";"));
-            }
-        }
-        this.emailParseInfoMapper.updateParseStatus(emailId, emailParseStatus, failReason);
+        this.parseAndUpdateResult(emailId, emailInfo, dataList);
     }
 
     private List<EmailFileInfoDO> buildEmailFileInfo(List<ParseResult<ReportData>> dataList) {
@@ -392,11 +378,6 @@ public class EmailParseService {
         // 重新判断类型
         this.recheckEmailType(emailTitle, dtos);
         EmailInfoDTO emailInfo = new EmailInfoDTO(emailTitle, dtos);
-//        // 附件文件检查
-//        Long totalSize = this.checkEmailFileInfo(emailInfo);
-//        if (totalSize == null) {
-//            return null;
-//        }
         Long totalSize = dtos.stream().map(EmailZipFileDTO::getFileSize).reduce(0L, Long::sum);
         EmailParseInfoDO emailDo = this.buildEmailParseInfo("upload", emailInfo, totalSize);
         Integer emailId = this.saveEmailParseInfo(emailDo);
@@ -404,15 +385,35 @@ public class EmailParseService {
             EmailFileInfoDO emailFile = this.saveEmailFileInfo(emailId, zipFile.getFilename(), zipFile.getFilepath());
             zipFile.setFileId(emailFile.getId());
         }
-        this.parseResults(emailInfo, dataList);
+        // 解析并处理解析结果
+        this.parseAndUpdateResult(emailId, emailInfo, dataList);
+        // 解析结果转换
         List<UploadReportResult> resultList = ListUtil.list(false);
         for (ParseResult<ReportData> result : dataList) {
             ReportData data = result.getData();
-            resultList.add(new UploadReportResult(data.getReportPath(), result.getStatus(), result.getMsg()));
+            resultList.add(new UploadReportResult(data.getBaseInfo().getFileId(),
+                    data.getBaseInfo().getReportName(), result.getStatus(), result.getMsg()));
         }
         return resultList;
     }
 
+    private void parseAndUpdateResult(Integer emailId, EmailInfoDTO emailInfo, List<ParseResult<ReportData>> dataList) {
+        this.parseResults(emailInfo, dataList);
+        String failReason = null;
+        int emailParseStatus = EmailParseStatusConst.SUCCESS;
+        // 报告邮件有一条失败就表示整个邮件解析失败
+        if (CollUtil.isNotEmpty(dataList)) {
+            List<EmailFileInfoDO> entityList = this.buildEmailFileInfo(dataList);
+            this.emailFileInfoMapper.batchUpdateByFileId(entityList);
+            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(";"));
+            }
+        }
+        this.emailParseInfoMapper.updateParseStatus(emailId, emailParseStatus, failReason);
+    }
+
     /**
      * 重新校验邮件附件的类型(用邮件主题+附件名称)
      *