瀏覽代碼

更新计算过程的支持。

CodeLife Leno 3 月之前
父節點
當前提交
e5b0d75cc9
共有 17 個文件被更改,包括 489 次插入89 次删除
  1. 15 0
      DBScript/李庚谱/002-DML.sql
  2. 78 50
      DBScript/李庚谱/010-DQL.sql
  3. 13 5
      Procedure/backend/project/src/main/java/com/sundata/product/rwa/calc/service/CalcUnit.java
  4. 2 1
      Procedure/backend/project/src/main/java/com/sundata/product/rwa/calc/service/finals/CalcType.java
  5. 2 0
      Procedure/backend/project/src/main/java/com/sundata/product/rwa/calc/service/implement/CalcTaskService.java
  6. 77 8
      Procedure/backend/project/src/main/java/com/sundata/product/rwa/calc/service/implement/units/CalcTaskUnit.java
  7. 64 0
      Procedure/backend/project/src/main/java/com/sundata/product/rwa/calc/service/implement/units/DataImportUnit.java
  8. 7 3
      Procedure/backend/project/src/main/java/com/sundata/product/rwa/calc/service/implement/units/DataQualityUnit.java
  9. 7 3
      Procedure/backend/project/src/main/java/com/sundata/product/rwa/calc/service/implement/units/GeneralLedgerUnit.java
  10. 7 3
      Procedure/backend/project/src/main/java/com/sundata/product/rwa/calc/service/implement/units/IntegratedRWAUnit.java
  11. 7 3
      Procedure/backend/project/src/main/java/com/sundata/product/rwa/calc/service/implement/units/ProjectDivisionUnit.java
  12. 7 3
      Procedure/backend/project/src/main/java/com/sundata/product/rwa/calc/service/implement/units/QualifiedSlowReleaseUnit.java
  13. 56 0
      Procedure/backend/project/src/main/java/com/sundata/product/rwa/calc/service/implement/units/ReportInitUnit.java
  14. 7 3
      Procedure/backend/project/src/main/java/com/sundata/product/rwa/calc/service/implement/units/RiskExposureUnit.java
  15. 7 3
      Procedure/backend/project/src/main/java/com/sundata/product/rwa/calc/service/implement/units/SingleRWAUnit.java
  16. 75 0
      Procedure/backend/project/src/main/java/com/sundata/product/rwa/calc/service/implement/units/SqlUnit.java
  17. 58 4
      Procedure/backend/project/src/main/java/com/sundata/product/rwa/calc/service/implement/units/StageUnit.java

+ 15 - 0
DBScript/李庚谱/002-DML.sql

@@ -1,3 +1,18 @@
 delete from sys_noun where NOUNITEM = 'TERM';
 insert into sys_noun
 select 'TERM', '202412', '默认上季度期次', nounsuper, nounlevel, nounorder, nounmodule, nounvalidity, readonly, nounprop, nounremarks, nounrelation, orgflag from sys_noun a where a.NOUNITEM = 'WORKDATE';
+
+
+DELETE FROM SYS_NOUN WHERE NOUNITEM = 'CALC_STATE';
+
+INSERT INTO sys_noun (NOUNITEM, NOUNVALUE, NOUNNAME, NOUNSUPER, NOUNLEVEL, NOUNORDER, NOUNMODULE, NOUNVALIDITY, READONLY, NOUNPROP, NOUNREMARKS, NOUNRELATION, ORGFLAG)
+VALUES ('CALC_STATE', 'CALC_STATE', '计算任务执行状态', 'BUSDICT', 2.000000000000000000000000000000, 0.000000000000000000000000000000, 'common', '0', '0', null, null, '1', '0');
+INSERT INTO sys_noun (NOUNITEM, NOUNVALUE, NOUNNAME, NOUNSUPER, NOUNLEVEL, NOUNORDER, NOUNMODULE, NOUNVALIDITY, READONLY, NOUNPROP, NOUNREMARKS, NOUNRELATION, ORGFLAG)
+VALUES ('CALC_STATE', 'READY', '准备中', 'BUSDICT', 3.000000000000000000000000000000, 1.000000000000000000000000000000, 'common', '1', '0', null, null, '1', '0');
+INSERT INTO sys_noun (NOUNITEM, NOUNVALUE, NOUNNAME, NOUNSUPER, NOUNLEVEL, NOUNORDER, NOUNMODULE, NOUNVALIDITY, READONLY, NOUNPROP, NOUNREMARKS, NOUNRELATION, ORGFLAG)
+VALUES ('CALC_STATE', 'RUNNING', '执行中', 'BUSDICT', 3.000000000000000000000000000000, 2.000000000000000000000000000000, 'common', '1', '0', null, null, '1', '0');
+INSERT INTO sys_noun (NOUNITEM, NOUNVALUE, NOUNNAME, NOUNSUPER, NOUNLEVEL, NOUNORDER, NOUNMODULE, NOUNVALIDITY, READONLY, NOUNPROP, NOUNREMARKS, NOUNRELATION, ORGFLAG)
+VALUES ('CALC_STATE', 'END', '已完成', 'BUSDICT', 3.000000000000000000000000000000, 3.000000000000000000000000000000, 'common', '1', '0', null, null, '1', '0');
+INSERT INTO sys_noun (NOUNITEM, NOUNVALUE, NOUNNAME, NOUNSUPER, NOUNLEVEL, NOUNORDER, NOUNMODULE, NOUNVALIDITY, READONLY, NOUNPROP, NOUNREMARKS, NOUNRELATION, ORGFLAG)
+VALUES ('CALC_STATE', 'ERROR', '异常', 'BUSDICT', 3.000000000000000000000000000000, 4.000000000000000000000000000000, 'common', '1', '0', null, null, '1', '0');
+

+ 78 - 50
DBScript/李庚谱/010-DQL.sql

@@ -31,58 +31,60 @@ order by offmaster.RISK_EXPOSURE_LEV01_CODE
 
 -- 机构
 -- 前十大机构信用风险加权资产合计
-select * from (
-select allrwa.ORGCODE, allrwa.ORGNAME,sum(sumrwa) as allSumRwa from (
-SELECT so.ORGCODE, so.ORGNAME, sum(offmaster.RWA) as sumrwa
-FROM rwa_apm_bus_rs_offbusinessrwa_master offmaster
-         left join sys_organization so on offmaster.MGMT_BRANCH_NO = so.ORGCODE
-where offmaster.CALCINDEX = (SELECT CALCINDEX FROM RWA_CALC_RS_TASK_MASTER A WHERE A.TERM = (getLastTerm()))
-group by so.ORGCODE, so.ORGNAME
-union all
-select so.ORGCODE, so.ORGNAME, sum(onmaster.RWA) as sumrwa
-from rwa_apm_bus_rs_onbusinessrwa_master onmaster
-         left join sys_organization so on onmaster.MGMT_BRANCH_NO = so.ORGCODE
-where onmaster.CALCINDEX = (SELECT CALCINDEX FROM RWA_CALC_RS_TASK_MASTER A WHERE A.TERM = (getLastTerm()))
-group by so.ORGCODE, so.ORGNAME
-) allrwa group by allrwa.ORGCODE,allrwa.ORGNAME ) data  order by data.allSumRwa limit 10
+select *
+from (select allrwa.ORGCODE, allrwa.ORGNAME, sum(sumrwa) as allSumRwa
+      from (SELECT so.ORGCODE, so.ORGNAME, sum(offmaster.RWA) as sumrwa
+            FROM rwa_apm_bus_rs_offbusinessrwa_master offmaster
+                     left join sys_organization so on offmaster.MGMT_BRANCH_NO = so.ORGCODE
+            where offmaster.CALCINDEX = (SELECT CALCINDEX FROM RWA_CALC_RS_TASK_MASTER A WHERE A.TERM = (getLastTerm()))
+            group by so.ORGCODE, so.ORGNAME
+            union all
+            select so.ORGCODE, so.ORGNAME, sum(onmaster.RWA) as sumrwa
+            from rwa_apm_bus_rs_onbusinessrwa_master onmaster
+                     left join sys_organization so on onmaster.MGMT_BRANCH_NO = so.ORGCODE
+            where onmaster.CALCINDEX = (SELECT CALCINDEX FROM RWA_CALC_RS_TASK_MASTER A WHERE A.TERM = (getLastTerm()))
+            group by so.ORGCODE, so.ORGNAME) allrwa
+      group by allrwa.ORGCODE, allrwa.ORGNAME) data
+order by data.allSumRwa
+limit 10
 ;
 
 -- -- 全部RWA
 -- -- 风险暴露(一级)风险加权资产占比
 
-select allrwa.RISK_EXPOSURE_LEV01_CODE, allrwa.RISK_EXPOSURE_LEV01_CODE_NAME , sum(sumrwa) as allsumrwa from (
-select onmaster.RISK_EXPOSURE_LEV01_CODE, onmaster.RISK_EXPOSURE_LEV01_CODE_NAME, sum(RWA) as sumrwa
-from rwa_apm_bus_rs_onbusinessrwa_master onmaster
-where onmaster.CALCINDEX = (SELECT CALCINDEX FROM RWA_CALC_RS_TASK_MASTER A WHERE A.TERM = (getLastTerm()))
-group by onmaster.RISK_EXPOSURE_LEV01_CODE, onmaster.RISK_EXPOSURE_LEV01_CODE_NAME
-union all
-SELECT RISK_EXPOSURE_LEV01_CODE, RISK_EXPOSURE_LEV01_CODE_NAME, sum(RWA) as sumrwa
-FROM rwa_apm_bus_rs_offbusinessrwa_master offmaster
-where offmaster.CALCINDEX = (SELECT CALCINDEX FROM RWA_CALC_RS_TASK_MASTER A WHERE A.TERM = (getLastTerm()))
-group by offmaster.RISK_EXPOSURE_LEV01_CODE, offmaster.RISK_EXPOSURE_LEV01_CODE_NAME
-) allrwa group by allrwa.RISK_EXPOSURE_LEV01_CODE, allrwa.RISK_EXPOSURE_LEV01_CODE_NAME
+select allrwa.RISK_EXPOSURE_LEV01_CODE, allrwa.RISK_EXPOSURE_LEV01_CODE_NAME, sum(sumrwa) as allsumrwa
+from (select onmaster.RISK_EXPOSURE_LEV01_CODE, onmaster.RISK_EXPOSURE_LEV01_CODE_NAME, sum(RWA) as sumrwa
+      from rwa_apm_bus_rs_onbusinessrwa_master onmaster
+      where onmaster.CALCINDEX = (SELECT CALCINDEX FROM RWA_CALC_RS_TASK_MASTER A WHERE A.TERM = (getLastTerm()))
+      group by onmaster.RISK_EXPOSURE_LEV01_CODE, onmaster.RISK_EXPOSURE_LEV01_CODE_NAME
+      union all
+      SELECT RISK_EXPOSURE_LEV01_CODE, RISK_EXPOSURE_LEV01_CODE_NAME, sum(RWA) as sumrwa
+      FROM rwa_apm_bus_rs_offbusinessrwa_master offmaster
+      where offmaster.CALCINDEX = (SELECT CALCINDEX FROM RWA_CALC_RS_TASK_MASTER A WHERE A.TERM = (getLastTerm()))
+      group by offmaster.RISK_EXPOSURE_LEV01_CODE, offmaster.RISK_EXPOSURE_LEV01_CODE_NAME) allrwa
+group by allrwa.RISK_EXPOSURE_LEV01_CODE, allrwa.RISK_EXPOSURE_LEV01_CODE_NAME
 order by allrwa.RISK_EXPOSURE_LEV01_CODE
 ;
 
 -- -- 风险暴露(一级)缓释前风险暴露占比
-select allrwa.RISK_EXPOSURE_LEV01_CODE, allrwa.RISK_EXPOSURE_LEV01_CODE_NAME , sum(sumead) as allsumead from (
-select onmaster.RISK_EXPOSURE_LEV01_CODE, onmaster.RISK_EXPOSURE_LEV01_CODE_NAME, sum(EAD) as sumead
-from rwa_apm_bus_rs_onbusinessrwa_master onmaster
-where onmaster.CALCINDEX = (SELECT CALCINDEX FROM RWA_CALC_RS_TASK_MASTER A WHERE A.TERM = (getLastTerm()))
-group by onmaster.RISK_EXPOSURE_LEV01_CODE, onmaster.RISK_EXPOSURE_LEV01_CODE_NAME
-union all
-SELECT RISK_EXPOSURE_LEV01_CODE, RISK_EXPOSURE_LEV01_CODE_NAME, sum(EAD) as sumead
-FROM rwa_apm_bus_rs_offbusinessrwa_master offmaster
-where offmaster.CALCINDEX = (SELECT CALCINDEX FROM RWA_CALC_RS_TASK_MASTER A WHERE A.TERM = (getLastTerm()))
-group by offmaster.RISK_EXPOSURE_LEV01_CODE, offmaster.RISK_EXPOSURE_LEV01_CODE_NAME
-) allrwa group by allrwa.RISK_EXPOSURE_LEV01_CODE, allrwa.RISK_EXPOSURE_LEV01_CODE_NAME
+select allrwa.RISK_EXPOSURE_LEV01_CODE, allrwa.RISK_EXPOSURE_LEV01_CODE_NAME, sum(sumead) as allsumead
+from (select onmaster.RISK_EXPOSURE_LEV01_CODE, onmaster.RISK_EXPOSURE_LEV01_CODE_NAME, sum(EAD) as sumead
+      from rwa_apm_bus_rs_onbusinessrwa_master onmaster
+      where onmaster.CALCINDEX = (SELECT CALCINDEX FROM RWA_CALC_RS_TASK_MASTER A WHERE A.TERM = (getLastTerm()))
+      group by onmaster.RISK_EXPOSURE_LEV01_CODE, onmaster.RISK_EXPOSURE_LEV01_CODE_NAME
+      union all
+      SELECT RISK_EXPOSURE_LEV01_CODE, RISK_EXPOSURE_LEV01_CODE_NAME, sum(EAD) as sumead
+      FROM rwa_apm_bus_rs_offbusinessrwa_master offmaster
+      where offmaster.CALCINDEX = (SELECT CALCINDEX FROM RWA_CALC_RS_TASK_MASTER A WHERE A.TERM = (getLastTerm()))
+      group by offmaster.RISK_EXPOSURE_LEV01_CODE, offmaster.RISK_EXPOSURE_LEV01_CODE_NAME) allrwa
+group by allrwa.RISK_EXPOSURE_LEV01_CODE, allrwa.RISK_EXPOSURE_LEV01_CODE_NAME
 order by allrwa.RISK_EXPOSURE_LEV01_CODE
 ;
 
 
 -- 缓释
 -- -- 信用风险缓释工具当期缓释覆盖金额占比
-select reg.QUALFIED_CREDIT_TOOL_TYPE ,reg.QUALFIED_CREDIT_TOOL_TYPE_NAME , sum(reg.COVERAGE_RISK) as SUMCOVERAGE_RISK
+select reg.QUALFIED_CREDIT_TOOL_TYPE, reg.QUALFIED_CREDIT_TOOL_TYPE_NAME, sum(reg.COVERAGE_RISK) as SUMCOVERAGE_RISK
 from rwa_apm_bus_rs_regularrcs_master reg
 where reg.CALCINDEX = (SELECT CALCINDEX FROM RWA_CALC_RS_TASK_MASTER A WHERE A.TERM = (getLastTerm()))
 group by reg.QUALFIED_CREDIT_TOOL_TYPE, reg.QUALFIED_CREDIT_TOOL_TYPE_NAME
@@ -92,19 +94,45 @@ order by reg.QUALFIED_CREDIT_TOOL_TYPE
 
 -- RWA 缓释
 -- --风险暴露分类(一级)当期缓释情况
-select allrwa.RISK_EXPOSURE_LEV01_CODE, allrwa.RISK_EXPOSURE_LEV01_CODE_NAME ,sum(sumead) as allsumead, sum(ALLSUM_COVERAGE_RISK) as sumALLSUM_COVERAGE_RISK , sum(ALLUNFINISH_EAD) as SUMALLUNFINISH_EAD from (
-select onmaster.RISK_EXPOSURE_LEV01_CODE, onmaster.RISK_EXPOSURE_LEV01_CODE_NAME
-     , sum(EAD) as sumead, sum(SUM_COVERAGE_RISK) as ALLSUM_COVERAGE_RISK ,sum(UNFINISH_EAD) as ALLUNFINISH_EAD
-from rwa_apm_bus_rs_onbusinessrwa_master onmaster
-where onmaster.CALCINDEX = (SELECT CALCINDEX FROM RWA_CALC_RS_TASK_MASTER A WHERE A.TERM = (getLastTerm()))
-group by onmaster.RISK_EXPOSURE_LEV01_CODE, onmaster.RISK_EXPOSURE_LEV01_CODE_NAME
-union all
-SELECT RISK_EXPOSURE_LEV01_CODE, RISK_EXPOSURE_LEV01_CODE_NAME
-     , sum(EAD) as sumead, sum(SUM_COVERAGE_RISK) as ALLSUM_COVERAGE_RISK ,sum(UNFINISH_EAD) as ALLUNFINISH_EAD
-FROM rwa_apm_bus_rs_offbusinessrwa_master offmaster
-where offmaster.CALCINDEX = (SELECT CALCINDEX FROM RWA_CALC_RS_TASK_MASTER A WHERE A.TERM = (getLastTerm()))
-group by offmaster.RISK_EXPOSURE_LEV01_CODE, offmaster.RISK_EXPOSURE_LEV01_CODE_NAME
-) allrwa group by allrwa.RISK_EXPOSURE_LEV01_CODE, allrwa.RISK_EXPOSURE_LEV01_CODE_NAME
+select allrwa.RISK_EXPOSURE_LEV01_CODE,
+       allrwa.RISK_EXPOSURE_LEV01_CODE_NAME,
+       sum(sumead)               as allsumead,
+       sum(ALLSUM_COVERAGE_RISK) as sumALLSUM_COVERAGE_RISK,
+       sum(ALLUNFINISH_EAD)      as SUMALLUNFINISH_EAD
+from (select onmaster.RISK_EXPOSURE_LEV01_CODE
+           , onmaster.RISK_EXPOSURE_LEV01_CODE_NAME
+           , sum(EAD)               as sumead
+           , sum(SUM_COVERAGE_RISK) as ALLSUM_COVERAGE_RISK
+           , sum(UNFINISH_EAD)      as ALLUNFINISH_EAD
+      from rwa_apm_bus_rs_onbusinessrwa_master onmaster
+      where onmaster.CALCINDEX = (SELECT CALCINDEX FROM RWA_CALC_RS_TASK_MASTER A WHERE A.TERM = (getLastTerm()))
+      group by onmaster.RISK_EXPOSURE_LEV01_CODE, onmaster.RISK_EXPOSURE_LEV01_CODE_NAME
+      union all
+      SELECT RISK_EXPOSURE_LEV01_CODE
+           , RISK_EXPOSURE_LEV01_CODE_NAME
+           , sum(EAD)               as sumead
+           , sum(SUM_COVERAGE_RISK) as ALLSUM_COVERAGE_RISK
+           , sum(UNFINISH_EAD)      as ALLUNFINISH_EAD
+      FROM rwa_apm_bus_rs_offbusinessrwa_master offmaster
+      where offmaster.CALCINDEX = (SELECT CALCINDEX FROM RWA_CALC_RS_TASK_MASTER A WHERE A.TERM = (getLastTerm()))
+      group by offmaster.RISK_EXPOSURE_LEV01_CODE, offmaster.RISK_EXPOSURE_LEV01_CODE_NAME) allrwa
+group by allrwa.RISK_EXPOSURE_LEV01_CODE, allrwa.RISK_EXPOSURE_LEV01_CODE_NAME
 order by allrwa.RISK_EXPOSURE_LEV01_CODE
 ;
 
+
+-- 计算任务过程管理
+
+SELECT CALCINDEX        AS calcIndex,
+       SDATE            AS startDate,
+       EDATE            AS endDate,
+       TERM             AS term,
+       DATA_DATE        AS dataDate,
+       CALCTASK_TYPE_ID AS calcTaskTypeId,
+       CALC_TOOK        AS calcTook,
+       CALC_START_TIME  AS calcStartTime,
+       CALC_END_TIME    AS calcEndTime,
+       CALC_START_TYPE  AS calcStartType,
+       CALC_ACCOUNT     AS calcAccount,
+       CALC_STATE       AS calcState
+FROM RWA_CALC_RS_TASK

+ 13 - 5
Procedure/backend/project/src/main/java/com/sundata/product/rwa/calc/service/CalcUnit.java

@@ -11,14 +11,11 @@ import org.slf4j.LoggerFactory;
 
 import java.io.Serial;
 import java.io.Serializable;
-import java.util.List;
-import java.util.Map;
-import java.util.Objects;
-import java.util.StringJoiner;
+import java.util.*;
 import java.util.concurrent.CompletableFuture;
 import java.util.concurrent.ExecutionException;
 
-public abstract class CalcUnit implements Calc, Serializable {
+public abstract class CalcUnit implements Calc, Serializable, Comparator<CalcUnit> {
     private static final Logger log = LoggerFactory.getLogger(CalcUnit.class);
     @Serial
     private static final long serialVersionUID = 1L;
@@ -262,4 +259,15 @@ public abstract class CalcUnit implements Calc, Serializable {
     private void setStatus(CalcStatus status) {
         this.status = status;
     }
+
+    /**
+     * 需要子对象实现的获取顺序号的方法
+     * @return 序号
+     */
+    public abstract int getSequence();
+
+    @Override
+    public int compare(CalcUnit o1, CalcUnit o2) {
+        return o1.getSequence() - o2.getSequence();
+    }
 }

+ 2 - 1
Procedure/backend/project/src/main/java/com/sundata/product/rwa/calc/service/finals/CalcType.java

@@ -2,8 +2,9 @@ package com.sundata.product.rwa.calc.service.finals;
 
 public enum CalcType {
 
-    MAIN("计算任务"),STAGE("阶段"),DataQuality("数据质量"),GeneralLedger("总账勾稽"),ProjectDivision("项目划分")
+    MAIN("计算任务"),STAGE("阶段"),DataImport("数据补录"),DataQuality("数据质量"),GeneralLedger("总账勾稽"),ProjectDivision("项目划分")
     ,RiskExposure("风险暴露分类"),QualifiedSlowRelease("合格缓释认定"),SingleRWA("单笔债项RWA"),IntegratedRWA("法人RWA")
+    ,ReportInit("报表填报"),SQL("SQL任务")
     ;
 
     private final String name ;

+ 2 - 0
Procedure/backend/project/src/main/java/com/sundata/product/rwa/calc/service/implement/CalcTaskService.java

@@ -5,6 +5,7 @@ import cn.hutool.core.util.NumberUtil;
 import cn.hutool.core.util.ReUtil;
 import cn.hutool.core.util.StrUtil;
 import com.sundata.admin.nounmanage.service.NounManageService;
+import com.sundata.product.rwa.calc.running.CalcRunning;
 import com.sundata.product.rwa.calc.utils.DateChecker;
 import com.sundata.product.rwa.rwacalcconfig004rwa.model.MeteringManageModel;
 import com.sundata.product.rwa.rwacalcconfig004rwa.service.MeteringManageService;
@@ -106,6 +107,7 @@ public class CalcTaskService {
      */
     private void executeOneMetering(MeteringManageModel meteringManageModel, String dateStr) {
 
+//        new CalcRunning().startCalc(null,);
     }
 
 

+ 77 - 8
Procedure/backend/project/src/main/java/com/sundata/product/rwa/calc/service/implement/units/CalcTaskUnit.java

@@ -1,44 +1,113 @@
 package com.sundata.product.rwa.calc.service.implement.units;
 
+import cn.hutool.core.date.DateUtil;
+import cn.hutool.core.date.TimeInterval;
+import cn.hutool.core.util.NumberUtil;
+import cn.hutool.core.util.StrUtil;
+import cn.hutool.extra.spring.SpringUtil;
+import com.sundata.common.util.DBExecutor;
 import com.sundata.product.rwa.calc.service.CalcResult;
 import com.sundata.product.rwa.calc.service.CalcUnit;
 import com.sundata.product.rwa.calc.service.finals.CalcType;
+import com.sundata.product.rwa.rwacalcconfig004rwa.model.MeteringManageModel;
+import com.sundata.product.rwa.rwacalcconfig004rwa.model.StageDefinitionModel;
+import com.sundata.product.rwa.rwacalcconfig004rwa.service.StageConfigService;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
+import java.util.ArrayList;
+import java.util.LinkedList;
 import java.util.List;
 import java.util.Map;
 
+/**
+ * 计算任务的计算过程处理器
+ */
 public class CalcTaskUnit extends CalcUnit {
 
+    static final Logger log = LoggerFactory.getLogger(CalcTaskUnit.class);
+
+    final MeteringManageModel meteringManageModel;
+    final TimeInterval timeInterval = new TimeInterval();
+
     /**
      * 创建数据单元的绝对对象,对象必须包含如下参数
      *
      * @param calcCode    计算对象编号
      * @param calcName    计算对象名称
-     * @param calcType    计算类型
      * @param initContext 计算单元初始化参数
      */
-    public CalcTaskUnit(String calcCode, String calcName, CalcType calcType, Map<String, Object> initContext) {
-        super(calcCode, calcName, calcType, initContext);
+    public CalcTaskUnit(MeteringManageModel meteringManageModel, String calcCode, String calcName, Map<String, Object> initContext) {
+        super(calcCode, calcName, CalcType.MAIN, initContext);
+        this.meteringManageModel = meteringManageModel;
+        timeInterval.start();
     }
 
     @Override
     public boolean isCalcFinished(String calculateInstanceNumber) {
-        return false;
+        String calc_state = DBExecutor.doQuery("select CALC_STATE from RWA_CALC_RS_TASK where CALCINDEX = '" + calculateInstanceNumber + "' and CALCTASK_TYPE_ID = '" + meteringManageModel.getCalctaskTypeId() + "'");
+        if (StrUtil.isBlank(calc_state)) {
+            return false;
+        } else return StrUtil.isNotBlank(calc_state) && "END".equals(calc_state);
     }
 
     @Override
     public void initResultContext(String calculateInstanceNumber) {
-
+        CalcResult<String, Object> result = new CalcResult<>(calculateInstanceNumber);
+        Map<String, Object> dataMap = DBExecutor.doQueryMap("select CALCINDEX        AS calcIndex,\n" +
+                "       SDATE            AS startDate,\n" +
+                "       EDATE            AS endDate,\n" +
+                "       TERM             AS term,\n" +
+                "       DATA_DATE        AS dataDate,\n" +
+                "       CALCTASK_TYPE_ID AS calcTaskTypeId,\n" +
+                "       CALC_TOOK        AS calcTook,\n" +
+                "       CALC_START_TIME  AS calcStartTime,\n" +
+                "       CALC_END_TIME    AS calcEndTime,\n" +
+                "       CALC_START_TYPE  AS calcStartType,\n" +
+                "       CALC_ACCOUNT     AS calcAccount,\n" +
+                "       CALC_STATE       AS calcState from RWA_CALC_RS_TASK where CALCINDEX = '" + calculateInstanceNumber + "'and CALCTASK_TYPE_ID = '" + meteringManageModel.getCalctaskTypeId() + "'");
+        result.put(calculateInstanceNumber, dataMap);
+        this.setResultContext(result);
     }
 
     @Override
     public List<CalcUnit> getSourceCalcUnits() {
-        return List.of();
+        List<CalcUnit> sourceCalcUnits = new LinkedList<>();
+        // 搜索阶段的过程包括了所有阶段
+        StageConfigService stageConfigService = SpringUtil.getBean("stageConfigService");
+        List<StageDefinitionModel> getDataList = stageConfigService.getDataList(new StageDefinitionModel());
+        getDataList.sort((a,b) -> {
+            if (StrUtil.isBlank(a.getStageIndex())){
+                a.setStageIndex("0");
+            }
+            if (StrUtil.isBlank(b.getStageIndex())){
+                b.setStageIndex("0");
+            }
+            int aN = NumberUtil.parseInt(a.getStageIndex(), 0);
+            int bN = NumberUtil.parseInt(b.getStageIndex(), 0);
+            return aN - bN;
+        });
+        for (StageDefinitionModel stageDefinitionModel : getDataList) {
+            if ("0".equals(stageDefinitionModel.getStageIsvalid())) {
+                continue;
+            }
+            StageUnit stageUnit = new StageUnit(stageDefinitionModel, stageDefinitionModel.getStageId(), stageDefinitionModel.getStageName(), this.getInitContext());
+            sourceCalcUnits.add(stageUnit);
+        }
+        return sourceCalcUnits;
     }
 
     @Override
-    public void afterCalc(Map<String, Object> context) {
+    public int getSequence() {
+        return 0;
+    }
 
+    @Override
+    public void afterCalc(Map<String, Object> context) {
+        log.info("计算完成,更新计算任务数据。");
+        DBExecutor.doModify("update RWA_CALC_RS_TASK set SDATE = '" + context.get("SDATE") + "' , EDATE = '" + context.get("EDATE") + "'" +
+                ", TERM = '" + context.get("TERM") + "',CALC_TOOK='" + DateUtil.formatBetween(timeInterval.interval()) + "',CALC_END_TIME='" + DateUtil.formatDateTime(DateUtil.date()) + "',CALC_STATE='END' where  CALCINDEX = '" + meteringManageModel.getCalctaskTypeId() + "'");
+        timeInterval.clear();
     }
 
     @Override
@@ -48,6 +117,6 @@ public class CalcTaskUnit extends CalcUnit {
 
     @Override
     public void calc(CalcResult<String, Object> thisResult, String calculateInstanceNumber, Map<String, Object> context, Map<CalcUnit, CalcResult<String, Object>> sourceResults) {
-
+        log.debug("计算任务过程为空,本身计算任务不计算任何事件,本计算过程意味着计算已经完成,更新相关数据");
     }
 }

+ 64 - 0
Procedure/backend/project/src/main/java/com/sundata/product/rwa/calc/service/implement/units/DataImportUnit.java

@@ -0,0 +1,64 @@
+package com.sundata.product.rwa.calc.service.implement.units;
+
+import com.sundata.product.rwa.calc.service.CalcResult;
+import com.sundata.product.rwa.calc.service.CalcUnit;
+import com.sundata.product.rwa.calc.service.finals.CalcType;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+
+public class DataImportUnit extends CalcUnit {
+    static final Logger log = LoggerFactory.getLogger(DataImportUnit.class);
+    /**
+     * 创建数据单元的绝对对象,对象必须包含如下参数
+     *
+     * @param calcCode    计算对象编号
+     * @param calcName    计算对象名称
+     * @param initContext 计算单元初始化参数
+     */
+    public DataImportUnit(String calcCode, String calcName, Map<String, Object> initContext) {
+        super(calcCode, calcName, CalcType.DataImport, initContext);
+    }
+
+    @Override
+    public boolean isCalcFinished(String calculateInstanceNumber) {
+        return false;
+    }
+
+    @Override
+    public void initResultContext(String calculateInstanceNumber) {
+
+    }
+
+    @Override
+    public List<CalcUnit> getSourceCalcUnits() {
+        List<CalcUnit> sqlCalcUnits = new ArrayList<CalcUnit>();
+        //TODO 需要处理sql 执行过程的内容
+        SqlUnit sqlUnit = new SqlUnit("sql-"+this.getCalcCode()+"-","sql-"+this.getCalcCode()+"-",getInitContext(),"select 1",1);
+        sqlCalcUnits.add(sqlUnit);
+        return sqlCalcUnits;
+    }
+
+    @Override
+    public int getSequence() {
+        return 0;
+    }
+
+    @Override
+    public void afterCalc(Map<String, Object> context) {
+
+    }
+
+    @Override
+    public void beforeCalc(Map<String, Object> context) {
+
+    }
+
+    @Override
+    public void calc(CalcResult<String, Object> thisResult, String calculateInstanceNumber, Map<String, Object> context, Map<CalcUnit, CalcResult<String, Object>> sourceResults) {
+        log.debug("本单元仅处理SQL脚本,将脚本处理的内容参数替换后进行执行。");
+    }
+}

+ 7 - 3
Procedure/backend/project/src/main/java/com/sundata/product/rwa/calc/service/implement/units/DataQualityUnit.java

@@ -13,11 +13,10 @@ public class DataQualityUnit extends CalcUnit {
      *
      * @param calcCode    计算对象编号
      * @param calcName    计算对象名称
-     * @param calcType    计算类型
      * @param initContext 计算单元初始化参数
      */
-    public DataQualityUnit(String calcCode, String calcName, CalcType calcType, Map<String, Object> initContext) {
-        super(calcCode, calcName, calcType, initContext);
+    public DataQualityUnit(String calcCode, String calcName, Map<String, Object> initContext) {
+        super(calcCode, calcName, CalcType.DataQuality, initContext);
     }
 
     @Override
@@ -35,6 +34,11 @@ public class DataQualityUnit extends CalcUnit {
         return List.of();
     }
 
+    @Override
+    public int getSequence() {
+        return 0;
+    }
+
     @Override
     public void afterCalc(Map<String, Object> context) {
 

+ 7 - 3
Procedure/backend/project/src/main/java/com/sundata/product/rwa/calc/service/implement/units/GeneralLedgerUnit.java

@@ -13,11 +13,10 @@ public class GeneralLedgerUnit extends CalcUnit {
      *
      * @param calcCode    计算对象编号
      * @param calcName    计算对象名称
-     * @param calcType    计算类型
      * @param initContext 计算单元初始化参数
      */
-    public GeneralLedgerUnit(String calcCode, String calcName, CalcType calcType, Map<String, Object> initContext) {
-        super(calcCode, calcName, calcType, initContext);
+    public GeneralLedgerUnit(String calcCode, String calcName, Map<String, Object> initContext) {
+        super(calcCode, calcName, CalcType.GeneralLedger, initContext);
     }
 
     @Override
@@ -35,6 +34,11 @@ public class GeneralLedgerUnit extends CalcUnit {
         return List.of();
     }
 
+    @Override
+    public int getSequence() {
+        return 0;
+    }
+
     @Override
     public void afterCalc(Map<String, Object> context) {
 

+ 7 - 3
Procedure/backend/project/src/main/java/com/sundata/product/rwa/calc/service/implement/units/IntegratedRWAUnit.java

@@ -13,11 +13,10 @@ public class IntegratedRWAUnit extends CalcUnit {
      *
      * @param calcCode    计算对象编号
      * @param calcName    计算对象名称
-     * @param calcType    计算类型
      * @param initContext 计算单元初始化参数
      */
-    public IntegratedRWAUnit(String calcCode, String calcName, CalcType calcType, Map<String, Object> initContext) {
-        super(calcCode, calcName, calcType, initContext);
+    public IntegratedRWAUnit(String calcCode, String calcName, Map<String, Object> initContext) {
+        super(calcCode, calcName, CalcType.IntegratedRWA, initContext);
     }
 
     @Override
@@ -35,6 +34,11 @@ public class IntegratedRWAUnit extends CalcUnit {
         return List.of();
     }
 
+    @Override
+    public int getSequence() {
+        return 0;
+    }
+
     @Override
     public void afterCalc(Map<String, Object> context) {
 

+ 7 - 3
Procedure/backend/project/src/main/java/com/sundata/product/rwa/calc/service/implement/units/ProjectDivisionUnit.java

@@ -13,11 +13,10 @@ public class ProjectDivisionUnit extends CalcUnit {
      *
      * @param calcCode    计算对象编号
      * @param calcName    计算对象名称
-     * @param calcType    计算类型
      * @param initContext 计算单元初始化参数
      */
-    public ProjectDivisionUnit(String calcCode, String calcName, CalcType calcType, Map<String, Object> initContext) {
-        super(calcCode, calcName, calcType, initContext);
+    public ProjectDivisionUnit(String calcCode, String calcName, Map<String, Object> initContext) {
+        super(calcCode, calcName, CalcType.ProjectDivision, initContext);
     }
 
     @Override
@@ -35,6 +34,11 @@ public class ProjectDivisionUnit extends CalcUnit {
         return List.of();
     }
 
+    @Override
+    public int getSequence() {
+        return 0;
+    }
+
     @Override
     public void afterCalc(Map<String, Object> context) {
 

+ 7 - 3
Procedure/backend/project/src/main/java/com/sundata/product/rwa/calc/service/implement/units/QualifiedSlowReleaseUnit.java

@@ -13,11 +13,10 @@ public class QualifiedSlowReleaseUnit extends CalcUnit {
      *
      * @param calcCode    计算对象编号
      * @param calcName    计算对象名称
-     * @param calcType    计算类型
      * @param initContext 计算单元初始化参数
      */
-    public QualifiedSlowReleaseUnit(String calcCode, String calcName, CalcType calcType, Map<String, Object> initContext) {
-        super(calcCode, calcName, calcType, initContext);
+    public QualifiedSlowReleaseUnit(String calcCode, String calcName, Map<String, Object> initContext) {
+        super(calcCode, calcName, CalcType.QualifiedSlowRelease, initContext);
     }
 
     @Override
@@ -35,6 +34,11 @@ public class QualifiedSlowReleaseUnit extends CalcUnit {
         return List.of();
     }
 
+    @Override
+    public int getSequence() {
+        return 0;
+    }
+
     @Override
     public void afterCalc(Map<String, Object> context) {
 

+ 56 - 0
Procedure/backend/project/src/main/java/com/sundata/product/rwa/calc/service/implement/units/ReportInitUnit.java

@@ -0,0 +1,56 @@
+package com.sundata.product.rwa.calc.service.implement.units;
+
+import com.sundata.product.rwa.calc.service.CalcResult;
+import com.sundata.product.rwa.calc.service.CalcUnit;
+import com.sundata.product.rwa.calc.service.finals.CalcType;
+
+import java.util.List;
+import java.util.Map;
+
+public class ReportInitUnit extends CalcUnit {
+    /**
+     * 创建数据单元的绝对对象,对象必须包含如下参数
+     *
+     * @param calcCode    计算对象编号
+     * @param calcName    计算对象名称
+     * @param initContext 计算单元初始化参数
+     */
+    public ReportInitUnit(String calcCode, String calcName, Map<String, Object> initContext) {
+        super(calcCode, calcName, CalcType.ReportInit, initContext);
+    }
+
+    @Override
+    public boolean isCalcFinished(String calculateInstanceNumber) {
+        return false;
+    }
+
+    @Override
+    public void initResultContext(String calculateInstanceNumber) {
+
+    }
+
+    @Override
+    public List<CalcUnit> getSourceCalcUnits() {
+        return List.of();
+    }
+
+    @Override
+    public int getSequence() {
+        return 0;
+    }
+
+    @Override
+    public void afterCalc(Map<String, Object> context) {
+
+    }
+
+    @Override
+    public void beforeCalc(Map<String, Object> context) {
+
+    }
+
+    @Override
+    public void calc(CalcResult<String, Object> thisResult, String calculateInstanceNumber, Map<String, Object> context, Map<CalcUnit, CalcResult<String, Object>> sourceResults) {
+
+    }
+}

+ 7 - 3
Procedure/backend/project/src/main/java/com/sundata/product/rwa/calc/service/implement/units/RiskExposureUnit.java

@@ -13,11 +13,10 @@ public class RiskExposureUnit extends CalcUnit {
      *
      * @param calcCode    计算对象编号
      * @param calcName    计算对象名称
-     * @param calcType    计算类型
      * @param initContext 计算单元初始化参数
      */
-    public RiskExposureUnit(String calcCode, String calcName, CalcType calcType, Map<String, Object> initContext) {
-        super(calcCode, calcName, calcType, initContext);
+    public RiskExposureUnit(String calcCode, String calcName, Map<String, Object> initContext) {
+        super(calcCode, calcName, CalcType.RiskExposure, initContext);
     }
 
     @Override
@@ -35,6 +34,11 @@ public class RiskExposureUnit extends CalcUnit {
         return List.of();
     }
 
+    @Override
+    public int getSequence() {
+        return 0;
+    }
+
     @Override
     public void afterCalc(Map<String, Object> context) {
 

+ 7 - 3
Procedure/backend/project/src/main/java/com/sundata/product/rwa/calc/service/implement/units/SingleRWAUnit.java

@@ -13,11 +13,10 @@ public class SingleRWAUnit extends CalcUnit {
      *
      * @param calcCode    计算对象编号
      * @param calcName    计算对象名称
-     * @param calcType    计算类型
      * @param initContext 计算单元初始化参数
      */
-    public SingleRWAUnit(String calcCode, String calcName, CalcType calcType, Map<String, Object> initContext) {
-        super(calcCode, calcName, calcType, initContext);
+    public SingleRWAUnit(String calcCode, String calcName, Map<String, Object> initContext) {
+        super(calcCode, calcName, CalcType.SingleRWA, initContext);
     }
 
     @Override
@@ -35,6 +34,11 @@ public class SingleRWAUnit extends CalcUnit {
         return List.of();
     }
 
+    @Override
+    public int getSequence() {
+        return 0;
+    }
+
     @Override
     public void afterCalc(Map<String, Object> context) {
 

+ 75 - 0
Procedure/backend/project/src/main/java/com/sundata/product/rwa/calc/service/implement/units/SqlUnit.java

@@ -0,0 +1,75 @@
+package com.sundata.product.rwa.calc.service.implement.units;
+
+import com.sundata.common.util.DBExecutor;
+import com.sundata.product.rwa.calc.service.CalcResult;
+import com.sundata.product.rwa.calc.service.CalcUnit;
+import com.sundata.product.rwa.calc.service.finals.CalcType;
+import org.apache.commons.text.StringSubstitutor;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+public class SqlUnit extends CalcUnit {
+    final static Logger log = LoggerFactory.getLogger(SqlUnit.class);
+    final String sql;
+    final int sequence;
+
+    /**
+     * 创建数据单元的绝对对象,对象必须包含如下参数
+     *
+     * @param calcCode    计算对象编号
+     * @param calcName    计算对象名称
+     * @param initContext 计算单元初始化参数
+     */
+    public SqlUnit(String calcCode, String calcName, Map<String, Object> initContext, String sql, int sequence) {
+        super(calcCode, calcName, CalcType.SQL, initContext);
+        this.sql = sql;
+        this.sequence = sequence;
+    }
+
+    @Override
+    public boolean isCalcFinished(String calculateInstanceNumber) {
+        return false;
+    }
+
+    @Override
+    public void initResultContext(String calculateInstanceNumber) {
+
+    }
+
+    @Override
+    public List<CalcUnit> getSourceCalcUnits() {
+        return List.of();
+    }
+
+    @Override
+    public int getSequence() {
+        return this.sequence;
+    }
+
+    @Override
+    public void afterCalc(Map<String, Object> context) {
+
+    }
+
+    @Override
+    public void beforeCalc(Map<String, Object> context) {
+
+    }
+
+    @Override
+    public void calc(CalcResult<String, Object> thisResult, String calculateInstanceNumber, Map<String, Object> context, Map<CalcUnit, CalcResult<String, Object>> sourceResults) {
+
+        Map<String, Object> dataMap = new HashMap<>();
+        dataMap.putAll(getInitContext());
+        dataMap.putAll(context);
+
+        StringSubstitutor stringSubstitutor = new StringSubstitutor(dataMap);
+        String finalSql = stringSubstitutor.replace(sql);
+        log.debug("执行SQL:{}", finalSql);
+        DBExecutor.doModify(finalSql);
+    }
+}

+ 58 - 4
Procedure/backend/project/src/main/java/com/sundata/product/rwa/calc/service/implement/units/StageUnit.java

@@ -1,24 +1,33 @@
 package com.sundata.product.rwa.calc.service.implement.units;
 
+import cn.hutool.core.util.NumberUtil;
+import cn.hutool.core.util.StrUtil;
 import cn.hutool.extra.spring.SpringUtil;
 import com.sundata.product.rwa.calc.service.CalcResult;
 import com.sundata.product.rwa.calc.service.CalcUnit;
 import com.sundata.product.rwa.calc.service.finals.CalcType;
+import com.sundata.product.rwa.rwacalcconfig004rwa.model.StageDefinitionModel;
+import com.sundata.product.rwa.rwacalcconfig004rwa.model.StageStepsModel;
+import com.sundata.product.rwa.rwacalcconfig004rwa.service.StageConfigService;
 
+import java.util.LinkedList;
 import java.util.List;
 import java.util.Map;
 
 public class StageUnit extends CalcUnit {
+
+    final StageDefinitionModel stageDefinitionModel;
+
     /**
      * 创建数据单元的绝对对象,对象必须包含如下参数
      *
      * @param calcCode    计算对象编号
      * @param calcName    计算对象名称
-     * @param calcType    计算类型
      * @param initContext 计算单元初始化参数
      */
-    public StageUnit(String calcCode, String calcName, CalcType calcType, Map<String, Object> initContext) {
-        super(calcCode, calcName, calcType, initContext);
+    public StageUnit(StageDefinitionModel stageDefinitionModel, String calcCode, String calcName, Map<String, Object> initContext) {
+        super(calcCode, calcName, CalcType.STAGE, initContext);
+        this.stageDefinitionModel = stageDefinitionModel;
     }
 
     @Override
@@ -33,10 +42,55 @@ public class StageUnit extends CalcUnit {
 
     @Override
     public List<CalcUnit> getSourceCalcUnits() {
-        SpringUtil.getBean("calcUnitService");
+        List<CalcUnit> calcUnitList = new LinkedList<>();
+        StageConfigService stageConfigService = SpringUtil.getBean("stageConfigService");
+        StageStepsModel model = new StageStepsModel();
+        model.setStepId(stageDefinitionModel.getStageId());
+        List<StageStepsModel> stageStepsModels = stageConfigService.getStageConfigRuleList(model);
+        stageStepsModels.sort((a, b) -> {
+            if (StrUtil.isBlank(a.getStepIndex())) {
+                a.setStepIndex("0");
+            }
+            if (StrUtil.isBlank(b.getStepIndex())) {
+                b.setStepIndex("0");
+            }
+            int aN = NumberUtil.parseInt(a.getStepIndex(), 0);
+            int bN = NumberUtil.parseInt(b.getStepIndex(), 0);
+            return aN - bN;
+        });
+        for (int i = 0; i < stageStepsModels.size(); i++) {
+//            stepType
+            StageStepsModel sm = stageStepsModels.get(i);
+            CalcUnit unit = null;
+            if ("1".equals(sm.getStepType())) {
+                unit = new SqlUnit("SQL"+sm.getStepIndex(),"SQL"+sm.getStepIndex(),this.getInitContext(),sm.getStepInfo(),NumberUtil.parseInt(sm.getStepIndex()));
+            }else if ("2".equals(sm.getStepType())) {
+
+            }else if ("3".equals(sm.getStepType())) {
+
+            }else if ("4".equals(sm.getStepType())) {
+
+            }else if ("5".equals(sm.getStepType())) {
+
+            }else if ("6".equals(sm.getStepType())) {
+
+            }else if ("7".equals(sm.getStepType())) {
+
+            }
+            calcUnitList.add(unit);
+
+        }
         return List.of();
     }
 
+    @Override
+    public int getSequence() {
+        if (StrUtil.isBlank(stageDefinitionModel.getStageIndex())) {
+            stageDefinitionModel.setStageIndex("0");
+        }
+        return NumberUtil.parseInt(stageDefinitionModel.getStageIndex());
+    }
+
     @Override
     public void afterCalc(Map<String, Object> context) {