浏览代码

fix:修复excel报告解析时部分字段没有值的问题

wangzaijun 6 月之前
父节点
当前提交
81f8b7135c

+ 15 - 11
service-daq/src/main/java/com/simuwang/daq/components/ReportParseUtils.java

@@ -3,6 +3,7 @@ package com.simuwang.daq.components;
 import cn.hutool.core.collection.ListUtil;
 import cn.hutool.core.collection.ListUtil;
 import cn.hutool.core.map.MapUtil;
 import cn.hutool.core.map.MapUtil;
 import cn.hutool.core.util.StrUtil;
 import cn.hutool.core.util.StrUtil;
+import com.simuwang.base.common.enums.ReportType;
 
 
 import java.util.Calendar;
 import java.util.Calendar;
 import java.util.List;
 import java.util.List;
@@ -33,7 +34,11 @@ public final class ReportParseUtils {
     static {
     static {
         // 财务指标
         // 财务指标
         FINANCIAL_INDICATORS_COLUMN_NAMES.add("期末基金净资产");
         FINANCIAL_INDICATORS_COLUMN_NAMES.add("期末基金净资产");
+        FINANCIAL_INDICATORS_COLUMN_NAMES.add("期末基金资产净值");
+
         FINANCIAL_INDICATORS_COLUMN_NAMES.add("报告期期末单位净值");
         FINANCIAL_INDICATORS_COLUMN_NAMES.add("报告期期末单位净值");
+        FINANCIAL_INDICATORS_COLUMN_NAMES.add("期末基金份额净值");
+
         FINANCIAL_INDICATORS_COLUMN_NAMES.add("本期利润");
         FINANCIAL_INDICATORS_COLUMN_NAMES.add("本期利润");
         FINANCIAL_INDICATORS_COLUMN_NAMES.add("本期已实现收益");
         FINANCIAL_INDICATORS_COLUMN_NAMES.add("本期已实现收益");
         FINANCIAL_INDICATORS_COLUMN_NAMES.add("期末可供分配利润");
         FINANCIAL_INDICATORS_COLUMN_NAMES.add("期末可供分配利润");
@@ -66,13 +71,17 @@ public final class ReportParseUtils {
         // 以下为国际标准
         // 以下为国际标准
         INDUSTRY_COLUMN_NAMES.add("能源");
         INDUSTRY_COLUMN_NAMES.add("能源");
         INDUSTRY_COLUMN_NAMES.add("原材料");
         INDUSTRY_COLUMN_NAMES.add("原材料");
+        INDUSTRY_COLUMN_NAMES.add("材料");
         INDUSTRY_COLUMN_NAMES.add("工业");
         INDUSTRY_COLUMN_NAMES.add("工业");
+        INDUSTRY_COLUMN_NAMES.add("可选消费品");
         INDUSTRY_COLUMN_NAMES.add("非日常生活消费品");
         INDUSTRY_COLUMN_NAMES.add("非日常生活消费品");
+        INDUSTRY_COLUMN_NAMES.add("必须消费品");
         INDUSTRY_COLUMN_NAMES.add("日常消费品");
         INDUSTRY_COLUMN_NAMES.add("日常消费品");
         INDUSTRY_COLUMN_NAMES.add("医疗保健");
         INDUSTRY_COLUMN_NAMES.add("医疗保健");
         INDUSTRY_COLUMN_NAMES.add("金融");
         INDUSTRY_COLUMN_NAMES.add("金融");
         INDUSTRY_COLUMN_NAMES.add("信息技术");
         INDUSTRY_COLUMN_NAMES.add("信息技术");
         INDUSTRY_COLUMN_NAMES.add("通讯服务");
         INDUSTRY_COLUMN_NAMES.add("通讯服务");
+        INDUSTRY_COLUMN_NAMES.add("电信服务");
         INDUSTRY_COLUMN_NAMES.add("公用事业");
         INDUSTRY_COLUMN_NAMES.add("公用事业");
         INDUSTRY_COLUMN_NAMES.add("房地产");
         INDUSTRY_COLUMN_NAMES.add("房地产");
 
 
@@ -267,18 +276,13 @@ public final class ReportParseUtils {
         if (string == null) {
         if (string == null) {
             return null;
             return null;
         }
         }
-        // 所有报告的正则识别方式
-        String patterns = "年度|年报|季度|季报|季|月度|月报|月|年";
-        // 编译正则表达式模式
-        Pattern pattern = Pattern.compile(patterns);
-        // 创建Matcher对象
-        Matcher matcher = pattern.matcher(string);
-        // 尝试匹配
-        if (matcher.find()) {
-            return matcher.group();
-        } else {
-            return null;
+        ReportType reportType = ReportType.MONTHLY;
+        if (StrUtil.containsAny(string, ReportType.QUARTERLY.getPatterns())) {
+            reportType = ReportType.QUARTERLY;
+        } else if (StrUtil.containsAny(string, ReportType.ANNUALLY.getPatterns())) {
+            reportType = ReportType.ANNUALLY;
         }
         }
+        return reportType.getLabel();
     }
     }
 
 
     private static int getLastDayOfMonth(int year, int month) {
     private static int getLastDayOfMonth(int year, int month) {

+ 2 - 2
service-daq/src/main/java/com/simuwang/daq/components/report/parser/excel/ExcelAnnuallyReportParser.java

@@ -102,7 +102,7 @@ public class ExcelAnnuallyReportParser extends AbstractExcelReportParser<Annuall
             Map<String, Object> infoMap = MapUtil.newHashMap(16);
             Map<String, Object> infoMap = MapUtil.newHashMap(16);
             for (List<String> table : t.getTables()) {
             for (List<String> table : t.getTables()) {
                 String name = table.get(0);
                 String name = table.get(0);
-                if (name == null || !ReportParseUtils.SHARE_CHANGE_COLUMN_NAMES.contains(name)) {
+                if (name == null) {
                     continue;
                     continue;
                 }
                 }
                 infoMap.put(name, table.get(1));
                 infoMap.put(name, table.get(1));
@@ -142,7 +142,7 @@ public class ExcelAnnuallyReportParser extends AbstractExcelReportParser<Annuall
                 infoMap.put("年度", year);
                 infoMap.put("年度", year);
                 for (int i = 0; i < table.getRowCount(); i++) {
                 for (int i = 0; i < table.getRowCount(); i++) {
                     String columnName = ReportParseUtils.cleaningValue(table.getCell(i, 0));
                     String columnName = ReportParseUtils.cleaningValue(table.getCell(i, 0));
-                    if (!CollUtil.contains(ReportParseUtils.FINANCIAL_INDICATORS_COLUMN_NAMES, columnName)) {
+                    if (columnName == null) {
                         continue;
                         continue;
                     }
                     }
                     String value = ReportParseUtils.cleaningValue(table.getCell(i, j));
                     String value = ReportParseUtils.cleaningValue(table.getCell(i, j));

+ 2 - 2
service-daq/src/main/java/com/simuwang/daq/components/report/parser/excel/ExcelQuarterlyReportParser.java

@@ -98,7 +98,7 @@ public class ExcelQuarterlyReportParser extends AbstractExcelReportParser<Quarte
             Map<String, Object> infoMap = MapUtil.newHashMap(16);
             Map<String, Object> infoMap = MapUtil.newHashMap(16);
             for (List<String> table : t.getTables()) {
             for (List<String> table : t.getTables()) {
                 String name = table.get(0);
                 String name = table.get(0);
-                if (name == null || !ReportParseUtils.SHARE_CHANGE_COLUMN_NAMES.contains(name)) {
+                if (name == null) {
                     continue;
                     continue;
                 }
                 }
                 infoMap.put(name, table.get(1));
                 infoMap.put(name, table.get(1));
@@ -125,7 +125,7 @@ public class ExcelQuarterlyReportParser extends AbstractExcelReportParser<Quarte
             Map<String, Object> infoMap = MapUtil.newHashMap(16);
             Map<String, Object> infoMap = MapUtil.newHashMap(16);
             for (List<String> table : t.getTables()) {
             for (List<String> table : t.getTables()) {
                 String name = table.get(0);
                 String name = table.get(0);
-                if (name == null || !ReportParseUtils.FINANCIAL_INDICATORS_COLUMN_NAMES.contains(name)) {
+                if (name == null) {
                     continue;
                     continue;
                 }
                 }
                 infoMap.put(name, table.get(1));
                 infoMap.put(name, table.get(1));

+ 1 - 1
service-daq/src/main/java/com/simuwang/daq/components/report/parser/pdf/PDAnnuallyReportParser.java

@@ -124,7 +124,7 @@ public class PDAnnuallyReportParser extends PDQuarterlyReportParser<AnnuallyRepo
                 infoMap.put("年度", year);
                 infoMap.put("年度", year);
                 for (int i = 0; i < table.getRowCount(); i++) {
                 for (int i = 0; i < table.getRowCount(); i++) {
                     String columnName = ReportParseUtils.cleaningValue(table.getCell(i, 0).getText());
                     String columnName = ReportParseUtils.cleaningValue(table.getCell(i, 0).getText());
-                    if (!CollUtil.contains(ReportParseUtils.FINANCIAL_INDICATORS_COLUMN_NAMES, columnName)) {
+                    if (columnName == null) {
                         continue;
                         continue;
                     }
                     }
                     String value = ReportParseUtils.cleaningValue(table.getCell(i, j).getText());
                     String value = ReportParseUtils.cleaningValue(table.getCell(i, j).getText());