diff --git a/ruoyi-admin/src/main/resources/db/changelog/changes/20260812-add-model-output-black-cust-branch-bp.sql b/ruoyi-admin/src/main/resources/db/changelog/changes/20260812-add-model-output-black-cust-branch-bp.sql new file mode 100644 index 0000000..f1c430b --- /dev/null +++ b/ruoyi-admin/src/main/resources/db/changelog/changes/20260812-add-model-output-black-cust-branch-bp.sql @@ -0,0 +1,11 @@ +--liquibase formatted sql + +--changeset loan-pricing:20260812-01-add-retail-black-cust-branch-bp runInTransaction:false +ALTER TABLE `model_retail_output_fields` + ADD COLUMN `black_cust` varchar(100) DEFAULT NULL COMMENT '黑名单客户' AFTER `grey_cust`, + ADD COLUMN `branch_bp` varchar(100) DEFAULT NULL COMMENT '行社下调BP' AFTER `reference_rate`; + +--changeset loan-pricing:20260812-02-add-corp-black-cust-branch-bp runInTransaction:false +ALTER TABLE `model_corp_output_fields` + ADD COLUMN `black_cust` varchar(100) DEFAULT NULL COMMENT '黑名单客户' AFTER `grey_cust`, + ADD COLUMN `branch_bp` varchar(100) DEFAULT NULL COMMENT '行社下调BP' AFTER `reference_rate`; diff --git a/ruoyi-loan-pricing/src/main/java/com/ruoyi/loanpricing/domain/dto/ModelInvokeDTO.java b/ruoyi-loan-pricing/src/main/java/com/ruoyi/loanpricing/domain/dto/ModelInvokeDTO.java index ca6a840..a160c00 100644 --- a/ruoyi-loan-pricing/src/main/java/com/ruoyi/loanpricing/domain/dto/ModelInvokeDTO.java +++ b/ruoyi-loan-pricing/src/main/java/com/ruoyi/loanpricing/domain/dto/ModelInvokeDTO.java @@ -130,7 +130,7 @@ public class ModelInvokeDTO { private String loanPurpose; /** - * 是否有经营佐证(非必填) + * 是否有营业执照(非必填) * 可选值:0/1 */ private String bizProof; diff --git a/ruoyi-loan-pricing/src/main/java/com/ruoyi/loanpricing/domain/dto/PersonalLoanPricingCreateDTO.java b/ruoyi-loan-pricing/src/main/java/com/ruoyi/loanpricing/domain/dto/PersonalLoanPricingCreateDTO.java index c993bb7..7227ed7 100644 --- a/ruoyi-loan-pricing/src/main/java/com/ruoyi/loanpricing/domain/dto/PersonalLoanPricingCreateDTO.java +++ b/ruoyi-loan-pricing/src/main/java/com/ruoyi/loanpricing/domain/dto/PersonalLoanPricingCreateDTO.java @@ -53,6 +53,10 @@ public class PersonalLoanPricingCreateDTO implements Serializable { @NotBlank(message = "借款期限不能为空") private String loanTerm; + @Schema(description = "是否有营业执照", example = "0", allowableValues = {"0", "1"}) + @Pattern(regexp = "^[01]$", message = "是否有营业执照必须是:0或1") + private String bizProof; + @Schema(description = "循环功能", example = "0") private String loanLoop; diff --git a/ruoyi-loan-pricing/src/main/java/com/ruoyi/loanpricing/domain/entity/LoanPricingWorkflow.java b/ruoyi-loan-pricing/src/main/java/com/ruoyi/loanpricing/domain/entity/LoanPricingWorkflow.java index 59eec55..019e69a 100644 --- a/ruoyi-loan-pricing/src/main/java/com/ruoyi/loanpricing/domain/entity/LoanPricingWorkflow.java +++ b/ruoyi-loan-pricing/src/main/java/com/ruoyi/loanpricing/domain/entity/LoanPricingWorkflow.java @@ -116,7 +116,7 @@ public class LoanPricingWorkflow implements Serializable /** 余值覆盖: 0/1 */ private String resCover; - /** 是否有经营佐证: true/false */ + /** 是否有营业执照: true/false */ private String bizProof; /** 循环功能: true/false */ diff --git a/ruoyi-loan-pricing/src/main/java/com/ruoyi/loanpricing/domain/entity/ModelCorpOutputFields.java b/ruoyi-loan-pricing/src/main/java/com/ruoyi/loanpricing/domain/entity/ModelCorpOutputFields.java index 48aaca7..0ba1231 100644 --- a/ruoyi-loan-pricing/src/main/java/com/ruoyi/loanpricing/domain/entity/ModelCorpOutputFields.java +++ b/ruoyi-loan-pricing/src/main/java/com/ruoyi/loanpricing/domain/entity/ModelCorpOutputFields.java @@ -106,6 +106,8 @@ public class ModelCorpOutputFields { private String bpCollateral; // 灰名单客户 private String greyCust; + // 黑名单客户 + private String blackCust; // 本金逾期 private String prinOverdue; // 利息逾期 @@ -129,6 +131,8 @@ public class ModelCorpOutputFields { private String finalCalculateRate; // 参考利率 private String referenceRate; + // 行社下调BP + private String branchBp; @TableField(fill = FieldFill.INSERT) private Date createTime; diff --git a/ruoyi-loan-pricing/src/main/java/com/ruoyi/loanpricing/domain/entity/ModelRetailOutputFields.java b/ruoyi-loan-pricing/src/main/java/com/ruoyi/loanpricing/domain/entity/ModelRetailOutputFields.java index f5c5698..2fbbb5f 100644 --- a/ruoyi-loan-pricing/src/main/java/com/ruoyi/loanpricing/domain/entity/ModelRetailOutputFields.java +++ b/ruoyi-loan-pricing/src/main/java/com/ruoyi/loanpricing/domain/entity/ModelRetailOutputFields.java @@ -129,7 +129,7 @@ public class ModelRetailOutputFields { // 贷款用途 private String loanPurpose; - // 是否有经营佐证 + // 是否有营业执照 private String bizProof; // BP_贷款用途 @@ -153,6 +153,9 @@ public class ModelRetailOutputFields { // 灰名单客户 private String greyCust; + // 黑名单客户 + private String blackCust; + // 本金逾期 private String prinOverdue; @@ -190,6 +193,9 @@ public class ModelRetailOutputFields { // 参考利率 private String referenceRate; + // 行社下调BP + private String branchBp; + @TableField(fill = FieldFill.INSERT) private Date createTime; } diff --git a/ruoyi-loan-pricing/src/main/java/com/ruoyi/loanpricing/service/impl/LoanPricingWorkflowServiceImpl.java b/ruoyi-loan-pricing/src/main/java/com/ruoyi/loanpricing/service/impl/LoanPricingWorkflowServiceImpl.java index a1845a5..315c121 100644 --- a/ruoyi-loan-pricing/src/main/java/com/ruoyi/loanpricing/service/impl/LoanPricingWorkflowServiceImpl.java +++ b/ruoyi-loan-pricing/src/main/java/com/ruoyi/loanpricing/service/impl/LoanPricingWorkflowServiceImpl.java @@ -248,6 +248,7 @@ public class LoanPricingWorkflowServiceImpl implements ILoanPricingWorkflowServi .set(LoanPricingWorkflow::getLoanTerm, editingWorkflow.getLoanTerm()) .set(LoanPricingWorkflow::getCollType, editingWorkflow.getCollType()) .set(LoanPricingWorkflow::getCollThirdParty, editingWorkflow.getCollThirdParty()) + .set(LoanPricingWorkflow::getBizProof, editingWorkflow.getBizProof()) .set(LoanPricingWorkflow::getLoanLoop, editingWorkflow.getLoanLoop()) .set(LoanPricingWorkflow::getResCover, editingWorkflow.getResCover()) .set(LoanPricingWorkflow::getRepayMethod, editingWorkflow.getRepayMethod()) diff --git a/ruoyi-loan-pricing/src/main/java/com/ruoyi/loanpricing/util/LoanPricingConverter.java b/ruoyi-loan-pricing/src/main/java/com/ruoyi/loanpricing/util/LoanPricingConverter.java index 284e4d9..781ba8d 100644 --- a/ruoyi-loan-pricing/src/main/java/com/ruoyi/loanpricing/util/LoanPricingConverter.java +++ b/ruoyi-loan-pricing/src/main/java/com/ruoyi/loanpricing/util/LoanPricingConverter.java @@ -35,6 +35,7 @@ public class LoanPricingConverter { entity.setCollType(dto.getCollType()); entity.setCollThirdParty(dto.getCollThirdParty()); // 映射个人特有字段 + entity.setBizProof(dto.getBizProof()); entity.setLoanLoop(dto.getLoanLoop()); return entity; } diff --git a/ruoyi-loan-pricing/src/main/resources/data/corp_output.json b/ruoyi-loan-pricing/src/main/resources/data/corp_output.json index 3c4ef5a..2456c18 100644 --- a/ruoyi-loan-pricing/src/main/resources/data/corp_output.json +++ b/ruoyi-loan-pricing/src/main/resources/data/corp_output.json @@ -20,13 +20,13 @@ "loanAvg": "3000000.00", "derivationRate": "1.8", "totalBpContribution": "12.3", - "midEntConnect": "1", - "midEntEffect": "1", - "midEntInter": "1", - "midEntAccept": "1", - "midEntDiscount": "1", - "midEntEleDdc": "1", - "midEntWaterDdc": "1", + "midEntConnect": "-2", + "midEntEffect": "0", + "midEntInter": "-3", + "midEntAccept": "0", + "midEntDiscount": "-1", + "midEntEleDdc": "0", + "midEntWaterDdc": "-1", "bpMid": "6.8", "payroll": "200", "invLoanAmount": "2500000.00", @@ -45,8 +45,9 @@ "collThirdParty": "0", "bpCollateral": "4.5", "greyCust": "0", + "blackCust": "1", "prinOverdue": "0", - "interestOverdue": "0", + "interestOverdue": "3", "bpGreyOverdue": "0", "totalBpRisk": "1.2", "totalBp": "48.2", @@ -56,7 +57,8 @@ "minRateProduct": "3.10", "smoothRange": "-0.20", "finalCalculateRate": "3.732", - "referenceRate": "3.432" + "referenceRate": "3.432", + "branchBp": "-5" }, "extensionMap": {}, "reasonMessage": "Running successfully", diff --git a/ruoyi-loan-pricing/src/main/resources/data/retail_output.json b/ruoyi-loan-pricing/src/main/resources/data/retail_output.json index 78c4034..d9a8af5 100644 --- a/ruoyi-loan-pricing/src/main/resources/data/retail_output.json +++ b/ruoyi-loan-pricing/src/main/resources/data/retail_output.json @@ -22,18 +22,18 @@ "loanAvg": "100000.00", "derivationRate": "1.2", "totalBpContribution": "88", - "midPerCard": "1000.50", - "midPerPass": "500.00", - "midPerHarvest": "800.20", - "midPerEffect": "是", - "midPerQuickPay": "300.00", - "midPerEleDdc": "150.00", - "midPerWaterDdc": "80.00", - "midPerHuashuDdc": "120.00", - "MidPerGasDdc": "90.00", - "midPerCitizencard": "200.00", - "midPerFinMan": "5000.00", - "midPerEtc": "180.00", + "midPerCard": "-2", + "midPerPass": "0", + "midPerHarvest": "-3", + "midPerEffect": "0", + "midPerQuickPay": "-1", + "midPerEleDdc": "0", + "midPerWaterDdc": "-1", + "midPerHuashuDdc": "0", + "MidPerGasDdc": "-1", + "midPerCitizencard": "0", + "midPerFinMan": "-4", + "midPerEtc": "0", "bpMid": "45", "totalBpRelevance": "90", "applyAmt": "200000.00", @@ -47,6 +47,7 @@ "collThirdParty": "否", "bpCollateral": "0", "greyCust": "否", + "blackCust": "否", "prinOverdue": "否", "interestOverdue": "否", "cardOverdue": "否", @@ -58,7 +59,8 @@ "minRateProduct": "5.50", "smoothRange": "-0.10", "finalCalculateRate": "6.05", - "referenceRate": "5.95" + "referenceRate": "5.95", + "branchBp": "-8" }, "extensionMap": {}, "reasonMessage": "Running successfully", diff --git a/ruoyi-ui/src/views/loanPricing/workflow/components/ModelOutputDisplay.vue b/ruoyi-ui/src/views/loanPricing/workflow/components/ModelOutputDisplay.vue index 65de76d..720ce46 100644 --- a/ruoyi-ui/src/views/loanPricing/workflow/components/ModelOutputDisplay.vue +++ b/ruoyi-ui/src/views/loanPricing/workflow/components/ModelOutputDisplay.vue @@ -15,7 +15,7 @@ {{ formatRate(retailOutput.loanRateHistory) }} {{ formatRate(retailOutput.smoothRange) }} {{ formatRate(retailOutput.finalCalculateRate) }} % - - + {{ formatOutputValue(retailOutput.branchBp) }} {{ formatRate(retailOutput.referenceRate) }} % @@ -89,7 +89,7 @@ {{ formatRate(corpOutput.loanRateHistory) }} {{ formatRate(corpOutput.smoothRange) }} {{ formatRate(corpOutput.finalCalculateRate) }} % - - + {{ formatOutputValue(corpOutput.branchBp) }} {{ formatRate(corpOutput.referenceRate) }} % @@ -196,18 +196,18 @@ export default { retailRelevanceRows() { return [ this.groupedAnalysisRow([ - this.resultItem('中间业务_个人_信用卡', this.formatBoolean(this.retailOutput.midPerCard)), - this.resultItem('中间业务_个人_一码通', this.formatBoolean(this.retailOutput.midPerPass)), - this.resultItem('中间业务_个人_丰收互联', this.formatBoolean(this.retailOutput.midPerHarvest)), - this.resultItem('中间业务_个人_有效客户', this.formatBoolean(this.retailOutput.midPerEffect)), - this.resultItem('中间业务_个人_快捷支付', this.formatBoolean(this.retailOutput.midPerQuickPay)), - this.resultItem('中间业务_个人_电费代扣', this.formatBoolean(this.retailOutput.midPerEleDdc)), - this.resultItem('中间业务_个人_水费代扣', this.formatBoolean(this.retailOutput.midPerWaterDdc)), - this.resultItem('中间业务_个人_华数费代扣', this.formatBoolean(this.retailOutput.midPerHuashuDdc)), - this.resultItem('中间业务_个人_煤气费代扣', this.formatBoolean(this.retailOutput.MidPerGasDdc)), - this.resultItem('中间业务_个人_市民卡', this.formatBoolean(this.retailOutput.midPerCitizencard)), - this.resultItem('中间业务_个人_理财业务', this.formatBoolean(this.retailOutput.midPerFinMan)), - this.resultItem('中间业务_个人_etc', this.formatBoolean(this.retailOutput.midPerEtc)) + this.resultItem('中间业务_个人_信用卡', this.retailOutput.midPerCard), + this.resultItem('中间业务_个人_一码通', this.retailOutput.midPerPass), + this.resultItem('中间业务_个人_丰收互联', this.retailOutput.midPerHarvest), + this.resultItem('中间业务_个人_有效客户', this.retailOutput.midPerEffect), + this.resultItem('中间业务_个人_快捷支付', this.retailOutput.midPerQuickPay), + this.resultItem('中间业务_个人_电费代扣', this.retailOutput.midPerEleDdc), + this.resultItem('中间业务_个人_水费代扣', this.retailOutput.midPerWaterDdc), + this.resultItem('中间业务_个人_华数费代扣', this.retailOutput.midPerHuashuDdc), + this.resultItem('中间业务_个人_煤气费代扣', this.retailOutput.midPerGasDdc), + this.resultItem('中间业务_个人_市民卡', this.retailOutput.midPerCitizencard), + this.resultItem('中间业务_个人_理财业务', this.retailOutput.midPerFinMan), + this.resultItem('中间业务_个人_etc', this.retailOutput.midPerEtc) ], 'BP_中间业务', this.retailOutput.bpMid), this.totalRow('TOTAL_BP_关联度', this.retailOutput.totalBpRelevance) ] @@ -217,7 +217,7 @@ export default { this.analysisRow('申请金额', this.retailOutput.applyAmt, 'BP_贷款额度', this.retailOutput.bpLoanAmount), this.groupedAnalysisRow([ this.resultItem('贷款用途', this.formatLoanPurpose(this.retailOutput.loanPurpose)), - this.resultItem('是否有经营佐证', this.formatBoolean(this.retailOutput.bizProof)) + this.resultItem('营业执照', this.formatBoolean(this.retailOutput.bizProof)) ], 'BP_贷款用途', this.retailOutput.bpLoanUse), this.analysisRow('循环功能', this.formatBoolean(this.retailOutput.loanLoop), 'BP_循环功能', this.retailOutput.bpLoanLoop), this.groupedAnalysisRow([ @@ -226,6 +226,7 @@ export default { ], 'BP_抵押物', this.retailOutput.bpCollateral), this.groupedAnalysisRow([ this.resultItem('灰名单客户', this.formatBoolean(this.retailOutput.greyCust)), + this.resultItem('黑名单客户', this.formatBoolean(this.retailOutput.blackCust)), this.resultItem('本金逾期', this.formatBoolean(this.retailOutput.prinOverdue)), this.resultItem('利息逾期', this.formatBoolean(this.retailOutput.interestOverdue)), this.resultItem('信用卡逾期', this.formatBoolean(this.retailOutput.cardOverdue)) @@ -253,13 +254,13 @@ export default { corporateRelevanceRows() { return [ this.groupedAnalysisRow([ - this.resultItem('中间业务_企业_企业互联', this.formatBoolean(this.corpOutput.midEntConnect)), - this.resultItem('中间业务_企业_有效价值客户', this.formatBoolean(this.corpOutput.midEntEffect)), - this.resultItem('中间业务_企业_国际业务', this.formatBoolean(this.corpOutput.midEntInter)), - this.resultItem('中间业务_企业_承兑', this.formatBoolean(this.corpOutput.midEntAccept)), - this.resultItem('中间业务_企业_贴现', this.formatBoolean(this.corpOutput.midEntDiscount)), - this.resultItem('中间业务_企业_电费代扣', this.formatBoolean(this.corpOutput.midEntEleDdc)), - this.resultItem('中间业务_企业_水费代扣', this.formatBoolean(this.corpOutput.midEntWaterDdc)) + this.resultItem('中间业务_企业_企业互联', this.corpOutput.midEntConnect), + this.resultItem('中间业务_企业_有效价值客户', this.corpOutput.midEntEffect), + this.resultItem('中间业务_企业_国际业务', this.corpOutput.midEntInter), + this.resultItem('中间业务_企业_承兑', this.corpOutput.midEntAccept), + this.resultItem('中间业务_企业_贴现', this.corpOutput.midEntDiscount), + this.resultItem('中间业务_企业_电费代扣', this.corpOutput.midEntEleDdc), + this.resultItem('中间业务_企业_水费代扣', this.corpOutput.midEntWaterDdc) ], 'BP_中间业务', this.corpOutput.bpMid, false, '中间业务'), this.groupedAnalysisRow([ this.resultItem('代发工资户数', this.corpOutput.payroll), @@ -285,8 +286,9 @@ export default { ], 'BP_抵押物', this.corpOutput.bpCollateral), this.groupedAnalysisRow([ this.resultItem('灰名单客户', this.formatBoolean(this.corpOutput.greyCust)), + this.resultItem('黑名单客户', this.formatBoolean(this.corpOutput.blackCust)), this.resultItem('本金逾期', this.formatBoolean(this.corpOutput.prinOverdue)), - this.resultItem('利息逾期', this.formatBoolean(this.corpOutput.interestOverdue)) + this.resultItem('利息逾期', this.corpOutput.interestOverdue) ], 'BP_灰名单与逾期', this.corpOutput.bpGreyOverdue), this.totalRow('TOTAL_BP_风险度', this.corpOutput.totalBpRisk) ] diff --git a/ruoyi-ui/src/views/loanPricing/workflow/components/PersonalCreateDialog.vue b/ruoyi-ui/src/views/loanPricing/workflow/components/PersonalCreateDialog.vue index 7bed042..277dbea 100644 --- a/ruoyi-ui/src/views/loanPricing/workflow/components/PersonalCreateDialog.vue +++ b/ruoyi-ui/src/views/loanPricing/workflow/components/PersonalCreateDialog.vue @@ -77,6 +77,11 @@ + + + + + @@ -240,6 +245,7 @@ export default { loanTerm: undefined, businessType: undefined, loanRateHistory: undefined, + bizProof: false, loanLoop: false, collType: undefined, collateralNature: undefined, @@ -394,6 +400,7 @@ export default { loanTerm: this.editData.loanTerm, businessType: this.editData.businessType, loanRateHistory: this.editData.loanRateHistory, + bizProof: this.isOne(this.editData.bizProof), loanLoop: this.isOne(this.editData.loanLoop), collType: this.editData.guarType === '质押' ? this.editData.collType : undefined, collateralNature: undefined, @@ -414,6 +421,7 @@ export default { loanTerm: undefined, businessType: undefined, loanRateHistory: undefined, + bizProof: false, loanLoop: false, collType: undefined, collateralNature: undefined, @@ -533,6 +541,7 @@ export default { // 转换开关值为字符串 const data = { ...this.form, + bizProof: this.form.bizProof ? '1' : '0', loanLoop: this.form.loanLoop ? '1' : '0' } if (this.isMortgage) { diff --git a/ruoyi-ui/src/views/loanPricing/workflow/components/PersonalWorkflowDetail.vue b/ruoyi-ui/src/views/loanPricing/workflow/components/PersonalWorkflowDetail.vue index 6efa1be..b212247 100644 --- a/ruoyi-ui/src/views/loanPricing/workflow/components/PersonalWorkflowDetail.vue +++ b/ruoyi-ui/src/views/loanPricing/workflow/components/PersonalWorkflowDetail.vue @@ -83,7 +83,7 @@ {{ detailData.businessType || '-' }} {{ formatRate(detailData.loanRateHistory) }} {{ detailData.loanTerm || '-' }} - {{ + {{ formatBoolean(detailData.bizProof) }}