diff --git a/safety-eval-infrastructure/src/main/java/org/qinan/safetyeval/infrastructure/mapper/OrgPersonnelMapper.java b/safety-eval-infrastructure/src/main/java/org/qinan/safetyeval/infrastructure/mapper/OrgPersonnelMapper.java index 306e898..76e3bc0 100644 --- a/safety-eval-infrastructure/src/main/java/org/qinan/safetyeval/infrastructure/mapper/OrgPersonnelMapper.java +++ b/safety-eval-infrastructure/src/main/java/org/qinan/safetyeval/infrastructure/mapper/OrgPersonnelMapper.java @@ -13,12 +13,12 @@ import java.util.List; public interface OrgPersonnelMapper extends BaseMapper { /** - * 根据人员id列表统计技术负责人和过程控制负责人数量 + * 根据人员id列表统计技术负责人和过程控制负责人数量(按业务范围 qual_scope 分组) * * @param ids 人员id列表(org_personnel.id) - * @return 负责人标志位统计结果 + * @return 负责人标志位统计结果列表,每个业务范围一条记录 */ - OrgPersonnelLeaderCountDO countLeaderFlags(@Param("ids") List ids); + List countLeaderFlags(@Param("ids") List ids); /** * 根据人员id列表查询专业能力code(关联 basic_discipline_major) diff --git a/safety-eval-infrastructure/src/main/java/org/qinan/safetyeval/infrastructure/persistence/domainobject/OrgPersonnelLeaderCountDO.java b/safety-eval-infrastructure/src/main/java/org/qinan/safetyeval/infrastructure/persistence/domainobject/OrgPersonnelLeaderCountDO.java index c7489ba..c0aef75 100644 --- a/safety-eval-infrastructure/src/main/java/org/qinan/safetyeval/infrastructure/persistence/domainobject/OrgPersonnelLeaderCountDO.java +++ b/safety-eval-infrastructure/src/main/java/org/qinan/safetyeval/infrastructure/persistence/domainobject/OrgPersonnelLeaderCountDO.java @@ -10,6 +10,11 @@ import lombok.Data; @Data public class OrgPersonnelLeaderCountDO { + /** + * 业务范围(资质范围) + */ + private String qualScope; + /** * 技术负责人数量 */ 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 11b4f0e..0e8501b 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 @@ -239,28 +239,40 @@ public class ComplianceCheckUtil { QualFilingComplianceCheckEnum.STATUS_FAIL, "无来源人员id"); } - // 通过 SpringUtil 获取 OrgPersonnelMapper,统计负责人数量 + // 通过 SpringUtil 获取 OrgPersonnelMapper,按业务范围(qual_scope)分组统计负责人数量 OrgPersonnelMapper orgPersonnelMapper = SpringUtil.getBean(OrgPersonnelMapper.class); - OrgPersonnelLeaderCountDO countDO = orgPersonnelMapper.countLeaderFlags(sourcePersonnelIds); + List countDOList = orgPersonnelMapper.countLeaderFlags(sourcePersonnelIds); - int technicalDirectorCount = countDO != null && countDO.getTechnicalDirectorCount() != null - ? countDO.getTechnicalDirectorCount() : 0; - int processControlLeaderCount = countDO != null && countDO.getProcessControlLeaderCount() != null - ? countDO.getProcessControlLeaderCount() : 0; + // 以业务范围为维度,每个业务分别判断:至少1名技术负责人、1名过程控制负责人 + List businessScope = filing.getBusinessScope(); + Map countByScope = countDOList == null ? Collections.emptyMap() + : countDOList.stream() + .collect(Collectors.toMap(OrgPersonnelLeaderCountDO::getQualScope + , c -> c, (a, b) -> a)); - // 需求:每个业务范围配备1名技术负责人,另配1名过程控制负责人 - int requiredTechnicalDirector = filing.getBusinessScope() != null ? filing.getBusinessScope().size() : 1; - int requiredProcessControlLeader = requiredTechnicalDirector; - - boolean pass = technicalDirectorCount >= requiredTechnicalDirector - && processControlLeaderCount >= requiredProcessControlLeader; - - String currentValue = "技术负责人 " + technicalDirectorCount + "/" + requiredTechnicalDirector - + ",过程控制负责人 " + processControlLeaderCount + "/" + requiredProcessControlLeader; + boolean pass = true; + StringBuilder currentValue = new StringBuilder(); + for (String scope : businessScope) { + OrgPersonnelLeaderCountDO countDO = countByScope.get(scope); + int technicalDirectorCount = countDO != null && countDO.getTechnicalDirectorCount() != null + ? countDO.getTechnicalDirectorCount() : 0; + int processControlLeaderCount = countDO != null && countDO.getProcessControlLeaderCount() != null + ? countDO.getProcessControlLeaderCount() : 0; + boolean scopePass = technicalDirectorCount >= 1 && processControlLeaderCount >= 1; + if (!scopePass) { + pass = false; + } + if (currentValue.length() > 0) { + currentValue.append(";"); + } + currentValue.append("业务[").append(scope).append("] 技术负责人 ") + .append(technicalDirectorCount).append("/1,过程控制负责人 ") + .append(processControlLeaderCount).append("/1"); + } return buildResult(QualFilingComplianceCheckEnum.KEY_POSITION, pass ? QualFilingComplianceCheckEnum.STATUS_PASS : QualFilingComplianceCheckEnum.STATUS_FAIL, - currentValue); + currentValue.toString()); } /** diff --git a/safety-eval-infrastructure/src/main/resources/mapper/OrgPersonnelMapper.xml b/safety-eval-infrastructure/src/main/resources/mapper/OrgPersonnelMapper.xml index f7ad115..c616489 100644 --- a/safety-eval-infrastructure/src/main/resources/mapper/OrgPersonnelMapper.xml +++ b/safety-eval-infrastructure/src/main/resources/mapper/OrgPersonnelMapper.xml @@ -41,9 +41,10 @@ `id`, `org_id`, `dept_id`, `post_id`, `user_name`, `account`, `gender_code`, `gender_name`, `birth_date`, `id_card_no`, `current_address`, `office_address`, `education_code`, `education_name`, `graduate_school`, `major`, `employment_status_code`, `employment_status_name`, `delete_enum`, `remarks`, `create_name`, `update_name`, `tenant_id`, `version`, `create_time`, `update_time`, `create_id`, `update_id`, `env` - +