Bladeren bron

feat:破坏性改动下载的附件解压的文件和图片单独存目录

wangzaijun 2 weken geleden
bovenliggende
commit
1da26cf8c0

+ 3 - 2
mo-daq/src/main/java/com/smppw/modaq/application/components/OCRReportParser.java

@@ -1,5 +1,6 @@
 package com.smppw.modaq.application.components;
 
+import cn.hutool.core.exceptions.ExceptionUtil;
 import cn.hutool.core.io.IORuntimeException;
 import cn.hutool.core.map.MapUtil;
 import cn.hutool.core.util.NumberUtil;
@@ -56,7 +57,7 @@ public class OCRReportParser {
         } catch (IORuntimeException e) {
             throw new ReportParseException(ReportParseStatus.AI_NOT_FOUND);
         } catch (Exception e) {
-            this.logger.warn("报告{} OCR提取月报类型错误:{}", filename, e.getMessage());
+            this.logger.warn("报告{} OCR提取月报类型错误:{}", filename, ExceptionUtil.stacktraceToString(e));
             throw new ReportParseException(ReportParseStatus.SYSTEM_ERROR);
         } finally {
             if (logger.isInfoEnabled()) {
@@ -92,7 +93,7 @@ public class OCRReportParser {
         } catch (IORuntimeException e) {
             throw new ReportParseException(ReportParseStatus.AI_NOT_FOUND);
         } catch (Exception e) {
-            this.logger.warn("报告{} OCR识别错误:{}", filename, e.getMessage());
+            this.logger.warn("报告{} OCR识别错误:{}", filename, ExceptionUtil.stacktraceToString(e));
             throw new ReportParseException(ReportParseStatus.SYSTEM_ERROR);
         } finally {
             if (logger.isInfoEnabled()) {

+ 3 - 3
mo-daq/src/main/java/com/smppw/modaq/common/conts/Constants.java

@@ -5,9 +5,9 @@ public class Constants {
 
     public static final String WATERMARK_REPLACE = "+_+" + System.lineSeparator();
 
-    public static final String ARCHIVE_ZIP = "zip";
-    public static final String ARCHIVE_7Z = "7z";
-    public static final String ARCHIVE_RAR = "rar";
+    public static final String ARCHIVE_ZIP = ".zip";
+    public static final String ARCHIVE_7Z = ".7z";
+    public static final String ARCHIVE_RAR = ".rar";
 
     public static final String FILE_PDF = "pdf";
     public static final String FILE_PNG = "png";

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

@@ -159,7 +159,8 @@ public class EmailParseService {
                     emailFileList.addAll(this.parseZipEmail(emailDto));
                 } catch (IOException e) {
                     log.error("压缩包解压失败:{}", ExceptionUtil.stacktraceToString(e));
-                    EmailParseInfoDO fail = buildEmailParseInfo(mailboxInfoDTO.getAccount(), dto.getEmailType(), emailInfo, emailDto.getFileSize());
+                    EmailParseInfoDO fail = buildEmailParseInfo(mailboxInfoDTO.getAccount(),
+                            dto.getEmailType(), emailInfo, emailDto.getFileSize());
                     fail.setFailReason("压缩包解压失败");
                     fail.setParseStatus(EmailParseStatusConst.FAIL);
                     fail.setEmailKey(emailEntry.getKey());
@@ -232,7 +233,8 @@ public class EmailParseService {
 
     private void handleCompressedFiles(String emailTitle, String filepath, String extension,
                                        Integer emailType, List<EmailZipFileDTO> resultList) throws IOException {
-        String destPath = getDestinationPath(filepath, extension);
+        String parent = FileUtil.getParent(filepath, 2);
+        String destPath = parent + File.separator + "archive" + File.separator + FileUtil.mainName(filepath);
 
         File destFile = new File(destPath);
         if (!destFile.exists()) {
@@ -426,8 +428,9 @@ public class EmailParseService {
         List<String> images = ListUtil.list(true);
         if (Objects.equals(ReportParserFileType.PDF, fileType)) {
             try {
-                String output = FileUtil.getParent(filepath, 1) + File.separator + "image";
-                images = PdfUtil.convertFirstAndLastPagesToPng(filepath, FileUtil.file(output), 300);
+                String output = filepath.replaceAll("archive|original", "image");
+                File outputFile = FileUtil.file(FileUtil.getParent(output, 1));
+                images = PdfUtil.convertFirstAndLastPagesToPng(filepath, outputFile, 300);
                 if (log.isDebugEnabled()) {
                     log.debug("报告[{}] 生成的图片地址是:\n{}", fileName, images);
                 }
@@ -880,7 +883,7 @@ public class EmailParseService {
         }
 
         String emailDateStr = DateUtil.format(sendDate, DateConst.YYYYMMDD);
-        String filePath = path + File.separator + account + File.separator + emailDateStr + File.separator;
+        String filePath = path + File.separator + account + File.separator + emailDateStr + File.separator + "original" + File.separator;
         // 压缩包重名时的后面的压缩包会覆盖前面压缩包的问题(不考虑普通文件)
         String emailDate = DateUtil.format(sendDate, DateConst.YYYYMMDDHHMMSS24);
         String realName = ArchiveUtil.isArchive(fileName) ? emailDate + fileName : fileName;

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

@@ -24,12 +24,16 @@ public class MoDaqApplicationTests {
     private EmailParseApiService emailParseApiService;
 
     @Test
-    public void test() {
-        MailboxInfoDTO emailInfoDTO = this.buildMailbox("", "");
-        Date startDate = DateUtil.parse("2024-10-10 15:00:00", DateConst.YYYY_MM_DD_HH_MM_SS);
-        Date endDate = DateUtil.parse("2024-10-10 16:40:00", DateConst.YYYY_MM_DD_HH_MM_SS);
+    public void letterTest() {
+        MailboxInfoDTO emailInfoDTO = this.buildMailbox("*@simuwang.com", "*");
+        Date startDate = DateUtil.parse("2025-06-09 14:55:00", DateConst.YYYY_MM_DD_HH_MM_SS);
+        Date endDate = DateUtil.parse("2025-06-09 18:56:00", DateConst.YYYY_MM_DD_HH_MM_SS);
         try {
-            emailParseService.parseEmail(emailInfoDTO, startDate, endDate, null, null);
+            List<String> folderNames = ListUtil.list(false);
+//            folderNames.add("其他文件夹/报告公告");
+            folderNames.add("INBOX");
+            emailParseService.parseEmail(emailInfoDTO, startDate, endDate,
+                    folderNames, ListUtil.of(EmailTypeConst.REPORT_LETTER_EMAIL_TYPE));
         } catch (Exception e) {
             throw new RuntimeException(e);
         }
@@ -38,8 +42,8 @@ public class MoDaqApplicationTests {
     @Test
     public void reportTest() {
         MailboxInfoDTO emailInfoDTO = this.buildMailbox("*@simuwang.com", "*");
-        Date startDate = DateUtil.parse("2025-06-09 10:27:00", DateConst.YYYY_MM_DD_HH_MM_SS);
-        Date endDate = DateUtil.parse("2025-06-09 10:56:00", DateConst.YYYY_MM_DD_HH_MM_SS);
+        Date startDate = DateUtil.parse("2025-06-09 14:40:00", DateConst.YYYY_MM_DD_HH_MM_SS);
+        Date endDate = DateUtil.parse("2025-06-09 18:56:00", DateConst.YYYY_MM_DD_HH_MM_SS);
         try {
             List<String> folderNames = ListUtil.list(false);
 //            folderNames.add("其他文件夹/报告公告");