upgrade
parent
ef3d3f751b
commit
8698b88518
|
|
@ -0,0 +1,38 @@
|
|||
package org.qinan.safetyeval.client.dto;
|
||||
|
||||
import io.swagger.annotations.ApiModelProperty;
|
||||
import lombok.Data;
|
||||
import org.qinan.safetyeval.domain.entity.CapabilityAssessmentDTO;
|
||||
import org.qinan.safetyeval.domain.entity.TitleCodeCo;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* 备案申请人员新增命令
|
||||
*
|
||||
* @author safety-eval
|
||||
*/
|
||||
@Data
|
||||
public class QualFilingPersonnelFilingCheckDTO {
|
||||
@ApiModelProperty("人员id")
|
||||
private Long id;
|
||||
|
||||
@ApiModelProperty(value = "人员岗位类型: TECHNICAL_LEADER=>技术负责人; PROCESS_CONTROL_LEADER=>过程控制负责人")
|
||||
private String personnelPositionType;
|
||||
|
||||
@ApiModelProperty(value = "能力认定")
|
||||
private List<CapabilityAssessmentDTO> capabilityAssessment;
|
||||
|
||||
|
||||
@ApiModelProperty(value = "是否技术负责人(false否true是)")
|
||||
private Boolean technicalDirectorFlag;
|
||||
|
||||
@ApiModelProperty(value = "是否过程控制负责人(false否true是)")
|
||||
private Boolean processControlLeaderFlag;
|
||||
|
||||
@ApiModelProperty(value = "职称(多个逗号分隔)")
|
||||
private List<TitleCodeCo> titleCodeArr;
|
||||
|
||||
// @ApiModelProperty(value = "人员证书信息")
|
||||
// private List<PersonnelCertFilingPageCO> personnelCertFilingPageCOList;
|
||||
}
|
||||
|
|
@ -12,11 +12,12 @@ public enum PersonnelPositionTypeEnum {
|
|||
|
||||
TECHNICAL_LEADER("TECHNICAL_LEADER", "技术负责人"),
|
||||
PROCESS_CONTROL_LEADER("PROCESS_CONTROL_LEADER", "过程控制负责人"),
|
||||
BASIC("BASIC", "基础人员"),
|
||||
;
|
||||
|
||||
private final String value;
|
||||
private final String label;
|
||||
|
||||
public static final String REMARKS = "人员岗位类型: TECHNICAL_LEADER=>技术负责人;" +
|
||||
"PROCESS_CONTROL_LEADER=>过程控制负责人";
|
||||
"PROCESS_CONTROL_LEADER=>过程控制负责人;BASIC=>基础人员" ;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -13,8 +13,10 @@ import org.qinan.safetyeval.client.dto.*;
|
|||
import org.qinan.safetyeval.domain.constant.*;
|
||||
import org.qinan.safetyeval.domain.constant.basic.IndustryEnum;
|
||||
import org.qinan.safetyeval.domain.constant.basic.ProfessionalCapabilityEnum;
|
||||
import org.qinan.safetyeval.domain.entity.CapabilityAssessmentDTO;
|
||||
import org.qinan.safetyeval.domain.entity.TitleCodeCo;
|
||||
import org.qinan.safetyeval.domain.exception.BizException;
|
||||
import org.qinan.safetyeval.domain.exception.ErrorCode;
|
||||
import org.qinan.safetyeval.infrastructure.dataobject.OrgPersonnelDO;
|
||||
import org.qinan.safetyeval.infrastructure.mapper.OrgPersonnelCertMapper;
|
||||
import org.qinan.safetyeval.infrastructure.mapper.OrgPersonnelMapper;
|
||||
|
|
@ -53,12 +55,15 @@ public class ComplianceCheckUtil {
|
|||
|
||||
List<QualFilingComplianceCheckResultCO> results = new ArrayList<>();
|
||||
|
||||
// 0. 查询人员证书专业能力信息
|
||||
List<OrgPersonnelCertCapabilityComplianceCheckCO>
|
||||
certCapabilityList = queryOrgPersonnelCertCapability(personnelList);
|
||||
// 0. 查询人员备案数据
|
||||
List<QualFilingPersonnelFilingCheckDTO> personnelFilingCheckList = queryPersonnelFilingCheck(personnelList);
|
||||
|
||||
// // 0. 查询人员证书专业能力信息
|
||||
// List<OrgPersonnelCertCapabilityComplianceCheckCO>
|
||||
// certCapabilityList = queryOrgPersonnelCertCapability(personnelList);
|
||||
|
||||
// 0.1 查询人员职称信息并回填到 personnelList
|
||||
fillTitleCodeArr(personnelList);
|
||||
fillTitleCodeArr(personnelList, personnelFilingCheckList);
|
||||
|
||||
// 1. 独立法人资格
|
||||
results.add(checkMainQualification(filing));
|
||||
|
|
@ -77,7 +82,7 @@ public class ComplianceCheckUtil {
|
|||
results.add(checkPersonnelCount(filing, personnelList));
|
||||
|
||||
// 6. 人员比例
|
||||
results.add(checkPersonnelRatio(filing.getBusinessScope(), personnelList, certCapabilityList, throwException));
|
||||
results.add(checkPersonnelRatio(filing.getBusinessScope(), personnelList, personnelFilingCheckList, throwException));
|
||||
|
||||
// 7. 负责人配备
|
||||
results.add(checkKeyPosition(filing, personnelList));
|
||||
|
|
@ -142,36 +147,72 @@ public class ComplianceCheckUtil {
|
|||
}
|
||||
|
||||
/**
|
||||
* 查询 org_personnel 的 title_code_arr(职称信息)并回填到备案人员列表。
|
||||
* 查询人员备案检查数据
|
||||
* <p>
|
||||
* 根据 sourcePersonnelId(对应 org_personnel.id)查询 title_code_arr,
|
||||
* 解析 JSON 字符串为 {@link TitleCodeCo} 列表后设置到 personnelList 中。
|
||||
* 根据 sourcePersonnelId(对应 org_personnel.id)查询人员的岗位类型、能力认定、
|
||||
* 技术负责人标志、过程控制负责人标志和职称信息。
|
||||
*
|
||||
* @param personnelList 备案人员列表
|
||||
* @return 人员备案检查数据列表
|
||||
*/
|
||||
private void fillTitleCodeArr(List<QualFilingPersonnelAddCmd> personnelList) {
|
||||
private List<QualFilingPersonnelFilingCheckDTO> queryPersonnelFilingCheck(
|
||||
List<QualFilingPersonnelAddCmd> personnelList) {
|
||||
if (CollectionUtils.isEmpty(personnelList)) {
|
||||
return;
|
||||
}
|
||||
List<Long> sourcePersonnelIds = personnelList.stream()
|
||||
.map(QualFilingPersonnelAddCmd::getSourcePersonnelId)
|
||||
.filter(Objects::nonNull)
|
||||
.distinct()
|
||||
.collect(Collectors.toList());
|
||||
if (sourcePersonnelIds.isEmpty()) {
|
||||
return;
|
||||
return Collections.emptyList();
|
||||
}
|
||||
Map<Long, QualFilingPersonnelAddCmd> sourcePersonnelIds = personnelList.stream()
|
||||
.collect(Collectors.toMap(QualFilingPersonnelAddCmd::getSourcePersonnelId, Function.identity()));
|
||||
|
||||
LambdaQueryWrapper<OrgPersonnelDO> wrapper = new LambdaQueryWrapper<OrgPersonnelDO>()
|
||||
.select(OrgPersonnelDO::getId, OrgPersonnelDO::getTitleCodeArr)
|
||||
.in(OrgPersonnelDO::getId, sourcePersonnelIds);
|
||||
.select(OrgPersonnelDO::getId, OrgPersonnelDO::getPersonnelPositionType,
|
||||
OrgPersonnelDO::getCapabilityAssessment, OrgPersonnelDO::getTechnicalDirectorFlag,
|
||||
OrgPersonnelDO::getProcessControlLeaderFlag, OrgPersonnelDO::getTitleCodeArr)
|
||||
.in(OrgPersonnelDO::getId, sourcePersonnelIds.keySet());
|
||||
List<OrgPersonnelDO> orgPersonnelList = SpringUtil.getBean(OrgPersonnelMapper.class).selectList(wrapper);
|
||||
Map<Long, String> titleCodeArrMap = orgPersonnelList.stream()
|
||||
.filter(p -> p.getTitleCodeArr() != null)
|
||||
.collect(Collectors.toMap(OrgPersonnelDO::getId, OrgPersonnelDO::getTitleCodeArr, (a, b) -> a));
|
||||
List<QualFilingPersonnelFilingCheckDTO> result = new ArrayList<>();
|
||||
for (OrgPersonnelDO personnel : orgPersonnelList) {
|
||||
sourcePersonnelIds.remove(personnel.getId());
|
||||
QualFilingPersonnelFilingCheckDTO dto = new QualFilingPersonnelFilingCheckDTO();
|
||||
dto.setId(personnel.getId());
|
||||
dto.setPersonnelPositionType(personnel.getPersonnelPositionType());
|
||||
dto.setCapabilityAssessment(
|
||||
JSONUtil.toList(personnel.getCapabilityAssessment(), CapabilityAssessmentDTO.class));
|
||||
dto.setTechnicalDirectorFlag(personnel.getTechnicalDirectorFlag());
|
||||
dto.setProcessControlLeaderFlag(personnel.getProcessControlLeaderFlag());
|
||||
dto.setTitleCodeArr(JSONUtil.toList(personnel.getTitleCodeArr(), TitleCodeCo.class));
|
||||
result.add(dto);
|
||||
}
|
||||
|
||||
// 人员缺少返回
|
||||
if (!CollectionUtils.isEmpty(sourcePersonnelIds)) {
|
||||
String collect = sourcePersonnelIds.values().stream()
|
||||
.map(QualFilingPersonnelAddCmd::getPersonName)
|
||||
.filter(Objects::nonNull)
|
||||
.collect(Collectors.joining(CommonUtil.COMMA));
|
||||
throw new BizException(ErrorCode.UNKNOWN_ERROR, "人员信息不存在" + collect);
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
/**
|
||||
* 将人员备案检查数据中的职称信息回填到备案人员列表。
|
||||
*
|
||||
* @param personnelList 备案人员列表
|
||||
* @param personnelFilingCheckList 人员备案检查数据(已包含职称信息)
|
||||
*/
|
||||
private void fillTitleCodeArr(List<QualFilingPersonnelAddCmd> personnelList,
|
||||
List<QualFilingPersonnelFilingCheckDTO> personnelFilingCheckList) {
|
||||
if (CollectionUtils.isEmpty(personnelList) || CollectionUtils.isEmpty(personnelFilingCheckList)) {
|
||||
return;
|
||||
}
|
||||
Map<Long, List<TitleCodeCo>> titleCodeArrMap = personnelFilingCheckList.stream()
|
||||
.filter(p -> p.getId() != null && p.getTitleCodeArr() != null)
|
||||
.collect(Collectors.toMap(QualFilingPersonnelFilingCheckDTO::getId,
|
||||
QualFilingPersonnelFilingCheckDTO::getTitleCodeArr, (a, b) -> a));
|
||||
for (QualFilingPersonnelAddCmd personnel : personnelList) {
|
||||
String titleCodeArrJson = titleCodeArrMap.get(personnel.getSourcePersonnelId());
|
||||
if (StringUtils.hasText(titleCodeArrJson)) {
|
||||
personnel.setTitleCodeArr(JSONUtil.toList(titleCodeArrJson, TitleCodeCo.class));
|
||||
List<TitleCodeCo> titleCodeArr = titleCodeArrMap.get(personnel.getSourcePersonnelId());
|
||||
if (titleCodeArr != null) {
|
||||
personnel.setTitleCodeArr(titleCodeArr);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -191,7 +232,7 @@ public class ComplianceCheckUtil {
|
|||
boolean pass = filing.getFixedAssetAmount() != null
|
||||
&& filing.getFixedAssetAmount() >= 800L;
|
||||
String currentValue = filing.getFixedAssetAmount() != null
|
||||
? filing.getFixedAssetAmount() + " 万元" : "未填写";
|
||||
? filing.getFixedAssetAmount() + " 万元" : "未填写" ;
|
||||
return buildResult(QualFilingComplianceCheckEnum.FIXED_AMOUNT,
|
||||
pass ? QualFilingComplianceCheckEnum.STATUS_PASS : QualFilingComplianceCheckEnum.STATUS_FAIL,
|
||||
currentValue);
|
||||
|
|
@ -204,22 +245,22 @@ public class ComplianceCheckUtil {
|
|||
boolean pass = filing.getWorkplaceArea() != null
|
||||
&& filing.getWorkplaceArea()
|
||||
.compareTo(new BigDecimal(QualFilingComplianceCheckEnum.WORKPLACE_LOWER)) >= 0;
|
||||
String workplace = filing.getWorkplaceArea() != null ? filing.getWorkplaceArea().toPlainString() : "未填写";
|
||||
String archive = filing.getArchiveRoomArea() != null ? filing.getArchiveRoomArea().toPlainString() : "未填写";
|
||||
String currentValue = "工作场所 " + workplace + " 平方米,档案室 " + archive + " 平方米";
|
||||
String workplace = filing.getWorkplaceArea() != null ? filing.getWorkplaceArea().toPlainString() : "未填写" ;
|
||||
String archive = filing.getArchiveRoomArea() != null ? filing.getArchiveRoomArea().toPlainString() : "未填写" ;
|
||||
String currentValue = "工作场所 " + workplace + " 平方米,档案室 " + archive + " 平方米" ;
|
||||
return buildResult(QualFilingComplianceCheckEnum.WORKPLACE,
|
||||
pass ? QualFilingComplianceCheckEnum.STATUS_PASS : QualFilingComplianceCheckEnum.STATUS_FAIL,
|
||||
currentValue);
|
||||
}
|
||||
|
||||
/**
|
||||
* 专职技术人员数量:>= 25人
|
||||
* 专职技术人员数量:>= 25+(业务范围数量-1)*5人
|
||||
*/
|
||||
private QualFilingComplianceCheckResultCO checkPersonnelCount(QualFilingAddCmd filing, List<QualFilingPersonnelAddCmd> personnelList) {
|
||||
int scopeCount = filing.getBusinessScope() != null ? filing.getBusinessScope().size() : 0;
|
||||
int total = personnelList == null ? 0 : personnelList.size();
|
||||
boolean pass = total >= QualFilingComplianceCheckEnum.PERSONNEL_COUNT_LOWER + (scopeCount - 1) * 5;
|
||||
String currentValue = scopeCount + " 个业务范围," + total + " 人";
|
||||
String currentValue = scopeCount + " 个业务范围," + total + " 人" ;
|
||||
return buildResult(QualFilingComplianceCheckEnum.PERSONNEL_COUNT,
|
||||
pass ? QualFilingComplianceCheckEnum.STATUS_PASS : QualFilingComplianceCheckEnum.STATUS_FAIL,
|
||||
currentValue);
|
||||
|
|
@ -230,16 +271,16 @@ public class ComplianceCheckUtil {
|
|||
*/
|
||||
private QualFilingComplianceCheckResultCO checkPersonnelRatio(
|
||||
List<String> businessScope, List<QualFilingPersonnelAddCmd> personnelList
|
||||
, List<OrgPersonnelCertCapabilityComplianceCheckCO> personnelCertCoList, boolean throwException) {
|
||||
, List<QualFilingPersonnelFilingCheckDTO> personnelCertCoList, boolean throwException) {
|
||||
if (personnelList == null || personnelList.isEmpty()) {
|
||||
return buildResult(QualFilingComplianceCheckEnum.PERSONNEL_RATIO,
|
||||
QualFilingComplianceCheckEnum.STATUS_FAIL, "无人员数据");
|
||||
}
|
||||
int total = personnelList.size();
|
||||
Set<Long> engineerSet = personnelCertCoList.stream()
|
||||
.filter(p -> CertTypeCodeEnum.REGISTERED_SAFETY_ENGINEER
|
||||
.getCode().equals(p.getCertTypeCode()) && !CertLevelEnum.JUNIOR.getCode().equals(p.getCertLevel()))
|
||||
.map(OrgPersonnelCertCapabilityComplianceCheckCO::getPersonnelId)
|
||||
// .filter(p -> CertTypeCodeEnum.REGISTERED_SAFETY_ENGINEER
|
||||
// .getCode().equals(p.getCertTypeCode()) && !CertLevelEnum.JUNIOR.getCode().equals(p.getCertLevel()))
|
||||
.map(QualFilingPersonnelFilingCheckDTO::getId)
|
||||
.collect(Collectors.toSet());
|
||||
Set<Long> seniorTitleSet = personnelList.stream()
|
||||
.filter(p -> p.getTitleCodeArr() != null && p.getTitleCodeArr().stream()
|
||||
|
|
@ -253,7 +294,7 @@ public class ComplianceCheckUtil {
|
|||
boolean pass = engineerRate >= QualFilingComplianceCheckEnum.PERSONNEL_RATE
|
||||
&& seniorTitleRate >= QualFilingComplianceCheckEnum.PERSONNEL_RATE
|
||||
&& sumRate >= 60;
|
||||
String currentValue = "注册安工程师 " + engineerRate + "%,高级职称 " + seniorTitleRate + "%,合计 " + sumRate + "%";
|
||||
String currentValue = "注册安工程师 " + engineerRate + "%,高级职称 " + seniorTitleRate + "%,合计 " + sumRate + "%" ;
|
||||
if (!pass && throwException) {
|
||||
throw new BizException(PERSON_NOT_ENOUGH, currentValue);
|
||||
}
|
||||
|
|
@ -266,7 +307,11 @@ public class ComplianceCheckUtil {
|
|||
List<IndustryProfessionalPersonCo> personnelCoList = SpringUtil.getBean(OrgPersonnelMapper.class)
|
||||
.selectProfessionalCapabilityByPersonnelIds(sourcePersonnelIds);
|
||||
Pair<Boolean, String> booleanStringPair = industryProfessionalStandardsValid(
|
||||
businessScope, personnelCoList, personnelCertCoList);
|
||||
businessScope, personnelCoList, null);
|
||||
|
||||
/*Pair<Boolean, String> booleanStringPair = industryProfessionalStandardsValid(
|
||||
businessScope, personnelCoList, personnelCertCoList);*/
|
||||
|
||||
boolean personPassed = Boolean.TRUE.equals(booleanStringPair.getKey());
|
||||
if (!personPassed && throwException) {
|
||||
throw new BizException(PERSON_NOT_ENOUGH, booleanStringPair.getValue());
|
||||
|
|
@ -286,15 +331,11 @@ public class ComplianceCheckUtil {
|
|||
*/
|
||||
private QualFilingComplianceCheckResultCO checkKeyPosition(QualFilingAddCmd filing,
|
||||
List<QualFilingPersonnelAddCmd> personnelList) {
|
||||
if(true){
|
||||
if (true) {
|
||||
// todo 暂时无法判定因为 人员去掉了业务范围 ;后面填报资质的时候需要修改
|
||||
return buildResult(QualFilingComplianceCheckEnum.KEY_POSITION, QualFilingComplianceCheckEnum.STATUS_PASS ,
|
||||
return buildResult(QualFilingComplianceCheckEnum.KEY_POSITION, QualFilingComplianceCheckEnum.STATUS_PASS,
|
||||
"满足条件");
|
||||
}
|
||||
if (personnelList == null || personnelList.isEmpty()) {
|
||||
return buildResult(QualFilingComplianceCheckEnum.KEY_POSITION,
|
||||
QualFilingComplianceCheckEnum.STATUS_FAIL, "无人员数据");
|
||||
}
|
||||
|
||||
// 提取所有来源人员id(对应 org_personnel.id)
|
||||
List<Long> sourcePersonnelIds = personnelList.stream()
|
||||
|
|
@ -303,10 +344,6 @@ public class ComplianceCheckUtil {
|
|||
.distinct()
|
||||
.collect(Collectors.toList());
|
||||
|
||||
if (sourcePersonnelIds.isEmpty()) {
|
||||
return buildResult(QualFilingComplianceCheckEnum.KEY_POSITION,
|
||||
QualFilingComplianceCheckEnum.STATUS_FAIL, "无来源人员id");
|
||||
}
|
||||
|
||||
// 通过 SpringUtil 获取 OrgPersonnelMapper,按业务范围(qual_scope)分组统计负责人数量
|
||||
OrgPersonnelMapper orgPersonnelMapper = SpringUtil.getBean(OrgPersonnelMapper.class);
|
||||
|
|
@ -338,7 +375,7 @@ public class ComplianceCheckUtil {
|
|||
if (industryEnum != null) {
|
||||
scope = industryEnum.getValue();
|
||||
} else {
|
||||
scope = "未知行业范围";
|
||||
scope = "未知行业范围" ;
|
||||
}
|
||||
currentValue.append("业务[").append(scope).append("] 技术负责人 ")
|
||||
.append(technicalDirectorCount).append("/1,过程控制负责人 ")
|
||||
|
|
@ -376,7 +413,7 @@ public class ComplianceCheckUtil {
|
|||
&& m.getUploadStatusCode() == QualFilingMaterialUploadStatusEnum.UPLOADED.getCode()
|
||||
&& m.getMaterialType() != null
|
||||
&& m.getMaterialType() == MaterialTypeEnum.NO_VIOLATION_RECORD.getCode());
|
||||
String currentValue = hasRecord ? "未命中重大违法失信记录" : "命中重大违法失信记录";
|
||||
String currentValue = hasRecord ? "未命中重大违法失信记录" : "命中重大违法失信记录" ;
|
||||
return buildResult(QualFilingComplianceCheckEnum.CREDIT_RECORD,
|
||||
hasRecord ? QualFilingComplianceCheckEnum.STATUS_PASS : QualFilingComplianceCheckEnum.STATUS_FAIL,
|
||||
currentValue);
|
||||
|
|
|
|||
|
|
@ -91,10 +91,10 @@
|
|||
AND p.user_name LIKE CONCAT('%', #{query.personName}, '%')
|
||||
</if>
|
||||
<if test="query.managementFlag != null and query.managementFlag == true">
|
||||
AND (p.technical_director_flag =1 or p.process_control_leader_flag =1)
|
||||
AND (p.personnel_position_type =1 or p.process_control_leader_flag =1)
|
||||
</if>
|
||||
<if test="query.managementFlag != null and query.managementFlag == false">
|
||||
AND (p.technical_director_flag !=1 and p.process_control_leader_flag !=1)
|
||||
AND (p.technical_director_flag =0 and p.process_control_leader_flag =0)
|
||||
</if>
|
||||
</where>
|
||||
ORDER BY p.id DESC
|
||||
|
|
|
|||
Loading…
Reference in New Issue