From 545b2d58397a87a65821277b4c7969c72c188b2e Mon Sep 17 00:00:00 2001 From: zhaokai Date: Tue, 23 Jun 2026 17:40:27 +0800 Subject: [PATCH] =?UTF-8?q?feat(job-handover):=20=E6=96=B0=E5=A2=9E?= =?UTF-8?q?=E4=B8=93=E9=A1=B9=E9=A2=86=E5=9F=9F=E5=92=8C=E7=A7=91=E6=8A=80?= =?UTF-8?q?=E5=85=B4=E5=AE=89=E5=BE=85=E4=BA=A4=E6=8E=A5=E4=BB=BB=E5=8A=A1?= =?UTF-8?q?=E5=A4=84=E7=90=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../info/command/HumanUserUpdateExe.java | 107 +++++++++++++++++- .../UserChangeRecordWorkChangeExe.java | 96 ++++++++++++++++ .../enums/UserJobHandoverWorkTypeEnum.java | 10 +- 3 files changed, 211 insertions(+), 2 deletions(-) diff --git a/web-app/src/main/java/com/zcloud/basic/info/command/HumanUserUpdateExe.java b/web-app/src/main/java/com/zcloud/basic/info/command/HumanUserUpdateExe.java index 9150b8d3..63122c22 100644 --- a/web-app/src/main/java/com/zcloud/basic/info/command/HumanUserUpdateExe.java +++ b/web-app/src/main/java/com/zcloud/basic/info/command/HumanUserUpdateExe.java @@ -33,6 +33,9 @@ import com.zcloud.basic.info.persistence.repository.UserCorpRecordRepository; import com.zcloud.basic.info.persistence.repository.UserJobHandoverRepository; import com.zcloud.basic.info.persistence.repository.UserRepository; import com.zcloud.gbscommon.utils.Tools; +import com.zcloud.gbscommon.zclouddomain.facade.ZcloudDomainFacade; +import com.zcloud.gbscommon.zclouddomain.request.DomainQry; +import com.zcloud.gbscommon.zclouddomain.response.DomainListByUserCO; import com.zcloud.gbscommon.zcloudeightwork.facade.ZcloudEightWorkFacade; import com.zcloud.gbscommon.zcloudeightwork.request.EightWorkQry; import com.zcloud.gbscommon.zcloudeightwork.response.EightWorkListByUserCO; @@ -48,6 +51,9 @@ import com.zcloud.gbscommon.zcloudrisk.response.ListManagerListByUserCO; import com.zcloud.gbscommon.zcloudqualifications.face.ZcloudProjectApprovalFacade; import com.zcloud.gbscommon.zcloudqualifications.request.ProjectApprovalQry; import com.zcloud.gbscommon.zcloudqualifications.response.ProjectListByUserCO; +import com.zcloud.gbscommon.zcloudtechnology.facade.ZcloudTechnologyFacade; +import com.zcloud.gbscommon.zcloudtechnology.request.TechnologyQry; +import com.zcloud.gbscommon.zcloudtechnology.response.TechnologyListByUserCO; import com.zcloud.gbscommon.zloudfirecheck.facade.ZcloudFireCheckFacade; import com.zcloud.gbscommon.zloudfirecheck.request.FireCheckQry; import com.zcloud.gbscommon.zloudfirecheck.response.FireCheckListByUserCO; @@ -101,6 +107,10 @@ public class HumanUserUpdateExe { private ZcloudProjectApprovalFacade zcloudProjectApprovalFacade; @DubboReference private ZcloudInspectionWorkFacade zcloudInspectionWorkFacade; + @DubboReference + private ZcloudDomainFacade zcloudDomainFacade; + @DubboReference + private ZcloudTechnologyFacade zcloudTechnologyFacade; /** * 人资用户变更总入口。 @@ -817,8 +827,13 @@ public class HumanUserUpdateExe { () -> queryProjectApprovalJobs(userId, corpinfoId, userChangeRecordId)); CompletableFuture> inspectionWorkFuture = CompletableFuture.supplyAsync( () -> queryInspectionWorkJobs(userId, corpinfoId, userChangeRecordId)); + CompletableFuture> domainFuture = CompletableFuture.supplyAsync( + () -> queryDomainJobs(userId, corpinfoId, userChangeRecordId)); + CompletableFuture> technologyFuture = CompletableFuture.supplyAsync( + () -> queryTechnologyJobs(userId, corpinfoId, userChangeRecordId)); - CompletableFuture.allOf(hiddenFuture, riskFuture, eightWorkFuture,fireCheckFuture, projectApprovalFuture, inspectionWorkFuture).join(); + CompletableFuture.allOf(hiddenFuture, riskFuture, eightWorkFuture, fireCheckFuture, + projectApprovalFuture, inspectionWorkFuture, domainFuture, technologyFuture).join(); List allJob = new ArrayList<>(); allJob.addAll(hiddenFuture.join()); allJob.addAll(riskFuture.join()); @@ -826,6 +841,8 @@ public class HumanUserUpdateExe { allJob.addAll(fireCheckFuture.join()); allJob.addAll(projectApprovalFuture.join()); allJob.addAll(inspectionWorkFuture.join()); + allJob.addAll(domainFuture.join()); + allJob.addAll(technologyFuture.join()); log.info("离职待交接任务汇总完成,用户id:{}, 部门id:{}, 企业id:{}, 总数量:{}", userId, departmentId, corpinfoId, allJob.size()); return allJob; @@ -960,6 +977,94 @@ public class HumanUserUpdateExe { return new ArrayList<>(); } } + + /** + * 查询专项领域系统中的待交接任务。 + * 调用方式与其他三方系统保持一致,按用户和企业维度汇总待交接数据。 + * 三方接口异常时只记录日志,不影响离职主流程继续执行。 + */ + private List queryDomainJobs(Long userId, Long corpinfoId, String userChangeRecordId) { + DomainQry domainQry = new DomainQry(); + domainQry.setUserId(userId); + domainQry.setCorpinfoId(corpinfoId); + + log.info("查询未完成工作,开始异步查询专项领域待交接任务,用户id:{}, 企业id:{}", userId, corpinfoId); + try { + MultiResponse response = zcloudDomainFacade.listManagerByUserId(domainQry); + if (response == null || !response.isSuccess()) { + String errMessage = response == null ? "专项领域服务未返回结果" : response.getErrMessage(); + log.error("查询专项领域待交接任务失败,用户id:{}, 企业id:{}, 原因:{}", + userId, corpinfoId, errMessage); + return new ArrayList<>(); + } + + List domainList = response.getData(); + if (CollUtil.isEmpty(domainList)) { + log.info("专项领域待交接任务查询完成,未查询到数据,用户id:{}, 企业id:{}", userId, corpinfoId); + return new ArrayList<>(); + } + + List result = new ArrayList<>(); + domainList.forEach(info -> result.add(buildUserJobHandoverDO( + userId, + corpinfoId, + userChangeRecordId, + UserJobHandoverWorkTypeEnum.DOMAIN.getCode(), + info.getWorkId(), + info.getWorkProject(), + info.getWorkContent()))); + log.info("专项领域待交接任务查询完成,用户id:{}, 企业id:{}, 数量:{}", + userId, corpinfoId, result.size()); + return result; + } catch (Exception e) { + log.error("查询专项领域待交接任务发生异常,用户id:{}, 企业id:{}", userId, corpinfoId, e); + return new ArrayList<>(); + } + } + + /** + * 查询科技兴安系统中的待交接任务。 + * 调用方式与其他三方系统保持一致,按用户和企业维度汇总待交接数据。 + * 三方接口异常时只记录日志,不影响离职主流程继续执行。 + */ + private List queryTechnologyJobs(Long userId, Long corpinfoId, String userChangeRecordId) { + TechnologyQry technologyQry = new TechnologyQry(); + technologyQry.setUserId(userId); + technologyQry.setCorpinfoId(corpinfoId); + + log.info("查询未完成工作,开始异步查询科技兴安待交接任务,用户id:{}, 企业id:{}", userId, corpinfoId); + try { + MultiResponse response = zcloudTechnologyFacade.listManagerByUserId(technologyQry); + if (response == null || !response.isSuccess()) { + String errMessage = response == null ? "科技兴安服务未返回结果" : response.getErrMessage(); + log.error("查询科技兴安待交接任务失败,用户id:{}, 企业id:{}, 原因:{}", + userId, corpinfoId, errMessage); + return new ArrayList<>(); + } + + List technologyList = response.getData(); + if (CollUtil.isEmpty(technologyList)) { + log.info("科技兴安待交接任务查询完成,未查询到数据,用户id:{}, 企业id:{}", userId, corpinfoId); + return new ArrayList<>(); + } + + List result = new ArrayList<>(); + technologyList.forEach(info -> result.add(buildUserJobHandoverDO( + userId, + corpinfoId, + userChangeRecordId, + UserJobHandoverWorkTypeEnum.TECHNOLOGY.getCode(), + info.getWorkId(), + info.getWorkProject(), + info.getWorkContent()))); + log.info("科技兴安待交接任务查询完成,用户id:{}, 企业id:{}, 数量:{}", + userId, corpinfoId, result.size()); + return result; + } catch (Exception e) { + log.error("查询科技兴安待交接任务发生异常,用户id:{}, 企业id:{}", userId, corpinfoId, e); + return new ArrayList<>(); + } + } private List queryHiddenJobs(Long userId, Long departmentId, Long corpinfoId, String userChangeRecordId) { HiddenStatisticsListQry hiddenStatisticsListQry = new HiddenStatisticsListQry(); hiddenStatisticsListQry.setUserId(userId); diff --git a/web-app/src/main/java/com/zcloud/basic/info/command/UserChangeRecordWorkChangeExe.java b/web-app/src/main/java/com/zcloud/basic/info/command/UserChangeRecordWorkChangeExe.java index 7200a81b..c9fe1daf 100644 --- a/web-app/src/main/java/com/zcloud/basic/info/command/UserChangeRecordWorkChangeExe.java +++ b/web-app/src/main/java/com/zcloud/basic/info/command/UserChangeRecordWorkChangeExe.java @@ -26,6 +26,8 @@ import com.zcloud.basic.info.persistence.repository.UserChangeRecordRepository; import com.zcloud.basic.info.persistence.repository.UserCorpRecordRepository; import com.zcloud.basic.info.persistence.repository.UserJobHandoverRepository; import com.zcloud.basic.info.persistence.repository.UserRepository; +import com.zcloud.gbscommon.zclouddomain.facade.ZcloudDomainFacade; +import com.zcloud.gbscommon.zclouddomain.request.DomainWorkChangeCmd; import com.zcloud.gbscommon.zcloudeightwork.facade.ZcloudEightWorkFacade; import com.zcloud.gbscommon.zcloudeightwork.request.EightWorkChangeCmd; import com.zcloud.gbscommon.zcloudhidden.face.ZcloudHiddenFacade; @@ -35,6 +37,8 @@ import com.zcloud.gbscommon.zcloudqualifications.face.ZcloudProjectApprovalFacad import com.zcloud.gbscommon.zcloudqualifications.response.ProjectWorkChangeCmd; import com.zcloud.gbscommon.zcloudrisk.facade.ZcloudRiskFacade; import com.zcloud.gbscommon.zcloudrisk.request.ListManagerWorkChangeCmd; +import com.zcloud.gbscommon.zcloudtechnology.facade.ZcloudTechnologyFacade; +import com.zcloud.gbscommon.zcloudtechnology.request.TechnologyWorkChangeCmd; import com.zcloud.gbscommon.zloudfirecheck.facade.ZcloudFireCheckFacade; import com.zcloud.gbscommon.zloudfirecheck.response.FireCheckWorkChangeCmd; import lombok.AllArgsConstructor; @@ -87,6 +91,12 @@ public class UserChangeRecordWorkChangeExe { @DubboReference private ZcloudInspectionWorkFacade zcloudInspectionWorkFacade; + @DubboReference + private ZcloudDomainFacade zcloudDomainFacade; + + @DubboReference + private ZcloudTechnologyFacade zcloudTechnologyFacade; + /** * 工作交接处理入口。 * 先根据工作类型调用对应三方系统,再关闭当前交接记录; @@ -155,6 +165,12 @@ public class UserChangeRecordWorkChangeExe { case INSPECTION_WORK: processInspectionWorkInfoHandover(handoverDO, workChangeUpdateCmd); return; + case DOMAIN: + processDomainInfoHandover(handoverDO, workChangeUpdateCmd); + return; + case TECHNOLOGY: + processTechnologyInfoHandover(handoverDO, workChangeUpdateCmd); + return; default: log.warn("工作类型暂未接入交接微服务,交接记录id:{}, 工作类型:{}", handoverDO.getId(), handoverDO.getWorkType()); @@ -347,6 +363,86 @@ public class UserChangeRecordWorkChangeExe { handoverDO.getId(), handoverDO.getForeignKey(), e); } } + + /** + * 处理专项领域交接。 + * 专项领域在同组内存在重复人员时,三方会返回失败提示。 + * 该类型失败后必须阻止当前交接继续关闭,保留现场等待重新处理。 + */ + private void processDomainInfoHandover(UserJobHandoverDO handoverDO, WorkChangeUpdateCmd workChangeUpdateCmd) { + DomainWorkChangeCmd domainWorkChangeCmd = new DomainWorkChangeCmd(); + domainWorkChangeCmd.setWorkId(handoverDO.getForeignKey()); + domainWorkChangeCmd.setOldUserId(handoverDO.getUserId()); + domainWorkChangeCmd.setUserId(workChangeUpdateCmd.getHandoverUserId()); + domainWorkChangeCmd.setUserName(workChangeUpdateCmd.getHandoverUserName()); + domainWorkChangeCmd.setDeptId(workChangeUpdateCmd.getHandoverDepartmentId()); + domainWorkChangeCmd.setDeptName(workChangeUpdateCmd.getHandoverDepartmentName()); + domainWorkChangeCmd.setCorpId(workChangeUpdateCmd.getHandoverCompanyId()); + domainWorkChangeCmd.setCorpName(workChangeUpdateCmd.getHandoverCompanyName()); + + log.info("开始处理专项领域交接,交接记录id:{}, workId:{}, 原责任人:{}, 新责任人:{}", + handoverDO.getId(), + handoverDO.getForeignKey(), + handoverDO.getUserId(), + workChangeUpdateCmd.getHandoverUserId()); + try { + SingleResponse response = zcloudDomainFacade.updateRiskWorkChange(domainWorkChangeCmd); + if (response == null || !response.isSuccess()) { + String errMessage = response == null ? "专项领域服务未返回结果" : response.getErrMessage(); + log.error("专项领域交接失败,交接记录id:{}, workId:{}, 原因:{}", + handoverDO.getId(), handoverDO.getForeignKey(), errMessage); + throw new BizException(StringUtils.hasText(errMessage) ? errMessage : "专项领域交接失败"); + } + log.info("专项领域交接完成,交接记录id:{}, workId:{}, 新责任人:{}", + handoverDO.getId(), handoverDO.getForeignKey(), workChangeUpdateCmd.getHandoverUserId()); + } catch (BizException e) { + throw e; + } catch (Exception e) { + log.error("专项领域交接发生异常,交接记录id:{}, workId:{}", + handoverDO.getId(), handoverDO.getForeignKey(), e); + throw new BizException("专项领域交接失败,请稍后重试"); + } + } + + /** + * 处理科技兴安交接。 + * 科技兴安在同组内存在重复人员时,三方会返回失败提示。 + * 该类型失败后必须阻止当前交接继续关闭,保留现场等待重新处理。 + */ + private void processTechnologyInfoHandover(UserJobHandoverDO handoverDO, WorkChangeUpdateCmd workChangeUpdateCmd) { + TechnologyWorkChangeCmd technologyWorkChangeCmd = new TechnologyWorkChangeCmd(); + technologyWorkChangeCmd.setWorkId(handoverDO.getForeignKey()); + technologyWorkChangeCmd.setOldUserId(handoverDO.getUserId()); + technologyWorkChangeCmd.setUserId(workChangeUpdateCmd.getHandoverUserId()); + technologyWorkChangeCmd.setUserName(workChangeUpdateCmd.getHandoverUserName()); + technologyWorkChangeCmd.setDeptId(workChangeUpdateCmd.getHandoverDepartmentId()); + technologyWorkChangeCmd.setDeptName(workChangeUpdateCmd.getHandoverDepartmentName()); + technologyWorkChangeCmd.setCorpId(workChangeUpdateCmd.getHandoverCompanyId()); + technologyWorkChangeCmd.setCorpName(workChangeUpdateCmd.getHandoverCompanyName()); + + log.info("开始处理科技兴安交接,交接记录id:{}, workId:{}, 原责任人:{}, 新责任人:{}", + handoverDO.getId(), + handoverDO.getForeignKey(), + handoverDO.getUserId(), + workChangeUpdateCmd.getHandoverUserId()); + try { + SingleResponse response = zcloudTechnologyFacade.updateRiskWorkChange(technologyWorkChangeCmd); + if (response == null || !response.isSuccess()) { + String errMessage = response == null ? "科技兴安服务未返回结果" : response.getErrMessage(); + log.error("科技兴安交接失败,交接记录id:{}, workId:{}, 原因:{}", + handoverDO.getId(), handoverDO.getForeignKey(), errMessage); + throw new BizException(StringUtils.hasText(errMessage) ? errMessage : "科技兴安交接失败"); + } + log.info("科技兴安交接完成,交接记录id:{}, workId:{}, 新责任人:{}", + handoverDO.getId(), handoverDO.getForeignKey(), workChangeUpdateCmd.getHandoverUserId()); + } catch (BizException e) { + throw e; + } catch (Exception e) { + log.error("科技兴安交接发生异常,交接记录id:{}, workId:{}", + handoverDO.getId(), handoverDO.getForeignKey(), e); + throw new BizException("科技兴安交接失败,请稍后重试"); + } + } private void processRiskInfoHandover(UserJobHandoverDO handoverDO, WorkChangeUpdateCmd workChangeUpdateCmd) { ListManagerWorkChangeCmd listManagerWorkChangeCmd = new ListManagerWorkChangeCmd(); listManagerWorkChangeCmd.setListManagerId(handoverDO.getForeignKey()); diff --git a/web-domain/src/main/java/com/zcloud/basic/info/domain/enums/UserJobHandoverWorkTypeEnum.java b/web-domain/src/main/java/com/zcloud/basic/info/domain/enums/UserJobHandoverWorkTypeEnum.java index c0c1194f..fb11662c 100644 --- a/web-domain/src/main/java/com/zcloud/basic/info/domain/enums/UserJobHandoverWorkTypeEnum.java +++ b/web-domain/src/main/java/com/zcloud/basic/info/domain/enums/UserJobHandoverWorkTypeEnum.java @@ -30,7 +30,15 @@ public enum UserJobHandoverWorkTypeEnum { /** * 安全环保检查。 */ - INSPECTION_WORK(6, "安全环保检查"); + INSPECTION_WORK(6, "安全环保检查"), + /** + * 专项领域。 + */ + DOMAIN(7, "专项领域"), + /** + * 科技兴安。 + */ + TECHNOLOGY(8, "科技兴安"); private final Integer code; private final String name;