From a8ed8472f311f81502c06d1a62db29a3f9dbc372 Mon Sep 17 00:00:00 2001
From: wkc <978997012@qq.com>
Date: Fri, 14 Aug 2026 15:51:12 +0800
Subject: [PATCH] =?UTF-8?q?=E8=B0=83=E6=95=B4=E5=AF=B9=E7=A7=81=E5=AF=B9?=
=?UTF-8?q?=E5=85=AC=E6=A8=A1=E5=9E=8B=E5=AD=97=E6=AE=B5=E5=8F=8A=E5=B1=95?=
=?UTF-8?q?=E7=A4=BA?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
...-add-model-output-black-cust-branch-bp.sql | 11 +++++
.../domain/dto/ModelInvokeDTO.java | 2 +-
.../dto/PersonalLoanPricingCreateDTO.java | 4 ++
.../domain/entity/LoanPricingWorkflow.java | 2 +-
.../domain/entity/ModelCorpOutputFields.java | 4 ++
.../entity/ModelRetailOutputFields.java | 8 +++-
.../impl/LoanPricingWorkflowServiceImpl.java | 1 +
.../util/LoanPricingConverter.java | 1 +
.../src/main/resources/data/corp_output.json | 20 ++++----
.../main/resources/data/retail_output.json | 28 ++++++-----
.../components/ModelOutputDisplay.vue | 48 ++++++++++---------
.../components/PersonalCreateDialog.vue | 9 ++++
.../components/PersonalWorkflowDetail.vue | 2 +-
13 files changed, 91 insertions(+), 49 deletions(-)
create mode 100644 ruoyi-admin/src/main/resources/db/changelog/changes/20260812-add-model-output-black-cust-branch-bp.sql
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)
}}