Files
loan-pricing/openspec/changes/split-pricing-creation-interface/tasks.md

150 lines
6.9 KiB
Markdown
Raw Normal View History

2026-02-02 15:25:38 +08:00
# Tasks: 拆分个人和企业利率定价发起接口
## 数据库变更任务
### 0. 数据库表结构更新
- [x] 执行数据库迁移脚本,添加缺失字段:
- `id_num` varchar(100) - 证件号码(个人和企业都需要)
- `loan_loop` varchar(10) - 循环功能(个人客户专用)
- `is_trade_construction` varchar(10) - 贸易和建筑业企业标识(企业客户专用)
- `is_green_loan` varchar(10) - 绿色贷款(企业客户专用)
- `is_tech_ent` varchar(10) - 科技型企业(企业客户专用)
- `loan_term` varchar(50) - 贷款期限(企业客户专用)
- [x] 更新 `LoanPricingWorkflow` Entity 类,添加对应的属性和字段映射注解
- [ ] 验证数据库变更是否成功执行(需手动执行 SQL 脚本)
### 0.1 创建数据库迁移脚本
- [x]`sql/` 目录下创建 `add_missing_fields.sql` 文件
- [x] 包含所有 ALTER TABLE 语句
- [x] 添加详细的注释说明每个字段的用途
## 后端实现任务
### 1. 创建 DTO 类
- [x] 创建 `PersonalLoanPricingCreateDTO.java`
- 添加共同字段custIsn、custName、idType、idNum、guarType、applyAmt、collType、collThirdParty
- 添加个人客户特有字段bizProof是否有经营佐证、loanLoop循环功能
- 添加共同字段验证注解custIsn、guarType、applyAmt 为必填
- 添加担保方式枚举验证
- [x] 创建 `CorporateLoanPricingCreateDTO.java`
- 添加共同字段custIsn、custName、idType、idNum、guarType、applyAmt、collType、collThirdParty
- 添加企业客户特有字段isAgriGuar省农担担保贷款、isGreenLoan绿色贷款、isTechEnt科技型企业、isTradeConstruction贸易和建筑业企业、loanTerm贷款期限
- 添加共同字段验证注解custIsn、guarType、applyAmt 为必填
- 添加担保方式枚举验证
### 2. 更新 Entity 类
- [x]`LoanPricingWorkflow.java` 中添加缺失的字段属性:
- `idNum` - 证件号码
- `loanLoop` - 循环功能
- `isTradeConstruction` - 贸易和建筑业企业标识
- `isGreenLoan` - 绿色贷款
- `isTechEnt` - 科技型企业
- `loanTerm` - 贷款期限
- [x] 为新字段添加 MyBatis Plus 字段映射注解(如果需要)
- [ ] 验证 Entity 类与数据库表字段映射正确(需执行 SQL 后验证)
### 3. 创建转换器工具类
- [x] 创建 `LoanPricingConverter.java`
- 实现 `toEntity(PersonalLoanPricingCreateDTO)` 方法
- 实现 `toEntity(CorporateLoanPricingCreateDTO)` 方法
- 确保自动设置 custType 为"个人"或"企业"
- 正确映射所有字段,包括新增的 idNum、loanLoop、isTradeConstruction、isGreenLoan、isTechEnt、loanTerm
### 4. 修改 Service 层
- [x]`ILoanPricingWorkflowService` 接口中添加:
- `createPersonalLoanPricing(PersonalLoanPricingCreateDTO dto)` 方法声明
- `createCorporateLoanPricing(CorporateLoanPricingCreateDTO dto)` 方法声明
- [x]`LoanPricingWorkflowServiceImpl` 中实现新方法:
- 实现 `createPersonalLoanPricing` 方法,调用转换器后复用现有逻辑
- 实现 `createCorporateLoanPricing` 方法,调用转换器后复用现有逻辑
### 5. 修改 Controller 层
- [x]`LoanPricingWorkflowController` 中添加:
- `POST /loanPricing/workflow/create/personal` 接口
- `POST /loanPricing/workflow/create/corporate` 接口
- [x] 添加 Swagger 注解,明确标注接口用途和字段说明
- [x] 保持原有接口不变,不做 @Deprecated 标记
### 6. 单元测试
- [ ] 创建 `PersonalLoanPricingCreateDTOTest.java` 测试类
- 测试必填字段验证custIsn、guarType、applyAmt
- 测试担保方式枚举验证(信用/保证/抵押/质押)
- 测试个人特有字段bizProof、loanLoop
- [ ] 创建 `CorporateLoanPricingCreateDTOTest.java` 测试类
- 测试必填字段验证custIsn、guarType、applyAmt
- 测试担保方式枚举验证(信用/保证/抵押/质押)
- 测试企业特有字段isAgriGuar、isGreenLoan、isTechEnt、isTradeConstruction、loanTerm
- [ ] 创建 `LoanPricingConverterTest.java` 测试类
- 测试个人 DTO 转 Entity 映射完整性
- 测试企业 DTO 转 Entity 映射完整性
- 验证 custType 自动设置正确
### 7. 集成测试与测试脚本
- [x] 生成 HTTP 测试脚本 `test_personal_create.http`
- 测试个人客户发起成功场景(完整必填字段)
- 测试缺少必填字段的失败场景
- 测试担保方式枚举验证失败场景
- 使用 `/login/test` 接口获取测试 token
- [x] 生成 HTTP 测试脚本 `test_corporate_create.http`
- 测试企业客户发起成功场景(完整必填字段)
- 测试缺少必填字段的失败场景
- 测试担保方式枚举验证失败场景
- 测试企业特有字段isAgriGuar、isGreenLoan、isTechEnt、loanTerm
- [x] 生成 HTTP 测试脚本 `test_backward_compatibility.http`
- 验证原有 `POST /loanPricing/workflow/create` 接口仍可正常工作
- [x] 生成 Shell 测试脚本 `test_personal_create.sh`
- 将 HTTP 测试脚本转换为 Shell 脚本格式
- 使用 curl 命令进行接口调用
- 包含颜色输出和测试结果统计
- [x] 生成 Shell 测试脚本 `test_corporate_create.sh`
- 将 HTTP 测试脚本转换为 Shell 脚本格式
- 使用 curl 命令进行接口调用
- 包含颜色输出和测试结果统计
- [x] 生成 Shell 测试脚本 `test_backward_compatibility.sh`
- 将 HTTP 测试脚本转换为 Shell 脚本格式
- 使用 curl 命令进行接口调用
- 包含颜色输出和测试结果统计
- [ ] 执行所有测试脚本并验证结果
- [ ] 生成测试报告到 `doc/` 目录
## 文档和部署
### 8. API 文档
- [ ] 更新 Swagger 文档,添加两个新接口的完整说明
- [ ] 生成并导出 API 文档到项目 doc 目录
### 9. 代码审查和合并
- [ ] 提交 Pull Request
- [ ] 通过代码审查
- [ ] 合并到主分支
## 依赖关系
- **数据库变更任务0必须最先执行**:所有后端开发依赖于数据库字段完成
- 任务 1-5 可以并行开发依赖任务0完成
- 任务 6-7 依赖任务 1-5 完成
- 任务 8-9 依赖所有前序任务完成
> **注:本次变更仅涉及后端,前端暂不修改**
## 验证检查点
1. **数据库字段完整性**确保所有新增字段idNum、loanLoop、isTradeConstruction、isGreenLoan、isTechEnt、loanTerm已添加到数据库表
2. **Entity 类映射正确性**:确保 Entity 类字段与数据库表字段一一对应
3. **DTO 验证**:确保所有必填字段有 `@NotBlank` 注解,枚举字段有正确的验证
4. **转换器正确性**:确保 DTO 到 Entity 的转换不丢失字段,包括新增字段
5. **API 路由**:确保新接口路径正确且可访问
6. **向后兼容**:确保原有接口继续工作
7. **API 文档**:确保 Swagger 文档正确显示所有接口的参数说明