From 6bdab4199e8caecc3fd42f1f32460368631a75c7 Mon Sep 17 00:00:00 2001 From: zhanglei Date: Mon, 10 Aug 2026 10:18:00 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BB=A3=E7=A0=81=E6=8F=90=E4=BA=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../adapter/web/OrgPersonnelController.java | 7 +++++++ .../app/executor/OrgPersonnelExecutor.java | 17 +++++++++++++++++ .../client/api/OrgPersonnelApi.java | 5 +++++ .../client/co/OrgPersonnelDeptCountCO.java | 19 +++++++++++++++++++ .../dataobject/OrgPersonnelDeptCountDO.java | 16 ++++++++++++++++ .../mapper/OrgPersonnelMapper.java | 9 +++++++++ .../resources/mapper/OrgPersonnelMapper.xml | 10 ++++++++++ 7 files changed, 83 insertions(+) create mode 100644 safety-eval-client/src/main/java/org/qinan/safetyeval/client/co/OrgPersonnelDeptCountCO.java create mode 100644 safety-eval-infrastructure/src/main/java/org/qinan/safetyeval/infrastructure/dataobject/OrgPersonnelDeptCountDO.java 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 6d9d0435..279a9ea6 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 @@ -5,6 +5,7 @@ import io.swagger.annotations.ApiOperation; 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.OrgPersonnelDeptCountCO; import org.qinan.safetyeval.client.co.OrgPersonnelImportResultCO; import org.qinan.safetyeval.client.co.QualFilingPersonnelInfoCO; import org.qinan.safetyeval.client.dto.*; @@ -95,4 +96,10 @@ public class OrgPersonnelController { public SingleResponse> getOrgPersonnel() { return orgPersonnelApi.getOrgPersonnel(); } + + @ApiOperation("按部门批量统计人员数量") + @GetMapping("/deptPersonCount") + public SingleResponse> deptPersonCount() { + return orgPersonnelApi.deptPersonCount(); + } } 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 8c3a94d7..60619c50 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 @@ -34,6 +34,7 @@ import org.qinan.safetyeval.infrastructure.adapter.auth.AuthUserContextAdapter; import org.qinan.safetyeval.infrastructure.adapter.gbs.GbsUserFacadeClient; import org.qinan.safetyeval.infrastructure.convertor.OrgPersonnelCertConvertor; import org.qinan.safetyeval.infrastructure.dataobject.OrgPersonnelDO; +import org.qinan.safetyeval.infrastructure.dataobject.OrgPersonnelDeptCountDO; import org.qinan.safetyeval.infrastructure.mapper.OrgPersonnelMapper; import org.qinan.safetyeval.infrastructure.mapper.QualFilingPersonnelCertMapper; import org.qinan.safetyeval.infrastructure.support.UserOrgIdResolver; @@ -459,6 +460,22 @@ public class OrgPersonnelExecutor implements OrgPersonnelApi { return SingleResponse.success(orgPersonnelCOS); } + @Override + public SingleResponse> deptPersonCount() { + Long orgId = ThreadLocalUserInfoAdapter.getOrgId(); + List rows = orgPersonnelMapper.countPersonGroupByDept(orgId); + if (CollectionUtils.isEmpty(rows)) { + return SingleResponse.success(Collections.emptyList()); + } + List list = rows.stream().map(row -> { + OrgPersonnelDeptCountCO co = new OrgPersonnelDeptCountCO(); + co.setDeptId(row.getDeptId() != null ? String.valueOf(row.getDeptId()) : null); + co.setPersonCount(row.getPersonCount() != null ? row.getPersonCount() : 0); + return co; + }).collect(Collectors.toList()); + return SingleResponse.success(list); + } + @Override public SingleResponse professionalCapabilityProofMaterialUpdate(ProfessionalCapabilityProofMaterialUpdateCmd cmd) { orgPersonnelMapper.update(new LambdaUpdateWrapper() 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 b77876db..290569ca 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 @@ -1,6 +1,7 @@ package org.qinan.safetyeval.client.api; import org.qinan.safetyeval.client.co.OrgPersonnelCO; +import org.qinan.safetyeval.client.co.OrgPersonnelDeptCountCO; import org.qinan.safetyeval.client.co.OrgPersonnelImportResultCO; import org.qinan.safetyeval.client.co.QualFilingPersonnelInfoCO; import org.qinan.safetyeval.client.dto.*; @@ -51,6 +52,10 @@ public interface OrgPersonnelApi { SingleResponse> getOrgPersonnel(); + /** + * 按部门批量统计人员数量(直接归属,一次返回)。 + */ + SingleResponse> deptPersonCount(); SingleResponse professionalCapabilityProofMaterialUpdate(ProfessionalCapabilityProofMaterialUpdateCmd cmd); } diff --git a/safety-eval-client/src/main/java/org/qinan/safetyeval/client/co/OrgPersonnelDeptCountCO.java b/safety-eval-client/src/main/java/org/qinan/safetyeval/client/co/OrgPersonnelDeptCountCO.java new file mode 100644 index 00000000..27d233a2 --- /dev/null +++ b/safety-eval-client/src/main/java/org/qinan/safetyeval/client/co/OrgPersonnelDeptCountCO.java @@ -0,0 +1,19 @@ +package org.qinan.safetyeval.client.co; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +/** + * 部门人员数量统计 CO + * + * @author safety-eval + */ +@Data +public class OrgPersonnelDeptCountCO { + + @ApiModelProperty(value = "部门ID") + private String deptId; + + @ApiModelProperty(value = "人员数量(直接归属该部门)") + private Integer personCount; +} diff --git a/safety-eval-infrastructure/src/main/java/org/qinan/safetyeval/infrastructure/dataobject/OrgPersonnelDeptCountDO.java b/safety-eval-infrastructure/src/main/java/org/qinan/safetyeval/infrastructure/dataobject/OrgPersonnelDeptCountDO.java new file mode 100644 index 00000000..86bbcf83 --- /dev/null +++ b/safety-eval-infrastructure/src/main/java/org/qinan/safetyeval/infrastructure/dataobject/OrgPersonnelDeptCountDO.java @@ -0,0 +1,16 @@ +package org.qinan.safetyeval.infrastructure.dataobject; + +import lombok.Data; + +/** + * 部门人员数量统计结果 + * + * @author safety-eval + */ +@Data +public class OrgPersonnelDeptCountDO { + + private Long deptId; + + private Integer personCount; +} 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 d18e556a..c6aa6953 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 @@ -9,6 +9,7 @@ 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.dataobject.OrgPersonnelDeptCountDO; import org.qinan.safetyeval.infrastructure.persistence.domainobject.OrgPersonnelLeaderCountDO; import java.util.List; @@ -16,6 +17,14 @@ import java.util.List; @Mapper public interface OrgPersonnelMapper extends BaseMapper { + /** + * 按部门批量统计未删除人员数量(直接归属,不含下级部门汇总) + * + * @param orgId 机构ID + * @return 各部门人员数量 + */ + List countPersonGroupByDept(@Param("orgId") Long orgId); + /** * 根据人员id列表统计技术负责人和过程控制负责人数量(按业务范围 qual_scope 分组) * diff --git a/safety-eval-infrastructure/src/main/resources/mapper/OrgPersonnelMapper.xml b/safety-eval-infrastructure/src/main/resources/mapper/OrgPersonnelMapper.xml index 380ac1ce..4a66a0dd 100644 --- a/safety-eval-infrastructure/src/main/resources/mapper/OrgPersonnelMapper.xml +++ b/safety-eval-infrastructure/src/main/resources/mapper/OrgPersonnelMapper.xml @@ -41,6 +41,16 @@ `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`, `evaluator_flag`, `delete_enum`, `remarks`, `create_name`, `update_name`, `tenant_id`, `version`, `create_time`, `update_time`, `create_id`, `update_id`, `env` + + +