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 18419d08..4c26b878 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 @@ -193,19 +193,12 @@ public class HumanUserUpdateExe { * @return 新企业中的 GBS 用户 id;如果原企业仍有待交接任务,则返回原用户 id */ private Long executeChangeCorp(UserDO oldUserDO, UserUpdateCmd userUpdateCmd) { - if (UserEmploymentFlagEnum.RESIGNATION.getCode().equals(oldUserDO.getEmploymentFlag())) { - return addHumanUser(userUpdateCmd); - } - UserE oldUserE = buildUserE(oldUserDO); - oldUserE.setEmploymentFlag(UserEmploymentFlagEnum.INFO_CHANGE.getCode()); - oldUserE.setRzFlag(CommonFlagEnum.YES.getCode()); - markCurrentCorpRecordPending(oldUserDO); UserChangeRecordE userChangeRecordE = createCrossCorpChangeRecord(oldUserDO, userUpdateCmd); userChangeRecordGateway.add(userChangeRecordE); - log.info("开始汇总跨企业变更待交接任务,用户id:{}, 原企业id:{}, 新企业id:{}, 变更记录:{}", + log.info("开始汇总跨企业变更待交接任务,用户id:{}, 原企业id:{}, 目标企业id:{}, 变更记录id:{}", oldUserDO.getId(), oldUserDO.getCorpinfoId(), userUpdateCmd.getCorpinfoId(), userChangeRecordE.getUserChangeRecordId()); List allJob = getUserJob( oldUserDO.getId(), @@ -213,24 +206,14 @@ public class HumanUserUpdateExe { oldUserDO.getCorpinfoId(), userChangeRecordE.getUserChangeRecordId()); if (CollUtil.isNotEmpty(allJob)) { - log.info("用户{}跨企业调整存在{}条待交接任务,先挂起交接,待交接完成后再进入新企业", + log.info("用户{}跨企业变更存在{}条待交接任务,已保存交接数据,等待人工审批后继续处理", oldUserDO.getId(), allJob.size()); userJobHandoverRepository.saveBatch(allJob); - userGateway.update(oldUserE); - return oldUserDO.getId(); } - log.info("用户{}跨企业调整不存在待交接任务,直接完成原企业离职并在新企业入职", oldUserDO.getId()); -// oldUserE.setEmploymentFlag(UserEmploymentFlagEnum.RESIGNATION.getCode()); -// userGateway.update(oldUserE); - userRepository.updateEmploymentFlagAndDeleteEnum( - oldUserE.getId(), - UserEmploymentFlagEnum.RESIGNATION.getCode(), - "TRUE"); - completeResignation(oldUserDO, userChangeRecordE); - return createEntryUserByChangeRecord(oldUserDO, userChangeRecordE, userUpdateCmd.getRoleId()); + log.info("用户{}跨企业变更已记录待审批变更单,本次不自动执行离职和入职", oldUserDO.getId()); + return oldUserDO.getId(); } - /** * 处理企业内部资料调整。 * 调整完成后,以数据库最新结果同步任职记录和用户变更记录,避免 after 字段仍然写成旧值。 @@ -239,21 +222,19 @@ public class HumanUserUpdateExe { * @param userUpdateCmd 修改命令 */ private void executeInsideCorpUpdate(UserDO oldUserDO, UserUpdateCmd userUpdateCmd) { -// userUpdateCmd.setEmploymentFlag(oldUserDO.getEmploymentFlag()); - UserUpdateCmd userUpdateCmdNew = new UserUpdateCmd(); - BeanUtils.copyProperties(oldUserDO, userUpdateCmdNew); - userUpdateCmdNew.setRzFlag(CommonFlagEnum.YES.getCode()); - userUpdateExe.execute(userUpdateCmdNew); + updateRzFlagOnly(oldUserDO, userUpdateCmd); - UserDO newUserDO = userRepository.getInfoById(oldUserDO.getId()); - if (newUserDO == null) { - throw new BizException("用户修改完成后未查询到最新数据"); - } + UserE oldUserE = buildUserE(oldUserDO); + UserE newUserE = buildUserE(userUpdateCmd, oldUserDO.getId()); + String corpinfoName = resolveChangedCorpinfoName(userUpdateCmd, oldUserDO); + String departmentName = resolveChangedDepartmentName(userUpdateCmd, oldUserDO); - createOrUpdateCurrentCorpRecord(buildUserE(newUserDO), resolveCorpinfoName(newUserDO), resolveDepartmentName(newUserDO)); - createUpdateChangeRecord(oldUserDO, newUserDO); + UserChangeRecordE userChangeRecordE = new UserChangeRecordE(); + userChangeRecordE.initUserUpdate(newUserE, oldUserE, corpinfoName, departmentName, + UserChangeRecordStatusEnum.PENDING.getCode()); + userChangeRecordGateway.add(userChangeRecordE); + log.info("用户{}企业内资料调整已记录待审批变更单,本次仅同步rz_flag", oldUserDO.getId()); } - /** * 处理人资离职。 * 先将用户状态置为信息变更中,再汇总离职前待交接任务。 @@ -264,12 +245,6 @@ public class HumanUserUpdateExe { * @return true 表示已直接完成离职;false 表示已生成交接任务,等待后续交接完成 */ private boolean executeHumanResignation(UserDO oldUserDO) { - UserE oldUserE = buildUserE(oldUserDO); - oldUserE.setEmploymentFlag(UserEmploymentFlagEnum.INFO_CHANGE.getCode()); - oldUserE.setRzFlag(CommonFlagEnum.YES.getCode()); - - markCurrentCorpRecordPending(oldUserDO); - UserChangeRecordE userChangeRecordE = new UserChangeRecordE(); userChangeRecordE.executeResignation(buildUserE(oldUserDO), UserEmploymentFlagEnum.RESIGNATION.getCode(), @@ -277,28 +252,34 @@ public class HumanUserUpdateExe { oldUserDO.getEmploymentFlag()); userChangeRecordGateway.add(userChangeRecordE); - log.info("开始汇总用户离职前待交接任务,用户id:{}, 部门id:{}, 企业id:{}, 变更记录:{}", + log.info("开始汇总用户离职前待交接任务,用户id:{}, 部门id:{}, 企业id:{}, 变更记录id:{}", oldUserDO.getId(), oldUserDO.getDepartmentId(), oldUserDO.getCorpinfoId(), userChangeRecordE.getUserChangeRecordId()); List allJob = getUserJob(oldUserDO.getId(), oldUserDO.getDepartmentId(), oldUserDO.getCorpinfoId(), userChangeRecordE.getUserChangeRecordId()); if (CollUtil.isNotEmpty(allJob)) { - log.info("用户{}存在{}条待交接任务,保存工作交接记录并将用户状态更新为信息变更中", + log.info("用户{}存在{}条待交接任务,已保存交接数据,等待人工审批后继续处理", oldUserDO.getId(), allJob.size()); userJobHandoverRepository.saveBatch(allJob); - userGateway.update(oldUserE); - return false; } - - log.info("用户{}不存在待交接任务,直接完成离职处理", oldUserDO.getId()); -// oldUserE.setEmploymentFlag(UserEmploymentFlagEnum.RESIGNATION.getCode()); -// userGateway.update(oldUserE); - userRepository.updateEmploymentFlagAndDeleteEnum( - oldUserE.getId(), - UserEmploymentFlagEnum.RESIGNATION.getCode(), - "TRUE"); - completeResignation(oldUserDO, userChangeRecordE); - return true; + log.info("用户{}离职变更已记录待审批变更单,本次不自动执行离职", oldUserDO.getId()); + return false; } + /** + * 企业内资料调整时,仅允许立即同步人资标记。 + * + * @param oldUserDO 变更前用户 + * @param userUpdateCmd 变更命令 + */ + private void updateRzFlagOnly(UserDO oldUserDO, UserUpdateCmd userUpdateCmd) { + if (userUpdateCmd.getRzFlag() == null || Objects.equals(userUpdateCmd.getRzFlag(), oldUserDO.getRzFlag())) { + return; + } + UserE userE = new UserE(); + userE.setId(oldUserDO.getId()); + userE.setRzFlag(userUpdateCmd.getRzFlag()); + userGateway.update(userE); + log.info("用户{}仅同步rz_flag,旧值:{}, 新值:{}", oldUserDO.getId(), oldUserDO.getRzFlag(), userUpdateCmd.getRzFlag()); + } /** * 完成离职收口。 * 包括更新当前任职记录、更新用户变更记录,以及调用底座离职。 @@ -1278,3 +1259,4 @@ public class HumanUserUpdateExe { return userJobHandoverDO; } } +