From afd36ea3496e2e6bd51df11afbc10491e0e86d9b Mon Sep 17 00:00:00 2001 From: luotaiqian <1147642922@qq.com> Date: Tue, 18 Aug 2026 21:25:52 +0800 Subject: [PATCH] appendCapabilityAssessment --- .../support/OrgPersonnelExcelImporter.java | 61 +++++++++---------- .../app/support/OrgPersonnelImportRow.java | 31 ++++++++++ .../constant/basic/SafetyCategoryEnum.java | 21 +++++++ 3 files changed, 81 insertions(+), 32 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 8f5a68f7..7a7f1507 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 @@ -15,11 +15,7 @@ import org.qinan.safetyeval.client.co.OrgPersonnelImportResultCO; import org.qinan.safetyeval.domain.constant.basic.IndustryEnum; import org.qinan.safetyeval.domain.constant.basic.ProfessionalCapabilityEnum; import org.qinan.safetyeval.domain.constant.basic.ProfessionalCapabilitySourceEnum; -import org.qinan.safetyeval.domain.entity.CapabilityAssessmentDTO; -import org.qinan.safetyeval.domain.entity.OrgDepartmentEntity; -import org.qinan.safetyeval.domain.entity.OrgPersonnelCertEntity; -import org.qinan.safetyeval.domain.entity.OrgPersonnelEntity; -import org.qinan.safetyeval.domain.entity.OrgPositionEntity; +import org.qinan.safetyeval.domain.entity.*; import org.qinan.safetyeval.domain.exception.BizException; import org.qinan.safetyeval.domain.exception.ErrorCode; import org.qinan.safetyeval.domain.gateway.OrgDepartmentGateway; @@ -262,7 +258,6 @@ public class OrgPersonnelExcelImporter { basic.setRowIndex(i + 2); row.setBasic(basic); Pair capabilityRow = matchCapability(basic, capabilityMap, errors); - row.setCapability(capabilityRow.getValue()); // 能力信息未匹配或存在多条,已记录异常,剔除该行 if (!capabilityRow.getKey()) { continue; @@ -322,6 +317,7 @@ public class OrgPersonnelExcelImporter { if (CollectionUtils.isEmpty(capabilityList)) { return Pair.of(true, null); } + if (capabilityList.size() > 1) { errors.add(new OrgPersonnelImportErrorCO(basic.getRowIndex(), trim(basic.getAccount()), trim(basic.getUserName()), "专职人员能力信息中查询到多条数据")); @@ -329,11 +325,32 @@ public class OrgPersonnelExcelImporter { } OrgPersonnelImportRow.CapabilityRow capabilityRow = capabilityList.get(0); + + // 校验基础信息 + // 2. sheet2 能力信息校验(未匹配到能力信息时跳过),行号取 sheet2 行号,消息加前缀便于区分来源 + Set> capabilityViolations = + validator.validate(capabilityRow); + if (!capabilityViolations.isEmpty()) { + capabilityViolations.stream() + .collect(Collectors.toMap( + v -> v.getPropertyPath().toString(), + v -> v, + (a, b) -> a)) + .values() + .forEach(v -> errors.add(new OrgPersonnelImportErrorCO(capabilityRow.getRowIndex(), + capabilityRow.getUserName(), capabilityRow.getIdCardNo(), "能力信息:" + v.getMessage()))); + return Pair.of(false, null); + } + // 能力认证一/二:认证行业、专业能力、来源 有值时校验枚举并回填,不通过记录异常 if (!validateAndFillCertEnums(basic, capabilityRow, errors)) { return Pair.of(false, null); } + basic.setEducationType(capabilityRow.getEducationType()); + basic.setGraduateSchool(capabilityRow.getGraduateSchool()); + basic.setEducationLevel(capabilityRow.getEducationLevel()); + basic.setMajor(capabilityRow.getMajor()); return Pair.of(true, capabilityRow); } @@ -356,6 +373,12 @@ public class OrgPersonnelExcelImporter { String userName = trim(basic.getUserName()); Integer rowIndex = capability.getRowIndex(); + // 学历类型、毕业院校、学历层次、所学专业 回填到基础信息行(@ExcelIgnore 字段,Excel原始值忽略) + basic.setEducationType(trim(capability.getEducationType())); + basic.setGraduateSchool(trim(capability.getGraduateSchool())); + basic.setEducationLevel(trim(capability.getEducationLevel())); + basic.setMajor(trim(capability.getMajor())); + // 能力认证一(必填):认证行业、专业能力、来源,查询不到枚举即记录异常并返回 String cert1Industry = trim(capability.getCert1Industry()); IndustryEnum cert1IndustryEnum = IndustryEnum.ofName(cert1Industry); @@ -423,7 +446,6 @@ public class OrgPersonnelExcelImporter { } - return true; } @@ -480,31 +502,6 @@ public class OrgPersonnelExcelImporter { return false; } - // 2. sheet2 能力信息校验(未匹配到能力信息时跳过),行号取 sheet2 行号,消息加前缀便于区分来源 - OrgPersonnelImportRow.CapabilityRow capability = row.getCapability(); - if (capability != null) { - Set> capabilityViolations = - validator.validate(capability); - if (!capabilityViolations.isEmpty()) { - capabilityViolations.stream() - .collect(Collectors.toMap( - v -> v.getPropertyPath().toString(), - v -> v, - (a, b) -> a)) - .values() - .forEach(v -> errors.add(new OrgPersonnelImportErrorCO(capability.getRowIndex(), - account, userName, "能力信息:" + v.getMessage()))); - return false; - } - - // sheet2 身份证号格式校验(DB: id_card_no varchar(18)) - String capabilityIdCardNo = trim(capability.getIdCardNo()); - if (StringUtils.hasText(capabilityIdCardNo) && !IdcardUtil.isValidCard(capabilityIdCardNo)) { - errors.add(new OrgPersonnelImportErrorCO(capability.getRowIndex(), account, userName, - "能力信息:身份证号格式不正确,应为15或18位有效身份证号")); - return false; - } - } // 3. 身份证号格式校验(DB: id_card_no varchar(18)) String idCardNo = trim(row.getBasic().getIdCardNo()); diff --git a/safety-eval-app/src/main/java/org/qinan/safetyeval/app/support/OrgPersonnelImportRow.java b/safety-eval-app/src/main/java/org/qinan/safetyeval/app/support/OrgPersonnelImportRow.java index a77794e8..8bd4a66f 100644 --- a/safety-eval-app/src/main/java/org/qinan/safetyeval/app/support/OrgPersonnelImportRow.java +++ b/safety-eval-app/src/main/java/org/qinan/safetyeval/app/support/OrgPersonnelImportRow.java @@ -5,6 +5,7 @@ import com.alibaba.excel.annotation.ExcelProperty; import lombok.Data; import org.hibernate.validator.constraints.Range; import org.qinan.safetyeval.domain.entity.CapabilityAssessmentDTO; +import org.qinan.safetyeval.domain.entity.OrgPersonnelCertEntity; import org.springframework.util.StringUtils; import javax.validation.constraints.NotBlank; @@ -171,11 +172,41 @@ public class OrgPersonnelImportRow { */ @ExcelIgnore private Integer rowIndex; + + /** + * 学历类型 + */ + @ExcelIgnore + private String educationType; + /** + * 毕业院校 + */ + @ExcelIgnore + private String graduateSchool; + + /** + * 学历层次 + */ + @ExcelIgnore + private String educationLevel; + + /** + * 所学专业 + */ + @ExcelIgnore + private String major; + /** * 能力 */ @ExcelIgnore private List capabilityAssessment = new ArrayList<>(2); + + /** + * 证书 + */ + @ExcelIgnore + private List personnelCertEntities = new ArrayList<>(2); } /** diff --git a/safety-eval-domain/src/main/java/org/qinan/safetyeval/domain/constant/basic/SafetyCategoryEnum.java b/safety-eval-domain/src/main/java/org/qinan/safetyeval/domain/constant/basic/SafetyCategoryEnum.java index 3deba370..79694cd1 100644 --- a/safety-eval-domain/src/main/java/org/qinan/safetyeval/domain/constant/basic/SafetyCategoryEnum.java +++ b/safety-eval-domain/src/main/java/org/qinan/safetyeval/domain/constant/basic/SafetyCategoryEnum.java @@ -29,4 +29,25 @@ public enum SafetyCategoryEnum { "CONSTRUCTION=>建筑施工安全 ;" + "ROAD_TRANSPORT=>道路运输安全;" + "OTHER=>其他安全"; + + public static IndustryEnum getIndustry(SafetyCategoryEnum safetyCategoryEnum) { + switch (safetyCategoryEnum) { + case COAL_MINE: + return IndustryEnum.COAL_MINING; + case METAL_NONMETAL_MINE: + return IndustryEnum.METAL_NONMETAL_MINING; + case CHEMICAL: + return IndustryEnum.PETROCHEMICAL_CHEMICAL_PHARMACEUTICAL; + case METAL_SMELTING: + return IndustryEnum.METAL_SMELTING; + case CONSTRUCTION: + return IndustryEnum.METAL_NONMETAL_MINING; + case ROAD_TRANSPORT: + return IndustryEnum.METAL_NONMETAL_MINING; + case OTHER: + return IndustryEnum.METAL_NONMETAL_MINING; + default: + return null ; + } + } }