代码提交

dev-tmp1
zhanglei 2026-08-10 10:18:00 +08:00
parent f0baa891af
commit 6bdab4199e
7 changed files with 83 additions and 0 deletions

View File

@ -5,6 +5,7 @@ import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiParam; import io.swagger.annotations.ApiParam;
import org.qinan.safetyeval.client.api.OrgPersonnelApi; import org.qinan.safetyeval.client.api.OrgPersonnelApi;
import org.qinan.safetyeval.client.co.OrgPersonnelCO; 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.OrgPersonnelImportResultCO;
import org.qinan.safetyeval.client.co.QualFilingPersonnelInfoCO; import org.qinan.safetyeval.client.co.QualFilingPersonnelInfoCO;
import org.qinan.safetyeval.client.dto.*; import org.qinan.safetyeval.client.dto.*;
@ -95,4 +96,10 @@ public class OrgPersonnelController {
public SingleResponse<List<OrgPersonnelCO>> getOrgPersonnel() { public SingleResponse<List<OrgPersonnelCO>> getOrgPersonnel() {
return orgPersonnelApi.getOrgPersonnel(); return orgPersonnelApi.getOrgPersonnel();
} }
@ApiOperation("按部门批量统计人员数量")
@GetMapping("/deptPersonCount")
public SingleResponse<List<OrgPersonnelDeptCountCO>> deptPersonCount() {
return orgPersonnelApi.deptPersonCount();
}
} }

View File

@ -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.adapter.gbs.GbsUserFacadeClient;
import org.qinan.safetyeval.infrastructure.convertor.OrgPersonnelCertConvertor; import org.qinan.safetyeval.infrastructure.convertor.OrgPersonnelCertConvertor;
import org.qinan.safetyeval.infrastructure.dataobject.OrgPersonnelDO; 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.OrgPersonnelMapper;
import org.qinan.safetyeval.infrastructure.mapper.QualFilingPersonnelCertMapper; import org.qinan.safetyeval.infrastructure.mapper.QualFilingPersonnelCertMapper;
import org.qinan.safetyeval.infrastructure.support.UserOrgIdResolver; import org.qinan.safetyeval.infrastructure.support.UserOrgIdResolver;
@ -459,6 +460,22 @@ public class OrgPersonnelExecutor implements OrgPersonnelApi {
return SingleResponse.success(orgPersonnelCOS); return SingleResponse.success(orgPersonnelCOS);
} }
@Override
public SingleResponse<List<OrgPersonnelDeptCountCO>> deptPersonCount() {
Long orgId = ThreadLocalUserInfoAdapter.getOrgId();
List<OrgPersonnelDeptCountDO> rows = orgPersonnelMapper.countPersonGroupByDept(orgId);
if (CollectionUtils.isEmpty(rows)) {
return SingleResponse.success(Collections.emptyList());
}
List<OrgPersonnelDeptCountCO> 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 @Override
public SingleResponse<Void> professionalCapabilityProofMaterialUpdate(ProfessionalCapabilityProofMaterialUpdateCmd cmd) { public SingleResponse<Void> professionalCapabilityProofMaterialUpdate(ProfessionalCapabilityProofMaterialUpdateCmd cmd) {
orgPersonnelMapper.update(new LambdaUpdateWrapper<OrgPersonnelDO>() orgPersonnelMapper.update(new LambdaUpdateWrapper<OrgPersonnelDO>()

View File

@ -1,6 +1,7 @@
package org.qinan.safetyeval.client.api; package org.qinan.safetyeval.client.api;
import org.qinan.safetyeval.client.co.OrgPersonnelCO; 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.OrgPersonnelImportResultCO;
import org.qinan.safetyeval.client.co.QualFilingPersonnelInfoCO; import org.qinan.safetyeval.client.co.QualFilingPersonnelInfoCO;
import org.qinan.safetyeval.client.dto.*; import org.qinan.safetyeval.client.dto.*;
@ -51,6 +52,10 @@ public interface OrgPersonnelApi {
SingleResponse<List<OrgPersonnelCO>> getOrgPersonnel(); SingleResponse<List<OrgPersonnelCO>> getOrgPersonnel();
/**
*
*/
SingleResponse<List<OrgPersonnelDeptCountCO>> deptPersonCount();
SingleResponse<Void> professionalCapabilityProofMaterialUpdate(ProfessionalCapabilityProofMaterialUpdateCmd cmd); SingleResponse<Void> professionalCapabilityProofMaterialUpdate(ProfessionalCapabilityProofMaterialUpdateCmd cmd);
} }

View File

@ -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;
}

View File

@ -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;
}

View File

@ -9,6 +9,7 @@ import org.qinan.safetyeval.client.co.IndustryProfessionalPersonCo;
import org.qinan.safetyeval.client.co.QualFilingPersonnelInfoCO; import org.qinan.safetyeval.client.co.QualFilingPersonnelInfoCO;
import org.qinan.safetyeval.client.dto.OrgFilingPersonnelPageQuery; import org.qinan.safetyeval.client.dto.OrgFilingPersonnelPageQuery;
import org.qinan.safetyeval.infrastructure.dataobject.OrgPersonnelDO; import org.qinan.safetyeval.infrastructure.dataobject.OrgPersonnelDO;
import org.qinan.safetyeval.infrastructure.dataobject.OrgPersonnelDeptCountDO;
import org.qinan.safetyeval.infrastructure.persistence.domainobject.OrgPersonnelLeaderCountDO; import org.qinan.safetyeval.infrastructure.persistence.domainobject.OrgPersonnelLeaderCountDO;
import java.util.List; import java.util.List;
@ -16,6 +17,14 @@ import java.util.List;
@Mapper @Mapper
public interface OrgPersonnelMapper extends BaseMapper<OrgPersonnelDO> { public interface OrgPersonnelMapper extends BaseMapper<OrgPersonnelDO> {
/**
*
*
* @param orgId ID
* @return
*/
List<OrgPersonnelDeptCountDO> countPersonGroupByDept(@Param("orgId") Long orgId);
/** /**
* id qual_scope * id qual_scope
* *

View File

@ -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` `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`
</sql> </sql>
<!-- 按部门批量统计未删除人员数量(直接归属) -->
<select id="countPersonGroupByDept" resultType="org.qinan.safetyeval.infrastructure.dataobject.OrgPersonnelDeptCountDO">
SELECT dept_id AS deptId, COUNT(*) AS personCount
FROM org_personnel
WHERE delete_enum = 'false'
AND org_id = #{orgId}
AND dept_id IS NOT NULL
GROUP BY dept_id
</select>
<!-- 根据人员id列表统计技术负责人和过程控制负责人数量按业务范围分组 --> <!-- 根据人员id列表统计技术负责人和过程控制负责人数量按业务范围分组 -->
<select id="countLeaderFlags" resultType="org.qinan.safetyeval.infrastructure.persistence.domainobject.OrgPersonnelLeaderCountDO"> <select id="countLeaderFlags" resultType="org.qinan.safetyeval.infrastructure.persistence.domainobject.OrgPersonnelLeaderCountDO">
SELECT SELECT