Merge remote-tracking branch 'origin/dev-tmp1' into dev-tmp1

dev-tmp1
huwei 2026-08-08 14:18:28 +08:00
commit c0183c42b2
28 changed files with 322 additions and 28 deletions

View File

@ -0,0 +1,5 @@
-- org_personnel 表新增「能力认定」字段JSON array 字符串)
ALTER TABLE `org_personnel`
ADD COLUMN `capability_assessment` varchar(512) DEFAULT NULL COMMENT '能力认定JSON array 字符串' AFTER `proof_material_url`;
ALTER TABLE org_personnel ADD COLUMN evaluator_flag tinyint DEFAULT NULL COMMENT '是否评价师 1是 0否';

View File

@ -0,0 +1,3 @@
-- org_personnel 表新增「人员岗位类型」字段
ALTER TABLE `org_personnel`
ADD COLUMN `personnel_position_type` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '人员岗位类型: TECHNICAL_LEADER=>技术负责人; PROCESS_CONTROL_LEADER=>过程控制负责人' AFTER `process_control_leader_flag`;

View File

@ -1,5 +0,0 @@
-- eval_process_control 新增机构负责人签字相关字段
ALTER TABLE `eval_process_control`
ADD COLUMN `org_head_signature_task_status` varchar(64) DEFAULT NULL COMMENT '机构负责人签字任务状态 dispatched 下发non_dispatched 未下发 , completed 已完成',
ADD COLUMN `org_head_personnel_id` bigint DEFAULT NULL COMMENT '机构负责人',
ADD COLUMN `org_head_signature_url` varchar(512) DEFAULT NULL COMMENT '机构负责人签字';

View File

@ -12,7 +12,7 @@ import org.qinan.safetyeval.domain.constant.ChongqingDistrictEnum;
import org.qinan.safetyeval.domain.constant.CustomerStatusEnum;
import org.qinan.safetyeval.domain.constant.EnterpriseScaleEnum;
import org.qinan.safetyeval.domain.constant.EnterpriseStatusEnum;
import org.qinan.safetyeval.domain.constant.IndustryEnum;
import org.qinan.safetyeval.domain.constant.basic.IndustryEnum;
import org.qinan.safetyeval.domain.entity.EvalCustomerEntity;
import org.qinan.safetyeval.domain.query.EvalCustomerQuery;

View File

@ -15,7 +15,7 @@ import org.qinan.safetyeval.client.dto.institution.EvalProjectPageQuery;
import org.qinan.safetyeval.client.dto.institution.EvalProjectProgressPageQuery;
import org.qinan.safetyeval.domain.constant.ChongqingDistrictEnum;
import org.qinan.safetyeval.domain.constant.EvalTypeEnum;
import org.qinan.safetyeval.domain.constant.IndustryEnum;
import org.qinan.safetyeval.domain.constant.basic.IndustryEnum;
import org.qinan.safetyeval.domain.entity.EvalProjectEntity;
import org.qinan.safetyeval.domain.query.EvalProjectQuery;
import org.springframework.util.StringUtils;

View File

@ -23,6 +23,8 @@ public interface OrgPersonnelConvertor {
@Mapping(target = "changeCount", ignore = true)
@Mapping(target = "resignApplyId", ignore = true)
@Mapping(target = "resignAuditStatus", ignore = true)
@Mapping(target = "registeredSafetyEngineerCert", ignore = true)
@Mapping(target = "evaluatorCert", ignore = true)
OrgPersonnelCO toCO(OrgPersonnelEntity entity);
/**

View File

@ -13,11 +13,14 @@ import org.qinan.safetyeval.app.support.OrgPersonnelChangeRecorder;
import org.qinan.safetyeval.app.support.OrgPersonnelExcelImporter;
import org.qinan.safetyeval.app.support.OrgPersonnelViewEnricher;
import org.qinan.safetyeval.client.api.OrgPersonnelApi;
import org.qinan.safetyeval.client.co.OrgPersonnelCertCO;
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.constant.CertTypeCodeEnum;
import org.qinan.safetyeval.domain.entity.OrgPersonnelCertEntity;
import org.qinan.safetyeval.domain.entity.OrgPersonnelEntity;
import org.qinan.safetyeval.domain.entity.OrgPositionEntity;
import org.qinan.safetyeval.domain.exception.BizException;
@ -26,11 +29,13 @@ import org.qinan.safetyeval.domain.gateway.FaceCompareGateway;
import org.qinan.safetyeval.domain.gateway.OrgResignApplyGateway;
import org.qinan.safetyeval.domain.query.OrgPersonnelQuery;
import org.qinan.safetyeval.domain.query.PageResult;
import org.qinan.safetyeval.domain.service.OrgPersonnelCertDomainService;
import org.qinan.safetyeval.domain.service.OrgPersonnelDomainService;
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.convertor.OrgPersonnelCertConvertor;
import org.qinan.safetyeval.infrastructure.dataobject.OrgPersonnelDO;
import org.qinan.safetyeval.infrastructure.mapper.OrgPersonnelMapper;
import org.qinan.safetyeval.infrastructure.mapper.QualFilingPersonnelCertMapper;
@ -73,6 +78,13 @@ public class OrgPersonnelExecutor implements OrgPersonnelApi {
@Autowired
private OrgPersonnelConvertor orgPersonnelConvertor;
@Lazy
@Autowired(required = false)
private OrgPersonnelCertDomainService orgPersonnelCertDomainService;
@Autowired
private OrgPersonnelCertConvertor orgPersonnelCertConvertor;
@Autowired(required = false)
private OrgResignApplyGateway orgResignApplyGateway;
@ -120,6 +132,9 @@ public class OrgPersonnelExecutor implements OrgPersonnelApi {
}
OrgPersonnelCO co = orgPersonnelConvertor.toCO(result);
enrich(co);
// 保存证书信息
savePersonnelCerts(cmd, result.getId());
fillCerts(co, result.getId());
UserAddCmd userAddCmd = new UserAddCmd();
userAddCmd.setId(result.getId());
userAddCmd.setAccount(result.getAccount());
@ -148,6 +163,7 @@ public class OrgPersonnelExecutor implements OrgPersonnelApi {
OrgPersonnelEntity entity = orgPersonnelDomainService.get(id);
OrgPersonnelCO co = orgPersonnelConvertor.toCO(entity);
enrich(co);
fillCerts(co, id);
return SingleResponse.success(co);
}
@ -326,6 +342,48 @@ public class OrgPersonnelExecutor implements OrgPersonnelApi {
}
}
/**
*
*/
private void savePersonnelCerts(OrgPersonnelAddCmd cmd, Long personnelId) {
if (orgPersonnelCertDomainService == null) {
return;
}
if (cmd.getRegisteredSafetyEngineerCert() != null) {
OrgPersonnelCertEntity certEntity = orgPersonnelCertConvertor.addCmdToEntity(cmd.getRegisteredSafetyEngineerCert());
certEntity.setPersonnelId(personnelId);
certEntity.setCertTypeCode(CertTypeCodeEnum.REGISTERED_SAFETY_ENGINEER.getCode());
orgPersonnelCertDomainService.add(certEntity);
}
if (cmd.getEvaluatorCert() != null) {
OrgPersonnelCertEntity certEntity = orgPersonnelCertConvertor.addCmdToEntity(cmd.getEvaluatorCert());
certEntity.setPersonnelId(personnelId);
certEntity.setCertTypeCode(CertTypeCodeEnum.EVALUATOR.getCode());
orgPersonnelCertDomainService.add(certEntity);
}
}
/**
* IDCO
*/
private void fillCerts(OrgPersonnelCO co, Long personnelId) {
if (orgPersonnelCertDomainService == null || personnelId == null) {
return;
}
List<OrgPersonnelCertEntity> certs = orgPersonnelCertDomainService.listByPersonnelId(personnelId);
if (certs == null) {
return;
}
for (OrgPersonnelCertEntity cert : certs) {
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<OrgPersonnelCO> updateOriginFace(OrgPersonnelUpdateOriginFaceCmd cmd) {
OrgPersonnelEntity existing = orgPersonnelDomainService.get(cmd.getId());

View File

@ -13,6 +13,7 @@ import org.qinan.safetyeval.client.dto.institution.EvalCustomerModifyCmd;
import org.qinan.safetyeval.client.dto.institution.EvalCustomerPageQuery;
import org.qinan.safetyeval.client.dto.institution.EvalProjectPageQuery;
import org.qinan.safetyeval.domain.constant.*;
import org.qinan.safetyeval.domain.constant.basic.IndustryEnum;
import org.qinan.safetyeval.domain.entity.EvalCustomerEntity;
import org.qinan.safetyeval.domain.exception.ErrorCode;
import org.qinan.safetyeval.domain.query.EvalCustomerQuery;

View File

@ -11,7 +11,7 @@ import org.qinan.safetyeval.client.co.institution.dashboard.InstitutionDashboard
import org.qinan.safetyeval.client.co.institution.dashboard.InstitutionDashboardProjectNodeStatsCO;
import org.qinan.safetyeval.client.dto.SingleResponse;
import org.qinan.safetyeval.domain.constant.EvalTypeEnum;
import org.qinan.safetyeval.domain.constant.IndustryEnum;
import org.qinan.safetyeval.domain.constant.basic.IndustryEnum;
import org.qinan.safetyeval.domain.entity.EvalCustomerEntity;
import org.qinan.safetyeval.domain.entity.EvalProjectEntity;
import org.qinan.safetyeval.domain.gateway.EvalCustomerGateway;

View File

@ -14,7 +14,7 @@ import org.qinan.safetyeval.client.co.regulator.cockpit.CockpitRegionDistributio
import org.qinan.safetyeval.client.co.regulator.cockpit.CockpitReviewSummaryCO;
import org.qinan.safetyeval.client.dto.SingleResponse;
import org.qinan.safetyeval.domain.constant.EvalTypeEnum;
import org.qinan.safetyeval.domain.constant.IndustryEnum;
import org.qinan.safetyeval.domain.constant.basic.IndustryEnum;
import org.qinan.safetyeval.domain.constant.QualFilingStatusEnum;
import org.qinan.safetyeval.domain.entity.EvalProjectEntity;
import org.qinan.safetyeval.domain.entity.InspNoticeEntity;

View File

@ -17,8 +17,6 @@ import org.qinan.safetyeval.client.dto.SingleResponse;
import org.qinan.safetyeval.client.dto.regulator.RegulatorEvalProjectMonitorPageQuery;
import org.qinan.safetyeval.client.dto.regulator.RegulatorEvalProjectMonitorRealtimePageQuery;
import org.qinan.safetyeval.client.dto.regulator.RegulatorEvalProjectSurveyPageQuery;
import org.qinan.safetyeval.domain.constant.EvalTypeEnum;
import org.qinan.safetyeval.domain.constant.IndustryEnum;
import org.qinan.safetyeval.domain.constant.ProjectProcessWaringStatusEnum;
import org.qinan.safetyeval.domain.entity.EvalProjectEntity;
import org.qinan.safetyeval.domain.exception.BizException;

View File

@ -8,8 +8,8 @@ import org.qinan.safetyeval.domain.major.gateway.BasicDisciplineMajorGateway;
import org.qinan.safetyeval.domain.major.model.BasicDisciplineMajorE;
import org.qinan.safetyeval.domain.query.OrgPersonnelCertQuery;
import org.qinan.safetyeval.domain.query.PageResult;
import org.qinan.safetyeval.domain.constant.IndustryEnum;
import org.qinan.safetyeval.domain.constant.ProfessionalCapabilityEnum;
import org.qinan.safetyeval.domain.constant.basic.IndustryEnum;
import org.qinan.safetyeval.domain.constant.basic.ProfessionalCapabilityEnum;
import org.qinan.safetyeval.domain.standards.gateway.IndustryProfessionalStandardsGateway;
import org.qinan.safetyeval.domain.standards.model.IndustryProfessionalStandardsE;
import org.springframework.beans.factory.annotation.Autowired;

View File

@ -5,6 +5,7 @@ import java.time.LocalDate;
import java.util.List;
import lombok.Data;
import org.qinan.safetyeval.domain.entity.CapabilityAssessmentDTO;
import org.qinan.safetyeval.domain.entity.TitleCodeCo;
/**
@ -102,6 +103,9 @@ public class OrgPersonnelCO {
@ApiModelProperty(value = "是否注册安全工程师(1是2否)")
private Integer registerEngineerFlag;
@ApiModelProperty(value = "是否评价师(1是0否)")
private Integer evaluatorFlag;
@ApiModelProperty(value = "发表著作")
private String publications;
@ -114,6 +118,9 @@ public class OrgPersonnelCO {
@ApiModelProperty(value = "证明材料附件地址")
private String proofMaterialUrl;
@ApiModelProperty(value = "能力认定")
private List<CapabilityAssessmentDTO> capabilityAssessment;
@ApiModelProperty(value = "原始人像地址(人脸比对基准图)")
private String originFaceUrl;
@ -123,6 +130,9 @@ public class OrgPersonnelCO {
@ApiModelProperty(value = "是否过程控制负责人")
private Boolean processControlLeaderFlag;
@ApiModelProperty(value = "人员岗位类型: TECHNICAL_LEADER=>技术负责人; PROCESS_CONTROL_LEADER=>过程控制负责人")
private String personnelPositionType;
@ApiModelProperty(value = "部门名称(列表展示,非持久化)")
private String deptName;
@ -144,6 +154,12 @@ public class OrgPersonnelCO {
@ApiModelProperty(value = "离职申请审核状态(列表展示,非持久化)")
private Integer resignAuditStatus;
@ApiModelProperty(value = "注安证书信息")
private OrgPersonnelCertCO registeredSafetyEngineerCert;
@ApiModelProperty(value = "评价师证书信息")
private OrgPersonnelCertCO evaluatorCert;
@ApiModelProperty(value = "租户ID")
private Long tenantId;
}

View File

@ -6,6 +6,8 @@ import java.util.List;
import javax.validation.constraints.Pattern;
import javax.validation.constraints.Size;
import lombok.Data;
import org.qinan.safetyeval.client.co.OrgPersonnelCertCO;
import org.qinan.safetyeval.domain.entity.CapabilityAssessmentDTO;
import org.qinan.safetyeval.domain.entity.TitleCodeCo;
/**
@ -111,6 +113,9 @@ public class OrgPersonnelAddCmd {
@ApiModelProperty(value = "是否注册安全工程师(1是2否)")
private Integer registerEngineerFlag;
@ApiModelProperty(value = "是否评价师(1是0否)")
private Integer evaluatorFlag;
@Size(max = 1000, message = "出版学术专著等长度不能超过1000个字符")
@ApiModelProperty(value = "出版学术专著专利获奖论文等")
private String publications;
@ -127,12 +132,24 @@ public class OrgPersonnelAddCmd {
@ApiModelProperty(value = "申报专业能力证明材料地址")
private String proofMaterialUrl;
@ApiModelProperty(value = "能力认定")
private List<CapabilityAssessmentDTO> capabilityAssessment;
@ApiModelProperty(value = "注安证书信息")
private OrgPersonnelCertAddCmd registeredSafetyEngineerCert;
@ApiModelProperty(value = "评价师证书信息")
private OrgPersonnelCertAddCmd evaluatorCert;
@ApiModelProperty(value = "是否技术负责人")
private Boolean technicalDirectorFlag;
@ApiModelProperty(value = "是否过程控制负责人")
private Boolean processControlLeaderFlag;
@ApiModelProperty(value = "人员岗位类型: TECHNICAL_LEADER=>技术负责人; PROCESS_CONTROL_LEADER=>过程控制负责人")
private String personnelPositionType;
@ApiModelProperty(value = "部门id")
private Long deptId;

View File

@ -6,6 +6,7 @@ import java.util.List;
import javax.validation.constraints.Pattern;
import javax.validation.constraints.Size;
import lombok.Data;
import org.qinan.safetyeval.domain.entity.CapabilityAssessmentDTO;
import org.qinan.safetyeval.domain.entity.TitleCodeCo;
/**
@ -114,6 +115,9 @@ public class OrgPersonnelModifyCmd {
@ApiModelProperty(value = "是否注册安全工程师(1是2否)")
private Integer registerEngineerFlag;
@ApiModelProperty(value = "是否评价师(1是0否)")
private Integer evaluatorFlag;
@Size(max = 1000, message = "出版学术专著等长度不能超过1000个字符")
@ApiModelProperty(value = "出版学术专著专利获奖论文等")
private String publications;
@ -130,12 +134,18 @@ public class OrgPersonnelModifyCmd {
@ApiModelProperty(value = "申报专业能力证明材料地址")
private String proofMaterialUrl;
@ApiModelProperty(value = "能力认定")
private List<CapabilityAssessmentDTO> capabilityAssessment;
@ApiModelProperty(value = "是否技术负责人")
private Boolean technicalDirectorFlag;
@ApiModelProperty(value = "是否过程控制负责人")
private Boolean processControlLeaderFlag;
@ApiModelProperty(value = "人员岗位类型: TECHNICAL_LEADER=>技术负责人; PROCESS_CONTROL_LEADER=>过程控制负责人")
private String personnelPositionType;
@ApiModelProperty(value = "部门id")
private Long deptId;

View File

@ -1,4 +1,4 @@
package org.qinan.safetyeval.domain.constant;
package org.qinan.safetyeval.domain.constant.basic;
/**
*

View File

@ -0,0 +1,22 @@
package org.qinan.safetyeval.domain.constant.basic;
import lombok.Getter;
import lombok.RequiredArgsConstructor;
/**
*
*/
@Getter
@RequiredArgsConstructor
public enum PersonnelPositionTypeEnum {
TECHNICAL_LEADER("TECHNICAL_LEADER", "技术负责人"),
PROCESS_CONTROL_LEADER("PROCESS_CONTROL_LEADER", "过程控制负责人"),
;
private final String value;
private final String label;
public static final String REMARKS = "人员岗位类型: TECHNICAL_LEADER=>技术负责人;" +
"PROCESS_CONTROL_LEADER=>过程控制负责人";
}

View File

@ -1,8 +1,13 @@
package org.qinan.safetyeval.domain.constant;
package org.qinan.safetyeval.domain.constant.basic;
import lombok.Getter;
import lombok.RequiredArgsConstructor;
/**
*
*/
@Getter
@RequiredArgsConstructor
public enum ProfessionalCapabilityEnum {
SAFETY("SAFETY", "安全"),
@ -39,18 +44,6 @@ public enum ProfessionalCapabilityEnum {
",ANTICORROSION:防腐,CHEMICAL_PROCESS:化工工艺,CHEMICAL_MECHANICAL:化工机械,AUTOMATION:自动化,EXPLOSIVES:火炸药" +
",EXPLOSION_TECHNOLOGY:爆炸技术,METALLURGY:冶金,NONFERROUS_METAL:有色金属,EQUIPMENT:设备,INSTRUMENT:仪表";
ProfessionalCapabilityEnum(String code, String value) {
this.code = code;
this.value = value;
}
public String getCode() {
return code;
}
public String getValue() {
return value;
}
public static ProfessionalCapabilityEnum ofCode(String code) {
if (code == null) {

View File

@ -0,0 +1,28 @@
package org.qinan.safetyeval.domain.constant.basic;
import com.baomidou.mybatisplus.annotation.EnumValue;
import com.fasterxml.jackson.annotation.JsonValue;
import lombok.Getter;
import lombok.RequiredArgsConstructor;
/**
*
*/
@Getter
@RequiredArgsConstructor
public enum ProfessionalCapabilitySourceEnum {
REGISTERED_SAFETY_ENGINEER("REGISTERED_SAFETY_ENGINEER", "注册安全工程师"),
EDUCATION("EDUCATION", "学历"),
PROFESSIONAL_TITLE("PROFESSIONAL_TITLE", "职称"),
ACADEMIC_ACHIEVEMENT("ACADEMIC_ACHIEVEMENT", "出版学术专著、专利、获奖、发表学术论文等"),
;
private final String value;
private final String label;
public static final String REMARKS = "专业能力来源: REGISTERED_SAFETY_ENGINEER=>注册安全工程师;" +
"EDUCATION=>学历;" +
"PROFESSIONAL_TITLE=>职称;" +
"ACADEMIC_ACHIEVEMENT=>出版学术专著、专利、获奖、发表学术论文等";
}

View File

@ -0,0 +1,32 @@
package org.qinan.safetyeval.domain.constant.basic;
import lombok.Getter;
import lombok.RequiredArgsConstructor;
/**
*
*/
@Getter
@RequiredArgsConstructor
public enum SafetyCategoryEnum {
COAL_MINE("COAL_MINE", "煤矿安全"),
METAL_NONMETAL_MINE("METAL_NONMETAL_MINE", "金属非金属矿山安全"),
CHEMICAL("CHEMICAL", "化工安全"),
METAL_SMELTING("METAL_SMELTING", "金属冶炼安全"),
CONSTRUCTION("CONSTRUCTION", "建筑施工安全"),
ROAD_TRANSPORT("ROAD_TRANSPORT", "道路运输安全"),
OTHER("OTHER", "其他安全"),
;
private final String value;
private final String label;
public static final String REMARKS = "注安专业类别: COAL_MINE=>煤矿安全 ;" +
"METAL_NONMETAL_MINE=>金属非金属矿山安全;" +
"CHEMICAL=>化工安全 ;" +
"METAL_SMELTING=>金属冶炼安全;" +
"CONSTRUCTION=>建筑施工安全 ;" +
"ROAD_TRANSPORT=>道路运输安全;" +
"OTHER=>其他安全" ;
}

View File

@ -0,0 +1,53 @@
package org.qinan.safetyeval.domain.constant.basic;
import lombok.Getter;
import lombok.RequiredArgsConstructor;
/**
*
*/
@Getter
@RequiredArgsConstructor
public enum TitleCapabilityEnum {
SAFETY_ENGINEERING("P01", "安全工程", "安全"),
MECHANICAL_ENGINEERING("P02", "机械工程", "机械、化工机械"),
CHEMICAL_MACHINERY("P03", "化工机械", "化工机械"),
CHEMICAL_ENGINEERING("P04", "化学工程", "化工工艺"),
AUTOMATION("P05", "自动化/测控技术", "仪表自动化"),
ELECTRICAL_ENGINEERING("P06", "电气工程", "电气"),
MINING_ENGINEERING("P07", "采矿工程", "采矿"),
VENTILATION_ENGINEERING("P08", "通风工程", "通风"),
GEOLOGICAL_ENGINEERING("P09", "地质工程", "地质"),
MINE_CONSTRUCTION_ENGINEERING("P10", "矿建工程", "矿建"),
PETROLEUM_ENGINEERING("P11", "石油工程", "油气开发"),
OIL_GAS_STORAGE_TRANSPORT("P12", "油气储运工程", "油气储运"),
CORROSION_PROTECTION("P13", "腐蚀与防护", "防腐"),
METALLURGY_ENGINEERING("P14", "冶金工程", "冶金"),
NONFERROUS_METALLURGY("P15", "有色金属冶金", "有色金属"),
EXPLOSIVES("P16", "火炸药/爆炸技术", "火炸药"),
CIVIL_ENGINEERING("P17", "土木工程", "水工结构"),
;
private final String value;
private final String label;
private final String capability;
public static final String REMARKS = "职称能力: P01=>安全工程(安全);" +
"P02=>机械工程(机械、化工机械);" +
"P03=>化工机械(化工机械);" +
"P04=>化学工程(化工工艺);" +
"P05=>自动化/测控技术(仪表自动化);" +
"P06=>电气工程(电气);" +
"P07=>采矿工程(采矿);" +
"P08=>通风工程(通风);" +
"P09=>地质工程(地质);" +
"P10=>矿建工程(矿建);" +
"P11=>石油工程(油气开发);" +
"P12=>油气储运工程(油气储运);" +
"P13=>腐蚀与防护(防腐);" +
"P14=>冶金工程(冶金);" +
"P15=>有色金属冶金(有色金属);" +
"P16=>火炸药/爆炸技术(火炸药);" +
"P17=>土木工程(水工结构)";
}

View File

@ -0,0 +1,29 @@
package org.qinan.safetyeval.domain.entity;
import lombok.Data;
import java.io.Serializable;
/**
* +
*
* @author safety-eval
*/
@Data
public class CapabilityAssessmentDTO implements Serializable {
private static final long serialVersionUID = 1L;
/**
*
* {@link org.qinan.safetyeval.domain.constant.basic.ProfessionalCapabilityEnum}
* {@link org.qinan.safetyeval.domain.constant.basic.ProfessionalCapabilitySourceEnum}
*/
private String professionalCapabilityCode;
/**
*
* {@link org.qinan.safetyeval.domain.constant.basic.ProfessionalCapabilitySourceEnum}
*/
private String professionalCapabilitySourceCode;
}

View File

@ -100,6 +100,9 @@ public class OrgPersonnelEntity {
/** 是否注册安全工程师(1是2否) */
private Integer registerEngineerFlag;
/** 是否评价师(1是0否) */
private Integer evaluatorFlag;
/** 出版学术专著专利获奖论文等 */
private String publications;
@ -112,6 +115,9 @@ public class OrgPersonnelEntity {
/** 申报专业能力证明材料(多个逗号分隔) */
private String proofMaterialUrl;
/** 能力认定(JSON数组字符串持久化DO层为String) */
private List<CapabilityAssessmentDTO> capabilityAssessment;
/** 原始人像地址(人脸比对基准图) */
private String originFaceUrl;
@ -121,6 +127,9 @@ public class OrgPersonnelEntity {
/** 是否过程控制负责人 */
private Boolean processControlLeaderFlag;
/** 人员岗位类型: TECHNICAL_LEADER=>技术负责人; PROCESS_CONTROL_LEADER=>过程控制负责人 */
private String personnelPositionType;
/** 租户ID */
private Long tenantId;

View File

@ -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.List;
import javax.annotation.Resource;
import org.springframework.stereotype.Service;
@ -29,6 +30,10 @@ public class OrgPersonnelCertDomainService {
return orgPersonnelCertGateway.get(id);
}
public List<OrgPersonnelCertEntity> listByPersonnelId(Long personnelId) {
return orgPersonnelCertGateway.listByPersonnelId(personnelId);
}
public OrgPersonnelCertEntity modify(OrgPersonnelCertEntity entity) {
OrgPersonnelCertEntity existing = orgPersonnelCertGateway.get(entity.getId());
if (existing == null) {

View File

@ -4,6 +4,7 @@ import cn.hutool.json.JSONUtil;
import org.mapstruct.Mapper;
import org.mapstruct.Mapping;
import org.mapstruct.Named;
import org.qinan.safetyeval.domain.entity.CapabilityAssessmentDTO;
import org.qinan.safetyeval.domain.entity.OrgPersonnelEntity;
import org.qinan.safetyeval.domain.entity.TitleCodeCo;
import org.qinan.safetyeval.infrastructure.dataobject.OrgPersonnelDO;
@ -25,6 +26,7 @@ public interface OrgPersonnelDoConvertor {
* @return
*/
@Mapping(target = "titleCodeArr", source = "titleCodeArr", qualifiedByName = "titleCodeListToJson")
@Mapping(target = "capabilityAssessment", source = "capabilityAssessment", qualifiedByName = "capabilityAssessmentListToJson")
OrgPersonnelDO convertEeToDo(OrgPersonnelEntity orgPersonnelEntity);
/**
@ -34,6 +36,7 @@ public interface OrgPersonnelDoConvertor {
* @return
*/
@Mapping(target = "titleCodeArr", source = "titleCodeArr", qualifiedByName = "jsonToTitleCodeList")
@Mapping(target = "capabilityAssessment", source = "capabilityAssessment", qualifiedByName = "jsonToCapabilityAssessmentList")
OrgPersonnelEntity converDoToEe(OrgPersonnelDO orgPersonnelDO);
/**
@ -53,4 +56,14 @@ public interface OrgPersonnelDoConvertor {
default String titleCodeListToJson(List<TitleCodeCo> list) {
return list == null || list.isEmpty() ? null : JSONUtil.toJsonStr(list);
}
@Named("jsonToCapabilityAssessmentList")
default List<CapabilityAssessmentDTO> jsonToCapabilityAssessmentList(String json) {
return json == null || json.isEmpty() ? null : JSONUtil.toList(json, CapabilityAssessmentDTO.class);
}
@Named("capabilityAssessmentListToJson")
default String capabilityAssessmentListToJson(List<CapabilityAssessmentDTO> list) {
return list == null || list.isEmpty() ? null : JSONUtil.toJsonStr(list);
}
}

View File

@ -47,16 +47,19 @@ public class OrgPersonnelDO {
private String educationLevelName;
private String titleCodeArr;
private Integer registerEngineerFlag;
private Integer evaluatorFlag;
private String publications;
private String abilityDeclaration;
private String workExperience;
private String proofMaterialUrl;
private String capabilityAssessment;
@TableField(value = "origin_face_url", updateStrategy = FieldStrategy.NOT_NULL)
private String originFaceUrl;
private Boolean technicalDirectorFlag;
private Boolean processControlLeaderFlag;
private String personnelPositionType;
// ---- GBS默认字段 ----
/**

View File

@ -11,6 +11,8 @@ import org.qinan.safetyeval.client.co.OrgPersonnelCertCapabilityComplianceCheckC
import org.qinan.safetyeval.client.co.QualFilingComplianceCheckResultCO;
import org.qinan.safetyeval.client.dto.*;
import org.qinan.safetyeval.domain.constant.*;
import org.qinan.safetyeval.domain.constant.basic.IndustryEnum;
import org.qinan.safetyeval.domain.constant.basic.ProfessionalCapabilityEnum;
import org.qinan.safetyeval.domain.entity.TitleCodeCo;
import org.qinan.safetyeval.domain.exception.BizException;
import org.qinan.safetyeval.infrastructure.dataobject.OrgPersonnelDO;

View File

@ -38,7 +38,7 @@
<!-- 通用查询结果列 -->
<sql id="Base_Column_List">
`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`, `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>
<!-- 根据人员id列表统计技术负责人和过程控制负责人数量按业务范围分组 -->