Browse Source

增加总账勾稽对11303001,702002科目特殊处理,增加表外风险暴露划分取值,调整内管报表前10大科目的取数脚本。

zhang_qk 2 days ago
parent
commit
0d740c2515

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

@@ -138,7 +138,7 @@ public class GeneralLedgerGetterUnit extends CalcUnit {
         sqlParam.addValue("EDATE", EDATE);
         sqlParam.addValue("TERM", TERM);
         sqlParam.addValue("DATA_DATE", DATA_DATE);
-        sqlParam.addValue("ORGCODE", "000000");// TODO 找不到对应科目的法人机构号
+        sqlParam.addValue("ORGCODE", "351001");// TODO 找不到对应科目的法人机构号
 
 
         String deleteSql = "truncate table rwa_apm_bus_rs_ledgergeneral";
@@ -241,7 +241,7 @@ public class GeneralLedgerGetterUnit extends CalcUnit {
                 RISK_EXPOSURE_LEV01_CODE = LevelUtil.subAndAdd(ledgerRiskexposureNo, 3, "00");
                 RISK_EXPOSURE_LEV01_CODE_NAME = riskExposureDefinitionModelMap.get(RISK_EXPOSURE_LEV01_CODE).getRiskExposureName();
             }
-            if (map != null && ledgerRiskexposureNo.indexOf("00") == 7) {
+            if (map != null && (ledgerRiskexposureNo.indexOf("00") == 7  || ledgerRiskexposureNo.indexOf("00") == 6)) {
                 RISK_EXPOSURE_LEV03_CODE = LevelUtil.subAndAdd(ledgerRiskexposureNo, 1, "00");
                 RISK_EXPOSURE_LEV03_CODE_NAME = riskExposureDefinitionModelMap.get(RISK_EXPOSURE_LEV03_CODE).getRiskExposureName();
                 RISK_EXPOSURE_LEV02_CODE = LevelUtil.subAndAdd(ledgerRiskexposureNo, 2, "00");

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

@@ -15,6 +15,7 @@ import com.sundata.product.rwa.resultList.model.DiffconfigListModel;
 import com.sundata.product.rwa.resultList.model.RuleListModel;
 import com.sundata.product.rwa.resultList.service.DiffconfigListService;
 import com.sundata.product.rwa.resultList.service.RuleListService;
+import com.sundata.product.rwa.rwaCalcConfig002offbalanceprotype.model.InfoListModel;
 import com.sundata.product.rwa.rwacalcconfig001riskexposure.model.RiskExposureDefinitionModel;
 import com.sundata.product.rwa.util.DataUtil;
 import com.sundata.product.rwa.util.LevelUtil;
@@ -151,7 +152,7 @@ public class GeneralLedgerUnit extends CalcUnit {
         sqlParam.addValue("EDATE", EDATE);
         sqlParam.addValue("TERM", TERM);
         sqlParam.addValue("DATA_DATE", DATA_DATE);
-        sqlParam.addValue("ORGCODE", "000000");// TODO 找不到对应科目的法人机构号
+        sqlParam.addValue("ORGCODE", "351001");// TODO 找不到对应科目的法人机构号
 
         RuleListService ruleListService = SpringUtil.getBean(RuleListService.class);
         List<RuleListModel> ruleListModels = ruleListService.rule_list(new RuleListModel());
@@ -183,6 +184,29 @@ public class GeneralLedgerUnit extends CalcUnit {
             riskExposureDefinitionModelMap.put(model.getRiskExposureNo(), model);
         }
 
+        // 初始化 表外项目划分
+        List<Map<String, Object>> offObjectTypes = jdbcTemplate.query("select CALCINDEX, SDATE, EDATE, TERM, DATA_DATE, OFFOBJECT_NO, OFFOBJECT_NAME, OFFOBJECT_STAGE_ID, OFFOBJECT_INDEX, DEFAULT_OUT, OFFOBJECT_SUPER, ISMINI, CCF, RISK_EXPOSE_CLASS_CODE, YESORNO from RWA_CALC_CONF_OFFBALANCEPROTYPE", new UpperMapRowMapper());
+        Map<String, InfoListModel> infoListModel = new HashMap<>();
+        for (Map<String, Object> offObjectType : offObjectTypes) {
+            InfoListModel model = new InfoListModel();
+            model.setCalcindex((String) DataUtil.getDataDefault(offObjectType.get("CALCINDEX"), String.class));
+            model.setSdate((String) DataUtil.getDataDefault(offObjectType.get("SDATE"), String.class));
+            model.setEdate((String) DataUtil.getDataDefault(offObjectType.get("EDATE"), String.class));
+            model.setTerm((String) DataUtil.getDataDefault(offObjectType.get("TERM"), String.class));
+            model.setDataDate((String) DataUtil.getDataDefault(offObjectType.get("DATA_DATE"), String.class));
+            model.setOffobjectNo((String) DataUtil.getDataDefault(offObjectType.get("OFFOBJECT_NO"), String.class));
+            model.setOffobjectName((String) DataUtil.getDataDefault(offObjectType.get("OFFOBJECT_NAME"), String.class));
+            model.setOffobjectStageId((String) DataUtil.getDataDefault(offObjectType.get("OFFOBJECT_STAGE_ID"), String.class));
+            model.setOffobjectIndex((BigDecimal) DataUtil.getDataDefault(offObjectType.get("OFFOBJECT_INDEX"), BigDecimal.class));
+            model.setDefaultOut((String) DataUtil.getDataDefault(offObjectType.get("DEFAULT_OUT"), String.class));
+            model.setOffobjectSuper((String) DataUtil.getDataDefault(offObjectType.get("OFFOBJECT_SUPER"), String.class));
+            model.setIsmini((String) DataUtil.getDataDefault(offObjectType.get("ISMINI"), String.class));
+            model.setCcf((BigDecimal) DataUtil.getDataDefault(offObjectType.get("CCF"), BigDecimal.class));
+            model.setRiskExposeClassCode((String) DataUtil.getDataDefault(offObjectType.get("RISK_EXPOSE_CLASS_CODE"), String.class));
+            model.setYesorno((String) DataUtil.getDataDefault(offObjectType.get("YESORNO"), String.class));
+            infoListModel.put(model.getOffobjectNo(), model);
+        }
+
 
         for (DiffconfigListModel diffconfigListModel : diffconfigListModels) {
             List<RuleListModel> ruleListModelList = diffconfigListService.rule_queryone2(diffconfigListModel.getRuleNo());
@@ -192,7 +216,9 @@ public class GeneralLedgerUnit extends CalcUnit {
         }
 
         for (RuleListModel ruleListModel : ruleListModels) {
-
+            if(ruleListModel.getYesorno().equals("作废")){ // 20250603 是否增加判断 把作废的规则不参与计算
+                continue;
+            }
             String subjectSql = sub.replace(ruleListModel.getSubjectSql().replace("#{","${")); // 处理所有的配置转为 可被替换的 $);
             String productSql = sub.replace(ruleListModel.getProductSql().replace("#{","${")); // 处理所有的配置转为 可被替换的 $);
 
@@ -207,18 +233,29 @@ public class GeneralLedgerUnit extends CalcUnit {
             BigDecimal subjectSumBigDecimal = new BigDecimal(subjectSum); // 总账汇总金额(万元)
             BigDecimal productSumBigDecimal = new BigDecimal(productSum); // 勾稽汇总金额(万元)
             BigDecimal differAmt = subjectSumBigDecimal.subtract(productSumBigDecimal);// 取 总账-勾稽明细 // 核对差异金额 不是万元
+            BigDecimal differAmt1 =differAmt;
+            BigDecimal differAmt2 =differAmt.add(BigDecimal.valueOf(1900000.00))  ;
             BigDecimal on = BigDecimal.ZERO; // 本期余额
             BigDecimal off = BigDecimal.ZERO;// 转换前资产
             BigDecimal o = BigDecimal.ZERO;// 计提准备金
-            if (ruleListModel.getOnoroff() != null && !ruleListModel.getOnoroff().equals("ON")) {
-                on = differAmt;
-                if ("04".equals(ruleListModel.getSubjectNature())) {
+            if (ruleListModel.getOnoroff() != null && ruleListModel.getOnoroff().equals("ON")) {
+                if(ruleListModel.getGlCode().equals("702002")){
+                    on = differAmt2;
+                }else{
+                    on = differAmt;
+                }// 是否是判断为表内 20250603
+
+                if ("减值类科目".equals(ruleListModel.getSubjectNature())) { // 引用字段结果为中文 20250603
                     o = differAmt;
                     differAmt = BigDecimal.ZERO.subtract(differAmt);
                 }
             } else if (ruleListModel.getOnoroff() != null && ruleListModel.getOnoroff().equals("OFF")) {
-                off = differAmt;
-                if ("04".equals(ruleListModel.getSubjectNature())) {
+                if(ruleListModel.getGlCode().equals("702002")){
+                    off = differAmt2;
+                }else{
+                    off = differAmt;
+                }
+                if ("减值类科目".equals(ruleListModel.getSubjectNature())) {
                     o = differAmt;
                     differAmt = BigDecimal.ZERO.subtract(differAmt);
                 }
@@ -234,11 +271,11 @@ public class GeneralLedgerUnit extends CalcUnit {
 //            private String negativeRiskType;   //负差异风险暴露分类
 //            private String positiveOffProjectType;   //正差异表外项目分类
 //            private String negativeOffProjectType;   //负差异表外项目分类
-            if (differAmt.compareTo(BigDecimal.ZERO) < 0) {
+            if (differAmt1.compareTo(BigDecimal.ZERO) < 0) {
                 // 如果 为负数 总账 小于 勾稽明细
                 riskType = ruleListModel.getNegativeRiskType();
                 offProjectType = ruleListModel.getNegativeOffProjectType();
-            } else if (differAmt.compareTo(BigDecimal.ZERO) > 0) {
+            } else if (differAmt1.compareTo(BigDecimal.ZERO) > 0) {
                 // 如果 为正数 总账 大于 勾稽明细
                 riskType = ruleListModel.getPositiveRiskType();
                 offProjectType = ruleListModel.getPositiveOffProjectType();
@@ -249,26 +286,36 @@ public class GeneralLedgerUnit extends CalcUnit {
             }
 
             BigDecimal RISKEXPOSURE_WEIGHT =BigDecimal.ZERO;
-            if(!riskType.equals("")){
-                 RISKEXPOSURE_WEIGHT = (BigDecimal) DataUtil.getDataDefault(riskExposureDefinitionModelMap.get(riskType).getRiskExposureWeight(), BigDecimal.class);
+            if(!riskType.equals("") || ruleListModel.getGlCode().equals("702002")){
+                if(ruleListModel.getGlCode().equals("11303001")){
+                    riskType = "R02010000";
+                }else if(ruleListModel.getGlCode().equals("702002")){ // 如果取负风险暴露 没有配权重 20250605
+                    riskType ="P010100";
+                }
+                if(ruleListModel.getOnoroff().equals("ON")) {
+                    RISKEXPOSURE_WEIGHT = (BigDecimal) DataUtil.getDataDefault(riskExposureDefinitionModelMap.get(riskType).getRiskExposureWeight(), BigDecimal.class);
+                }
+                if(ruleListModel.getOnoroff().equals("OFF")){
+                    RISKEXPOSURE_WEIGHT = (BigDecimal) DataUtil.getDataDefault(infoListModel.get(riskType).getCcf(), BigDecimal.class);
+                }
             }
             // 债项风险权重
            DiffconfigListModel diffconfigListModel = subjectDiffConfig.get(ruleListModel.getGlCode());
-            BigDecimal differRate = BigDecimal.ZERO; // 核对差异率%
-            if(subjectSumBigDecimal != BigDecimal.ZERO) {
-                 differRate = differAmt.divide(subjectSumBigDecimal, 8, RoundingMode.HALF_UP); // 核对差异率%
+            BigDecimal differRate = BigDecimal.ZERO; // 核对差异率%  subjectSumBigDecimal
+            if(subjectSumBigDecimal.compareTo(BigDecimal.ZERO) != 0) {  // differAmt 错误 需要改 20250603
+                 differRate = differAmt1.divide(subjectSumBigDecimal, 8, RoundingMode.HALF_UP); // 核对差异率%
             }
-            if (differAmt.compareTo(BigDecimal.ZERO) == 0 && subjectSumBigDecimal.compareTo(BigDecimal.ZERO) == 0) {
+            if (differAmt1.compareTo(BigDecimal.ZERO) == 0 && subjectSumBigDecimal.compareTo(BigDecimal.ZERO) == 0) {
                 differRate = BigDecimal.ZERO;
             }
-            if (differAmt.compareTo(BigDecimal.ZERO) > 0 && subjectSumBigDecimal.compareTo(BigDecimal.ZERO) == 0) {
+            if (differAmt1.compareTo(BigDecimal.ZERO) > 0 && subjectSumBigDecimal.compareTo(BigDecimal.ZERO) == 0) {
                 differRate = BigDecimal.valueOf(999.99);
             }
-            if (differAmt.compareTo(BigDecimal.ZERO) < 0 && subjectSumBigDecimal.compareTo(BigDecimal.ZERO) == 0) {
+            if (differAmt1.compareTo(BigDecimal.ZERO) < 0 && subjectSumBigDecimal.compareTo(BigDecimal.ZERO) == 0) {
                 differRate = BigDecimal.valueOf(-999.99);
             }
             String percThreshold = "[0.0-0.0]"; // 差异容忍度%
-            char isOutDiff = '0';
+            String isOutDiff = "nodeviation"; // 无偏差
             if (diffconfigListModel != null) {
 //                close - close
 //                close - open
@@ -289,17 +336,23 @@ public class GeneralLedgerUnit extends CalcUnit {
                 /*
                 PERCTHRESHOLD 差异容忍度%
                  */
-                percThreshold = split[0] + " " + df.format(diffconfigListModel.getUpperLimit().doubleValue() * 100) + "% - " + df.format(diffconfigListModel.getLowerLimit().doubleValue() * 100) + "% " + split[1];
+                percThreshold = split[0] + " " + df.format(diffconfigListModel.getUpperLimit().doubleValue() ) + "% - " + df.format(diffconfigListModel.getLowerLimit().doubleValue() ) + "% " + split[1];
 
-                if (differRate.doubleValue() > diffconfigListModel.getLowerLimit().doubleValue() || differRate.doubleValue() < diffconfigListModel.getUpperLimit().doubleValue()) {
+                //if (differRate.doubleValue() > diffconfigListModel.getLowerLimit().doubleValue() || differRate.doubleValue() < diffconfigListModel.getUpperLimit().doubleValue()) {
                     // 如果 差异率大于上限或小于下限
                     // 处理结果插入平账表中
-                    isOutDiff = '1';
+                if( differRate.compareTo(BigDecimal.ZERO)  !=0  || ruleListModel.getGlCode().equals("702002")){ // 差异率不为空 或科目是702002
+                    if(differRate.doubleValue() > diffconfigListModel.getLowerLimit().doubleValue() || differRate.doubleValue() < diffconfigListModel.getUpperLimit().doubleValue()){ // 差异率大于上区间 或 小于下区间
+                        isOutDiff = "out_range_tolerance"; // 在偏差范围外
+                    }else if(differRate.compareTo(BigDecimal.ZERO) ==0 && ruleListModel.getGlCode().equals("702002")){
+                        isOutDiff = "nodeviation"; // 无偏差
+                    }else{
+                        isOutDiff = "in_range_tolerance"; // 差异容忍度内
+                    }
                     String insertAccadjustment = "insert into rwa_apm_bus_rs_accadjustment (CALCINDEX, SDATE, EDATE, TERM, DATA_DATE, GL_CODE, SUBJECT_DESC,LOAN_REFERENCE_NO, BALANCE_ON, BALANCE_OFF, RESERVE, CURRENCY,RISK_EXPOSURE_LEV01_CODE, RISK_EXPOSURE_LEV01_CODE_NAME,RISK_EXPOSURE_LEV02_CODE, RISK_EXPOSURE_LEV02_CODE_NAME,RISK_EXPOSURE_LEV03_CODE, RISK_EXPOSURE_LEV03_CODE_NAME,RISK_EXPOSURE_LEV04_CODE, RISK_EXPOSURE_LEV04_CODE_NAME, RISK_RESULT,LOAN_WEIGHT, COVERAGE_RISK, COVERAGE_RWA, UNFINISH_EAD, UNFINISH_RWA, RWA,CUST_NAME, CUST_NO, BP_CUST_NO, INVEST_INDUSTRY, BUSINESS_LINE, EFF_DATE,DUE_DATE, SOFT_RULE_TYPE, SOFT_RULE_MAINID, SOFT_RULE_SUBID) " +
                             "values (:CALCINDEX, :SDATE, :EDATE, :TERM, :DATA_DATE, :GL_CODE, :SUBJECT_DESC, :LOAN_REFERENCE_NO, :BALANCE_ON,:BALANCE_OFF, :RESERVE, :CURRENCY, :RISK_EXPOSURE_LEV01_CODE, :RISK_EXPOSURE_LEV01_CODE_NAME, :RISK_EXPOSURE_LEV02_CODE, :RISK_EXPOSURE_LEV02_CODE_NAME, :RISK_EXPOSURE_LEV03_CODE,:RISK_EXPOSURE_LEV03_CODE_NAME, :RISK_EXPOSURE_LEV04_CODE, :RISK_EXPOSURE_LEV04_CODE_NAME, :RISK_RESULT,:LOAN_WEIGHT, :COVERAGE_RISK, :COVERAGE_RWA, :UNFINISH_EAD, :UNFINISH_RWA, :RWA, :CUST_NAME, :CUST_NO,:BP_CUST_NO, :INVEST_INDUSTRY, :BUSINESS_LINE, :EFF_DATE, :DUE_DATE, :SOFT_RULE_TYPE, :SOFT_RULE_MAINID,:SOFT_RULE_SUBID)";
 
 //                    riskType
-                    RiskExposureDefinitionModel riskModel = riskExposureDefinitionModelMap.get(riskType);
                     String RISK_EXPOSURE_LEV01_CODE = "";
                     String RISK_EXPOSURE_LEV01_CODE_NAME = "";
                     String RISK_EXPOSURE_LEV02_CODE = "";
@@ -308,39 +361,66 @@ public class GeneralLedgerUnit extends CalcUnit {
                     String RISK_EXPOSURE_LEV03_CODE_NAME = "";
                     String RISK_EXPOSURE_LEV04_CODE = "";
                     String RISK_EXPOSURE_LEV04_CODE_NAME = "";
-                    if (riskModel != null && !riskModel.getRiskExposureNo().contains("00")) {
-                        RISK_EXPOSURE_LEV04_CODE = riskModel.getRiskExposureNo();
-                        RISK_EXPOSURE_LEV04_CODE_NAME = riskModel.getRiskExposureName();
-                        RISK_EXPOSURE_LEV03_CODE = LevelUtil.subAndAdd(riskModel.getRiskExposureNo(), 1, "00");
-                        RISK_EXPOSURE_LEV03_CODE_NAME = riskExposureDefinitionModelMap.get(RISK_EXPOSURE_LEV03_CODE).getRiskExposureName();
-                        RISK_EXPOSURE_LEV02_CODE = LevelUtil.subAndAdd(riskModel.getRiskExposureNo(), 2, "00");
-                        RISK_EXPOSURE_LEV02_CODE_NAME = riskExposureDefinitionModelMap.get(RISK_EXPOSURE_LEV02_CODE).getRiskExposureName();
-                        RISK_EXPOSURE_LEV01_CODE = LevelUtil.subAndAdd(riskModel.getRiskExposureNo(), 3, "00");
-                        RISK_EXPOSURE_LEV01_CODE_NAME = riskExposureDefinitionModelMap.get(RISK_EXPOSURE_LEV01_CODE).getRiskExposureName();
+                    if(ruleListModel.getOnoroff().equals("ON")) {
+                        RiskExposureDefinitionModel riskModel = riskExposureDefinitionModelMap.get(riskType);
+                        if (riskModel != null && !riskModel.getRiskExposureNo().contains("00")) {
+                            RISK_EXPOSURE_LEV04_CODE = riskModel.getRiskExposureNo();
+                            RISK_EXPOSURE_LEV04_CODE_NAME = riskModel.getRiskExposureName();
+                            RISK_EXPOSURE_LEV03_CODE = LevelUtil.subAndAdd(riskModel.getRiskExposureNo(), 1, "00");
+                            RISK_EXPOSURE_LEV03_CODE_NAME = riskExposureDefinitionModelMap.get(RISK_EXPOSURE_LEV03_CODE).getRiskExposureName();
+                            RISK_EXPOSURE_LEV02_CODE = LevelUtil.subAndAdd(riskModel.getRiskExposureNo(), 2, "00");
+                            RISK_EXPOSURE_LEV02_CODE_NAME = riskExposureDefinitionModelMap.get(RISK_EXPOSURE_LEV02_CODE).getRiskExposureName();
+                            RISK_EXPOSURE_LEV01_CODE = LevelUtil.subAndAdd(riskModel.getRiskExposureNo(), 3, "00");
+                            RISK_EXPOSURE_LEV01_CODE_NAME = riskExposureDefinitionModelMap.get(RISK_EXPOSURE_LEV01_CODE).getRiskExposureName();
+                        }
+                        if (riskModel != null && (riskModel.getRiskExposureNo().indexOf("00") == 7 || riskModel.getRiskExposureNo().indexOf("00") == 6)) {
+                            RISK_EXPOSURE_LEV03_CODE = LevelUtil.subAndAdd(riskModel.getRiskExposureNo(), 1, "00");
+                            RISK_EXPOSURE_LEV03_CODE_NAME = riskExposureDefinitionModelMap.get(RISK_EXPOSURE_LEV03_CODE).getRiskExposureName();
+                            RISK_EXPOSURE_LEV02_CODE = LevelUtil.subAndAdd(riskModel.getRiskExposureNo(), 2, "00");
+                            RISK_EXPOSURE_LEV02_CODE_NAME = riskExposureDefinitionModelMap.get(RISK_EXPOSURE_LEV02_CODE).getRiskExposureName();
+                            RISK_EXPOSURE_LEV01_CODE = LevelUtil.subAndAdd(riskModel.getRiskExposureNo(), 3, "00");
+                            RISK_EXPOSURE_LEV01_CODE_NAME = riskExposureDefinitionModelMap.get(RISK_EXPOSURE_LEV01_CODE).getRiskExposureName();
+                        }
+                        if (riskModel != null && riskModel.getRiskExposureNo().indexOf("00") == 5) {
+                            RISK_EXPOSURE_LEV02_CODE = LevelUtil.subAndAdd(riskModel.getRiskExposureNo(), 2, "00");
+                            RISK_EXPOSURE_LEV02_CODE_NAME = riskExposureDefinitionModelMap.get(RISK_EXPOSURE_LEV02_CODE).getRiskExposureName();
+                            RISK_EXPOSURE_LEV01_CODE = LevelUtil.subAndAdd(riskModel.getRiskExposureNo(), 3, "00");
+                            RISK_EXPOSURE_LEV01_CODE_NAME = riskExposureDefinitionModelMap.get(RISK_EXPOSURE_LEV01_CODE).getRiskExposureName();
+                        }
+                        if (riskModel != null && riskModel.getRiskExposureNo().indexOf("00") == 3) {
+
+                            RISK_EXPOSURE_LEV01_CODE = LevelUtil.subAndAdd(riskModel.getRiskExposureNo(), 3, "00");
+                            RISK_EXPOSURE_LEV01_CODE_NAME = riskExposureDefinitionModelMap.get(RISK_EXPOSURE_LEV01_CODE).getRiskExposureName();
+                        }
                     }
-                    if (riskModel != null && riskModel.getRiskExposureNo().indexOf("00") == 7) {
-                        RISK_EXPOSURE_LEV03_CODE = LevelUtil.subAndAdd(riskModel.getRiskExposureNo(), 1, "00");
-                        RISK_EXPOSURE_LEV03_CODE_NAME = riskExposureDefinitionModelMap.get(RISK_EXPOSURE_LEV03_CODE).getRiskExposureName();
-                        RISK_EXPOSURE_LEV02_CODE = LevelUtil.subAndAdd(riskModel.getRiskExposureNo(), 2, "00");
-                        RISK_EXPOSURE_LEV02_CODE_NAME = riskExposureDefinitionModelMap.get(RISK_EXPOSURE_LEV02_CODE).getRiskExposureName();
-                        RISK_EXPOSURE_LEV01_CODE = LevelUtil.subAndAdd(riskModel.getRiskExposureNo(), 3, "00");
-                        RISK_EXPOSURE_LEV01_CODE_NAME = riskExposureDefinitionModelMap.get(RISK_EXPOSURE_LEV01_CODE).getRiskExposureName();
-                    }
-                    if (riskModel != null && riskModel.getRiskExposureNo().indexOf("00") == 5) {
-                        RISK_EXPOSURE_LEV02_CODE = LevelUtil.subAndAdd(riskModel.getRiskExposureNo(), 2, "00");
-                        RISK_EXPOSURE_LEV02_CODE_NAME = riskExposureDefinitionModelMap.get(RISK_EXPOSURE_LEV02_CODE).getRiskExposureName();
-                        RISK_EXPOSURE_LEV01_CODE = LevelUtil.subAndAdd(riskModel.getRiskExposureNo(), 3, "00");
-                        RISK_EXPOSURE_LEV01_CODE_NAME = riskExposureDefinitionModelMap.get(RISK_EXPOSURE_LEV01_CODE).getRiskExposureName();
-                    }
-                    if (riskModel != null && riskModel.getRiskExposureNo().indexOf("00") == 3) {
-
-                        RISK_EXPOSURE_LEV01_CODE = LevelUtil.subAndAdd(riskModel.getRiskExposureNo(), 3, "00");
-                        RISK_EXPOSURE_LEV01_CODE_NAME = riskExposureDefinitionModelMap.get(RISK_EXPOSURE_LEV01_CODE).getRiskExposureName();
+                    if(ruleListModel.getOnoroff().equals("OFF")){
+                        InfoListModel riskModel = infoListModel.get(riskType);
+                        if (riskModel != null && !riskModel.getOffobjectNo().contains("00") && riskModel.getOffobjectSuper() != null) {
+                            RISK_EXPOSURE_LEV03_CODE = LevelUtil.subAndAdd(riskModel.getOffobjectNo(), 0, "00");
+                            RISK_EXPOSURE_LEV03_CODE_NAME = infoListModel.get(RISK_EXPOSURE_LEV03_CODE).getOffobjectName();
+                            RISK_EXPOSURE_LEV02_CODE = LevelUtil.subAndAdd(riskModel.getOffobjectNo(), 1, "00");
+                            RISK_EXPOSURE_LEV02_CODE_NAME = infoListModel.get(RISK_EXPOSURE_LEV02_CODE).getOffobjectName();
+                            RISK_EXPOSURE_LEV01_CODE = LevelUtil.subAndAdd(riskModel.getOffobjectNo(), 2, "00");
+                            RISK_EXPOSURE_LEV01_CODE_NAME = infoListModel.get(RISK_EXPOSURE_LEV01_CODE).getOffobjectName();
+                        }
+
+                        if (riskModel != null && riskModel.getOffobjectNo().indexOf("00") == 5 && riskModel.getOffobjectSuper() != null) {
+                            RISK_EXPOSURE_LEV02_CODE = LevelUtil.subAndAdd(riskModel.getOffobjectNo(), 1, "00");
+                            RISK_EXPOSURE_LEV02_CODE_NAME = infoListModel.get(RISK_EXPOSURE_LEV02_CODE).getOffobjectName();
+                            RISK_EXPOSURE_LEV01_CODE = LevelUtil.subAndAdd(riskModel.getOffobjectNo(), 2, "00");
+                            RISK_EXPOSURE_LEV01_CODE_NAME = infoListModel.get(RISK_EXPOSURE_LEV01_CODE).getOffobjectName();
+                        }
+                        if (riskModel != null && riskModel.getOffobjectNo().indexOf("00") == 3 && riskModel.getOffobjectSuper() != null) {
+
+                            RISK_EXPOSURE_LEV01_CODE = LevelUtil.subAndAdd(riskModel.getOffobjectNo(), 2, "00");
+                            RISK_EXPOSURE_LEV01_CODE_NAME = infoListModel.get(RISK_EXPOSURE_LEV01_CODE).getOffobjectName();
+                        }
                     }
 
                     String dateStr = (String) context.get("DATA_DATE");
-                    String eff_date = dateStr.substring(dateStr.lastIndexOf("-") + 1) + "01";
-                    String due_date = dateStr.substring(dateStr.lastIndexOf("-") + 1) + (DateChecker.getShortCalendar(dateStr)).getActualMaximum(Calendar.DAY_OF_MONTH);
+                    System.out.println(dateStr.lastIndexOf("-"));
+                    String eff_date = dateStr.substring(dateStr.lastIndexOf("-") + 1,6) + "01"; // 需要改 20250605
+                    String due_date = dateStr.substring(dateStr.lastIndexOf("-") + 1,6) + (DateChecker.getShortCalendar(dateStr)).getActualMaximum(Calendar.DAY_OF_MONTH);
 
                     sqlParam.addValue("GL_CODE", ruleListModel.getGlCode());
                     sqlParam.addValue("SUBJECT_DESC", ruleListModel.getSubjectDesc());
@@ -386,11 +466,11 @@ public class GeneralLedgerUnit extends CalcUnit {
             sqlParam.addValue("CCY", "CNY");
             sqlParam.addValue("GLAMT", subjectSumBigDecimal);
             sqlParam.addValue("LEDGARTAMT", productSumBigDecimal);
-            sqlParam.addValue("DIFFERAMT", differAmt);
+            sqlParam.addValue("DIFFERAMT", differAmt1);
             sqlParam.addValue("DIFFERRATE", differRate);
             sqlParam.addValue("PERCTHRESHOLD", percThreshold);
             sqlParam.addValue("LEARTRESULTTYPE", isOutDiff);
-            sqlParam.addValue("OFFSETDIFFERAMT", differRate);
+            sqlParam.addValue("OFFSETDIFFERAMT", subjectSumBigDecimal.subtract(productSumBigDecimal).subtract(differAmt1));
             String insertLedgresult = "insert into rwa_leart_ins_ledgresult (CALCINDEX, SDATE, EDATE, TERM, DATA_DATE, ORGCODE, RULE_ID, RULE_NAME, SUBJCODE, SUBJNAME, CCY, GLAMT, LEDGARTAMT, DIFFERAMT, DIFFERRATE, PERCTHRESHOLD, LEARTRESULTTYPE, OFFSETDIFFERAMT) " +
                     "values (:CALCINDEX, :SDATE, :EDATE, :TERM, :DATA_DATE, :ORGCODE, :RULE_ID, :RULE_NAME, :SUBJCODE, :SUBJNAME, :CCY, :GLAMT, :LEDGARTAMT, :DIFFERAMT, :DIFFERRATE, :PERCTHRESHOLD, :LEARTRESULTTYPE, :OFFSETDIFFERAMT)";
             jdbcTemplate.update(insertLedgresult, sqlParam);

+ 118 - 5
Procedure/backend/project/src/main/java/com/sundata/product/rwa/internal/mybatis/CorporateLoansCustomersMapper.xml

@@ -5,7 +5,37 @@
 <mapper namespace="com.sundata.product.rwa.internal.mapper.CorporateLoansCustomersMapper">
     <!-- 初始化与按查询条件查询 -->
     <select id="getDataList" resultType="com.sundata.product.rwa.internal.model.CorporateLoansCustomersModel" parameterType="com.sundata.product.rwa.internal.model.CorporateLoansCustomersModel">
-        select
+<!--        select-->
+<!--        TERM                             AS   term,-->
+<!--        DATA_DATE                        AS   dataDate,-->
+<!--        CUST_NAME                        AS   custName,-->
+<!--        CUST_NO                          AS   custNo,-->
+<!--        BALANCE*0.000001                          AS   balance,-->
+<!--        BALANCE_WEIGHT                   AS   balanceWeight,-->
+<!--        THISTERM_BALANCE*0.000001                 AS   thistermBalance,-->
+<!--        THISTERM_BALANCE_WEIGHT          AS   thistermBalanceWeight,-->
+<!--        ECL*0.000001                              AS   ecl,-->
+<!--        ECL_WEIGHT                       AS   eclWeight,-->
+<!--        EAD*0.000001                              AS   ead,-->
+<!--        EAD_WEIGHT                       AS   eadWeight,-->
+<!--        CRM*0.000001                              AS   crm,-->
+<!--        CRM_WEIGHT                       AS   crmWeight,-->
+<!--        RWA*0.000001                              AS   rwa,-->
+<!--        RWA_WEIGHT                       AS   rwaWeight,-->
+<!--        AVERAGE_RISK_WEIGHT              AS   averageRiskWeight-->
+<!--        from RWA_REPORT_RS_ENTCUSTTOP10-->
+<!--        <where>-->
+<!--            1=1-->
+<!--&lt;!&ndash;            <if test="model.orgCode != null and '' != model.orgCode">&ndash;&gt;-->
+<!--&lt;!&ndash;                and ORGCODE like concat(concat('%',#{model.orgCode}),'%')&ndash;&gt;-->
+<!--&lt;!&ndash;            </if>&ndash;&gt;-->
+<!--            <if test="model.term != null and '' != model.term">-->
+<!--                and substr(TERM,1,6) like concat(concat('%',replace(#{model.term},'-','')),'%')-->
+<!--            </if>-->
+<!--        </where>-->
+<!--        order by balance desc-->
+<!--        limit 10-->
+        (select
         TERM                             AS   term,
         DATA_DATE                        AS   dataDate,
         CUST_NAME                        AS   custName,
@@ -26,15 +56,98 @@
         from RWA_REPORT_RS_ENTCUSTTOP10
         <where>
             1=1
-<!--            <if test="model.orgCode != null and '' != model.orgCode">-->
-<!--                and ORGCODE like concat(concat('%',#{model.orgCode}),'%')-->
-<!--            </if>-->
+            <!--            <if test="model.orgCode != null and '' != model.orgCode">-->
+            <!--                and ORGCODE like concat(concat('%',#{model.orgCode}),'%')-->
+            <!--            </if>-->
+            <if test="model.term != null and '' != model.term">
+                and substr(TERM,1,6) like concat(concat('%',replace(#{model.term},'-','')),'%')
+            </if>
+        </where>
+        order by balance desc
+        limit 10)
+        UNION ALL
+        (SELECT
+        TERM                             AS   term,
+        DATA_DATE                        AS   dataDate,
+        '小计'                        AS   custName,
+        ''                          AS   custNo,
+        sum(BALANCE)                          AS   balance,
+        sum(BALANCE_WEIGHT)                   AS   balanceWeight,
+        sum(THISTERM_BALANCE)              AS   thistermBalance,
+        sum(THISTERM_BALANCE_WEIGHT)          AS   thistermBalanceWeight,
+        sum(ECL)                              AS   ecl,
+        sum(ECL_WEIGHT)                       AS   eclWeight,
+        sum(EAD)                              AS   ead,
+        sum(EAD_WEIGHT)                       AS   eadWeight,
+        sum(CRM)                              AS   crm,
+        sum(CRM_WEIGHT)                       AS   crmWeight,
+        sum(RWA)                              AS   rwa,
+        sum(RWA_WEIGHT)                       AS   rwaWeight,
+        sum(AVERAGE_RISK_WEIGHT)              AS   averageRiskWeight
+        FROM
+        (select
+        TERM                             AS   TERM,
+        DATA_DATE                        AS   DATA_DATE,
+        CUST_NAME                        AS   CUST_NAME,
+        CUST_NO                          AS   CUST_NO,
+        BALANCE*0.000001                          AS   BALANCE,
+        BALANCE_WEIGHT                   AS   BALANCE_WEIGHT,
+        THISTERM_BALANCE*0.000001                 AS   THISTERM_BALANCE,
+        THISTERM_BALANCE_WEIGHT          AS   THISTERM_BALANCE_WEIGHT,
+        ECL*0.000001                              AS   ECL,
+        ECL_WEIGHT                       AS   ECL_WEIGHT,
+        EAD*0.000001                              AS   EAD,
+        EAD_WEIGHT                       AS   EAD_WEIGHT,
+        CRM*0.000001                              AS   CRM,
+        CRM_WEIGHT                       AS   CRM_WEIGHT,
+        RWA*0.000001                              AS   RWA,
+        RWA_WEIGHT                       AS   RWA_WEIGHT,
+        AVERAGE_RISK_WEIGHT              AS   AVERAGE_RISK_WEIGHT
+        from RWA_REPORT_RS_ENTCUSTTOP10
+        <where>
+            1=1
+            <!--            <if test="model.orgCode != null and '' != model.orgCode">-->
+            <!--                and ORGCODE like concat(concat('%',#{model.orgCode}),'%')-->
+            <!--            </if>-->
             <if test="model.term != null and '' != model.term">
                 and substr(TERM,1,6) like concat(concat('%',replace(#{model.term},'-','')),'%')
             </if>
         </where>
         order by balance desc
-        limit 10
+        limit 10) t
+        GROUP  BY TERM,DATA_DATE)
+        UNION ALL
+        (SELECT
+        TERM                             AS   term,
+        DATA_DATE                        AS   dataDate,
+        '合计'                        AS   custName,
+        ''                          AS   custNo,
+        sum(BALANCE)*0.000001                          AS   balance,
+        sum(BALANCE_WEIGHT)                   AS   balanceWeight,
+        sum(THISTERM_BALANCE)*0.000001                 AS   thistermBalance,
+        sum(THISTERM_BALANCE_WEIGHT)          AS   thistermBalanceWeight,
+        sum(ECL)*0.000001                              AS   ecl,
+        sum(ECL_WEIGHT)                       AS   eclWeight,
+        sum(EAD)*0.000001                              AS   ead,
+        sum(EAD_WEIGHT)                       AS   eadWeight,
+        sum(CRM)*0.000001                              AS   crm,
+        sum(CRM_WEIGHT)                       AS   crmWeight,
+        sum(RWA)*0.000001                              AS   rwa,
+        sum(RWA_WEIGHT)                       AS   rwaWeight,
+        sum(AVERAGE_RISK_WEIGHT)              AS   averageRiskWeight
+        from RWA_REPORT_RS_ENTCUSTTOP10
+        <where>
+            1=1
+            <!--            <if test="model.orgCode != null and '' != model.orgCode">-->
+            <!--                and ORGCODE like concat(concat('%',#{model.orgCode}),'%')-->
+            <!--            </if>-->
+            <if test="model.term != null and '' != model.term">
+                and substr(TERM,1,6) like concat(concat('%',replace(#{model.term},'-','')),'%')
+            </if>
+        </where>
+        GROUP  BY TERM,DATA_DATE
+        order by balance desc)
+
     </select>
 
     <select id="getDetailDataList" resultType="com.sundata.product.rwa.internal.model.MultiDimensionalCreditRiskModel" parameterType="com.sundata.product.rwa.internal.model.MultiDimensionalCreditRiskModel">

+ 5 - 5
Procedure/backend/project/src/main/java/com/sundata/product/rwa/resultList/mybatis/DiffconfigListMapper.xml

@@ -12,8 +12,8 @@
         DATA_DATE as dataDate,
         RULE_NO as ruleNo,
         RULE_NAME as ruleName,
-        UPPER_LIMIT as upperLimit,
-        LOWER_LIMIT as lowerLimit,
+        UPPER_LIMIT*100 as upperLimit,
+        LOWER_LIMIT*100 as lowerLimit,
         INTERVAL_TYPE  as intervalType,
         RULE_AREA_TYPE as ruleAreaType
         from  RWA_CALC_CONF_DIFFTOLERANCE
@@ -35,8 +35,8 @@
         DATA_DATE as dataDate,
         RULE_NO as ruleNo,
         RULE_NAME as ruleName,
-        UPPER_LIMIT as upperLimit,
-        LOWER_LIMIT as lowerLimit,
+        UPPER_LIMIT*100 as upperLimit,
+        LOWER_LIMIT*100 as lowerLimit,
         INTERVAL_TYPE as intervalType,
         RULE_AREA_TYPE as ruleAreaType
         from  RWA_CALC_CONF_DIFFTOLERANCE
@@ -89,7 +89,7 @@
 
     <insert id="diffconfig_addone" parameterType="com.sundata.product.rwa.resultList.model.DiffconfigListModel">
         INSERT INTO RWA_CALC_CONF_DIFFTOLERANCE(CALCINDEX,SDATE,EDATE,TERM,DATA_DATE,RULE_NO,RULE_NAME,UPPER_LIMIT,LOWER_LIMIT,INTERVAL_TYPE,RULE_AREA_TYPE)
-        VALUES(#{calcindex},#{sdate},#{edate},#{term},#{dataDate},#{ruleNo},#{ruleName},#{upperLimit},#{lowerLimit},#{intervalType},#{ruleAreaType})
+        VALUES(#{calcindex},#{sdate},#{edate},#{term},#{dataDate},#{ruleNo},#{ruleName},#{upperLimit}*0.01,#{lowerLimit}*0.01,#{intervalType},#{ruleAreaType})
     </insert>
 
     <select id="rule_queryoruleAreaType" resultType="com.sundata.product.rwa.resultList.model.RuleListModel">

+ 4 - 4
Procedure/backend/project/src/main/java/com/sundata/product/rwa/resultList/mybatis/ResultListMapper.xml

@@ -5,12 +5,12 @@
 <mapper namespace="com.sundata.product.rwa.resultList.mapper.ResultListMapper">
     <select id="result_list" resultType="com.sundata.product.rwa.resultList.model.ResultListModel">
         select CCY as ccy,
-        DIFFERAMT as differamt,
+        DIFFERAMT*0.0001 as differamt,
         DIFFERRATE as differrate,
-        GLAMT as glamt,
+        GLAMT*0.0001 as glamt,
         LEARTRESULTTYPE as leartresulttype,
-        LEDGARTAMT as ledgartamt,
-        OFFSETDIFFERAMT as offsetdifferamt,
+        LEDGARTAMT*0.0001 as ledgartamt,
+        OFFSETDIFFERAMT*0.0001 as offsetdifferamt,
         ORGCODE as orgcode,
         PERCTHRESHOLD as percthreshold,
         SUBJCODE as subjcode,

+ 37 - 33
Procedure/frontend/projectb/src/pages/product/internal/corporateloanscustomerstop10.tsx

@@ -93,6 +93,9 @@ const corporateloanscustomerstop10 : React.FC<widowRush> = (prop:widowRush) => {
           dataIndex: 'term',
           order:-2,
           hideInTable: true,
+          formItemProps: {
+            rules: [{ required: true, message: '此项为必填项' }],
+          },
           valueType:'dateMonth'
         },
         {
@@ -117,7 +120,7 @@ const corporateloanscustomerstop10 : React.FC<widowRush> = (prop:widowRush) => {
                 search: false,
                 render: (_, record) => [
                   <a onClick={()=>{
-                    if(record.key !='summary'){
+                    if(record.custName !="合计" &&  record.custName !="小计" ){
                     selectDetailData(record);
                     setDetailVisible(true);}}
                   }>{record.balance}</a>
@@ -625,43 +628,44 @@ const corporateloanscustomerstop10 : React.FC<widowRush> = (prop:widowRush) => {
         <ProTable
          headerTitle="查询表格"
          rowKey="customerName"
+      //   form={{ignoreRules : false}} // ProTable 标签必输项设置生效
          request={async (formdata:CorporateLoansCustomersModel) =>{
            const formDatas = await getDataList(formdata);
            // 解构数组(导出用)
            formDataList=[...formDatas];
            setFormDetailData1(formDatas);
-           formDatas.forEach(function(erement,index,array){
-            if(erement.key != 'summary') {
-          objs1 = objs1 + Number(erement.balance);
-          objs2 = objs2 + Number(erement.balanceWeight);
-          objs3 = objs3 + Number(erement.thistermBalance);
-          objs4 = objs4 + Number(erement.thistermBalanceWeight);
-          objs5 = objs5 + Number(erement.ecl);
-          objs6 = objs6 + Number(erement.eclWeight);
-          objs7 = objs7 + Number(erement.ead);
-          objs8 = objs8 + Number(erement.eadWeight);
-          objs9 = objs9 + Number(erement.crm);
-          objs10 = objs10 + Number(erement.crmWeight);
-          objs11 = objs11 + Number(erement.rwa);
-          objs12 = objs12 + Number(erement.rwaWeight);
-          objs13= objs13 + Number(erement.averageRiskWeight);
-            }
-        } );
-        var objs = {key :'summary', custName :'合计', 
-        balance:objs1,
-        balanceWeight:objs2,
-        thistermBalance:objs3,
-        thistermBalanceWeight:objs4,
-        ecl:objs5,
-        eclWeight:objs6,
-        ead:objs7,
-        eadWeight:objs8,
-        crm:objs9,
-        crmWeight:objs10,
-        calcIndex:'',sDate:'',eDate:'',term:'',dataDate:'',rwa:objs11,rwaWeight:objs12,averageRiskWeight:objs13,custNo:''};
-        if(formDatas.length >0){
-          formDatas.push(objs)
-      }
+    //        formDatas.forEach(function(erement,index,array){
+    //         if(erement.key != 'summary') {
+    //       objs1 = objs1 + Number(erement.balance);
+    //       objs2 = objs2 + Number(erement.balanceWeight);
+    //       objs3 = objs3 + Number(erement.thistermBalance);
+    //       objs4 = objs4 + Number(erement.thistermBalanceWeight);
+    //       objs5 = objs5 + Number(erement.ecl);
+    //       objs6 = objs6 + Number(erement.eclWeight);
+    //       objs7 = objs7 + Number(erement.ead);
+    //       objs8 = objs8 + Number(erement.eadWeight);
+    //       objs9 = objs9 + Number(erement.crm);
+    //       objs10 = objs10 + Number(erement.crmWeight);
+    //       objs11 = objs11 + Number(erement.rwa);
+    //       objs12 = objs12 + Number(erement.rwaWeight);
+    //       objs13= objs13 + Number(erement.averageRiskWeight);
+    //         }
+    //     } );
+    //     var objs = {key :'summary', custName :'合计', 
+    //     balance:objs1,
+    //     balanceWeight:objs2,
+    //     thistermBalance:objs3,
+    //     thistermBalanceWeight:objs4,
+    //     ecl:objs5,
+    //     eclWeight:objs6,
+    //     ead:objs7,
+    //     eadWeight:objs8,
+    //     crm:objs9,
+    //     crmWeight:objs10,
+    //     calcIndex:'',sDate:'',eDate:'',term:'',dataDate:'',rwa:objs11,rwaWeight:objs12,averageRiskWeight:objs13,custNo:''};
+    //     if(formDatas.length >0){
+    //       formDatas.push(objs)
+    //   }
            return {data: formDetailData1}
          }  }
          columns={columns}