招聘导入模板增加招聘类型下拉框

This commit is contained in:
wkc
2026-05-07 00:13:00 +08:00
parent 402a0c3e2f
commit 4d1acc7484
4 changed files with 70 additions and 0 deletions

View File

@@ -69,6 +69,7 @@ public class CcdiStaffRecruitmentExcel implements Serializable {
/** 招聘类型 */
@ExcelProperty(value = "招聘类型", index = 7)
@ColumnWidth(12)
@DictDropdown(dictType = "ccdi_recruit_type")
@Required
private String recruitType;

View File

@@ -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) {

View File

@@ -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``社招,校招`
## 注意事项
- 当前后端已完成重启,模板下载接口可以读取到新增字典项。

View File

@@ -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(), '校园招聘');
-- 执行完成后需刷新字典缓存,确保模板下拉框立即生效。