对公修改
This commit is contained in:
3
.gitignore
vendored
3
.gitignore
vendored
@@ -47,3 +47,6 @@ nbdist/
|
||||
!*/build/*.xml
|
||||
|
||||
logs/
|
||||
.playwright-cli/
|
||||
ruoyi-ui/tests
|
||||
*/src/test
|
||||
90
doc/2026-04-15-Breadcrumb重复key修复前端实施记录.md
Normal file
90
doc/2026-04-15-Breadcrumb重复key修复前端实施记录.md
Normal file
@@ -0,0 +1,90 @@
|
||||
# Breadcrumb 重复 key 修复前端实施记录
|
||||
|
||||
## 1. 实际改动内容
|
||||
|
||||
### 1.1 修复 Breadcrumb 重复 key 告警
|
||||
|
||||
修改文件:
|
||||
|
||||
- `ruoyi-ui/src/components/Breadcrumb/index.vue`
|
||||
- `ruoyi-ui/src/components/Breadcrumb/utils.js`
|
||||
|
||||
改动内容:
|
||||
|
||||
- 将 Breadcrumb 列表项的 `key` 生成逻辑从直接使用 `item.path` 调整为统一调用 `buildBreadcrumbItemKey`
|
||||
- 新增 `buildBreadcrumbItemKey(item, index)` 工具方法,使用 `path + title + index` 组合生成稳定且唯一的 key
|
||||
- 保持现有面包屑展示逻辑不变,不调整路由结构、不修改首页与当前页的展示顺序
|
||||
|
||||
根因说明:
|
||||
|
||||
- 当前项目的 Breadcrumb 会在非首页场景外额外插入一个 `首页` 面包屑,路径固定为 `'/index'`
|
||||
- 当当前页面本身也对应 `'/index'` 时,原逻辑使用 `item.path` 作为 `transition-group` 的 key,会同时生成两个 `'/index'`
|
||||
- Vue 因此抛出 `Duplicate keys detected: '/index'`
|
||||
|
||||
### 1.2 增加最小回归测试
|
||||
|
||||
修改文件:
|
||||
|
||||
- `ruoyi-ui/tests/breadcrumb-duplicate-key.test.js`
|
||||
|
||||
改动内容:
|
||||
|
||||
- 新增最小 Node 断言脚本
|
||||
- 校验当两个 Breadcrumb 条目 path 同为 `'/index'` 时,生成的 key 仍然唯一
|
||||
- 锁定本次问题,避免后续调整 Breadcrumb 时再次引入相同告警
|
||||
|
||||
## 2. 验证结果
|
||||
|
||||
### 2.1 Node 版本
|
||||
|
||||
项目中未提供 `.nvmrc`,因此未能直接执行 `nvm use` 自动切换。
|
||||
|
||||
实际使用版本:
|
||||
|
||||
- `nvm use 14.21.3`
|
||||
|
||||
### 2.2 测试命令
|
||||
|
||||
已执行:
|
||||
|
||||
- `cd ruoyi-ui && source ~/.nvm/nvm.sh && nvm use 14.21.3 >/dev/null && node tests/breadcrumb-duplicate-key.test.js`
|
||||
|
||||
结果:
|
||||
|
||||
- 测试通过
|
||||
- 输出 `breadcrumb duplicate key assertions passed`
|
||||
|
||||
### 2.3 构建命令
|
||||
|
||||
已执行:
|
||||
|
||||
- `cd ruoyi-ui && source ~/.nvm/nvm.sh && nvm use 14.21.3 >/dev/null && npm run build:prod`
|
||||
|
||||
结果:
|
||||
|
||||
- 构建成功
|
||||
- 输出 `DONE Build complete. The dist directory is ready to be deployed.`
|
||||
|
||||
### 2.4 构建告警
|
||||
|
||||
存在 webpack 资源体积告警:
|
||||
|
||||
- `asset size limit`
|
||||
- `entrypoint size limit`
|
||||
|
||||
说明:
|
||||
|
||||
- 这些是现有项目静态资源体积告警
|
||||
- 本次 Breadcrumb 修复未引入新的构建错误或新的语法告警
|
||||
|
||||
## 3. 影响范围
|
||||
|
||||
- 仅涉及前端 Breadcrumb 组件
|
||||
- 未修改后端代码
|
||||
- 未修改贷款定价业务字段逻辑
|
||||
|
||||
## 4. 当前结论
|
||||
|
||||
- `Duplicate keys detected: '/index'` 的 Breadcrumb 告警已修复
|
||||
- 修复方式限定在组件 key 生成逻辑,属于最短路径处理
|
||||
- 前端回归测试与生产构建均已通过
|
||||
26
doc/2026-04-15-上虞对公展示指标对齐前端实施计划.md
Normal file
26
doc/2026-04-15-上虞对公展示指标对齐前端实施计划.md
Normal file
@@ -0,0 +1,26 @@
|
||||
# 2026-04-15 上虞对公展示指标对齐前端实施计划
|
||||
|
||||
## 改动内容
|
||||
- 对齐 [CorporateCreateDialog.vue](/Users/wkc/Desktop/loan-pricing/loan-pricing-jdk-1.8/ruoyi-ui/src/views/loanPricing/workflow/components/CorporateCreateDialog.vue) 的对公新增弹窗:
|
||||
- 新增 `repayMethod`
|
||||
- `loanTerm` 改为 `1-6` 年下拉
|
||||
- `collType` 改为 `一类/二类/三类/四类`
|
||||
- 对外提交字段改为 `isTradeBuildEnt`
|
||||
- `isGreenLoan`、`isTradeBuildEnt`、`collThirdParty` 统一提交 `0/1`
|
||||
- 移除 `isAgriGuar`、`isTechEnt`
|
||||
- 对齐 [CorporateWorkflowDetail.vue](/Users/wkc/Desktop/loan-pricing/loan-pricing-jdk-1.8/ruoyi-ui/src/views/loanPricing/workflow/components/CorporateWorkflowDetail.vue) 的流程详情录入字段展示:
|
||||
- 新增 `还款方式`
|
||||
- `贷款期限` 改为 `借款期限`
|
||||
- 保留 `绿色贷款`、`贸易和建筑业企业`、`抵质押类型`、`抵质押物是否三方所有`
|
||||
- 移除 `省农担担保贷款`、`科技型企业`
|
||||
- 对齐 [ModelOutputDisplay.vue](/Users/wkc/Desktop/loan-pricing/loan-pricing-jdk-1.8/ruoyi-ui/src/views/loanPricing/workflow/components/ModelOutputDisplay.vue) 的企业模型输出展示口径:
|
||||
- 展示 `repayMethod`、`isTradeBuildEnt`
|
||||
- 不再展示 `省农担担保贷款`、`科技型企业`
|
||||
- 新增/更新前端静态断言:
|
||||
- [corporate-create-input-params.test.js](/Users/wkc/Desktop/loan-pricing/loan-pricing-jdk-1.8/ruoyi-ui/tests/corporate-create-input-params.test.js)
|
||||
- [corporate-display-fields.test.js](/Users/wkc/Desktop/loan-pricing/loan-pricing-jdk-1.8/ruoyi-ui/tests/corporate-display-fields.test.js)
|
||||
|
||||
## 验证记录
|
||||
- `source ~/.nvm/nvm.sh && nvm use 14 >/dev/null && node tests/corporate-create-input-params.test.js`
|
||||
- `source ~/.nvm/nvm.sh && nvm use 14 >/dev/null && node tests/corporate-display-fields.test.js`
|
||||
- `source ~/.nvm/nvm.sh && nvm use 14 >/dev/null && npm run build:prod`
|
||||
39
doc/2026-04-15-上虞对公展示指标对齐后端实施计划.md
Normal file
39
doc/2026-04-15-上虞对公展示指标对齐后端实施计划.md
Normal file
@@ -0,0 +1,39 @@
|
||||
# 2026-04-15 上虞对公展示指标对齐后端实施计划
|
||||
|
||||
## 改动内容
|
||||
- 对齐对公创建接口 DTO 与模型调用 DTO:
|
||||
- [CorporateLoanPricingCreateDTO.java](/Users/wkc/Desktop/loan-pricing/loan-pricing-jdk-1.8/ruoyi-loan-pricing/src/main/java/com/ruoyi/loanpricing/domain/dto/CorporateLoanPricingCreateDTO.java)
|
||||
- [ModelInvokeDTO.java](/Users/wkc/Desktop/loan-pricing/loan-pricing-jdk-1.8/ruoyi-loan-pricing/src/main/java/com/ruoyi/loanpricing/domain/dto/ModelInvokeDTO.java)
|
||||
- 新增 `repayMethod`
|
||||
- 对外字段改为 `isTradeBuildEnt`
|
||||
- `loanTerm` 校验为 `1-6`
|
||||
- `collType` 校验为 `一类/二类/三类/四类`
|
||||
- 对齐流程实体、详情出参和模型输出镜像:
|
||||
- [LoanPricingWorkflow.java](/Users/wkc/Desktop/loan-pricing/loan-pricing-jdk-1.8/ruoyi-loan-pricing/src/main/java/com/ruoyi/loanpricing/domain/entity/LoanPricingWorkflow.java)
|
||||
- [ModelCorpOutputFields.java](/Users/wkc/Desktop/loan-pricing/loan-pricing-jdk-1.8/ruoyi-loan-pricing/src/main/java/com/ruoyi/loanpricing/domain/entity/ModelCorpOutputFields.java)
|
||||
- [LoanPricingConverter.java](/Users/wkc/Desktop/loan-pricing/loan-pricing-jdk-1.8/ruoyi-loan-pricing/src/main/java/com/ruoyi/loanpricing/util/LoanPricingConverter.java)
|
||||
- [LoanPricingModelService.java](/Users/wkc/Desktop/loan-pricing/loan-pricing-jdk-1.8/ruoyi-loan-pricing/src/main/java/com/ruoyi/loanpricing/service/LoanPricingModelService.java)
|
||||
- [LoanPricingWorkflowServiceImpl.java](/Users/wkc/Desktop/loan-pricing/loan-pricing-jdk-1.8/ruoyi-loan-pricing/src/main/java/com/ruoyi/loanpricing/service/impl/LoanPricingWorkflowServiceImpl.java)
|
||||
- 内部继续复用 `isTradeConstruction` 落库,外部统一返回 `isTradeBuildEnt`
|
||||
- `isAgriGuar`、`isTechEnt` 从对外 JSON 隐藏
|
||||
- 企业模型输出补充 `repayMethod`、`isTradeBuildEnt` 展示镜像
|
||||
- 对齐 mock 与 SQL 资产:
|
||||
- [corp_output.json](/Users/wkc/Desktop/loan-pricing/loan-pricing-jdk-1.8/ruoyi-loan-pricing/src/main/resources/data/corp_output.json)
|
||||
- [loan_pricing_workflow.sql](/Users/wkc/Desktop/loan-pricing/loan-pricing-jdk-1.8/sql/loan_pricing_workflow.sql)
|
||||
- [loan_pricing_schema_20260328.sql](/Users/wkc/Desktop/loan-pricing/loan-pricing-jdk-1.8/sql/loan_pricing_schema_20260328.sql)
|
||||
- [loan_pricing_prod_init_20260331.sql](/Users/wkc/Desktop/loan-pricing/loan-pricing-jdk-1.8/sql/loan_pricing_prod_init_20260331.sql)
|
||||
- [loan_pricing_required_data_20260328.sql](/Users/wkc/Desktop/loan-pricing/loan-pricing-jdk-1.8/sql/loan_pricing_required_data_20260328.sql)
|
||||
- [loan_pricing_alter_20260415_repay_method.sql](/Users/wkc/Desktop/loan-pricing/loan-pricing-jdk-1.8/sql/loan_pricing_alter_20260415_repay_method.sql)
|
||||
- [test_corporate_create.http](/Users/wkc/Desktop/loan-pricing/loan-pricing-jdk-1.8/test_api/test_corporate_create.http)
|
||||
- [test_corporate_create.sh](/Users/wkc/Desktop/loan-pricing/loan-pricing-jdk-1.8/test_api/test_corporate_create.sh)
|
||||
- `loan_pricing_workflow` 增加 `repay_method`
|
||||
- mock 数据和接口样例统一为 Excel 字段名与 `0/1` 口径
|
||||
- 补充独立增量 SQL,便于其他环境按最小影响同步结构
|
||||
- 新增/更新后端定向单测:
|
||||
- [LoanPricingModelServiceCorporateParamsTest.java](/Users/wkc/Desktop/loan-pricing/loan-pricing-jdk-1.8/ruoyi-loan-pricing/src/test/java/com/ruoyi/loanpricing/service/LoanPricingModelServiceCorporateParamsTest.java)
|
||||
- [LoanPricingModelServiceTest.java](/Users/wkc/Desktop/loan-pricing/loan-pricing-jdk-1.8/ruoyi-loan-pricing/src/test/java/com/ruoyi/loanpricing/service/LoanPricingModelServiceTest.java)
|
||||
- [LoanPricingWorkflowServiceImplTest.java](/Users/wkc/Desktop/loan-pricing/loan-pricing-jdk-1.8/ruoyi-loan-pricing/src/test/java/com/ruoyi/loanpricing/service/impl/LoanPricingWorkflowServiceImplTest.java)
|
||||
- [LoanPricingConverterTest.java](/Users/wkc/Desktop/loan-pricing/loan-pricing-jdk-1.8/ruoyi-loan-pricing/src/test/java/com/ruoyi/loanpricing/util/LoanPricingConverterTest.java)
|
||||
|
||||
## 验证记录
|
||||
- `mvn -pl ruoyi-loan-pricing -am -Dtest=LoanPricingModelServiceCorporateParamsTest,LoanPricingModelServiceTest,LoanPricingWorkflowServiceImplTest,LoanPricingConverterTest -Dsurefire.failIfNoSpecifiedTests=false test`
|
||||
22
doc/2026-04-15-审计字段自动填充后端实施记录.md
Normal file
22
doc/2026-04-15-审计字段自动填充后端实施记录.md
Normal file
@@ -0,0 +1,22 @@
|
||||
# 2026-04-15 审计字段自动填充后端实施记录
|
||||
|
||||
## 背景
|
||||
|
||||
- 贷款定价流程实体已经声明了 MyBatis-Plus 的 `FieldFill`,但当前分支缺少迁移源分支中的统一审计填充处理器。
|
||||
- 导致 `insert` 和 `updateById` 执行时,`createBy`、`createTime`、`updateBy`、`updateTime` 不会自动写入或刷新。
|
||||
|
||||
## 本次改动
|
||||
|
||||
- 新增 [MyMetaHandler.java](/Users/wkc/Desktop/loan-pricing/loan-pricing-jdk-1.8/ruoyi-framework/src/main/java/com/ruoyi/framework/config/handler/MyMetaHandler.java),恢复与迁移源分支一致的统一审计填充逻辑。
|
||||
- 审计人格式保持与源分支一致,统一写入 `昵称-用户名`。
|
||||
- 新增 [MyMetaHandlerTest.java](/Users/wkc/Desktop/loan-pricing/loan-pricing-jdk-1.8/ruoyi-framework/src/test/java/com/ruoyi/framework/config/handler/MyMetaHandlerTest.java),覆盖插入填充与更新填充两个核心场景。
|
||||
|
||||
## 验证结果
|
||||
|
||||
- 执行 `mvn -pl ruoyi-framework -am -Dtest=MyMetaHandlerTest -Dsurefire.failIfNoSpecifiedTests=false test`,通过。
|
||||
- 执行 `mvn -pl ruoyi-loan-pricing -am -Dtest=MyMetaHandlerTest,LoanPricingWorkflowServiceImplTest,LoanPricingModelServiceTest,LoanPricingModelServiceCorporateParamsTest,LoanPricingModelServicePersonalParamsTest -Dsurefire.failIfNoSpecifiedTests=false test`,通过。
|
||||
|
||||
## 影响说明
|
||||
|
||||
- 所有使用 MyBatis-Plus 自动填充并声明对应字段的实体,在当前登录上下文下执行新增和更新时,都会自动维护审计字段。
|
||||
- 本次未改动贷款定价业务入参、SQL 结构和前端页面行为。
|
||||
24
doc/2026-04-15-对公流程详情测算结果与风险分析分组调整前端实施记录.md
Normal file
24
doc/2026-04-15-对公流程详情测算结果与风险分析分组调整前端实施记录.md
Normal file
@@ -0,0 +1,24 @@
|
||||
# 对公流程详情测算结果与风险分析分组调整前端实施记录
|
||||
|
||||
## 变更日期
|
||||
- 2026-04-15
|
||||
|
||||
## 变更范围
|
||||
- 前端页面:`ruoyi-ui/src/views/loanPricing/workflow/components/ModelOutputDisplay.vue`
|
||||
- 前端校验:`ruoyi-ui/tests/corporate-create-input-params.test.js`
|
||||
- 前端校验:`ruoyi-ui/tests/corporate-display-fields.test.js`
|
||||
|
||||
## 实施内容
|
||||
- 将对公流程详情“模型输出”卡片中的“测算结果”从原“风险度与测算结果”合并分组中拆出。
|
||||
- 按页面要求将对公模型输出分组顺序调整为“基本信息 → 测算结果 → 忠诚度分析 → 贡献度分析 → 关联度分析 → 风险分析”。
|
||||
- 保留“风险分析”在模型输出卡片末尾,仅调整展示分组,不修改接口字段、父组件传参和格式化逻辑。
|
||||
- 补充前端断言,校验对公模型输出存在独立“测算结果”“风险分析”标题,且不再保留“风险度与测算结果”合并标题。
|
||||
|
||||
## 影响说明
|
||||
- 本次仅涉及前端详情页展示层,不涉及后端接口、数据库脚本和模型测算逻辑。
|
||||
- 对公流程详情页中,用户可在基本信息后直接查看测算结果,风险分析独立展示且位于模型输出末尾。
|
||||
|
||||
## 验证结果
|
||||
- 执行 `node ruoyi-ui/tests/corporate-create-input-params.test.js`,断言通过。
|
||||
- 执行 `node ruoyi-ui/tests/corporate-display-fields.test.js`,断言通过。
|
||||
- 执行 `cd ruoyi-ui && nvm use 14.21.3 && npm run build:prod`,前端生产构建通过。
|
||||
16
doc/2026-04-15-开发库补列SQL落盘实施记录.md
Normal file
16
doc/2026-04-15-开发库补列SQL落盘实施记录.md
Normal file
@@ -0,0 +1,16 @@
|
||||
# 2026-04-15 开发库补列 SQL 落盘实施记录
|
||||
|
||||
## 修改内容
|
||||
- 将开发库已执行的对公字段补列 SQL 整理并保存到 `sql/loan_pricing_alter_20260415_repay_method.sql`。
|
||||
- 在原有 `loan_pricing_workflow.repay_method` 基础上,补充 `model_corp_output_fields` 的以下字段变更语句:
|
||||
- `repay_method`
|
||||
- `is_trade_build_ent`
|
||||
- `loan_rate_history`
|
||||
- `min_rate_product`
|
||||
- `smooth_range`
|
||||
- `final_calculate_rate`
|
||||
- `reference_rate`
|
||||
|
||||
## 结果
|
||||
- 现有 SQL 文件已可直接用于同步开发库本次字段补齐变更。
|
||||
- 文件内容与本次实际执行到开发库的语句保持一致。
|
||||
BIN
doc/~$上虞对公利率测算_上传字段与展示字段 .xlsx
Normal file
BIN
doc/~$上虞对公利率测算_上传字段与展示字段 .xlsx
Normal file
Binary file not shown.
BIN
doc/上虞对公利率测算_上传字段与展示字段 .xlsx
Normal file
BIN
doc/上虞对公利率测算_上传字段与展示字段 .xlsx
Normal file
Binary file not shown.
@@ -0,0 +1,34 @@
|
||||
package com.ruoyi.framework.config.handler;
|
||||
|
||||
import java.util.Date;
|
||||
|
||||
import org.apache.ibatis.reflection.MetaObject;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
import com.baomidou.mybatisplus.core.handlers.MetaObjectHandler;
|
||||
import com.ruoyi.common.utils.SecurityUtils;
|
||||
|
||||
/**
|
||||
* 实体类自动配置创建日期和更新日期
|
||||
*/
|
||||
@Component
|
||||
public class MyMetaHandler implements MetaObjectHandler
|
||||
{
|
||||
@Override
|
||||
public void insertFill(MetaObject metaObject)
|
||||
{
|
||||
String auditUser = SecurityUtils.getLoginUser().getUser().getNickName() + '-' + SecurityUtils.getUsername();
|
||||
this.setFieldValByName("createBy", auditUser, metaObject);
|
||||
this.setFieldValByName("createTime", new Date(), metaObject);
|
||||
this.setFieldValByName("updateBy", auditUser, metaObject);
|
||||
this.setFieldValByName("updateTime", new Date(), metaObject);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void updateFill(MetaObject metaObject)
|
||||
{
|
||||
String auditUser = SecurityUtils.getLoginUser().getUser().getNickName() + '-' + SecurityUtils.getUsername();
|
||||
this.setFieldValByName("updateBy", auditUser, metaObject);
|
||||
this.setFieldValByName("updateTime", new Date(), metaObject);
|
||||
}
|
||||
}
|
||||
@@ -19,12 +19,18 @@ public class CorporateLoanPricingCreateDTO implements Serializable {
|
||||
@NotBlank(message = "客户内码不能为空")
|
||||
private String custIsn;
|
||||
|
||||
private String custType;
|
||||
|
||||
private String custName;
|
||||
|
||||
private String idType;
|
||||
|
||||
private String idNum;
|
||||
|
||||
@NotBlank(message = "还款方式不能为空")
|
||||
@Pattern(regexp = "^(分期|不分期)$", message = "还款方式必须是:分期、不分期之一")
|
||||
private String repayMethod;
|
||||
|
||||
@NotBlank(message = "担保方式不能为空")
|
||||
@Pattern(regexp = "^(信用|保证|抵押|质押)$", message = "担保方式必须是:信用、保证、抵押、质押之一")
|
||||
private String guarType;
|
||||
@@ -32,16 +38,16 @@ public class CorporateLoanPricingCreateDTO implements Serializable {
|
||||
@NotBlank(message = "申请金额不能为空")
|
||||
private String applyAmt;
|
||||
|
||||
@NotBlank(message = "借款期限不能为空")
|
||||
@Pattern(regexp = "^[1-6]$", message = "借款期限必须是 1 到 6 年")
|
||||
private String loanTerm;
|
||||
|
||||
private String isAgriGuar;
|
||||
|
||||
private String isGreenLoan;
|
||||
|
||||
private String isTechEnt;
|
||||
|
||||
private String isTradeConstruction;
|
||||
private String isTradeBuildEnt;
|
||||
|
||||
@NotBlank(message = "抵质押类型不能为空")
|
||||
@Pattern(regexp = "^(一类|二类|三类|四类)$", message = "抵质押类型必须是:一类、二类、三类、四类之一")
|
||||
private String collType;
|
||||
|
||||
private String collThirdParty;
|
||||
|
||||
@@ -43,6 +43,12 @@ public class ModelInvokeDTO {
|
||||
*/
|
||||
private String guarType;
|
||||
|
||||
/**
|
||||
* 还款方式(必填)
|
||||
* 可选值:分期/不分期
|
||||
*/
|
||||
private String repayMethod;
|
||||
|
||||
/**
|
||||
* 中间业务_个人_快捷支付(非必填)
|
||||
* 可选值:true/false
|
||||
@@ -103,6 +109,18 @@ public class ModelInvokeDTO {
|
||||
*/
|
||||
private String isAgriGuar;
|
||||
|
||||
/**
|
||||
* 绿色贷款(非必填)
|
||||
* 可选值:0/1
|
||||
*/
|
||||
private String isGreenLoan;
|
||||
|
||||
/**
|
||||
* 贸易和建筑业企业(非必填)
|
||||
* 可选值:0/1
|
||||
*/
|
||||
private String isTradeBuildEnt;
|
||||
|
||||
/**
|
||||
* 是否纳税信用等级A级(非必填)
|
||||
* 可选值:true/false
|
||||
@@ -137,7 +155,7 @@ public class ModelInvokeDTO {
|
||||
|
||||
/**
|
||||
* 抵质押类型(非必填)
|
||||
* 可选值:一类/二类/三类
|
||||
* 可选值:一类/二类/三类/四类
|
||||
*/
|
||||
private String collType;
|
||||
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
package com.ruoyi.loanpricing.domain.entity;
|
||||
|
||||
import com.baomidou.mybatisplus.annotation.*;
|
||||
import com.fasterxml.jackson.annotation.JsonIgnore;
|
||||
import com.fasterxml.jackson.annotation.JsonFormat;
|
||||
import lombok.Data;
|
||||
import javax.validation.constraints.NotBlank;
|
||||
@@ -48,6 +49,9 @@ public class LoanPricingWorkflow implements Serializable
|
||||
@NotBlank(message = "担保方式不能为空")
|
||||
private String guarType;
|
||||
|
||||
/** 还款方式: 分期/不分期 */
|
||||
private String repayMethod;
|
||||
|
||||
/** 中间业务_个人_快捷支付: true/false */
|
||||
private String midPerQuickPay;
|
||||
|
||||
@@ -65,7 +69,7 @@ public class LoanPricingWorkflow implements Serializable
|
||||
private String applyAmt;
|
||||
|
||||
/**
|
||||
* 贷款期限
|
||||
* 借款期限(年)
|
||||
*/
|
||||
private String loanTerm;
|
||||
|
||||
@@ -79,13 +83,21 @@ public class LoanPricingWorkflow implements Serializable
|
||||
private String isManufacturing;
|
||||
|
||||
/** 省农担担保贷款: true/false */
|
||||
@JsonIgnore
|
||||
private String isAgriGuar;
|
||||
|
||||
/**
|
||||
* 贸易和建筑业企业标识: true/false
|
||||
*/
|
||||
@JsonIgnore
|
||||
private String isTradeConstruction;
|
||||
|
||||
/**
|
||||
* 贸易和建筑业企业标识: 0/1
|
||||
*/
|
||||
@TableField(exist = false)
|
||||
private String isTradeBuildEnt;
|
||||
|
||||
/**
|
||||
* 绿色贷款: true/false
|
||||
*/
|
||||
@@ -94,6 +106,7 @@ public class LoanPricingWorkflow implements Serializable
|
||||
/**
|
||||
* 科技型企业: true/false
|
||||
*/
|
||||
@JsonIgnore
|
||||
private String isTechEnt;
|
||||
|
||||
/** 是否纳税信用等级A级: true/false */
|
||||
@@ -111,7 +124,7 @@ public class LoanPricingWorkflow implements Serializable
|
||||
/** 循环功能: true/false */
|
||||
private String loanLoop;
|
||||
|
||||
/** 抵质押类型: 一线/一类/二类 */
|
||||
/** 抵质押类型: 一类/二类/三类/四类 */
|
||||
private String collType;
|
||||
|
||||
/** 抵质押物是否三方所有: true/false */
|
||||
|
||||
@@ -4,6 +4,7 @@ import com.baomidou.mybatisplus.annotation.FieldFill;
|
||||
import com.baomidou.mybatisplus.annotation.IdType;
|
||||
import com.baomidou.mybatisplus.annotation.TableField;
|
||||
import com.baomidou.mybatisplus.annotation.TableId;
|
||||
import com.fasterxml.jackson.annotation.JsonIgnore;
|
||||
import lombok.Data;
|
||||
|
||||
import java.util.Date;
|
||||
@@ -31,6 +32,9 @@ public class ModelCorpOutputFields {
|
||||
private String idType;
|
||||
// 证件号码
|
||||
private String idNum;
|
||||
// 还款方式
|
||||
@TableField(exist = false)
|
||||
private String repayMethod;
|
||||
// 基准利率
|
||||
private String baseLoanRate;
|
||||
// 我行首贷客户
|
||||
@@ -79,12 +83,14 @@ public class ModelCorpOutputFields {
|
||||
private String isCleanEnt;
|
||||
// 开立基本结算账户
|
||||
private String hasSettleAcct;
|
||||
// 贸易和建筑业企业
|
||||
@TableField(exist = false)
|
||||
private String isTradeBuildEnt;
|
||||
// 省农担担保贷款
|
||||
@JsonIgnore
|
||||
private String isAgriGuar;
|
||||
// 绿色贷款
|
||||
private String isGreenLoan;
|
||||
// 科技型企业
|
||||
private String isTechEnt;
|
||||
// BP_企业客户类别
|
||||
private String bpEntType;
|
||||
// TOTAL_BP_关联度
|
||||
@@ -119,6 +125,16 @@ public class ModelCorpOutputFields {
|
||||
private String totalBp;
|
||||
// 测算利率
|
||||
private String calculateRate;
|
||||
// 历史利率
|
||||
private String loanRateHistory;
|
||||
// 产品最低利率下限
|
||||
private String minRateProduct;
|
||||
// 平滑幅度
|
||||
private String smoothRange;
|
||||
// 最终测算利率
|
||||
private String finalCalculateRate;
|
||||
// 参考利率
|
||||
private String referenceRate;
|
||||
|
||||
@TableField(fill = FieldFill.INSERT)
|
||||
private Date createTime;
|
||||
|
||||
@@ -59,10 +59,15 @@ public class LoanPricingModelService {
|
||||
}
|
||||
ModelInvokeDTO modelInvokeDTO = new ModelInvokeDTO();
|
||||
BeanUtils.copyProperties(loanPricingWorkflow, modelInvokeDTO);
|
||||
modelInvokeDTO.setIsTradeBuildEnt(toZeroOne(loanPricingWorkflow.getIsTradeConstruction()));
|
||||
if ("个人".equals(loanPricingWorkflow.getCustType()))
|
||||
{
|
||||
normalizePersonalModelInvokeDTO(modelInvokeDTO);
|
||||
}
|
||||
if ("企业".equals(loanPricingWorkflow.getCustType()))
|
||||
{
|
||||
normalizeCorporateModelInvokeDTO(modelInvokeDTO);
|
||||
}
|
||||
JSONObject response = modelService.invokeModel(modelInvokeDTO);
|
||||
if (loanPricingWorkflow.getCustType().equals("个人")){
|
||||
// 个人模型
|
||||
@@ -94,6 +99,13 @@ public class LoanPricingModelService {
|
||||
modelInvokeDTO.setCollThirdParty(toZeroOne(modelInvokeDTO.getCollThirdParty()));
|
||||
}
|
||||
|
||||
private void normalizeCorporateModelInvokeDTO(ModelInvokeDTO modelInvokeDTO)
|
||||
{
|
||||
modelInvokeDTO.setIsGreenLoan(toZeroOne(modelInvokeDTO.getIsGreenLoan()));
|
||||
modelInvokeDTO.setIsTradeBuildEnt(toZeroOne(modelInvokeDTO.getIsTradeBuildEnt()));
|
||||
modelInvokeDTO.setCollThirdParty(toZeroOne(modelInvokeDTO.getCollThirdParty()));
|
||||
}
|
||||
|
||||
private String toZeroOne(String value)
|
||||
{
|
||||
if ("true".equals(value) || "1".equals(value))
|
||||
|
||||
@@ -78,6 +78,8 @@ public class LoanPricingWorkflowServiceImpl implements ILoanPricingWorkflowServi
|
||||
{
|
||||
loanPricingWorkflow.setRunType("1");
|
||||
}
|
||||
loanPricingWorkflow.setCustType("企业".equals(loanPricingWorkflow.getCustType()) ? "企业" : loanPricingWorkflow.getCustType());
|
||||
loanPricingWorkflow.setIsTradeBuildEnt(loanPricingWorkflow.getIsTradeConstruction());
|
||||
|
||||
loanPricingWorkflow.setCustName(sensitiveFieldCryptoService.encrypt(loanPricingWorkflow.getCustName()));
|
||||
loanPricingWorkflow.setIdNum(sensitiveFieldCryptoService.encrypt(loanPricingWorkflow.getIdNum()));
|
||||
@@ -163,6 +165,7 @@ public class LoanPricingWorkflowServiceImpl implements ILoanPricingWorkflowServi
|
||||
String plainIdNum = sensitiveFieldCryptoService.decrypt(loanPricingWorkflow.getIdNum());
|
||||
loanPricingWorkflow.setCustName(loanPricingSensitiveDisplayService.maskCustName(plainCustName));
|
||||
loanPricingWorkflow.setIdNum(loanPricingSensitiveDisplayService.maskIdNum(plainIdNum));
|
||||
loanPricingWorkflow.setIsTradeBuildEnt(loanPricingWorkflow.getIsTradeConstruction());
|
||||
loanPricingWorkflowVO.setLoanPricingWorkflow(loanPricingWorkflow);
|
||||
|
||||
if (Objects.nonNull(loanPricingWorkflow.getModelOutputId())){
|
||||
@@ -180,6 +183,8 @@ public class LoanPricingWorkflowServiceImpl implements ILoanPricingWorkflowServi
|
||||
if (Objects.nonNull(modelCorpOutputFields))
|
||||
{
|
||||
maskModelCorpOutputBasicInfo(modelCorpOutputFields);
|
||||
modelCorpOutputFields.setRepayMethod(loanPricingWorkflow.getRepayMethod());
|
||||
modelCorpOutputFields.setIsTradeBuildEnt(loanPricingWorkflow.getIsTradeBuildEnt());
|
||||
loanPricingWorkflow.setLoanRate(modelCorpOutputFields.getCalculateRate());
|
||||
}
|
||||
loanPricingWorkflowVO.setModelCorpOutputFields(modelCorpOutputFields);
|
||||
|
||||
@@ -52,15 +52,15 @@ public class LoanPricingConverter {
|
||||
entity.setCustName(dto.getCustName());
|
||||
entity.setIdType(dto.getIdType());
|
||||
entity.setIdNum(dto.getIdNum());
|
||||
entity.setRepayMethod(dto.getRepayMethod());
|
||||
entity.setGuarType(dto.getGuarType());
|
||||
entity.setApplyAmt(dto.getApplyAmt());
|
||||
entity.setCollType(dto.getCollType());
|
||||
entity.setCollThirdParty(dto.getCollThirdParty());
|
||||
// 映射企业特有字段
|
||||
entity.setIsAgriGuar(dto.getIsAgriGuar());
|
||||
entity.setIsGreenLoan(dto.getIsGreenLoan());
|
||||
entity.setIsTechEnt(dto.getIsTechEnt());
|
||||
entity.setIsTradeConstruction(dto.getIsTradeConstruction());
|
||||
entity.setIsTradeConstruction(dto.getIsTradeBuildEnt());
|
||||
entity.setIsTradeBuildEnt(dto.getIsTradeBuildEnt());
|
||||
entity.setLoanTerm(dto.getLoanTerm());
|
||||
return entity;
|
||||
}
|
||||
|
||||
@@ -4,11 +4,12 @@
|
||||
"tokenId": "17364055486305E7F4722M8IPFWNL8TOBEB",
|
||||
"mappingOutputFields": {
|
||||
"custIsn": "CUST20260121001",
|
||||
"custType": "企业客户",
|
||||
"guarType": "抵押担保",
|
||||
"custType": "企业",
|
||||
"guarType": "抵押",
|
||||
"custName": "北京智联科技有限公司",
|
||||
"idType": "营业执照",
|
||||
"idNum": "91110108MA00XXXXXX",
|
||||
"repayMethod": "分期",
|
||||
"baseLoanRate": "3.45",
|
||||
"isFirstLoan": "N",
|
||||
"faithDay": "730",
|
||||
@@ -33,17 +34,16 @@
|
||||
"bpPayroll": "4.1",
|
||||
"isCleanEnt": "Y",
|
||||
"hasSettleAcct": "Y",
|
||||
"isAgriGuar": "N",
|
||||
"isGreenLoan": "Y",
|
||||
"isTechEnt": "Y",
|
||||
"isGreenLoan": "1",
|
||||
"isTradeBuildEnt": "0",
|
||||
"bpEntType": "7.5",
|
||||
"totoalBpRelevance": "9.2",
|
||||
"loanTerm": "36",
|
||||
"loanTerm": "6",
|
||||
"bpLoanTerm": "3.3",
|
||||
"applyAmt": "5000000.00",
|
||||
"applyAmt": "1000000.00",
|
||||
"bpLoanAmount": "5.8",
|
||||
"collType": "房产抵押",
|
||||
"collThirdParty": "N",
|
||||
"collType": "四类",
|
||||
"collThirdParty": "1",
|
||||
"bpCollateral": "4.5",
|
||||
"greyCust": "N",
|
||||
"prinOverdue": "N",
|
||||
|
||||
@@ -87,4 +87,30 @@ class LoanPricingModelServiceTest
|
||||
!Objects.equals("张三", entity.getCustName())
|
||||
&& !Objects.equals("110101199001011234", entity.getIdNum())));
|
||||
}
|
||||
|
||||
@Test
|
||||
void shouldSendCorporateRepayMethodAndTradeBuildFlagToModel()
|
||||
{
|
||||
LoanPricingWorkflow workflow = new LoanPricingWorkflow();
|
||||
workflow.setId(3L);
|
||||
workflow.setCustType("企业");
|
||||
workflow.setCustName("cipher-name");
|
||||
workflow.setIdNum("cipher-id");
|
||||
workflow.setRepayMethod("分期");
|
||||
workflow.setIsTradeConstruction("1");
|
||||
|
||||
JSONObject response = new JSONObject();
|
||||
response.put("calculateRate", "4.10");
|
||||
|
||||
when(loanPricingWorkflowMapper.selectById(3L)).thenReturn(workflow);
|
||||
when(sensitiveFieldCryptoService.decrypt("cipher-name")).thenReturn("上虞测试企业");
|
||||
when(sensitiveFieldCryptoService.decrypt("cipher-id")).thenReturn("91330000123456789X");
|
||||
when(modelService.invokeModel(any())).thenReturn(response);
|
||||
|
||||
loanPricingModelService.invokeModelAsync(3L);
|
||||
|
||||
verify(modelService).invokeModel(argThat((ModelInvokeDTO dto) ->
|
||||
Objects.equals("分期", dto.getRepayMethod())
|
||||
&& Objects.equals("1", dto.getIsTradeBuildEnt())));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -253,4 +253,33 @@ class LoanPricingWorkflowServiceImplTest
|
||||
assertEquals("测试****公司", result.getModelCorpOutputFields().getCustName());
|
||||
assertEquals("91*************00X", result.getModelCorpOutputFields().getIdNum());
|
||||
}
|
||||
|
||||
@Test
|
||||
void shouldReturnCorporateDisplaySheetFieldsInWorkflowDetail()
|
||||
{
|
||||
LoanPricingWorkflow workflow = new LoanPricingWorkflow();
|
||||
workflow.setSerialNum("C20260415001");
|
||||
workflow.setCustType("企业");
|
||||
workflow.setCustName("cipher-name");
|
||||
workflow.setIdNum("cipher-id");
|
||||
workflow.setRepayMethod("分期");
|
||||
workflow.setIsTradeConstruction("1");
|
||||
workflow.setModelOutputId(23L);
|
||||
|
||||
ModelCorpOutputFields corpOutputFields = new ModelCorpOutputFields();
|
||||
corpOutputFields.setCalculateRate("4.95");
|
||||
|
||||
when(loanPricingWorkflowMapper.selectOne(any())).thenReturn(workflow);
|
||||
when(modelCorpOutputFieldsMapper.selectById(23L)).thenReturn(corpOutputFields);
|
||||
when(sensitiveFieldCryptoService.decrypt("cipher-name")).thenReturn("上虞测试企业");
|
||||
when(sensitiveFieldCryptoService.decrypt("cipher-id")).thenReturn("91330000123456789X");
|
||||
when(loanPricingSensitiveDisplayService.maskCustName("上虞测试企业")).thenReturn("上虞***企业");
|
||||
when(loanPricingSensitiveDisplayService.maskIdNum("91330000123456789X")).thenReturn("91*************89X");
|
||||
|
||||
LoanPricingWorkflowVO result = loanPricingWorkflowService.selectLoanPricingBySerialNum("C20260415001");
|
||||
|
||||
assertEquals("分期", result.getModelCorpOutputFields().getRepayMethod());
|
||||
assertEquals("1", result.getModelCorpOutputFields().getIsTradeBuildEnt());
|
||||
assertEquals("4.95", result.getLoanPricingWorkflow().getLoanRate());
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
<template>
|
||||
<el-breadcrumb class="app-breadcrumb" separator="/">
|
||||
<transition-group name="breadcrumb">
|
||||
<el-breadcrumb-item v-for="(item, index) in levelList" :key="item.path">
|
||||
<el-breadcrumb-item v-for="(item, index) in levelList" :key="buildBreadcrumbItemKey(item, index)">
|
||||
<span v-if="item.redirect === 'noRedirect' || index == levelList.length - 1" class="no-redirect">{{ item.meta.title }}</span>
|
||||
<a v-else @click.prevent="handleLink(item)">{{ item.meta.title }}</a>
|
||||
</el-breadcrumb-item>
|
||||
@@ -10,6 +10,8 @@
|
||||
</template>
|
||||
|
||||
<script>
|
||||
const { buildBreadcrumbItemKey } = require('./utils')
|
||||
|
||||
export default {
|
||||
data() {
|
||||
return {
|
||||
@@ -29,6 +31,7 @@ export default {
|
||||
this.getBreadcrumb()
|
||||
},
|
||||
methods: {
|
||||
buildBreadcrumbItemKey,
|
||||
getBreadcrumb() {
|
||||
// only show routes with meta.title
|
||||
let matched = []
|
||||
|
||||
9
ruoyi-ui/src/components/Breadcrumb/utils.js
Normal file
9
ruoyi-ui/src/components/Breadcrumb/utils.js
Normal file
@@ -0,0 +1,9 @@
|
||||
function buildBreadcrumbItemKey(item, index) {
|
||||
const path = item && item.path ? item.path : 'breadcrumb'
|
||||
const title = item && item.meta && item.meta.title ? item.meta.title : index
|
||||
return `${path}-${title}-${index}`
|
||||
}
|
||||
|
||||
module.exports = {
|
||||
buildBreadcrumbItemKey
|
||||
}
|
||||
@@ -35,6 +35,14 @@
|
||||
<!-- 贷款信息 -->
|
||||
<el-divider content-position="left">贷款信息</el-divider>
|
||||
<el-row>
|
||||
<el-col :span="12">
|
||||
<el-form-item label="还款方式" prop="repayMethod">
|
||||
<el-select v-model="form.repayMethod" placeholder="请选择还款方式" style="width: 100%">
|
||||
<el-option label="分期" value="分期"/>
|
||||
<el-option label="不分期" value="不分期"/>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<el-form-item label="担保方式" prop="guarType">
|
||||
<el-select v-model="form.guarType" placeholder="请选择担保方式" style="width: 100%">
|
||||
@@ -53,8 +61,10 @@
|
||||
</el-row>
|
||||
<el-row>
|
||||
<el-col :span="12">
|
||||
<el-form-item label="贷款期限(月)" prop="loanTerm">
|
||||
<el-input v-model.number="form.loanTerm" type="number" placeholder="请输入贷款期限"/>
|
||||
<el-form-item label="借款期限" prop="loanTerm">
|
||||
<el-select v-model="form.loanTerm" placeholder="请选择借款期限" style="width: 100%">
|
||||
<el-option v-for="item in loanTermOptions" :key="item" :label="item" :value="item"/>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
@@ -62,26 +72,14 @@
|
||||
<!-- 企业标识 -->
|
||||
<el-divider content-position="left">企业标识</el-divider>
|
||||
<el-row>
|
||||
<el-col :span="12">
|
||||
<el-form-item label="省农担担保贷款" prop="isAgriGuar">
|
||||
<el-switch v-model="form.isAgriGuar"/>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<el-form-item label="绿色贷款" prop="isGreenLoan">
|
||||
<el-switch v-model="form.isGreenLoan"/>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
<el-row>
|
||||
<el-col :span="12">
|
||||
<el-form-item label="科技型企业" prop="isTechEnt">
|
||||
<el-switch v-model="form.isTechEnt"/>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<el-form-item label="贸易和建筑业企业" prop="isTradeConstruction">
|
||||
<el-switch v-model="form.isTradeConstruction"/>
|
||||
<el-form-item label="贸易和建筑业企业" prop="isTradeBuildEnt">
|
||||
<el-switch v-model="form.isTradeBuildEnt"/>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
@@ -92,9 +90,10 @@
|
||||
<el-col :span="12">
|
||||
<el-form-item label="抵质押类型" prop="collType">
|
||||
<el-select v-model="form.collType" placeholder="请选择抵质押类型" style="width: 100%">
|
||||
<el-option label="一线" value="一线"/>
|
||||
<el-option label="一类" value="一类"/>
|
||||
<el-option label="二类" value="二类"/>
|
||||
<el-option label="三类" value="三类"/>
|
||||
<el-option label="四类" value="四类"/>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
@@ -124,7 +123,6 @@ export default {
|
||||
}
|
||||
},
|
||||
data() {
|
||||
// 金额验证
|
||||
const validateApplyAmt = (rule, value, callback) => {
|
||||
if (!value) {
|
||||
callback(new Error('请输入申请金额'))
|
||||
@@ -140,38 +138,30 @@ export default {
|
||||
}
|
||||
}
|
||||
|
||||
// 贷款期限验证
|
||||
const validateLoanTerm = (rule, value, callback) => {
|
||||
if (!value && value !== 0) {
|
||||
callback(new Error('请输入贷款期限'))
|
||||
} else {
|
||||
const num = parseInt(value)
|
||||
if (isNaN(num) || num <= 0) {
|
||||
callback(new Error('请输入有效的贷款期限'))
|
||||
} else if (num > 360) {
|
||||
callback(new Error('贷款期限不能超过 360 个月'))
|
||||
} else {
|
||||
callback()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return {
|
||||
submitting: false,
|
||||
loanTermOptions: [
|
||||
'1',
|
||||
'2',
|
||||
'3',
|
||||
'4',
|
||||
'5',
|
||||
'6'
|
||||
],
|
||||
form: {
|
||||
orgCode: '892000',
|
||||
runType: '1',
|
||||
custType: '企业',
|
||||
custIsn: undefined,
|
||||
custName: undefined,
|
||||
idType: undefined,
|
||||
idNum: undefined,
|
||||
repayMethod: undefined,
|
||||
guarType: undefined,
|
||||
applyAmt: undefined,
|
||||
loanTerm: undefined,
|
||||
isAgriGuar: false,
|
||||
isGreenLoan: false,
|
||||
isTechEnt: false,
|
||||
isTradeConstruction: false,
|
||||
isTradeBuildEnt: false,
|
||||
collType: undefined,
|
||||
collThirdParty: false
|
||||
},
|
||||
@@ -190,6 +180,9 @@ export default {
|
||||
idNum: [
|
||||
{required: true, message: "证件号码不能为空", trigger: "blur"}
|
||||
],
|
||||
repayMethod: [
|
||||
{required: true, message: "请选择还款方式", trigger: "change"}
|
||||
],
|
||||
guarType: [
|
||||
{required: true, message: "请选择担保方式", trigger: "change"}
|
||||
],
|
||||
@@ -197,7 +190,7 @@ export default {
|
||||
{required: true, validator: validateApplyAmt, trigger: "blur"}
|
||||
],
|
||||
loanTerm: [
|
||||
{required: true, validator: validateLoanTerm, trigger: "blur"}
|
||||
{required: true, message: "请选择借款期限", trigger: "change"}
|
||||
],
|
||||
collType: [
|
||||
{required: true, message: "请选择抵质押类型", trigger: "change"}
|
||||
@@ -228,17 +221,17 @@ export default {
|
||||
this.form = {
|
||||
orgCode: '892000',
|
||||
runType: '1',
|
||||
custType: '企业',
|
||||
custIsn: undefined,
|
||||
custName: undefined,
|
||||
idType: undefined,
|
||||
idNum: undefined,
|
||||
repayMethod: undefined,
|
||||
guarType: undefined,
|
||||
applyAmt: undefined,
|
||||
loanTerm: undefined,
|
||||
isAgriGuar: false,
|
||||
isGreenLoan: false,
|
||||
isTechEnt: false,
|
||||
isTradeConstruction: false,
|
||||
isTradeBuildEnt: false,
|
||||
collType: undefined,
|
||||
collThirdParty: false
|
||||
}
|
||||
@@ -259,14 +252,11 @@ export default {
|
||||
this.$refs["form"].validate(valid => {
|
||||
if (valid) {
|
||||
this.submitting = true
|
||||
// 转换开关值为字符串
|
||||
const data = {
|
||||
...this.form,
|
||||
isAgriGuar: this.form.isAgriGuar ? 'true' : 'false',
|
||||
isGreenLoan: this.form.isGreenLoan ? 'true' : 'false',
|
||||
isTechEnt: this.form.isTechEnt ? 'true' : 'false',
|
||||
isTradeConstruction: this.form.isTradeConstruction ? 'true' : 'false',
|
||||
collThirdParty: this.form.collThirdParty ? 'true' : 'false'
|
||||
isGreenLoan: this.form.isGreenLoan ? '1' : '0',
|
||||
isTradeBuildEnt: this.form.isTradeBuildEnt ? '1' : '0',
|
||||
collThirdParty: this.form.collThirdParty ? '1' : '0'
|
||||
}
|
||||
|
||||
createCorporateWorkflow(data).then(response => {
|
||||
|
||||
@@ -68,7 +68,8 @@
|
||||
<el-descriptions-item label="客户内码">{{ detailData.custIsn }}</el-descriptions-item>
|
||||
<el-descriptions-item label="证件类型">{{ detailData.idType }}</el-descriptions-item>
|
||||
<el-descriptions-item label="证件号码">{{ detailData.idNum }}</el-descriptions-item>
|
||||
<el-descriptions-item label="贷款期限">{{ detailData.loanTerm || '-' }}</el-descriptions-item>
|
||||
<el-descriptions-item label="还款方式">{{ detailData.repayMethod || '-' }}</el-descriptions-item>
|
||||
<el-descriptions-item label="借款期限">{{ detailData.loanTerm || '-' }}</el-descriptions-item>
|
||||
<el-descriptions-item label="创建时间">{{ detailData.createTime }}</el-descriptions-item>
|
||||
<el-descriptions-item label="创建者">{{ detailData.createBy }}</el-descriptions-item>
|
||||
</el-descriptions>
|
||||
@@ -80,12 +81,8 @@
|
||||
<el-descriptions :column="2" border>
|
||||
<el-descriptions-item label="担保方式">{{ detailData.guarType }}</el-descriptions-item>
|
||||
<el-descriptions-item label="申请金额">{{ detailData.applyAmt }} 元</el-descriptions-item>
|
||||
<el-descriptions-item label="省农担担保贷款">{{
|
||||
formatBoolean(detailData.isAgriGuar)
|
||||
}}
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item label="绿色贷款">{{ formatBoolean(detailData.isGreenLoan) }}</el-descriptions-item>
|
||||
<el-descriptions-item label="科技型企业">{{ formatBoolean(detailData.isTechEnt) }}</el-descriptions-item>
|
||||
<el-descriptions-item label="贸易和建筑业企业">{{ formatBoolean(detailData.isTradeBuildEnt) }}</el-descriptions-item>
|
||||
<el-descriptions-item label="抵质押类型">{{ detailData.collType || '-' }}</el-descriptions-item>
|
||||
<el-descriptions-item label="抵质押物是否三方所有">{{
|
||||
formatBoolean(detailData.collThirdParty)
|
||||
|
||||
@@ -109,10 +109,13 @@
|
||||
<h4 class="section-title">基本信息</h4>
|
||||
<el-descriptions :column="2" border size="small">
|
||||
<el-descriptions-item label="客户内码">{{ corpOutput.custIsn || '-' }}</el-descriptions-item>
|
||||
<el-descriptions-item label="客户类型">{{ corpOutput.custType || '-' }}</el-descriptions-item>
|
||||
<el-descriptions-item label="担保方式">{{ corpOutput.guarType || '-' }}</el-descriptions-item>
|
||||
<el-descriptions-item label="客户名称">{{ corpOutput.custName || '-' }}</el-descriptions-item>
|
||||
<el-descriptions-item label="证件类型">{{ corpOutput.idType || '-' }}</el-descriptions-item>
|
||||
<el-descriptions-item label="证件号码">{{ corpOutput.idNum || '-' }}</el-descriptions-item>
|
||||
<el-descriptions-item label="基准利率"><span class="rate-value">{{ corpOutput.baseLoanRate || '-' }}</span> %</el-descriptions-item>
|
||||
<el-descriptions-item label="还款方式">{{ corpOutput.repayMethod || '-' }}</el-descriptions-item>
|
||||
<el-descriptions-item label="借款期限">{{ corpOutput.loanTerm || '-' }}</el-descriptions-item>
|
||||
</el-descriptions>
|
||||
</div>
|
||||
|
||||
@@ -120,7 +123,13 @@
|
||||
<h4 class="section-title">测算结果</h4>
|
||||
<el-descriptions :column="2" border size="small">
|
||||
<el-descriptions-item label="浮动BP"><span class="total-bp-value">{{ corpOutput.totalBp || '-' }}</span></el-descriptions-item>
|
||||
<el-descriptions-item label="基准利率"><span class="rate-value">{{ corpOutput.baseLoanRate || '-' }}</span> %</el-descriptions-item>
|
||||
<el-descriptions-item label="测算利率"><span class="calculate-rate">{{ corpOutput.calculateRate || '-' }}</span> %</el-descriptions-item>
|
||||
<el-descriptions-item label="历史利率">{{ corpOutput.loanRateHistory || '-' }}</el-descriptions-item>
|
||||
<el-descriptions-item label="产品最低利率下限">{{ corpOutput.minRateProduct || '-' }}</el-descriptions-item>
|
||||
<el-descriptions-item label="平滑幅度">{{ corpOutput.smoothRange || '-' }}</el-descriptions-item>
|
||||
<el-descriptions-item label="最终测算利率"><span class="calculate-rate">{{ corpOutput.finalCalculateRate || '-' }}</span> %</el-descriptions-item>
|
||||
<el-descriptions-item label="参考利率"><span class="calculate-rate">{{ corpOutput.referenceRate || '-' }}</span> %</el-descriptions-item>
|
||||
</el-descriptions>
|
||||
</div>
|
||||
|
||||
@@ -141,7 +150,7 @@
|
||||
<el-descriptions-item label="存款年日均">{{ corpOutput.balanceAvg || '-' }}</el-descriptions-item>
|
||||
<el-descriptions-item label="贷款年日均">{{ corpOutput.loanAvg || '-' }}</el-descriptions-item>
|
||||
<el-descriptions-item label="派生率">{{ corpOutput.derivationRate || '-' }}</el-descriptions-item>
|
||||
<el-descriptions-item label="TOTAL_BP_贡献度"><span class="total-bp-value">{{ corpOutput.totalBpContribution || '-' }}</span></el-descriptions-item>
|
||||
<el-descriptions-item label="TOTAL_BP_贡献度" :span="2"><span class="total-bp-value">{{ corpOutput.totalBpContribution || '-' }}</span></el-descriptions-item>
|
||||
</el-descriptions>
|
||||
</div>
|
||||
|
||||
@@ -155,47 +164,31 @@
|
||||
<el-descriptions-item label="中间业务_企业_贴现">{{ formatBoolean(corpOutput.midEntDiscount) }}</el-descriptions-item>
|
||||
<el-descriptions-item label="中间业务_企业_电费代扣">{{ formatBoolean(corpOutput.midEntEleDdc) }}</el-descriptions-item>
|
||||
<el-descriptions-item label="中间业务_企业_水费代扣">{{ formatBoolean(corpOutput.midEntWaterDdc) }}</el-descriptions-item>
|
||||
<el-descriptions-item label="中间业务_企业_税务代扣">{{ formatBoolean(corpOutput.midEntTax) }}</el-descriptions-item>
|
||||
<el-descriptions-item label="BP_中间业务"><span class="bp-value">{{ corpOutput.bpMid || '-' }}</span></el-descriptions-item>
|
||||
<el-descriptions-item label="代发工资户数">{{ corpOutput.payroll || '-' }}</el-descriptions-item>
|
||||
<el-descriptions-item label="存量贷款余额">{{ corpOutput.invLoanAmount || '-' }}</el-descriptions-item>
|
||||
<el-descriptions-item label="BP_代发工资"><span class="bp-value">{{ corpOutput.bpPayroll || '-' }}</span></el-descriptions-item>
|
||||
<el-descriptions-item label="TOTAL_BP_关联度"><span class="total-bp-value">{{ corpOutput.totoalBpRelevance || '-' }}</span></el-descriptions-item>
|
||||
</el-descriptions>
|
||||
</div>
|
||||
|
||||
<div class="model-section">
|
||||
<h4 class="section-title">企业类别</h4>
|
||||
<el-descriptions :column="2" border size="small">
|
||||
<el-descriptions-item label="净身企业">{{ formatBoolean(corpOutput.isCleanEnt) }}</el-descriptions-item>
|
||||
<el-descriptions-item label="开立基本结算账户">{{ formatBoolean(corpOutput.hasSettleAcct) }}</el-descriptions-item>
|
||||
<el-descriptions-item label="省农担担保贷款">{{ formatBoolean(corpOutput.isAgriGuar) }}</el-descriptions-item>
|
||||
<el-descriptions-item label="贸易和建筑业企业">{{ formatBoolean(corpOutput.isTradeBuildEnt) }}</el-descriptions-item>
|
||||
<el-descriptions-item label="绿色贷款">{{ formatBoolean(corpOutput.isGreenLoan) }}</el-descriptions-item>
|
||||
<el-descriptions-item label="科技型企业">{{ formatBoolean(corpOutput.isTechEnt) }}</el-descriptions-item>
|
||||
<el-descriptions-item label="BP_企业客户类别"><span class="bp-value">{{ corpOutput.bpEntType || '-' }}</span></el-descriptions-item>
|
||||
<el-descriptions-item label="TOTAL_BP_关联度" :span="2"><span class="total-bp-value">{{ corpOutput.totoalBpRelevance || '-' }}</span></el-descriptions-item>
|
||||
</el-descriptions>
|
||||
</div>
|
||||
|
||||
<div class="model-section">
|
||||
<h4 class="section-title">贷款特征</h4>
|
||||
<h4 class="section-title">风险分析</h4>
|
||||
<el-descriptions :column="2" border size="small">
|
||||
<el-descriptions-item label="贷款期限">{{ corpOutput.loanTerm || '-' }}</el-descriptions-item>
|
||||
<el-descriptions-item label="BP_贷款期限"><span class="bp-value">{{ corpOutput.bpLoanTerm || '-' }}</span></el-descriptions-item>
|
||||
<el-descriptions-item label="申请金额">{{ corpOutput.applyAmt || '-' }}</el-descriptions-item>
|
||||
<el-descriptions-item label="BP_贷款额度"><span class="bp-value">{{ corpOutput.bpLoanAmount || '-' }}</span></el-descriptions-item>
|
||||
<el-descriptions-item label="抵质押类型">{{ corpOutput.collType || '-' }}</el-descriptions-item>
|
||||
<el-descriptions-item label="抵质押物三方所有">{{ formatBoolean(corpOutput.collThirdParty) }}</el-descriptions-item>
|
||||
<el-descriptions-item label="BP_抵押物"><span class="bp-value">{{ corpOutput.bpCollateral || '-' }}</span></el-descriptions-item>
|
||||
</el-descriptions>
|
||||
</div>
|
||||
|
||||
<div class="model-section">
|
||||
<h4 class="section-title">风险度分析</h4>
|
||||
<el-descriptions :column="2" border size="small">
|
||||
<el-descriptions-item label="灰名单客户">{{ formatBoolean(corpOutput.greyCust) }}</el-descriptions-item>
|
||||
<el-descriptions-item label="本金逾期">{{ formatBoolean(corpOutput.prinOverdue) }}</el-descriptions-item>
|
||||
<el-descriptions-item label="利息逾期">{{ formatBoolean(corpOutput.interestOverdue) }}</el-descriptions-item>
|
||||
<el-descriptions-item label="信用卡逾期">{{ formatBoolean(corpOutput.cardOverdue) }}</el-descriptions-item>
|
||||
<el-descriptions-item label="BP_灰名单与逾期"><span class="bp-value">{{ corpOutput.bpGreyOverdue || '-' }}</span></el-descriptions-item>
|
||||
<el-descriptions-item label="TOTAL_BP_风险度"><span class="total-bp-value">{{ corpOutput.totoalBpRisk || '-' }}</span></el-descriptions-item>
|
||||
</el-descriptions>
|
||||
@@ -279,26 +272,22 @@ export default {
|
||||
}
|
||||
}
|
||||
|
||||
// BP 值样式
|
||||
.bp-value {
|
||||
color: #409eff;
|
||||
font-weight: 500;
|
||||
}
|
||||
|
||||
// TOTAL_BP 样式
|
||||
.total-bp-value {
|
||||
color: #e6a23c;
|
||||
font-weight: 600;
|
||||
}
|
||||
|
||||
// 测算利率高亮样式
|
||||
.calculate-rate {
|
||||
color: #f56c6c;
|
||||
font-weight: 600;
|
||||
font-size: 16px;
|
||||
}
|
||||
|
||||
// 利率值样式
|
||||
.rate-value {
|
||||
color: #67c23a;
|
||||
font-weight: 500;
|
||||
|
||||
26
sql/loan_pricing_alter_20260415_repay_method.sql
Normal file
26
sql/loan_pricing_alter_20260415_repay_method.sql
Normal file
@@ -0,0 +1,26 @@
|
||||
-- 对公展示指标字段对齐:补充还款方式与模型输出缺失字段
|
||||
-- 执行库:loan-pricing
|
||||
|
||||
ALTER TABLE `loan_pricing_workflow`
|
||||
ADD COLUMN `repay_method` varchar(20) DEFAULT NULL COMMENT '还款方式: 分期/不分期'
|
||||
AFTER `guar_type`;
|
||||
|
||||
ALTER TABLE `model_corp_output_fields`
|
||||
ADD COLUMN `repay_method` varchar(100) DEFAULT NULL COMMENT '还款方式' AFTER `id_num`,
|
||||
ADD COLUMN `is_trade_build_ent` varchar(100) DEFAULT NULL COMMENT '贸易和建筑业企业' AFTER `has_settle_acct`,
|
||||
ADD COLUMN `loan_rate_history` varchar(100) DEFAULT NULL COMMENT '历史利率' AFTER `calculate_rate`,
|
||||
ADD COLUMN `min_rate_product` varchar(100) DEFAULT NULL COMMENT '产品最低利率下限' AFTER `loan_rate_history`,
|
||||
ADD COLUMN `smooth_range` varchar(100) DEFAULT NULL COMMENT '平滑幅度' AFTER `min_rate_product`,
|
||||
ADD COLUMN `final_calculate_rate` varchar(100) DEFAULT NULL COMMENT '最终测算利率' AFTER `smooth_range`,
|
||||
ADD COLUMN `reference_rate` varchar(100) DEFAULT NULL COMMENT '参考利率' AFTER `final_calculate_rate`;
|
||||
|
||||
|
||||
drop table if exists sys_notice_read;
|
||||
create table sys_notice_read (
|
||||
read_id bigint(20) not null auto_increment comment '已读主键',
|
||||
notice_id int(4) not null comment '公告id',
|
||||
user_id bigint(20) not null comment '用户id',
|
||||
read_time datetime not null comment '阅读时间',
|
||||
primary key (read_id),
|
||||
unique key uk_user_notice (user_id, notice_id) comment '同一用户同一公告只记录一次'
|
||||
) engine=innodb auto_increment=1 comment='公告已读记录表';
|
||||
@@ -746,12 +746,13 @@ CREATE TABLE `loan_pricing_workflow` (
|
||||
`cust_isn` varchar(50) NOT NULL COMMENT '客户内码',
|
||||
`cust_type` varchar(20) NOT NULL COMMENT '客户类型: 个人/企业',
|
||||
`guar_type` varchar(20) NOT NULL COMMENT '担保方式: 信用/保证/抵押/质押',
|
||||
`repay_method` varchar(20) DEFAULT NULL COMMENT '还款方式: 分期/不分期',
|
||||
`mid_per_quick_pay` varchar(10) DEFAULT NULL COMMENT '中间业务_个人_快捷支付: true/false',
|
||||
`mid_per_ele_ddc` varchar(10) DEFAULT NULL COMMENT '中间业务_个人_电费代扣: true/false',
|
||||
`mid_ent_ele_ddc` varchar(10) DEFAULT NULL COMMENT '中间业务_企业_电费代扣: true/false',
|
||||
`mid_ent_water_ddc` varchar(10) DEFAULT NULL COMMENT '中间业务_企业_水费代扣: true/false',
|
||||
`apply_amt` varchar(50) NOT NULL COMMENT '申请金额(元)',
|
||||
`loan_term` varchar(50) DEFAULT NULL COMMENT '贷款期限',
|
||||
`loan_term` varchar(50) DEFAULT NULL COMMENT '借款期限(年)',
|
||||
`is_clean_ent` varchar(10) DEFAULT NULL COMMENT '净身企业: true/false',
|
||||
`has_settle_acct` varchar(10) DEFAULT NULL COMMENT '开立基本结算账户: true/false',
|
||||
`is_manufacturing` varchar(10) DEFAULT NULL COMMENT '制造业企业: true/false',
|
||||
@@ -764,7 +765,7 @@ CREATE TABLE `loan_pricing_workflow` (
|
||||
`loan_purpose` varchar(20) DEFAULT NULL COMMENT '贷款用途: consumer-消费/business-经营',
|
||||
`biz_proof` varchar(10) DEFAULT NULL COMMENT '是否有经营佐证: true/false',
|
||||
`loan_loop` varchar(10) DEFAULT NULL COMMENT '循环功能: true/false(贷款合同是否开通循环功能)',
|
||||
`coll_type` varchar(20) DEFAULT NULL COMMENT '抵质押类型: 一线/一类/二类',
|
||||
`coll_type` varchar(20) DEFAULT NULL COMMENT '抵质押类型: 一类/二类/三类/四类',
|
||||
`coll_third_party` varchar(10) DEFAULT NULL COMMENT '抵质押物是否三方所有: true/false',
|
||||
`loan_rate` varchar(20) DEFAULT NULL COMMENT '贷款利率',
|
||||
`execute_rate` varchar(20) DEFAULT NULL COMMENT '执行利率(%)',
|
||||
@@ -800,6 +801,7 @@ CREATE TABLE `model_corp_output_fields` (
|
||||
`cust_name` varchar(100) DEFAULT NULL COMMENT '客户名称',
|
||||
`id_type` varchar(100) DEFAULT NULL COMMENT '证件类型',
|
||||
`id_num` varchar(100) DEFAULT NULL COMMENT '证件号码',
|
||||
`repay_method` varchar(100) DEFAULT NULL COMMENT '还款方式',
|
||||
`base_loan_rate` varchar(100) DEFAULT NULL COMMENT '基准利率',
|
||||
`is_first_loan` varchar(100) DEFAULT NULL COMMENT '我行首贷客户',
|
||||
`faith_day` varchar(100) DEFAULT NULL COMMENT '用信天数',
|
||||
@@ -824,6 +826,7 @@ CREATE TABLE `model_corp_output_fields` (
|
||||
`bp_payroll` varchar(100) DEFAULT NULL COMMENT 'BP_代发工资',
|
||||
`is_clean_ent` varchar(100) DEFAULT NULL COMMENT '净身企业',
|
||||
`has_settle_acct` varchar(100) DEFAULT NULL COMMENT '开立基本结算账户',
|
||||
`is_trade_build_ent` varchar(100) DEFAULT NULL COMMENT '贸易和建筑业企业',
|
||||
`is_agri_guar` varchar(100) DEFAULT NULL COMMENT '省农担担保贷款',
|
||||
`is_green_loan` varchar(100) DEFAULT NULL COMMENT '绿色贷款',
|
||||
`is_tech_ent` varchar(100) DEFAULT NULL COMMENT '科技型企业',
|
||||
@@ -844,6 +847,11 @@ CREATE TABLE `model_corp_output_fields` (
|
||||
`totoal_bp_risk` varchar(100) DEFAULT NULL COMMENT 'TOTAL_BP_风险度',
|
||||
`total_bp` varchar(100) DEFAULT NULL COMMENT '浮动BP',
|
||||
`calculate_rate` varchar(100) DEFAULT NULL COMMENT '测算利率',
|
||||
`loan_rate_history` varchar(100) DEFAULT NULL COMMENT '历史利率',
|
||||
`min_rate_product` varchar(100) DEFAULT NULL COMMENT '产品最低利率下限',
|
||||
`smooth_range` varchar(100) DEFAULT NULL COMMENT '平滑幅度',
|
||||
`final_calculate_rate` varchar(100) DEFAULT NULL COMMENT '最终测算利率',
|
||||
`reference_rate` varchar(100) DEFAULT NULL COMMENT '参考利率',
|
||||
`create_time` datetime DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
|
||||
PRIMARY KEY (`id`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='客户贷款利率测算表';
|
||||
|
||||
@@ -12,19 +12,19 @@ USE `loan-pricing`;
|
||||
SET FOREIGN_KEY_CHECKS=0;
|
||||
|
||||
DELETE FROM `loan_pricing_workflow`;
|
||||
INSERT INTO `loan_pricing_workflow` (`id`, `serial_num`, `model_output_id`, `org_code`, `run_type`, `cust_isn`, `cust_type`, `guar_type`, `mid_per_quick_pay`, `mid_per_ele_ddc`, `mid_ent_ele_ddc`, `mid_ent_water_ddc`, `apply_amt`, `loan_term`, `is_clean_ent`, `has_settle_acct`, `is_manufacturing`, `is_agri_guar`, `is_tech_ent`, `is_green_loan`, `is_trade_construction`, `is_tax_a`, `is_agri_leading`, `loan_purpose`, `biz_proof`, `loan_loop`, `coll_type`, `coll_third_party`, `loan_rate`, `execute_rate`, `cust_name`, `id_type`, `id_num`, `is_inclusive_finance`, `create_by`, `create_time`, `update_by`, `update_time`) VALUES
|
||||
(1, '20260130160640382', 1, '892000', '1', '1234', '个人', '信用', 'false', 'false', 'false', 'false', '10000000', NULL, 'false', 'false', 'false', 'false', NULL, NULL, NULL, 'false', 'false', NULL, 'false', NULL, NULL, 'false', '11', NULL, NULL, '身份证', NULL, 'false', '若依-admin', '2026-01-30 16:06:40', '若依-admin', '2026-01-30 16:06:41'),
|
||||
(2, '20260130163824202', 1, '892000', '1', '82821892198', '企业', '保证', 'false', 'false', 'false', 'false', '100000', NULL, 'false', 'false', 'false', 'false', NULL, NULL, NULL, 'false', 'false', 'consumer', 'false', NULL, NULL, 'false', '10', '4.5', '吴总', '统一社会信用代码', NULL, 'false', '若依-admin', '2026-01-30 16:38:24', '若依-admin', '2026-01-30 16:39:10'),
|
||||
(3, '20260202140048990', 2, '892000', '1', 'TEST001', '个人', '信用', NULL, NULL, NULL, NULL, '500000', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 'true', 'false', NULL, NULL, NULL, NULL, '张三', '身份证', '110101199001011234', NULL, '若依-admin', '2026-02-02 14:00:49', '若依-admin', '2026-02-02 14:00:50'),
|
||||
(4, '20260202140101592', 3, '892000', '1', 'TEST002', '个人', '质押', NULL, NULL, NULL, NULL, '100000', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, '若依-admin', '2026-02-02 14:01:02', '若依-admin', '2026-02-02 14:01:02'),
|
||||
(5, '20260202140102337', 4, '892000', '1', 'TEST003', '个人', '抵押', NULL, NULL, NULL, NULL, '800000', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 'true', 'true', '一类', 'false', NULL, NULL, '孙七', '身份证', '110101199001011239', NULL, '若依-admin', '2026-02-02 14:01:02', '若依-admin', '2026-02-02 14:01:03'),
|
||||
(6, '20260202140119035', 2, '892000', '1', 'CORP001', '企业', '抵押', NULL, NULL, NULL, NULL, '1000000', '36', NULL, NULL, NULL, 'false', 'true', 'true', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, '测试科技有限公司', '统一社会信用代码', '91110000100000000X', NULL, '若依-admin', '2026-02-02 14:01:19', '若依-admin', '2026-02-02 14:01:19'),
|
||||
(7, '20260202140128799', 3, '892000', '1', 'CORP007', '企业', '信用', NULL, NULL, NULL, NULL, '3000000', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, '若依-admin', '2026-02-02 14:01:29', '若依-admin', '2026-02-02 14:01:29'),
|
||||
(8, '20260202140129480', 4, '892000', '1', 'CORP005', '企业', '保证', NULL, NULL, NULL, NULL, '2000000', '60', NULL, NULL, NULL, 'true', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, '农业科技有限公司', '统一社会信用代码', '91110000100000005X', NULL, '若依-admin', '2026-02-02 14:01:29', '若依-admin', '2026-02-02 14:01:30'),
|
||||
(9, '20260202140138984', 5, '892000', '1', 'OLD001', '个人', '信用', NULL, NULL, NULL, NULL, '500000', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 'true', 'false', NULL, NULL, '4.5', NULL, '测试用户1', '身份证', NULL, NULL, '若依-admin', '2026-02-02 14:01:39', '若依-admin', '2026-02-02 14:01:39'),
|
||||
(10, '20260202140145591', 5, '892000', '1', 'OLD002', '企业', '抵押', NULL, NULL, NULL, NULL, '1000000', '36', NULL, NULL, NULL, 'false', 'true', 'true', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, '4.0', NULL, '测试企业1', '统一社会信用代码', NULL, NULL, '若依-admin', '2026-02-02 14:01:46', '若依-admin', '2026-02-02 14:01:46'),
|
||||
(11, '20260202144250835', 6, '892000', '1', '1234567', '个人', '信用', NULL, NULL, NULL, NULL, '100000', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 'true', 'true', '一线', 'true', NULL, NULL, '个人测试', '身份证', '330103199912311231', NULL, '若依-admin', '2026-02-02 14:42:51', '若依-admin', '2026-02-02 14:42:51'),
|
||||
(12, '20260202151445788', 6, '892000', '1', 'test1234', '企业', '信用', NULL, NULL, NULL, NULL, '200000', '23', NULL, NULL, NULL, 'true', 'true', 'true', 'true', NULL, NULL, NULL, NULL, NULL, '一线', 'true', NULL, NULL, 'test1234', '统一社会信用代码', '91110000100000000X', NULL, '若依-admin', '2026-02-02 15:14:46', '若依-admin', '2026-02-02 15:14:46');
|
||||
INSERT INTO `loan_pricing_workflow` (`id`, `serial_num`, `model_output_id`, `org_code`, `run_type`, `cust_isn`, `cust_type`, `guar_type`, `repay_method`, `mid_per_quick_pay`, `mid_per_ele_ddc`, `mid_ent_ele_ddc`, `mid_ent_water_ddc`, `apply_amt`, `loan_term`, `is_clean_ent`, `has_settle_acct`, `is_manufacturing`, `is_agri_guar`, `is_tech_ent`, `is_green_loan`, `is_trade_construction`, `is_tax_a`, `is_agri_leading`, `loan_purpose`, `biz_proof`, `loan_loop`, `coll_type`, `coll_third_party`, `loan_rate`, `execute_rate`, `cust_name`, `id_type`, `id_num`, `is_inclusive_finance`, `create_by`, `create_time`, `update_by`, `update_time`) VALUES
|
||||
(1, '20260130160640382', 1, '892000', '1', '1234', '个人', '信用', NULL, 'false', 'false', 'false', 'false', '10000000', NULL, 'false', 'false', 'false', 'false', NULL, NULL, NULL, 'false', 'false', NULL, 'false', NULL, NULL, 'false', '11', NULL, NULL, '身份证', NULL, 'false', '若依-admin', '2026-01-30 16:06:40', '若依-admin', '2026-01-30 16:06:41'),
|
||||
(2, '20260130163824202', 1, '892000', '1', '82821892198', '企业', '保证', '分期', 'false', 'false', 'false', 'false', '100000', NULL, 'false', 'false', 'false', 'false', NULL, NULL, NULL, 'false', 'false', 'consumer', 'false', NULL, NULL, 'false', '10', '4.5', '吴总', '统一社会信用代码', NULL, 'false', '若依-admin', '2026-01-30 16:38:24', '若依-admin', '2026-01-30 16:39:10'),
|
||||
(3, '20260202140048990', 2, '892000', '1', 'TEST001', '个人', '信用', NULL, NULL, NULL, NULL, NULL, '500000', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 'true', 'false', NULL, NULL, NULL, NULL, '张三', '身份证', '110101199001011234', NULL, '若依-admin', '2026-02-02 14:00:49', '若依-admin', '2026-02-02 14:00:50'),
|
||||
(4, '20260202140101592', 3, '892000', '1', 'TEST002', '个人', '质押', NULL, NULL, NULL, NULL, NULL, '100000', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, '若依-admin', '2026-02-02 14:01:02', '若依-admin', '2026-02-02 14:01:02'),
|
||||
(5, '20260202140102337', 4, '892000', '1', 'TEST003', '个人', '抵押', NULL, NULL, NULL, NULL, NULL, '800000', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 'true', 'true', '一类', 'false', NULL, NULL, '孙七', '身份证', '110101199001011239', NULL, '若依-admin', '2026-02-02 14:01:02', '若依-admin', '2026-02-02 14:01:03'),
|
||||
(6, '20260202140119035', 2, '892000', '1', 'CORP001', '企业', '抵押', '分期', NULL, NULL, NULL, NULL, '1000000', '6', NULL, NULL, NULL, 'false', 'true', '1', '0', NULL, NULL, NULL, NULL, NULL, '四类', '1', NULL, NULL, '测试科技有限公司', '统一社会信用代码', '91110000100000000X', NULL, '若依-admin', '2026-02-02 14:01:19', '若依-admin', '2026-02-02 14:01:19'),
|
||||
(7, '20260202140128799', 3, '892000', '1', 'CORP007', '企业', '信用', '不分期', NULL, NULL, NULL, NULL, '3000000', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, '若依-admin', '2026-02-02 14:01:29', '若依-admin', '2026-02-02 14:01:29'),
|
||||
(8, '20260202140129480', 4, '892000', '1', 'CORP005', '企业', '保证', '分期', NULL, NULL, NULL, NULL, '2000000', '6', NULL, NULL, NULL, 'true', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, '农业科技有限公司', '统一社会信用代码', '91110000100000005X', NULL, '若依-admin', '2026-02-02 14:01:29', '若依-admin', '2026-02-02 14:01:30'),
|
||||
(9, '20260202140138984', 5, '892000', '1', 'OLD001', '个人', '信用', NULL, NULL, NULL, NULL, NULL, '500000', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 'true', 'false', NULL, NULL, '4.5', NULL, '测试用户1', '身份证', NULL, NULL, '若依-admin', '2026-02-02 14:01:39', '若依-admin', '2026-02-02 14:01:39'),
|
||||
(10, '20260202140145591', 5, '892000', '1', 'OLD002', '企业', '抵押', '分期', NULL, NULL, NULL, NULL, '1000000', '6', NULL, NULL, NULL, 'false', 'true', '1', '0', NULL, NULL, NULL, NULL, NULL, '四类', '1', '4.0', NULL, '测试企业1', '统一社会信用代码', NULL, NULL, '若依-admin', '2026-02-02 14:01:46', '若依-admin', '2026-02-02 14:01:46'),
|
||||
(11, '20260202144250835', 6, '892000', '1', '1234567', '个人', '信用', NULL, NULL, NULL, NULL, NULL, '100000', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 'true', 'true', '一线', 'true', NULL, NULL, '个人测试', '身份证', '330103199912311231', NULL, '若依-admin', '2026-02-02 14:42:51', '若依-admin', '2026-02-02 14:42:51'),
|
||||
(12, '20260202151445788', 6, '892000', '1', 'test1234', '企业', '信用', '不分期', NULL, NULL, NULL, NULL, '200000', '2', NULL, NULL, NULL, 'true', 'true', '1', '1', NULL, NULL, NULL, NULL, NULL, '四类', '1', NULL, NULL, 'test1234', '统一社会信用代码', '91110000100000000X', NULL, '若依-admin', '2026-02-02 15:14:46', '若依-admin', '2026-02-02 15:14:46');
|
||||
|
||||
DELETE FROM `model_corp_output_fields`;
|
||||
INSERT INTO `model_corp_output_fields` (`id`, `cust_isn`, `cust_type`, `guar_type`, `cust_name`, `id_type`, `id_num`, `base_loan_rate`, `is_first_loan`, `faith_day`, `bp_first_loan`, `bp_age_loan`, `total_bp_loyalty`, `balance_avg`, `loan_avg`, `derivation_rate`, `total_bp_contribution`, `mid_ent_connect`, `mid_ent_effect`, `mid_ent_inter`, `mid_ent_accept`, `mid_ent_discount`, `mid_ent_ele_ddc`, `mid_ent_water_ddc`, `mid_ent_tax`, `bp_mid`, `payroll`, `inv_loan_amount`, `bp_payroll`, `is_clean_ent`, `has_settle_acct`, `is_agri_guar`, `is_green_loan`, `is_tech_ent`, `bp_ent_type`, `totoal_bp_relevance`, `loan_term`, `bp_loan_term`, `apply_amt`, `bp_loan_amount`, `coll_type`, `coll_third_party`, `bp_collateral`, `grey_cust`, `prin_overdue`, `interest_overdue`, `card_overdue`, `bp_grey_overdue`, `totoal_bp_risk`, `total_bp`, `calculate_rate`, `create_time`) VALUES
|
||||
|
||||
@@ -328,12 +328,13 @@ CREATE TABLE `loan_pricing_workflow` (
|
||||
`cust_isn` varchar(50) NOT NULL COMMENT '客户内码',
|
||||
`cust_type` varchar(20) NOT NULL COMMENT '客户类型: 个人/企业',
|
||||
`guar_type` varchar(20) NOT NULL COMMENT '担保方式: 信用/保证/抵押/质押',
|
||||
`repay_method` varchar(20) DEFAULT NULL COMMENT '还款方式: 分期/不分期',
|
||||
`mid_per_quick_pay` varchar(10) DEFAULT NULL COMMENT '中间业务_个人_快捷支付: true/false',
|
||||
`mid_per_ele_ddc` varchar(10) DEFAULT NULL COMMENT '中间业务_个人_电费代扣: true/false',
|
||||
`mid_ent_ele_ddc` varchar(10) DEFAULT NULL COMMENT '中间业务_企业_电费代扣: true/false',
|
||||
`mid_ent_water_ddc` varchar(10) DEFAULT NULL COMMENT '中间业务_企业_水费代扣: true/false',
|
||||
`apply_amt` varchar(50) NOT NULL COMMENT '申请金额(元)',
|
||||
`loan_term` varchar(50) DEFAULT NULL COMMENT '贷款期限',
|
||||
`loan_term` varchar(50) DEFAULT NULL COMMENT '借款期限(年)',
|
||||
`is_clean_ent` varchar(10) DEFAULT NULL COMMENT '净身企业: true/false',
|
||||
`has_settle_acct` varchar(10) DEFAULT NULL COMMENT '开立基本结算账户: true/false',
|
||||
`is_manufacturing` varchar(10) DEFAULT NULL COMMENT '制造业企业: true/false',
|
||||
@@ -346,7 +347,7 @@ CREATE TABLE `loan_pricing_workflow` (
|
||||
`loan_purpose` varchar(20) DEFAULT NULL COMMENT '贷款用途: consumer-消费/business-经营',
|
||||
`biz_proof` varchar(10) DEFAULT NULL COMMENT '是否有经营佐证: true/false',
|
||||
`loan_loop` varchar(10) DEFAULT NULL COMMENT '循环功能: true/false(贷款合同是否开通循环功能)',
|
||||
`coll_type` varchar(20) DEFAULT NULL COMMENT '抵质押类型: 一线/一类/二类',
|
||||
`coll_type` varchar(20) DEFAULT NULL COMMENT '抵质押类型: 一类/二类/三类/四类',
|
||||
`coll_third_party` varchar(10) DEFAULT NULL COMMENT '抵质押物是否三方所有: true/false',
|
||||
`loan_rate` varchar(20) DEFAULT NULL COMMENT '贷款利率',
|
||||
`execute_rate` varchar(20) DEFAULT NULL COMMENT '执行利率(%)',
|
||||
@@ -382,6 +383,7 @@ CREATE TABLE `model_corp_output_fields` (
|
||||
`cust_name` varchar(100) DEFAULT NULL COMMENT '客户名称',
|
||||
`id_type` varchar(100) DEFAULT NULL COMMENT '证件类型',
|
||||
`id_num` varchar(100) DEFAULT NULL COMMENT '证件号码',
|
||||
`repay_method` varchar(100) DEFAULT NULL COMMENT '还款方式',
|
||||
`base_loan_rate` varchar(100) DEFAULT NULL COMMENT '基准利率',
|
||||
`is_first_loan` varchar(100) DEFAULT NULL COMMENT '我行首贷客户',
|
||||
`faith_day` varchar(100) DEFAULT NULL COMMENT '用信天数',
|
||||
@@ -406,6 +408,7 @@ CREATE TABLE `model_corp_output_fields` (
|
||||
`bp_payroll` varchar(100) DEFAULT NULL COMMENT 'BP_代发工资',
|
||||
`is_clean_ent` varchar(100) DEFAULT NULL COMMENT '净身企业',
|
||||
`has_settle_acct` varchar(100) DEFAULT NULL COMMENT '开立基本结算账户',
|
||||
`is_trade_build_ent` varchar(100) DEFAULT NULL COMMENT '贸易和建筑业企业',
|
||||
`is_agri_guar` varchar(100) DEFAULT NULL COMMENT '省农担担保贷款',
|
||||
`is_green_loan` varchar(100) DEFAULT NULL COMMENT '绿色贷款',
|
||||
`is_tech_ent` varchar(100) DEFAULT NULL COMMENT '科技型企业',
|
||||
@@ -426,6 +429,11 @@ CREATE TABLE `model_corp_output_fields` (
|
||||
`totoal_bp_risk` varchar(100) DEFAULT NULL COMMENT 'TOTAL_BP_风险度',
|
||||
`total_bp` varchar(100) DEFAULT NULL COMMENT '浮动BP',
|
||||
`calculate_rate` varchar(100) DEFAULT NULL COMMENT '测算利率',
|
||||
`loan_rate_history` varchar(100) DEFAULT NULL COMMENT '历史利率',
|
||||
`min_rate_product` varchar(100) DEFAULT NULL COMMENT '产品最低利率下限',
|
||||
`smooth_range` varchar(100) DEFAULT NULL COMMENT '平滑幅度',
|
||||
`final_calculate_rate` varchar(100) DEFAULT NULL COMMENT '最终测算利率',
|
||||
`reference_rate` varchar(100) DEFAULT NULL COMMENT '参考利率',
|
||||
`create_time` datetime DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
|
||||
PRIMARY KEY (`id`)
|
||||
) ENGINE=InnoDB AUTO_INCREMENT=7 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='客户贷款利率测算表';
|
||||
|
||||
@@ -9,11 +9,13 @@ CREATE TABLE `loan_pricing_workflow` (
|
||||
`cust_isn` varchar(50) NOT NULL COMMENT '客户内码',
|
||||
`cust_type` varchar(20) NOT NULL COMMENT '客户类型: 个人/企业',
|
||||
`guar_type` varchar(20) NOT NULL COMMENT '担保方式: 信用/保证/抵押/质押',
|
||||
`repay_method` varchar(20) DEFAULT NULL COMMENT '还款方式: 分期/不分期',
|
||||
`mid_per_quick_pay` varchar(10) DEFAULT NULL COMMENT '中间业务_个人_快捷支付: true/false',
|
||||
`mid_per_ele_ddc` varchar(10) DEFAULT NULL COMMENT '中间业务_个人_电费代扣: true/false',
|
||||
`mid_ent_ele_ddc` varchar(10) DEFAULT NULL COMMENT '中间业务_企业_电费代扣: true/false',
|
||||
`mid_ent_water_ddc` varchar(10) DEFAULT NULL COMMENT '中间业务_企业_水费代扣: true/false',
|
||||
`apply_amt` varchar(50) NOT NULL COMMENT '申请金额(元)',
|
||||
`loan_term` varchar(50) DEFAULT NULL COMMENT '借款期限(年)',
|
||||
`is_clean_ent` varchar(10) DEFAULT NULL COMMENT '净身企业: true/false',
|
||||
`has_settle_acct` varchar(10) DEFAULT NULL COMMENT '开立基本结算账户: true/false',
|
||||
`is_manufacturing` varchar(10) DEFAULT NULL COMMENT '制造业企业: true/false',
|
||||
@@ -22,12 +24,13 @@ CREATE TABLE `loan_pricing_workflow` (
|
||||
`is_agri_leading` varchar(10) DEFAULT NULL COMMENT '是否县级及以上农业龙头企业: true/false',
|
||||
`loan_purpose` varchar(20) DEFAULT NULL COMMENT '贷款用途: consumer-消费/business-经营',
|
||||
`biz_proof` varchar(10) DEFAULT NULL COMMENT '是否有经营佐证: true/false',
|
||||
`coll_type` varchar(20) DEFAULT NULL COMMENT '抵质押类型: 一线/一类/二类',
|
||||
`coll_type` varchar(20) DEFAULT NULL COMMENT '抵质押类型: 一类/二类/三类/四类',
|
||||
`coll_third_party` varchar(10) DEFAULT NULL COMMENT '抵质押物是否三方所有: true/false',
|
||||
`loan_rate` varchar(20) NOT NULL COMMENT '贷款利率',
|
||||
`execute_rate` varchar(20) DEFAULT NULL COMMENT '执行利率(%)',
|
||||
`cust_name` varchar(100) DEFAULT NULL COMMENT '客户名称',
|
||||
`id_type` varchar(50) DEFAULT NULL COMMENT '证件类型',
|
||||
`id_num` varchar(100) DEFAULT NULL COMMENT '证件号码',
|
||||
`is_inclusive_finance` varchar(10) DEFAULT NULL COMMENT '是否普惠小微借款人: true/false',
|
||||
`create_by` varchar(64) DEFAULT '' COMMENT '创建者',
|
||||
`create_time` datetime DEFAULT NULL COMMENT '创建时间',
|
||||
|
||||
@@ -10,6 +10,7 @@ CREATE TABLE `model_corp_output_fields` (
|
||||
`cust_name` VARCHAR(100) COMMENT '客户名称',
|
||||
`id_type` VARCHAR(100) COMMENT '证件类型',
|
||||
`id_num` VARCHAR(100) COMMENT '证件号码',
|
||||
`repay_method` VARCHAR(100) COMMENT '还款方式',
|
||||
`base_loan_rate` VARCHAR(100) COMMENT '基准利率',
|
||||
`is_first_loan` VARCHAR(100) COMMENT '我行首贷客户',
|
||||
`faith_day` VARCHAR(100) COMMENT '用信天数',
|
||||
@@ -34,6 +35,7 @@ CREATE TABLE `model_corp_output_fields` (
|
||||
`bp_payroll` VARCHAR(100) COMMENT 'BP_代发工资',
|
||||
`is_clean_ent` VARCHAR(100) COMMENT '净身企业',
|
||||
`has_settle_acct` VARCHAR(100) COMMENT '开立基本结算账户',
|
||||
`is_trade_build_ent` VARCHAR(100) COMMENT '贸易和建筑业企业',
|
||||
`is_agri_guar` VARCHAR(100) COMMENT '省农担担保贷款',
|
||||
`is_green_loan` VARCHAR(100) COMMENT '绿色贷款',
|
||||
`is_tech_ent` VARCHAR(100) COMMENT '科技型企业',
|
||||
@@ -54,6 +56,11 @@ CREATE TABLE `model_corp_output_fields` (
|
||||
`totoal_bp_risk` VARCHAR(100) COMMENT 'TOTAL_BP_风险度',
|
||||
`total_bp` VARCHAR(100) COMMENT '浮动BP',
|
||||
`calculate_rate` VARCHAR(100) COMMENT '测算利率',
|
||||
`loan_rate_history` VARCHAR(100) COMMENT '历史利率',
|
||||
`min_rate_product` VARCHAR(100) COMMENT '产品最低利率下限',
|
||||
`smooth_range` VARCHAR(100) COMMENT '平滑幅度',
|
||||
`final_calculate_rate` VARCHAR(100) COMMENT '最终测算利率',
|
||||
`reference_rate` VARCHAR(100) COMMENT '参考利率',
|
||||
`create_time` DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
|
||||
PRIMARY KEY (`id`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='客户贷款利率测算表';
|
||||
@@ -34,12 +34,14 @@ Content-Type: application/json
|
||||
"custName": "测试科技有限公司",
|
||||
"idType": "统一社会信用代码",
|
||||
"idNum": "91110000100000000X",
|
||||
"repayMethod": "分期",
|
||||
"guarType": "抵押",
|
||||
"applyAmt": "1000000",
|
||||
"loanTerm": "36",
|
||||
"isAgriGuar": "false",
|
||||
"isGreenLoan": "true",
|
||||
"isTechEnt": "true"
|
||||
"loanTerm": "6",
|
||||
"isGreenLoan": "1",
|
||||
"isTradeBuildEnt": "0",
|
||||
"collType": "四类",
|
||||
"collThirdParty": "1"
|
||||
}
|
||||
|
||||
> {%
|
||||
@@ -48,7 +50,7 @@ Content-Type: application/json
|
||||
client.assert(response.body.code === 200, "Response code is 200");
|
||||
client.assert(response.body.data.custType === "企业", "Customer type is 企业");
|
||||
client.assert(response.body.data.serialNum !== null, "Serial number is generated");
|
||||
client.assert(response.body.data.loanTerm === "36", "Loan term is correct");
|
||||
client.assert(response.body.data.loanTerm === "6", "Loan term is correct");
|
||||
});
|
||||
%}
|
||||
|
||||
@@ -142,7 +144,7 @@ Content-Type: application/json
|
||||
%}
|
||||
|
||||
### ============================================================
|
||||
### 7. 企业客户发起 - 包含省农担担保贷款标识
|
||||
### 7. 企业客户发起 - 缺少必填字段 repayMethod
|
||||
### ============================================================
|
||||
POST http://localhost:63310/loanPricing/workflow/create/corporate
|
||||
Authorization: Bearer {{token}}
|
||||
@@ -155,15 +157,13 @@ Content-Type: application/json
|
||||
"idNum": "91110000100000005X",
|
||||
"guarType": "保证",
|
||||
"applyAmt": "2000000",
|
||||
"loanTerm": "60",
|
||||
"isAgriGuar": "true"
|
||||
"loanTerm": "6"
|
||||
}
|
||||
|
||||
> {%
|
||||
client.test("Corporate loan with agricultural guarantee", function () {
|
||||
client.test("Missing repayMethod validation works", function () {
|
||||
client.assert(response.status === 200, "Response status is 200");
|
||||
client.assert(response.body.code === 200, "Response code is 200");
|
||||
client.assert(response.body.data.isAgriGuar === "true", "Agricultural guarantee is set");
|
||||
client.assert(response.body.code === 500, "Response code indicates validation error");
|
||||
});
|
||||
%}
|
||||
|
||||
@@ -179,17 +179,21 @@ Content-Type: application/json
|
||||
"custName": "建筑工程有限公司",
|
||||
"idType": "统一社会信用代码",
|
||||
"idNum": "91110000100000006X",
|
||||
"repayMethod": "不分期",
|
||||
"guarType": "质押",
|
||||
"applyAmt": "1500000",
|
||||
"loanTerm": "24",
|
||||
"isTradeConstruction": "true"
|
||||
"loanTerm": "4",
|
||||
"isTradeBuildEnt": "1",
|
||||
"isGreenLoan": "0",
|
||||
"collType": "三类",
|
||||
"collThirdParty": "0"
|
||||
}
|
||||
|
||||
> {%
|
||||
client.test("Corporate loan for trade/construction", function () {
|
||||
client.assert(response.status === 200, "Response status is 200");
|
||||
client.assert(response.body.code === 200, "Response code is 200");
|
||||
client.assert(response.body.data.isTradeConstruction === "true", "Trade/construction flag is set");
|
||||
client.assert(response.body.data.isTradeBuildEnt === "1", "Trade/construction flag is set");
|
||||
});
|
||||
%}
|
||||
|
||||
@@ -205,15 +209,14 @@ Content-Type: application/json
|
||||
"custName": "科技创新有限公司",
|
||||
"idType": "统一社会信用代码",
|
||||
"idNum": "91110000100000007X",
|
||||
"repayMethod": "分期",
|
||||
"guarType": "信用",
|
||||
"applyAmt": "3000000",
|
||||
"loanTerm": "12",
|
||||
"isAgriGuar": "false",
|
||||
"isGreenLoan": "true",
|
||||
"isTechEnt": "true",
|
||||
"isTradeConstruction": "false",
|
||||
"loanTerm": "1",
|
||||
"isGreenLoan": "1",
|
||||
"isTradeBuildEnt": "0",
|
||||
"collType": "一类",
|
||||
"collThirdParty": "false"
|
||||
"collThirdParty": "0"
|
||||
}
|
||||
|
||||
> {%
|
||||
|
||||
@@ -77,12 +77,14 @@ RESPONSE=$(curl -s -X POST "$CORPORATE_CREATE_URL" \
|
||||
"custName": "测试科技有限公司",
|
||||
"idType": "统一社会信用代码",
|
||||
"idNum": "91110000100000000X",
|
||||
"repayMethod": "分期",
|
||||
"guarType": "抵押",
|
||||
"applyAmt": "1000000",
|
||||
"loanTerm": "36",
|
||||
"isAgriGuar": "false",
|
||||
"isGreenLoan": "true",
|
||||
"isTechEnt": "true"
|
||||
"loanTerm": "6",
|
||||
"isGreenLoan": "1",
|
||||
"isTradeBuildEnt": "0",
|
||||
"collType": "四类",
|
||||
"collThirdParty": "1"
|
||||
}')
|
||||
|
||||
# 检查响应
|
||||
@@ -204,11 +206,11 @@ else
|
||||
fi
|
||||
|
||||
# ============================================================
|
||||
# 步骤 7: 测试省农担担保贷款标识
|
||||
# 步骤 7: 测试缺少必填字段 repayMethod
|
||||
# ============================================================
|
||||
echo ""
|
||||
echo "=========================================="
|
||||
echo "步骤 7: 测试省农担担保贷款标识"
|
||||
echo "步骤 7: 测试缺少必填字段 repayMethod"
|
||||
echo "=========================================="
|
||||
|
||||
RESPONSE=$(curl -s -X POST "$CORPORATE_CREATE_URL" \
|
||||
@@ -221,18 +223,14 @@ RESPONSE=$(curl -s -X POST "$CORPORATE_CREATE_URL" \
|
||||
"idNum": "91110000100000005X",
|
||||
"guarType": "保证",
|
||||
"applyAmt": "2000000",
|
||||
"loanTerm": "60",
|
||||
"isAgriGuar": "true"
|
||||
"loanTerm": "6"
|
||||
}')
|
||||
|
||||
CODE=$(echo "$RESPONSE" | grep -o '"code":[0-9]*' | cut -d':' -f2)
|
||||
IS_AGRI_GUAR=$(echo "$RESPONSE" | grep -o '"isAgriGuar":"[^"]*"' | cut -d'"' -f4)
|
||||
|
||||
if [ "$CODE" == "200" ] && [ "$IS_AGRI_GUAR" == "true" ]; then
|
||||
print_result "省农担担保贷款标识正确保存" "0"
|
||||
echo " 省农担标识: $IS_AGRI_GUAR"
|
||||
if [ "$CODE" == "500" ]; then
|
||||
print_result "缺少 repayMethod 字段验证" "0"
|
||||
else
|
||||
print_result "省农担担保贷款标识正确保存" "1"
|
||||
print_result "缺少 repayMethod 字段验证" "1"
|
||||
fi
|
||||
|
||||
# ============================================================
|
||||
@@ -251,28 +249,32 @@ RESPONSE=$(curl -s -X POST "$CORPORATE_CREATE_URL" \
|
||||
"custName": "建筑工程有限公司",
|
||||
"idType": "统一社会信用代码",
|
||||
"idNum": "91110000100000006X",
|
||||
"repayMethod": "不分期",
|
||||
"guarType": "质押",
|
||||
"applyAmt": "1500000",
|
||||
"loanTerm": "24",
|
||||
"isTradeConstruction": "true"
|
||||
"loanTerm": "4",
|
||||
"isTradeBuildEnt": "1",
|
||||
"isGreenLoan": "0",
|
||||
"collType": "三类",
|
||||
"collThirdParty": "0"
|
||||
}')
|
||||
|
||||
CODE=$(echo "$RESPONSE" | grep -o '"code":[0-9]*' | cut -d':' -f2)
|
||||
IS_TRADE_CONSTRUCTION=$(echo "$RESPONSE" | grep -o '"isTradeConstruction":"[^"]*"' | cut -d'"' -f4)
|
||||
IS_TRADE_BUILD_ENT=$(echo "$RESPONSE" | grep -o '"isTradeBuildEnt":"[^"]*"' | cut -d'"' -f4)
|
||||
|
||||
if [ "$CODE" == "200" ] && [ "$IS_TRADE_CONSTRUCTION" == "true" ]; then
|
||||
if [ "$CODE" == "200" ] && [ "$IS_TRADE_BUILD_ENT" == "1" ]; then
|
||||
print_result "贸易和建筑业企业标识正确保存" "0"
|
||||
echo " 贸易建筑标识: $IS_TRADE_CONSTRUCTION"
|
||||
echo " 贸易建筑标识: $IS_TRADE_BUILD_ENT"
|
||||
else
|
||||
print_result "贸易和建筑业企业标识正确保存" "1"
|
||||
fi
|
||||
|
||||
# ============================================================
|
||||
# 步骤 9: 测试最小必填字段
|
||||
# 步骤 9: 测试完整字段场景
|
||||
# ============================================================
|
||||
echo ""
|
||||
echo "=========================================="
|
||||
echo "步骤 9: 测试最小必填字段"
|
||||
echo "步骤 9: 测试完整字段场景"
|
||||
echo "=========================================="
|
||||
|
||||
RESPONSE=$(curl -s -X POST "$CORPORATE_CREATE_URL" \
|
||||
@@ -280,15 +282,24 @@ RESPONSE=$(curl -s -X POST "$CORPORATE_CREATE_URL" \
|
||||
-H "Content-Type: application/json" \
|
||||
-d '{
|
||||
"custIsn": "CORP007",
|
||||
"custName": "科技创新有限公司",
|
||||
"idType": "统一社会信用代码",
|
||||
"idNum": "91110000100000007X",
|
||||
"repayMethod": "分期",
|
||||
"guarType": "信用",
|
||||
"applyAmt": "3000000"
|
||||
"applyAmt": "3000000",
|
||||
"loanTerm": "1",
|
||||
"isGreenLoan": "1",
|
||||
"isTradeBuildEnt": "0",
|
||||
"collType": "一类",
|
||||
"collThirdParty": "0"
|
||||
}')
|
||||
|
||||
CODE=$(echo "$RESPONSE" | grep -o '"code":[0-9]*' | cut -d':' -f2)
|
||||
if [ "$CODE" == "200" ]; then
|
||||
print_result "最小必填字段测试" "0"
|
||||
print_result "完整字段场景测试" "0"
|
||||
else
|
||||
print_result "最小必填字段测试" "1"
|
||||
print_result "完整字段场景测试" "1"
|
||||
fi
|
||||
|
||||
# ============================================================
|
||||
|
||||
Reference in New Issue
Block a user