Jelajahi Sumber

fix:解析记录结果保存逻辑优化

wangzaijun 18 jam lalu
induk
melakukan
ebeeb31c9f

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

@@ -13,17 +13,21 @@ public class EmailZipFileDTO {
     private final String filename;
     private final String filepath;
     private final long fileSize;
+    private final String extName;
+
     // pdf文件的密码(需要密码时)
     private String pdfPwd;
     @Setter
     private Integer emailType;
-
-    private final String extName;
-
     @Setter
     private Integer fileId;
+    @Setter
+    private Integer parseStatus;
+    @Setter
+    private String failReason;
 
     public EmailZipFileDTO(String emailTitle, String filepath, Integer emailType) {
+        this.parseStatus = 1;
         File file = FileUtil.file(filepath);
         this.emailTitle = emailTitle;
         this.filepath = filepath;
@@ -34,6 +38,7 @@ public class EmailZipFileDTO {
     }
 
     public EmailZipFileDTO(String emailTitle, EmailContentInfoDTO emailDto) {
+        this.parseStatus = 1;
         this.emailTitle = emailTitle;
         this.filepath = emailDto.getFilePath();
         this.emailType = emailDto.getEmailType();
@@ -44,6 +49,7 @@ public class EmailZipFileDTO {
     }
 
     public EmailZipFileDTO(String emailTitle, UploadReportParams.ReportInfo uploadReportInfo) {
+        this.parseStatus = 1;
         File file = FileUtil.file(uploadReportInfo.getReportPath());
         this.emailTitle = emailTitle;
         this.filepath = uploadReportInfo.getReportPath();

+ 1 - 1
mo-daq/src/main/java/com/smppw/modaq/domain/mapper/EmailFileInfoMapper.java

@@ -17,7 +17,7 @@ public interface EmailFileInfoMapper extends BaseMapper<EmailFileInfoDO> {
 //
 //    List<EmailFileInfoDO> getEmailFileByEmailId(@Param("emailId") Integer emailId);
 
-    List<EmailFileInfoDO> queryByEmailId(@Param("emailId") Integer emailId);
+//    List<EmailFileInfoDO> queryByEmailId(@Param("emailId") Integer emailId);
 
 //    List<FundFileInfoVO> searchFundFileInfo(FundFilePageQuery fundFilePageQuery);
 //

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

@@ -188,12 +188,12 @@ public class EmailParseService {
                         emailFileList.addAll(this.parseZipEmail(emailDto));
                     } catch (IOException e) {
                         log.error("邮件{} 压缩包解压失败:{}", emailTitle, ExceptionUtil.stacktraceToString(e));
-                        status = 0;
-                        errMsg = "压缩包解压失败";
+                        EmailZipFileDTO zipFileDTO = new EmailZipFileDTO(emailTitle, emailDto);
+                        zipFileDTO.setParseStatus(0);
+                        zipFileDTO.setFailReason("压缩包解压失败");
+                        emailFileList.add(zipFileDTO);
                     } catch (Exception e) {
                         log.error("邮件{} 堆栈信息:{}", emailTitle, ExceptionUtil.stacktraceToString(e));
-                        status = 0;
-                        errMsg = "内部错误";
                     }
                 }
                 // 重新判断类型
@@ -222,7 +222,11 @@ public class EmailParseService {
             Integer emailId = this.saveEmailParseInfo(emailDo);
             // 保存附件(解压后的)
             for (EmailZipFileDTO zipFile : emailFileList) {
-                EmailFileInfoDO emailFile = this.saveEmailFileInfo(emailId, zipFile.getFilename(), zipFile.getFilepath());
+                EmailFileInfoDO emailFile = this.saveEmailFileInfo(emailId, zipFile);
+                if (!Objects.equals(1, zipFile.getParseStatus()) || StrUtil.isNotBlank(zipFile.getFailReason())) {
+                    emailFile.setParseStatus(zipFile.getParseStatus());
+                    emailFile.setFailReason(zipFile.getFailReason());
+                }
                 zipFile.setFileId(emailFile.getId());
             }
             if (CollUtil.isNotEmpty(emailFileList)) {
@@ -355,22 +359,23 @@ public class EmailParseService {
      * @return /
      */
     public List<UploadReportResult> uploadReportResults(UploadReportParams params) {
-        List<ParseResult<ReportData>> dataList = ListUtil.list(false);
         String emailTitle = params.getTitle();
         List<UploadReportParams.ReportInfo> reportInfos = params.getReportInfos();
         List<EmailZipFileDTO> dtos = ListUtil.list(false);
         for (UploadReportParams.ReportInfo e : reportInfos) {
+            EmailZipFileDTO zipFileDTO = new EmailZipFileDTO(emailTitle, e);
             String reportPath = e.getReportPath();
             if (ArchiveUtil.isArchive(reportPath)) {
                 try {
                     this.handleCompressedFiles(emailTitle, reportPath, e.getReportType(), dtos);
                 } catch (Exception ex) {
                     log.warn("报告{} 压缩包解压失败:{}", reportPath, ExceptionUtil.stacktraceToString(ex));
-                    ReportData reportData = new ReportData.DefaultReportData();
-                    dataList.add(new ParseResult<>(ReportParseStatus.ARCHIVE_FAIL, reportData));
+                    zipFileDTO.setParseStatus(0);
+                    zipFileDTO.setFailReason("压缩包解压失败");
+                    dtos.add(zipFileDTO);
                 }
             } else {
-                dtos.add(new EmailZipFileDTO(emailTitle, e));
+                dtos.add(zipFileDTO);
             }
         }
         // 重新判断类型
@@ -380,10 +385,11 @@ public class EmailParseService {
         EmailParseInfoDO emailDo = this.buildEmailParseInfo("upload", emailInfo, totalSize);
         Integer emailId = this.saveEmailParseInfo(emailDo);
         for (EmailZipFileDTO zipFile : dtos) {
-            EmailFileInfoDO emailFile = this.saveEmailFileInfo(emailId, zipFile.getFilename(), zipFile.getFilepath());
+            EmailFileInfoDO emailFile = this.saveEmailFileInfo(emailId, zipFile);
             zipFile.setFileId(emailFile.getId());
         }
         // 解析并处理解析结果
+        List<ParseResult<ReportData>> dataList = ListUtil.list(false);
         this.parseAndUpdateResult(emailId, emailInfo, dataList);
         // 解析结果转换
         List<UploadReportResult> resultList = ListUtil.list(false);
@@ -422,7 +428,8 @@ public class EmailParseService {
      */
     private void recheckEmailType(String emailTitle, List<EmailZipFileDTO> dtos) {
         for (EmailZipFileDTO emailFile : dtos) {
-            if (EmailTypeConst.SUPPORT_NO_OTHER_TYPES.contains(emailFile.getEmailType())) {
+            if (EmailTypeConst.SUPPORT_NO_OTHER_TYPES.contains(emailFile.getEmailType())
+                    || !Objects.equals(1, emailFile.getParseStatus())) {
                 continue;
             }
             Integer type = EmailUtil.getEmailTypeBySubject(emailTitle + emailFile.getFilename());
@@ -913,9 +920,14 @@ public class EmailParseService {
         }
     }
 
-    private EmailFileInfoDO saveEmailFileInfo(Integer emailId, String fileName, String filePath) {
-        EmailFileInfoDO emailFileInfoDO = buildEmailFileInfoDO(emailId, fileName, filePath);
-//        emailFileInfoDO.setAiFileId(null);
+    private EmailFileInfoDO saveEmailFileInfo(Integer emailId, EmailZipFileDTO zipFile) {
+        String filename = zipFile.getFilename();
+        String filepath = zipFile.getFilepath();
+        EmailFileInfoDO emailFileInfoDO = this.buildEmailFileInfoDO(emailId, filename, filepath);
+        if (!Objects.equals(1, zipFile.getParseStatus()) || StrUtil.isNotBlank(zipFile.getFailReason())) {
+            emailFileInfoDO.setParseStatus(zipFile.getParseStatus());
+            emailFileInfoDO.setFailReason(zipFile.getFailReason());
+        }
         if (emailFileInfoDO.getId() != null) {
             this.emailFileInfoMapper.updateTimeById(emailFileInfoDO.getId(), new Date());
             return emailFileInfoDO;
@@ -923,8 +935,8 @@ public class EmailParseService {
 
         LambdaQueryWrapper<EmailFileInfoDO> wrapper = Wrappers.lambdaQuery(EmailFileInfoDO.class)
                 .eq(EmailFileInfoDO::getEmailId, emailId)
-                .eq(EmailFileInfoDO::getFileName, fileName)
-                .eq(EmailFileInfoDO::getFilePath, filePath);
+                .eq(EmailFileInfoDO::getFileName, filename)
+                .eq(EmailFileInfoDO::getFilePath, filepath);
         List<EmailFileInfoDO> tempList = this.emailFileInfoMapper.selectList(wrapper);
         if (CollUtil.isNotEmpty(tempList)) {
             return tempList.get(0);

+ 14 - 12
mo-daq/src/main/resources/mapper/EmailFileInfoMapper.xml

@@ -7,6 +7,8 @@
         <result column="file_name" property="fileName"/>
         <result column="file_path" property="filePath"/>
         <result column="ai_parse" property="aiParse"/>
+        <result column="parse_status" property="parseStatus"/>
+        <result column="fail_reason" property="failReason"/>
 <!--        <result column="ai_file_id" property="aiFileId"/>-->
         <result column="isvalid" property="isvalid"/>
         <result column="creatorid" property="creatorId"/>
@@ -17,9 +19,9 @@
 
     <insert id="insertById" parameterType="com.smppw.modaq.domain.entity.EmailFileInfoDO" useGeneratedKeys="true"
             keyProperty="id" keyColumn="id">
-        insert into mo_email_file_info(email_id, file_name, file_path,
+        insert into mo_email_file_info(email_id, file_name, file_path,parse_status,fail_reason,
                                               isvalid, creatorid, createtime, updaterid, updatetime)
-        values (#{itemDo.emailId}, #{itemDo.fileName}, #{itemDo.filePath},
+        values (#{itemDo.emailId}, #{itemDo.fileName}, #{itemDo.filePath},#{itemDo.parseStatus},#{itemDo.failReason},
                 #{itemDo.isvalid}, #{itemDo.creatorId}, #{itemDo.createTime}, #{itemDo.updaterId}, #{itemDo.updateTime})
     </insert>
 
@@ -37,12 +39,12 @@
 <!--        from mo_email_file_info where email_id=#{emailId} and isvalid=1-->
 <!--    </select>-->
 
-    <select id="queryByEmailId" resultMap="BaseResultMap">
-        select id, file_name, file_path,ai_parse
-        from mo_email_file_info
-        where email_id = #{emailId}
-          and isvalid = 1
-    </select>
+<!--    <select id="queryByEmailId" resultMap="BaseResultMap">-->
+<!--        select id, file_name, file_path,ai_parse-->
+<!--        from mo_email_file_info-->
+<!--        where email_id = #{emailId}-->
+<!--          and isvalid = 1-->
+<!--    </select>-->
 <!--    <select id="searchFundFileInfo" resultType="com.simuwang.base.pojo.vo.FundFileInfoVO">-->
 <!--        SELECT DISTINCT efi.id as "fileId",-->
 <!--        <if test="fileType != 3">-->
@@ -253,7 +255,7 @@
                  join mo_report_base_info b on b.file_id = a.id and b.report_type = 'LETTER'
                  join mo_report_fund_transaction c on a.id = c.file_id and c.fund_name is not null
                  join mo_report_investor_info d on a.id = d.file_id and d.investor_name is not null
-        where a.file_name = #{filename} and a.isvalid = 1
+        where a.file_name = #{filename} and a.isvalid = 1 and a.parse_status = 1
     </select>
 
     <select id="getAmacFilenameSuccessCount" resultType="int">
@@ -262,7 +264,7 @@
                  join mo_email_parse_info e on e.id = a.email_id and e.email_title = #{emailTitle} and e.attr_size = #{fileSize}
                  join mo_report_base_info b on b.file_id = a.id and b.report_type in ('MONTHLY', 'QUARTERLY', 'ANNUALLY')
                  join mo_report_fund_info c on a.id = c.file_id and (c.fund_name is not null or c.fund_code is not null)
-        where a.file_name = #{filename} and a.isvalid = 1
+        where a.file_name = #{filename} and a.isvalid = 1 and a.parse_status = 1
     </select>
 
     <select id="getWeeklyFilenameSuccessCount" resultType="int">
@@ -271,7 +273,7 @@
                  join mo_email_parse_info e on e.id = a.email_id and e.email_title = #{emailTitle} and e.attr_size = #{fileSize}
                  join mo_report_base_info b on b.file_id = a.id and b.report_type = 'WEEKLY'
                  join mo_report_fund_info c on a.id = c.file_id and (c.fund_name is not null or c.fund_code is not null)
-        where a.file_name = #{filename} and a.isvalid = 1
+        where a.file_name = #{filename} and a.isvalid = 1 and a.parse_status = 1
     </select>
 
     <select id="getOtherFilenameSuccessCount" resultType="int">
@@ -279,6 +281,6 @@
         from mo_email_file_info a
                  join mo_email_parse_info e on e.id = a.email_id and e.email_title = #{emailTitle} and e.attr_size = #{fileSize}
                  join mo_report_base_info b on b.file_id = a.id and b.report_type = 'OTHER'
-        where a.file_name = #{filename} and a.isvalid = 1
+        where a.file_name = #{filename} and a.isvalid = 1 and a.parse_status = 1
     </select>
 </mapper>