From 1667ef24b0cb63e6b76f451470fdba067f7c8370 Mon Sep 17 00:00:00 2001 From: luotaiqian <1147642922@qq.com> Date: Wed, 26 Aug 2026 15:18:57 +0800 Subject: [PATCH] archive file --- .../support/OrgPersonnelExcelImporter.java | 78 +++++++++++-------- 1 file changed, 44 insertions(+), 34 deletions(-) diff --git a/safety-eval-app/src/main/java/org/qinan/safetyeval/app/support/OrgPersonnelExcelImporter.java b/safety-eval-app/src/main/java/org/qinan/safetyeval/app/support/OrgPersonnelExcelImporter.java index 4d94c911..92b5c9fc 100644 --- a/safety-eval-app/src/main/java/org/qinan/safetyeval/app/support/OrgPersonnelExcelImporter.java +++ b/safety-eval-app/src/main/java/org/qinan/safetyeval/app/support/OrgPersonnelExcelImporter.java @@ -56,7 +56,7 @@ import java.util.stream.Collectors; *

* 模板包含两个 sheet:sheet1「专职人员基础信息」、sheet2「专职人员能力信息」, * 解析后按 身份证号(为空时按姓名) 将能力信息关联到基础信息行; - * 再批量校验部门/岗位名称并回填ID(部门或部门下岗位不存在时自动新增) -> 校验账号重复并收集异常 -> 逐行落库。 + * 再批量校验部门/岗位名称并回填ID(部门或部门下岗位不存在时自动新增) -> 设置所学专业/系列专业(基础学科专业不存在时自动新增) -> 校验账号重复并收集异常 -> 逐行落库。 *

* * @author safety-eval @@ -144,13 +144,8 @@ public class OrgPersonnelExcelImporter { return result; } - // 3. 批量校验所学专业、系列/专业(两个字段名称合并为一次 in 查询基础学科专业对照表) - validateAndFillMajor(rows, errors); - rows = rows.stream().filter(it -> !it.isValidateFail()).collect(Collectors.toList()); - if (rows.isEmpty()) { - result.setErrors(errors); - return result; - } + // 3. 批量设置所学专业、系列/专业(基础学科专业对照表中已存在则使用库中记录,不存在则自动新增) + fillOrCreateMajor(rows); // 4. 批量查询库中已存在的账号(未删除) Set existingAccounts = batchQueryExistingAccounts(rows, orgId); @@ -1013,15 +1008,15 @@ public class OrgPersonnelExcelImporter { } /** - * 批量校验 所学专业(major)与 系列/专业(seriesMajor)名称在基础学科专业对照表中是否存在 - * (basic_discipline_major.professional_name),两个字段名称合并为一次 in 查询; - * 有值但查询不到的记录异常并标记 validateFail,为空的字段不参与校验(字段可空)。 + * 批量设置 所学专业(major)与 系列/专业(seriesMajor)对应的基础学科专业: + * 两个字段名称合并为一次 in 查询基础学科专业对照表(basic_discipline_major.professional_name), + * 库中已存在则直接使用库中记录;不存在则自动新增(仅填专业名称)并使用新增记录,同一文件中同名专业仅新增一次。 *

- * 校验通过后回填:所学专业 -> basicDisciplineMajorId 与 {@link OrgPersonnelImportRow.CapabilityRow#setBdmMajor}; - * 系列/专业 -> {@link OrgPersonnelImportRow.CapabilityRow#setBdmSeriesMajor}。 + * 回填规则:所学专业 -> basicDisciplineMajorId 与 {@link OrgPersonnelImportRow.CapabilityRow#setBdmMajor}; + * 系列/专业 -> {@link OrgPersonnelImportRow.CapabilityRow#setBdmSeriesMajor};字段为空不处理。 *

*/ - private void validateAndFillMajor(List rows, List errors) { + private void fillOrCreateMajor(List rows) { // 所学专业、系列/专业 两个字段名称合并收集,一次 in 查询 Set majorNames = new LinkedHashSet<>(); for (OrgPersonnelImportRow row : rows) { @@ -1049,42 +1044,57 @@ public class OrgPersonnelExcelImporter { } } - // 逐行校验:字段为空跳过;对照表中不存在的记录异常并标记;校验通过则回填 + // 逐行回填:字段为空跳过;库中已存在使用库中记录,不存在自动新增 for (OrgPersonnelImportRow row : rows) { OrgPersonnelImportRow.CapabilityRow capability = row.getCapability(); if (capability == null) { continue; } - // 所学专业:查询不到记录异常;查询到回填 basicDisciplineMajorId、bdmMajor + // 所学专业:回填 basicDisciplineMajorId、bdmMajor String majorName = trim(capability.getMajor()); if (StringUtils.hasText(majorName)) { - BasicDisciplineMajorE major = majorMap.get(majorName); - if (major == null) { - errors.add(new OrgPersonnelImportErrorCO(row.getBasic().getRowIndex(), row.getBasic().getAccount(), row.getBasic().getUserName(), - ErrorCode.ORG_PERSONNEL_IMPORT_MAJOR_NOT_FOUND.getMessage() + ":" + majorName)); - row.setValidateFail(true); - } else { - row.setBasicDisciplineMajorId(major.getId()); - capability.setBdmMajor(basicDisciplineMajorDoConvertor.convertEeToDo(major)); - } + BasicDisciplineMajorE major = getOrCreateMajor(majorName, majorMap); + row.setBasicDisciplineMajorId(major.getId()); + capability.setBdmMajor(basicDisciplineMajorDoConvertor.convertEeToDo(major)); } - // 系列/专业:查询不到记录异常;查询到回填 bdmSeriesMajor + // 系列/专业:回填 bdmSeriesMajor String seriesMajorName = trim(capability.getSeriesMajor()); if (StringUtils.hasText(seriesMajorName)) { - BasicDisciplineMajorE seriesMajor = majorMap.get(seriesMajorName); - if (seriesMajor == null) { - errors.add(new OrgPersonnelImportErrorCO(row.getBasic().getRowIndex(), row.getBasic().getAccount(), row.getBasic().getUserName(), - ErrorCode.ORG_PERSONNEL_IMPORT_MAJOR_NOT_FOUND.getMessage() + ":" + seriesMajorName)); - row.setValidateFail(true); - } else { - capability.setBdmSeriesMajor(basicDisciplineMajorDoConvertor.convertEeToDo(seriesMajor)); - } + BasicDisciplineMajorE seriesMajor = getOrCreateMajor(seriesMajorName, majorMap); + capability.setBdmSeriesMajor(basicDisciplineMajorDoConvertor.convertEeToDo(seriesMajor)); } } } + /** + * 按专业名称获取基础学科专业:库中已存在直接返回库中记录; + * 不存在则自动新增(仅填专业名称)并放入缓存,保证同一文件中同名专业仅新增一次。 + * + * @param professionalName 专业名称(已去除首尾空格) + * @param majorMap 专业名称索引(key: 专业名称),新增的记录会写入该索引 + * @return 库中已存在或新增后的基础学科专业实体 + */ + private BasicDisciplineMajorE getOrCreateMajor(String professionalName, Map majorMap) { + BasicDisciplineMajorE exist = majorMap.get(professionalName); + if (exist != null) { + return exist; + } + + BasicDisciplineMajorE created = new BasicDisciplineMajorE(); + created.setProfessionalName(professionalName); + InsertFieldDefaults.apply(created); + Boolean res = basicDisciplineMajorGateway.add(created); + if (res == null || !res) { + throw new BizException(ErrorCode.ORG_PERSONNEL_IMPORT_MAJOR_NOT_FOUND, + "基础学科专业[" + professionalName + "]自动新增失败"); + } + majorMap.put(professionalName, created); + LOGGER.info("人员导入自动新增基础学科专业, professionalName={}, id={}", professionalName, created.getId()); + return created; + } + private Set batchQueryExistingAccounts(List rows, Long orgId) { Set accounts = rows.stream() .map(r -> trim(r.getBasic().getAccount()))