对公修改
This commit is contained in:
3
.gitignore
vendored
3
.gitignore
vendored
@@ -47,3 +47,6 @@ nbdist/
|
|||||||
!*/build/*.xml
|
!*/build/*.xml
|
||||||
|
|
||||||
logs/
|
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 = "客户内码不能为空")
|
@NotBlank(message = "客户内码不能为空")
|
||||||
private String custIsn;
|
private String custIsn;
|
||||||
|
|
||||||
|
private String custType;
|
||||||
|
|
||||||
private String custName;
|
private String custName;
|
||||||
|
|
||||||
private String idType;
|
private String idType;
|
||||||
|
|
||||||
private String idNum;
|
private String idNum;
|
||||||
|
|
||||||
|
@NotBlank(message = "还款方式不能为空")
|
||||||
|
@Pattern(regexp = "^(分期|不分期)$", message = "还款方式必须是:分期、不分期之一")
|
||||||
|
private String repayMethod;
|
||||||
|
|
||||||
@NotBlank(message = "担保方式不能为空")
|
@NotBlank(message = "担保方式不能为空")
|
||||||
@Pattern(regexp = "^(信用|保证|抵押|质押)$", message = "担保方式必须是:信用、保证、抵押、质押之一")
|
@Pattern(regexp = "^(信用|保证|抵押|质押)$", message = "担保方式必须是:信用、保证、抵押、质押之一")
|
||||||
private String guarType;
|
private String guarType;
|
||||||
@@ -32,16 +38,16 @@ public class CorporateLoanPricingCreateDTO implements Serializable {
|
|||||||
@NotBlank(message = "申请金额不能为空")
|
@NotBlank(message = "申请金额不能为空")
|
||||||
private String applyAmt;
|
private String applyAmt;
|
||||||
|
|
||||||
|
@NotBlank(message = "借款期限不能为空")
|
||||||
|
@Pattern(regexp = "^[1-6]$", message = "借款期限必须是 1 到 6 年")
|
||||||
private String loanTerm;
|
private String loanTerm;
|
||||||
|
|
||||||
private String isAgriGuar;
|
|
||||||
|
|
||||||
private String isGreenLoan;
|
private String isGreenLoan;
|
||||||
|
|
||||||
private String isTechEnt;
|
private String isTradeBuildEnt;
|
||||||
|
|
||||||
private String isTradeConstruction;
|
|
||||||
|
|
||||||
|
@NotBlank(message = "抵质押类型不能为空")
|
||||||
|
@Pattern(regexp = "^(一类|二类|三类|四类)$", message = "抵质押类型必须是:一类、二类、三类、四类之一")
|
||||||
private String collType;
|
private String collType;
|
||||||
|
|
||||||
private String collThirdParty;
|
private String collThirdParty;
|
||||||
|
|||||||
@@ -43,6 +43,12 @@ public class ModelInvokeDTO {
|
|||||||
*/
|
*/
|
||||||
private String guarType;
|
private String guarType;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 还款方式(必填)
|
||||||
|
* 可选值:分期/不分期
|
||||||
|
*/
|
||||||
|
private String repayMethod;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 中间业务_个人_快捷支付(非必填)
|
* 中间业务_个人_快捷支付(非必填)
|
||||||
* 可选值:true/false
|
* 可选值:true/false
|
||||||
@@ -103,6 +109,18 @@ public class ModelInvokeDTO {
|
|||||||
*/
|
*/
|
||||||
private String isAgriGuar;
|
private String isAgriGuar;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 绿色贷款(非必填)
|
||||||
|
* 可选值:0/1
|
||||||
|
*/
|
||||||
|
private String isGreenLoan;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 贸易和建筑业企业(非必填)
|
||||||
|
* 可选值:0/1
|
||||||
|
*/
|
||||||
|
private String isTradeBuildEnt;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 是否纳税信用等级A级(非必填)
|
* 是否纳税信用等级A级(非必填)
|
||||||
* 可选值:true/false
|
* 可选值:true/false
|
||||||
@@ -137,7 +155,7 @@ public class ModelInvokeDTO {
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* 抵质押类型(非必填)
|
* 抵质押类型(非必填)
|
||||||
* 可选值:一类/二类/三类
|
* 可选值:一类/二类/三类/四类
|
||||||
*/
|
*/
|
||||||
private String collType;
|
private String collType;
|
||||||
|
|
||||||
|
|||||||
@@ -1,6 +1,7 @@
|
|||||||
package com.ruoyi.loanpricing.domain.entity;
|
package com.ruoyi.loanpricing.domain.entity;
|
||||||
|
|
||||||
import com.baomidou.mybatisplus.annotation.*;
|
import com.baomidou.mybatisplus.annotation.*;
|
||||||
|
import com.fasterxml.jackson.annotation.JsonIgnore;
|
||||||
import com.fasterxml.jackson.annotation.JsonFormat;
|
import com.fasterxml.jackson.annotation.JsonFormat;
|
||||||
import lombok.Data;
|
import lombok.Data;
|
||||||
import javax.validation.constraints.NotBlank;
|
import javax.validation.constraints.NotBlank;
|
||||||
@@ -48,6 +49,9 @@ public class LoanPricingWorkflow implements Serializable
|
|||||||
@NotBlank(message = "担保方式不能为空")
|
@NotBlank(message = "担保方式不能为空")
|
||||||
private String guarType;
|
private String guarType;
|
||||||
|
|
||||||
|
/** 还款方式: 分期/不分期 */
|
||||||
|
private String repayMethod;
|
||||||
|
|
||||||
/** 中间业务_个人_快捷支付: true/false */
|
/** 中间业务_个人_快捷支付: true/false */
|
||||||
private String midPerQuickPay;
|
private String midPerQuickPay;
|
||||||
|
|
||||||
@@ -65,7 +69,7 @@ public class LoanPricingWorkflow implements Serializable
|
|||||||
private String applyAmt;
|
private String applyAmt;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 贷款期限
|
* 借款期限(年)
|
||||||
*/
|
*/
|
||||||
private String loanTerm;
|
private String loanTerm;
|
||||||
|
|
||||||
@@ -79,13 +83,21 @@ public class LoanPricingWorkflow implements Serializable
|
|||||||
private String isManufacturing;
|
private String isManufacturing;
|
||||||
|
|
||||||
/** 省农担担保贷款: true/false */
|
/** 省农担担保贷款: true/false */
|
||||||
|
@JsonIgnore
|
||||||
private String isAgriGuar;
|
private String isAgriGuar;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 贸易和建筑业企业标识: true/false
|
* 贸易和建筑业企业标识: true/false
|
||||||
*/
|
*/
|
||||||
|
@JsonIgnore
|
||||||
private String isTradeConstruction;
|
private String isTradeConstruction;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 贸易和建筑业企业标识: 0/1
|
||||||
|
*/
|
||||||
|
@TableField(exist = false)
|
||||||
|
private String isTradeBuildEnt;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 绿色贷款: true/false
|
* 绿色贷款: true/false
|
||||||
*/
|
*/
|
||||||
@@ -94,6 +106,7 @@ public class LoanPricingWorkflow implements Serializable
|
|||||||
/**
|
/**
|
||||||
* 科技型企业: true/false
|
* 科技型企业: true/false
|
||||||
*/
|
*/
|
||||||
|
@JsonIgnore
|
||||||
private String isTechEnt;
|
private String isTechEnt;
|
||||||
|
|
||||||
/** 是否纳税信用等级A级: true/false */
|
/** 是否纳税信用等级A级: true/false */
|
||||||
@@ -111,7 +124,7 @@ public class LoanPricingWorkflow implements Serializable
|
|||||||
/** 循环功能: true/false */
|
/** 循环功能: true/false */
|
||||||
private String loanLoop;
|
private String loanLoop;
|
||||||
|
|
||||||
/** 抵质押类型: 一线/一类/二类 */
|
/** 抵质押类型: 一类/二类/三类/四类 */
|
||||||
private String collType;
|
private String collType;
|
||||||
|
|
||||||
/** 抵质押物是否三方所有: true/false */
|
/** 抵质押物是否三方所有: true/false */
|
||||||
|
|||||||
@@ -4,6 +4,7 @@ import com.baomidou.mybatisplus.annotation.FieldFill;
|
|||||||
import com.baomidou.mybatisplus.annotation.IdType;
|
import com.baomidou.mybatisplus.annotation.IdType;
|
||||||
import com.baomidou.mybatisplus.annotation.TableField;
|
import com.baomidou.mybatisplus.annotation.TableField;
|
||||||
import com.baomidou.mybatisplus.annotation.TableId;
|
import com.baomidou.mybatisplus.annotation.TableId;
|
||||||
|
import com.fasterxml.jackson.annotation.JsonIgnore;
|
||||||
import lombok.Data;
|
import lombok.Data;
|
||||||
|
|
||||||
import java.util.Date;
|
import java.util.Date;
|
||||||
@@ -31,6 +32,9 @@ public class ModelCorpOutputFields {
|
|||||||
private String idType;
|
private String idType;
|
||||||
// 证件号码
|
// 证件号码
|
||||||
private String idNum;
|
private String idNum;
|
||||||
|
// 还款方式
|
||||||
|
@TableField(exist = false)
|
||||||
|
private String repayMethod;
|
||||||
// 基准利率
|
// 基准利率
|
||||||
private String baseLoanRate;
|
private String baseLoanRate;
|
||||||
// 我行首贷客户
|
// 我行首贷客户
|
||||||
@@ -79,12 +83,14 @@ public class ModelCorpOutputFields {
|
|||||||
private String isCleanEnt;
|
private String isCleanEnt;
|
||||||
// 开立基本结算账户
|
// 开立基本结算账户
|
||||||
private String hasSettleAcct;
|
private String hasSettleAcct;
|
||||||
|
// 贸易和建筑业企业
|
||||||
|
@TableField(exist = false)
|
||||||
|
private String isTradeBuildEnt;
|
||||||
// 省农担担保贷款
|
// 省农担担保贷款
|
||||||
|
@JsonIgnore
|
||||||
private String isAgriGuar;
|
private String isAgriGuar;
|
||||||
// 绿色贷款
|
// 绿色贷款
|
||||||
private String isGreenLoan;
|
private String isGreenLoan;
|
||||||
// 科技型企业
|
|
||||||
private String isTechEnt;
|
|
||||||
// BP_企业客户类别
|
// BP_企业客户类别
|
||||||
private String bpEntType;
|
private String bpEntType;
|
||||||
// TOTAL_BP_关联度
|
// TOTAL_BP_关联度
|
||||||
@@ -119,6 +125,16 @@ public class ModelCorpOutputFields {
|
|||||||
private String totalBp;
|
private String totalBp;
|
||||||
// 测算利率
|
// 测算利率
|
||||||
private String calculateRate;
|
private String calculateRate;
|
||||||
|
// 历史利率
|
||||||
|
private String loanRateHistory;
|
||||||
|
// 产品最低利率下限
|
||||||
|
private String minRateProduct;
|
||||||
|
// 平滑幅度
|
||||||
|
private String smoothRange;
|
||||||
|
// 最终测算利率
|
||||||
|
private String finalCalculateRate;
|
||||||
|
// 参考利率
|
||||||
|
private String referenceRate;
|
||||||
|
|
||||||
@TableField(fill = FieldFill.INSERT)
|
@TableField(fill = FieldFill.INSERT)
|
||||||
private Date createTime;
|
private Date createTime;
|
||||||
|
|||||||
@@ -59,10 +59,15 @@ public class LoanPricingModelService {
|
|||||||
}
|
}
|
||||||
ModelInvokeDTO modelInvokeDTO = new ModelInvokeDTO();
|
ModelInvokeDTO modelInvokeDTO = new ModelInvokeDTO();
|
||||||
BeanUtils.copyProperties(loanPricingWorkflow, modelInvokeDTO);
|
BeanUtils.copyProperties(loanPricingWorkflow, modelInvokeDTO);
|
||||||
|
modelInvokeDTO.setIsTradeBuildEnt(toZeroOne(loanPricingWorkflow.getIsTradeConstruction()));
|
||||||
if ("个人".equals(loanPricingWorkflow.getCustType()))
|
if ("个人".equals(loanPricingWorkflow.getCustType()))
|
||||||
{
|
{
|
||||||
normalizePersonalModelInvokeDTO(modelInvokeDTO);
|
normalizePersonalModelInvokeDTO(modelInvokeDTO);
|
||||||
}
|
}
|
||||||
|
if ("企业".equals(loanPricingWorkflow.getCustType()))
|
||||||
|
{
|
||||||
|
normalizeCorporateModelInvokeDTO(modelInvokeDTO);
|
||||||
|
}
|
||||||
JSONObject response = modelService.invokeModel(modelInvokeDTO);
|
JSONObject response = modelService.invokeModel(modelInvokeDTO);
|
||||||
if (loanPricingWorkflow.getCustType().equals("个人")){
|
if (loanPricingWorkflow.getCustType().equals("个人")){
|
||||||
// 个人模型
|
// 个人模型
|
||||||
@@ -94,6 +99,13 @@ public class LoanPricingModelService {
|
|||||||
modelInvokeDTO.setCollThirdParty(toZeroOne(modelInvokeDTO.getCollThirdParty()));
|
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)
|
private String toZeroOne(String value)
|
||||||
{
|
{
|
||||||
if ("true".equals(value) || "1".equals(value))
|
if ("true".equals(value) || "1".equals(value))
|
||||||
|
|||||||
@@ -78,6 +78,8 @@ public class LoanPricingWorkflowServiceImpl implements ILoanPricingWorkflowServi
|
|||||||
{
|
{
|
||||||
loanPricingWorkflow.setRunType("1");
|
loanPricingWorkflow.setRunType("1");
|
||||||
}
|
}
|
||||||
|
loanPricingWorkflow.setCustType("企业".equals(loanPricingWorkflow.getCustType()) ? "企业" : loanPricingWorkflow.getCustType());
|
||||||
|
loanPricingWorkflow.setIsTradeBuildEnt(loanPricingWorkflow.getIsTradeConstruction());
|
||||||
|
|
||||||
loanPricingWorkflow.setCustName(sensitiveFieldCryptoService.encrypt(loanPricingWorkflow.getCustName()));
|
loanPricingWorkflow.setCustName(sensitiveFieldCryptoService.encrypt(loanPricingWorkflow.getCustName()));
|
||||||
loanPricingWorkflow.setIdNum(sensitiveFieldCryptoService.encrypt(loanPricingWorkflow.getIdNum()));
|
loanPricingWorkflow.setIdNum(sensitiveFieldCryptoService.encrypt(loanPricingWorkflow.getIdNum()));
|
||||||
@@ -163,6 +165,7 @@ public class LoanPricingWorkflowServiceImpl implements ILoanPricingWorkflowServi
|
|||||||
String plainIdNum = sensitiveFieldCryptoService.decrypt(loanPricingWorkflow.getIdNum());
|
String plainIdNum = sensitiveFieldCryptoService.decrypt(loanPricingWorkflow.getIdNum());
|
||||||
loanPricingWorkflow.setCustName(loanPricingSensitiveDisplayService.maskCustName(plainCustName));
|
loanPricingWorkflow.setCustName(loanPricingSensitiveDisplayService.maskCustName(plainCustName));
|
||||||
loanPricingWorkflow.setIdNum(loanPricingSensitiveDisplayService.maskIdNum(plainIdNum));
|
loanPricingWorkflow.setIdNum(loanPricingSensitiveDisplayService.maskIdNum(plainIdNum));
|
||||||
|
loanPricingWorkflow.setIsTradeBuildEnt(loanPricingWorkflow.getIsTradeConstruction());
|
||||||
loanPricingWorkflowVO.setLoanPricingWorkflow(loanPricingWorkflow);
|
loanPricingWorkflowVO.setLoanPricingWorkflow(loanPricingWorkflow);
|
||||||
|
|
||||||
if (Objects.nonNull(loanPricingWorkflow.getModelOutputId())){
|
if (Objects.nonNull(loanPricingWorkflow.getModelOutputId())){
|
||||||
@@ -180,6 +183,8 @@ public class LoanPricingWorkflowServiceImpl implements ILoanPricingWorkflowServi
|
|||||||
if (Objects.nonNull(modelCorpOutputFields))
|
if (Objects.nonNull(modelCorpOutputFields))
|
||||||
{
|
{
|
||||||
maskModelCorpOutputBasicInfo(modelCorpOutputFields);
|
maskModelCorpOutputBasicInfo(modelCorpOutputFields);
|
||||||
|
modelCorpOutputFields.setRepayMethod(loanPricingWorkflow.getRepayMethod());
|
||||||
|
modelCorpOutputFields.setIsTradeBuildEnt(loanPricingWorkflow.getIsTradeBuildEnt());
|
||||||
loanPricingWorkflow.setLoanRate(modelCorpOutputFields.getCalculateRate());
|
loanPricingWorkflow.setLoanRate(modelCorpOutputFields.getCalculateRate());
|
||||||
}
|
}
|
||||||
loanPricingWorkflowVO.setModelCorpOutputFields(modelCorpOutputFields);
|
loanPricingWorkflowVO.setModelCorpOutputFields(modelCorpOutputFields);
|
||||||
|
|||||||
@@ -52,15 +52,15 @@ public class LoanPricingConverter {
|
|||||||
entity.setCustName(dto.getCustName());
|
entity.setCustName(dto.getCustName());
|
||||||
entity.setIdType(dto.getIdType());
|
entity.setIdType(dto.getIdType());
|
||||||
entity.setIdNum(dto.getIdNum());
|
entity.setIdNum(dto.getIdNum());
|
||||||
|
entity.setRepayMethod(dto.getRepayMethod());
|
||||||
entity.setGuarType(dto.getGuarType());
|
entity.setGuarType(dto.getGuarType());
|
||||||
entity.setApplyAmt(dto.getApplyAmt());
|
entity.setApplyAmt(dto.getApplyAmt());
|
||||||
entity.setCollType(dto.getCollType());
|
entity.setCollType(dto.getCollType());
|
||||||
entity.setCollThirdParty(dto.getCollThirdParty());
|
entity.setCollThirdParty(dto.getCollThirdParty());
|
||||||
// 映射企业特有字段
|
// 映射企业特有字段
|
||||||
entity.setIsAgriGuar(dto.getIsAgriGuar());
|
|
||||||
entity.setIsGreenLoan(dto.getIsGreenLoan());
|
entity.setIsGreenLoan(dto.getIsGreenLoan());
|
||||||
entity.setIsTechEnt(dto.getIsTechEnt());
|
entity.setIsTradeConstruction(dto.getIsTradeBuildEnt());
|
||||||
entity.setIsTradeConstruction(dto.getIsTradeConstruction());
|
entity.setIsTradeBuildEnt(dto.getIsTradeBuildEnt());
|
||||||
entity.setLoanTerm(dto.getLoanTerm());
|
entity.setLoanTerm(dto.getLoanTerm());
|
||||||
return entity;
|
return entity;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -4,11 +4,12 @@
|
|||||||
"tokenId": "17364055486305E7F4722M8IPFWNL8TOBEB",
|
"tokenId": "17364055486305E7F4722M8IPFWNL8TOBEB",
|
||||||
"mappingOutputFields": {
|
"mappingOutputFields": {
|
||||||
"custIsn": "CUST20260121001",
|
"custIsn": "CUST20260121001",
|
||||||
"custType": "企业客户",
|
"custType": "企业",
|
||||||
"guarType": "抵押担保",
|
"guarType": "抵押",
|
||||||
"custName": "北京智联科技有限公司",
|
"custName": "北京智联科技有限公司",
|
||||||
"idType": "营业执照",
|
"idType": "营业执照",
|
||||||
"idNum": "91110108MA00XXXXXX",
|
"idNum": "91110108MA00XXXXXX",
|
||||||
|
"repayMethod": "分期",
|
||||||
"baseLoanRate": "3.45",
|
"baseLoanRate": "3.45",
|
||||||
"isFirstLoan": "N",
|
"isFirstLoan": "N",
|
||||||
"faithDay": "730",
|
"faithDay": "730",
|
||||||
@@ -33,17 +34,16 @@
|
|||||||
"bpPayroll": "4.1",
|
"bpPayroll": "4.1",
|
||||||
"isCleanEnt": "Y",
|
"isCleanEnt": "Y",
|
||||||
"hasSettleAcct": "Y",
|
"hasSettleAcct": "Y",
|
||||||
"isAgriGuar": "N",
|
"isGreenLoan": "1",
|
||||||
"isGreenLoan": "Y",
|
"isTradeBuildEnt": "0",
|
||||||
"isTechEnt": "Y",
|
|
||||||
"bpEntType": "7.5",
|
"bpEntType": "7.5",
|
||||||
"totoalBpRelevance": "9.2",
|
"totoalBpRelevance": "9.2",
|
||||||
"loanTerm": "36",
|
"loanTerm": "6",
|
||||||
"bpLoanTerm": "3.3",
|
"bpLoanTerm": "3.3",
|
||||||
"applyAmt": "5000000.00",
|
"applyAmt": "1000000.00",
|
||||||
"bpLoanAmount": "5.8",
|
"bpLoanAmount": "5.8",
|
||||||
"collType": "房产抵押",
|
"collType": "四类",
|
||||||
"collThirdParty": "N",
|
"collThirdParty": "1",
|
||||||
"bpCollateral": "4.5",
|
"bpCollateral": "4.5",
|
||||||
"greyCust": "N",
|
"greyCust": "N",
|
||||||
"prinOverdue": "N",
|
"prinOverdue": "N",
|
||||||
@@ -65,4 +65,4 @@
|
|||||||
"workflowVersion": 14,
|
"workflowVersion": 14,
|
||||||
"callTime": 1736405548630,
|
"callTime": 1736405548630,
|
||||||
"status": 1
|
"status": 1
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -87,4 +87,30 @@ class LoanPricingModelServiceTest
|
|||||||
!Objects.equals("张三", entity.getCustName())
|
!Objects.equals("张三", entity.getCustName())
|
||||||
&& !Objects.equals("110101199001011234", entity.getIdNum())));
|
&& !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("测试****公司", result.getModelCorpOutputFields().getCustName());
|
||||||
assertEquals("91*************00X", result.getModelCorpOutputFields().getIdNum());
|
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>
|
<template>
|
||||||
<el-breadcrumb class="app-breadcrumb" separator="/">
|
<el-breadcrumb class="app-breadcrumb" separator="/">
|
||||||
<transition-group name="breadcrumb">
|
<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>
|
<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>
|
<a v-else @click.prevent="handleLink(item)">{{ item.meta.title }}</a>
|
||||||
</el-breadcrumb-item>
|
</el-breadcrumb-item>
|
||||||
@@ -10,6 +10,8 @@
|
|||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script>
|
<script>
|
||||||
|
const { buildBreadcrumbItemKey } = require('./utils')
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
data() {
|
data() {
|
||||||
return {
|
return {
|
||||||
@@ -29,6 +31,7 @@ export default {
|
|||||||
this.getBreadcrumb()
|
this.getBreadcrumb()
|
||||||
},
|
},
|
||||||
methods: {
|
methods: {
|
||||||
|
buildBreadcrumbItemKey,
|
||||||
getBreadcrumb() {
|
getBreadcrumb() {
|
||||||
// only show routes with meta.title
|
// only show routes with meta.title
|
||||||
let matched = []
|
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-divider content-position="left">贷款信息</el-divider>
|
||||||
<el-row>
|
<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-col :span="12">
|
||||||
<el-form-item label="担保方式" prop="guarType">
|
<el-form-item label="担保方式" prop="guarType">
|
||||||
<el-select v-model="form.guarType" placeholder="请选择担保方式" style="width: 100%">
|
<el-select v-model="form.guarType" placeholder="请选择担保方式" style="width: 100%">
|
||||||
@@ -53,8 +61,10 @@
|
|||||||
</el-row>
|
</el-row>
|
||||||
<el-row>
|
<el-row>
|
||||||
<el-col :span="12">
|
<el-col :span="12">
|
||||||
<el-form-item label="贷款期限(月)" prop="loanTerm">
|
<el-form-item label="借款期限" prop="loanTerm">
|
||||||
<el-input v-model.number="form.loanTerm" type="number" placeholder="请输入贷款期限"/>
|
<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-form-item>
|
||||||
</el-col>
|
</el-col>
|
||||||
</el-row>
|
</el-row>
|
||||||
@@ -62,26 +72,14 @@
|
|||||||
<!-- 企业标识 -->
|
<!-- 企业标识 -->
|
||||||
<el-divider content-position="left">企业标识</el-divider>
|
<el-divider content-position="left">企业标识</el-divider>
|
||||||
<el-row>
|
<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-col :span="12">
|
||||||
<el-form-item label="绿色贷款" prop="isGreenLoan">
|
<el-form-item label="绿色贷款" prop="isGreenLoan">
|
||||||
<el-switch v-model="form.isGreenLoan"/>
|
<el-switch v-model="form.isGreenLoan"/>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
</el-col>
|
</el-col>
|
||||||
</el-row>
|
|
||||||
<el-row>
|
|
||||||
<el-col :span="12">
|
<el-col :span="12">
|
||||||
<el-form-item label="科技型企业" prop="isTechEnt">
|
<el-form-item label="贸易和建筑业企业" prop="isTradeBuildEnt">
|
||||||
<el-switch v-model="form.isTechEnt"/>
|
<el-switch v-model="form.isTradeBuildEnt"/>
|
||||||
</el-form-item>
|
|
||||||
</el-col>
|
|
||||||
<el-col :span="12">
|
|
||||||
<el-form-item label="贸易和建筑业企业" prop="isTradeConstruction">
|
|
||||||
<el-switch v-model="form.isTradeConstruction"/>
|
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
</el-col>
|
</el-col>
|
||||||
</el-row>
|
</el-row>
|
||||||
@@ -92,9 +90,10 @@
|
|||||||
<el-col :span="12">
|
<el-col :span="12">
|
||||||
<el-form-item label="抵质押类型" prop="collType">
|
<el-form-item label="抵质押类型" prop="collType">
|
||||||
<el-select v-model="form.collType" placeholder="请选择抵质押类型" style="width: 100%">
|
<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-option label="三类" value="三类"/>
|
||||||
|
<el-option label="四类" value="四类"/>
|
||||||
</el-select>
|
</el-select>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
</el-col>
|
</el-col>
|
||||||
@@ -124,7 +123,6 @@ export default {
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
data() {
|
data() {
|
||||||
// 金额验证
|
|
||||||
const validateApplyAmt = (rule, value, callback) => {
|
const validateApplyAmt = (rule, value, callback) => {
|
||||||
if (!value) {
|
if (!value) {
|
||||||
callback(new Error('请输入申请金额'))
|
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 {
|
return {
|
||||||
submitting: false,
|
submitting: false,
|
||||||
|
loanTermOptions: [
|
||||||
|
'1',
|
||||||
|
'2',
|
||||||
|
'3',
|
||||||
|
'4',
|
||||||
|
'5',
|
||||||
|
'6'
|
||||||
|
],
|
||||||
form: {
|
form: {
|
||||||
orgCode: '892000',
|
orgCode: '892000',
|
||||||
runType: '1',
|
runType: '1',
|
||||||
|
custType: '企业',
|
||||||
custIsn: undefined,
|
custIsn: undefined,
|
||||||
custName: undefined,
|
custName: undefined,
|
||||||
idType: undefined,
|
idType: undefined,
|
||||||
idNum: undefined,
|
idNum: undefined,
|
||||||
|
repayMethod: undefined,
|
||||||
guarType: undefined,
|
guarType: undefined,
|
||||||
applyAmt: undefined,
|
applyAmt: undefined,
|
||||||
loanTerm: undefined,
|
loanTerm: undefined,
|
||||||
isAgriGuar: false,
|
|
||||||
isGreenLoan: false,
|
isGreenLoan: false,
|
||||||
isTechEnt: false,
|
isTradeBuildEnt: false,
|
||||||
isTradeConstruction: false,
|
|
||||||
collType: undefined,
|
collType: undefined,
|
||||||
collThirdParty: false
|
collThirdParty: false
|
||||||
},
|
},
|
||||||
@@ -190,6 +180,9 @@ export default {
|
|||||||
idNum: [
|
idNum: [
|
||||||
{required: true, message: "证件号码不能为空", trigger: "blur"}
|
{required: true, message: "证件号码不能为空", trigger: "blur"}
|
||||||
],
|
],
|
||||||
|
repayMethod: [
|
||||||
|
{required: true, message: "请选择还款方式", trigger: "change"}
|
||||||
|
],
|
||||||
guarType: [
|
guarType: [
|
||||||
{required: true, message: "请选择担保方式", trigger: "change"}
|
{required: true, message: "请选择担保方式", trigger: "change"}
|
||||||
],
|
],
|
||||||
@@ -197,7 +190,7 @@ export default {
|
|||||||
{required: true, validator: validateApplyAmt, trigger: "blur"}
|
{required: true, validator: validateApplyAmt, trigger: "blur"}
|
||||||
],
|
],
|
||||||
loanTerm: [
|
loanTerm: [
|
||||||
{required: true, validator: validateLoanTerm, trigger: "blur"}
|
{required: true, message: "请选择借款期限", trigger: "change"}
|
||||||
],
|
],
|
||||||
collType: [
|
collType: [
|
||||||
{required: true, message: "请选择抵质押类型", trigger: "change"}
|
{required: true, message: "请选择抵质押类型", trigger: "change"}
|
||||||
@@ -228,17 +221,17 @@ export default {
|
|||||||
this.form = {
|
this.form = {
|
||||||
orgCode: '892000',
|
orgCode: '892000',
|
||||||
runType: '1',
|
runType: '1',
|
||||||
|
custType: '企业',
|
||||||
custIsn: undefined,
|
custIsn: undefined,
|
||||||
custName: undefined,
|
custName: undefined,
|
||||||
idType: undefined,
|
idType: undefined,
|
||||||
idNum: undefined,
|
idNum: undefined,
|
||||||
|
repayMethod: undefined,
|
||||||
guarType: undefined,
|
guarType: undefined,
|
||||||
applyAmt: undefined,
|
applyAmt: undefined,
|
||||||
loanTerm: undefined,
|
loanTerm: undefined,
|
||||||
isAgriGuar: false,
|
|
||||||
isGreenLoan: false,
|
isGreenLoan: false,
|
||||||
isTechEnt: false,
|
isTradeBuildEnt: false,
|
||||||
isTradeConstruction: false,
|
|
||||||
collType: undefined,
|
collType: undefined,
|
||||||
collThirdParty: false
|
collThirdParty: false
|
||||||
}
|
}
|
||||||
@@ -259,14 +252,11 @@ export default {
|
|||||||
this.$refs["form"].validate(valid => {
|
this.$refs["form"].validate(valid => {
|
||||||
if (valid) {
|
if (valid) {
|
||||||
this.submitting = true
|
this.submitting = true
|
||||||
// 转换开关值为字符串
|
|
||||||
const data = {
|
const data = {
|
||||||
...this.form,
|
...this.form,
|
||||||
isAgriGuar: this.form.isAgriGuar ? 'true' : 'false',
|
isGreenLoan: this.form.isGreenLoan ? '1' : '0',
|
||||||
isGreenLoan: this.form.isGreenLoan ? 'true' : 'false',
|
isTradeBuildEnt: this.form.isTradeBuildEnt ? '1' : '0',
|
||||||
isTechEnt: this.form.isTechEnt ? 'true' : 'false',
|
collThirdParty: this.form.collThirdParty ? '1' : '0'
|
||||||
isTradeConstruction: this.form.isTradeConstruction ? 'true' : 'false',
|
|
||||||
collThirdParty: this.form.collThirdParty ? 'true' : 'false'
|
|
||||||
}
|
}
|
||||||
|
|
||||||
createCorporateWorkflow(data).then(response => {
|
createCorporateWorkflow(data).then(response => {
|
||||||
|
|||||||
@@ -68,7 +68,8 @@
|
|||||||
<el-descriptions-item label="客户内码">{{ detailData.custIsn }}</el-descriptions-item>
|
<el-descriptions-item label="客户内码">{{ detailData.custIsn }}</el-descriptions-item>
|
||||||
<el-descriptions-item label="证件类型">{{ detailData.idType }}</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.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.createTime }}</el-descriptions-item>
|
||||||
<el-descriptions-item label="创建者">{{ detailData.createBy }}</el-descriptions-item>
|
<el-descriptions-item label="创建者">{{ detailData.createBy }}</el-descriptions-item>
|
||||||
</el-descriptions>
|
</el-descriptions>
|
||||||
@@ -80,12 +81,8 @@
|
|||||||
<el-descriptions :column="2" border>
|
<el-descriptions :column="2" border>
|
||||||
<el-descriptions-item label="担保方式">{{ detailData.guarType }}</el-descriptions-item>
|
<el-descriptions-item label="担保方式">{{ detailData.guarType }}</el-descriptions-item>
|
||||||
<el-descriptions-item label="申请金额">{{ detailData.applyAmt }} 元</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.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="抵质押类型">{{ detailData.collType || '-' }}</el-descriptions-item>
|
||||||
<el-descriptions-item label="抵质押物是否三方所有">{{
|
<el-descriptions-item label="抵质押物是否三方所有">{{
|
||||||
formatBoolean(detailData.collThirdParty)
|
formatBoolean(detailData.collThirdParty)
|
||||||
|
|||||||
@@ -109,10 +109,13 @@
|
|||||||
<h4 class="section-title">基本信息</h4>
|
<h4 class="section-title">基本信息</h4>
|
||||||
<el-descriptions :column="2" border size="small">
|
<el-descriptions :column="2" border size="small">
|
||||||
<el-descriptions-item label="客户内码">{{ corpOutput.custIsn || '-' }}</el-descriptions-item>
|
<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.custName || '-' }}</el-descriptions-item>
|
||||||
<el-descriptions-item label="证件类型">{{ corpOutput.idType || '-' }}</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="证件号码">{{ 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>
|
</el-descriptions>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
@@ -120,7 +123,13 @@
|
|||||||
<h4 class="section-title">测算结果</h4>
|
<h4 class="section-title">测算结果</h4>
|
||||||
<el-descriptions :column="2" border size="small">
|
<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="浮动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="测算利率"><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>
|
</el-descriptions>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
@@ -141,7 +150,7 @@
|
|||||||
<el-descriptions-item label="存款年日均">{{ corpOutput.balanceAvg || '-' }}</el-descriptions-item>
|
<el-descriptions-item label="存款年日均">{{ corpOutput.balanceAvg || '-' }}</el-descriptions-item>
|
||||||
<el-descriptions-item label="贷款年日均">{{ corpOutput.loanAvg || '-' }}</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="派生率">{{ 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>
|
</el-descriptions>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
@@ -155,47 +164,31 @@
|
|||||||
<el-descriptions-item label="中间业务_企业_贴现">{{ formatBoolean(corpOutput.midEntDiscount) }}</el-descriptions-item>
|
<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.midEntEleDdc) }}</el-descriptions-item>
|
||||||
<el-descriptions-item label="中间业务_企业_水费代扣">{{ formatBoolean(corpOutput.midEntWaterDdc) }}</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="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.payroll || '-' }}</el-descriptions-item>
|
||||||
<el-descriptions-item label="存量贷款余额">{{ corpOutput.invLoanAmount || '-' }}</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="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.isCleanEnt) }}</el-descriptions-item>
|
||||||
<el-descriptions-item label="开立基本结算账户">{{ formatBoolean(corpOutput.hasSettleAcct) }}</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.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="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>
|
</el-descriptions>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="model-section">
|
<div class="model-section">
|
||||||
<h4 class="section-title">贷款特征</h4>
|
<h4 class="section-title">风险分析</h4>
|
||||||
<el-descriptions :column="2" border size="small">
|
<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="BP_贷款期限"><span class="bp-value">{{ corpOutput.bpLoanTerm || '-' }}</span></el-descriptions-item>
|
||||||
<el-descriptions-item label="申请金额">{{ corpOutput.applyAmt || '-' }}</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="BP_贷款额度"><span class="bp-value">{{ corpOutput.bpLoanAmount || '-' }}</span></el-descriptions-item>
|
||||||
<el-descriptions-item label="抵质押类型">{{ corpOutput.collType || '-' }}</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="抵质押物三方所有">{{ formatBoolean(corpOutput.collThirdParty) }}</el-descriptions-item>
|
||||||
<el-descriptions-item label="BP_抵押物"><span class="bp-value">{{ corpOutput.bpCollateral || '-' }}</span></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.greyCust) }}</el-descriptions-item>
|
||||||
<el-descriptions-item label="本金逾期">{{ formatBoolean(corpOutput.prinOverdue) }}</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.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="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-item label="TOTAL_BP_风险度"><span class="total-bp-value">{{ corpOutput.totoalBpRisk || '-' }}</span></el-descriptions-item>
|
||||||
</el-descriptions>
|
</el-descriptions>
|
||||||
@@ -279,26 +272,22 @@ export default {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// BP 值样式
|
|
||||||
.bp-value {
|
.bp-value {
|
||||||
color: #409eff;
|
color: #409eff;
|
||||||
font-weight: 500;
|
font-weight: 500;
|
||||||
}
|
}
|
||||||
|
|
||||||
// TOTAL_BP 样式
|
|
||||||
.total-bp-value {
|
.total-bp-value {
|
||||||
color: #e6a23c;
|
color: #e6a23c;
|
||||||
font-weight: 600;
|
font-weight: 600;
|
||||||
}
|
}
|
||||||
|
|
||||||
// 测算利率高亮样式
|
|
||||||
.calculate-rate {
|
.calculate-rate {
|
||||||
color: #f56c6c;
|
color: #f56c6c;
|
||||||
font-weight: 600;
|
font-weight: 600;
|
||||||
font-size: 16px;
|
font-size: 16px;
|
||||||
}
|
}
|
||||||
|
|
||||||
// 利率值样式
|
|
||||||
.rate-value {
|
.rate-value {
|
||||||
color: #67c23a;
|
color: #67c23a;
|
||||||
font-weight: 500;
|
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_isn` varchar(50) NOT NULL COMMENT '客户内码',
|
||||||
`cust_type` varchar(20) NOT NULL COMMENT '客户类型: 个人/企业',
|
`cust_type` varchar(20) NOT NULL COMMENT '客户类型: 个人/企业',
|
||||||
`guar_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_quick_pay` varchar(10) DEFAULT NULL COMMENT '中间业务_个人_快捷支付: true/false',
|
||||||
`mid_per_ele_ddc` 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_ele_ddc` varchar(10) DEFAULT NULL COMMENT '中间业务_企业_电费代扣: true/false',
|
||||||
`mid_ent_water_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 '申请金额(元)',
|
`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',
|
`is_clean_ent` varchar(10) DEFAULT NULL COMMENT '净身企业: true/false',
|
||||||
`has_settle_acct` 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',
|
`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-经营',
|
`loan_purpose` varchar(20) DEFAULT NULL COMMENT '贷款用途: consumer-消费/business-经营',
|
||||||
`biz_proof` varchar(10) DEFAULT NULL COMMENT '是否有经营佐证: true/false',
|
`biz_proof` varchar(10) DEFAULT NULL COMMENT '是否有经营佐证: true/false',
|
||||||
`loan_loop` 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',
|
`coll_third_party` varchar(10) DEFAULT NULL COMMENT '抵质押物是否三方所有: true/false',
|
||||||
`loan_rate` varchar(20) DEFAULT NULL COMMENT '贷款利率',
|
`loan_rate` varchar(20) DEFAULT NULL COMMENT '贷款利率',
|
||||||
`execute_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 '客户名称',
|
`cust_name` varchar(100) DEFAULT NULL COMMENT '客户名称',
|
||||||
`id_type` varchar(100) DEFAULT NULL COMMENT '证件类型',
|
`id_type` varchar(100) DEFAULT NULL COMMENT '证件类型',
|
||||||
`id_num` 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 '基准利率',
|
`base_loan_rate` varchar(100) DEFAULT NULL COMMENT '基准利率',
|
||||||
`is_first_loan` varchar(100) DEFAULT NULL COMMENT '我行首贷客户',
|
`is_first_loan` varchar(100) DEFAULT NULL COMMENT '我行首贷客户',
|
||||||
`faith_day` 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_代发工资',
|
`bp_payroll` varchar(100) DEFAULT NULL COMMENT 'BP_代发工资',
|
||||||
`is_clean_ent` varchar(100) DEFAULT NULL COMMENT '净身企业',
|
`is_clean_ent` varchar(100) DEFAULT NULL COMMENT '净身企业',
|
||||||
`has_settle_acct` 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_agri_guar` varchar(100) DEFAULT NULL COMMENT '省农担担保贷款',
|
||||||
`is_green_loan` varchar(100) DEFAULT NULL COMMENT '绿色贷款',
|
`is_green_loan` varchar(100) DEFAULT NULL COMMENT '绿色贷款',
|
||||||
`is_tech_ent` 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_风险度',
|
`totoal_bp_risk` varchar(100) DEFAULT NULL COMMENT 'TOTAL_BP_风险度',
|
||||||
`total_bp` varchar(100) DEFAULT NULL COMMENT '浮动BP',
|
`total_bp` varchar(100) DEFAULT NULL COMMENT '浮动BP',
|
||||||
`calculate_rate` varchar(100) DEFAULT NULL COMMENT '测算利率',
|
`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 '创建时间',
|
`create_time` datetime DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
|
||||||
PRIMARY KEY (`id`)
|
PRIMARY KEY (`id`)
|
||||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='客户贷款利率测算表';
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='客户贷款利率测算表';
|
||||||
|
|||||||
@@ -12,19 +12,19 @@ USE `loan-pricing`;
|
|||||||
SET FOREIGN_KEY_CHECKS=0;
|
SET FOREIGN_KEY_CHECKS=0;
|
||||||
|
|
||||||
DELETE FROM `loan_pricing_workflow`;
|
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
|
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', '个人', '信用', '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'),
|
(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'),
|
(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'),
|
(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, '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'),
|
(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, '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'),
|
(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', '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'),
|
(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'),
|
(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'),
|
(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, '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'),
|
(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', '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'),
|
(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, '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'),
|
(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', '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');
|
(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`;
|
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
|
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_isn` varchar(50) NOT NULL COMMENT '客户内码',
|
||||||
`cust_type` varchar(20) NOT NULL COMMENT '客户类型: 个人/企业',
|
`cust_type` varchar(20) NOT NULL COMMENT '客户类型: 个人/企业',
|
||||||
`guar_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_quick_pay` varchar(10) DEFAULT NULL COMMENT '中间业务_个人_快捷支付: true/false',
|
||||||
`mid_per_ele_ddc` 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_ele_ddc` varchar(10) DEFAULT NULL COMMENT '中间业务_企业_电费代扣: true/false',
|
||||||
`mid_ent_water_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 '申请金额(元)',
|
`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',
|
`is_clean_ent` varchar(10) DEFAULT NULL COMMENT '净身企业: true/false',
|
||||||
`has_settle_acct` 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',
|
`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-经营',
|
`loan_purpose` varchar(20) DEFAULT NULL COMMENT '贷款用途: consumer-消费/business-经营',
|
||||||
`biz_proof` varchar(10) DEFAULT NULL COMMENT '是否有经营佐证: true/false',
|
`biz_proof` varchar(10) DEFAULT NULL COMMENT '是否有经营佐证: true/false',
|
||||||
`loan_loop` 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',
|
`coll_third_party` varchar(10) DEFAULT NULL COMMENT '抵质押物是否三方所有: true/false',
|
||||||
`loan_rate` varchar(20) DEFAULT NULL COMMENT '贷款利率',
|
`loan_rate` varchar(20) DEFAULT NULL COMMENT '贷款利率',
|
||||||
`execute_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 '客户名称',
|
`cust_name` varchar(100) DEFAULT NULL COMMENT '客户名称',
|
||||||
`id_type` varchar(100) DEFAULT NULL COMMENT '证件类型',
|
`id_type` varchar(100) DEFAULT NULL COMMENT '证件类型',
|
||||||
`id_num` 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 '基准利率',
|
`base_loan_rate` varchar(100) DEFAULT NULL COMMENT '基准利率',
|
||||||
`is_first_loan` varchar(100) DEFAULT NULL COMMENT '我行首贷客户',
|
`is_first_loan` varchar(100) DEFAULT NULL COMMENT '我行首贷客户',
|
||||||
`faith_day` 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_代发工资',
|
`bp_payroll` varchar(100) DEFAULT NULL COMMENT 'BP_代发工资',
|
||||||
`is_clean_ent` varchar(100) DEFAULT NULL COMMENT '净身企业',
|
`is_clean_ent` varchar(100) DEFAULT NULL COMMENT '净身企业',
|
||||||
`has_settle_acct` 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_agri_guar` varchar(100) DEFAULT NULL COMMENT '省农担担保贷款',
|
||||||
`is_green_loan` varchar(100) DEFAULT NULL COMMENT '绿色贷款',
|
`is_green_loan` varchar(100) DEFAULT NULL COMMENT '绿色贷款',
|
||||||
`is_tech_ent` 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_风险度',
|
`totoal_bp_risk` varchar(100) DEFAULT NULL COMMENT 'TOTAL_BP_风险度',
|
||||||
`total_bp` varchar(100) DEFAULT NULL COMMENT '浮动BP',
|
`total_bp` varchar(100) DEFAULT NULL COMMENT '浮动BP',
|
||||||
`calculate_rate` varchar(100) DEFAULT NULL COMMENT '测算利率',
|
`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 '创建时间',
|
`create_time` datetime DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
|
||||||
PRIMARY KEY (`id`)
|
PRIMARY KEY (`id`)
|
||||||
) ENGINE=InnoDB AUTO_INCREMENT=7 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='客户贷款利率测算表';
|
) 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_isn` varchar(50) NOT NULL COMMENT '客户内码',
|
||||||
`cust_type` varchar(20) NOT NULL COMMENT '客户类型: 个人/企业',
|
`cust_type` varchar(20) NOT NULL COMMENT '客户类型: 个人/企业',
|
||||||
`guar_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_quick_pay` varchar(10) DEFAULT NULL COMMENT '中间业务_个人_快捷支付: true/false',
|
||||||
`mid_per_ele_ddc` 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_ele_ddc` varchar(10) DEFAULT NULL COMMENT '中间业务_企业_电费代扣: true/false',
|
||||||
`mid_ent_water_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 '申请金额(元)',
|
`apply_amt` varchar(50) NOT NULL COMMENT '申请金额(元)',
|
||||||
|
`loan_term` varchar(50) DEFAULT NULL COMMENT '借款期限(年)',
|
||||||
`is_clean_ent` varchar(10) DEFAULT NULL COMMENT '净身企业: true/false',
|
`is_clean_ent` varchar(10) DEFAULT NULL COMMENT '净身企业: true/false',
|
||||||
`has_settle_acct` 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',
|
`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',
|
`is_agri_leading` varchar(10) DEFAULT NULL COMMENT '是否县级及以上农业龙头企业: true/false',
|
||||||
`loan_purpose` varchar(20) DEFAULT NULL COMMENT '贷款用途: consumer-消费/business-经营',
|
`loan_purpose` varchar(20) DEFAULT NULL COMMENT '贷款用途: consumer-消费/business-经营',
|
||||||
`biz_proof` varchar(10) DEFAULT NULL COMMENT '是否有经营佐证: true/false',
|
`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',
|
`coll_third_party` varchar(10) DEFAULT NULL COMMENT '抵质押物是否三方所有: true/false',
|
||||||
`loan_rate` varchar(20) NOT NULL COMMENT '贷款利率',
|
`loan_rate` varchar(20) NOT NULL COMMENT '贷款利率',
|
||||||
`execute_rate` varchar(20) DEFAULT NULL COMMENT '执行利率(%)',
|
`execute_rate` varchar(20) DEFAULT NULL COMMENT '执行利率(%)',
|
||||||
`cust_name` varchar(100) DEFAULT NULL COMMENT '客户名称',
|
`cust_name` varchar(100) DEFAULT NULL COMMENT '客户名称',
|
||||||
`id_type` varchar(50) 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',
|
`is_inclusive_finance` varchar(10) DEFAULT NULL COMMENT '是否普惠小微借款人: true/false',
|
||||||
`create_by` varchar(64) DEFAULT '' COMMENT '创建者',
|
`create_by` varchar(64) DEFAULT '' COMMENT '创建者',
|
||||||
`create_time` datetime DEFAULT NULL COMMENT '创建时间',
|
`create_time` datetime DEFAULT NULL COMMENT '创建时间',
|
||||||
|
|||||||
@@ -10,6 +10,7 @@ CREATE TABLE `model_corp_output_fields` (
|
|||||||
`cust_name` VARCHAR(100) COMMENT '客户名称',
|
`cust_name` VARCHAR(100) COMMENT '客户名称',
|
||||||
`id_type` VARCHAR(100) COMMENT '证件类型',
|
`id_type` VARCHAR(100) COMMENT '证件类型',
|
||||||
`id_num` VARCHAR(100) COMMENT '证件号码',
|
`id_num` VARCHAR(100) COMMENT '证件号码',
|
||||||
|
`repay_method` VARCHAR(100) COMMENT '还款方式',
|
||||||
`base_loan_rate` VARCHAR(100) COMMENT '基准利率',
|
`base_loan_rate` VARCHAR(100) COMMENT '基准利率',
|
||||||
`is_first_loan` VARCHAR(100) COMMENT '我行首贷客户',
|
`is_first_loan` VARCHAR(100) COMMENT '我行首贷客户',
|
||||||
`faith_day` VARCHAR(100) COMMENT '用信天数',
|
`faith_day` VARCHAR(100) COMMENT '用信天数',
|
||||||
@@ -34,6 +35,7 @@ CREATE TABLE `model_corp_output_fields` (
|
|||||||
`bp_payroll` VARCHAR(100) COMMENT 'BP_代发工资',
|
`bp_payroll` VARCHAR(100) COMMENT 'BP_代发工资',
|
||||||
`is_clean_ent` VARCHAR(100) COMMENT '净身企业',
|
`is_clean_ent` VARCHAR(100) COMMENT '净身企业',
|
||||||
`has_settle_acct` VARCHAR(100) COMMENT '开立基本结算账户',
|
`has_settle_acct` VARCHAR(100) COMMENT '开立基本结算账户',
|
||||||
|
`is_trade_build_ent` VARCHAR(100) COMMENT '贸易和建筑业企业',
|
||||||
`is_agri_guar` VARCHAR(100) COMMENT '省农担担保贷款',
|
`is_agri_guar` VARCHAR(100) COMMENT '省农担担保贷款',
|
||||||
`is_green_loan` VARCHAR(100) COMMENT '绿色贷款',
|
`is_green_loan` VARCHAR(100) COMMENT '绿色贷款',
|
||||||
`is_tech_ent` 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_风险度',
|
`totoal_bp_risk` VARCHAR(100) COMMENT 'TOTAL_BP_风险度',
|
||||||
`total_bp` VARCHAR(100) COMMENT '浮动BP',
|
`total_bp` VARCHAR(100) COMMENT '浮动BP',
|
||||||
`calculate_rate` VARCHAR(100) COMMENT '测算利率',
|
`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 '创建时间',
|
`create_time` DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
|
||||||
PRIMARY KEY (`id`)
|
PRIMARY KEY (`id`)
|
||||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='客户贷款利率测算表';
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='客户贷款利率测算表';
|
||||||
|
|||||||
@@ -34,12 +34,14 @@ Content-Type: application/json
|
|||||||
"custName": "测试科技有限公司",
|
"custName": "测试科技有限公司",
|
||||||
"idType": "统一社会信用代码",
|
"idType": "统一社会信用代码",
|
||||||
"idNum": "91110000100000000X",
|
"idNum": "91110000100000000X",
|
||||||
|
"repayMethod": "分期",
|
||||||
"guarType": "抵押",
|
"guarType": "抵押",
|
||||||
"applyAmt": "1000000",
|
"applyAmt": "1000000",
|
||||||
"loanTerm": "36",
|
"loanTerm": "6",
|
||||||
"isAgriGuar": "false",
|
"isGreenLoan": "1",
|
||||||
"isGreenLoan": "true",
|
"isTradeBuildEnt": "0",
|
||||||
"isTechEnt": "true"
|
"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.code === 200, "Response code is 200");
|
||||||
client.assert(response.body.data.custType === "企业", "Customer type is 企业");
|
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.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
|
POST http://localhost:63310/loanPricing/workflow/create/corporate
|
||||||
Authorization: Bearer {{token}}
|
Authorization: Bearer {{token}}
|
||||||
@@ -155,15 +157,13 @@ Content-Type: application/json
|
|||||||
"idNum": "91110000100000005X",
|
"idNum": "91110000100000005X",
|
||||||
"guarType": "保证",
|
"guarType": "保证",
|
||||||
"applyAmt": "2000000",
|
"applyAmt": "2000000",
|
||||||
"loanTerm": "60",
|
"loanTerm": "6"
|
||||||
"isAgriGuar": "true"
|
|
||||||
}
|
}
|
||||||
|
|
||||||
> {%
|
> {%
|
||||||
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.status === 200, "Response status is 200");
|
||||||
client.assert(response.body.code === 200, "Response code is 200");
|
client.assert(response.body.code === 500, "Response code indicates validation error");
|
||||||
client.assert(response.body.data.isAgriGuar === "true", "Agricultural guarantee is set");
|
|
||||||
});
|
});
|
||||||
%}
|
%}
|
||||||
|
|
||||||
@@ -179,17 +179,21 @@ Content-Type: application/json
|
|||||||
"custName": "建筑工程有限公司",
|
"custName": "建筑工程有限公司",
|
||||||
"idType": "统一社会信用代码",
|
"idType": "统一社会信用代码",
|
||||||
"idNum": "91110000100000006X",
|
"idNum": "91110000100000006X",
|
||||||
|
"repayMethod": "不分期",
|
||||||
"guarType": "质押",
|
"guarType": "质押",
|
||||||
"applyAmt": "1500000",
|
"applyAmt": "1500000",
|
||||||
"loanTerm": "24",
|
"loanTerm": "4",
|
||||||
"isTradeConstruction": "true"
|
"isTradeBuildEnt": "1",
|
||||||
|
"isGreenLoan": "0",
|
||||||
|
"collType": "三类",
|
||||||
|
"collThirdParty": "0"
|
||||||
}
|
}
|
||||||
|
|
||||||
> {%
|
> {%
|
||||||
client.test("Corporate loan for trade/construction", function () {
|
client.test("Corporate loan for trade/construction", function () {
|
||||||
client.assert(response.status === 200, "Response status is 200");
|
client.assert(response.status === 200, "Response status is 200");
|
||||||
client.assert(response.body.code === 200, "Response code 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": "科技创新有限公司",
|
"custName": "科技创新有限公司",
|
||||||
"idType": "统一社会信用代码",
|
"idType": "统一社会信用代码",
|
||||||
"idNum": "91110000100000007X",
|
"idNum": "91110000100000007X",
|
||||||
|
"repayMethod": "分期",
|
||||||
"guarType": "信用",
|
"guarType": "信用",
|
||||||
"applyAmt": "3000000",
|
"applyAmt": "3000000",
|
||||||
"loanTerm": "12",
|
"loanTerm": "1",
|
||||||
"isAgriGuar": "false",
|
"isGreenLoan": "1",
|
||||||
"isGreenLoan": "true",
|
"isTradeBuildEnt": "0",
|
||||||
"isTechEnt": "true",
|
|
||||||
"isTradeConstruction": "false",
|
|
||||||
"collType": "一类",
|
"collType": "一类",
|
||||||
"collThirdParty": "false"
|
"collThirdParty": "0"
|
||||||
}
|
}
|
||||||
|
|
||||||
> {%
|
> {%
|
||||||
|
|||||||
@@ -77,12 +77,14 @@ RESPONSE=$(curl -s -X POST "$CORPORATE_CREATE_URL" \
|
|||||||
"custName": "测试科技有限公司",
|
"custName": "测试科技有限公司",
|
||||||
"idType": "统一社会信用代码",
|
"idType": "统一社会信用代码",
|
||||||
"idNum": "91110000100000000X",
|
"idNum": "91110000100000000X",
|
||||||
|
"repayMethod": "分期",
|
||||||
"guarType": "抵押",
|
"guarType": "抵押",
|
||||||
"applyAmt": "1000000",
|
"applyAmt": "1000000",
|
||||||
"loanTerm": "36",
|
"loanTerm": "6",
|
||||||
"isAgriGuar": "false",
|
"isGreenLoan": "1",
|
||||||
"isGreenLoan": "true",
|
"isTradeBuildEnt": "0",
|
||||||
"isTechEnt": "true"
|
"collType": "四类",
|
||||||
|
"collThirdParty": "1"
|
||||||
}')
|
}')
|
||||||
|
|
||||||
# 检查响应
|
# 检查响应
|
||||||
@@ -204,11 +206,11 @@ else
|
|||||||
fi
|
fi
|
||||||
|
|
||||||
# ============================================================
|
# ============================================================
|
||||||
# 步骤 7: 测试省农担担保贷款标识
|
# 步骤 7: 测试缺少必填字段 repayMethod
|
||||||
# ============================================================
|
# ============================================================
|
||||||
echo ""
|
echo ""
|
||||||
echo "=========================================="
|
echo "=========================================="
|
||||||
echo "步骤 7: 测试省农担担保贷款标识"
|
echo "步骤 7: 测试缺少必填字段 repayMethod"
|
||||||
echo "=========================================="
|
echo "=========================================="
|
||||||
|
|
||||||
RESPONSE=$(curl -s -X POST "$CORPORATE_CREATE_URL" \
|
RESPONSE=$(curl -s -X POST "$CORPORATE_CREATE_URL" \
|
||||||
@@ -221,18 +223,14 @@ RESPONSE=$(curl -s -X POST "$CORPORATE_CREATE_URL" \
|
|||||||
"idNum": "91110000100000005X",
|
"idNum": "91110000100000005X",
|
||||||
"guarType": "保证",
|
"guarType": "保证",
|
||||||
"applyAmt": "2000000",
|
"applyAmt": "2000000",
|
||||||
"loanTerm": "60",
|
"loanTerm": "6"
|
||||||
"isAgriGuar": "true"
|
|
||||||
}')
|
}')
|
||||||
|
|
||||||
CODE=$(echo "$RESPONSE" | grep -o '"code":[0-9]*' | cut -d':' -f2)
|
CODE=$(echo "$RESPONSE" | grep -o '"code":[0-9]*' | cut -d':' -f2)
|
||||||
IS_AGRI_GUAR=$(echo "$RESPONSE" | grep -o '"isAgriGuar":"[^"]*"' | cut -d'"' -f4)
|
if [ "$CODE" == "500" ]; then
|
||||||
|
print_result "缺少 repayMethod 字段验证" "0"
|
||||||
if [ "$CODE" == "200" ] && [ "$IS_AGRI_GUAR" == "true" ]; then
|
|
||||||
print_result "省农担担保贷款标识正确保存" "0"
|
|
||||||
echo " 省农担标识: $IS_AGRI_GUAR"
|
|
||||||
else
|
else
|
||||||
print_result "省农担担保贷款标识正确保存" "1"
|
print_result "缺少 repayMethod 字段验证" "1"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# ============================================================
|
# ============================================================
|
||||||
@@ -251,28 +249,32 @@ RESPONSE=$(curl -s -X POST "$CORPORATE_CREATE_URL" \
|
|||||||
"custName": "建筑工程有限公司",
|
"custName": "建筑工程有限公司",
|
||||||
"idType": "统一社会信用代码",
|
"idType": "统一社会信用代码",
|
||||||
"idNum": "91110000100000006X",
|
"idNum": "91110000100000006X",
|
||||||
|
"repayMethod": "不分期",
|
||||||
"guarType": "质押",
|
"guarType": "质押",
|
||||||
"applyAmt": "1500000",
|
"applyAmt": "1500000",
|
||||||
"loanTerm": "24",
|
"loanTerm": "4",
|
||||||
"isTradeConstruction": "true"
|
"isTradeBuildEnt": "1",
|
||||||
|
"isGreenLoan": "0",
|
||||||
|
"collType": "三类",
|
||||||
|
"collThirdParty": "0"
|
||||||
}')
|
}')
|
||||||
|
|
||||||
CODE=$(echo "$RESPONSE" | grep -o '"code":[0-9]*' | cut -d':' -f2)
|
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"
|
print_result "贸易和建筑业企业标识正确保存" "0"
|
||||||
echo " 贸易建筑标识: $IS_TRADE_CONSTRUCTION"
|
echo " 贸易建筑标识: $IS_TRADE_BUILD_ENT"
|
||||||
else
|
else
|
||||||
print_result "贸易和建筑业企业标识正确保存" "1"
|
print_result "贸易和建筑业企业标识正确保存" "1"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# ============================================================
|
# ============================================================
|
||||||
# 步骤 9: 测试最小必填字段
|
# 步骤 9: 测试完整字段场景
|
||||||
# ============================================================
|
# ============================================================
|
||||||
echo ""
|
echo ""
|
||||||
echo "=========================================="
|
echo "=========================================="
|
||||||
echo "步骤 9: 测试最小必填字段"
|
echo "步骤 9: 测试完整字段场景"
|
||||||
echo "=========================================="
|
echo "=========================================="
|
||||||
|
|
||||||
RESPONSE=$(curl -s -X POST "$CORPORATE_CREATE_URL" \
|
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" \
|
-H "Content-Type: application/json" \
|
||||||
-d '{
|
-d '{
|
||||||
"custIsn": "CORP007",
|
"custIsn": "CORP007",
|
||||||
|
"custName": "科技创新有限公司",
|
||||||
|
"idType": "统一社会信用代码",
|
||||||
|
"idNum": "91110000100000007X",
|
||||||
|
"repayMethod": "分期",
|
||||||
"guarType": "信用",
|
"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)
|
CODE=$(echo "$RESPONSE" | grep -o '"code":[0-9]*' | cut -d':' -f2)
|
||||||
if [ "$CODE" == "200" ]; then
|
if [ "$CODE" == "200" ]; then
|
||||||
print_result "最小必填字段测试" "0"
|
print_result "完整字段场景测试" "0"
|
||||||
else
|
else
|
||||||
print_result "最小必填字段测试" "1"
|
print_result "完整字段场景测试" "1"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# ============================================================
|
# ============================================================
|
||||||
|
|||||||
Reference in New Issue
Block a user