补充流程列表测算利率展示设计文档
This commit is contained in:
188
doc/2026-03-28-workflow-calculate-rate-list-design.md
Normal file
188
doc/2026-03-28-workflow-calculate-rate-list-design.md
Normal file
@@ -0,0 +1,188 @@
|
||||
# 流程列表测算利率展示设计文档
|
||||
|
||||
## 1. 背景
|
||||
|
||||
当前流程列表页已经展示“执行利率(%)”,但还没有展示“测算利率(%)”。现有测算利率并不存放在流程表 `loan_pricing_workflow` 中,而是存放在模型输出表中:
|
||||
|
||||
- 个人客户:`model_retail_output_fields.calculate_rate`
|
||||
- 企业客户:`model_corp_output_fields.calculate_rate`
|
||||
|
||||
本次需求是在流程列表页新增“测算利率(%)”列,并与“执行利率(%)”同时展示。
|
||||
|
||||
## 2. 已确认约束
|
||||
|
||||
- 仅为流程列表页新增“测算利率(%)”展示
|
||||
- 测算利率直接取模型输出表中的 `calculate_rate`
|
||||
- 不新增冗余字段回写到 `loan_pricing_workflow`
|
||||
- 正式方案采用联表 SQL,一次查出流程表和两张模型输出表所需字段
|
||||
- 文档和计划统一保存在 `doc` 目录
|
||||
|
||||
## 3. 现状分析
|
||||
|
||||
当前流程列表页数据来源为 `/loanPricing/workflow/list`,后端列表接口直接基于 `LoanPricingWorkflow` 分页返回流程表字段。现状存在两个限制:
|
||||
|
||||
1. 流程表本身只有 `loanRate` 和 `executeRate`
|
||||
2. 测算利率 `calculateRate` 分散在个人、企业两张模型输出表中
|
||||
|
||||
因此,如果不改列表查询链路,前端无法直接在列表页拿到统一的测算利率字段。
|
||||
|
||||
## 4. 方案对比
|
||||
|
||||
### 方案一:后端分页后按记录补查测算利率
|
||||
|
||||
做法:
|
||||
|
||||
- 先查流程表分页结果
|
||||
- 再根据每条记录的 `custType` 和 `modelOutputId` 到对应模型输出表查询 `calculateRate`
|
||||
|
||||
优点:
|
||||
|
||||
- 改动可控
|
||||
|
||||
缺点:
|
||||
|
||||
- 查询次数随列表记录数增加
|
||||
- 服务层补查逻辑分散
|
||||
- 不符合本次已选定的联表方案
|
||||
|
||||
### 方案二:联表 SQL 一次查询流程列表和测算利率
|
||||
|
||||
做法:
|
||||
|
||||
- 以 `loan_pricing_workflow` 为主表
|
||||
- 基于 `model_output_id` 左连接 `model_retail_output_fields` 和 `model_corp_output_fields`
|
||||
- 统一返回一个列表专用字段 `calculateRate`
|
||||
|
||||
优点:
|
||||
|
||||
- 一次查询返回列表展示所需数据
|
||||
- 前端消费简单
|
||||
- 不需要额外补查或详情接口拼装
|
||||
|
||||
缺点:
|
||||
|
||||
- Mapper 查询层需要新增列表专用 SQL
|
||||
- 返回对象需要从实体扩展为列表专用对象
|
||||
|
||||
### 方案三:前端逐条拉详情拼装测算利率
|
||||
|
||||
做法:
|
||||
|
||||
- 列表先只返回流程数据
|
||||
- 前端逐条再请求详情,取详情中的测算利率
|
||||
|
||||
优点:
|
||||
|
||||
- 后端改动相对少
|
||||
|
||||
缺点:
|
||||
|
||||
- 请求次数多
|
||||
- 列表渲染复杂
|
||||
- 属于补丁式方案,不符合本次约束
|
||||
|
||||
## 5. 设计结论
|
||||
|
||||
采用方案二:联表 SQL 一次查询流程表和两张模型输出表,统一返回流程列表展示对象。
|
||||
|
||||
最终效果:
|
||||
|
||||
- 流程列表页新增“测算利率(%)”列
|
||||
- 默认放在“执行利率(%)”前面
|
||||
- “测算利率(%)”展示统一返回字段 `calculateRate`
|
||||
- “执行利率(%)”继续展示 `executeRate`
|
||||
|
||||
## 6. 后端设计
|
||||
|
||||
### 6.1 返回对象
|
||||
|
||||
为流程列表新增列表专用返回对象,至少包含:
|
||||
|
||||
- 业务方流水号
|
||||
- 客户名称
|
||||
- 客户类型
|
||||
- 担保方式
|
||||
- 申请金额
|
||||
- 测算利率 `calculateRate`
|
||||
- 执行利率 `executeRate`
|
||||
- 创建时间
|
||||
- 创建者
|
||||
|
||||
不再让列表接口直接返回裸 `LoanPricingWorkflow` 实体。
|
||||
|
||||
### 6.2 SQL 设计
|
||||
|
||||
以 `loan_pricing_workflow` 为主表,联表查询:
|
||||
|
||||
- `LEFT JOIN model_retail_output_fields mr ON lpw.model_output_id = mr.id`
|
||||
- `LEFT JOIN model_corp_output_fields mc ON lpw.model_output_id = mc.id`
|
||||
|
||||
测算利率统一按客户类型取值,返回别名 `calculateRate`。可采用 `CASE WHEN` 或等价写法:
|
||||
|
||||
- 当客户类型为“个人”时取 `mr.calculate_rate`
|
||||
- 当客户类型为“企业”时取 `mc.calculate_rate`
|
||||
|
||||
### 6.3 分页与筛选
|
||||
|
||||
保留当前列表分页和筛选能力:
|
||||
|
||||
- 按创建者模糊查询
|
||||
- 按客户名称模糊查询
|
||||
- 按机构号模糊查询
|
||||
- 按更新时间倒序
|
||||
|
||||
分页能力仍由当前列表接口承担,不改变接口入口路径。
|
||||
|
||||
## 7. 前端设计
|
||||
|
||||
流程列表页 `ruoyi-ui/src/views/loanPricing/workflow/index.vue` 新增一列:
|
||||
|
||||
- 列名:`测算利率(%)`
|
||||
- 位置:放在 `执行利率(%)` 前面
|
||||
- 绑定字段:`calculateRate`
|
||||
|
||||
现有 `执行利率(%)` 列不改,继续绑定 `executeRate`。
|
||||
|
||||
## 8. 边界与非目标
|
||||
|
||||
本次不包含以下内容:
|
||||
|
||||
- 不修改详情页测算利率展示逻辑
|
||||
- 不修改执行利率设置逻辑
|
||||
- 不修改流程创建逻辑
|
||||
- 不修改数据库表结构
|
||||
- 不新增流程表冗余字段存放测算利率
|
||||
- 不让前端按客户类型自行拼装测算利率来源
|
||||
|
||||
## 9. 风险与控制
|
||||
|
||||
风险点主要有两个:
|
||||
|
||||
1. 联表后返回结构变化,可能影响前端列表字段读取
|
||||
2. 个人/企业客户测算利率来源不同,若统一字段取值逻辑写错,会出现空值或串值
|
||||
|
||||
控制方式:
|
||||
|
||||
- 使用列表专用返回对象,避免污染实体语义
|
||||
- 在 SQL 中用统一别名 `calculateRate` 输出
|
||||
- 保持 `executeRate` 字段逻辑不变
|
||||
- 通过源码和接口结果核对个人、企业两类记录的展示值
|
||||
|
||||
## 10. 验证方案
|
||||
|
||||
实施后需要完成以下验证:
|
||||
|
||||
1. 后端列表查询结果中包含 `calculateRate`
|
||||
2. 个人客户记录的 `calculateRate` 来自 `model_retail_output_fields.calculate_rate`
|
||||
3. 企业客户记录的 `calculateRate` 来自 `model_corp_output_fields.calculate_rate`
|
||||
4. 前端流程列表页新增“测算利率(%)”列,且位于“执行利率(%)”前面
|
||||
5. 流程列表页同时正常展示“测算利率(%)”和“执行利率(%)”
|
||||
6. 列表查询、查看详情、设置执行利率功能不受影响
|
||||
|
||||
## 11. 实施范围
|
||||
|
||||
- 前端:流程列表页 1 个页面文件
|
||||
- 后端:Controller / Service / Mapper / 列表返回对象
|
||||
- 数据库:无表结构改动
|
||||
|
||||
本次属于列表查询结构增强与前端展示补充,不涉及数据模型持久化变更。
|
||||
@@ -0,0 +1,24 @@
|
||||
# 流程列表测算利率展示设计实施记录
|
||||
|
||||
## 实施时间
|
||||
- 2026-03-28
|
||||
|
||||
## 修改内容
|
||||
- 新增流程列表测算利率展示设计文档
|
||||
- 明确流程列表页新增“测算利率(%)”列
|
||||
- 明确后端采用联表 SQL,一次查询流程表和模型输出表
|
||||
- 明确测算利率不回写到 `loan_pricing_workflow`
|
||||
|
||||
## 文档路径
|
||||
- `doc/2026-03-28-workflow-calculate-rate-list-design.md`
|
||||
- `doc/implementation-report-2026-03-28-workflow-calculate-rate-list-design.md`
|
||||
|
||||
## 设计结论
|
||||
- 流程列表页新增“测算利率(%)”列,默认放在“执行利率(%)”前面
|
||||
- 后端列表接口通过联表 SQL 统一返回 `calculateRate`
|
||||
- 个人客户取 `model_retail_output_fields.calculate_rate`
|
||||
- 企业客户取 `model_corp_output_fields.calculate_rate`
|
||||
|
||||
## 说明
|
||||
- 按仓库要求,本次先完成设计确认,再进入前后端实施计划
|
||||
- 仓库约束禁止启用 subagent,因此本次未执行基于 subagent 的设计文档复审流程
|
||||
Reference in New Issue
Block a user