ソースを参照

fix:附件名称获取问题

wangzaijun 2 週間 前
コミット
24d6a8e198

+ 7 - 1
mo-daq/src/main/java/com/smppw/modaq/application/components/ReportParseUtils.java

@@ -10,6 +10,7 @@ import com.smppw.modaq.common.conts.PatternConsts;
 import com.smppw.modaq.common.enums.ReportType;
 import com.smppw.modaq.domain.dto.report.ReportAssetAllocationDTO;
 import com.smppw.modaq.infrastructure.util.DateUtils;
+import jakarta.mail.internet.MimeUtility;
 
 import java.time.YearMonth;
 import java.util.*;
@@ -458,7 +459,7 @@ public final class ReportParseUtils {
         }
     }
 
-    public static void main(String[] args) {
+    public static void main(String[] args) throws Exception {
         String text = "私募基金2024年04月度报告";
         Integer emailType = 1;
         ReportType reportType = null;
@@ -579,5 +580,10 @@ public final class ReportParseUtils {
         String input = ReportParseUtils.cleaningValue(date, false);
         Date date1 = DateUtils.toDate(input);
         System.out.println(date1);
+
+
+        String s = "\"=?utf-8?b?5Y2D6LGh54G15rS76YWN572u57K+6YCJOeWPt+engeWLn+ivgeWIuOaKlei1hA==?=^M\n" +
+                " 基金-千象灵活配置精选9号私募证券投资基金2025年5月月度报告-20250609.pdf\"";
+        System.out.println(MimeUtility.decodeText(s));
     }
 }

+ 3 - 0
mo-daq/src/main/java/com/smppw/modaq/application/util/EmailUtil.java

@@ -41,6 +41,7 @@ public class EmailUtil {
     // 解码文件名(处理 RFC 2231 和 RFC 2047)
     public static String decodeFileName(Part part) throws UnsupportedEncodingException, MessagingException {
         String filename = part.getFileName();
+        logger.info("0======================= > {}", filename);
 
         // 优先尝试 RFC 2231 的 filename*(如 "filename*=utf-8''%E4%B8%AD%E6%96%87.txt")
         String[] values = part.getHeader("Content-Disposition");
@@ -49,6 +50,7 @@ public class EmailUtil {
                 if (value.startsWith("filename*")) {
                     filename = value.split("'")[2]; // 提取编码后的字符串
                     filename = MimeUtility.decodeText(filename);
+                    logger.info("1=======================+++++++++ > {}", filename);
                     return filename;
                 }
             }
@@ -56,6 +58,7 @@ public class EmailUtil {
 
         // 处理 RFC 2047 的多段编码(如 "=?utf-8?B?5Lit?= =?utf-8?B?5paH?=.txt")
         if (filename != null && filename.contains("=?")) {
+            logger.info("2=======================----------- > {}", MimeUtility.decodeText(filename));
             return MimeUtility.decodeText(filename);
         }
 

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

@@ -100,6 +100,7 @@ public class EmailContentInfoDTO implements Serializable {
                 ", emailTitle='" + emailTitle + '\'' +
                 ", emailDate='" + emailDate + '\'' +
                 ", senderEmail='" + senderEmail + '\'' +
+                ", fileName='" + fileName + '\'' +
                 ", emailType=" + emailType +
                 '}';
     }

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

@@ -783,14 +783,16 @@ public class EmailParseService {
                 } else {
                     log.warn("{} 不支持的邮件数据 {}", folderName, emailTitle);
                 }
-
-                if (CollUtil.isNotEmpty(emailContentInfoDTOList)) {
-                    emailContentInfoDTOList.forEach(e -> {
-                        e.setEmailType(emailType);
-                        e.setSenderEmail(senderEmail);
-                    });
-                    emailMessageMap.put(uuidKey, emailContentInfoDTOList);
+                if (CollUtil.isEmpty(emailContentInfoDTOList)) {
+                    log.warn("{} 邮件{} 没有获取到附件", folderName, emailTitle);
+                    continue;
                 }
+
+                emailContentInfoDTOList.forEach(e -> {
+                    e.setEmailType(emailType);
+                    e.setSenderEmail(senderEmail);
+                });
+                emailMessageMap.put(uuidKey, emailContentInfoDTOList);
                 if (log.isInfoEnabled()) {
                     log.info("{} 邮件{} 下载完成,总计耗时{} ms,文件内容如下\n {}", folderName,
                             emailTitle, System.currentTimeMillis() - start, emailContentInfoDTOList);
@@ -811,9 +813,11 @@ public class EmailParseService {
                         List<EmailContentInfoDTO> emailContentInfoDTOList) throws Exception {
         String fileName = EmailUtil.decodeFileName(part);
         if (StrUtil.isBlank(fileName)) {
-            log.warn("邮件{} 附件文件名是空的,不做下载!", subject);
             return;
         }
+        if (fileName.contains("\"")) {
+            fileName = fileName.replaceAll("\"", "");
+        }
         if (fileName.contains("=?")) {
             fileName = MimeUtility.decodeText(fileName);
         }