Browse Source

信用风险RWA计量规则定义功能开发

username 10 months ago
parent
commit
da629e47c3
12 changed files with 2209 additions and 10 deletions
  1. 222 0
      Procedure/backend/project/src/main/java/com/sundata/product/rwa/rwacalcconfig004rwa/action/CreditRiskMeteringRuleAction.java
  2. 39 0
      Procedure/backend/project/src/main/java/com/sundata/product/rwa/rwacalcconfig004rwa/mapper/CreditRiskMeteringRuleMapper.java
  3. 34 0
      Procedure/backend/project/src/main/java/com/sundata/product/rwa/rwacalcconfig004rwa/model/InOrOutDataListModel.java
  4. 114 0
      Procedure/backend/project/src/main/java/com/sundata/product/rwa/rwacalcconfig004rwa/model/MeteringRuleModel.java
  5. 154 0
      Procedure/backend/project/src/main/java/com/sundata/product/rwa/rwacalcconfig004rwa/model/MeteringRuleStepsModel.java
  6. 54 0
      Procedure/backend/project/src/main/java/com/sundata/product/rwa/rwacalcconfig004rwa/model/ProductListModel.java
  7. 336 0
      Procedure/backend/project/src/main/java/com/sundata/product/rwa/rwacalcconfig004rwa/mybatis/CreditRiskMeteringRuleMapper.xml
  8. 211 0
      Procedure/backend/project/src/main/java/com/sundata/product/rwa/rwacalcconfig004rwa/service/CreditRiskMeteringRuleService.java
  9. 25 9
      Procedure/backend/project/src/main/java/com/sundata/product/rwa/rwacalcconfig004rwa/service/StageConfigService.java
  10. 854 0
      Procedure/frontend/projectb/src/pages/product/rwa_calc_config_004rwa/creditriskmeteringrule.tsx
  11. 1 1
      Procedure/frontend/projectb/src/pages/product/rwa_calc_config_004rwa/stageinformation.tsx
  12. 165 0
      Procedure/frontend/projectb/src/services/rwa/product/rwa_calc_config_004rwa/creditriskmeteringrule.ts

+ 222 - 0
Procedure/backend/project/src/main/java/com/sundata/product/rwa/rwacalcconfig004rwa/action/CreditRiskMeteringRuleAction.java

@@ -0,0 +1,222 @@
+package com.sundata.product.rwa.rwacalcconfig004rwa.action;
+
+import com.sundata.common.base.BaseAction;
+import com.sundata.product.rwa.rwacalcconfig004rwa.model.MeteringRuleModel;
+import com.sundata.product.rwa.rwacalcconfig004rwa.model.InOrOutDataListModel;
+import com.sundata.product.rwa.rwacalcconfig004rwa.model.MeteringRuleStepsModel;
+import com.sundata.product.rwa.rwacalcconfig004rwa.model.ProductListModel;
+import com.sundata.product.rwa.rwacalcconfig004rwa.service.CreditRiskMeteringRuleService;
+import jakarta.servlet.http.HttpServletRequest;
+import jakarta.servlet.http.HttpServletResponse;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestParam;
+import org.springframework.web.bind.annotation.RestController;
+
+import java.util.List;
+
+
+@RestController
+@RequestMapping("/product/rwa/rwacalcconfig004rwa/CreditRiskMeteringRuleAction")
+public class CreditRiskMeteringRuleAction extends BaseAction {
+    @Autowired
+    CreditRiskMeteringRuleService creditRiskMeteringRuleService;
+
+    
+    /**
+     * @author: 张艳杰
+     * @methodsName: getDataList
+     * @description: 阶段信息配置初始化
+     * @param: HttpServletRequest request, HttpServletResponse response,@RequestBody MeteringRuleModel model
+     * @return: List<MeteringRuleModel>
+     * @throws:
+     */
+    @RequestMapping({"getDataList"})
+    public void getDataList(HttpServletRequest request, HttpServletResponse response,
+                            @RequestBody MeteringRuleModel model) {
+        sendData(response, creditRiskMeteringRuleService.getDataList(model));
+    }
+
+    /**
+     * @author: 张艳杰
+     * @methodsName: createMeteringRule
+     * @description: 阶段信息配置新增
+     * @param: HttpServletRequest request, HttpServletResponse response,@RequestBody MeteringRuleModel model
+     * @return:
+     * @throws:
+     */
+    @RequestMapping({"createMeteringRule"})
+    public void createMeteringRule(HttpServletRequest request, HttpServletResponse response, @RequestBody MeteringRuleModel model) {
+        creditRiskMeteringRuleService.createMeteringRule(model);
+    }
+
+    /**
+     * @author: 张艳杰
+     * @methodsName: updateMeteringRule
+     * @description: 阶段信息配置维护
+     * @param: HttpServletRequest request, HttpServletResponse response,@RequestBody MeteringRuleModel model
+     * @return:
+     * @throws:
+     */
+    @RequestMapping({"updateMeteringRule"})
+    public void updateMeteringRule(HttpServletRequest request, HttpServletResponse response, @RequestBody MeteringRuleModel model) {
+        creditRiskMeteringRuleService.updateMeteringRule(model);
+    }
+
+    /**
+     * @author: 张艳杰
+     * @methodsName: deleteMeteringRule
+     * @description: 阶段信息配置删除
+     * @param: HttpServletRequest request, HttpServletResponse response,@RequestBody MeteringRuleModel model
+     * @return:
+     * @throws:
+     */
+    @RequestMapping({"deleteMeteringRule"})
+    public void deleteMeteringRule(HttpServletRequest request, HttpServletResponse response, @RequestBody MeteringRuleModel model) {
+        creditRiskMeteringRuleService.deleteMeteringRule(model);
+    }
+
+    /**
+     * @author: 张艳杰
+     * @methodsName: selectMeteringRule
+     * @description: 阶段信息配置类型查询
+     * @param: HttpServletRequest request, HttpServletResponse response,@RequestBody MeteringRuleModel model
+     * @return: MeteringRuleModel
+     * @throws:
+     */
+    @RequestMapping({"selectMeteringRule"})
+    public void selectMeteringRule(HttpServletRequest request, HttpServletResponse response, @RequestBody MeteringRuleModel model) {
+        sendData(response,creditRiskMeteringRuleService.selectMeteringRule(model));
+    }
+
+
+    /**
+     * @author: 张艳杰
+     * @methodsName: getMeteringRuleStepsList
+     * @description: 阶段信息配置规则列表
+     * @param: HttpServletRequest request, HttpServletResponse response,@RequestBody MeteringRuleStepsModel model
+     * @return: List<MeteringRuleStepsModel>
+     * @throws:
+     */
+    @RequestMapping({"getMeteringRuleStepsList"})
+    public void getMeteringRuleStepsList(HttpServletRequest request, HttpServletResponse response, @RequestBody MeteringRuleStepsModel model) {
+        sendData(response,creditRiskMeteringRuleService.getMeteringRuleStepsList(model));
+    }
+
+
+    /**
+     * @author: 张艳杰
+     * @methodsName: createMeteringRuleSteps
+     * @description: 阶段信息配置规则新增
+     * @param: HttpServletRequest request, HttpServletResponse response,@RequestBody List<MeteringRuleStepsModel> modelList
+     * @return:
+     * @throws:
+     */
+    @RequestMapping({"createMeteringRuleSteps"})
+    public void createMeteringRuleSteps(HttpServletRequest request, HttpServletResponse response, @RequestBody List<MeteringRuleStepsModel> modelList) {
+        creditRiskMeteringRuleService.createMeteringRuleSteps(modelList);
+    }
+
+    /**
+     * @author: 张艳杰
+     * @methodsName: updateMeteringRuleSteps
+     * @description: 阶段信息配置规则维护
+     * @param: HttpServletRequest request, HttpServletResponse response,@RequestBody MeteringRuleStepsModel model
+     * @return:
+     * @throws:
+     */
+    @RequestMapping({"updateMeteringRuleSteps"})
+    public void updateMeteringRuleSteps(HttpServletRequest request, HttpServletResponse response, @RequestBody MeteringRuleStepsModel model) {
+        creditRiskMeteringRuleService.updateMeteringRuleSteps(model);
+    }
+
+    /**
+     * @author: 张艳杰
+     * @methodsName: deleteMeteringRuleSteps
+     * @description: 阶段信息配置规则删除
+     * @param: HttpServletRequest request, HttpServletResponse response,@RequestBody MeteringRuleStepsModel model
+     * @return:
+     * @throws:
+     */
+    @RequestMapping({"deleteMeteringRuleSteps"})
+    public void deleteMeteringRuleSteps(HttpServletRequest request, HttpServletResponse response, @RequestBody MeteringRuleStepsModel model) {
+        creditRiskMeteringRuleService.deleteMeteringRuleSteps(model);
+    }
+
+    /**
+     * @author: 张艳杰
+     * @methodsName: selectMeteringRuleSteps
+     * @description: 阶段信息配置规则当前行查询
+     * @param: HttpServletRequest request, HttpServletResponse response,@RequestBody MeteringRuleStepsModel model
+     * @return:
+     * @throws:
+     */
+    @RequestMapping({"selectMeteringRuleSteps"})
+    public void selectMeteringRuleSteps(HttpServletRequest request, HttpServletResponse response, @RequestBody MeteringRuleStepsModel model) {
+        sendData(response,creditRiskMeteringRuleService.selectStageConfigRule(model));
+    }
+
+    /**
+     * @author: 张艳杰
+     * @methodsName: isNotExist
+     * @description: 校验数据
+     * @param: HttpServletRequest request, HttpServletResponse response,
+     * @return:
+     * @throws:
+     */
+    @RequestMapping({"isNotExist"})
+    public void isNotExist(HttpServletRequest request, HttpServletResponse response, @RequestBody MeteringRuleModel model) {
+        if (null != model && null != model.getCreditRiskNo() && !model.getCreditRiskNo().isEmpty()){
+            MeteringRuleModel checkModel = creditRiskMeteringRuleService.selectMeteringRule(model);
+            if (null != checkModel) {
+                sendData(response,"该代码已存在");
+            } else {
+                sendData(response,true);
+            }
+        }
+    }
+
+    /**
+     * @author: 张艳杰
+     * @methodsName: getProductDataList
+     * @description: 产品列表查看
+     * @param: HttpServletRequest request, HttpServletResponse response,@RequestBody ProductListModel model
+     * @return: List<ProductListModel>
+     * @throws:
+     */
+    @RequestMapping({"getProductDataList"})
+    public void getProductDataList(HttpServletRequest request, HttpServletResponse response,
+                                   @RequestParam String creditRiskNo ) {
+        sendData(response, creditRiskMeteringRuleService.getProductDataList(creditRiskNo));
+    }
+
+    /**
+     * @author: 张艳杰
+     * @methodsName: getProductDataList
+     * @description: 输出数据源查看
+     * @param: HttpServletRequest request, HttpServletResponse response,@RequestBody InOrOutDataListModel model
+     * @return: List<InOrOutDataListModel>
+     * @throws:
+     */
+    @RequestMapping({"getInDataList"})
+    public void getInDataList(HttpServletRequest request, HttpServletResponse response,
+                                   @RequestParam String dataClassCode) {
+        sendData(response, creditRiskMeteringRuleService.getInDataList(dataClassCode));
+    }
+
+    /**
+     * @author: 张艳杰
+     * @methodsName: getProductDataList
+     * @description: 输出数据源查看
+     * @param: HttpServletRequest request, HttpServletResponse response,@RequestBody InOrOutDataListModel model
+     * @return: List<InOrOutDataListModel>
+     * @throws:
+     */
+    @RequestMapping({"getOutDataList"})
+    public void getOutDataList(HttpServletRequest request, HttpServletResponse response,
+                               @RequestParam String dataClassCode) {
+        sendData(response, creditRiskMeteringRuleService.getOutDataList(dataClassCode));
+    }
+
+}

+ 39 - 0
Procedure/backend/project/src/main/java/com/sundata/product/rwa/rwacalcconfig004rwa/mapper/CreditRiskMeteringRuleMapper.java

@@ -0,0 +1,39 @@
+package com.sundata.product.rwa.rwacalcconfig004rwa.mapper;
+
+import com.sundata.product.rwa.rwacalcconfig004rwa.model.InOrOutDataListModel;
+import com.sundata.product.rwa.rwacalcconfig004rwa.model.MeteringRuleModel;
+import com.sundata.product.rwa.rwacalcconfig004rwa.model.MeteringRuleStepsModel;
+import com.sundata.product.rwa.rwacalcconfig004rwa.model.ProductListModel;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
+
+public interface CreditRiskMeteringRuleMapper {
+    List<MeteringRuleModel> getDataList(@Param("model") MeteringRuleModel model);
+
+    void createMeteringRule(@Param("model") MeteringRuleModel model);
+
+    void updateMeteringRule(@Param("model") MeteringRuleModel model);
+
+    void deleteMeteringRule(@Param("model") MeteringRuleModel model);
+
+    MeteringRuleModel selectMeteringRule(@Param("model") MeteringRuleModel model);
+
+
+
+    List<MeteringRuleStepsModel> getMeteringRuleStepsList(@Param("model") MeteringRuleStepsModel model);
+
+    void createMeteringRuleSteps(@Param("model") MeteringRuleStepsModel meteringRuleStepsModel);
+
+    void updateMeteringRuleSteps(@Param("model") MeteringRuleStepsModel model);
+
+    void deleteMeteringRuleSteps(@Param("model") MeteringRuleStepsModel model);
+
+    MeteringRuleStepsModel selectStageConfigRule(@Param("model") MeteringRuleStepsModel model);
+
+    List<ProductListModel> getProductDataList(String creditRiskNo);
+
+    List<InOrOutDataListModel> getInDataList(String dataClassCode);
+
+    List<InOrOutDataListModel> getOutDataList(String dataClassCode);
+}

+ 34 - 0
Procedure/backend/project/src/main/java/com/sundata/product/rwa/rwacalcconfig004rwa/model/InOrOutDataListModel.java

@@ -0,0 +1,34 @@
+package com.sundata.product.rwa.rwacalcconfig004rwa.model;
+
+public class InOrOutDataListModel {
+    // 数据源代码
+    private String dataClassCode;
+    // 数据源名称
+    private String dataClassName;
+    // 数据库表英文名
+    private String tableName;
+
+    public String getDataClassCode() {
+        return dataClassCode;
+    }
+
+    public void setDataClassCode(String dataClassCode) {
+        this.dataClassCode = dataClassCode;
+    }
+
+    public String getDataClassName() {
+        return dataClassName;
+    }
+
+    public void setDataClassName(String dataClassName) {
+        this.dataClassName = dataClassName;
+    }
+
+    public String getTableName() {
+        return tableName;
+    }
+
+    public void setTableName(String tableName) {
+        this.tableName = tableName;
+    }
+}

+ 114 - 0
Procedure/backend/project/src/main/java/com/sundata/product/rwa/rwacalcconfig004rwa/model/MeteringRuleModel.java

@@ -0,0 +1,114 @@
+package com.sundata.product.rwa.rwacalcconfig004rwa.model;
+
+public class MeteringRuleModel {
+    // 计算实例号
+    private String calcIndex;
+    // 起始数据日期
+    private String startDate;
+    // 截止数据日期
+    private String endDate;
+    // 年月
+    private String term;
+    // 数据日期
+    private String dataDate;
+    // 规则编号
+    private String creditRiskNo;
+    // 规则名称
+    private String creditRiskName;
+    // 所属业务
+    private String creditRiskBussinessCode;
+    // 默认规则
+    private String defaultRule;
+    // 默认输出
+    private String defaultOut;
+    // 规则序号
+    private String creditRiskIndex;
+
+    public String getCalcIndex() {
+        return calcIndex;
+    }
+
+    public void setCalcIndex(String calcIndex) {
+        this.calcIndex = calcIndex;
+    }
+
+    public String getStartDate() {
+        return startDate;
+    }
+
+    public void setStartDate(String startDate) {
+        this.startDate = startDate;
+    }
+
+    public String getEndDate() {
+        return endDate;
+    }
+
+    public void setEndDate(String endDate) {
+        this.endDate = endDate;
+    }
+
+    public String getTerm() {
+        return term;
+    }
+
+    public void setTerm(String term) {
+        this.term = term;
+    }
+
+    public String getDataDate() {
+        return dataDate;
+    }
+
+    public void setDataDate(String dataDate) {
+        this.dataDate = dataDate;
+    }
+
+    public String getCreditRiskNo() {
+        return creditRiskNo;
+    }
+
+    public void setCreditRiskNo(String creditRiskNo) {
+        this.creditRiskNo = creditRiskNo;
+    }
+
+    public String getCreditRiskName() {
+        return creditRiskName;
+    }
+
+    public void setCreditRiskName(String creditRiskName) {
+        this.creditRiskName = creditRiskName;
+    }
+
+    public String getCreditRiskBussinessCode() {
+        return creditRiskBussinessCode;
+    }
+
+    public void setCreditRiskBussinessCode(String creditRiskBussinessCode) {
+        this.creditRiskBussinessCode = creditRiskBussinessCode;
+    }
+
+    public String getDefaultRule() {
+        return defaultRule;
+    }
+
+    public void setDefaultRule(String defaultRule) {
+        this.defaultRule = defaultRule;
+    }
+
+    public String getDefaultOut() {
+        return defaultOut;
+    }
+
+    public void setDefaultOut(String defaultOut) {
+        this.defaultOut = defaultOut;
+    }
+
+    public String getCreditRiskIndex() {
+        return creditRiskIndex;
+    }
+
+    public void setCreditRiskIndex(String creditRiskIndex) {
+        this.creditRiskIndex = creditRiskIndex;
+    }
+}

+ 154 - 0
Procedure/backend/project/src/main/java/com/sundata/product/rwa/rwacalcconfig004rwa/model/MeteringRuleStepsModel.java

@@ -0,0 +1,154 @@
+package com.sundata.product.rwa.rwacalcconfig004rwa.model;
+
+public class MeteringRuleStepsModel {
+    // 计算实例号
+    private String calcIndex;
+    // 起始数据日期
+    private String startDate;
+    // 截止数据日期
+    private String endDate;
+    // 年月
+    private String term;
+    // 数据日期
+    private String dataDate;
+    // 信用风险rwa计量规则编号
+    private String creditRiskNo;
+    // 步骤编号
+    private String stepNo;
+    // 步骤名称
+    private String stepName;
+    // 步骤类型(预留)
+    private String stepType;
+    // 步骤序号
+    private String stepIndex;
+    // 步骤规则
+    private String stepRule;
+    // 步骤输入
+    private String stepIn;
+    // 步骤输入
+    private String[] stepIns;
+    // 步骤输出
+    private String stepOut;
+    // 步骤输出
+    private String[] stepOuts;
+
+    public String getCalcIndex() {
+        return calcIndex;
+    }
+
+    public void setCalcIndex(String calcIndex) {
+        this.calcIndex = calcIndex;
+    }
+
+    public String getStartDate() {
+        return startDate;
+    }
+
+    public void setStartDate(String startDate) {
+        this.startDate = startDate;
+    }
+
+    public String getEndDate() {
+        return endDate;
+    }
+
+    public void setEndDate(String endDate) {
+        this.endDate = endDate;
+    }
+
+    public String getTerm() {
+        return term;
+    }
+
+    public void setTerm(String term) {
+        this.term = term;
+    }
+
+    public String getDataDate() {
+        return dataDate;
+    }
+
+    public void setDataDate(String dataDate) {
+        this.dataDate = dataDate;
+    }
+
+    public String getCreditRiskNo() {
+        return creditRiskNo;
+    }
+
+    public void setCreditRiskNo(String creditRiskNo) {
+        this.creditRiskNo = creditRiskNo;
+    }
+
+    public String getStepNo() {
+        return stepNo;
+    }
+
+    public void setStepNo(String stepNo) {
+        this.stepNo = stepNo;
+    }
+
+    public String getStepName() {
+        return stepName;
+    }
+
+    public void setStepName(String stepName) {
+        this.stepName = stepName;
+    }
+
+    public String getStepType() {
+        return stepType;
+    }
+
+    public void setStepType(String stepType) {
+        this.stepType = stepType;
+    }
+
+    public String getStepIndex() {
+        return stepIndex;
+    }
+
+    public void setStepIndex(String stepIndex) {
+        this.stepIndex = stepIndex;
+    }
+
+    public String getStepRule() {
+        return stepRule;
+    }
+
+    public void setStepRule(String stepRule) {
+        this.stepRule = stepRule;
+    }
+
+    public String getStepIn() {
+        return stepIn;
+    }
+
+    public void setStepIn(String stepIn) {
+        this.stepIn = stepIn;
+    }
+
+    public String getStepOut() {
+        return stepOut;
+    }
+
+    public void setStepOut(String stepOut) {
+        this.stepOut = stepOut;
+    }
+
+    public String[] getStepIns() {
+        return stepIns;
+    }
+
+    public void setStepIns(String[] stepIns) {
+        this.stepIns = stepIns;
+    }
+
+    public String[] getStepOuts() {
+        return stepOuts;
+    }
+
+    public void setStepOuts(String[] stepOuts) {
+        this.stepOuts = stepOuts;
+    }
+}

+ 54 - 0
Procedure/backend/project/src/main/java/com/sundata/product/rwa/rwacalcconfig004rwa/model/ProductListModel.java

@@ -0,0 +1,54 @@
+package com.sundata.product.rwa.rwacalcconfig004rwa.model;
+
+public class ProductListModel {
+    //产品编号
+    private String productNo;
+    //产品名称
+    private String productName;
+    //产品分类
+    private String productType;
+    //对应业务
+    private String productBussinessCode;
+    //来源系统
+    private String productFromSystem;
+
+    public String getProductNo() {
+        return productNo;
+    }
+
+    public void setProductNo(String productNo) {
+        this.productNo = productNo;
+    }
+
+    public String getProductName() {
+        return productName;
+    }
+
+    public void setProductName(String productName) {
+        this.productName = productName;
+    }
+
+    public String getProductType() {
+        return productType;
+    }
+
+    public void setProductType(String productType) {
+        this.productType = productType;
+    }
+
+    public String getProductBussinessCode() {
+        return productBussinessCode;
+    }
+
+    public void setProductBussinessCode(String productBussinessCode) {
+        this.productBussinessCode = productBussinessCode;
+    }
+
+    public String getProductFromSystem() {
+        return productFromSystem;
+    }
+
+    public void setProductFromSystem(String productFromSystem) {
+        this.productFromSystem = productFromSystem;
+    }
+}

+ 336 - 0
Procedure/backend/project/src/main/java/com/sundata/product/rwa/rwacalcconfig004rwa/mybatis/CreditRiskMeteringRuleMapper.xml

@@ -0,0 +1,336 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper
+        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.sundata.product.rwa.rwacalcconfig004rwa.mapper.CreditRiskMeteringRuleMapper">
+
+    <!-- 缓释工具类型页面初始化 -->
+    <select id="getDataList" resultType="com.sundata.product.rwa.rwacalcconfig004rwa.model.MeteringRuleModel">
+        SELECT
+        CALCINDEX                  AS  calcIndex,
+        SDATE                      AS  startDate,
+        EDATE                      AS  endDate,
+        TERM                       AS  term,
+        DATA_DATE                  AS  dataDate,
+        CREDITRISK_NO              AS  creditRiskNo,
+        CREDITRISK_NAME            AS  creditRiskName,
+        CREDITRISK_BUSSINESS_CODE  AS  creditRiskBussinessCode,
+        DEFAULT_RULE               AS  defaultRule,
+        DEFAULT_OUT	               AS  defaultOut,
+        CREDITRISK_INDEX           AS  creditRiskIndex
+        FROM RWA_CALC_CONF_CREDITRISK
+        <where>
+            <if test="model.creditRiskNo != null and model.creditRiskNo !=''">
+                CREDITRISK_NO like concat(concat('%',#{model.creditRiskNo}),'%')
+            </if>
+            <if test="model.creditRiskName != null and model.creditRiskName !=''">
+                and CREDITRISK_NAME like concat(concat('%', #{model.creditRiskName}),'%')
+            </if>
+            <if test="model.creditRiskBussinessCode != null and model.creditRiskBussinessCode !=''">
+                and CREDITRISK_BUSSINESS_CODE like concat(concat('%', #{model.creditRiskBussinessCode}),'%')
+            </if>
+        </where>
+    </select>
+
+    <!-- 缓释工具类型新建数据 -->
+    <insert id="createMeteringRule" parameterType="com.sundata.product.rwa.rwacalcconfig004rwa.model.MeteringRuleModel">
+        insert into RWA_CALC_CONF_CREDITRISK
+        (CALCINDEX,
+        SDATE,
+        EDATE,
+        TERM,
+        DATA_DATE,
+        CREDITRISK_NO,
+        CREDITRISK_NAME,
+        CREDITRISK_BUSSINESS_CODE,
+        DEFAULT_RULE,
+        DEFAULT_OUT,
+        CREDITRISK_INDEX
+        )
+        values(
+        #{model.calcIndex},
+        #{model.startDate},
+        #{model.endDate},
+        #{model.term},
+        #{model.dataDate},
+        #{model.creditRiskNo},
+        #{model.creditRiskName},
+        #{model.creditRiskBussinessCode},
+        #{model.defaultRule},
+        #{model.defaultOut},
+        #{model.creditRiskIndex}
+        )
+    </insert>
+
+
+
+
+    <!-- 缓释品工具修改数据 -->
+    <update id="updateMeteringRule">
+        update RWA_CALC_CONF_CREDITRISK
+        <trim suffixOverrides=",">
+            <set>
+                <if test="model.creditRiskNo != null and model.creditRiskNo != ''">
+                    CREDITRISK_NO = #{model.creditRiskNo},
+                </if>
+                <if test="model.creditRiskName != null and model.creditRiskName != ''">
+                    CREDITRISK_NAME = #{model.creditRiskName},
+                </if>
+                <if test="model.creditRiskBussinessCode != null and model.creditRiskBussinessCode != ''">
+                    CREDITRISK_BUSSINESS_CODE = #{model.creditRiskBussinessCode},
+                </if>
+                <if test="model.defaultRule != null and model.defaultRule != ''">
+                    DEFAULT_RULE = #{model.defaultRule},
+                </if>
+                <if test="model.defaultOut != null and model.defaultOut != ''">
+                    DEFAULT_OUT = #{model.defaultOut},
+                </if>
+                <if test="model.creditRiskIndex != null and model.creditRiskIndex != ''">
+                    CREDITRISK_INDEX = #{model.creditRiskIndex},
+                </if>
+            </set>
+        </trim>
+        <where>
+            CREDITRISK_NO = #{model.creditRiskNo}
+        </where>
+    </update>
+
+
+    <!-- 缓释品类型删除数据 -->
+    <delete id="deleteMeteringRule">
+        delete from  RWA_CALC_CONF_CREDITRISK
+        <where>
+            CREDITRISK_NO = #{model.creditRiskNo}
+        </where>
+    </delete>
+
+    <!-- 缓释品类型当前行数据 -->
+    <select id="selectMeteringRule" resultType="com.sundata.product.rwa.rwacalcconfig004rwa.model.MeteringRuleModel">
+        SELECT
+        CALCINDEX                  AS  calcIndex,
+        SDATE                      AS  startDate,
+        EDATE                      AS  endDate,
+        TERM                       AS  term,
+        DATA_DATE                  AS  dataDate,
+        CREDITRISK_NO              AS  creditRiskNo,
+        CREDITRISK_NAME            AS  creditRiskName,
+        CREDITRISK_BUSSINESS_CODE  AS  creditRiskBussinessCode,
+        DEFAULT_RULE               AS  defaultRule,
+        DEFAULT_OUT	               AS  defaultOut,
+        CREDITRISK_INDEX           AS  creditRiskIndex
+        FROM RWA_CALC_CONF_CREDITRISK
+        <where>
+            <if test="model.creditRiskNo != null and model.creditRiskNo !=''">
+                CREDITRISK_NO = #{model.creditRiskNo}
+            </if>
+            <if test="model.creditRiskName != null and model.creditRiskName !=''">
+                and CREDITRISK_NAME = #{model.creditRiskName}
+            </if>
+        </where>
+    </select>
+
+
+
+
+
+
+    <!-- 缓释工具规则列表页面初始化 -->
+    <select id="getMeteringRuleStepsList" resultType="com.sundata.product.rwa.rwacalcconfig004rwa.model.MeteringRuleStepsModel">
+        SELECT
+        CALCINDEX             AS      calcIndex,
+        SDATE                 AS      startDate,
+        EDATE                 AS      endDate,
+        TERM                  AS      term,
+        DATA_DATE             AS      dataDate,
+        CREDITRISK_NO         AS      creditRiskNo,
+        STEP_NO               AS      stepNo,
+        STEP_NAME             AS      stepName,
+        STEP_TYPE             AS      stepType,
+        STEP_INDEX            AS      stepIndex,
+        STEP_RULE             AS      stepRule,
+        STEP_IN               AS      stepIn,
+        STEP_OUT              AS      stepOut
+        FROM RWA_CALC_CONF_CREDITRISKRULE
+        <where>
+            <if test="model.creditRiskNo != null and model.creditRiskNo !=''">
+                CREDITRISK_NO = #{model.creditRiskNo}
+            </if>
+        </where>
+    </select>
+
+    <!-- 缓释工具规则新建数据 -->
+    <insert id="createMeteringRuleSteps" parameterType="com.sundata.product.rwa.rwacalcconfig004rwa.model.MeteringRuleStepsModel">
+        insert into RWA_CALC_CONF_CREDITRISKRULE
+        (CALCINDEX,
+        SDATE,
+        EDATE,
+        TERM,
+        DATA_DATE,
+        CREDITRISK_NO,
+        STEP_NO,
+        STEP_NAME,
+        STEP_TYPE,
+        STEP_INDEX,
+        STEP_RULE,
+        STEP_IN,
+        STEP_OUT
+        )
+        values(
+        #{model.calcIndex},
+        #{model.startDate},
+        #{model.endDate},
+        #{model.term},
+        #{model.dataDate},
+        #{model.creditRiskNo},
+        #{model.stepNo},
+        #{model.stepName},
+        #{model.stepType},
+        #{model.stepIndex},
+        #{model.stepRule},
+        #{model.stepIn},
+        #{model.stepOut}
+        )
+    </insert>
+
+
+
+
+    <!-- 缓释品规则修改数据 -->
+    <update id="updateMeteringRuleSteps">
+        update RWA_CALC_CONF_CREDITRISKRULE
+        <trim suffixOverrides=",">
+            <set>
+                <if test="model.stepNo != null and model.stepNo != ''">
+                    STEP_NO = #{model.stepNo},
+                </if>
+                <if test="model.stepName != null and model.stepName != ''">
+                    STEP_NAME = #{model.stepName},
+                </if>
+                <if test="model.stepType != null and model.stepType != ''">
+                    STEP_TYPE = #{model.stepType},
+                </if>
+                <if test="model.stepIndex != null and model.stepIndex != ''">
+                    STEP_INDEX = #{model.stepIndex},
+                </if>
+                <if test="model.stepRule != null and model.stepRule != ''">
+                    STEP_RULE = #{model.stepRule},
+                </if>
+                <if test="model.stepIn != null and model.stepIn != ''">
+                    STEP_IN = #{model.stepIn},
+                </if>
+                <if test="model.stepOut != null and model.stepOut != ''">
+                    STEP_OUT = #{model.stepOut},
+                </if>
+            </set>
+        </trim>
+        <where>
+            CREDITRISK_NO = #{model.creditRiskNo}
+            <if test="">
+                and STEP_NO = #{model.stepNo}
+            </if>
+        </where>
+    </update>
+
+
+    <!-- 缓释品规则删除数据 -->
+    <delete id="deleteMeteringRuleSteps">
+        delete from RWA_CALC_CONF_CREDITRISKRULE
+        <where>
+            <if test="null != model.creditRiskNo and '' != model.creditRiskNo">
+                 CREDITRISK_NO = #{model.creditRiskNo}
+            </if>
+        </where>
+    </delete>
+
+    <!-- 缓释品规则当前行数据 -->
+    <select id="selectStageConfigRule" resultType="com.sundata.product.rwa.rwacalcconfig004rwa.model.MeteringRuleStepsModel">
+        SELECT
+        CALCINDEX             AS      calcIndex,
+        SDATE                 AS      startDate,
+        EDATE                 AS      endDate,
+        TERM                  AS      term,
+        DATA_DATE             AS      dataDate,
+        CREDITRISK_NO         AS      creditRiskNo,
+        STEP_NO               AS      stepNo,
+        STEP_NAME             AS      stepName,
+        STEP_TYPE             AS      stepType,
+        STEP_INDEX            AS      stepIndex,
+        STEP_RULE             AS      stepRule,
+        STEP_IN               AS      stepIn,
+        STEP_OUT              AS      stepOut
+        FROM RWA_CALC_CONF_CREDITRISKRULE
+        <where>
+            <if test="model.stepNo != null and model.stepNo !=''">
+                STEP_NO = #{model.stepNo}
+            </if>
+            <if test="model.stepIn != null and model.stepIn !=''">
+                and STEP_IN = #{model.stepIn}
+            </if>
+            <if test="model.stepOut != null and model.stepOut !=''">
+                and STEP_OUT = #{model.stepOut}
+            </if>
+            <if test="model.stepType != null and model.stepType !=''">
+                and STEP_TYPE = #{model.stepType}
+            </if>
+        </where>
+    </select>
+
+
+
+    <!-- 产品列表数据展示数据 -->
+    <select id="getProductDataList" resultType="com.sundata.product.rwa.rwacalcconfig004rwa.model.ProductListModel">
+        SELECT
+        T2.PRODUCT_NO                        AS      productNo,
+        T2.PRODUCT_NAME                      AS      productName,
+        T2.PRODUCT_TYPE                      AS      productType,
+        T2.PRODUCT_BUSSINESS_CODE            AS      productBussinessCode,
+        T2.PRODUCT_FROM_SYSTEM               AS      productFromSystem
+        FROM RWA_CALC_CONF_CREDITRISK T1
+        INNER JOIN RWA_CALC_CONF_PRODUCT T2
+        ON T2.PRODUCT_BUSSINESS_CODE = T1.CREDITRISK_BUSSINESS_CODE
+        <where>
+            <if test="creditRiskNo != null and creditRiskNo !=''">
+                T1.CREDITRISK_NO = #{creditRiskNo}
+            </if>
+        </where>
+    </select>
+
+    <!-- 输入源数据展示 -->
+    <select id="getInDataList" resultType="com.sundata.product.rwa.rwacalcconfig004rwa.model.InOrOutDataListModel">
+        SELECT
+        distinct T3.DATACLASSCODE      AS dataClassCode ,
+        T3.DATACLASSNAME               AS dataClassName ,
+        T3.TABNAME                     AS tableName
+        from RWA_CALC_CONF_CREDITRISK t1
+        left join RWA_CALC_CONF_CREDITRISKRULE T2
+        on t1.CREDITRISK_NO = t2.CREDITRISK_NO
+        left join SYS_SQLEDIT_DEF_DATACLASS T3
+        on t2.STEP_IN = t3.DATACLASSCODE
+        <where>
+            <if test=" key != null and key !=''">
+                t1.CREDITRISK_NO = #{dataClassCode}
+            </if>
+        </where>
+    </select>
+
+    <!-- 输出源数据展示 -->
+    <select id="getOutDataList" resultType="com.sundata.product.rwa.rwacalcconfig004rwa.model.InOrOutDataListModel">
+        SELECT
+        distinct T3.DATACLASSCODE      AS dataClassCode ,
+        T3.DATACLASSNAME               AS dataClassName ,
+        T3.TABNAME                     AS tableName
+        from RWA_CALC_CONF_CREDITRISK t1
+        left join RWA_CALC_CONF_CREDITRISKRULE T2
+        on t1.CREDITRISK_NO = t2.CREDITRISK_NO
+        left join SYS_SQLEDIT_DEF_DATACLASS T3
+        on t2.STEP_OUT = t3.DATACLASSCODE
+        <where>
+            <if test=" key != null and key !=''">
+                t1.CREDITRISK_NO = #{dataClassCode}
+            </if>
+        </where>
+    </select>
+
+
+
+</mapper>

+ 211 - 0
Procedure/backend/project/src/main/java/com/sundata/product/rwa/rwacalcconfig004rwa/service/CreditRiskMeteringRuleService.java

@@ -0,0 +1,211 @@
+package com.sundata.product.rwa.rwacalcconfig004rwa.service;
+
+import com.sundata.product.rwa.rwacalcconfig004rwa.mapper.CreditRiskMeteringRuleMapper;
+import com.sundata.product.rwa.rwacalcconfig004rwa.model.*;
+import com.sundata.product.rwa.rwacalcconfig004rwa.model.MeteringRuleModel;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+
+@Service
+public class CreditRiskMeteringRuleService {
+    
+    @Autowired
+    CreditRiskMeteringRuleMapper creditRiskMeteringRuleMapper;
+
+    /**
+     * @author: 张艳杰
+     * @methodsName: getDataList
+     * @description: 阶段信息配置初始化
+     * @param: HttpServletRequest request, HttpServletResponse response,@RequestBody MeteringRuleModel model
+     * @return: List<MeteringRuleModel>
+     * @throws:
+     */
+    public List<MeteringRuleModel> getDataList(MeteringRuleModel model) {
+        return creditRiskMeteringRuleMapper.getDataList(model);
+    }
+
+    /**
+     * @author: 张艳杰
+     * @methodsName: createMeteringRule
+     * @description: 阶段信息配置新增
+     * @param: HttpServletRequest request, HttpServletResponse response,@RequestBody MeteringRuleModel model
+     * @return:
+     * @throws:
+     */
+    public void createMeteringRule(MeteringRuleModel model) {
+        creditRiskMeteringRuleMapper.createMeteringRule(model);
+    }
+
+    /**
+     * @author: 张艳杰
+     * @methodsName: updateMeteringRule
+     * @description: 阶段信息配置维护
+     * @param: HttpServletRequest request, HttpServletResponse response,@RequestBody MeteringRuleModel model
+     * @return:
+     * @throws:
+     */
+    public void updateMeteringRule(MeteringRuleModel model) {
+        creditRiskMeteringRuleMapper.updateMeteringRule(model);
+    }
+
+    /**
+     * @author: 张艳杰
+     * @methodsName: deleteMeteringRule
+     * @description: 阶段信息配置删除
+     * @param: HttpServletRequest request, HttpServletResponse response,@RequestBody MeteringRuleModel model
+     * @return:
+     * @throws:
+     */
+    public void deleteMeteringRule(MeteringRuleModel model) {
+        creditRiskMeteringRuleMapper.deleteMeteringRule(model);
+        MeteringRuleStepsModel stageModel = new MeteringRuleStepsModel();
+        stageModel.setCreditRiskNo(model.getCreditRiskNo());
+        creditRiskMeteringRuleMapper.deleteMeteringRuleSteps(stageModel);
+    }
+
+    /**
+     * @author: 张艳杰
+     * @methodsName: selectMeteringRule
+     * @description: 阶段信息配置类型查询
+     * @param: HttpServletRequest request, HttpServletResponse response,@RequestBody MeteringRuleModel model
+     * @return: MeteringRuleModel
+     * @throws:
+     */
+    public MeteringRuleModel selectMeteringRule(MeteringRuleModel model) {
+        return creditRiskMeteringRuleMapper.selectMeteringRule(model);
+    }
+
+
+
+    /**
+     * @author: 张艳杰
+     * @methodsName: getMeteringRuleStepsList
+     * @description: 阶段信息配置规则列表
+     * @param: HttpServletRequest request, HttpServletResponse response,@RequestBody MeteringRuleStepsModel model
+     * @return: List<MeteringRuleStepsModel>
+     * @throws:
+     */
+    public List<MeteringRuleStepsModel> getMeteringRuleStepsList(MeteringRuleStepsModel model) {
+        List<MeteringRuleStepsModel> modelList = creditRiskMeteringRuleMapper.getMeteringRuleStepsList(model);
+        if (null != modelList && !modelList.isEmpty()) {
+            for (MeteringRuleStepsModel everyModel :modelList) {
+                if (null != everyModel.getStepIn() && !everyModel.getStepIn().isEmpty()) {
+                    everyModel.setStepIns(everyModel.getStepIn().split(","));
+                }
+                if (null != everyModel.getStepOut() && !everyModel.getStepOut().isEmpty()) {
+                    everyModel.setStepOuts(everyModel.getStepOut().split(","));
+                }
+            }
+        }
+
+        return modelList;
+    }
+
+    /**
+     * @author: 张艳杰
+     * @methodsName: createMeteringRuleSteps
+     * @description: 阶段信息配置规则新增
+     * @param: HttpServletRequest request, HttpServletResponse response,@RequestBody List<MeteringRuleStepsModel> modelList
+     * @return:
+     * @throws:
+     */
+    public void createMeteringRuleSteps(List<MeteringRuleStepsModel> modelKist) {
+        for (int i=0 ; i<modelKist.size(); i++){
+            StringBuilder appandInValue = new StringBuilder();
+            StringBuilder appandOutValue = new StringBuilder();
+            if (i==0) {
+                // 同一类型的缓释品都删掉
+                creditRiskMeteringRuleMapper.deleteMeteringRuleSteps(modelKist.get(i));
+            }
+            if (null != modelKist.get(i).getStepIns() && modelKist.get(i).getStepIns().length>=1 ) {
+                for (String value:modelKist.get(i).getStepIns()){
+                    appandInValue.append(value).append(",");
+                }
+                modelKist.get(i).setStepIn(appandInValue.deleteCharAt(appandInValue.toString().length()-1).toString());
+
+            }
+            if (null != modelKist.get(i).getStepOuts() && modelKist.get(i).getStepOuts().length>=1 ) {
+                for (String value:modelKist.get(i).getStepOuts()){
+                    appandOutValue.append(value).append(",");
+                }
+                modelKist.get(i).setStepOut(appandOutValue.deleteCharAt(appandOutValue.toString().length()-1).toString());
+            }
+             // 将编辑好的合格缓释品插入
+            creditRiskMeteringRuleMapper.createMeteringRuleSteps(modelKist.get(i));
+        }
+    }
+
+    /**
+     * @author: 张艳杰
+     * @methodsName: updateMeteringRuleSteps
+     * @description: 阶段信息配置规则维护
+     * @param: HttpServletRequest request, HttpServletResponse response,@RequestBody MeteringRuleStepsModel model
+     * @return:
+     * @throws:
+     */
+    public void updateMeteringRuleSteps(MeteringRuleStepsModel model) {
+        creditRiskMeteringRuleMapper.updateMeteringRuleSteps(model);
+    }
+
+    /**
+     * @author: 张艳杰
+     * @methodsName: deleteMeteringRuleSteps
+     * @description: 阶段信息配置规则删除
+     * @param: HttpServletRequest request, HttpServletResponse response,@RequestBody MeteringRuleStepsModel model
+     * @return:
+     * @throws:
+     */
+    public void deleteMeteringRuleSteps(MeteringRuleStepsModel model) {
+        creditRiskMeteringRuleMapper.deleteMeteringRuleSteps(model);
+    }
+
+    /**
+     * @author: 张艳杰
+     * @methodsName: selectStageConfigRule
+     * @description: 阶段信息配置规则当前行查询
+     * @param: HttpServletRequest request, HttpServletResponse response,@RequestBody MeteringRuleStepsModel model
+     * @return:
+     * @throws:
+     */
+    public MeteringRuleStepsModel selectStageConfigRule(MeteringRuleStepsModel model) {
+        return creditRiskMeteringRuleMapper.selectStageConfigRule(model);
+    }
+
+    /**
+     * @author: 张艳杰
+     * @methodsName: getProductDataList
+     * @description: 产品列表查看
+     * @param: HttpServletRequest request, HttpServletResponse response,@RequestBody ProductListModel model
+     * @return: List<ProductListModel>
+     * @throws:
+     */
+    public List<ProductListModel> getProductDataList(String creditRiskNo) {
+        return creditRiskMeteringRuleMapper.getProductDataList(creditRiskNo);
+    }
+
+    /**
+     * @author: 张艳杰
+     * @methodsName: getProductDataList
+     * @description: 输出数据源查看
+     * @param: HttpServletRequest request, HttpServletResponse response,@RequestBody InOrOutDataListModel model
+     * @return: List<InOrOutDataListModel>
+     * @throws:
+     */
+    public List<InOrOutDataListModel> getInDataList(String dataClassCode) {
+        return creditRiskMeteringRuleMapper.getInDataList(dataClassCode);
+    }
+
+    /**
+     * @author: 张艳杰
+     * @methodsName: getProductDataList
+     * @description: 输出数据源查看
+     * @param: HttpServletRequest request, HttpServletResponse response,@RequestBody InOrOutDataListModel model
+     * @return: List<InOrOutDataListModel>
+     * @throws:
+     */
+    public List<InOrOutDataListModel> getOutDataList(String dataClassCode) {
+        return creditRiskMeteringRuleMapper.getOutDataList(dataClassCode);
+    }
+}

+ 25 - 9
Procedure/backend/project/src/main/java/com/sundata/product/rwa/rwacalcconfig004rwa/service/StageConfigService.java

@@ -2,6 +2,7 @@ package com.sundata.product.rwa.rwacalcconfig004rwa.service;
 
 
 import com.sundata.product.rwa.rwacalcconfig004rwa.mapper.StageConfigMapper;
+import com.sundata.product.rwa.rwacalcconfig004rwa.model.MeteringRuleStepsModel;
 import com.sundata.product.rwa.rwacalcconfig004rwa.model.StageDefinitionModel;
 import com.sundata.product.rwa.rwacalcconfig004rwa.model.StageStepsModel;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -90,10 +91,20 @@ public class StageConfigService {
      */
     public List<StageStepsModel> getStageConfigRuleList(StageStepsModel model) {
         List<StageStepsModel> modelList = stageConfigMapper.getStageConfigRuleList(model);
-        for (StageStepsModel everyModel :modelList) {
-            everyModel.setStepIns(everyModel.getStepIn().split(","));
-            everyModel.setStepOuts(everyModel.getStepOut().split(","));
+        if (null != modelList && !modelList.isEmpty()) {
+            for (StageStepsModel everyModel :modelList) {
+                if (null != everyModel.getStepIn() && !everyModel.getStepIn().isEmpty()) {
+                    everyModel.setStepIns(everyModel.getStepIn().split(","));
+                }
+                if (null != everyModel.getStepOut() && !everyModel.getStepOut().isEmpty()) {
+                    everyModel.setStepOuts(everyModel.getStepOut().split(","));
+                }
+            }
         }
+//        for (StageStepsModel everyModel :modelList) {
+//            everyModel.setStepIns(everyModel.getStepIn().split(","));
+//            everyModel.setStepOuts(everyModel.getStepOut().split(","));
+//        }
         return modelList;
     }
 
@@ -113,14 +124,19 @@ public class StageConfigService {
                 // 同一类型的缓释品都删掉
                 stageConfigMapper.deleteStageConfigRule(modelKist.get(i));
             }
-            for (String value:modelKist.get(i).getStepIns()){
-                appandInValue.append(value).append(",");
+            if (null != modelKist.get(i).getStepIns() && modelKist.get(i).getStepIns().length>=1 ) {
+                for (String value:modelKist.get(i).getStepIns()){
+                    appandInValue.append(value).append(",");
+                }
+                modelKist.get(i).setStepIn(appandInValue.deleteCharAt(appandInValue.toString().length()-1).toString());
+
             }
-            modelKist.get(i).setStepIn(appandInValue.deleteCharAt(appandInValue.toString().length()-1).toString());
-            for (String value:modelKist.get(i).getStepOuts()){
-                appandOutValue.append(value).append(",");
+            if (null != modelKist.get(i).getStepOuts() && modelKist.get(i).getStepOuts().length>=1 ) {
+                for (String value:modelKist.get(i).getStepOuts()){
+                    appandOutValue.append(value).append(",");
+                }
+                modelKist.get(i).setStepOut(appandOutValue.deleteCharAt(appandOutValue.toString().length()-1).toString());
             }
-            modelKist.get(i).setStepOut(appandOutValue.deleteCharAt(appandOutValue.toString().length()-1).toString());
             // 将编辑好的合格缓释品插入
             stageConfigMapper.createStageConfigRule(modelKist.get(i));
         }

+ 854 - 0
Procedure/frontend/projectb/src/pages/product/rwa_calc_config_004rwa/creditriskmeteringrule.tsx

@@ -0,0 +1,854 @@
+import React, { useEffect, useRef, useState } from "react";
+import { type ProColumns, type ActionType, ProTable } from '@ant-design/pro-components';
+import {type FormInstance} from 'antd'
+import { SDPage,SDTable,EditType,DictTree,SDButton, baseFun,SDModalForm,SDOperate,SDSubmitButton, SDAreaTtile, SDFormDict, SDFormText, SDLayout, validateFun, SDModal, SDTabs } from "@sundata/ui-frame";
+import { ProductProps, renderTemplate } from "@/sundataImport";
+import { useModel } from '@umijs/max';
+import {getDataList,createMeteringRule,updateMeteringRule,deleteMeteringRule,selectMeteringRule,getMeteringRuleStepsList
+    ,createMeteringRuleSteps,getInDataList,getOutDataList,getProductDataList,
+    deleteMeteringRuleSteps,selectMeteringRuleSteps,isNotExist} from "@/services/rwa/product/rwa_calc_config_004rwa/creditriskmeteringrule";
+import { PlusSquareTwoTone, WomanOutlined } from "@ant-design/icons";
+import { MeteringRuleModel, MeteringRuleStepsModel,productListModel,inOrOutDataListModel } from "@/services/rwa/product/rwa_calc_config_004rwa/creditriskmeteringrule";
+import { rwaCalcConfProductrulesModel,product_modifyone1,product_modifyone2 } from "@/services/rwa/product_list";
+
+type widowProps = {
+  onCancel:  () => void;
+  onChangeVisible(visible: boolean, type: string): unknown;
+  onChangeVisdible:(visible:boolean,type ?: 'none' | 'raload' )=>void;
+  treeData: DictTree[];
+}& ProductProps;
+// 客户基本信息表
+const creditriskmeteringrule : React.FC<widowProps> = (prop:widowProps) => {
+
+    /** 编辑方式,查看、修改、新增按钮时设置,详细信息表单中使用 */
+    const [editType, setEditType] = useState<EditType>(prop.editType || 'display');
+    const [toolRuleEditType, setToolRuleEditType] = useState<EditType>(prop.editType || 'display');
+    /** 是否显示详细信息窗口 */
+    const [detailVisible, setDetailVisible] = useState<boolean>(false);
+
+    /** 信用风险RWA计量规则定义信息窗口 */
+    const [StageConfigRuleVisible, setStageConfigRuleVisible] = useState<boolean>(false);
+
+    /** 产品列表信息窗口 */
+    const [productListVisible, setProductListVisible] = useState<boolean>(false);
+
+    /** 源数据列表信息窗口 */
+    const [inOrOutListVisible, setInOrOutListVisible] = useState<boolean>(false);
+    /** 产品列表查看跳转页面 */
+    const [transferVisible,setTransferVisible] = useState<boolean>(false);
+
+
+    const [currentRow, setCurrentRow] = useState<MeteringRuleModel>();
+    const [stageFormData,setStageFormData] = useState<MeteringRuleStepsModel[]>([]);
+    /** 表格引用对象,刷新表格使用   */
+    const actionRef = useRef<ActionType>();
+    const ruleActionRef = useRef<ActionType>();
+    const formRef = useRef<FormInstance<any>>();
+    const toolRuleFormRef = useRef<FormInstance<any>>();
+    const productFormRef = useRef<FormInstance<any>>();
+    const { fetchDict } = useModel('dict');
+    const [editRuleNo, setEditRuleNo] = useState<any>();
+    const [stageConfigKey, setStageConfigKey] = useState<any>();
+    // 页面数据
+    var formDataList = new Array<MeteringRuleModel>;
+
+    // 默认输出源
+    const [inOrOutKey,setInOrOutKey] = useState<any>();
+    // 默认输出源
+    const [productKey,setProductKey] = useState<any>();
+
+    useEffect(() => {
+      }, []);
+    
+
+    //关闭窗口刷新父页面
+    const closeAndRefresh = ()=>{
+    actionRef.current?.reloadAndRest?.();
+    }
+
+    // 缓释工具类型修改查询查询
+    const selecReleaseTypeData = async (formdata : MeteringRuleModel) => {
+        const data = await selectMeteringRule(formdata);
+        if (data && data.creditRiskNo) {
+          setStageConfigKey(data.creditRiskNo);
+          const resData = await getMeteringRuleStepsList({
+              calcIndex: "",
+              startDate: "",
+              endDate: "",
+              term: "",
+              dataDate: "",
+              creditRiskNo: data.creditRiskNo,
+              stepNo: "",
+              stepName: "",
+              stepType: "",
+              stepIndex: "",
+              stepRule: "",
+              stepIns: [],
+              stepOuts: []
+          })
+          setStageFormData(resData);
+          formRef.current?.setFieldsValue(data);
+        }
+       
+    }
+  
+    // 缓释工具规则修改查询查询
+    const selectReleaseRuleData = async (formdata : MeteringRuleStepsModel) => {
+        const data = await selectMeteringRuleSteps(formdata);
+        toolRuleFormRef.current?.setFieldsValue({...formdata});
+    }
+  
+      // 阶段删除
+      const delReleaseTypeRows =async(record:any)=>{
+         baseFun.confirm('请确实是否继续操作',async() =>{
+          await deleteMeteringRule(record);
+          closeAndRefresh();
+         });
+         
+       }
+  
+    // 步骤删除
+    const delReleaseRuleRows =async(record:any)=>{
+        baseFun.confirm('确认删除?',async() =>{
+         await deleteMeteringRuleSteps(record.detailRuleNo);
+         baseFun.info("删除成功");
+         closeAndRefresh();
+        });
+        
+    }
+
+  // 插入或者更新数据
+  const handleReleaseTypeSave = async(data: MeteringRuleModel,) => {
+    
+    if (editType == 'update' ) {
+      await updateMeteringRule(data);
+      if (stageFormData.length>=1) {
+       // 规则新增
+       await createMeteringRuleSteps(stageFormData);
+
+      }
+      closeAndRefresh();
+   } else if (editType == 'create' ) {
+     await createMeteringRule(data);
+     // 规则新增
+     await createMeteringRuleSteps(stageFormData);
+
+     closeAndRefresh();
+   }
+   setDetailVisible(false);
+  }
+
+  // 插入或者更新数据
+  const handleReleaseRuleSave = async(data: MeteringRuleStepsModel,) => {
+
+    data.creditRiskNo = stageConfigKey;
+
+    if (toolRuleEditType == 'update' ) {
+      if (stageFormData.length>=1) {
+        const arr = stageFormData.filter((item)=> item.creditRiskNo !== data.creditRiskNo);
+        arr.push(data);
+        setStageFormData([...arr]);
+      } else {
+        stageFormData[0]={...data};
+        setStageFormData([...stageFormData]);
+      }
+      //  await updateStageConfigRule(data);
+      //  closeAndRefreshRule();
+    } else if (toolRuleEditType == 'create' ) {
+      stageFormData.push(data);
+      setStageFormData([...stageFormData]);
+    }
+    setStageConfigRuleVisible(false);
+  }
+
+
+  // 清除增加项
+  const removeRow = (key: any) => {
+    setStageFormData([...stageFormData.filter((item) => item.stepNo !== key)]);
+  };
+     
+    // 阶段信息页面展示元素
+    const columns: ProColumns<MeteringRuleModel>[] = [
+        {
+            title: '计算实例号',
+            dataIndex: 'calcindex',
+            search: false,
+            hideInTable: true,
+            width:150,
+            ellipsis:true
+        },
+        {
+            title: '起始数据日期',
+            dataIndex: 'startDate',
+            search: false,
+            hideInTable: true,
+            width:150,
+            ellipsis:true
+        },
+        {
+            title: '截止数据日期',
+            dataIndex: 'endDate',
+            search: false,
+            hideInTable: true,
+            width:150,
+            ellipsis:true
+        },
+        {
+            title: '年月',
+            dataIndex: 'yearMonth',
+            search: false,
+            hideInTable: true,
+            width:150,
+            ellipsis:true
+        },
+        {
+            title: '数据日期',
+            dataIndex: 'dataDate',
+            search:false,
+            hideInTable: true,
+            width:150,
+            ellipsis:true,
+            valueType: 'date',
+        },
+        {
+            title: '规则编号',
+            dataIndex: 'creditRiskNo',
+            hideInTable: false,
+            width:150,
+            ellipsis:true,
+        },
+        {
+            title: '规则名称', 
+            dataIndex: 'creditRiskName',
+            hideInTable: false,
+            width:150,
+            ellipsis:true,
+        },
+        {
+            title: '所属业务', 
+            dataIndex: 'creditRiskBussinessCode',
+            hideInTable: false,
+            width:150,
+            ellipsis:true,
+        },
+        {
+            title: '默认规则', 
+            dataIndex: 'defaultRule',
+            search:false,
+            hideInTable: true,
+            width:150,
+            ellipsis:true,
+        },
+        {
+            title: '默认输出',
+            dataIndex: 'defaultOut',
+            search: false,
+            hideInTable: true,
+            width:150,
+            ellipsis:true,
+            valueType: 'treeSelect',
+            request: () => fetchDict('org'),
+            fieldProps: {
+              treeDefaultExpandAll: true,
+              treeCheckable:true,
+            },
+        },
+        {
+            title: '规则序号',
+            dataIndex: 'creditRiskIndex',
+            search: false,
+            hideInTable: true,
+            width:150,
+            ellipsis:true
+        },
+        {
+          title: '操作',
+          dataIndex: 'operate',
+          valueType: 'option',
+          render: (_, record) => [
+            <SDOperate
+              key="update"
+              icon={<WomanOutlined />}
+              successMessage=""
+              onClick={
+                ()=>{
+                  setStageConfigKey(record.creditRiskNo);
+                  selecReleaseTypeData(record);
+                  setDetailVisible(true);
+                  setEditType('update')
+               } }
+            >
+              修改
+            </SDOperate>,
+          <SDOperate
+            key="delete"
+            icon={<WomanOutlined />}
+            successMessage=""
+            onClick={()=>{delReleaseTypeRows(record) } }
+          >
+            删除
+          </SDOperate>,
+          <SDOperate
+            key="see"
+            icon={<WomanOutlined />}
+            successMessage=""
+            onClick={()=>{
+              setProductKey(record.creditRiskNo);
+                setProductListVisible(true);
+            } }
+          >
+            产品列表
+          </SDOperate>,
+          <SDOperate
+          key="see"
+          icon={<WomanOutlined />}
+          successMessage=""
+          onClick={()=>{
+            //selecReleaseTypeData(record);
+            setInOrOutKey(record.defaultOut);
+            setInOrOutListVisible(true);
+            //setEditType('display')
+          } }
+        >
+          输入输出列表
+        </SDOperate>,
+          ],
+        },
+];
+
+
+    // 阶段步骤列表信息页面展示元素
+    const stageListColumns: ProColumns<MeteringRuleStepsModel>[] = [
+        {
+            title: '计算实例号',
+            dataIndex: 'calcindex',
+            search: false,
+            hideInTable: true,
+            width:150,
+            ellipsis:true
+        },
+        {
+            title: '起始数据日期',
+            dataIndex: 'startDate',
+            search: false,
+            hideInTable: true,
+            width:150,
+            ellipsis:true
+        },
+        {
+            title: '截止数据日期',
+            dataIndex: 'endDate',
+            search: false,
+            hideInTable: true,
+            width:150,
+            ellipsis:true
+        },
+        {
+            title: '年月',
+            dataIndex: 'yearMonth',
+            search: false,
+            hideInTable: true,
+            width:150,
+            ellipsis:true
+        },
+        {
+            title: '数据日期',
+            dataIndex: 'dataDate',
+            search: false,
+            hideInTable: true,
+            width:150,
+            ellipsis:true,
+            valueType: 'date',
+        },
+        {
+            title: '步骤序号',
+            dataIndex: 'stepIndex',
+            search:false,
+            hideInTable: false,
+            width:150,
+            ellipsis:true,
+        },
+        {
+            title: '步骤编号',
+            dataIndex: 'stepNo',
+            search: false,
+            hideInTable: false,
+            width:150,
+            ellipsis:true
+        },
+        {
+            title: '步骤名称',
+            dataIndex: 'stepName',
+            search: false,
+            hideInTable: false,
+            width:150,
+            ellipsis:true
+        },
+        {
+            title: '步骤类型(预留)',
+            dataIndex: 'stepType',
+            search: false,
+            hideInTable: false,
+            width:150,
+            ellipsis:true,
+            valueType: 'treeSelect',
+            request: () => fetchDict('STEP_TYPE'),
+            fieldProps: {
+              treeDefaultExpandAll: true,
+              treeCheckable:true,
+            },
+        },
+        {
+            title: '输入数据源', 
+            dataIndex: 'stepIns',
+            search:false,
+            hideInTable: false,
+            width:150,
+            ellipsis:true,
+            valueType: 'treeSelect',
+            request: () => fetchDict('org'),
+            fieldProps: {
+              treeDefaultExpandAll: true,
+              treeCheckable:true,
+            },
+        },
+        {
+            title: '输出数据源', 
+            dataIndex: 'stepOuts',
+            hideInTable: false,
+            width:150,
+            ellipsis:true,
+            valueType: 'treeSelect',
+            request: () => fetchDict('org'),
+            fieldProps: {
+              treeDefaultExpandAll: true,
+              treeCheckable:true,
+            },
+        },
+        {
+          title: '操作',
+          dataIndex: 'operate',
+          valueType: 'option',
+          render: (_, record) => [
+            <SDOperate
+              key="update"
+              icon={<WomanOutlined />}
+              successMessage=""
+              onClick={
+                ()=>{ 
+                  selectReleaseRuleData(record);
+                  setStageConfigRuleVisible(true);
+                  setToolRuleEditType('update');
+               } }
+            >
+              修改
+            </SDOperate>,
+          <SDOperate
+            key="delete"
+            icon={<WomanOutlined />}
+            successMessage=""
+            onClick={()=>{
+                removeRow(record.stepNo);
+            } }
+          >
+            删除
+          </SDOperate>,
+           
+          ],
+        },
+];
+
+
+const productColumns: ProColumns<productListModel>[] = [
+
+    { title : '产品代码',
+    dataIndex : 'productNo',
+    width : 150
+    },
+    
+    { title : '产品名称',
+    dataIndex : 'productName',
+    width : 150
+    },
+    
+    { title : '产品大类',
+    dataIndex : 'productType',
+    valueType:"select",
+    request:()=>fetchDict(''),
+    width : 150
+    },
+    { title : '来源系统',
+    dataIndex : 'productFromSystem',
+    search:false,
+    hideInTable:false,
+    width : 150
+    },
+    {
+        title: '操作',
+        dataIndex: 'operate',
+        valueType: 'option',
+        render: (_, record) => [
+        <SDOperate
+        key="roleCfg"
+        icon={<WomanOutlined />}
+        successMessage=""
+        onClick={async ()=>{ 
+        // disdata(record);
+        const sd = await product_modifyone1(record.productNo);
+        productFormRef.current?.setFieldsValue(sd);
+        setTransferVisible(true);
+         closeAndRefresh();
+        // setVisible(true);
+        // setEditType('display')
+         } }
+      >
+        查看
+      </SDOperate>,
+        ],
+      },
+]
+
+const inOrOutColumns: ProColumns<inOrOutDataListModel>[] = [
+
+    { title : '数据源代码',
+    dataIndex : 'dataClassCode',
+    width : 150
+    },
+    
+    { title : '数据源名称',
+    dataIndex : 'dataClassName',
+    width : 150
+    },
+
+    { title : '数据库表英文名',
+      dataIndex : 'tableName',
+      width : 150
+    },
+    
+]
+
+const columns1: ProColumns<rwaCalcConfProductrulesModel>[] = [
+  { title : '计算实例号',
+  dataIndex : 'calcindex',
+  search:false,
+  hideInTable:true,
+  width : 150
+  },
+  
+  { title : '起始数据日期',
+  dataIndex : 'sdate',
+  search:false,
+  hideInTable:true,
+  width : 150
+  },
+  
+  { title : '截止数据日期',
+  dataIndex : 'edate',
+  search:false,
+  hideInTable:true,
+  width : 150
+  },
+  
+  { title : '年月',
+  dataIndex : 'term',
+  search:false,
+  hideInTable:true,
+  width : 150
+  },
+  
+  { title : '数据日期',
+  dataIndex : 'dataDate',
+  search:false,
+  hideInTable:true,
+  width : 150
+  },
+  
+  { title : '产品编号',
+  dataIndex : 'productNo',
+  search:false,
+  hideInTable:true,
+  width : 150
+  },
+  
+  { title : '规则编号',
+  dataIndex : 'ruleCode',
+  width : 150
+  },
+  
+  { title : '规则名称',
+  dataIndex : 'ruleName',
+  width : 150
+  },
+
+  { title : '数据类型',
+  dataIndex : 'dataType',
+  width : 150
+  },
+  
+  { title : '对应科目号',
+  dataIndex : 'ruleSubject',
+  width : 150
+  },
+  
+  { title : '输入数据源',
+  dataIndex : 'ruleIn',
+  width : 150
+  },
+  
+  { title : '输出数据源',
+  dataIndex : 'ruleOut',
+  width : 150
+  },
+  
+  { title : '科目取数规则',
+  dataIndex : 'ruleGetdata',
+  width : 150
+  },
+  { title : '规则序号',
+  dataIndex : 'ruleIndex',
+  width : 150
+  },
+]
+
+return (
+    <SDPage>
+    <SDTable
+     title="查询表格"
+     rowKey="regularRrcsRuleNo"
+     request={async (formdata:MeteringRuleModel) =>{
+       const formDatas = await getDataList(formdata);
+       // 解构数组(导出用)
+       formDataList=[...formDatas];
+       return {data: formDatas}
+     }  }
+     columns={columns}
+     toolBarRender={(_, { selectedRows }) => [
+      <SDButton
+        key="create"
+        icon={<PlusSquareTwoTone/>}
+        successMessage=''
+        onClick={() => {
+          setDetailVisible(true);
+          setEditType('create');
+          setStageFormData([]);
+          setStageConfigKey('');
+        }}
+      >
+        新增
+      </SDButton>,
+    ]}
+     actionRef={actionRef}
+     formRef={formRef}
+     setDetailVisible={() => {setDetailVisible(true)}}
+     setEditType={setEditType}
+     setCurrentRow={setCurrentRow}
+     />
+
+    {detailVisible && (
+    <SDModalForm          
+      editType={editType}
+      params={currentRow}
+      visible={detailVisible}
+      onVisibleChange={() => {
+        setDetailVisible(false);
+      }}
+      onValuesChange={(changevalue,values)=>{
+        setStageConfigKey(formRef.current?.getFieldValue('creditRiskNo'));
+      }}
+      footer={[
+      <SDSubmitButton  editType={editType}   formRef={formRef} doSubmit={handleReleaseTypeSave} >保存</SDSubmitButton>,
+      <SDButton
+        key="closeUpdate"
+        successMessage=''
+        onClick={() => {
+            setDetailVisible(false);
+        }}>关闭</SDButton>
+      ]}
+      tableRef={actionRef}
+      formRef={formRef}
+    >
+        
+        <SDAreaTtile title='规则信息'/>
+        <SDFormText name="creditRiskNo" bgValidater={(creditRiskNo: string) => isNotExist(
+          {
+              calcIndex: "",
+              startDate: "",
+              endDate: "",
+              term: "",
+              dataDate: "",
+              creditRiskNo: creditRiskNo,
+              creditRiskName: "",
+              creditRiskBussinessCode: "",
+              defaultRule: "",
+              defaultOut: "",
+              creditRiskIndex: ""
+          }
+        )} readonlyCond="update" rules={[{max:50}]} required={true} label="规则编号"/>
+        <SDFormText name="creditRiskName" required={true}  rules={[{max:100,message:'最多100个汉字'},{validator:validateFun.chineseRex}]} label="规则名称"/>
+        <SDFormDict dictKey='org' required={true} name="creditRiskBussinessCode" label="所属业务" />
+        <SDFormDict dictKey='org' required={true} name="defaultOut" label="默认输出数据源"/>
+        <SDFormText name="creditRiskIndex" required={true} label="规则序号"/>
+        <SDFormText name="defaultRule" required={true} type="textarea"  label="默认规则"/>
+         <SDLayout>
+        <SDAreaTtile title='规则步骤列表'/>
+        <ProTable
+          search={false}
+          rowKey="detailRuleNo"
+          columns={stageListColumns}
+          dataSource={stageFormData}
+          toolBarRender={(_, { selectedRows }) =>
+            editType == 'update' || editType == 'create'? [
+             <SDButton
+              key="create"
+              icon={<PlusSquareTwoTone />}
+              successMessage=''
+              onClick={(record) => {
+                setStageConfigRuleVisible(true);
+                setToolRuleEditType('create');
+              }}
+            >
+              新建
+            </SDButton>,
+            ]:[]}
+          actionRef={ruleActionRef}
+          formRef={toolRuleFormRef}
+
+    />
+    </SDLayout>
+
+    {StageConfigRuleVisible && (
+        <SDModalForm 
+          visible={StageConfigRuleVisible}
+          onVisibleChange={() => {setStageConfigRuleVisible(false)}}
+          initialValues={{
+            detailRuleNo:editRuleNo
+          }}
+          editType={toolRuleEditType}
+          formRef={toolRuleFormRef}
+          footer={[
+            <SDSubmitButton  editType={toolRuleEditType}   formRef={toolRuleFormRef} doSubmit={handleReleaseRuleSave} >保存</SDSubmitButton>,
+            <SDButton
+              key="closeUpdate"
+              successMessage=''
+              onClick={() => {
+                setStageConfigRuleVisible(false);
+              }}>关闭</SDButton>
+            ]}
+        >
+        <SDAreaTtile title='步骤信息'/>
+        <SDFormText name="stepNo" max={30} rules={[{validator: validateFun.zinteger,message:'请输入数字类型'},]} label="步骤编号"/>
+        <SDFormText name="stepName" max={30} rules={[{max:100,message:'最多100个汉字'},{validator:validateFun.chineseRex}]} label="步骤名称" />
+        <SDFormDict dictKey='STEP_TYPE'  name="stepType"  label="步骤类型"/>
+        <SDFormDict dictKey='org' multiple={true} name="stepIns"  label="输入数据源" />
+        <SDFormDict dictKey='org' multiple={true}  name="stepOuts"  label="输出数据源"/>
+        <SDFormText type="textarea" name="stepRule" label="步骤规则"/>
+        
+
+        </SDModalForm>
+    )}
+    
+    </SDModalForm>
+  )}
+
+{productListVisible && (
+         <SDModalForm 
+         visible={productListVisible} 
+         onVisibleChange={() => {setProductListVisible(false)}
+         }>
+        <SDTable
+        title="产品列表"
+        rowKey="productNo"
+        search={false}
+        request={async () =>{
+          const formDatas = await getProductDataList(productKey);
+          return {data: formDatas}
+        }  }
+        columns={productColumns}
+        setDetailVisible={() => {setProductListVisible(true)}}
+        />
+        </SDModalForm>
+    )}
+{inOrOutListVisible && (
+    <SDModalForm 
+    visible={inOrOutListVisible} 
+    onVisibleChange={() => {setInOrOutListVisible(false)}
+    }>
+   <SDLayout>
+   <SDTable
+   title="输入数据源"
+   rowKey="productNo"
+   search={false}
+   request={async () =>{
+     const formDatas = await getInDataList(inOrOutKey);
+     return {data: formDatas}
+   }  }
+   columns={inOrOutColumns}
+   setDetailVisible={() => {setInOrOutListVisible(true)}}
+   />
+   </SDLayout>
+
+   
+   <SDLayout>
+   <SDTable
+   title="输出数据源"
+   rowKey="productNo"
+   search={false}
+   request={async () =>{
+     const formDatas = await getOutDataList(inOrOutKey);
+     return {data: formDatas}
+   }  }
+   columns={inOrOutColumns}
+   setDetailVisible={() => {setInOrOutListVisible(true)}}
+   />
+   </SDLayout>
+   </SDModalForm>
+)
+}
+
+
+
+{transferVisible  &&(
+   <SDModalForm title={''} 
+   visible={transferVisible} 
+   editType={editType}
+   formRef={productFormRef}
+   onVisibleChange={() => {  setTransferVisible(false);  }} 
+   >
+    <span style={{display:'none'}}>
+   <SDFormText name="calcindex"   label="计算实例号"  />
+   <SDFormText name="sdate"   label="起始数据日期"  />
+   <SDFormText name="edate"   label="截止数据日期"  />
+   <SDFormText name="term"   label="年月"  />
+   <SDFormText name="dataDate"   label="数据日期"  />
+   </span>
+   <SDFormText name="productNo"   label="产品代码"  />
+   <SDFormText name="productName"   label="产品名称"  />
+   <SDFormText name="productType"   label="产品大类"  />
+   <SDFormText name="productIndex"   label="产品序号"  />
+   <SDFormText name="productStageId"   label="所属阶段"  />
+   <SDFormText name="productFromSystem"   label="来源系统"  />
+   <SDFormText name="defaultOut"   label="默认输出数据源"  />
+   <SDFormText name="productBussinessCode"   label="所属业务"  />
+   <SDFormText name="defaultGetdatarule"   label="默认取数逻辑"  />
+     <SDAreaTtile title='科目取数规则列表' />
+     <SDLayout>
+       <ProTable
+           rowKey="ruleCode"
+           search={false} 
+           request={(async ()=>{
+               const formDatas = await product_modifyone2(productKey)
+               return {data:formDatas}
+           })
+           }
+           columns={columns1}
+       />
+     </SDLayout>
+     </SDModalForm>
+)}
+
+
+    </SDPage>
+    
+);
+}
+export default creditriskmeteringrule;

+ 1 - 1
Procedure/frontend/projectb/src/pages/product/rwa_calc_config_004rwa/stageinformation.tsx

@@ -130,7 +130,7 @@ const stageinformation : React.FC<widowProps> = (prop:widowProps) => {
     data.stepStageId = stageConfigKey;
 
     if (toolRuleEditType == 'update' ) {
-      if (stageFormData.length>1) {
+      if (stageFormData.length>=1) {
         const arr = stageFormData.filter((item)=> item.stepId !== data.stepId);
         arr.push(data);
         setStageFormData([...arr]);

+ 165 - 0
Procedure/frontend/projectb/src/services/rwa/product/rwa_calc_config_004rwa/creditriskmeteringrule.ts

@@ -0,0 +1,165 @@
+import type { BasePageModel, TableData } from '@sundata/ui-frame';
+import { baseFun } from '@sundata/ui-frame';
+// 阶段定义配置表
+export type MeteringRuleModel = {
+    // 计算实例号
+    calcIndex: string;
+    // 起始数据日期
+    startDate: string;
+    // 截止数据日期
+    endDate: string;
+    // 年月
+    term: string;
+    // 数据日期
+    dataDate: string;
+    // 规则编号
+    creditRiskNo: string;
+    // 规则名称
+    creditRiskName: string;
+    // 所属业务
+    creditRiskBussinessCode: string;
+    // 默认规则
+    defaultRule: string;
+    // 默认输出
+    defaultOut: string;   
+    // 规则序号
+    creditRiskIndex: string;
+  } & BasePageModel;
+
+
+  // 阶段步骤定义表
+  export type MeteringRuleStepsModel = {
+    // 计算实例号
+    calcIndex: string;
+    // 起始数据日期
+    startDate: string;
+    // 截止数据日期
+    endDate: string;
+    // 年月
+    term: string;
+    // 数据日期
+    dataDate: string;
+    // 信用风险rwa计量规则编号
+    creditRiskNo: string;
+    // 步骤编号
+    stepNo: string;
+    // 步骤名称
+    stepName: string;
+    // 步骤类型(预留)
+    stepType: string;
+    // 步骤序号
+    stepIndex: string;
+    // 步骤规则
+    stepRule: string;
+    // 步骤输入
+    stepIns: string[];
+    // 步骤输出
+    stepOuts: string[];
+  } & BasePageModel;
+
+
+export type productListModel={
+
+//产品编号
+productNo : string;
+//产品名称
+productName : String;
+//产品分类
+productType : String;
+//对应业务
+productBussinessCode : String;
+//来源系统
+productFromSystem : String;
+}
+
+
+export type inOrOutDataListModel={
+
+  // 数据源代码
+  dataClassCode : string;
+  // 数据源名称
+  dataClassName : String;
+  // 数据库表英文名
+  tableName : String;
+
+  }
+
+
+
+  /** 获取页面初始化及条件查询 POST*/
+  export async function getDataList(body:MeteringRuleModel) {
+    return baseFun.request<MeteringRuleModel[]>('/api/product/rwa/rwacalcconfig004rwa/CreditRiskMeteringRuleAction/getDataList.do',{data: body});
+}
+
+  /** 新建数据 POST*/
+export async function createMeteringRule(body: MeteringRuleModel) {
+    return baseFun.request<void>('/api/product/rwa/rwacalcconfig004rwa/CreditRiskMeteringRuleAction/createMeteringRule.do',{data: body});
+  }
+
+  /** 更新数据 POST*/
+export async function updateMeteringRule(body: MeteringRuleModel) {
+    return baseFun.request<void>('/api/product/rwa/rwacalcconfig004rwa/CreditRiskMeteringRuleAction/updateMeteringRule.do',{data: body});
+  }
+
+  /** 删除当前行数据 POST*/
+export async function deleteMeteringRule(body: MeteringRuleModel) {
+    return baseFun.request<void>('/api/product/rwa/rwacalcconfig004rwa/CreditRiskMeteringRuleAction/deleteMeteringRule.do',{data: body});
+  }
+
+  /** 查询当前行详细数据 POST*/
+export async function selectMeteringRule(body: any) {
+    return baseFun.request<MeteringRuleModel>('/api/product/rwa/rwacalcconfig004rwa/CreditRiskMeteringRuleAction/selectMeteringRule.do',{data: body});
+  }
+
+
+
+  /** 获取页面初始化缓释品规则列表 POST*/
+  export async function getMeteringRuleStepsList(body:MeteringRuleStepsModel) {
+    return baseFun.request<MeteringRuleStepsModel[]>('/api/product/rwa/rwacalcconfig004rwa/CreditRiskMeteringRuleAction/getMeteringRuleStepsList.do',{data: body});
+}
+
+
+  /** 新建缓释品规则数据 POST*/
+  export async function createMeteringRuleSteps(body: MeteringRuleStepsModel[]) {
+    return baseFun.request<void>('/api/product/rwa/rwacalcconfig004rwa/CreditRiskMeteringRuleAction/createMeteringRuleSteps.do',{data: body});
+  }
+
+  /** 更新缓释品规则数据 POST*/
+export async function updateMeteringRuleSteps(body: MeteringRuleStepsModel) {
+    return baseFun.request<void>('/api/product/rwa/rwacalcconfig004rwa/CreditRiskMeteringRuleAction/updateMeteringRuleSteps.do',{data: body});
+  }
+
+  /** 删除当前行缓释品规则数据 POST*/
+export async function deleteMeteringRuleSteps(detailRuleNo: string) {
+    return baseFun.request<void>('/api/product/rwa/rwacalcconfig004rwa/CreditRiskMeteringRuleAction/deleteMeteringRuleSteps.do?detailRuleNo='+detailRuleNo);
+  }
+
+  /** 查询当前行缓释品规则详细数据 POST*/
+export async function selectMeteringRuleSteps(body: any) {
+    return baseFun.request<MeteringRuleStepsModel>('/api/product/rwa/rwacalcconfig004rwa/CreditRiskMeteringRuleAction/selectMeteringRuleSteps.do',{data: body});
+  }
+
+/** 唯一性校验 POST */
+export async function isNotExist(body: MeteringRuleModel) {
+  return baseFun.request<any>('/api/product/rwa/rwacalcconfig004rwa/CreditRiskMeteringRuleAction/isNotExist.do', {
+    data: body,
+  });
+}
+
+
+
+/** 获取页面初始化及条件查询 POST*/
+export async function getProductDataList(creditRiskNo:any) {
+  return baseFun.request<productListModel[]>('/api/product/rwa/rwacalcconfig004rwa/CreditRiskMeteringRuleAction/getProductDataList.do',{params:{creditRiskNo} });
+}
+
+
+/** 获取页面初始化及条件查询 POST*/
+export async function getInDataList(dataClassCode:any) {
+    return baseFun.request<inOrOutDataListModel[]>('/api/product/rwa/rwacalcconfig004rwa/CreditRiskMeteringRuleAction/getInDataList.do',{params: {dataClassCode}});
+}
+
+/** 获取页面初始化及条件查询 POST*/
+export async function getOutDataList(dataClassCode:any) {
+  return baseFun.request<inOrOutDataListModel[]>('/api/product/rwa/rwacalcconfig004rwa/CreditRiskMeteringRuleAction/getOutDataList.do',{params: {dataClassCode}});
+}