完善招聘信息主键关联与工作经历维护

This commit is contained in:
wkc
2026-05-07 01:04:23 +08:00
parent 4d1acc7484
commit 3bc60fedeb
22 changed files with 584 additions and 191 deletions

View File

@@ -0,0 +1,44 @@
# 招聘信息新增弹窗工作经历维护实施记录
## 背景
招聘信息维护页面的编辑弹窗已支持维护社招候选人的历史工作经历,但新增弹窗隐藏了同一维护区域,且新增提交时未携带 `workExperienceList`,导致新增招聘记录时无法同步维护候选人工作经历。
## 修改内容
- 前端 `ruoyi-ui/src/views/ccdiStaffRecruitment/index.vue`
- 将候选人历史工作经历维护区域从“仅编辑弹窗展示”调整为“社招新增和编辑弹窗均展示”。
- 新增提交时保留 `workExperienceList`,不再删除工作经历数据。
- 工作经历校验同步覆盖新增和编辑场景,仍仅对社招记录生效。
- 后端 `ccdi-info-collection/src/main/java/com/ruoyi/info/collection/domain/dto/CcdiStaffRecruitmentAddDTO.java`
- 新增 `workExperienceList` 入参,并使用 `@Valid` 复用现有工作经历字段校验。
- 后端 `ccdi-info-collection/src/main/java/com/ruoyi/info/collection/service/impl/CcdiStaffRecruitmentServiceImpl.java`
- 新增招聘信息保存后,如为社招且提交了工作经历,按新增记录主键写入 `ccdi_staff_recruitment_work`
- 复用编辑场景的工作经历实体构造逻辑,保持字段、排序号和必填过滤规则一致。
## 影响范围
- 仅影响招聘信息维护页面的新增弹窗和新增接口。
- 编辑弹窗、详情展示、导入功能和校招新增逻辑不改变。
## 验证记录
- 后端相关模块编译通过:
- `mvn -pl ccdi-info-collection -am test -DskipTests`
- 前端生产构建通过:
- `cd ruoyi-ui && source ~/.nvm/nvm.sh && nvm use && node -v && npm run build:prod`
- 使用 Node `v14.21.3`,构建仅保留既有资源体积 warning。
- 真实接口新增与编辑验证通过:
- 新增社招招聘记录 `AUTO-WORK-202605070053`,新增详情回查 `workExperienceList` 为 1 条。
- 编辑同一条招聘记录,工作经历由 1 条覆盖为 2 条,详情回查包含 `编辑后公司B``编辑新增公司C`
- 主键关联数据库回查通过:
- 使用 `bin/mysql_utf8_exec.sh output/sql/2026-05-07-staff-recruitment-work-pk-check.sql` 回查,主表自增主键 `id=6006` 下关联 2 条子表记录。
- 回查 `work_links``6006:1:编辑后公司B | 6006:2:编辑新增公司C``orphan_work_count=0`
- 真实页面验证通过:
- 使用 `browser-use` 打开真实页面 `http://localhost:1025/maintain/staffRecruitment`
- 新增弹窗已展示“候选人历史工作经历”区域,点击“新增经历”后出现工作单位、入职时间等输入列。
- 编辑同一条测试记录时,编辑弹窗按主键回显 2 条历史工作经历,列表页显示历史工作经历为 `2段`
- 清理验证通过:
- 测试结束后调用删除接口清理 `id=6006`,再次数据库回查 `orphan_work_count=0`,无测试工作经历孤儿数据残留。

View File

@@ -0,0 +1,43 @@
# 招聘项目编号允许重复实施记录
## 保存路径确认
- 实施记录保存路径:`docs/reports/implementation/2026-05-07-staff-recruitment-allow-duplicate-recruit-id.md`
- 本次为招聘信息主从表关联修正,使用实施记录目录保存。
## 修改内容
1. 移除新增、编辑、导入时对 `recruit_id` 的重复拦截,招聘项目编号允许重复。
2. `ccdi_staff_recruitment_work` 新增 `recruitment_id`,历史工作经历改为关联招聘主表自增 `id`
3. 列表历史工作经历条数、详情历史工作经历、编辑保存和删除清理均改为按 `recruitment_id` 处理。
4. 导入模板字段保持不变,历史工作经历导入时通过“招聘项目编号 + 候选人姓名 + 招聘项目名称 + 职位名称”匹配主记录;匹配多条时返回失败,避免错误归属。
5. 更新初始化 SQL、增量 SQL、数据库字段说明和 API 文档。
## 影响范围
- 后端服务:招聘信息 CRUD、双 Sheet 导入、历史工作经历查询与清理。
- 数据库表:`ccdi_staff_recruitment``ccdi_staff_recruitment_work`
- 前端页面:接口仍传主表 `id`,页面字段无新增。
- 导入功能:模板不新增主键列。
## 验证情况
1. 数据库迁移已执行:
- `sh bin/mysql_utf8_exec.sh sql/migration/2026-05-07-allow-duplicate-staff-recruitment-id.sql`
- 回查确认 `ccdi_staff_recruitment.recruit_id` 为普通索引,`ccdi_staff_recruitment_work.recruitment_id` 为非空字段并已建立索引。
2. 后端定向测试通过:
- `mvn -pl ccdi-info-collection -am -Dtest=CcdiStaffRecruitmentImportServiceImplTest,CcdiStaffRecruitmentDualImportContractTest -Dsurefire.failIfNoSpecifiedTests=false test`
3. 前端构建通过:
- `cd ruoyi-ui && nvm use && npm run build:prod`
- 构建仅保留既有资源体积 warning。
4. 真实页面验证:
- 已按项目规则优先尝试 `browser-use`,但当前 Codex 环境没有可用 in-app browser pane运行时返回 `No active Codex browser pane available`
- 使用本机 Playwright 兜底打开真实页面 `http://localhost:8080/maintain/staffRecruitment` 验证。
- 通过接口新增两条相同招聘项目编号 `RC-DUP-20260507003554` 的招聘记录,均返回操作成功。
- 给第一条记录插入 1 条历史工作经历后,页面列表展示两条同编号记录:`TestA``1段``TestB``0段`
- 打开 `TestA` 详情可见 `Company A` 历史工作经历;打开 `TestB` 详情显示“暂无历史工作经历”,未发生串数据。
- 后端日志确认列表按 `recruitment_id` 聚合历史工作经历,详情查询分别按 `recruitment_id = 6003``recruitment_id = 6004` 查询从表。
5. 清理情况:
- 已删除本轮测试主表和从表造数。
- 已关闭 Playwright 浏览器。
- 已停止本轮启动的前端 `8080` 与后端 `62318` 进程,端口回查无监听。

View File

@@ -0,0 +1,47 @@
# 招聘信息自增主键实施记录
## 保存路径确认
- 实施记录保存路径:`docs/reports/implementation/2026-05-07-staff-recruitment-auto-id-primary-key.md`
- 本次为招聘信息主键结构调整,使用实施记录目录保存。
## 修改内容
1. `ccdi_staff_recruitment` 新增 `id` 自增主键,`recruit_id` 调整为普通业务编号。
2. 后端实体 `CcdiStaffRecruitment` 的 MyBatis Plus 主键从 `recruitId` 切换为 `id`
3. 招聘信息详情、编辑、删除接口改为按 `id` 定位记录。
4. 招聘信息列表和详情 SQL 返回 `id` 字段,前端列表行操作改为传递 `id`
5. 导入链路继续在模板中填写 `recruit_id`,后续补充改为由后端解析到招聘主表 `id`
6. 补充迁移脚本 `sql/migration/2026-05-07-add-staff-recruitment-auto-id.sql`,同步更新初始化 SQL 与数据库字段说明。
7. 同步更新招聘信息 API 文档中详情、编辑、删除的主键参数说明。
## 影响范围
- 后端接口:`/ccdi/staffRecruitment/{id}``PUT /ccdi/staffRecruitment``DELETE /ccdi/staffRecruitment/{ids}`
- 前端页面:`ruoyi-ui/src/views/ccdiStaffRecruitment/index.vue`
- 数据库表:`ccdi_staff_recruitment`
- 导入功能:招聘主信息与历史工作经历模板字段不变,后续补充改为落库时关联招聘主表 `id`
## 数据库执行
- 已通过 `bin/mysql_utf8_exec.sh sql/migration/2026-05-07-add-staff-recruitment-auto-id.sql` 执行本地 dev 库迁移。
- 回查结果:
- `id``PRIMARY``auto_increment`
- `recruit_id`:普通索引,允许重复。
## 验证情况
1. 后端定向测试通过:
- `mvn -pl ccdi-info-collection -am -Dtest=CcdiStaffRecruitmentImportServiceImplTest,CcdiStaffRecruitmentDualImportContractTest -Dsurefire.failIfNoSpecifiedTests=false test`
2. 前端生产构建通过:
- `cd ruoyi-ui && nvm use && npm run build:prod`
- 构建仅保留既有资源体积 warning。
3. 后端重启验证通过:
- `sh bin/restart_java_backend.sh restart`
- 应用启动成功。
4. 真实页面验证通过:
- 使用 browser-use 打开 `http://localhost:8080/maintain/staffRecruitment`
- 登录后招聘信息维护列表正常展示。
- 点击 `RC2025001001` 详情,后端日志显示详情 SQL 使用 `WHERE id = ?` 查询主表。
- 历史工作经历后续补充改为使用招聘主表 `id` 查询,避免编号重复时串数据。
5. 测试后已关闭本轮启动的前端 `8080` 与后端 `62318` 进程,端口回查无监听。