From e8e4b615531088457373638b66dc7fd10baaedc1 Mon Sep 17 00:00:00 2001 From: luotaiqian <1147642922@qq.com> Date: Mon, 3 Aug 2026 16:39:12 +0800 Subject: [PATCH] import --- .../utils/ComplianceCheckUtil.java | 45 ++++++++++++------- 1 file changed, 29 insertions(+), 16 deletions(-) diff --git a/safety-eval-infrastructure/src/main/java/org/qinan/safetyeval/infrastructure/utils/ComplianceCheckUtil.java b/safety-eval-infrastructure/src/main/java/org/qinan/safetyeval/infrastructure/utils/ComplianceCheckUtil.java index 0e8501b..8704bf0 100644 --- a/safety-eval-infrastructure/src/main/java/org/qinan/safetyeval/infrastructure/utils/ComplianceCheckUtil.java +++ b/safety-eval-infrastructure/src/main/java/org/qinan/safetyeval/infrastructure/utils/ComplianceCheckUtil.java @@ -17,9 +17,11 @@ import org.qinan.safetyeval.infrastructure.persistence.domainobject.IndustryProf import org.qinan.safetyeval.infrastructure.persistence.domainobject.OrgPersonnelLeaderCountDO; import org.qinan.safetyeval.infrastructure.persistence.mapper.IndustryProfessionalStandardsMapper; import org.springframework.util.CollectionUtils; +import org.springframework.util.StringUtils; import java.math.BigDecimal; import java.util.*; +import java.util.function.Function; import java.util.stream.Collectors; import static org.qinan.safetyeval.domain.exception.ErrorCode.PERSON_NOT_ENOUGH; @@ -355,15 +357,16 @@ public class ComplianceCheckUtil { // 按 industryCode 分组后循环调用 doIndustryProfessionalStandardsValid Map> standardsGroupByIndustry = standardsDOList.stream() .collect(Collectors.groupingBy(IndustryProfessionalStandardsDO::getIndustryCode)); - Map> personnelCoGroupByIndustry = personnelCoList.stream() - .collect(Collectors.groupingBy(IndustryProfessionalPersonCo::getIndustryCode)); - Map> personnelCertCoGroupByIndustry = personnelCertCoList.stream() - .collect(Collectors.groupingBy(OrgPersonnelCertCapabilityComplianceCheckCO::getBusinessScope)); + + List personnelCoCopyList = new ArrayList<>(personnelCoList); + + Map> personnelCertCoGroupByIndustry = + personnelCertCoList.stream().collect( + Collectors.groupingBy(OrgPersonnelCertCapabilityComplianceCheckCO::getBusinessScope)); StringJoiner failureMsg = new StringJoiner(";"); for (Map.Entry> entry : standardsGroupByIndustry.entrySet()) { - Pair result = doIndustryProfessionalStandardsValid( - entry.getValue(), personnelCoGroupByIndustry.getOrDefault(entry.getKey(), new ArrayList<>()) + Pair result = doIndustryProfessionalStandardsValid(entry.getValue(), personnelCoCopyList , personnelCertCoGroupByIndustry.getOrDefault(entry.getKey(), new ArrayList<>())); if (Boolean.FALSE.equals(result.getKey()) && result.getValue() != null) { failureMsg.add(result.getValue()); @@ -386,8 +389,11 @@ public class ComplianceCheckUtil { * @param certCapabilityList 人员证书专业能力信息(提供人员→专业能力映射) * @return Pair key 是否通过 ,value 失败消息(通过时为 null) */ - public static Pair doIndustryProfessionalStandardsValid(List standardsDOList - , List industryProfessionalPersonCos, List certCapabilityList) { + public static Pair doIndustryProfessionalStandardsValid( + List standardsDOList + , List industryProfessionalPersonCos + , List certCapabilityList) { + if (CollectionUtils.isEmpty(standardsDOList)) { return Pair.of(true, null); } @@ -398,19 +404,26 @@ public class ComplianceCheckUtil { } // 3. 构建人员→可担任专业能力code集合(同一人可能具备多个专业能力) - Map> personCapabilityMap = new HashMap<>(); - industryProfessionalPersonCos.forEach(p -> - personCapabilityMap.computeIfAbsent(p.getSourcePersonnelId(), k -> new HashSet<>()) - .add(p.getProfessionalCapabilityCode())); - certCapabilityList.forEach(c -> - personCapabilityMap.computeIfAbsent(c.getPersonnelId(), k -> new HashSet<>()) - .add(c.getProfessionalCapabilityCode())); + Map personnelMap = industryProfessionalPersonCos.stream() + .collect(Collectors.toMap(IndustryProfessionalPersonCo::getSourcePersonnelId, Function.identity())); + Map> personCapabilityMap = new HashMap<>(); + for (OrgPersonnelCertCapabilityComplianceCheckCO pc : certCapabilityList) { + // 人员证书的能力 + personCapabilityMap.computeIfAbsent(pc.getPersonnelId(), k -> new HashSet<>()) + .add(pc.getProfessionalCapabilityCode()); + IndustryProfessionalPersonCo co = personnelMap.get(pc.getPersonnelId()); + + // 人员学科能力 + Set pdcSet = Arrays.stream(co.getProfessionalCapabilityCode().split(",")) + .collect(Collectors.toSet()); + personCapabilityMap.computeIfAbsent(pc.getPersonnelId(), k -> new HashSet<>()) + .addAll(pdcSet); + } // 数据来源:industryProfessionalPersonCos(备案人员自带专业能力)+ certCapabilityList(证书专业能力) Map assignedMap = canFullyAssign(personCapabilityMap, requiredMap); - IndustryEnum industryEnum = IndustryEnum.ofCode(standardsDOList.get(0).getIndustryCode()); String industryName = industryEnum != null ? industryEnum.getValue() : standardsDOList.get(0).getIndustryCode();