# Tasks: 增强中介黑名单字段并实现类型化模板导入

## 任务概述

本任务列表将指导完成中介黑名单功能的增强，包括添加个人和机构类型的详细字段、实现类型化的模板下载和导入功能，以及添加详情展示接口。

## 任务清单

### 阶段一：数据库扩展

#### 任务 1.1：生成数据库变更 SQL 脚本
- [ ] 编写 ALTER TABLE 语句，添加个人类型字段（11个字段）
- [ ] 编写 ALTER TABLE 语句，添加机构类型字段（15个字段）
- [ ] 编写 ALTER TABLE 语句，添加通用字段（1个字段：data_source）
- [ ] 添加必要的索引（idx_credit_code, idx_phone_number）
- [ ] 将 SQL 脚本保存到 `sql/` 目录，命名格式：`ccdi_intermediary_enhance_YYYYMMDD.sql`

**验证方式**：SQL 语法检查，确保所有字段正确添加

**依赖**：无

---

#### 任务 1.2：执行数据库变更
- [ ] 在开发环境执行 SQL 脚本
- [ ] 验证表结构变更成功
- [ ] 确认所有字段添加成功且类型正确
- [ ] 确认索引创建成功

**验证方式**：DESCRIBE ccdi_intermediary_blacklist; SHOW INDEX FROM ccdi_intermediary_blacklist;

**依赖**：任务 1.1

---

### 阶段二：后端实体类和 DTO/VO 更新

#### 任务 2.1：更新实体类 CcdiIntermediaryBlacklist
- [ ] 添加个人类型字段属性（11个）
- [ ] 添加机构类型字段属性（15个）
- [ ] 添加通用字段属性（1个：dataSource）
- [ ] 保持现有字段不变，确保向后兼容
- [ ] 使用 Lombok @Data 注解

**验证方式**：编译通过，无语法错误

**依赖**：任务 1.2

---

#### 任务 2.2：创建个人中介 DTO
- [ ] 创建 `CcdiIntermediaryPersonAddDTO.java`
- [ ] 添加个人专属字段
- [ ] 添加适当的验证注解（@NotBlank, @Size 等）
- [ ] 实现 Serializable 接口

**验证方式**：编译通过，DTO 字段完整

**依赖**：任务 2.1

---

#### 任务 2.3：创建机构中介 DTO
- [ ] 创建 `CcdiIntermediaryEntityAddDTO.java`
- [ ] 添加机构专属字段
- [ ] 添加适当的验证注解
- [ ] 实现 Serializable 接口

**验证方式**：编译通过，DTO 字段完整

**依赖**：任务 2.1

---

#### 任务 2.4：创建个人详情 VO
- [ ] 创建 `CcdiIntermediaryPersonDetailVO.java`
- [ ] 包含核心字段 + 个人专属字段
- [ ] 添加关联字段名称（如 genderName, certificateTypeName）
- [ ] 添加审计字段
- [ ] 使用 @JsonFormat 注解格式化日期

**验证方式**：编译通过，VO 字段完整

**依赖**：任务 2.2

---

#### 任务 2.5：创建机构详情 VO
- [ ] 创建 `CcdiIntermediaryEntityDetailVO.java`
- [ ] 包含核心字段 + 机构专属字段
- [ ] 添加关联字段名称
- [ ] 添加审计字段
- [ ] 使用 @JsonFormat 注解格式化日期

**验证方式**：编译通过，VO 字段完整

**依赖**：任务 2.3

---

### 阶段三：Excel 类创建

#### 任务 3.1：创建个人中介 Excel 类
- [ ] 创建 `CcdiIntermediaryPersonExcel.java`
- [ ] 使用 @ExcelProperty 注解定义 Excel 列
- [ ] 使用 @ColumnWidth 注解设置列宽
- [ ] 字段顺序：姓名 -> 人员类型 -> ... -> 备注（共14列）
- [ ] **不在模板中显示**：状态、数据来源字段（由系统自动设置）
- [ ] **添加字典下拉框注解**：
  - `@DictDropdown(dictType = "ccdi_indiv_gender")` - 性别字段
  - `@DictDropdown(dictType = "ccdi_certificate_type")` - 证件类型字段

**验证方式**：编译通过，Excel 注解正确

**依赖**：任务 2.2

---

#### 任务 3.2：创建机构中介 Excel 类
- [ ] 创建 `CcdiIntermediaryEntityExcel.java`
- [ ] 使用 @ExcelProperty 注解定义 Excel 列
- [ ] 使用 @ColumnWidth 注解设置列宽
- [ ] 字段顺序：机构名称 -> 统一社会信用代码 -> ... -> 备注（共17列）
- [ ] **不在模板中显示**：状态、数据来源字段（由系统自动设置）
- [ ] **添加字典下拉框注解**：
  - `@DictDropdown(dictType = "ccdi_entity_type")` - 主体类型字段
  - `@DictDropdown(dictType = "ccdi_enterprise_nature")` - 企业性质字段

**验证方式**：编译通过，Excel 注解正确

**依赖**：任务 2.3

---

### 阶段四：Service 层实现

#### 任务 4.1：扩展 Service 接口
- [ ] 在 `ICcdiIntermediaryBlacklistService` 中添加新方法：
  - `Object selectIntermediaryDetailById(Long intermediaryId)`
  - `String importPersonIntermediary(List<CcdiIntermediaryPersonExcel> list, boolean isUpdateSupport)`
  - `String importEntityIntermediary(List<CcdiIntermediaryEntityExcel> list, boolean isUpdateSupport)`

**验证方式**：编译通过，接口方法签名正确

**依赖**：任务 2.4, 2.5, 3.1, 3.2

---

#### 任务 4.2：实现详情查询方法
- [ ] 在 `CcdiIntermediaryBlacklistServiceImpl` 中实现 `selectIntermediaryDetailById`
- [ ] 根据中介类型返回不同的 VO
- [ ] 个人类型返回 `CcdiIntermediaryPersonDetailVO`
- [ ] 机构类型返回 `CcdiIntermediaryEntityDetailVO`
- [ ] 填充关联字段名称（字典转换）

**验证方式**：单元测试验证不同类型返回正确的 VO

**依赖**：任务 4.1

---

#### 任务 4.3：实现个人中介导入方法
- [ ] 实现 `importPersonIntermediary` 方法
- [ ] 验证必填字段（姓名、证件号码、状态）
- [ ] 验证字段长度限制
- [ ] 设置中介类型为"1"（个人）
- [ ] 支持更新模式（通过证件号判断是否已存在）
- [ ] 返回导入结果统计

**验证方式**：单元测试验证导入逻辑和错误处理

**依赖**：任务 4.1

---

#### 任务 4.4：实现机构中介导入方法
- [ ] 实现 `importEntityIntermediary` 方法
- [ ] 验证必填字段（机构名称、状态）
- [ ] 验证字段长度限制
- [ ] 设置中介类型为"2"（机构）
- [ ] 支持更新模式（通过统一社会信用代码判断是否已存在）
- [ ] 返回导入结果统计

**验证方式**：单元测试验证导入逻辑和错误处理

**依赖**：任务 4.1

---

### 阶段五：Controller 层实现

#### 任务 5.1：添加模板下载接口（支持字典下拉框）
- [ ] 添加 `POST /dpc/intermediary/importPersonTemplate` 接口
- [ ] 添加 `POST /dpc/intermediary/importEntityTemplate` 接口
- [ ] 使用 `EasyExcelUtil.importTemplateWithDictDropdown()` 生成模板
- [ ] 添加 @Operation 注解用于 Swagger 文档
- [ ] 不需要权限控制（模板下载公开）

**验证方式**：
- 通过 Swagger UI 或 Postman 测试接口
- 下载模板后验证字典下拉框功能是否正常
- 验证下拉选项是否与字典数据一致

**依赖**：任务 3.1, 3.2, 6.1（确保字典数据已配置）

---

#### 任务 5.2：添加类型化导入接口
- [ ] 添加 `POST /dpc/intermediary/importPersonData` 接口
- [ ] 添加 `POST /dpc/intermediary/importEntityData` 接口
- [ ] 添加 updateSupport 参数支持更新模式
- [ ] 添加 @PreAuthorize 权限注解
- [ ] 添加 @Log 注解记录操作日志
- [ ] 添加 @Operation 注解用于 Swagger 文档

**验证方式**：通过 Swagger UI 或 Postman 测试接口

**依赖**：任务 4.3, 4.4

---

#### 任务 5.3：修改详情接口
- [ ] 修改 `GET /dpc/intermediary/{intermediaryId}` 接口
- [ ] 返回类型改为 Object（根据实际类型返回不同 VO）
- [ ] 调用新的 `selectIntermediaryDetailById` 方法
- [ ] 确保前端能够根据类型正确解析响应

**验证方式**：通过 Swagger UI 或 Postman 测试接口，验证不同类型返回不同结构

**依赖**：任务 4.2

---

### 阶段六：字典数据配置

#### 任务 6.1：创建字典数据 SQL 脚本
- [ ] 添加人员类型字典（ccdi_person_type）
- [ ] 添加人员子类型字典（ccdi_person_sub_type）
- [ ] **添加性别字典（ccdi_indiv_gender）** - 用于个人中介下拉框
- [ ] **添加证件类型字典（ccdi_certificate_type）** - 用于个人中介下拉框
- [ ] **添加主体类型字典（ccdi_entity_type）** - 用于机构中介下拉框
- [ ] **添加企业性质字典（ccdi_enterprise_nature）** - 用于机构中介下拉框
- [ ] 添加数据来源字典（ccdi_data_source）
- [ ] 将 SQL 脚本保存到 `sql/` 目录

**验证方式**：SQL 语法检查

**依赖**：无

---

#### 任务 6.2：执行字典数据 SQL 并预热缓存
- [ ] 在开发环境执行字典数据 SQL
- [ ] 通过系统管理 > 字典管理验证字典数据
- [ ] **重要**：在每个字典类型页面点击"刷新缓存"按钮，确保字典数据加载到 Redis
- [ ] 验证字典缓存是否生效（可通过测试模板下载确认下拉框是否显示）

**验证方式**：
- 在系统界面中查看字典数据
- 下载模板验证下拉框功能
- 检查 Redis 缓存中的字典数据（`sys_dict_cache:*`）

**依赖**：任务 6.1

---

### 阶段七：测试

#### 任务 7.1：编写单元测试
- [ ] 测试详情查询方法（个人和机构）
- [ ] 测试个人中介导入方法
- [ ] 测试机构中介导入方法
- [ ] 测试数据验证逻辑
- [ ] 测试更新模式

**验证方式**：所有单元测试通过

**依赖**：任务 4.2, 4.3, 4.4

---

#### 任务 7.2：接口集成测试
- [ ] 测试模板下载接口（个人和机构）
- [ ] 测试数据导入接口（个人和机构）
- [ ] 测试详情查询接口
- [ ] 测试列表接口（确保不受影响）
- [ ] 测试现有新增/编辑接口（确保不受影响）

**验证方式**：生成测试脚本并执行，记录测试结果

**依赖**：任务 5.1, 5.2, 5.3

---

#### 任务 7.3：生成测试报告
- [ ] 生成可执行的测试脚本
- [ ] 执行测试并保存所有接口输出
- [ ] 生成测试用例报告（Markdown 格式）
- [ ] 报告保存到 `doc/` 目录

**验证方式**：测试报告完整，所有测试用例通过

**依赖**：任务 7.2

---

### 阶段八：文档更新

#### 任务 8.1：更新 API 文档
- [ ] 更新 `doc/中介黑名单API文档.md`
- [ ] 添加新增接口的文档：
  - 个人模板下载接口
  - 机构模板下载接口
  - 个人数据导入接口
  - 机构数据导入接口
  - 详情接口（说明返回类型变化）
- [ ] 更新数据模型说明

**验证方式**：文档与实际接口一致

**依赖**：任务 5.1, 5.2, 5.3

---

#### 任务 8.2：更新数据库设计文档
- [ ] 更新表结构说明
- [ ] 添加新字段说明
- [ ] 更新索引说明

**验证方式**：文档与实际表结构一致

**依赖**：任务 1.2

---

## 任务执行顺序建议

1. **第一周**：完成阶段一（数据库扩展）和阶段二（实体类和 DTO/VO）
2. **第二周**：完成阶段三（Excel 类）和阶段四（Service 层）
3. **第三周**：完成阶段五（Controller 层）和阶段六（字典数据）
4. **第四周**：完成阶段七（测试）和阶段八（文档更新）

## 并行化建议

- 任务 2.2 和 2.3 可以并行开发
- 任务 2.4 和 2.5 可以并行开发
- 任务 3.1 和 3.2 可以并行开发
- 任务 4.3 和 4.4 可以并行开发
- 任务 5.1 和 5.2 可以并行开发

## 关键里程碑

1. **里程碑 1**：数据库扩展完成（任务 1.2）
2. **里程碑 2**：后端实体类和 DTO/VO 完成（任务 2.5）
3. **里程碑 3**：Excel 类创建完成（任务 3.2）
4. **里程碑 4**：Service 层实现完成（任务 4.4）
5. **里程碑 5**：Controller 层实现完成（任务 5.3）
6. **里程碑 6**：测试通过，文档更新完成（任务 8.2）
