## 1. 数据库设计与实现 - [x] 1.1 创建 `ccdi_employee` 员工信息表,包含字段:employee_id, name, teller_no, org_no, id_card, phone, hire_date, status, create_by, create_time, update_by, update_time - [x] 1.2 为 `ccdi_employee` 表创建唯一约束:uk_teller_no (柜员号唯一), uk_id_card (身份证号唯一) - [x] 1.3 为 `ccdi_employee` 表创建索引:idx_org_no, idx_status - [x] 1.4 创建 `ccdi_employee_relative` 员工亲属表,包含字段:relative_id, employee_id, relative_name, relative_id_card, relative_phone, relationship, create_by, create_time, update_by, update_time - [x] 1.5 为 `ccdi_employee_relative` 表创建索引:idx_employee_id, idx_relative_id_card - [x] 1.6 添加外键约束:ccdi_employee_relative.employee_id → ccdi_employee.employee_id(可选,根据项目规范决定) - [x] 1.7 创建 `ccdi_relative_relationship` 字典类型及字典数据(配偶、父亲、母亲、子女、兄弟姐妹、其他) - [x] 1.8 创建 `ccdi_employee_status` 字典类型及字典数据(在职=0、离职=1) ## 2. 后端实体类创建 - [x] 2.1 创建 `CcdiEmployee.java` 实体类,使用 @Data 注解,包含 @Excel 注解用于导入导出 - [x] 2.2 创建 `CcdiEmployeeRelative.java` 实体类,使用 @Data 注解 - [x] 2.3 创建 `CcdiEmployeeAddDTO.java` 新增 DTO,使用 @Data 注解,包含 @Validated 校验注解 - [x] 2.4 创建 `CcdiEmployeeEditDTO.java` 编辑 DTO,使用 @Data 注解,包含 @Validated 校验注解 - [x] 2.5 创建 `CcdiEmployeeQueryDTO.java` 查询 DTO,使用 @Data 注解 - [x] 2.6 创建 `CcdiEmployeeVO.java` 视图对象,使用 @Data 注解,包含亲属列表 - [x] 2.7 创建 `CcdiEmployeeRelativeVO.java` 亲属视图对象,使用 @Data 注解 - [x] 2.8 创建 `CcdiEmployeeRelativeAddDTO.java` 亲属新增 DTO,使用 @Data 注解 ## 3. Mapper 层实现 - [x] 3.1 创建 `CcdiEmployeeMapper.java` 接口,继承 `BaseMapper` - [x] 3.2 创建 `CcdiEmployeeMapper.xml` MyBatis 映射文件,仅实现复杂查询(如:员工详情包含亲属列表) - [x] 3.3 在 XML 中实现 `selectEmployeeWithRelatives` 方法,关联查询员工及其亲属信息 - [x] 3.4 创建 `CcdiEmployeeRelativeMapper.java` 接口,继承 `BaseMapper` - [x] 3.5 创建 `CcdiEmployeeRelativeMapper.xml` MyBatis 映射文件(如需复杂查询) - [x] 3.6 简单 CRUD 操作使用 MyBatis Plus 提供的 BaseMapper 方法(insert, deleteById, deleteByIds, updateById, selectById, selectList) - [x] 3.7 简单条件查询使用 LambdaQueryWrapper 或 QueryWrapper(如:按柜员号、身份证号查询) - [x] 3.8 复杂多条件查询在 XML 中编写自定义 SQL ## 4. Service 层实现 - [x] 4.1 创建 `ICcdiEmployeeService.java` 接口 - [x] 4.2 创建 `CcdiEmployeeServiceImpl.java` 实现类 - [x] 4.3 实现查询员工列表方法 `selectEmployeeList`,支持分页和多条件查询 - [x] 4.4 实现查询员工详情方法 `selectEmployeeById`,包含亲属信息 - [x] 4.5 实现新增员工方法 `insertEmployee`,支持同时插入亲属信息 - [x] 4.6 实现编辑员工方法 `updateEmployee`,支持更新亲属信息(先删除后插入) - [x] 4.7 实现删除员工方法 `deleteEmployeeByIds`,级联删除亲属信息 - [x] 4.8 实现导出员工数据方法 `selectEmployeeListForExport` - [x] 4.9 实现导入员工数据方法 `importEmployee`,支持批量导入员工和亲属 - [x] 4.10 实现柜员号唯一性校验 - [x] 4.11 实现身份证号格式校验 - [x] 4.12 实现电话格式校验 ## 5. Controller 层实现 - [x] 5.1 创建 `CcdiEmployeeController.java` 控制器类 - [x] 5.2 实现 `GET /dpc/employee/list` 查询列表接口,添加 @PreAuthorize 权限注解 - [x] 5.3 实现 `GET /dpc/employee/{id}` 查询详情接口 - [x] 5.4 实现 `POST /dpc/employee` 新增接口 - [x] 5.5 实现 `PUT /dpc/employee` 编辑接口 - [x] 5.6 实现 `DELETE /dpc/employee/{ids}` 删除接口 - [x] 5.7 实现 `POST /dpc/employee/export` 导出接口 - [x] 5.8 实现 `POST /dpc/employee/importTemplate` 下载模板接口 - [x] 5.9 实现 `POST /dpc/employee/importData` 导入接口 - [x] 5.10 为所有接口添加 @Log 注解记录操作日志 ## 6. 导入导出功能实现 - [x] 6.1 配置 `CcdiEmployee` 实体的 @Excel 注解,定义导出列 - [x] 6.2 配置 `CcdiEmployeeRelative` 实体的 @Excel 注解(用于多 Sheet 导入) - [x] 6.3 实现导入模板的 Excel 格式定义 - [x] 6.4 实现 Excel 解析逻辑,支持多 Sheet 读取 - [x] 6.5 实现员工和亲属数据的关联逻辑(通过身份证号) - [x] 6.6 实现导入数据校验逻辑 - [x] 6.7 实现导入错误信息收集和反馈 ## 7. 数据校验 - [x] 7.1 实现 DTO 层的 @NotBlank、@Size、@Pattern 等校验注解 - [x] 7.2 实现身份证号格式校验(18位,符合国标) - [x] 7.3 实现电话号码格式校验(11位手机号) - [x] 7.4 实现柜员号唯一性校验 - [x] 7.5 实现入职时间日期格式校验 - [x] 7.6 实现亲属信息必填字段校验 ## 8. 测试 - [x] 8.1 生成可执行的测试脚本 - [x] 8.2 测试查询员工列表接口(分页、条件筛选) - [x] 8.3 测试查询员工详情接口(包含亲属信息) - [x] 8.4 测试新增员工接口(包含亲属信息) - [x] 8.5 测试编辑员工接口(修改基本信息、新增/修改/删除亲属) - [x] 8.6 测试删除员工接口(验证级联删除亲属) - [x] 8.7 测试导出功能 - [x] 8.8 测试下载模板功能 - [x] 8.9 测试导入功能(正常数据、错误数据、更新模式) - [x] 8.10 测试权限控制(无权限访问应被拒绝) - [x] 8.11 测试数据校验(空值、格式错误、重复数据) ## 9. API 文档生成 - [x] 9.1 确认所有接口在 Swagger UI 中正确显示 - [x] 9.2 在项目文件目录下生成 API 文档(doc/API文档.md) - [x] 9.3 文档包含:接口地址、请求方式、请求参数、响应格式、权限要求