From c9da45a05a50af4d7063853423fece0c8d29fb46 Mon Sep 17 00:00:00 2001 From: luotaiqian <1147642922@qq.com> Date: Sat, 8 Aug 2026 16:08:48 +0800 Subject: [PATCH] upgrade --- .../app/executor/OrgPersonnelExecutor.java | 38 ++++++++++++++ .../client/co/QualFilingPersonnelInfoCO.java | 7 +++ .../constant/basic/TitleCapabilityEnum.java | 4 +- .../gateway/OrgPersonnelCertGateway.java | 3 ++ .../OrgPersonnelCertDomainService.java | 5 ++ .../OrgPersonnelCertGatewayImpl.java | 13 +++++ .../handler/TitleCodeListTypeHandler.java | 50 +++++++++++++++++++ .../resources/mapper/OrgPersonnelMapper.xml | 4 +- 8 files changed, 121 insertions(+), 3 deletions(-) create mode 100644 safety-eval-infrastructure/src/main/java/org/qinan/safetyeval/infrastructure/handler/TitleCodeListTypeHandler.java diff --git a/safety-eval-app/src/main/java/org/qinan/safetyeval/app/executor/OrgPersonnelExecutor.java b/safety-eval-app/src/main/java/org/qinan/safetyeval/app/executor/OrgPersonnelExecutor.java index 76323a87..91cf631a 100644 --- a/safety-eval-app/src/main/java/org/qinan/safetyeval/app/executor/OrgPersonnelExecutor.java +++ b/safety-eval-app/src/main/java/org/qinan/safetyeval/app/executor/OrgPersonnelExecutor.java @@ -243,6 +243,8 @@ public class OrgPersonnelExecutor implements OrgPersonnelApi { }) .collect(java.util.stream.Collectors.toList()); + fillCertsBatch(records); + return PageResponse.of(records, pageResult.getTotal()); } @@ -375,6 +377,42 @@ public class OrgPersonnelExecutor implements OrgPersonnelApi { } } + /** + * 批量查询证书并填充到CO列表中,一次查询后按人员分组分别设置注安证书和评价师证书 + */ + private void fillCertsBatch(List records) { + if (orgPersonnelCertDomainService == null || CollectionUtils.isEmpty(records)) { + return; + } + List personnelIds = records.stream() + .map(OrgPersonnelCO::getId) + .filter(Objects::nonNull) + .collect(Collectors.toList()); + if (CollectionUtils.isEmpty(personnelIds)) { + return; + } + List certs = orgPersonnelCertDomainService.listByPersonnelIds(personnelIds); + if (CollectionUtils.isEmpty(certs)) { + return; + } + Map> certMap = certs.stream() + .collect(Collectors.groupingBy(OrgPersonnelCertEntity::getPersonnelId)); + for (OrgPersonnelCO co : records) { + List personCerts = certMap.get(co.getId()); + if (CollectionUtils.isEmpty(personCerts)) { + continue; + } + for (OrgPersonnelCertEntity cert : personCerts) { + OrgPersonnelCertCO certCO = orgPersonnelCertConvertor.entityToCO(cert); + if (CertTypeCodeEnum.REGISTERED_SAFETY_ENGINEER.getCode().equals(cert.getCertTypeCode())) { + co.setRegisteredSafetyEngineerCert(certCO); + } else if (CertTypeCodeEnum.EVALUATOR.getCode().equals(cert.getCertTypeCode())) { + co.setEvaluatorCert(certCO); + } + } + } + } + @Override public SingleResponse updateOriginFace(OrgPersonnelUpdateOriginFaceCmd cmd) { OrgPersonnelEntity existing = orgPersonnelDomainService.get(cmd.getId()); diff --git a/safety-eval-client/src/main/java/org/qinan/safetyeval/client/co/QualFilingPersonnelInfoCO.java b/safety-eval-client/src/main/java/org/qinan/safetyeval/client/co/QualFilingPersonnelInfoCO.java index d127c772..aa05f050 100644 --- a/safety-eval-client/src/main/java/org/qinan/safetyeval/client/co/QualFilingPersonnelInfoCO.java +++ b/safety-eval-client/src/main/java/org/qinan/safetyeval/client/co/QualFilingPersonnelInfoCO.java @@ -3,6 +3,7 @@ package org.qinan.safetyeval.client.co; import io.swagger.annotations.ApiModelProperty; import lombok.Data; import org.qinan.safetyeval.domain.entity.CapabilityAssessmentDTO; +import org.qinan.safetyeval.domain.entity.TitleCodeCo; import java.time.LocalDate; import java.util.List; @@ -33,6 +34,9 @@ public class QualFilingPersonnelInfoCO { @ApiModelProperty(value = "职位名称") private String positionName; + @ApiModelProperty(value = "职称(多个逗号分隔)") + private List titleCodeArr; + @ApiModelProperty(value = "性别编码(1男2女)") private Integer genderCode; @@ -51,6 +55,9 @@ public class QualFilingPersonnelInfoCO { @ApiModelProperty(value = "是否过程控制负责人(0否1是)") private Integer processControlLeaderFlag; + @ApiModelProperty(value = "人员岗位类型(TECHNICAL_LEADER=>技术负责人; PROCESS_CONTROL_LEADER=>过程控制负责人)") + private String personnelPositionType; + @ApiModelProperty(value = "评价师证书编号") private String evaluatorCertNo; diff --git a/safety-eval-domain/src/main/java/org/qinan/safetyeval/domain/constant/basic/TitleCapabilityEnum.java b/safety-eval-domain/src/main/java/org/qinan/safetyeval/domain/constant/basic/TitleCapabilityEnum.java index cb91deb8..7ec7704d 100644 --- a/safety-eval-domain/src/main/java/org/qinan/safetyeval/domain/constant/basic/TitleCapabilityEnum.java +++ b/safety-eval-domain/src/main/java/org/qinan/safetyeval/domain/constant/basic/TitleCapabilityEnum.java @@ -4,7 +4,7 @@ import lombok.Getter; import lombok.RequiredArgsConstructor; /** - * 职称能力 + * 职称专业,能力 */ @Getter @RequiredArgsConstructor @@ -33,7 +33,7 @@ public enum TitleCapabilityEnum { private final String label; private final String capability; - public static final String REMARKS = "职称能力: P01=>安全工程(安全);" + + public static final String REMARKS = "职称专业能力: P01=>安全工程(安全);" + "P02=>机械工程(机械、化工机械);" + "P03=>化工机械(化工机械);" + "P04=>化学工程(化工工艺);" + diff --git a/safety-eval-domain/src/main/java/org/qinan/safetyeval/domain/gateway/OrgPersonnelCertGateway.java b/safety-eval-domain/src/main/java/org/qinan/safetyeval/domain/gateway/OrgPersonnelCertGateway.java index 5d143a97..b92fa5f5 100644 --- a/safety-eval-domain/src/main/java/org/qinan/safetyeval/domain/gateway/OrgPersonnelCertGateway.java +++ b/safety-eval-domain/src/main/java/org/qinan/safetyeval/domain/gateway/OrgPersonnelCertGateway.java @@ -3,6 +3,7 @@ package org.qinan.safetyeval.domain.gateway; import org.qinan.safetyeval.domain.entity.OrgPersonnelCertEntity; import org.qinan.safetyeval.domain.query.OrgPersonnelCertQuery; import org.qinan.safetyeval.domain.query.PageResult; +import java.util.Collection; import java.util.List; /** @@ -18,6 +19,8 @@ public interface OrgPersonnelCertGateway { List listByPersonnelId(Long personnelId); + List listByPersonnelIds(Collection personnelIds); + List listByOrgId(Long orgId); OrgPersonnelCertEntity modify(OrgPersonnelCertEntity entity); diff --git a/safety-eval-domain/src/main/java/org/qinan/safetyeval/domain/service/OrgPersonnelCertDomainService.java b/safety-eval-domain/src/main/java/org/qinan/safetyeval/domain/service/OrgPersonnelCertDomainService.java index 2ec927e2..a42641cd 100644 --- a/safety-eval-domain/src/main/java/org/qinan/safetyeval/domain/service/OrgPersonnelCertDomainService.java +++ b/safety-eval-domain/src/main/java/org/qinan/safetyeval/domain/service/OrgPersonnelCertDomainService.java @@ -7,6 +7,7 @@ import org.qinan.safetyeval.domain.gateway.OrgPersonnelCertGateway; import org.qinan.safetyeval.domain.query.OrgPersonnelCertQuery; import org.qinan.safetyeval.domain.query.PageResult; +import java.util.Collection; import java.util.List; import javax.annotation.Resource; import org.springframework.stereotype.Service; @@ -34,6 +35,10 @@ public class OrgPersonnelCertDomainService { return orgPersonnelCertGateway.listByPersonnelId(personnelId); } + public List listByPersonnelIds(Collection personnelIds) { + return orgPersonnelCertGateway.listByPersonnelIds(personnelIds); + } + public OrgPersonnelCertEntity modify(OrgPersonnelCertEntity entity) { OrgPersonnelCertEntity existing = orgPersonnelCertGateway.get(entity.getId()); if (existing == null) { diff --git a/safety-eval-infrastructure/src/main/java/org/qinan/safetyeval/infrastructure/gatewayimpl/OrgPersonnelCertGatewayImpl.java b/safety-eval-infrastructure/src/main/java/org/qinan/safetyeval/infrastructure/gatewayimpl/OrgPersonnelCertGatewayImpl.java index fe3e542c..f83e049f 100644 --- a/safety-eval-infrastructure/src/main/java/org/qinan/safetyeval/infrastructure/gatewayimpl/OrgPersonnelCertGatewayImpl.java +++ b/safety-eval-infrastructure/src/main/java/org/qinan/safetyeval/infrastructure/gatewayimpl/OrgPersonnelCertGatewayImpl.java @@ -16,6 +16,7 @@ import org.springframework.stereotype.Component; import org.springframework.util.StringUtils; import javax.annotation.Resource; +import java.util.Collection; import java.util.List; import java.util.stream.Collectors; @@ -59,6 +60,18 @@ public class OrgPersonnelCertGatewayImpl implements OrgPersonnelCertGateway { return dataObjects.stream().map(orgPersonnelCertConvertor::doToEntity).collect(Collectors.toList()); } + @Override + public List listByPersonnelIds(Collection personnelIds) { + if (personnelIds == null || personnelIds.isEmpty()) { + return java.util.Collections.emptyList(); + } + LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); + wrapper.in(OrgPersonnelCertDO::getPersonnelId, personnelIds); + wrapper.eq(OrgPersonnelCertDO::getDeleteEnum, "false"); + List dataObjects = orgPersonnelCertMapper.selectList(wrapper); + return dataObjects.stream().map(orgPersonnelCertConvertor::doToEntity).collect(Collectors.toList()); + } + @Override public List listByOrgId(Long orgId) { LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); diff --git a/safety-eval-infrastructure/src/main/java/org/qinan/safetyeval/infrastructure/handler/TitleCodeListTypeHandler.java b/safety-eval-infrastructure/src/main/java/org/qinan/safetyeval/infrastructure/handler/TitleCodeListTypeHandler.java new file mode 100644 index 00000000..4f46d789 --- /dev/null +++ b/safety-eval-infrastructure/src/main/java/org/qinan/safetyeval/infrastructure/handler/TitleCodeListTypeHandler.java @@ -0,0 +1,50 @@ +package org.qinan.safetyeval.infrastructure.handler; + +import cn.hutool.json.JSONUtil; +import org.apache.ibatis.type.BaseTypeHandler; +import org.apache.ibatis.type.JdbcType; +import org.apache.ibatis.type.MappedJdbcTypes; +import org.qinan.safetyeval.domain.entity.TitleCodeCo; + +import java.sql.CallableStatement; +import java.sql.PreparedStatement; +import java.sql.ResultSet; +import java.sql.SQLException; +import java.util.Collections; +import java.util.List; + +/** + * MyBatis TypeHandler: 在数据库的 varchar/text 列中以 JSON 数组字符串形式存储 List。 + * + * @author safety-eval + */ +@MappedJdbcTypes(JdbcType.VARCHAR) +public class TitleCodeListTypeHandler extends BaseTypeHandler> { + + @Override + public void setNonNullParameter(PreparedStatement ps, int i, List parameter, JdbcType jdbcType) throws SQLException { + ps.setString(i, JSONUtil.toJsonStr(parameter)); + } + + @Override + public List getNullableResult(ResultSet rs, String columnName) throws SQLException { + return parse(rs.getString(columnName)); + } + + @Override + public List getNullableResult(ResultSet rs, int columnIndex) throws SQLException { + return parse(rs.getString(columnIndex)); + } + + @Override + public List getNullableResult(CallableStatement cs, int columnIndex) throws SQLException { + return parse(cs.getString(columnIndex)); + } + + private List parse(String json) { + if (json == null || json.isEmpty()) { + return Collections.emptyList(); + } + return JSONUtil.toList(json, TitleCodeCo.class); + } +} diff --git a/safety-eval-infrastructure/src/main/resources/mapper/OrgPersonnelMapper.xml b/safety-eval-infrastructure/src/main/resources/mapper/OrgPersonnelMapper.xml index 74c4c967..4120e816 100644 --- a/safety-eval-infrastructure/src/main/resources/mapper/OrgPersonnelMapper.xml +++ b/safety-eval-infrastructure/src/main/resources/mapper/OrgPersonnelMapper.xml @@ -72,13 +72,15 @@ +