浏览代码

解析文件并计算历史内容,遍历文件并将文件内容输出到 main 文件中。

CodeLife_leno 1 月之前
父节点
当前提交
0e1631ec94

+ 72 - 72
Procedure/backend/project/src/main/java/com/sundata/product/rwa/calc/model/ReportParamCalcModel.java → Procedure/backend/project/src/main/java/com/sundata/product/rwa/calc/model/ReportUnitParamCalcModel.java

@@ -1,72 +1,72 @@
-package com.sundata.product.rwa.calc.model;
-
-import com.sundata.product.rwa.reportformconfigreportcreater.model.ReportCalculationModel;
-import com.sundata.product.rwa.reportformconfigreportcreater.model.ReportParamDefineModel;
-
-public class ReportParamCalcModel {
-        /**
-     * 计算流水号
-     */
-    private final String calcindex;
-    /**
-     * 数据日期
-     */
-    private final String dataDate;
-
-    /**
-     * 行计算参数
-     */
-    private final ReportCalculationModel reportCalcModel;
-
-    private final ParamCalcModel paramCalcModel;
-
-    /**
-     * 计算参数对象的值
-     */
-    private Object value;
-
-
-    public ReportParamCalcModel(String calcindex, String dataDate, ReportCalculationModel reportCalcModel) {
-        this.calcindex = calcindex;
-        this.dataDate = dataDate;
-        this.reportCalcModel = reportCalcModel;
-        ReportParamDefineModel reportParamDefineModel = new ReportParamDefineModel();
-        reportParamDefineModel.setParamNo("x");
-        reportParamDefineModel.setDataDate(dataDate);
-        reportParamDefineModel.setCalcIndex(calcindex);
-        reportParamDefineModel.setParamName("计算单元名称");
-        reportParamDefineModel.setParamObjectName(reportCalcModel.getUnitCalcObjectName());
-        reportParamDefineModel.setParamCalcGetdata(reportCalcModel.getUnitCalcInfo());
-        reportParamDefineModel.setParamCalcType(reportCalcModel.getUnitCalcType());
-        this.paramCalcModel = new ParamCalcModel(this.calcindex, this.dataDate,reportParamDefineModel);
-    }
-
-    public void setValue(Object value) {
-        this.value = value;
-    }
-
-    public String getCalcindex() {
-        return calcindex;
-    }
-
-    public String getDataDate() {
-        return dataDate;
-    }
-
-    public ReportCalculationModel getReportCalcModel() {
-        return reportCalcModel;
-    }
-
-    public String getParamCalcObjectName() {
-        return reportCalcModel.getUnitCalcObjectName();
-    }
-
-    public ParamCalcModel getParamCalcModel() {
-        return paramCalcModel;
-    }
-
-
-    public Object getValue() {
-        return value;
-    }
-}
+package com.sundata.product.rwa.calc.model;
+
+import com.sundata.product.rwa.reportformconfigreportcreater.model.ReportCalculationModel;
+import com.sundata.product.rwa.reportformconfigreportcreater.model.ReportParamDefineModel;
+
+public class ReportUnitParamCalcModel {
+        /**
+     * 计算流水号
+     */
+    private final String calcindex;
+    /**
+     * 数据日期
+     */
+    private final String dataDate;
+
+    /**
+     * 行计算参数
+     */
+    private final ReportCalculationModel reportCalcModel;
+
+    private final ParamCalcModel paramCalcModel;
+
+    /**
+     * 计算参数对象的值
+     */
+    private Object value;
+
+
+    public ReportUnitParamCalcModel(String calcindex, String dataDate, ReportCalculationModel reportCalcModel) {
+        this.calcindex = calcindex;
+        this.dataDate = dataDate;
+        this.reportCalcModel = reportCalcModel;
+        ReportParamDefineModel reportParamDefineModel = new ReportParamDefineModel();
+        reportParamDefineModel.setParamNo("x");
+        reportParamDefineModel.setDataDate(dataDate);
+        reportParamDefineModel.setCalcIndex(calcindex);
+        reportParamDefineModel.setParamName("计算单元名称");
+        reportParamDefineModel.setParamObjectName(reportCalcModel.getUnitCalcObjectName());
+        reportParamDefineModel.setParamCalcGetdata(reportCalcModel.getUnitCalcInfo());
+        reportParamDefineModel.setParamCalcType(reportCalcModel.getUnitCalcType());
+        this.paramCalcModel = new ParamCalcModel(this.calcindex, this.dataDate,reportParamDefineModel);
+    }
+
+    public void setValue(Object value) {
+        this.value = value;
+    }
+
+    public String getCalcindex() {
+        return calcindex;
+    }
+
+    public String getDataDate() {
+        return dataDate;
+    }
+
+    public ReportCalculationModel getReportCalcModel() {
+        return reportCalcModel;
+    }
+
+    public String getParamCalcObjectName() {
+        return reportCalcModel.getUnitCalcObjectName();
+    }
+
+    public ParamCalcModel getParamCalcModel() {
+        return paramCalcModel;
+    }
+
+
+    public Object getValue() {
+        return value;
+    }
+}

+ 38 - 14
Procedure/backend/project/src/main/java/com/sundata/product/rwa/calc/service/ReportCalcService.java

@@ -1,7 +1,7 @@
 package com.sundata.product.rwa.calc.service;
 
 import com.sundata.common.util.DBExecutor;
-import com.sundata.product.rwa.calc.model.ReportParamCalcModel;
+import com.sundata.product.rwa.calc.model.ReportUnitParamCalcModel;
 import com.sundata.product.rwa.reportformconfigreportcreater.model.ReportCalculationModel;
 import com.sundata.product.rwa.reportformconfigreportcreater.model.ReportDefinitionModel;
 import com.sundata.product.rwa.reportformconfigreportcreater.service.ReportFillingConfigService;
@@ -20,7 +20,7 @@ import java.io.FileInputStream;
 import java.io.FileNotFoundException;
 import java.io.IOException;
 import java.nio.file.Files;
-import java.util.HashMap;
+import java.util.ArrayList;
 import java.util.List;
 import java.util.Map;
 
@@ -44,9 +44,31 @@ public class ReportCalcService {
     @Autowired
     ReportUnitParamCalcService reportUnitParamCalcService;
 
-    public void createAllReport(String calcIndex, String dataDate, Map<String, String> context, Map<String, Object> reportParam) {
+    public void createAllReport(String calcIndex, String dataDate, Map<String, Object> context, Map<String, Object> reportParam) {
         List<ReportDefinitionModel> reportParamDefineModels = service.getDataList(new ReportDefinitionModel());
-        log.debug("开始处理报表");
+        context.putAll(reportParam);
+        List<File> tempTmpFiles = new ArrayList<>();
+        // 字典里获取附件路径
+        String templatePath = DBExecutor.doQuery("select NOUNVALUE from sys_noun where NOUNITEM = 'ATTACHPATH'");
+        //
+        File tempTmpFileMain = new File(templatePath + File.separator + "tempTmp" + File.separator + "reportuploadconfig" + File.separator + calcIndex ,"main.xlsx");
+        tempTmpFileMain.getParentFile().mkdirs();
+        tempTmpFileMain.delete();
+        /*
+            1. 将所有文件处理到一个 main 文件中 ,将其他公式代入并计算 main
+         */
+        for (ReportDefinitionModel reportDefinitionModel : reportParamDefineModels) {
+            tempTmpFiles.add(createTempReport(reportDefinitionModel,calcIndex,dataDate,context));
+        }
+
+        /*
+            2. 将 main 中 其他公式 的数据复制到临时结果文件中
+         */
+
+        /*
+            3. 运算每个报表的自己公式并复制到结果文件清单中
+         */
+        log.debug("开始处理集成报表");
     }
 
     /**
@@ -56,16 +78,16 @@ public class ReportCalcService {
      * @param calcIndex
      * @param dataDate
      * @param context
-     * @param reportParam
      * @return
      */
-    public File createTempReport(ReportDefinitionModel model, String calcIndex, String dataDate, Map<String, Object> context, Map<String, Object> reportParam) {
+    public File createTempReport(ReportDefinitionModel model, String calcIndex, String dataDate, Map<String, Object> context) {
         String reportno = model.getReportNo();
         log.debug("处理报表:{}-{}", reportno, model.getReportName());
         File tempFile = null;
         String reportType = model.getReportType();
-        List<ReportParamCalcModel> reportParamCalcModels = reportUnitParamCalcService.calc(calcIndex, dataDate, context, reportno);
-        Map<String, Object> reportParamMap = CollectionToMapConverter.toMap(reportParamCalcModels, ReportParamCalcModel::getParamCalcObjectName, ReportParamCalcModel::getValue);
+//        context.putAll(reportParam);
+        List<ReportUnitParamCalcModel> reportUnitParamCalcModels = reportUnitParamCalcService.calc(calcIndex, dataDate, context, reportno);
+        Map<String, Object> reportParamMap = CollectionToMapConverter.toMap(reportUnitParamCalcModels, ReportUnitParamCalcModel::getParamCalcObjectName, ReportUnitParamCalcModel::getValue);
         // 字典里获取附件路径
         String templatePath = DBExecutor.doQuery("select NOUNVALUE from sys_noun where NOUNITEM = 'ATTACHPATH'");
         //
@@ -88,8 +110,8 @@ public class ReportCalcService {
             // 固定行列 使用单元格处理的内容逐一覆盖报表计算过程
             try {
                 Workbook workbook = WorkbookFactory.create(new FileInputStream(reportTempFile));
-                for (int i = 0; i < reportParamCalcModels.size(); i++) {
-                    ReportCalculationModel reportCalculationModel = reportParamCalcModels.get(i).getReportCalcModel();
+                for (ReportUnitParamCalcModel reportUnitParamCalcModel : reportUnitParamCalcModels) {
+                    ReportCalculationModel reportCalculationModel = reportUnitParamCalcModel.getReportCalcModel();
                     Sheet sheet = workbook.getSheetAt(reportCalculationModel.getReportUnitSheet());
                     if (sheet == null) {
                         sheet = workbook.createSheet();
@@ -107,10 +129,10 @@ public class ReportCalcService {
                         cell.setCellFormula(reportCalculationModel.getUnitCalcInfo());
                     } else if ("2".equals(reportCalculationModel.getUnitType())) {
                         // 如果单元格类型是字符串
-                        cell.setCellValue(String.valueOf(reportParamCalcModels.get(i).getValue()));
+                        cell.setCellValue(String.valueOf(reportUnitParamCalcModel.getValue()));
                     } else if ("3".equals(reportCalculationModel.getUnitType())) {
                         // 如果单元格类型是数字
-                        cell.setCellValue((Double) DataUtil.getDataDefault(reportParamCalcModels.get(i).getValue(), Double.class));
+                        cell.setCellValue((Double) DataUtil.getDataDefault(reportUnitParamCalcModel.getValue(), Double.class));
                     }
                 }
                 workbook.write(Files.newOutputStream(tempTmpFilePath.toPath()));
@@ -125,10 +147,12 @@ public class ReportCalcService {
                         .build()
                         .fill(reportParamMap, new JxlsOutputFile(tempTmpFilePath));
             } catch (FileNotFoundException e) {
-                throw new RuntimeException(e);
+                log.error(e.getMessage(), e);
+                throw new CalcException(calcIndex, e.getMessage());
             }
+        } else {
+            log.warn("此类报表类型并没有处理过程:{}", reportno);
         }
-
         return tempTmpFilePath;
     }
 }

+ 4 - 4
Procedure/backend/project/src/main/java/com/sundata/product/rwa/calc/service/ReportUnitParamCalcService.java

@@ -2,7 +2,7 @@ package com.sundata.product.rwa.calc.service;
 
 import com.sundata.product.rwa.calc.model.ParamCalcModel;
 import com.sundata.product.rwa.calc.model.ParamCalcType;
-import com.sundata.product.rwa.calc.model.ReportParamCalcModel;
+import com.sundata.product.rwa.calc.model.ReportUnitParamCalcModel;
 import com.sundata.product.rwa.calc.param.interfaces.ParamCalc;
 import com.sundata.product.rwa.reportformconfigreportcreater.mapper.ReportFillingConfigMapper;
 import com.sundata.product.rwa.reportformconfigreportcreater.model.ReportCalculationModel;
@@ -27,17 +27,17 @@ public class ReportUnitParamCalcService {
     @Autowired
     ReportFillingConfigMapper reportFillingConfigMapper;
 
-    public List<ReportParamCalcModel> calc(String calcindex, String dataDate , Map<String ,Object> context , String reportno) {
+    public List<ReportUnitParamCalcModel> calc(String calcindex, String dataDate , Map<String ,Object> context , String reportno) {
         List<ReportCalculationModel> modelList = reportFillingConfigMapper.selectCalcReportData(reportno);
 
-        List<ReportParamCalcModel> models = new ArrayList<>();
+        List<ReportUnitParamCalcModel> models = new ArrayList<>();
         log.debug("开始报表计算单元的处理,报表编号:{},计算单元条目数:{}",reportno,modelList.size());
         for (ReportCalculationModel reportCalculationModel : modelList) {
             // 如果不是 需要被计算的内容或者单元格是公式类型,则跳过
             if (!ReportFinalParam.EXECUTE_REPORT.equals(reportCalculationModel.getExcelFormula()) || "1".equals(reportCalculationModel.getUnitType())){
                 continue;
             }
-            ReportParamCalcModel paramCalcModel = new ReportParamCalcModel(calcindex,dataDate,reportCalculationModel);
+            ReportUnitParamCalcModel paramCalcModel = new ReportUnitParamCalcModel(calcindex,dataDate,reportCalculationModel);
             ParamCalcModel model = paramCalcModel.getParamCalcModel();
             ParamCalc paramCalc = ParamCalcType.getParamCalcType(model.getValueDataType()).getParamCalc(null);
             // 通过数据计算工具计算实际内容处理过程