# 员工基础信息新增是否党员字段后端实施计划

> **For agentic workers:** REQUIRED: Use superpowers:subagent-driven-development (if subagents available) or superpowers:executing-plans to implement this plan. Steps use checkbox (`- [ ]`) syntax for tracking.

**Goal:** 在员工基础信息后端链路中新增“是否党员”字段，保证数据库、实体、接口、导入导出与最小测试契约保持一致。

**Architecture:** 继续沿用 `ccdi_base_staff` 现有维护链路，在表上增加 `is_party_member` 字段，并在 `CcdiBaseStaff` 的实体、DTO、VO、Excel、Mapper XML 与服务校验中同步补齐。实现保持最短路径，不新增新的接口层或旁路转换逻辑，只在现有员工维护链路上扩字段。

**Tech Stack:** MySQL, Java 21, Spring Boot 3, MyBatis Plus, EasyExcel, JUnit 5, Markdown

---

## 文件结构与职责

**后端源码**

- `ccdi-info-collection/src/main/java/com/ruoyi/info/collection/domain/CcdiBaseStaff.java`
  新增 `partyMember` 字段并映射 `is_party_member`。
- `ccdi-info-collection/src/main/java/com/ruoyi/info/collection/domain/dto/CcdiBaseStaffAddDTO.java`
  新增新增接口入参字段与非空校验。
- `ccdi-info-collection/src/main/java/com/ruoyi/info/collection/domain/dto/CcdiBaseStaffEditDTO.java`
  新增编辑接口入参字段与非空校验。
- `ccdi-info-collection/src/main/java/com/ruoyi/info/collection/domain/vo/CcdiBaseStaffVO.java`
  新增详情/列表返回字段。
- `ccdi-info-collection/src/main/java/com/ruoyi/info/collection/domain/excel/CcdiBaseStaffExcel.java`
  新增 Excel 导入导出列，并挂接“是/否”字典下拉。
- `ccdi-info-collection/src/main/java/com/ruoyi/info/collection/domain/vo/ImportFailureVO.java`
  新增导入失败记录字段回显。
- `ccdi-info-collection/src/main/resources/mapper/info/collection/CcdiBaseStaffMapper.xml`
  在列表查询、批量新增、批量更新 SQL 中补 `is_party_member`。
- `ccdi-info-collection/src/main/java/com/ruoyi/info/collection/service/impl/CcdiBaseStaffServiceImpl.java`
  补新增/编辑链路校验，约束 `partyMember` 只能为 `0/1`。
- `ccdi-info-collection/src/main/java/com/ruoyi/info/collection/service/impl/CcdiBaseStaffImportServiceImpl.java`
  补导入链路的必填和枚举值校验。

**SQL**

- `sql/migration/2026-04-17-add-base-staff-party-member.sql`
  以幂等方式为 `ccdi_base_staff` 增加字段，并补充 `ccdi_yes_no_flag` 字典数据。
- `sql/ccdi_yes_no_flag_dict.sql`
  提供“是/否标记”字典初始化脚本，供新环境或独立初始化使用。

**测试**

- `ccdi-info-collection/src/test/java/com/ruoyi/info/collection/service/CcdiBaseStaffServiceImplTest.java`
  验证服务层新增/修改/详情查询会透传 `partyMember`。
- `ccdi-info-collection/src/test/java/com/ruoyi/info/collection/service/CcdiBaseStaffImportServiceImplTest.java`
  验证导入场景仅允许 `0/1`。
- `ccdi-info-collection/src/test/java/com/ruoyi/info/collection/mapper/CcdiBaseStaffMapperTest.java`
  验证 Mapper XML 已包含 `is_party_member` 与 `#{item.partyMember}`。
- `ccdi-info-collection/src/test/java/com/ruoyi/info/collection/utils/EasyExcelUtilTemplateTest.java`
  验证员工模板已补“是否党员”下拉列。

## 实施步骤

- [ ] 在 `ccdi_base_staff` 表增加 `is_party_member`，默认值为 `0`，避免历史数据为空。
- [ ] 在员工基础信息实体、DTO、VO、Excel 对象中补齐 `partyMember`。
- [ ] 在 `CcdiBaseStaffMapper.xml` 的列表、批量新增、批量更新 SQL 中补 `is_party_member`。
- [ ] 在 `CcdiBaseStaffServiceImpl` 与 `CcdiBaseStaffImportServiceImpl` 中增加 `0/1` 值域校验。
- [ ] 新增 `ccdi_yes_no_flag` 字典脚本，保证导入模板下拉可用。
- [ ] 补充并执行后端定向测试；若执行受现有依赖问题阻塞，需要在记录中明确注明阻塞原因。

## 验证记录

- 已尝试执行：

```bash
mvn -pl ccdi-info-collection -Dtest=CcdiBaseStaffServiceImplTest,CcdiBaseStaffImportServiceImplTest,CcdiBaseStaffMapperTest,EasyExcelUtilTemplateTest test
mvn -pl ccdi-info-collection -DskipTests compile
```

- 当前结果：
  - `test` 在进入本次新增断言前，被模块内既有测试编译问题拦截，表现为缺少 `org.springframework.data.redis.core.*` 类型。
  - `compile` 被模块当前既有依赖缺失拦截，表现为缺少 `com.ruoyi.common.annotation.*`、`org.springframework.data.redis.core.*`、`IdCardUtil` 等类型。
  - 上述阻塞不是本次“是否党员”字段新增引入的新问题，但会影响自动化验证结论，需要后续先修复模块依赖基线。

## 完成标准

- 员工基础信息接口可读写 `partyMember`
- 员工列表、详情、导入导出链路都包含 `partyMember`
- 数据库字段与字典 SQL 已补齐
- 后端测试契约已同步更新
- 已明确记录当前自动化验证阻塞点
