dev_1.0.1
luotaiqian 2026-07-15 11:11:13 +08:00
parent 86d0b6bcdc
commit 55c9075211
4 changed files with 100 additions and 3 deletions

View File

@ -2,8 +2,20 @@ package org.qinan.safetyeval.infrastructure.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import org.qinan.safetyeval.infrastructure.dataobject.OrgPersonnelDO;
import org.qinan.safetyeval.infrastructure.persistence.domainobject.OrgPersonnelLeaderCountDO;
import java.util.List;
@Mapper
public interface OrgPersonnelMapper extends BaseMapper<OrgPersonnelDO> {
/**
* id
*
* @param ids idorg_personnel.id
* @return
*/
OrgPersonnelLeaderCountDO countLeaderFlags(@Param("ids") List<Long> ids);
}

View File

@ -0,0 +1,22 @@
package org.qinan.safetyeval.infrastructure.persistence.domainobject;
import lombok.Data;
/**
*
*
* @author safety-eval
*/
@Data
public class OrgPersonnelLeaderCountDO {
/**
*
*/
private Integer technicalDirectorCount;
/**
*
*/
private Integer processControlLeaderCount;
}

View File

@ -1,12 +1,15 @@
package org.qinan.safetyeval.infrastructure.utils;
import cn.hutool.core.lang.Pair;
import cn.hutool.extra.spring.SpringUtil;
import lombok.experimental.UtilityClass;
import org.qinan.safetyeval.client.co.IndustryProfessionalPersonCo;
import org.qinan.safetyeval.client.co.QualFilingComplianceCheckResultCO;
import org.qinan.safetyeval.client.dto.*;
import org.qinan.safetyeval.domain.constant.*;
import org.qinan.safetyeval.infrastructure.mapper.OrgPersonnelMapper;
import org.qinan.safetyeval.infrastructure.persistence.domainobject.IndustryProfessionalStandardsDO;
import org.qinan.safetyeval.infrastructure.persistence.domainobject.OrgPersonnelLeaderCountDO;
import org.springframework.util.CollectionUtils;
import java.math.BigDecimal;
@ -14,6 +17,7 @@ import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Map;
import java.util.Objects;
import java.util.stream.Collectors;
/**
@ -51,9 +55,8 @@ public class ComplianceCheckUtil {
// 6. 人员比例
results.add(checkPersonnelRatio(personnelList));
// 7. 负责人配备(暂无法判断,标记警告)
results.add(buildResult(QualFilingComplianceCheckEnum.KEY_POSITION,
QualFilingComplianceCheckEnum.STATUS_WARN, "技术负责人 2/2过程控制负责人 1/1"));
// 7. 负责人配备
results.add(checkKeyPosition(filing, personnelList));
// 8. 制度与过程控制体系(暂无法判断,标记警告)
results.add(buildResult(QualFilingComplianceCheckEnum.MANAGEMENT_SYSTEM,
@ -148,6 +151,53 @@ public class ComplianceCheckUtil {
currentValue);
}
/**
* org_personnel
* 11
*/
private QualFilingComplianceCheckResultCO checkKeyPosition(QualFilingAddCmd filing,
List<QualFilingPersonnelAddCmd> personnelList) {
if (personnelList == null || personnelList.isEmpty()) {
return buildResult(QualFilingComplianceCheckEnum.KEY_POSITION,
QualFilingComplianceCheckEnum.STATUS_FAIL, "无人员数据");
}
// 提取所有来源人员id对应 org_personnel.id
List<Long> sourcePersonnelIds = personnelList.stream()
.map(QualFilingPersonnelAddCmd::getSourcePersonnelId)
.filter(Objects::nonNull)
.distinct()
.collect(Collectors.toList());
if (sourcePersonnelIds.isEmpty()) {
return buildResult(QualFilingComplianceCheckEnum.KEY_POSITION,
QualFilingComplianceCheckEnum.STATUS_FAIL, "无来源人员id");
}
// 通过 SpringUtil 获取 OrgPersonnelMapper统计负责人数量
OrgPersonnelMapper orgPersonnelMapper = SpringUtil.getBean(OrgPersonnelMapper.class);
OrgPersonnelLeaderCountDO countDO = 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名过程控制负责人
int requiredTechnicalDirector = filing.getBusinessScope() != null ? filing.getBusinessScope().size() : 1;
int requiredProcessControlLeader = requiredTechnicalDirector;
boolean pass = technicalDirectorCount >= requiredTechnicalDirector
&& processControlLeaderCount >= requiredProcessControlLeader;
String currentValue = "技术负责人 " + technicalDirectorCount + "/" + requiredTechnicalDirector
+ ",过程控制负责人 " + processControlLeaderCount + "/" + requiredProcessControlLeader;
return buildResult(QualFilingComplianceCheckEnum.KEY_POSITION,
pass ? QualFilingComplianceCheckEnum.STATUS_PASS : QualFilingComplianceCheckEnum.STATUS_FAIL,
currentValue);
}
/**
* //
*/

View File

@ -41,4 +41,17 @@
`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`
</sql>
<!-- 根据人员id列表统计技术负责人和过程控制负责人数量 -->
<select id="countLeaderFlags" resultType="org.qinan.safetyeval.infrastructure.persistence.domainobject.OrgPersonnelLeaderCountDO">
SELECT
COUNT(CASE WHEN technical_director_flag = 1 THEN 1 END) AS technical_director_count,
COUNT(CASE WHEN process_control_leader_flag = 1 THEN 1 END) AS process_control_leader_count
FROM org_personnel
WHERE delete_enum = 'false'
AND id IN
<foreach collection="ids" item="id" open="(" separator="," close=")">
#{id}
</foreach>
</select>
</mapper>