diff --git a/safety-eval-adapter/src/main/java/org/qinan/safetyeval/adapter/web/OrgPersonnelController.java b/safety-eval-adapter/src/main/java/org/qinan/safetyeval/adapter/web/OrgPersonnelController.java index 8157cf9..ba494d0 100644 --- a/safety-eval-adapter/src/main/java/org/qinan/safetyeval/adapter/web/OrgPersonnelController.java +++ b/safety-eval-adapter/src/main/java/org/qinan/safetyeval/adapter/web/OrgPersonnelController.java @@ -6,6 +6,7 @@ import io.swagger.annotations.ApiParam; import org.qinan.safetyeval.client.api.OrgPersonnelApi; import org.qinan.safetyeval.client.co.OrgPersonnelCO; import org.qinan.safetyeval.client.co.OrgPersonnelImportResultCO; +import org.qinan.safetyeval.client.co.QualFilingPersonnelInfoCO; import org.qinan.safetyeval.client.dto.*; import org.qinan.safetyeval.infrastructure.dataobject.base.Req; import org.springframework.validation.annotation.Validated; @@ -57,6 +58,12 @@ public class OrgPersonnelController { return orgPersonnelApi.page(query); } + @ApiOperation("资质备案人员分页查询") + @GetMapping("/filing/page") + public PageResponse filingPage(@Validated OrgFilingPersonnelPageQuery query) { + return orgPersonnelApi.filingPage(query); + } + @ApiOperation("重置人员密码") @PostMapping("/reset-password") public SingleResponse resetPassword(@ApiParam("主键ID") @RequestBody Req req) { 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 22a1977..7e09575 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 @@ -3,6 +3,8 @@ package org.qinan.safetyeval.app.executor; import com.jjb.saas.system.client.user.request.UserAddCmd; import com.jjb.saas.system.client.user.request.UserRoleUpdateCmd; import com.jjb.saas.system.client.user.request.UserUpdatePasswordCmd; +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.zcloud.gbscommon.utils.MD5; import com.zcloud.gbscommon.utils.Sm2Util; import org.qinan.safetyeval.app.convertor.OrgPersonnelConvertor; @@ -12,6 +14,8 @@ import org.qinan.safetyeval.app.support.OrgPersonnelViewEnricher; import org.qinan.safetyeval.client.api.OrgPersonnelApi; import org.qinan.safetyeval.client.co.OrgPersonnelCO; import org.qinan.safetyeval.client.co.OrgPersonnelImportResultCO; +import org.qinan.safetyeval.client.co.PersonnelProfessionalCapabilityCO; +import org.qinan.safetyeval.client.co.QualFilingPersonnelInfoCO; import org.qinan.safetyeval.client.dto.*; import org.qinan.safetyeval.domain.entity.OrgPersonnelEntity; import org.qinan.safetyeval.domain.entity.OrgPositionEntity; @@ -26,7 +30,10 @@ import org.qinan.safetyeval.domain.service.OrgPositionDomainService; import org.qinan.safetyeval.infrastructure.adapter.ThreadLocalUserInfoAdapter; import org.qinan.safetyeval.infrastructure.adapter.auth.AuthUserContextAdapter; import org.qinan.safetyeval.infrastructure.adapter.gbs.GbsUserFacadeClient; +import org.qinan.safetyeval.infrastructure.mapper.OrgPersonnelMapper; +import org.qinan.safetyeval.infrastructure.mapper.QualFilingPersonnelCertMapper; import org.qinan.safetyeval.infrastructure.support.UserOrgIdResolver; +import org.qinan.safetyeval.infrastructure.utils.CommonUtil; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; @@ -34,13 +41,13 @@ import org.springframework.beans.factory.annotation.Value; import org.springframework.context.annotation.Lazy; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; +import org.springframework.util.CollectionUtils; import org.springframework.util.StringUtils; import org.springframework.web.multipart.MultipartFile; import java.math.BigDecimal; -import java.util.Collections; -import java.util.List; -import java.util.Objects; +import java.util.*; +import java.util.stream.Collectors; /** * 人员信息执行器(App层) @@ -82,6 +89,11 @@ public class OrgPersonnelExecutor implements OrgPersonnelApi { @Autowired(required = false) private UserOrgIdResolver userOrgIdResolver; + @Autowired + private OrgPersonnelMapper orgPersonnelMapper; + @Autowired + private QualFilingPersonnelCertMapper qualFilingPersonnelCertMapper; + @Value("${def.password:a123456}") private String defPassword; @Value("${def.publicKey:0402df2195296d4062ac85ad766994d73e871b887e18efb9a9a06b4cebc72372869b7da6c347c129dee2b46a0f279ff066b01c76208c2a052af75977c722a2ccee}") @@ -213,6 +225,50 @@ public class OrgPersonnelExecutor implements OrgPersonnelApi { return PageResponse.of(records, pageResult.getTotal()); } + @Override + public PageResponse filingPage(OrgFilingPersonnelPageQuery query) { + query.setOrgId(ThreadLocalUserInfoAdapter.getOrgId()); + // 直连 infrastructure 层 Mapper,跳过 domain,由 XML 直接返回 CO,无需转换 + Page page = new Page<>(query.getCurrent(), query.getSize()); + IPage result = orgPersonnelMapper.filingPage(page, query); + List records = result.getRecords(); + setProfessionalCapabilityCodeList(records); + return PageResponse.of(records, result.getTotal()); + } + + /** + * 批量设置人员专业能力证书类型编码列表 + * + * @param personnelList personnelList + */ + private void setProfessionalCapabilityCodeList(List personnelList) { + if (CollectionUtils.isEmpty(personnelList)) { + return; + } + List personnelIdList = personnelList.stream() + .map(QualFilingPersonnelInfoCO::getSourcePersonnelId) + .filter(Objects::nonNull) + .collect(Collectors.toList()); + if (CollectionUtils.isEmpty(personnelIdList)) { + return; + } + List capabilityList = + qualFilingPersonnelCertMapper.getProfessionalCapabilityCodeList(personnelIdList); + Map> capabilityMap = capabilityList.stream() + .filter(item -> StringUtils.hasText(item.getProfessionalCapabilityCodeList())) + .collect(Collectors.toMap( + PersonnelProfessionalCapabilityCO::getPersonnelId, + item -> Arrays.asList(item.getProfessionalCapabilityCodeList() + .split(CommonUtil.COMMA)), + (a, b) -> a)); + for (QualFilingPersonnelInfoCO personnel : personnelList) { + List codes = capabilityMap.get(personnel.getSourcePersonnelId()); + if (codes != null) { + personnel.setProfessionalCapabilityCodeList(codes); + } + } + } + private void syncGbsUser(String action, Runnable runnable) { try { runnable.run(); diff --git a/safety-eval-client/src/main/java/org/qinan/safetyeval/client/api/OrgPersonnelApi.java b/safety-eval-client/src/main/java/org/qinan/safetyeval/client/api/OrgPersonnelApi.java index 8eeaf26..bd3be3c 100644 --- a/safety-eval-client/src/main/java/org/qinan/safetyeval/client/api/OrgPersonnelApi.java +++ b/safety-eval-client/src/main/java/org/qinan/safetyeval/client/api/OrgPersonnelApi.java @@ -2,13 +2,8 @@ package org.qinan.safetyeval.client.api; import org.qinan.safetyeval.client.co.OrgPersonnelCO; import org.qinan.safetyeval.client.co.OrgPersonnelImportResultCO; -import org.qinan.safetyeval.client.dto.PageResponse; -import org.qinan.safetyeval.client.dto.SingleResponse; -import org.qinan.safetyeval.client.dto.OrgPersonnelAddCmd; -import org.qinan.safetyeval.client.dto.OrgPersonnelCompareFaceCmd; -import org.qinan.safetyeval.client.dto.OrgPersonnelModifyCmd; -import org.qinan.safetyeval.client.dto.OrgPersonnelPageQuery; -import org.qinan.safetyeval.client.dto.OrgPersonnelUpdateOriginFaceCmd; +import org.qinan.safetyeval.client.co.QualFilingPersonnelInfoCO; +import org.qinan.safetyeval.client.dto.*; import org.springframework.web.multipart.MultipartFile; import java.math.BigDecimal; @@ -30,6 +25,8 @@ public interface OrgPersonnelApi { PageResponse page(OrgPersonnelPageQuery query); + PageResponse filingPage(OrgFilingPersonnelPageQuery query); + SingleResponse resetPassword(Long id); SingleResponse updateOriginFace(OrgPersonnelUpdateOriginFaceCmd cmd); diff --git a/safety-eval-client/src/main/java/org/qinan/safetyeval/client/dto/OrgFilingPersonnelPageQuery.java b/safety-eval-client/src/main/java/org/qinan/safetyeval/client/dto/OrgFilingPersonnelPageQuery.java new file mode 100644 index 0000000..300fa20 --- /dev/null +++ b/safety-eval-client/src/main/java/org/qinan/safetyeval/client/dto/OrgFilingPersonnelPageQuery.java @@ -0,0 +1,21 @@ +package org.qinan.safetyeval.client.dto; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.EqualsAndHashCode; + +/** + * 资质备案人员分页查询参数 + * + * @author safety-eval + */ +@Data +@EqualsAndHashCode(callSuper = true) +public class OrgFilingPersonnelPageQuery extends BasePageQuery { + + @ApiModelProperty(value = "单位id") + private Long orgId; + + @ApiModelProperty(value = "人员姓名") + private String personName; +} 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 76e3bc0..d18e556 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 @@ -1,9 +1,13 @@ package org.qinan.safetyeval.infrastructure.mapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Param; import org.qinan.safetyeval.client.co.IndustryProfessionalPersonCo; +import org.qinan.safetyeval.client.co.QualFilingPersonnelInfoCO; +import org.qinan.safetyeval.client.dto.OrgFilingPersonnelPageQuery; import org.qinan.safetyeval.infrastructure.dataobject.OrgPersonnelDO; import org.qinan.safetyeval.infrastructure.persistence.domainobject.OrgPersonnelLeaderCountDO; @@ -27,4 +31,14 @@ public interface OrgPersonnelMapper extends BaseMapper { * @return 人员专业能力信息列表 */ List selectProfessionalCapabilityByPersonnelIds(@Param("ids") List ids); + + /** + * 资质备案人员分页查询,由 XML 直接返回 CO,无需转换。 + * + * @param page 分页参数 + * @param query 查询条件 + * @return 备案人员信息分页结果 + */ + IPage filingPage(Page page, + @Param("query") OrgFilingPersonnelPageQuery query); } diff --git a/safety-eval-infrastructure/src/main/resources/mapper/OrgPersonnelMapper.xml b/safety-eval-infrastructure/src/main/resources/mapper/OrgPersonnelMapper.xml index c616489..e68fee6 100644 --- a/safety-eval-infrastructure/src/main/resources/mapper/OrgPersonnelMapper.xml +++ b/safety-eval-infrastructure/src/main/resources/mapper/OrgPersonnelMapper.xml @@ -68,4 +68,21 @@ + + +