# 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 文档正确显示所有接口的参数说明