feat(workflow): 集成线下培训系统的工作交接功能
parent
545b2d5839
commit
fde7cb5c2d
|
|
@ -36,6 +36,9 @@ import com.zcloud.gbscommon.utils.Tools;
|
||||||
import com.zcloud.gbscommon.zclouddomain.facade.ZcloudDomainFacade;
|
import com.zcloud.gbscommon.zclouddomain.facade.ZcloudDomainFacade;
|
||||||
import com.zcloud.gbscommon.zclouddomain.request.DomainQry;
|
import com.zcloud.gbscommon.zclouddomain.request.DomainQry;
|
||||||
import com.zcloud.gbscommon.zclouddomain.response.DomainListByUserCO;
|
import com.zcloud.gbscommon.zclouddomain.response.DomainListByUserCO;
|
||||||
|
import com.zcloud.gbscommon.zcloudedu.request.EduWorkQry;
|
||||||
|
import com.zcloud.gbscommon.zcloudedu.response.EduListByUserCO;
|
||||||
|
import com.zcloud.gbscommon.zcloudedu.facade.ZcloudEduWorkFacade;
|
||||||
import com.zcloud.gbscommon.zcloudeightwork.facade.ZcloudEightWorkFacade;
|
import com.zcloud.gbscommon.zcloudeightwork.facade.ZcloudEightWorkFacade;
|
||||||
import com.zcloud.gbscommon.zcloudeightwork.request.EightWorkQry;
|
import com.zcloud.gbscommon.zcloudeightwork.request.EightWorkQry;
|
||||||
import com.zcloud.gbscommon.zcloudeightwork.response.EightWorkListByUserCO;
|
import com.zcloud.gbscommon.zcloudeightwork.response.EightWorkListByUserCO;
|
||||||
|
|
@ -111,6 +114,8 @@ public class HumanUserUpdateExe {
|
||||||
private ZcloudDomainFacade zcloudDomainFacade;
|
private ZcloudDomainFacade zcloudDomainFacade;
|
||||||
@DubboReference
|
@DubboReference
|
||||||
private ZcloudTechnologyFacade zcloudTechnologyFacade;
|
private ZcloudTechnologyFacade zcloudTechnologyFacade;
|
||||||
|
@DubboReference
|
||||||
|
private ZcloudEduWorkFacade zcloudEduWorkFacade;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 人资用户变更总入口。
|
* 人资用户变更总入口。
|
||||||
|
|
@ -282,8 +287,12 @@ public class HumanUserUpdateExe {
|
||||||
}
|
}
|
||||||
|
|
||||||
log.info("用户{}不存在待交接任务,直接完成离职处理", oldUserDO.getId());
|
log.info("用户{}不存在待交接任务,直接完成离职处理", oldUserDO.getId());
|
||||||
oldUserE.setEmploymentFlag(UserEmploymentFlagEnum.RESIGNATION.getCode());
|
// oldUserE.setEmploymentFlag(UserEmploymentFlagEnum.RESIGNATION.getCode());
|
||||||
userGateway.update(oldUserE);
|
// userGateway.update(oldUserE);
|
||||||
|
userRepository.updateEmploymentFlagAndDeleteEnum(
|
||||||
|
oldUserE.getId(),
|
||||||
|
UserEmploymentFlagEnum.RESIGNATION.getCode(),
|
||||||
|
"TRUE");
|
||||||
completeResignation(oldUserDO, userChangeRecordE);
|
completeResignation(oldUserDO, userChangeRecordE);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
@ -814,6 +823,14 @@ public class HumanUserUpdateExe {
|
||||||
* @param userChangeRecordId 当前用户变更记录 id
|
* @param userChangeRecordId 当前用户变更记录 id
|
||||||
* @return 待交接工作列表
|
* @return 待交接工作列表
|
||||||
*/
|
*/
|
||||||
|
/**
|
||||||
|
* 对外提供统一的离职待交接任务汇总能力。
|
||||||
|
* 删除用户等场景可以复用这套任务汇总逻辑,避免复制各三方系统查询代码。
|
||||||
|
*/
|
||||||
|
public List<UserJobHandoverDO> collectUserJob(Long userId, Long departmentId, Long corpinfoId, String userChangeRecordId) {
|
||||||
|
return getUserJob(userId, departmentId, corpinfoId, userChangeRecordId);
|
||||||
|
}
|
||||||
|
|
||||||
private List<UserJobHandoverDO> getUserJob(Long userId, Long departmentId, Long corpinfoId, String userChangeRecordId) {
|
private List<UserJobHandoverDO> getUserJob(Long userId, Long departmentId, Long corpinfoId, String userChangeRecordId) {
|
||||||
CompletableFuture<List<UserJobHandoverDO>> hiddenFuture = CompletableFuture.supplyAsync(
|
CompletableFuture<List<UserJobHandoverDO>> hiddenFuture = CompletableFuture.supplyAsync(
|
||||||
() -> queryHiddenJobs(userId, departmentId, corpinfoId, userChangeRecordId));
|
() -> queryHiddenJobs(userId, departmentId, corpinfoId, userChangeRecordId));
|
||||||
|
|
@ -831,9 +848,11 @@ public class HumanUserUpdateExe {
|
||||||
() -> queryDomainJobs(userId, corpinfoId, userChangeRecordId));
|
() -> queryDomainJobs(userId, corpinfoId, userChangeRecordId));
|
||||||
CompletableFuture<List<UserJobHandoverDO>> technologyFuture = CompletableFuture.supplyAsync(
|
CompletableFuture<List<UserJobHandoverDO>> technologyFuture = CompletableFuture.supplyAsync(
|
||||||
() -> queryTechnologyJobs(userId, corpinfoId, userChangeRecordId));
|
() -> queryTechnologyJobs(userId, corpinfoId, userChangeRecordId));
|
||||||
|
CompletableFuture<List<UserJobHandoverDO>> eduWorkFuture = CompletableFuture.supplyAsync(
|
||||||
|
() -> queryEduWorkJobs(userId, corpinfoId, userChangeRecordId));
|
||||||
|
|
||||||
CompletableFuture.allOf(hiddenFuture, riskFuture, eightWorkFuture, fireCheckFuture,
|
CompletableFuture.allOf(hiddenFuture, riskFuture, eightWorkFuture, fireCheckFuture,
|
||||||
projectApprovalFuture, inspectionWorkFuture, domainFuture, technologyFuture).join();
|
projectApprovalFuture, inspectionWorkFuture, domainFuture, technologyFuture, eduWorkFuture).join();
|
||||||
List<UserJobHandoverDO> allJob = new ArrayList<>();
|
List<UserJobHandoverDO> allJob = new ArrayList<>();
|
||||||
allJob.addAll(hiddenFuture.join());
|
allJob.addAll(hiddenFuture.join());
|
||||||
allJob.addAll(riskFuture.join());
|
allJob.addAll(riskFuture.join());
|
||||||
|
|
@ -843,6 +862,7 @@ public class HumanUserUpdateExe {
|
||||||
allJob.addAll(inspectionWorkFuture.join());
|
allJob.addAll(inspectionWorkFuture.join());
|
||||||
allJob.addAll(domainFuture.join());
|
allJob.addAll(domainFuture.join());
|
||||||
allJob.addAll(technologyFuture.join());
|
allJob.addAll(technologyFuture.join());
|
||||||
|
allJob.addAll(eduWorkFuture.join());
|
||||||
log.info("离职待交接任务汇总完成,用户id:{}, 部门id:{}, 企业id:{}, 总数量:{}",
|
log.info("离职待交接任务汇总完成,用户id:{}, 部门id:{}, 企业id:{}, 总数量:{}",
|
||||||
userId, departmentId, corpinfoId, allJob.size());
|
userId, departmentId, corpinfoId, allJob.size());
|
||||||
return allJob;
|
return allJob;
|
||||||
|
|
@ -1065,6 +1085,50 @@ public class HumanUserUpdateExe {
|
||||||
return new ArrayList<>();
|
return new ArrayList<>();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 查询线下培训系统中的待交接任务。
|
||||||
|
* 调用方式与其他三方系统保持一致,按用户和企业维度汇总待交接数据。
|
||||||
|
* 三方接口异常时只记录日志,不影响离职主流程继续执行。
|
||||||
|
*/
|
||||||
|
private List<UserJobHandoverDO> queryEduWorkJobs(Long userId, Long corpinfoId, String userChangeRecordId) {
|
||||||
|
EduWorkQry eduWorkQry = new EduWorkQry();
|
||||||
|
eduWorkQry.setUserId(userId);
|
||||||
|
eduWorkQry.setCorpinfoId(corpinfoId);
|
||||||
|
|
||||||
|
log.info("查询未完成工作,开始异步查询线下培训待交接任务,用户id:{}, 企业id:{}", userId, corpinfoId);
|
||||||
|
try {
|
||||||
|
MultiResponse<EduListByUserCO> response = zcloudEduWorkFacade.listManagerByUserId(eduWorkQry);
|
||||||
|
if (response == null || !response.isSuccess()) {
|
||||||
|
String errMessage = response == null ? "线下培训服务未返回结果" : response.getErrMessage();
|
||||||
|
log.error("查询线下培训待交接任务失败,用户id:{}, 企业id:{}, 原因:{}",
|
||||||
|
userId, corpinfoId, errMessage);
|
||||||
|
return new ArrayList<>();
|
||||||
|
}
|
||||||
|
|
||||||
|
List<EduListByUserCO> eduList = response.getData();
|
||||||
|
if (CollUtil.isEmpty(eduList)) {
|
||||||
|
log.info("线下培训待交接任务查询完成,未查询到数据,用户id:{}, 企业id:{}", userId, corpinfoId);
|
||||||
|
return new ArrayList<>();
|
||||||
|
}
|
||||||
|
|
||||||
|
List<UserJobHandoverDO> result = new ArrayList<>();
|
||||||
|
eduList.forEach(info -> result.add(buildUserJobHandoverDO(
|
||||||
|
userId,
|
||||||
|
corpinfoId,
|
||||||
|
userChangeRecordId,
|
||||||
|
UserJobHandoverWorkTypeEnum.EDU_WORK.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<UserJobHandoverDO> queryHiddenJobs(Long userId, Long departmentId, Long corpinfoId, String userChangeRecordId) {
|
private List<UserJobHandoverDO> queryHiddenJobs(Long userId, Long departmentId, Long corpinfoId, String userChangeRecordId) {
|
||||||
HiddenStatisticsListQry hiddenStatisticsListQry = new HiddenStatisticsListQry();
|
HiddenStatisticsListQry hiddenStatisticsListQry = new HiddenStatisticsListQry();
|
||||||
hiddenStatisticsListQry.setUserId(userId);
|
hiddenStatisticsListQry.setUserId(userId);
|
||||||
|
|
|
||||||
|
|
@ -129,6 +129,7 @@ public class UserAddExe {
|
||||||
}
|
}
|
||||||
userEmploymentLogE.initAdd(userEmploymentLogE, corpName, userE.getId());
|
userEmploymentLogE.initAdd(userEmploymentLogE, corpName, userE.getId());
|
||||||
userEmploymentLogGateway.add(userEmploymentLogE);
|
userEmploymentLogGateway.add(userEmploymentLogE);
|
||||||
|
addUserChangeRecordForSave(userE, corpInfoDO);
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
throw new RuntimeException(e);
|
throw new RuntimeException(e);
|
||||||
}
|
}
|
||||||
|
|
@ -691,5 +692,31 @@ public class UserAddExe {
|
||||||
}
|
}
|
||||||
return userE.getId();
|
return userE.getId();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 普通保存企业用户时补充一条用户变更记录。
|
||||||
|
* 该场景只记录变更后的企业、部门、岗位和姓名信息,变更前信息保持为空。
|
||||||
|
*/
|
||||||
|
private void addUserChangeRecordForSave(UserE userE, CorpInfoDO corpInfoDO) {
|
||||||
|
String corpName = corpInfoDO == null ? null : corpInfoDO.getCorpName();
|
||||||
|
String departmentName = null;
|
||||||
|
String postName = userE.getPostName();
|
||||||
|
if (userE.getDepartmentId() != null) {
|
||||||
|
DepartmentDO departmentDO = departmentRepository.getById(userE.getDepartmentId());
|
||||||
|
if (departmentDO != null) {
|
||||||
|
departmentName = departmentDO.getName();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (userE.getPostId() != null && StringUtils.isEmpty(postName)) {
|
||||||
|
PostDO postDO = postRepository.getById(userE.getPostId());
|
||||||
|
if (postDO != null) {
|
||||||
|
postName = postDO.getPostName();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
userE.setPostName(postName);
|
||||||
|
UserChangeRecordE userChangeRecordE = new UserChangeRecordE();
|
||||||
|
userChangeRecordE.initUserAdd(userE, corpName, departmentName);
|
||||||
|
userChangeRecordGateway.add(userChangeRecordE);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -28,6 +28,8 @@ import com.zcloud.basic.info.persistence.repository.UserJobHandoverRepository;
|
||||||
import com.zcloud.basic.info.persistence.repository.UserRepository;
|
import com.zcloud.basic.info.persistence.repository.UserRepository;
|
||||||
import com.zcloud.gbscommon.zclouddomain.facade.ZcloudDomainFacade;
|
import com.zcloud.gbscommon.zclouddomain.facade.ZcloudDomainFacade;
|
||||||
import com.zcloud.gbscommon.zclouddomain.request.DomainWorkChangeCmd;
|
import com.zcloud.gbscommon.zclouddomain.request.DomainWorkChangeCmd;
|
||||||
|
import com.zcloud.gbscommon.zcloudedu.facade.ZcloudEduWorkFacade;
|
||||||
|
import com.zcloud.gbscommon.zcloudedu.request.EduWorkChangeCmd;
|
||||||
import com.zcloud.gbscommon.zcloudeightwork.facade.ZcloudEightWorkFacade;
|
import com.zcloud.gbscommon.zcloudeightwork.facade.ZcloudEightWorkFacade;
|
||||||
import com.zcloud.gbscommon.zcloudeightwork.request.EightWorkChangeCmd;
|
import com.zcloud.gbscommon.zcloudeightwork.request.EightWorkChangeCmd;
|
||||||
import com.zcloud.gbscommon.zcloudhidden.face.ZcloudHiddenFacade;
|
import com.zcloud.gbscommon.zcloudhidden.face.ZcloudHiddenFacade;
|
||||||
|
|
@ -97,6 +99,9 @@ public class UserChangeRecordWorkChangeExe {
|
||||||
@DubboReference
|
@DubboReference
|
||||||
private ZcloudTechnologyFacade zcloudTechnologyFacade;
|
private ZcloudTechnologyFacade zcloudTechnologyFacade;
|
||||||
|
|
||||||
|
@DubboReference
|
||||||
|
private ZcloudEduWorkFacade zcloudEduWorkFacade;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 工作交接处理入口。
|
* 工作交接处理入口。
|
||||||
* 先根据工作类型调用对应三方系统,再关闭当前交接记录;
|
* 先根据工作类型调用对应三方系统,再关闭当前交接记录;
|
||||||
|
|
@ -171,6 +176,9 @@ public class UserChangeRecordWorkChangeExe {
|
||||||
case TECHNOLOGY:
|
case TECHNOLOGY:
|
||||||
processTechnologyInfoHandover(handoverDO, workChangeUpdateCmd);
|
processTechnologyInfoHandover(handoverDO, workChangeUpdateCmd);
|
||||||
return;
|
return;
|
||||||
|
case EDU_WORK:
|
||||||
|
processEduWorkInfoHandover(handoverDO, workChangeUpdateCmd);
|
||||||
|
return;
|
||||||
default:
|
default:
|
||||||
log.warn("工作类型暂未接入交接微服务,交接记录id:{}, 工作类型:{}",
|
log.warn("工作类型暂未接入交接微服务,交接记录id:{}, 工作类型:{}",
|
||||||
handoverDO.getId(), handoverDO.getWorkType());
|
handoverDO.getId(), handoverDO.getWorkType());
|
||||||
|
|
@ -443,6 +451,43 @@ public class UserChangeRecordWorkChangeExe {
|
||||||
throw new BizException("科技兴安交接失败,请稍后重试");
|
throw new BizException("科技兴安交接失败,请稍后重试");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 处理线下培训交接。
|
||||||
|
* 调用方式与其他工作类型保持一致,失败时记录日志,不中断整体流程。
|
||||||
|
*/
|
||||||
|
private void processEduWorkInfoHandover(UserJobHandoverDO handoverDO, WorkChangeUpdateCmd workChangeUpdateCmd) {
|
||||||
|
EduWorkChangeCmd eduWorkChangeCmd = new EduWorkChangeCmd();
|
||||||
|
eduWorkChangeCmd.setWorkId(handoverDO.getForeignKey());
|
||||||
|
eduWorkChangeCmd.setOldUserId(handoverDO.getUserId());
|
||||||
|
eduWorkChangeCmd.setUserId(workChangeUpdateCmd.getHandoverUserId());
|
||||||
|
eduWorkChangeCmd.setUserName(workChangeUpdateCmd.getHandoverUserName());
|
||||||
|
eduWorkChangeCmd.setDeptId(workChangeUpdateCmd.getHandoverDepartmentId());
|
||||||
|
eduWorkChangeCmd.setDeptName(workChangeUpdateCmd.getHandoverDepartmentName());
|
||||||
|
eduWorkChangeCmd.setCorpId(workChangeUpdateCmd.getHandoverCompanyId());
|
||||||
|
eduWorkChangeCmd.setCorpName(workChangeUpdateCmd.getHandoverCompanyName());
|
||||||
|
|
||||||
|
log.info("开始处理线下培训交接,交接记录id:{}, workId:{}, 原责任人:{}, 新责任人:{}",
|
||||||
|
handoverDO.getId(),
|
||||||
|
handoverDO.getForeignKey(),
|
||||||
|
handoverDO.getUserId(),
|
||||||
|
workChangeUpdateCmd.getHandoverUserId());
|
||||||
|
try {
|
||||||
|
SingleResponse response = zcloudEduWorkFacade.updateWorkChange(eduWorkChangeCmd);
|
||||||
|
if (response == null || !response.isSuccess()) {
|
||||||
|
String errMessage = response == null ? "线下培训服务未返回结果" : response.getErrMessage();
|
||||||
|
log.error("线下培训交接失败,交接记录id:{}, workId:{}, 原因:{}",
|
||||||
|
handoverDO.getId(), handoverDO.getForeignKey(), errMessage);
|
||||||
|
// return;
|
||||||
|
throw new BizException(StringUtils.hasText(errMessage) ? errMessage : "线下培训交接失败");
|
||||||
|
}
|
||||||
|
log.info("线下培训交接完成,交接记录id:{}, workId:{}, 新责任人:{}",
|
||||||
|
handoverDO.getId(), handoverDO.getForeignKey(), workChangeUpdateCmd.getHandoverUserId());
|
||||||
|
} catch (Exception e) {
|
||||||
|
log.error("线下培训交接发生异常,交接记录id:{}, workId:{}",
|
||||||
|
handoverDO.getId(), handoverDO.getForeignKey(), e);
|
||||||
|
}
|
||||||
|
}
|
||||||
private void processRiskInfoHandover(UserJobHandoverDO handoverDO, WorkChangeUpdateCmd workChangeUpdateCmd) {
|
private void processRiskInfoHandover(UserJobHandoverDO handoverDO, WorkChangeUpdateCmd workChangeUpdateCmd) {
|
||||||
ListManagerWorkChangeCmd listManagerWorkChangeCmd = new ListManagerWorkChangeCmd();
|
ListManagerWorkChangeCmd listManagerWorkChangeCmd = new ListManagerWorkChangeCmd();
|
||||||
listManagerWorkChangeCmd.setListManagerId(handoverDO.getForeignKey());
|
listManagerWorkChangeCmd.setListManagerId(handoverDO.getForeignKey());
|
||||||
|
|
|
||||||
|
|
@ -8,16 +8,23 @@ import com.alibaba.cola.exception.BizException;
|
||||||
import com.jjb.saas.system.client.user.facade.UserFacade;
|
import com.jjb.saas.system.client.user.facade.UserFacade;
|
||||||
import com.jjb.saas.system.client.user.response.UserDetailCO;
|
import com.jjb.saas.system.client.user.response.UserDetailCO;
|
||||||
import com.zcloud.basic.info.constant.RedisConstant;
|
import com.zcloud.basic.info.constant.RedisConstant;
|
||||||
|
import com.zcloud.basic.info.domain.enums.UserChangeRecordStatusEnum;
|
||||||
import com.zcloud.basic.info.domain.enums.UserEmploymentFlagEnum;
|
import com.zcloud.basic.info.domain.enums.UserEmploymentFlagEnum;
|
||||||
|
import com.zcloud.basic.info.domain.gateway.UserChangeRecordGateway;
|
||||||
import com.zcloud.basic.info.domain.gateway.UserGateway;
|
import com.zcloud.basic.info.domain.gateway.UserGateway;
|
||||||
|
import com.zcloud.basic.info.domain.model.UserChangeRecordE;
|
||||||
|
import com.zcloud.basic.info.domain.model.UserE;
|
||||||
import com.zcloud.basic.info.dto.AppUserLogOutCmd;
|
import com.zcloud.basic.info.dto.AppUserLogOutCmd;
|
||||||
import com.zcloud.basic.info.persistence.dataobject.UserDO;
|
import com.zcloud.basic.info.persistence.dataobject.UserDO;
|
||||||
|
import com.zcloud.basic.info.persistence.dataobject.UserJobHandoverDO;
|
||||||
import com.zcloud.basic.info.persistence.repository.UserCorpRecordRepository;
|
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.basic.info.persistence.repository.UserRepository;
|
||||||
import com.zcloud.gbscommon.utils.ZcloudRedisUtil;
|
import com.zcloud.gbscommon.utils.ZcloudRedisUtil;
|
||||||
import lombok.AllArgsConstructor;
|
import lombok.AllArgsConstructor;
|
||||||
import lombok.extern.slf4j.Slf4j;
|
import lombok.extern.slf4j.Slf4j;
|
||||||
import org.apache.dubbo.config.annotation.DubboReference;
|
import org.apache.dubbo.config.annotation.DubboReference;
|
||||||
|
import org.springframework.beans.BeanUtils;
|
||||||
import org.springframework.stereotype.Component;
|
import org.springframework.stereotype.Component;
|
||||||
import org.springframework.transaction.annotation.Transactional;
|
import org.springframework.transaction.annotation.Transactional;
|
||||||
|
|
||||||
|
|
@ -36,6 +43,9 @@ import java.util.List;
|
||||||
public class UserRemoveExe {
|
public class UserRemoveExe {
|
||||||
private final UserGateway userGateway;
|
private final UserGateway userGateway;
|
||||||
private final UserRepository userRepository;
|
private final UserRepository userRepository;
|
||||||
|
private final UserChangeRecordGateway userChangeRecordGateway;
|
||||||
|
private final UserJobHandoverRepository userJobHandoverRepository;
|
||||||
|
private final HumanUserUpdateExe humanUserUpdateExe;
|
||||||
@DubboReference(check = false)
|
@DubboReference(check = false)
|
||||||
private UserFacade userFacade;
|
private UserFacade userFacade;
|
||||||
// @Autowired
|
// @Autowired
|
||||||
|
|
@ -45,6 +55,13 @@ public class UserRemoveExe {
|
||||||
@Transactional(rollbackFor = Exception.class)
|
@Transactional(rollbackFor = Exception.class)
|
||||||
public boolean execute(Long id) {
|
public boolean execute(Long id) {
|
||||||
try {
|
try {
|
||||||
|
UserDO userDO = userRepository.getInfoById(id);
|
||||||
|
if (userDO != null) {
|
||||||
|
boolean canDelete = addDeleteChangeRecord(userDO);
|
||||||
|
if (!canDelete) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
userGateway.deletedUserById(id);
|
userGateway.deletedUserById(id);
|
||||||
} catch (Exception e){
|
} catch (Exception e){
|
||||||
e.printStackTrace();
|
e.printStackTrace();
|
||||||
|
|
@ -53,6 +70,42 @@ public class UserRemoveExe {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 删除用户时补充变更记录,并同步保存当前未完成的工作交接任务。
|
||||||
|
* 该场景只记录变更前信息,变更后企业、部门、岗位信息保持为空。
|
||||||
|
*/
|
||||||
|
private boolean addDeleteChangeRecord(UserDO userDO) {
|
||||||
|
UserE userE = new UserE();
|
||||||
|
BeanUtils.copyProperties(userDO, userE);
|
||||||
|
|
||||||
|
UserChangeRecordE userChangeRecordE = new UserChangeRecordE();
|
||||||
|
userChangeRecordE.executeResignation(
|
||||||
|
userE,
|
||||||
|
UserEmploymentFlagEnum.RESIGNATION.getCode(),
|
||||||
|
UserChangeRecordStatusEnum.PENDING.getCode(),
|
||||||
|
userDO.getEmploymentFlag());
|
||||||
|
userChangeRecordE.setUserNameBefore(userDO.getName());
|
||||||
|
userChangeRecordE.setUserNameAfter(null);
|
||||||
|
userChangeRecordGateway.add(userChangeRecordE);
|
||||||
|
|
||||||
|
List<UserJobHandoverDO> allJob = humanUserUpdateExe.collectUserJob(
|
||||||
|
userDO.getId(),
|
||||||
|
userDO.getDepartmentId(),
|
||||||
|
userDO.getCorpinfoId(),
|
||||||
|
userChangeRecordE.getUserChangeRecordId());
|
||||||
|
if (CollUtil.isNotEmpty(allJob)) {
|
||||||
|
userJobHandoverRepository.saveBatch(allJob);
|
||||||
|
UserE updateUserE = new UserE();
|
||||||
|
updateUserE.setId(userDO.getId());
|
||||||
|
updateUserE.setEmploymentFlag(UserEmploymentFlagEnum.INFO_CHANGE.getCode());
|
||||||
|
userGateway.update(updateUserE);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
userChangeRecordE.setStatus(UserChangeRecordStatusEnum.APPROVED.getCode());
|
||||||
|
userChangeRecordGateway.update(userChangeRecordE);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
@Transactional(rollbackFor = Exception.class)
|
@Transactional(rollbackFor = Exception.class)
|
||||||
public boolean executeLogOut(AppUserLogOutCmd cmd) {
|
public boolean executeLogOut(AppUserLogOutCmd cmd) {
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -85,6 +85,7 @@ public class UserUpdateExe {
|
||||||
BeanUtils.copyProperties(userDO, oldUserE);
|
BeanUtils.copyProperties(userDO, oldUserE);
|
||||||
// boolean transferPositionFlag = userE.verifyTransferPosition(oldUserE, userE);
|
// boolean transferPositionFlag = userE.verifyTransferPosition(oldUserE, userE);
|
||||||
boolean transferFlowFlag = userE.verifyTransferFlow(oldUserE, userE);
|
boolean transferFlowFlag = userE.verifyTransferFlow(oldUserE, userE);
|
||||||
|
boolean nameChanged = userUpdateCmd.getName() != null && !Objects.equals(userDO.getName(), userUpdateCmd.getName());
|
||||||
if (transferFlowFlag) {
|
if (transferFlowFlag) {
|
||||||
List<UserCorpRecordDO> userCorpRecordDOList = userCorpRecordRepository.getInfoListByUserId(userDO.getId());
|
List<UserCorpRecordDO> userCorpRecordDOList = userCorpRecordRepository.getInfoListByUserId(userDO.getId());
|
||||||
if (CollUtil.isNotEmpty(userCorpRecordDOList)) {
|
if (CollUtil.isNotEmpty(userCorpRecordDOList)) {
|
||||||
|
|
@ -179,6 +180,9 @@ public class UserUpdateExe {
|
||||||
}else {
|
}else {
|
||||||
throw new BizException("未找到该用户所属企业");
|
throw new BizException("未找到该用户所属企业");
|
||||||
}
|
}
|
||||||
|
if (nameChanged) {
|
||||||
|
addUserChangeRecordForNameUpdate(userDO);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -207,6 +211,27 @@ public class UserUpdateExe {
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 普通编辑场景下姓名发生变化时,补充一条用户变更记录。
|
||||||
|
* 该记录只在姓名实际变更后新增,避免影响其他普通修改逻辑。
|
||||||
|
*/
|
||||||
|
private void addUserChangeRecordForNameUpdate(UserDO oldUserDO) {
|
||||||
|
UserDO newUserDO = userRepository.getInfoById(oldUserDO.getId());
|
||||||
|
if (newUserDO == null) {
|
||||||
|
log.warn("用户编辑后未查询到最新用户信息,跳过姓名变更记录,用户id:{}", oldUserDO.getId());
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
UserE oldUserE = new UserE();
|
||||||
|
BeanUtils.copyProperties(oldUserDO, oldUserE);
|
||||||
|
UserE newUserE = new UserE();
|
||||||
|
BeanUtils.copyProperties(newUserDO, newUserE);
|
||||||
|
|
||||||
|
UserChangeRecordE userChangeRecordE = new UserChangeRecordE();
|
||||||
|
userChangeRecordE.initUserUpdate(newUserE, oldUserE, newUserDO.getCorpinfoName(), newUserDO.getDepartmentName());
|
||||||
|
userChangeRecordGateway.add(userChangeRecordE);
|
||||||
|
}
|
||||||
|
|
||||||
@Transactional(rollbackFor = Exception.class)
|
@Transactional(rollbackFor = Exception.class)
|
||||||
public void editData(UserQryCmd userUpdateCmd) {
|
public void editData(UserQryCmd userUpdateCmd) {
|
||||||
List<UserDO> userDOList = new ArrayList<>();
|
List<UserDO> userDOList = new ArrayList<>();
|
||||||
|
|
|
||||||
|
|
@ -38,7 +38,11 @@ public enum UserJobHandoverWorkTypeEnum {
|
||||||
/**
|
/**
|
||||||
* 科技兴安。
|
* 科技兴安。
|
||||||
*/
|
*/
|
||||||
TECHNOLOGY(8, "科技兴安");
|
TECHNOLOGY(8, "科技兴安"),
|
||||||
|
/**
|
||||||
|
* 线下培训。
|
||||||
|
*/
|
||||||
|
EDU_WORK(9, "线下培训");
|
||||||
|
|
||||||
private final Integer code;
|
private final Integer code;
|
||||||
private final String name;
|
private final String name;
|
||||||
|
|
|
||||||
|
|
@ -4,7 +4,6 @@ import com.alibaba.cola.domain.Entity;
|
||||||
import com.alibaba.cola.exception.BizException;
|
import com.alibaba.cola.exception.BizException;
|
||||||
import com.jjb.saas.framework.auth.utils.AuthContext;
|
import com.jjb.saas.framework.auth.utils.AuthContext;
|
||||||
import com.jjb.saas.framework.domain.model.BaseE;
|
import com.jjb.saas.framework.domain.model.BaseE;
|
||||||
import com.zcloud.basic.info.domain.enums.CorpStateEnum;
|
|
||||||
import com.zcloud.basic.info.domain.enums.CorpTypeEnum;
|
import com.zcloud.basic.info.domain.enums.CorpTypeEnum;
|
||||||
import com.zcloud.gbscommon.utils.MD5;
|
import com.zcloud.gbscommon.utils.MD5;
|
||||||
import com.zcloud.gbscommon.utils.Sm2Util;
|
import com.zcloud.gbscommon.utils.Sm2Util;
|
||||||
|
|
@ -14,7 +13,6 @@ import lombok.EqualsAndHashCode;
|
||||||
|
|
||||||
import java.math.BigDecimal;
|
import java.math.BigDecimal;
|
||||||
import java.time.LocalDate;
|
import java.time.LocalDate;
|
||||||
import java.util.Map;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* web-domain
|
* web-domain
|
||||||
|
|
|
||||||
|
|
@ -1,10 +1,7 @@
|
||||||
package com.zcloud.basic.info.domain.model;
|
package com.zcloud.basic.info.domain.model;
|
||||||
|
|
||||||
import cn.hutool.core.collection.CollUtil;
|
import cn.hutool.core.collection.CollUtil;
|
||||||
import com.alibaba.cola.dto.Response;
|
|
||||||
import com.alibaba.cola.exception.BizException;
|
import com.alibaba.cola.exception.BizException;
|
||||||
import com.baomidou.mybatisplus.annotation.TableField;
|
|
||||||
import com.fasterxml.jackson.annotation.JsonFormat;
|
|
||||||
import com.jjb.saas.framework.auth.utils.AuthContext;
|
import com.jjb.saas.framework.auth.utils.AuthContext;
|
||||||
import com.jjb.saas.framework.domain.model.BaseE;
|
import com.jjb.saas.framework.domain.model.BaseE;
|
||||||
import com.jjb.saas.framework.utils.DataEncryptDecryptUtil;
|
import com.jjb.saas.framework.utils.DataEncryptDecryptUtil;
|
||||||
|
|
@ -12,25 +9,18 @@ import com.zcloud.basic.info.domain.enums.CorpTypeEnum;
|
||||||
import com.zcloud.basic.info.domain.enums.UserEmploymentFlagEnum;
|
import com.zcloud.basic.info.domain.enums.UserEmploymentFlagEnum;
|
||||||
import com.zcloud.basic.info.domain.enums.UserFlowFlagEnum;
|
import com.zcloud.basic.info.domain.enums.UserFlowFlagEnum;
|
||||||
import com.zcloud.basic.info.domain.enums.UserTypeEnum;
|
import com.zcloud.basic.info.domain.enums.UserTypeEnum;
|
||||||
import com.zcloud.basic.info.domain.gateway.DepartmentGateway;
|
|
||||||
import com.zcloud.gbscommon.excelEntity.UserExcelExportEntity;
|
import com.zcloud.gbscommon.excelEntity.UserExcelExportEntity;
|
||||||
import com.zcloud.gbscommon.excelEntity.UserExcelImportEntity;
|
|
||||||
import com.zcloud.gbscommon.utils.ExcelUtils;
|
import com.zcloud.gbscommon.utils.ExcelUtils;
|
||||||
import com.zcloud.gbscommon.utils.MD5;
|
import com.zcloud.gbscommon.utils.MD5;
|
||||||
import com.zcloud.gbscommon.utils.Sm2Util;
|
import com.zcloud.gbscommon.utils.Sm2Util;
|
||||||
import com.zcloud.gbscommon.utils.Tools;
|
import com.zcloud.gbscommon.utils.Tools;
|
||||||
import io.swagger.annotations.ApiModelProperty;
|
|
||||||
import lombok.Data;
|
import lombok.Data;
|
||||||
import org.apache.commons.lang.StringUtils;
|
import org.apache.commons.lang.StringUtils;
|
||||||
import org.springframework.util.ObjectUtils;
|
import org.springframework.util.ObjectUtils;
|
||||||
import org.springframework.web.multipart.MultipartFile;
|
|
||||||
|
|
||||||
import javax.annotation.Resource;
|
|
||||||
import javax.servlet.http.HttpServletResponse;
|
import javax.servlet.http.HttpServletResponse;
|
||||||
import java.time.LocalDate;
|
import java.time.LocalDate;
|
||||||
import java.time.LocalDateTime;
|
import java.time.LocalDateTime;
|
||||||
import java.util.ArrayList;
|
|
||||||
import java.util.HashMap;
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import java.util.stream.Collectors;
|
import java.util.stream.Collectors;
|
||||||
|
|
|
||||||
|
|
@ -481,6 +481,7 @@ public class UserRepositoryImpl extends BaseRepositoryImpl<UserMapper, UserDO> i
|
||||||
UpdateWrapper<UserDO> updateWrapper = new UpdateWrapper<>();
|
UpdateWrapper<UserDO> updateWrapper = new UpdateWrapper<>();
|
||||||
updateWrapper.eq("id", id)
|
updateWrapper.eq("id", id)
|
||||||
.eq("delete_enum", "FALSE")
|
.eq("delete_enum", "FALSE")
|
||||||
|
.set("employment_flag", "0")
|
||||||
.set("delete_enum", "TRUE");
|
.set("delete_enum", "TRUE");
|
||||||
update(updateWrapper);
|
update(updateWrapper);
|
||||||
userFacade.delete(id);
|
userFacade.delete(id);
|
||||||
|
|
|
||||||
|
|
@ -3,7 +3,6 @@ package com.zcloud.basic.info.utils;
|
||||||
import cn.hutool.core.util.ObjectUtil;
|
import cn.hutool.core.util.ObjectUtil;
|
||||||
import com.alibaba.cola.dto.Response;
|
import com.alibaba.cola.dto.Response;
|
||||||
import com.alibaba.fastjson.JSONObject;
|
import com.alibaba.fastjson.JSONObject;
|
||||||
import com.zcloud.gbscommon.utils.Sm2Util;
|
|
||||||
import org.slf4j.MDC;
|
import org.slf4j.MDC;
|
||||||
|
|
||||||
import java.util.Collections;
|
import java.util.Collections;
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue