# 个人模型详情缺失展示字段补齐后端实施计划

> **For agentic workers:** REQUIRED: Use superpowers:executing-plans to implement this plan in this repository. Do not use subagents. Steps use checkbox (`- [ ]`) syntax for tracking.

**Goal:** 补齐个人模型输出对象与零售模型输出表结构的新增字段，确保个人详情接口可承载并持久化最新展示字段。

**Architecture:** 后端补齐 `ModelRetailOutputFields` 实体字段，并为 `model_retail_output_fields` 表增加 5 个对应列。保持现有控制器、服务与 Mapper 链路不变，让模型返回字段按既有流程直接反序列化、入库并回查。

**Tech Stack:** Java 17、Spring Boot、MyBatis Plus、Maven、JUnit 5

---

### Task 1: 通过测试锁定缺失字段

**Files:**
- Create: `ruoyi-loan-pricing/src/test/java/com/ruoyi/loanpricing/domain/entity/ModelRetailOutputFieldsTest.java`

- [ ] **Step 1: 编写实体字段断言测试**

新增测试，断言 `ModelRetailOutputFields` 包含以下字段：

```java
"loanRateHistory",
"minRateProduct",
"smoothRange",
"finalCalculateRate",
"referenceRate"
```

- [ ] **Step 2: 运行测试并确认先失败**

Run: `mvn -pl ruoyi-loan-pricing -Dtest=ModelRetailOutputFieldsTest test`
Expected: FAIL，提示缺少新增字段。

### Task 2: 补齐个人模型输出实体字段

**Files:**
- Modify: `ruoyi-loan-pricing/src/main/java/com/ruoyi/loanpricing/domain/entity/ModelRetailOutputFields.java`

- [ ] **Step 1: 在实体中新增 5 个字段**

新增以下字段：

- `loanRateHistory`
- `minRateProduct`
- `smoothRange`
- `finalCalculateRate`
- `referenceRate`

- [ ] **Step 2: 保持现有命名与注释风格一致**

新增字段使用与现有实体一致的 `private String` 定义和中文注释，不引入额外注解。

- [ ] **Step 3: 重新运行测试确认通过**

Run: `mvn -pl ruoyi-loan-pricing -Dtest=ModelRetailOutputFieldsTest test`
Expected: PASS

### Task 3: 补齐零售模型输出表结构

**Files:**
- Create: `sql/add_model_retail_output_rate_fields_20260403.sql`
- Modify: `sql/model_retail.sql`
- Modify: `sql/loan_pricing_schema_20260328.sql`
- Modify: `sql/loan_pricing_prod_init_20260331.sql`

- [ ] **Step 1: 新增数据库迁移脚本**

在迁移脚本中为 `model_retail_output_fields` 增加以下列：

- `loan_rate_history`
- `min_rate_product`
- `smooth_range`
- `final_calculate_rate`
- `reference_rate`

- [ ] **Step 2: 同步更新建表基线 SQL**

将相同列同步到仓库中的零售模型输出表建表脚本，避免新环境继续缺列。

- [ ] **Step 3: 对开发库执行迁移并验证列存在**

Run: `mysql ... < sql/add_model_retail_output_rate_fields_20260403.sql`
Expected: 迁移执行成功，`SHOW COLUMNS FROM model_retail_output_fields` 可看到新增 5 列
