From 4d1acc748453d5bc7943da5b9d9fa0c99c570fe8 Mon Sep 17 00:00:00 2001 From: wkc <978997012@qq.com> Date: Thu, 7 May 2026 00:13:00 +0800 Subject: [PATCH] =?UTF-8?q?=E6=8B=9B=E8=81=98=E5=AF=BC=E5=85=A5=E6=A8=A1?= =?UTF-8?q?=E6=9D=BF=E5=A2=9E=E5=8A=A0=E6=8B=9B=E8=81=98=E7=B1=BB=E5=9E=8B?= =?UTF-8?q?=E4=B8=8B=E6=8B=89=E6=A1=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../excel/CcdiStaffRecruitmentExcel.java | 1 + .../utils/EasyExcelUtilTemplateTest.java | 9 +++++ ...taff-recruitment-type-dropdown-template.md | 35 +++++++++++++++++++ ...-05-07-add-staff-recruitment-type-dict.sql | 25 +++++++++++++ 4 files changed, 70 insertions(+) create mode 100644 docs/reports/implementation/2026-05-07-staff-recruitment-type-dropdown-template.md create mode 100644 sql/migration/2026-05-07-add-staff-recruitment-type-dict.sql diff --git a/ccdi-info-collection/src/main/java/com/ruoyi/info/collection/domain/excel/CcdiStaffRecruitmentExcel.java b/ccdi-info-collection/src/main/java/com/ruoyi/info/collection/domain/excel/CcdiStaffRecruitmentExcel.java index 26484b4c..937c6572 100644 --- a/ccdi-info-collection/src/main/java/com/ruoyi/info/collection/domain/excel/CcdiStaffRecruitmentExcel.java +++ b/ccdi-info-collection/src/main/java/com/ruoyi/info/collection/domain/excel/CcdiStaffRecruitmentExcel.java @@ -69,6 +69,7 @@ public class CcdiStaffRecruitmentExcel implements Serializable { /** 招聘类型 */ @ExcelProperty(value = "招聘类型", index = 7) @ColumnWidth(12) + @DictDropdown(dictType = "ccdi_recruit_type") @Required private String recruitType; diff --git a/ccdi-info-collection/src/test/java/com/ruoyi/info/collection/utils/EasyExcelUtilTemplateTest.java b/ccdi-info-collection/src/test/java/com/ruoyi/info/collection/utils/EasyExcelUtilTemplateTest.java index 78326fb9..c1ed3093 100644 --- a/ccdi-info-collection/src/test/java/com/ruoyi/info/collection/utils/EasyExcelUtilTemplateTest.java +++ b/ccdi-info-collection/src/test/java/com/ruoyi/info/collection/utils/EasyExcelUtilTemplateTest.java @@ -180,6 +180,11 @@ class EasyExcelUtilTemplateTest { buildDictData("未录用"), buildDictData("放弃") )); + mocked.when(() -> DictUtils.getDictCache("ccdi_recruit_type")) + .thenReturn(List.of( + buildDictData("社招", "SOCIAL"), + buildDictData("校招", "CAMPUS") + )); EasyExcelUtil.importTemplateWithDictDropdown( response, @@ -195,6 +200,8 @@ class EasyExcelUtilTemplateTest { assertEquals(2, workbook.getNumberOfSheets(), "招聘导入模板应输出双Sheet"); assertEquals("招聘信息", workbook.getSheetAt(0).getSheetName()); assertEquals("历史工作经历", workbook.getSheetAt(1).getSheetName()); + assertTrue(hasValidationOnColumn(workbook.getSheetAt(0), 5), "录用情况列应包含下拉校验"); + assertTrue(hasValidationOnColumn(workbook.getSheetAt(0), 7), "招聘类型列应包含下拉校验"); } } @@ -369,6 +376,8 @@ class EasyExcelUtilTemplateTest { .thenReturn(List.of(buildDictData("本人"))); mocked.when(() -> DictUtils.getDictCache("ccdi_admit_status")) .thenReturn(List.of(buildDictData("录用"))); + mocked.when(() -> DictUtils.getDictCache("ccdi_recruit_type")) + .thenReturn(List.of(buildDictData("社招", "SOCIAL"))); } private SysDictData buildDictData(String label) { diff --git a/docs/reports/implementation/2026-05-07-staff-recruitment-type-dropdown-template.md b/docs/reports/implementation/2026-05-07-staff-recruitment-type-dropdown-template.md new file mode 100644 index 00000000..b940608a --- /dev/null +++ b/docs/reports/implementation/2026-05-07-staff-recruitment-type-dropdown-template.md @@ -0,0 +1,35 @@ +# 招聘信息维护导入模板招聘类型下拉框实施记录 + +## 背景 + +招聘信息维护导入模板中,“招聘类型”列原本为普通文本输入,用户需要手工填写招聘类型。现要求该列改为下拉框,仅选择“社招”或“校招”。 + +## 修改内容 + +- 在 `CcdiStaffRecruitmentExcel` 的 `recruitType` 字段上增加 `@DictDropdown(dictType = "ccdi_recruit_type")`,让双 Sheet 导入模板生成时自动为“招聘类型”列添加 Excel 下拉框。 +- 新增 `sql/migration/2026-05-07-add-staff-recruitment-type-dict.sql`,初始化 `ccdi_recruit_type` 字典: + - `社招` -> `SOCIAL` + - `校招` -> `CAMPUS` +- 更新招聘导入模板单测,断言“录用情况”和“招聘类型”列都存在下拉校验。 + +## 影响范围 + +- 后端模板生成:`/ccdi/staffRecruitment/importTemplate` +- 字典数据:`sys_dict_type`、`sys_dict_data` 中的 `ccdi_recruit_type` +- 导入解析与入库逻辑未改动;当前导入逻辑已支持把“社招/校招”归一为 `SOCIAL/CAMPUS`。 + +## 验证情况 + +- 已执行 `sh bin/mysql_utf8_exec.sh sql/migration/2026-05-07-add-staff-recruitment-type-dict.sql`,字典 SQL 执行成功。 +- 数据库回查确认 `ccdi_recruit_type` 字典存在,字典项为 `社招/SOCIAL`、`校招/CAMPUS`。 +- 已执行 `mvn -pl ccdi-info-collection -am -Dtest=EasyExcelUtilTemplateTest -Dsurefire.failIfNoSpecifiedTests=false test`,7 个模板相关测试全部通过。 +- 单测日志确认招聘主 Sheet 第 5 列 `ccdi_admit_status`、第 7 列 `ccdi_recruit_type` 均成功添加下拉框。 +- 已执行 `sh bin/restart_java_backend.sh restart` 重新构建并重启后端;随后通过后台 `screen` 启动脚本保持后端运行。 +- 已通过真实接口 `/ccdi/staffRecruitment/importTemplate` 下载模板,工作簿包含“招聘信息”和“历史工作经历”两个 Sheet。 +- 已检查真实模板 `xl/worksheets/sheet1.xml`,数据校验包含: + - `F2:F1000`:`录用,未录用,放弃` + - `H2:H1000`:`社招,校招` + +## 注意事项 + +- 当前后端已完成重启,模板下载接口可以读取到新增字典项。 diff --git a/sql/migration/2026-05-07-add-staff-recruitment-type-dict.sql b/sql/migration/2026-05-07-add-staff-recruitment-type-dict.sql new file mode 100644 index 00000000..36c4039e --- /dev/null +++ b/sql/migration/2026-05-07-add-staff-recruitment-type-dict.sql @@ -0,0 +1,25 @@ +-- 招聘信息维护:招聘类型字典 +-- 用于招聘信息导入模板“招聘类型”列下拉框 + +INSERT INTO sys_dict_type (dict_name, dict_type, status, create_by, create_time, remark) +SELECT '招聘类型', 'ccdi_recruit_type', '0', 'admin', NOW(), '招聘信息-招聘类型' +WHERE NOT EXISTS ( + SELECT 1 FROM sys_dict_type WHERE dict_type = 'ccdi_recruit_type' +); + +UPDATE sys_dict_type +SET dict_name = '招聘类型', + status = '0', + update_by = 'admin', + update_time = NOW(), + remark = '招聘信息-招聘类型' +WHERE dict_type = 'ccdi_recruit_type'; + +DELETE FROM sys_dict_data WHERE dict_type = 'ccdi_recruit_type'; + +INSERT INTO sys_dict_data (dict_sort, dict_label, dict_value, dict_type, css_class, list_class, is_default, status, create_by, create_time, remark) +VALUES +(1, '社招', 'SOCIAL', 'ccdi_recruit_type', '', 'success', 'Y', '0', 'admin', NOW(), '社会招聘'), +(2, '校招', 'CAMPUS', 'ccdi_recruit_type', '', 'info', 'N', '0', 'admin', NOW(), '校园招聘'); + +-- 执行完成后需刷新字典缓存,确保模板下拉框立即生效。