dev
luotaiqian 2026-08-04 14:37:43 +08:00
parent a0d18e1bce
commit 3ead1e18b5
6 changed files with 121 additions and 6 deletions

View File

@ -31,20 +31,22 @@ import org.qinan.safetyeval.domain.query.QualFilingQuery;
import org.qinan.safetyeval.domain.support.QualFilingExpertCheckSupport;
import org.qinan.safetyeval.infrastructure.adapter.auth.AuthUserContextAdapter;
import org.qinan.safetyeval.infrastructure.mapper.QualFilingMapper;
import org.qinan.safetyeval.infrastructure.mapper.QualFilingPersonnelCertMapper;
import org.qinan.safetyeval.infrastructure.mapper.QualFilingPersonnelMapper;
import org.qinan.safetyeval.infrastructure.support.OrgContextResolver;
import org.qinan.safetyeval.infrastructure.utils.CommonUtil;
import org.qinan.safetyeval.infrastructure.utils.ComplianceCheckUtil;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.CollectionUtils;
import org.springframework.util.StringUtils;
import javax.annotation.Resource;
import java.time.LocalDateTime;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.*;
import java.util.stream.Collectors;
/**
@ -116,6 +118,11 @@ public class QualFilingOrchestrator {
@Autowired
private QualFilingMapper qualFilingMapper;
@Autowired
private QualFilingPersonnelMapper qualFilingPersonnelMapper;
@Resource
private QualFilingPersonnelCertMapper qualFilingPersonnelCertMapper;
@Value("${safety-eval.public-api.tenant-id:0}")
private Long fallbackTenantId;
@ -225,13 +232,49 @@ public class QualFilingOrchestrator {
if (commitment != null) {
detail.setCommitment(toCommitmentCO(commitment));
}
detail.setPersonnelList(qualFilingPersonnelGateway.listByFilingId(id).stream()
.map(this::toPersonnelCO).collect(Collectors.toList()));
detail.setPersonnelList(qualFilingPersonnelMapper.getFillingPersonInfo(id));
setProfessionalCapabilityCodeList(detail.getPersonnelList());
detail.setEquipmentList(qualFilingEquipmentGateway.listByFilingId(id).stream()
.map(this::toEquipmentCO).collect(Collectors.toList()));
return detail;
}
/**
* setProfessionalCapabilityCodeList
*
* @param personnelList personnelList
*/
private void setProfessionalCapabilityCodeList(List<QualFilingPersonnelInfoCO> personnelList) {
if (CollectionUtils.isEmpty(personnelList)) {
return;
}
List<Long> personnelIdList = personnelList.stream()
.map(QualFilingPersonnelInfoCO::getSourcePersonnelId)
.filter(Objects::nonNull)
.collect(Collectors.toList());
if (CollectionUtils.isEmpty(personnelIdList)) {
return;
}
List<PersonnelProfessionalCapabilityCO> capabilityList =
qualFilingPersonnelCertMapper.getProfessionalCapabilityCodeList(personnelIdList);
Map<Long, List<String>> 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<String> codes = capabilityMap.get(personnel.getSourcePersonnelId());
if (codes != null) {
personnel.setProfessionalCapabilityCodeList(codes);
}
}
}
public PageResult<QualFilingCO> page(QualFilingPageQuery query) {
QualFilingQuery domainQuery = new QualFilingQuery();
domainQuery.setPageNum(query.getCurrent());

View File

@ -0,0 +1,22 @@
package org.qinan.safetyeval.client.co;
import lombok.Data;
/**
*
*
* @author safety-eval
*/
@Data
public class PersonnelProfessionalCapabilityCO {
/**
* id
*/
private Long personnelId;
/**
* GROUP_CONCAT
*/
private String professionalCapabilityCodeList;
}

View File

@ -2,8 +2,21 @@ package org.qinan.safetyeval.infrastructure.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import org.qinan.safetyeval.client.co.PersonnelProfessionalCapabilityCO;
import org.qinan.safetyeval.infrastructure.dataobject.QualFilingPersonnelCertDO;
import java.util.List;
@Mapper
public interface QualFilingPersonnelCertMapper extends BaseMapper<QualFilingPersonnelCertDO> {
/**
* idGROUP_CONCAT
*
* @param personnelIds id
* @return
*/
List<PersonnelProfessionalCapabilityCO> getProfessionalCapabilityCodeList(
@Param("personnelIds") List<Long> personnelIds);
}

View File

@ -2,8 +2,20 @@ package org.qinan.safetyeval.infrastructure.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import org.qinan.safetyeval.client.co.QualFilingPersonnelInfoCO;
import org.qinan.safetyeval.infrastructure.dataobject.QualFilingPersonnelDO;
import java.util.List;
@Mapper
public interface QualFilingPersonnelMapper extends BaseMapper<QualFilingPersonnelDO> {
/**
* ID
*
* @param fillingId ID
* @return
*/
List<QualFilingPersonnelInfoCO> getFillingPersonInfo(@Param("fillingId") Long fillingId);
}

View File

@ -42,4 +42,17 @@
`id`, `filing_id`, `filing_personnel_id`, `cert_name`, `cert_type_code`, `cert_level`, `cert_category_code`, `cert_category_name`, `operation_category_code`, `operation_category_name`, `cert_no`, `issue_org`, `valid_start_date`, `valid_end_date`, `review_date`, `cert_attachment_url`, `source_cert_id`, `business_scope`, `professional_capability_code`, `industry_professional_standards_id`, `delete_enum`, `remarks`, `create_name`, `update_name`, `tenant_id`, `org_id`, `version`, `create_time`, `update_time`, `create_id`, `update_id`, `env`
</sql>
<!-- 根据人员id列表查询专业能力证书类型编码GROUP_CONCAT聚合 -->
<select id="getProfessionalCapabilityCodeList"
resultType="org.qinan.safetyeval.client.co.PersonnelProfessionalCapabilityCO">
SELECT personnel_id,
GROUP_CONCAT(cert_type_code) AS professionalCapabilityCodeList
FROM org_personnel_cert
WHERE personnel_id IN
<foreach collection="personnelIds" item="personnelId" open="(" separator="," close=")">
#{personnelId}
</foreach>
GROUP BY personnel_id
</select>
</mapper>

View File

@ -48,4 +48,16 @@
`id`, `filing_id`, `source_personnel_id`, `person_name`, `person_type_code`, `position_name`, `title_code_arr`, `gender_code`, `gender_name`, `birth_date`, `join_work_date`, `id_card_no`, `current_address`, `office_address`, `education_code`, `education_name`, `graduate_school`, `major`, `qual_scope`, `publications`, `professional_level_cert`, `register_engineer_flag`, `ability_declaration`, `work_experience`, `proof_material_url`, `delete_enum`, `remarks`, `create_name`, `update_name`, `tenant_id`, `org_id`, `version`, `create_time`, `update_time`, `create_id`, `update_id`, `env`
</sql>
<select id="getFillingPersonInfo" resultType="org.qinan.safetyeval.client.co.QualFilingPersonnelInfoCO">
SELECT fp.source_personnel_id, fp.id, p.user_name personName, po.position_name, p.post_id, p.gender_code, p.gender_name
, p.birth_date, p.register_engineer_flag, p.evaluator_cert_no
FROM org_personnel p
join qual_filing_personnel fp on p.id = fp.source_personnel_id
left join org_department d on p.dept_id = d.id and d.delete_enum = 'false'
left join org_position po on po.id = p.post_id and po.delete_enum = 'false'
WHERE fp.filing_id = #{fillingId}
and fp.delete_enum = 'false'
and p.delete_enum = 'false'
</select>
</mapper>