ソースを参照

fix:报告时间部分的日期处理

wangzaijun 3 週間 前
コミット
d2187bef5c

+ 11 - 12
mo-daq/src/main/java/com/smppw/modaq/application/components/ReportParseUtils.java

@@ -4,17 +4,14 @@ import cn.hutool.core.collection.ListUtil;
 import cn.hutool.core.map.MapUtil;
 import cn.hutool.core.util.NumberUtil;
 import cn.hutool.core.util.StrUtil;
-import com.smppw.modaq.application.util.EmailUtil;
 import com.smppw.modaq.common.conts.EmailTypeConst;
 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 java.time.YearMonth;
-import java.util.Calendar;
-import java.util.List;
-import java.util.Map;
-import java.util.Objects;
+import java.util.*;
 import java.util.regex.Matcher;
 import java.util.regex.Pattern;
 import java.util.stream.Collectors;
@@ -227,10 +224,8 @@ public final class ReportParseUtils {
                     .replaceAll("\r", StrUtil.EMPTY)
                     .replaceAll(";", ";")
                     .replaceAll(":", ":")
-                    .replaceAll(" ", StrUtil.EMPTY)
                     .replaceAll("【", StrUtil.EMPTY)
-                    .replaceAll("】", StrUtil.EMPTY)
-                    .replaceAll(":", StrUtil.EMPTY);
+                    .replaceAll("】", StrUtil.EMPTY).trim();
             if (replaceEn) {
                 fieldValue = fieldValue.replaceAll("[a-zA-Z]", StrUtil.EMPTY);
             }
@@ -560,10 +555,14 @@ public final class ReportParseUtils {
 //        System.out.println(emailType + ",reportType=" + reportType + ",reportDate=" + matchReportDate(reportType, text));
 
         // 异常的类型,不要基金合同
-        text = "潼骁周周享私募证券投资基金基金合同(2025-1).pdf";
-        emailType = EmailUtil.getEmailTypeBySubject(text);
-        reportType = matchReportType(emailType, text);
-        System.out.println(emailType + ",reportType=" + reportType + ",reportDate=" + matchReportDate(reportType, text));
+//        text = "潼骁周周享私募证券投资基金基金合同(2025-1).pdf";
+//        emailType = EmailUtil.getEmailTypeBySubject(text);
+//        reportType = matchReportType(emailType, text);
+//        System.out.println(emailType + ",reportType=" + reportType + ",reportDate=" + matchReportDate(reportType, text));
 
+        String date = "2025-06-04 11:36:43";
+        String input = ReportParseUtils.cleaningValue(date, false);
+        Date date1 = DateUtils.toDate(input);
+        System.out.println(date1);
     }
 }

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

@@ -17,15 +17,15 @@ public class PatternConsts {
     /**
      * 月度报告日期正则匹配
      */
-    public static Pattern MONTHLY_PATTERN = Pattern.compile("(20[23]\\d)[年_-]*(\\d{1,2})月?");
+    public static Pattern MONTHLY_PATTERN = Pattern.compile("(20[23]\\d)[/年_-]*(\\d{1,2})月?");
     /**
      * 严格的年月日匹配
      */
-    public static final Pattern STRICT_DAY_PATTERN = Pattern.compile("(20[23]\\d)[年_-]*(\\d{1,2})[月_-]*(\\d{1,2})[日号]*(?!\\d)");
+    public static final Pattern STRICT_DAY_PATTERN = Pattern.compile("(20[23]\\d)[/年_-]*(\\d{1,2})[/月_-]*(\\d{1,2})[日号]*(?!\\d)");
     /**
      * 宽泛的日期匹配
      */
-    public static final Pattern DAY_PATTERN = Pattern.compile("(20[23]\\d)[年_-]*(\\d{1,2})[月_-]*(\\d{1,2})[日号\\d]+");
+    public static final Pattern DAY_PATTERN = Pattern.compile("(20[23]\\d)[/年_-]*(\\d{1,2})[/月_-]*(\\d{1,2})[日号\\d]+");
 
     /**
      * 基金编码的正则表达式

+ 17 - 12
mo-daq/src/main/java/com/smppw/modaq/infrastructure/util/DateUtils.java

@@ -4,15 +4,17 @@ import cn.hutool.core.date.DatePattern;
 import cn.hutool.core.date.DateUtil;
 import cn.hutool.core.util.StrUtil;
 import com.smppw.modaq.common.conts.DateConst;
+import com.smppw.modaq.common.conts.PatternConsts;
 
 import java.util.Date;
+import java.util.regex.Matcher;
 
 public class DateUtils {
     /**
      * 字符串转日期类型
      *
      * @param input 待转换的字符串
-     * @return /
+     * @return 返回日期如果有时间要去掉时间部分
      */
     public static Date toDate(String input) {
         if (StrUtil.isBlank(input)) {
@@ -23,17 +25,20 @@ public class DateUtils {
             input = StrUtil.split(input, "-").get(1);
         }
         // 把字符串中的日期分隔符去掉,包括前后和中间
-        input = input.replaceAll("-_/", "");
-        try {
-            // 日期格式化,支持格式如下:yyyy年MM月dd日、yyyy-MM-dd、yyyy/MM/dd、yyyy_MM_dd和yyyyMMdd
-            return DateUtil.parse(input.trim(),
-                    DatePattern.CHINESE_DATE_PATTERN,
-                    DateConst.YYYYMMDD,
-                    DatePattern.NORM_DATE_PATTERN,
-                    "yyyy/MM/dd",
-                    "yyyy_MM_dd",
-                    "yyyy年MM月dd");
-        } catch (Exception ignored) {
+        input = input.replaceAll("-_/", "").trim();
+        Matcher matcher = PatternConsts.STRICT_DAY_PATTERN.matcher(input);
+        if (matcher.find()) {
+            try {
+                // 日期格式化,支持格式如下:yyyy年MM月dd日、yyyy-MM-dd、yyyy/MM/dd、yyyy_MM_dd和yyyyMMdd
+                return DateUtil.parse(matcher.group(),
+                        DatePattern.CHINESE_DATE_PATTERN,
+                        DateConst.YYYYMMDD,
+                        DatePattern.NORM_DATE_PATTERN,
+                        "yyyy/MM/dd",
+                        "yyyy_MM_dd",
+                        "yyyy年MM月dd");
+            } catch (Exception ignored) {
+            }
         }
         return null;
     }