# 个人/企业模型接口拆分实施记录

## 修改内容

- 将统一模型接口配置 `model.url` 拆分为 `model.personal-url` 和 `model.corporate-url`。
- `dev`、`uat` 环境分别指向本地个人/企业 mock：
  - `http://localhost:63310/rate/pricing/mock/invokeModel/personal`
  - `http://localhost:63310/rate/pricing/mock/invokeModel/corporate`
- `pro` 环境改为从 `MODEL_PERSONAL_URL`、`MODEL_CORPORATE_URL` 读取真实接口地址。
- `ModelService` 拆分为 `invokePersonalModel` 和 `invokeCorporateModel`，分别返回 `ModelRetailOutputFields`、`ModelCorpOutputFields`。
- `LoanPricingModelService` 根据 `custType` 调用对应模型接口，个人只写个人模型输出表，企业只写企业模型输出表。
- mock 控制器拆分为个人、企业两个入口，不再保留统一 mock 路径作为业务调用入口。

## 字段管理

- 个人模型返回字段继续由 `ModelRetailOutputFields` 与 `model_retail_output_fields` 管理。
- 企业模型返回字段继续由 `ModelCorpOutputFields` 与 `model_corp_output_fields` 管理。
- 未新增统一返回对象，避免个人/企业字段混在同一套结构中。

## 验证记录

- 后端单测：
  - `mvn -pl ruoyi-loan-pricing -am -Dtest=LoanPricingModelServiceTest,ModelRetailOutputFieldsTest,ModelCorpOutputFieldsTest -Dsurefire.failIfNoSpecifiedTests=false test`
  - 结果：通过，`Tests run: 5, Failures: 0, Errors: 0`
- 后端打包与启动：
  - `./bin/restart_java_backend.sh restart`
  - 结果：打包成功，提升权限后启动成功，后端监听 `63310`。
- 真实接口验证：
  - `/login/test` 获取 token 成功。
  - 调用 `/loanPricing/workflow/create/personal` 创建个人流程，流水号 `20260427150819677`。
  - 查询个人详情，返回 `modelRetailOutputFields.finalCalculateRate=6.05`，`modelCorpOutputFields=null`。
  - 调用 `/loanPricing/workflow/create/corporate` 创建企业流程，流水号 `20260427150820494`。
  - 查询企业详情，返回 `modelCorpOutputFields.finalCalculateRate=3.732`，`modelRetailOutputFields=null`。
  - 缺少 `custIsn` 的个人创建请求返回 `客户内码不能为空`。
  - 后端日志确认个人命中 `/rate/pricing/mock/invokeModel/personal`，企业命中 `/rate/pricing/mock/invokeModel/corporate`。
- 测试结束后已执行 `./bin/restart_java_backend.sh stop` 停止本次启动的后端进程。

## 注意事项

- 生产环境启动前必须提供 `MODEL_PERSONAL_URL`、`MODEL_CORPORATE_URL`。
- 本次不改前端页面和现有业务接口路径。
