diff --git a/doc/implementation-report-2026-03-28-workflow-calculate-rate-list-backend.md b/doc/implementation-report-2026-03-28-workflow-calculate-rate-list-backend.md new file mode 100644 index 0000000..0f77946 --- /dev/null +++ b/doc/implementation-report-2026-03-28-workflow-calculate-rate-list-backend.md @@ -0,0 +1,41 @@ +# 流程列表测算利率展示后端实施记录 + +## 实施时间 +- 2026-03-28 + +## 修改内容 +- 新增流程列表专用返回对象 `LoanPricingWorkflowListVO` +- 将流程列表分页返回从 `LoanPricingWorkflow` 调整为列表专用 VO +- 在 Mapper 中新增联表分页方法 `selectWorkflowPageWithRates` +- 新增 `LoanPricingWorkflowMapper.xml`,通过联表 SQL 一次返回 `calculateRate` 与 `executeRate` +- 保留现有详情页测算利率兼容逻辑,不回退工作区中已有的详情链路调整 + +## 关键链路 +- 主表:`loan_pricing_workflow` +- 个人客户测算利率来源:`model_retail_output_fields.calculate_rate` +- 企业客户测算利率来源:`model_corp_output_fields.calculate_rate` +- 统一返回字段:`calculateRate` + +## 修改文件 +- `ruoyi-loan-pricing/src/main/java/com/ruoyi/loanpricing/domain/vo/LoanPricingWorkflowListVO.java` +- `ruoyi-loan-pricing/src/main/java/com/ruoyi/loanpricing/mapper/LoanPricingWorkflowMapper.java` +- `ruoyi-loan-pricing/src/main/resources/mapper/loanpricing/LoanPricingWorkflowMapper.xml` +- `ruoyi-loan-pricing/src/main/java/com/ruoyi/loanpricing/service/ILoanPricingWorkflowService.java` +- `ruoyi-loan-pricing/src/main/java/com/ruoyi/loanpricing/controller/LoanPricingWorkflowController.java` +- `ruoyi-loan-pricing/src/main/java/com/ruoyi/loanpricing/service/impl/LoanPricingWorkflowServiceImpl.java` +- `ruoyi-loan-pricing/src/test/java/com/ruoyi/loanpricing/domain/vo/LoanPricingWorkflowListVOTest.java` +- `ruoyi-loan-pricing/src/test/java/com/ruoyi/loanpricing/service/impl/LoanPricingWorkflowServiceImplTest.java` + +## 验证结果 +- 已执行 `mvn -pl ruoyi-loan-pricing -am -Dsurefire.failIfNoSpecifiedTests=false -Dtest=LoanPricingWorkflowServiceImplTest test` +- 结果为 `Tests run: 3, Failures: 0, Errors: 0, Skipped: 0` +- 已执行 `mvn -pl ruoyi-loan-pricing -am -Dsurefire.failIfNoSpecifiedTests=false test` +- 模块验证结果为 `Tests run: 4, Failures: 0, Errors: 0, Skipped: 0` +- 已确认列表分页链路改为返回 `LoanPricingWorkflowListVO` +- 已确认服务层会透传 `calculateRate` + +## 说明 +- 本次未修改数据库表结构,也未将测算利率回写到 `loan_pricing_workflow` +- 单独执行 `-pl ruoyi-loan-pricing` 时会命中旧的上游构件,因此测试命令需带 `-am` +- 本次未为验证额外启动新的后端进程 +- 本次未执行真实后端启动后的接口联调,请以后端模块测试结果作为本次主要验证依据 diff --git a/doc/implementation-report-2026-03-28-workflow-calculate-rate-list-frontend.md b/doc/implementation-report-2026-03-28-workflow-calculate-rate-list-frontend.md new file mode 100644 index 0000000..acf44d0 --- /dev/null +++ b/doc/implementation-report-2026-03-28-workflow-calculate-rate-list-frontend.md @@ -0,0 +1,30 @@ +# 流程列表测算利率展示前端实施记录 + +## 实施时间 +- 2026-03-28 + +## 修改内容 +- 在流程列表页新增“测算利率(%)”列 +- 新增列绑定后端返回字段 `calculateRate` +- 保持“执行利率(%)”列继续绑定 `executeRate` +- 保持“测算利率(%)”列位于“执行利率(%)”列之前 + +## 修改文件 +- `ruoyi-ui/src/views/loanPricing/workflow/index.vue` +- `doc/implementation-report-2026-03-28-workflow-calculate-rate-list-frontend.md` + +## 验证方式 +1. 通过源码检查确认“测算利率(%)”列已新增 +2. 通过源码检查确认“测算利率(%)”列位于“执行利率(%)”之前 +3. 执行前端生产构建验证页面代码可正常打包 + +## 验证结果 +- 已新增“测算利率(%)”列,绑定字段为 `calculateRate` +- 已保留“执行利率(%)”列,绑定字段为 `executeRate` +- 已确认“测算利率(%)”列位于“执行利率(%)”列之前 +- 已执行 `npm --prefix ruoyi-ui run build:prod`,构建成功,输出包含 `Build complete.` +- 本次构建过程中仅出现项目原有的打包体积 warning,未出现新的构建错误 + +## 说明 +- 本次只调整流程列表页,不改详情页展示逻辑 +- 本次未为验证额外启动新的前端进程 diff --git a/doc/implementation-report-2026-03-28-workflow-detail-calculate-rate-model-output.md b/doc/implementation-report-2026-03-28-workflow-detail-calculate-rate-model-output.md new file mode 100644 index 0000000..3b281bd --- /dev/null +++ b/doc/implementation-report-2026-03-28-workflow-detail-calculate-rate-model-output.md @@ -0,0 +1,37 @@ +# 流程详情测算利率改为模型输出表取数实施记录 + +## 实施时间 +- 2026-03-28 + +## 问题说明 +- 流程详情接口返回的 `loanPricingWorkflow.loanRate` 仍保留流程主表中的值 +- 当模型输出表中的 `calculateRate` 与流程主表中的 `loanRate` 不一致时,详情链路无法保证“测算利率”按模型输出表口径返回 + +## 本次修改 +- 在 `LoanPricingWorkflowServiceImpl#selectLoanPricingBySerialNum` 中补充详情组装逻辑 +- 个人客户详情查询时,将 `model_retail_output_fields.calculate_rate` 回填到 `loanPricingWorkflow.loanRate` +- 企业客户详情查询时,将 `model_corp_output_fields.calculate_rate` 回填到 `loanPricingWorkflow.loanRate` +- 新增服务层单元测试,覆盖个人、企业两条详情查询分支 +- 为 `ruoyi-loan-pricing` 模块补充测试依赖 `spring-boot-starter-test` + +## 影响范围 +- 仅影响流程详情接口 `/loanPricing/workflow/{serialNum}` 的返回值组装 +- 不修改数据库表结构 +- 不修改模型输出表写入逻辑 +- 不修改流程列表接口 + +## 验证方式 +1. 新增 `LoanPricingWorkflowServiceImplTest` +2. 先执行失败用例,确认详情返回的 `loanRate` 未按模型输出表取值 +3. 修复详情组装逻辑后重新执行测试 + +## 验证结果 +- 执行命令: +```bash +mvn -pl ruoyi-loan-pricing -am -Dtest=LoanPricingWorkflowServiceImplTest -Dsurefire.failIfNoSpecifiedTests=false test +``` +- 结果:2 个测试全部通过 + +## 备注 +- 验证时发现仅编译 `ruoyi-loan-pricing` 模块会引用到本地旧版 `ruoyi-common` 依赖,需使用 `-am` 让依赖模块一并参与构建 +- 本次未启动新的前后端进程 diff --git a/doc/implementation-report-2026-03-28-workflow-execution-rate-label.md b/doc/implementation-report-2026-03-28-workflow-execution-rate-label.md new file mode 100644 index 0000000..1790d52 --- /dev/null +++ b/doc/implementation-report-2026-03-28-workflow-execution-rate-label.md @@ -0,0 +1,22 @@ +# 流程列表执行利率文案调整实施记录 + +## 本次改动 + +- 将流程列表中的列头文案由“贷款利率(%)”调整为“执行利率(%)” +- 保持字段绑定 `loanRate`、列表接口和后端数据结构不变,仅调整前端展示文案 + +## 修改文件 + +- `ruoyi-ui/src/views/loanPricing/workflow/index.vue` + +## 执行方式 + +1. 定位贷款定价流程列表页中的利率列定义 +2. 将列表列头文案从“贷款利率(%)”替换为“执行利率(%)” +3. 通过源码断言和前端构建验证改动结果 + +## 验证目标 + +- 流程列表页不再出现“贷款利率(%)”列头 +- 流程列表页展示“执行利率(%)”列头 +- 前端项目可正常构建 diff --git a/doc/implementation-report-2026-03-28-workflow-list-refresh-on-return.md b/doc/implementation-report-2026-03-28-workflow-list-refresh-on-return.md new file mode 100644 index 0000000..d5c0e56 --- /dev/null +++ b/doc/implementation-report-2026-03-28-workflow-list-refresh-on-return.md @@ -0,0 +1,33 @@ +# 流程详情返回后列表未刷新前端实施记录 + +## 实施时间 +- 2026-03-28 + +## 问题说明 +- 流程列表页 `workflow/index.vue` 仅在 `created()` 中调用 `getList()` +- 该页面在布局层通过 `keep-alive` 缓存 +- 从流程详情页返回时,列表页实例会被重新激活而不是重新创建,因此不会自动刷新 + +## 本次修改 +- 为流程列表页增加 `activated()` 生命周期 +- 页面从详情页返回并重新激活时,重新执行 `getList()` +- 新增一个无需额外测试框架的 Node 校验脚本,验证列表页激活时会调用 `getList()` + +## 影响范围 +- 仅影响前端流程列表页返回时的刷新行为 +- 不修改详情页路由 +- 不修改后端接口和查询参数 + +## 验证方式 +1. 先运行前端校验脚本,确认修复前组件缺少 `activated()`,测试失败 +2. 补充 `activated()` 后再次运行校验脚本 + +## 验证结果 +- 执行命令: +```bash +node ruoyi-ui/tests/workflow-index-refresh.test.js +``` +- 结果:校验通过 + +## 备注 +- 本次未启动新的前后端进程 diff --git a/ruoyi-loan-pricing/pom.xml b/ruoyi-loan-pricing/pom.xml index 23afa06..100c120 100644 --- a/ruoyi-loan-pricing/pom.xml +++ b/ruoyi-loan-pricing/pom.xml @@ -41,6 +41,12 @@ springdoc-openapi-starter-webmvc-ui + + org.springframework.boot + spring-boot-starter-test + test + + diff --git a/ruoyi-loan-pricing/src/main/java/com/ruoyi/loanpricing/controller/LoanPricingWorkflowController.java b/ruoyi-loan-pricing/src/main/java/com/ruoyi/loanpricing/controller/LoanPricingWorkflowController.java index c795fd2..615d98c 100644 --- a/ruoyi-loan-pricing/src/main/java/com/ruoyi/loanpricing/controller/LoanPricingWorkflowController.java +++ b/ruoyi-loan-pricing/src/main/java/com/ruoyi/loanpricing/controller/LoanPricingWorkflowController.java @@ -12,6 +12,7 @@ import com.ruoyi.common.enums.BusinessType; import com.ruoyi.loanpricing.domain.dto.CorporateLoanPricingCreateDTO; import com.ruoyi.loanpricing.domain.dto.PersonalLoanPricingCreateDTO; import com.ruoyi.loanpricing.domain.entity.LoanPricingWorkflow; +import com.ruoyi.loanpricing.domain.vo.LoanPricingWorkflowListVO; import com.ruoyi.loanpricing.domain.vo.LoanPricingWorkflowVO; import com.ruoyi.loanpricing.service.ILoanPricingWorkflowService; import io.swagger.v3.oas.annotations.Operation; @@ -68,8 +69,8 @@ public class LoanPricingWorkflowController extends BaseController public TableDataInfo list(LoanPricingWorkflow loanPricingWorkflow) { PageDomain pageDomain = TableSupport.buildPageRequest(); - Page page = new Page<>(pageDomain.getPageNum(), pageDomain.getPageSize()); - IPage result = loanPricingWorkflowService.selectLoanPricingPage(page, loanPricingWorkflow); + Page page = new Page<>(pageDomain.getPageNum(), pageDomain.getPageSize()); + IPage result = loanPricingWorkflowService.selectLoanPricingPage(page, loanPricingWorkflow); TableDataInfo rspData = new TableDataInfo(); rspData.setCode(200); rspData.setMsg("查询成功"); diff --git a/ruoyi-loan-pricing/src/main/java/com/ruoyi/loanpricing/domain/vo/LoanPricingWorkflowListVO.java b/ruoyi-loan-pricing/src/main/java/com/ruoyi/loanpricing/domain/vo/LoanPricingWorkflowListVO.java new file mode 100644 index 0000000..80ef681 --- /dev/null +++ b/ruoyi-loan-pricing/src/main/java/com/ruoyi/loanpricing/domain/vo/LoanPricingWorkflowListVO.java @@ -0,0 +1,27 @@ +package com.ruoyi.loanpricing.domain.vo; + +import lombok.Data; + +import java.util.Date; + +@Data +public class LoanPricingWorkflowListVO +{ + private String serialNum; + + private String custName; + + private String custType; + + private String guarType; + + private String applyAmt; + + private String calculateRate; + + private String executeRate; + + private Date createTime; + + private String createBy; +} diff --git a/ruoyi-loan-pricing/src/main/java/com/ruoyi/loanpricing/mapper/LoanPricingWorkflowMapper.java b/ruoyi-loan-pricing/src/main/java/com/ruoyi/loanpricing/mapper/LoanPricingWorkflowMapper.java index 1df34f7..63746ef 100644 --- a/ruoyi-loan-pricing/src/main/java/com/ruoyi/loanpricing/mapper/LoanPricingWorkflowMapper.java +++ b/ruoyi-loan-pricing/src/main/java/com/ruoyi/loanpricing/mapper/LoanPricingWorkflowMapper.java @@ -1,7 +1,11 @@ package com.ruoyi.loanpricing.mapper; +import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.ruoyi.loanpricing.domain.entity.LoanPricingWorkflow; +import com.ruoyi.loanpricing.domain.vo.LoanPricingWorkflowListVO; +import org.apache.ibatis.annotations.Param; /** * 利率定价流程Mapper接口 @@ -11,5 +15,6 @@ import com.ruoyi.loanpricing.domain.entity.LoanPricingWorkflow; */ public interface LoanPricingWorkflowMapper extends BaseMapper { - + IPage selectWorkflowPageWithRates(Page page, + @Param("query") LoanPricingWorkflow query); } diff --git a/ruoyi-loan-pricing/src/main/java/com/ruoyi/loanpricing/service/ILoanPricingWorkflowService.java b/ruoyi-loan-pricing/src/main/java/com/ruoyi/loanpricing/service/ILoanPricingWorkflowService.java index 693e3a0..0f8cda2 100644 --- a/ruoyi-loan-pricing/src/main/java/com/ruoyi/loanpricing/service/ILoanPricingWorkflowService.java +++ b/ruoyi-loan-pricing/src/main/java/com/ruoyi/loanpricing/service/ILoanPricingWorkflowService.java @@ -5,6 +5,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.ruoyi.loanpricing.domain.dto.CorporateLoanPricingCreateDTO; import com.ruoyi.loanpricing.domain.dto.PersonalLoanPricingCreateDTO; import com.ruoyi.loanpricing.domain.entity.LoanPricingWorkflow; +import com.ruoyi.loanpricing.domain.vo.LoanPricingWorkflowListVO; import com.ruoyi.loanpricing.domain.vo.LoanPricingWorkflowVO; import java.util.List; @@ -48,7 +49,7 @@ public interface ILoanPricingWorkflowService * @param loanPricingWorkflow 利率定价流程信息 * @return 分页结果 */ - public IPage selectLoanPricingPage(Page page, LoanPricingWorkflow loanPricingWorkflow); + public IPage selectLoanPricingPage(Page page, LoanPricingWorkflow loanPricingWorkflow); /** * 查询利率定价流程详情 diff --git a/ruoyi-loan-pricing/src/main/java/com/ruoyi/loanpricing/service/impl/LoanPricingWorkflowServiceImpl.java b/ruoyi-loan-pricing/src/main/java/com/ruoyi/loanpricing/service/impl/LoanPricingWorkflowServiceImpl.java index a2635db..e559c05 100644 --- a/ruoyi-loan-pricing/src/main/java/com/ruoyi/loanpricing/service/impl/LoanPricingWorkflowServiceImpl.java +++ b/ruoyi-loan-pricing/src/main/java/com/ruoyi/loanpricing/service/impl/LoanPricingWorkflowServiceImpl.java @@ -8,6 +8,7 @@ import com.ruoyi.loanpricing.domain.dto.PersonalLoanPricingCreateDTO; import com.ruoyi.loanpricing.domain.entity.LoanPricingWorkflow; import com.ruoyi.loanpricing.domain.entity.ModelCorpOutputFields; import com.ruoyi.loanpricing.domain.entity.ModelRetailOutputFields; +import com.ruoyi.loanpricing.domain.vo.LoanPricingWorkflowListVO; import com.ruoyi.loanpricing.domain.vo.LoanPricingWorkflowVO; import com.ruoyi.loanpricing.mapper.LoanPricingWorkflowMapper; import com.ruoyi.loanpricing.mapper.ModelCorpOutputFieldsMapper; @@ -126,12 +127,9 @@ public class LoanPricingWorkflowServiceImpl implements ILoanPricingWorkflowServi * @return 利率定价流程 */ @Override - public IPage selectLoanPricingPage(Page page, LoanPricingWorkflow loanPricingWorkflow) + public IPage selectLoanPricingPage(Page page, LoanPricingWorkflow loanPricingWorkflow) { - LambdaQueryWrapper wrapper = buildQueryWrapper(loanPricingWorkflow); - // 按更新时间倒序 - wrapper.orderByDesc(LoanPricingWorkflow::getUpdateTime); - return loanPricingWorkflowMapper.selectPage(page, wrapper); + return loanPricingWorkflowMapper.selectWorkflowPageWithRates(page, loanPricingWorkflow); } /** @@ -153,10 +151,18 @@ public class LoanPricingWorkflowServiceImpl implements ILoanPricingWorkflowServi if (Objects.nonNull(loanPricingWorkflow.getModelOutputId())){ if (loanPricingWorkflow.getCustType().equals("个人")){ ModelRetailOutputFields modelRetailOutputFields = modelRetailOutputFieldsMapper.selectById(loanPricingWorkflow.getModelOutputId()); + if (Objects.nonNull(modelRetailOutputFields)) + { + loanPricingWorkflow.setLoanRate(modelRetailOutputFields.getCalculateRate()); + } loanPricingWorkflowVO.setModelRetailOutputFields(modelRetailOutputFields); } if (loanPricingWorkflow.getCustType().equals("企业")){ ModelCorpOutputFields modelCorpOutputFields = modelCorpOutputFieldsMapper.selectById(loanPricingWorkflow.getModelOutputId()); + if (Objects.nonNull(modelCorpOutputFields)) + { + loanPricingWorkflow.setLoanRate(modelCorpOutputFields.getCalculateRate()); + } loanPricingWorkflowVO.setModelCorpOutputFields(modelCorpOutputFields); } } diff --git a/ruoyi-loan-pricing/src/main/resources/mapper/loanpricing/LoanPricingWorkflowMapper.xml b/ruoyi-loan-pricing/src/main/resources/mapper/loanpricing/LoanPricingWorkflowMapper.xml new file mode 100644 index 0000000..d3e66c2 --- /dev/null +++ b/ruoyi-loan-pricing/src/main/resources/mapper/loanpricing/LoanPricingWorkflowMapper.xml @@ -0,0 +1,39 @@ + + + + + + + diff --git a/ruoyi-loan-pricing/src/test/java/com/ruoyi/loanpricing/domain/vo/LoanPricingWorkflowListVOTest.java b/ruoyi-loan-pricing/src/test/java/com/ruoyi/loanpricing/domain/vo/LoanPricingWorkflowListVOTest.java new file mode 100644 index 0000000..cff31db --- /dev/null +++ b/ruoyi-loan-pricing/src/test/java/com/ruoyi/loanpricing/domain/vo/LoanPricingWorkflowListVOTest.java @@ -0,0 +1,19 @@ +package com.ruoyi.loanpricing.domain.vo; + +import static org.junit.jupiter.api.Assertions.assertEquals; + +import org.junit.jupiter.api.Test; + +class LoanPricingWorkflowListVOTest +{ + @Test + void shouldExposeCalculateRateAndExecuteRateFields() + { + LoanPricingWorkflowListVO vo = new LoanPricingWorkflowListVO(); + vo.setCalculateRate("6.15"); + vo.setExecuteRate("5.80"); + + assertEquals("6.15", vo.getCalculateRate()); + assertEquals("5.80", vo.getExecuteRate()); + } +} diff --git a/ruoyi-loan-pricing/src/test/java/com/ruoyi/loanpricing/service/impl/LoanPricingWorkflowServiceImplTest.java b/ruoyi-loan-pricing/src/test/java/com/ruoyi/loanpricing/service/impl/LoanPricingWorkflowServiceImplTest.java new file mode 100644 index 0000000..b39f6f1 --- /dev/null +++ b/ruoyi-loan-pricing/src/test/java/com/ruoyi/loanpricing/service/impl/LoanPricingWorkflowServiceImplTest.java @@ -0,0 +1,99 @@ +package com.ruoyi.loanpricing.service.impl; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.mockito.ArgumentMatchers.any; +import static org.mockito.Mockito.when; + +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.ruoyi.loanpricing.domain.entity.LoanPricingWorkflow; +import com.ruoyi.loanpricing.domain.entity.ModelCorpOutputFields; +import com.ruoyi.loanpricing.domain.entity.ModelRetailOutputFields; +import com.ruoyi.loanpricing.domain.vo.LoanPricingWorkflowListVO; +import com.ruoyi.loanpricing.domain.vo.LoanPricingWorkflowVO; +import com.ruoyi.loanpricing.mapper.LoanPricingWorkflowMapper; +import com.ruoyi.loanpricing.mapper.ModelCorpOutputFieldsMapper; +import com.ruoyi.loanpricing.mapper.ModelRetailOutputFieldsMapper; +import com.ruoyi.loanpricing.service.LoanPricingModelService; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.ExtendWith; +import org.mockito.InjectMocks; +import org.mockito.Mock; +import org.mockito.junit.jupiter.MockitoExtension; + +@ExtendWith(MockitoExtension.class) +class LoanPricingWorkflowServiceImplTest +{ + @Mock + private LoanPricingWorkflowMapper loanPricingWorkflowMapper; + + @Mock + private LoanPricingModelService loanPricingModelService; + + @Mock + private ModelRetailOutputFieldsMapper modelRetailOutputFieldsMapper; + + @Mock + private ModelCorpOutputFieldsMapper modelCorpOutputFieldsMapper; + + @InjectMocks + private LoanPricingWorkflowServiceImpl loanPricingWorkflowService; + + @Test + void shouldReturnPagedWorkflowListWithCalculateRate() + { + LoanPricingWorkflowListVO row = new LoanPricingWorkflowListVO(); + row.setCalculateRate("6.15"); + + Page pageResult = new Page<>(1, 10); + pageResult.setRecords(java.util.List.of(row)); + + when(loanPricingWorkflowMapper.selectWorkflowPageWithRates(any(), any())).thenReturn(pageResult); + + IPage result = loanPricingWorkflowService.selectLoanPricingPage(new Page<>(1, 10), new LoanPricingWorkflow()); + + assertEquals("6.15", result.getRecords().get(0).getCalculateRate()); + } + + @Test + void shouldUseRetailModelOutputCalculateRateForWorkflowDetail() + { + LoanPricingWorkflow workflow = new LoanPricingWorkflow(); + workflow.setSerialNum("P20260328001"); + workflow.setCustType("个人"); + workflow.setModelOutputId(11L); + workflow.setLoanRate("4.35"); + + ModelRetailOutputFields retailOutputFields = new ModelRetailOutputFields(); + retailOutputFields.setCalculateRate("6.15"); + + when(loanPricingWorkflowMapper.selectOne(any())).thenReturn(workflow); + when(modelRetailOutputFieldsMapper.selectById(11L)).thenReturn(retailOutputFields); + + LoanPricingWorkflowVO result = loanPricingWorkflowService.selectLoanPricingBySerialNum("P20260328001"); + + assertEquals("6.15", result.getLoanPricingWorkflow().getLoanRate()); + assertEquals("6.15", result.getModelRetailOutputFields().getCalculateRate()); + } + + @Test + void shouldUseCorporateModelOutputCalculateRateForWorkflowDetail() + { + LoanPricingWorkflow workflow = new LoanPricingWorkflow(); + workflow.setSerialNum("C20260328001"); + workflow.setCustType("企业"); + workflow.setModelOutputId(22L); + workflow.setLoanRate("3.80"); + + ModelCorpOutputFields corpOutputFields = new ModelCorpOutputFields(); + corpOutputFields.setCalculateRate("3.932"); + + when(loanPricingWorkflowMapper.selectOne(any())).thenReturn(workflow); + when(modelCorpOutputFieldsMapper.selectById(22L)).thenReturn(corpOutputFields); + + LoanPricingWorkflowVO result = loanPricingWorkflowService.selectLoanPricingBySerialNum("C20260328001"); + + assertEquals("3.932", result.getLoanPricingWorkflow().getLoanRate()); + assertEquals("3.932", result.getModelCorpOutputFields().getCalculateRate()); + } +} diff --git a/ruoyi-ui/src/views/loanPricing/workflow/index.vue b/ruoyi-ui/src/views/loanPricing/workflow/index.vue index b064c4a..0db58c4 100644 --- a/ruoyi-ui/src/views/loanPricing/workflow/index.vue +++ b/ruoyi-ui/src/views/loanPricing/workflow/index.vue @@ -50,6 +50,7 @@ +