审核相关

main
zhaokai 2025-12-10 15:13:39 +08:00
parent 59b29cdc76
commit d311d9bfcf
28 changed files with 354 additions and 138 deletions

View File

@ -0,0 +1,55 @@
package com.zcloud.basic.info.app;
import com.alibaba.cola.dto.PageResponse;
import com.alibaba.cola.dto.Response;
import com.alibaba.cola.dto.SingleResponse;
import com.jjb.saas.framework.auth.model.SSOUser;
import com.jjb.saas.framework.auth.utils.AuthContext;
import com.jjb.saas.security.starter.api.co.DecryptCmd;
import com.zcloud.basic.info.api.CorpInfoServiceI;
import com.zcloud.basic.info.dto.*;
import com.zcloud.basic.info.dto.clientobject.CorpDepartmentCO;
import com.zcloud.basic.info.dto.clientobject.CorpInfoCO;
import com.zcloud.basic.info.dto.clientobject.CorpUserMiddleCO;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.AllArgsConstructor;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
/**
* web-adapter
*
* @Author zhaokai
* @Date 2025-10-29 16:02:16
*/
@Api(tags = "企业信息")
@RequestMapping("/${application.gateway}/app/corpInfo")
@RestController
@AllArgsConstructor
public class AppCorpInfoController {
private final CorpInfoServiceI corpInfoService;
@ApiOperation("获取企业列表")
@PostMapping("/list")
public PageResponse<CorpInfoCO> page(@Validated @RequestBody CorpInfoPageQry qry) {
return corpInfoService.listPage(qry);
}
@ApiOperation("详情")
@PostMapping("/info/{id}")
public SingleResponse<CorpInfoCO> getInfoById(@PathVariable("id") Long id) {
if(id==null){
SSOUser ssoUser = AuthContext.getCurrentUser();
id = ssoUser.getTenantId();
}
return SingleResponse.of(corpInfoService.info(id));
}
}

View File

@ -1,6 +1,7 @@
package com.zcloud.basic.info.app;
import com.alibaba.cola.dto.MultiResponse;
import com.alibaba.cola.dto.Response;
import com.alibaba.cola.dto.SingleResponse;
import com.jjb.saas.framework.auth.model.SSOUser;
@ -8,6 +9,8 @@ import com.jjb.saas.framework.auth.utils.AuthContext;
import com.zcloud.basic.info.api.ProblemFeedbackServiceI;
import com.zcloud.basic.info.api.UserServiceI;
import com.zcloud.basic.info.dto.*;
import com.zcloud.basic.info.dto.clientobject.CorpFormCO;
import com.zcloud.basic.info.dto.clientobject.CorpInfoCO;
import com.zcloud.basic.info.dto.clientobject.ProblemFeedbackCO;
import com.zcloud.basic.info.dto.clientobject.UserCO;
import com.zcloud.gbscommon.translateaop.TranslateField;
@ -43,6 +46,7 @@ public class AppUserController {
return userService.sendPhoneCode(cmd);
}
@ApiOperation("密码找回")
@PostMapping("/passwordRecover")
public SingleResponse<UserCO> passwordRecover(@Validated @RequestBody AppUserRegisterCmd cmd) {
@ -55,6 +59,7 @@ public class AppUserController {
return userService.register(cmd);
}
@ApiOperation("完善个人信息(不包括企业,部门,岗位)")
@PostMapping("/perfectUserInfo")
public SingleResponse<UserCO> perfectUserInfo(@Validated @RequestBody AppUserInfoCmd cmd) {
@ -107,6 +112,15 @@ public class AppUserController {
userService.logOut(cmd);
return SingleResponse.buildSuccess();
}
@ApiOperation("app游客登录")
@PostMapping("/login")
public MultiResponse<CorpInfoCO> login(@Validated @RequestBody UserAppLoginCmd cmd) {
return MultiResponse.of(userService.login(cmd));
}
@ApiOperation("app获取用户在职企业")
@PostMapping("/getUserCorpList/{id}")
public MultiResponse<CorpInfoCO> getUserCorpList(@PathVariable("id") Long id) {
return MultiResponse.of(userService.getUserCorpList(id));
}
}

View File

@ -10,6 +10,7 @@ import com.zcloud.basic.info.dto.clientobject.UserCorpRecordCO;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.AllArgsConstructor;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
/**
@ -28,7 +29,7 @@ public class AppUserCorpRecordController {
@ApiOperation("就职单位记录分页")
@PostMapping("/list")
public PageResponse<UserCorpRecordCO> page(@RequestBody UserCorpRecordPageQry qry) {
public PageResponse<UserCorpRecordCO> page(@Validated @RequestBody UserCorpRecordPageQry qry) {
return userCorpRecordService.listPage(qry);
}
@ -39,6 +40,5 @@ public class AppUserCorpRecordController {
return SingleResponse.of(userCorpRecordService.getInfoById(id));
}
}

View File

@ -46,31 +46,7 @@ public class UserCorpController {
return userCorpService.listPage(qry);
}
@ApiOperation("所有数据")
@GetMapping("/listAll")
public MultiResponse<UserCorpCO> listAll() {
return MultiResponse.of(new ArrayList<UserCorpCO>());
}
@ApiOperation("详情")
@GetMapping("/{id}")
public SingleResponse<UserCorpCO> getInfoById(@PathVariable("id") Long id) {
return SingleResponse.of(new UserCorpCO());
}
@ApiOperation("删除")
@DeleteMapping("/{id}")
public Response remove(@PathVariable("id") Long id) {
userCorpService.remove(id);
return SingleResponse.buildSuccess();
}
@ApiOperation("删除多个")
@DeleteMapping("/ids")
public Response removeBatch(@RequestParam Long[] ids) {
userCorpService.removeBatch(ids);
return SingleResponse.buildSuccess();
}
@ApiOperation("修改")
@PutMapping("/edit")

View File

@ -46,32 +46,6 @@ public class UserCorpRecordController {
return userCorpRecordService.listPage(qry);
}
@ApiOperation("所有数据")
@GetMapping("/listAll")
public MultiResponse<UserCorpRecordCO> listAll() {
return MultiResponse.of(new ArrayList<UserCorpRecordCO>());
}
@ApiOperation("详情")
@GetMapping("/{id}")
public SingleResponse<UserCorpRecordCO> getInfoById(@PathVariable("id") Long id) {
return SingleResponse.of(new UserCorpRecordCO());
}
@ApiOperation("删除")
@DeleteMapping("/{id}")
public Response remove(@PathVariable("id") Long id) {
userCorpRecordService.remove(id);
return SingleResponse.buildSuccess();
}
@ApiOperation("删除多个")
@DeleteMapping("/ids")
public Response removeBatch(@RequestParam Long[] ids) {
userCorpRecordService.removeBatch(ids);
return SingleResponse.buildSuccess();
}
@ApiOperation("修改")
@PutMapping("/edit")
public SingleResponse edit(@Validated @RequestBody UserCorpRecordUpdateCmd userCorpRecordUpdateCmd) {

View File

@ -63,6 +63,7 @@ public class UserAddExe {
private final UserChangeRecordGateway userChangeRecordGateway;
private final UserCorpRecordGateway userCorpRecordGateway;
private ZcloudRedisUtil zcloudRedisUtil;
private final UserCorpRecordRepository userCorpRecordRepository;
@Transactional(rollbackFor = Exception.class)
@ -138,8 +139,16 @@ public class UserAddExe {
BeanUtils.copyProperties(cmd, userE);
// 3-相关方
userE.setUserType(3);
if(UserFlowFlagEnum.FIXED.getCode().equals(cmd.getFlowFlag())){
userE.setEmploymentFlag(UserEmploymentFlagEnum.NOT_ON.getCode());
UserDO userDO = userRepository.getById(cmd.getId());
if(userDO == null){
throw new BizException("用户不存在");
}
if(userDO.getFlowFlag()!=null && !userDO.getFlowFlag().equals(cmd.getFlowFlag())){
// 已完善,与旧数据对比
List<UserCorpRecordDO> userCorpRecordDOList = userCorpRecordRepository.getInfoListByUserId(cmd.getId());
if(CollUtil.isNotEmpty(userCorpRecordDOList)){
throw new BizException("该用户尚有未离职企业,不能修人员流动状态");
}
}
userGateway.update(userE);
@ -157,10 +166,6 @@ public class UserAddExe {
if(CollUtil.isNotEmpty(userCorpDOS)){
throw new BizException("该用户在当前企业存在未离职信息,无法入职");
}
/**
* ,
*/
// 把user表和user_corp表相关企业,部门,岗位数据补充完整
UserE userE = new UserE();

View File

@ -5,10 +5,13 @@ import com.alibaba.cola.exception.BizException;
import com.jjb.saas.system.client.user.facade.UserFacade;
import com.zcloud.basic.info.constant.RedisConstant;
import com.zcloud.basic.info.domain.enums.UserEmploymentFlagEnum;
import com.zcloud.basic.info.domain.enums.UserFlowFlagEnum;
import com.zcloud.basic.info.domain.gateway.UserGateway;
import com.zcloud.basic.info.dto.AppUserLogOutCmd;
import com.zcloud.basic.info.persistence.dataobject.UserCorpDO;
import com.zcloud.basic.info.persistence.dataobject.UserCorpRecordDO;
import com.zcloud.basic.info.persistence.dataobject.UserDO;
import com.zcloud.basic.info.persistence.repository.UserCorpRecordRepository;
import com.zcloud.basic.info.persistence.repository.UserCorpRepository;
import com.zcloud.basic.info.persistence.repository.UserRepository;
import com.zcloud.gbscommon.utils.Const;
@ -38,6 +41,7 @@ public class UserRemoveExe {
private UserFacade userFacade;
// @Autowired
private ZcloudRedisUtil zcloudRedisUtil;
private final UserCorpRecordRepository userCorpRecordRepository;
@Transactional(rollbackFor = Exception.class)
public boolean execute(Long id) {
@ -64,6 +68,19 @@ public class UserRemoveExe {
zcloudRedisUtil.del(RedisConstant.PHONE_CODE_KEY + userDO.getPhone());
try {
//TODO 处理所有未完成的工作,如果是非固定人员,包括所有企业的未完成工作
// 如果是固定人员,判断是否离职
if(UserFlowFlagEnum.FIXED.equals(userDO.getEmploymentFlag().toString())&&UserEmploymentFlagEnum.ON.equals(userDO.getEmploymentFlag().toString())){
throw new BizException("您目前还有未离职信息,无法直接注销,请先在\"就职单位\"页面中离职");
}else if(UserFlowFlagEnum.FIXED.equals(userDO.getEmploymentFlag().toString())){
List<UserCorpDO> userCorpDOS = userCorpRepository.getONCorpInfo(cmd.getId());
if(CollUtil.isNotEmpty(userCorpDOS)){
throw new BizException("您目前还有未离职信息,无法直接注销,请先在\"就职单位\"页面中离职");
}
}
// 删除底座用户信息
userFacade.delete(cmd.getId());
// 删除用户表
@ -71,6 +88,10 @@ public class UserRemoveExe {
userGateway.deletedUserById(userId);
// 删除user_corp表
userCorpRepository.removeByUserId(userId);
} catch (Exception e){
e.printStackTrace();
throw new BizException("删除失败");

View File

@ -7,6 +7,7 @@ import com.alibaba.cola.dto.SingleResponse;
import com.alibaba.cola.exception.BizException;
import com.jjb.saas.framework.auth.utils.AuthContext;
import com.jjb.saas.system.client.user.facade.UserFacade;
import com.jjb.saas.system.enums.user.UserAuditStatusEnum;
import com.zcloud.basic.info.constant.RedisConstant;
import com.zcloud.basic.info.command.convertor.UserJobHandoverCoConvertor;
import com.zcloud.basic.info.domain.enums.*;
@ -83,32 +84,21 @@ public class UserUpdateExe {
UserDO userDO = userRepository.getInfoById(userUpdateCmd.getId());
UserE oldUserE = new UserE();
BeanUtils.copyProperties(userDO, oldUserE);
boolean transferPositionFlag = userE.verifyTransferPosition(oldUserE, userE);
String corpName = null;
// boolean transferPositionFlag = userE.verifyTransferPosition(oldUserE, userE);
boolean transferFlowFlag = userE.verifyTransferFlow(oldUserE, userE);
if(transferFlowFlag){
List<UserCorpRecordDO> userCorpRecordDOList = userCorpRecordRepository.getInfoListByUserId(userDO.getId());
if(CollUtil.isNotEmpty(userCorpRecordDOList)){
throw new BizException("该用户尚有未离职企业,不能修人员流动状态");
}
}
boolean res = userGateway.update(userE);
// 保存履职记录
if (!res) {
throw new BizException("修改失败");
}
UserCorpDO infoByUserId = userCorpRepository.getInfoByUserId(userDO.getId(), AuthContext.getTenantId());
if (UserFlowFlagEnum.FLOW.getCode().equals(userUpdateCmd.getFlowFlag())) {
//流动人员,修改部门企业等信息
if (infoByUserId != null) {
UserCorpE userCorpE = new UserCorpE();
BeanUtils.copyProperties(infoByUserId, userCorpE);
userCorpE.initUpdate(userE);
userCorpGateway.update(userCorpE);
} else {
UserCorpE userCorpE = new UserCorpE();
BeanUtils.copyProperties(oldUserE, userCorpE);
BeanUtils.copyProperties(userE, userCorpE);
// userCorpE.initAdd( userE,oldUserE);
userCorpE.setId(null);
userCorpGateway.add(userCorpE);
BeanUtils.copyProperties(userCorpE, infoByUserId);
}
}
/* if (transferPositionFlag) {
//保存用户变更记录
CorpInfoDO corpInfoDO = corpInfoRepository.getById(userE.getCorpinfoId());
@ -243,6 +233,8 @@ public class UserUpdateExe {
// //TODO 离职发送,循环调用,失败的话,返回失败,
ResignatioChangeJob(allJob);
}
//TODO gbs 处理离职
}
@ -251,19 +243,12 @@ public class UserUpdateExe {
//获取用户信息,并更新审核状态
UserDO userDO = userRepository.getInfoById(userReviewStatusCmd.getUserId());
//
UserEmploymentFlagEnum employmentFlagEnum = UserEmploymentFlagEnum.getByCode(userReviewStatusCmd.getEmploymentFlag());
Integer employmentFlagAfter = null;
switch (employmentFlagEnum) {
case ENTRY_AUDIT:
//入职待审核
ReviewEntryAudit(userDO, userReviewStatusCmd);
break;
case RESIGNATION_AUDIT:
//离职待审核
ReviewResignationAudit(userDO, userReviewStatusCmd);
break;
default:
throw new IllegalArgumentException("审核记录已完成");
if(UserEmploymentFlagEnum.ENTRY_AUDIT.getCode().equals(userReviewStatusCmd.getEmploymentFlag())){
//入职待审核
ReviewEntryAudit(userDO, userReviewStatusCmd);
}else if(UserEmploymentFlagEnum.RESIGNATION_AUDIT.getCode().equals(userReviewStatusCmd.getEmploymentFlag())){
//离职待审核
ReviewResignationAudit(userDO, userReviewStatusCmd);
}
}
@ -275,7 +260,6 @@ public class UserUpdateExe {
*/
private void ReviewResignationAudit(UserDO userDO, UserReviewStatusCmd userReviewStatusCmd) {
Integer reviewStatus = userReviewStatusCmd.getReviewStatus();
//TODO 驳回需要待处理,暂时按照只能通过处理
Integer employmentFlag = UserChangeRecordStatusEnum.APPROVED.getCode().equals(reviewStatus) ? UserEmploymentFlagEnum.RESIGNATION.getCode() : UserEmploymentFlagEnum.ON.getCode();
UserE userE = null;
Long corpinfoId = userReviewStatusCmd.getCorpinfoId() == null ? AuthContext.getTenantId() : userReviewStatusCmd.getCorpinfoId();
@ -290,9 +274,11 @@ public class UserUpdateExe {
if (userE == null) {
return;
}
UserE userEOld = new UserE();
BeanUtils.copyProperties(userDO, userEOld);
if (UserChangeRecordStatusEnum.APPROVED.getCode().equals(reviewStatus)) {
//修改企业入职记录
UserCorpRecordDO userCorpRecordDO = userCorpRecordRepository.getInfoByUserId(userDO.getId(), corpinfoId, UserEmploymentFlagEnum.RESIGNATION_AUDIT.getCode());
UserCorpRecordDO userCorpRecordDO = userCorpRecordRepository.getInfoByUserStatus(userDO.getId(), corpinfoId, UserChangeRecordStatusEnum.PENDING.getCode());
UserCorpRecordE userCorpRecordE = new UserCorpRecordE();
if (userCorpRecordDO != null) {
BeanUtils.copyProperties(userCorpRecordDO, userCorpRecordE);
@ -303,7 +289,7 @@ public class UserUpdateExe {
userCorpRecordGateway.add(userCorpRecordE);
}
UserChangeRecordE userChangeRecordE = new UserChangeRecordE();
userChangeRecordE.executeReviewStatus(userE, UserEmploymentFlagEnum.RESIGNATION.getCode(),UserChangeRecordStatusEnum.APPROVED.getCode());
userChangeRecordE.executeReviewStatus(userEOld, UserEmploymentFlagEnum.RESIGNATION.getCode(),UserChangeRecordStatusEnum.APPROVED.getCode());
userChangeRecordGateway.add(userChangeRecordE);
////TODO 通知GBS用户绑定租户
@ -317,7 +303,7 @@ public class UserUpdateExe {
}
} else {
//驳回
UserCorpRecordDO userCorpRecordDO = userCorpRecordRepository.getInfoByUserId(userDO.getId(), corpinfoId, UserEmploymentFlagEnum.RESIGNATION_AUDIT.getCode());
UserCorpRecordDO userCorpRecordDO = userCorpRecordRepository.getInfoByUserStatus(userDO.getId(), corpinfoId, UserChangeRecordStatusEnum.PENDING.getCode());
UserCorpRecordE userCorpRecordE = new UserCorpRecordE();
if (userCorpRecordDO != null) {
BeanUtils.copyProperties(userCorpRecordDO, userCorpRecordE);
@ -328,14 +314,15 @@ public class UserUpdateExe {
userCorpRecordGateway.add(userCorpRecordE);
}
UserChangeRecordE userChangeRecordE = new UserChangeRecordE();
userChangeRecordE.executeReviewStatus(userE, UserEmploymentFlagEnum.ON.getCode(),UserChangeRecordStatusEnum.REJECTED.getCode());
userChangeRecordE.executeReviewStatus(userEOld, UserEmploymentFlagEnum.ON.getCode(),UserChangeRecordStatusEnum.REJECTED.getCode());
userChangeRecordGateway.add(userChangeRecordE);
}
}
//入职待审核
private void ReviewEntryAudit(UserDO userDO, UserReviewStatusCmd userReviewStatusCmd) {
Integer reviewStatus = userReviewStatusCmd.getReviewStatus();
//TODO 驳回需要待处理,暂时按照只能通过处理
// 驳回需要待处理,
Integer employmentFlag = UserChangeRecordStatusEnum.APPROVED.getCode().equals(reviewStatus) ? UserEmploymentFlagEnum.ON.getCode() : UserEmploymentFlagEnum.NOT_ON.getCode();
UserE userE = null;
Long corpinfoId = userReviewStatusCmd.getCorpinfoId() == null ? AuthContext.getTenantId() : userReviewStatusCmd.getCorpinfoId();
@ -350,27 +337,21 @@ public class UserUpdateExe {
if (userE == null) {
return;
}
UserE userEOld = new UserE();
BeanUtils.copyProperties(userDO, userEOld);
if (UserChangeRecordStatusEnum.APPROVED.getCode().equals(reviewStatus)) {
//增加企业入职记录
//增加用户入职企业. 驳回不增加下边信息
/* CorpInfoDO corpInfoDO = corpInfoRepository.getById(userE.getCorpinfoId());
DepartmentDO departmentDO = departmentRepository.getById(userE.getDepartmentId());
UserCorpRecordE userCorpRecordE = new UserCorpRecordE();
BeanUtils.copyProperties(userDO, userCorpRecordE);
userCorpRecordE.initAdd(userE, corpInfoDO.getCorpName(), departmentDO.getName());
userCorpRecordGateway.add(userCorpRecordE);*/
UserCorpRecordDO userCorpRecordDO = userCorpRecordRepository.getInfoByUserId(userDO.getId(), corpinfoId, UserEmploymentFlagEnum.ENTRY_AUDIT.getCode());
UserCorpRecordDO userCorpRecordDO = userCorpRecordRepository.getInfoByUserStatus(userDO.getId(), corpinfoId, UserChangeRecordStatusEnum.PENDING.getCode());
UserCorpRecordE userCorpRecordE = new UserCorpRecordE();
if (userCorpRecordDO != null) {
BeanUtils.copyProperties(userCorpRecordDO, userCorpRecordE);
userCorpRecordE.executeEntryAudit(userCorpRecordE, userE, UserEmploymentFlagEnum.ON.getCode(), UserChangeRecordStatusEnum.APPROVED.getCode());
userCorpRecordGateway.update(userCorpRecordE);
}
// 增加用户变更记录 ,获取变更记录
UserChangeRecordE userChangeRecordE = new UserChangeRecordE();
userChangeRecordE.executeReviewStatus(userE, UserEmploymentFlagEnum.ON.getCode(),UserChangeRecordStatusEnum.APPROVED.getCode());
userChangeRecordE.executeReviewStatus(userEOld, UserEmploymentFlagEnum.ON.getCode(),UserChangeRecordStatusEnum.APPROVED.getCode());
userCorpRecordE.setStartTime( LocalDateTime.now());
userChangeRecordGateway.add(userChangeRecordE);
@ -379,7 +360,7 @@ public class UserUpdateExe {
} else {
//驳回
//驳回
UserCorpRecordDO userCorpRecordDO = userCorpRecordRepository.getInfoByUserId(userDO.getId(), corpinfoId, UserEmploymentFlagEnum.ENTRY_AUDIT.getCode());
UserCorpRecordDO userCorpRecordDO = userCorpRecordRepository.getInfoByUserStatus(userDO.getId(), corpinfoId, UserChangeRecordStatusEnum.PENDING.getCode());
UserCorpRecordE userCorpRecordE = new UserCorpRecordE();
if (userCorpRecordDO != null) {
BeanUtils.copyProperties(userCorpRecordDO, userCorpRecordE);
@ -387,7 +368,7 @@ public class UserUpdateExe {
userCorpRecordGateway.update(userCorpRecordE);
}
UserChangeRecordE userChangeRecordE = new UserChangeRecordE();
userChangeRecordE.executeReviewStatus(userE, UserEmploymentFlagEnum.NOT_ON.getCode(),UserChangeRecordStatusEnum.REJECTED.getCode());
userChangeRecordE.executeReviewStatus(userEOld, UserEmploymentFlagEnum.NOT_ON.getCode(),UserChangeRecordStatusEnum.REJECTED.getCode());
userChangeRecordGateway.add(userChangeRecordE);
}
@ -409,6 +390,8 @@ public class UserUpdateExe {
}
employmentFlagBefore = userCorpDO.getEmploymentFlag();
userE = userCorpRepository.executeResignation(userCorpDO, corpinfoId, UserEmploymentFlagEnum.RESIGNATION_AUDIT.getCode());
userCorpDO.setEmploymentFlag(UserEmploymentFlagEnum.RESIGNATION_AUDIT.getCode());
userCorpRepository.updateById(userCorpDO);
} else {
userE = new UserE();
BeanUtils.copyProperties(userDO, userE);
@ -416,12 +399,14 @@ public class UserUpdateExe {
userE.setEmploymentFlag(UserEmploymentFlagEnum.RESIGNATION_AUDIT.getCode());
userGateway.update(userE);
}
UserCorpRecordDO userCorpRecordDO = userCorpRecordRepository.getInfoByUserId(userDO.getId(), corpinfoId, UserEmploymentFlagEnum.ON.getCode());
userCorpRecordDO.setStatus(UserChangeRecordStatusEnum.PENDING.getCode());
userCorpRecordRepository.updateById(userCorpRecordDO);
//插入变更记录
UserChangeRecordE userChangeRecordE = new UserChangeRecordE();
userChangeRecordE.executeResignation(userE, UserEmploymentFlagEnum.RESIGNATION_AUDIT.getCode(), UserChangeRecordStatusEnum.PENDING.getCode(), employmentFlagBefore);
userChangeRecordE.executeResignation(userE, UserEmploymentFlagEnum.RESIGNATION.getCode(), UserChangeRecordStatusEnum.PENDING.getCode(), employmentFlagBefore);
userChangeRecordGateway.add(userChangeRecordE);
//TODO 处理未完成工作
// 处理未完成工作
List<UserJobHandoverDO> allJob = getUserJob(userDO.getId(),corpinfoId,userChangeRecordE.getUserChangeRecordId());
if(CollUtil.isNotEmpty(allJob)){
userJobHandoverRepository.saveBatch(allJob);
@ -459,20 +444,6 @@ public class UserUpdateExe {
allJob.add(userJobHandoverDO);
});
}
//循环获取所有未完成工作
/* userJobFacadeList.forEach(userJobFacade -> {
try {
MultiResponse<ZcloudUserJobCo> userJob = userJobFacade.getUserJob(zcloudUserJobQry);
List<ZcloudUserJobCo> data = userJob.getData();
List<UserJobHandoverDO> userJobHandoverEList = userJobHandoverCoConvertor.converCosToDOs( data);
userJobHandoverEList.forEach(userJobHandoverE -> {
userJobHandoverE.setUserChangeRecordId(userChangeRecordId);
});
allJob.addAll(userJobHandoverEList);
}catch (Exception e){
log.error("获取用户未完成工作失败, userId: {}, corpinfoId: {},类信息{}", userId, corpinfoId,userJobFacade.getClass(),e);
}
});*/
return allJob;
}
private void ResignatioChangeJob(List<UserJobHandoverDO> allJob) {
@ -485,14 +456,12 @@ public class UserUpdateExe {
cmd.setUserId(info.getUserId());
//隐患信息需要传入企业id
cmd.setDeptId(info.getCorpinfoId());
SingleResponse singleResponse = zcloudHiddenFacade.updateHiddenByUserId(cmd);
zcloudHiddenFacade.updateHiddenByUserId(cmd);
userJobHandoverRepository.processUserJobHandover(info.getUserChangeRecordId());
//隐患出异常是直接抛异常
break;
}
});

View File

@ -9,14 +9,20 @@ import com.alibaba.cola.exception.BizException;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.jjb.saas.framework.auth.model.SSOUser;
import com.jjb.saas.framework.auth.utils.AuthContext;
import com.zcloud.basic.info.command.convertor.CorpInfoCoConvertor;
import com.zcloud.basic.info.command.convertor.UserCoConvertor;
import com.zcloud.basic.info.domain.enums.UserFlowFlagEnum;
import com.zcloud.basic.info.domain.gateway.UserGateway;
import com.zcloud.basic.info.domain.model.UserE;
import com.zcloud.basic.info.dto.*;
import com.zcloud.basic.info.dto.clientobject.CorpDepartmentCO;
import com.zcloud.basic.info.dto.clientobject.CorpInfoCO;
import com.zcloud.basic.info.dto.clientobject.UserCO;
import com.zcloud.basic.info.dto.clientobject.UserXmfCO;
import com.zcloud.basic.info.persistence.dataobject.CorpInfoDO;
import com.zcloud.basic.info.persistence.dataobject.UserCorpDO;
import com.zcloud.basic.info.persistence.dataobject.UserDO;
import com.zcloud.basic.info.persistence.repository.CorpInfoRepository;
import com.zcloud.basic.info.persistence.repository.UserCorpRepository;
import com.zcloud.basic.info.persistence.repository.UserRepository;
import com.zcloud.gbscommon.excelEntity.UserExcelExportEntity;
@ -28,6 +34,7 @@ import org.springframework.stereotype.Component;
import javax.servlet.http.HttpServletResponse;
import java.util.*;
import java.util.stream.Collectors;
/**
@ -43,6 +50,8 @@ public class UserQueryExe {
private final UserGateway userGateway;
private final UserCoConvertor userCoConvertor;
private final UserCorpRepository userCorpRepository;
private final CorpInfoRepository corpInfoRepository;
private final CorpInfoCoConvertor corpInfoCoConvertor;
/**
*
@ -202,5 +211,61 @@ public class UserQueryExe {
return PageResponse.of(userXmfCOList, pageResponse.getTotalCount(), pageResponse.getPageSize(), pageResponse.getPageIndex());
}
public List<CorpInfoCO> login(UserAppLoginCmd cmd) {
//返回企业列表
UserDO userDO = userRepository.getByPhone(cmd.getPhone());
if(userDO == null){
throw new BizException("手机号不存在");
}
//判断密码是否正确
UserE userE = new UserE();
userE.setPassword(userDO.getPassword());
userE.encryptionPassword();
if(!userE.getPassword().equals(userDO.getPassword())){
throw new BizException("密码错误");
}
//判断是流动人员还是固定人员
if(UserFlowFlagEnum.FIXED.getCode().equals(userDO.getFlowFlag()) && userDO.getCorpinfoId() != null){
CorpInfoDO corpInfoDO = corpInfoRepository.getById(userDO.getCorpinfoId());
CorpInfoCO corpInfoCO = new CorpInfoCO();
BeanUtils.copyProperties(corpInfoDO, corpInfoCO);
return Arrays.asList(corpInfoCO);
}
if(UserFlowFlagEnum.FLOW.getCode().equals(userDO.getFlowFlag())){
List<UserCorpDO> userCorpDOS = userCorpRepository.getONCorpInfo(userDO.getId());
if(CollUtil.isEmpty(userCorpDOS)){
return null;
}
List<Long> corpinfoIds = userCorpDOS.stream().map(UserCorpDO::getCorpinfoId).collect(Collectors.toList());
List<CorpInfoDO> corpInfoDOList = corpInfoRepository.getByIdList(corpinfoIds);
List<CorpInfoCO> corpInfoCOS = corpInfoCoConvertor.converDOsToCOs(corpInfoDOList);
return corpInfoCOS;
}
return null;
}
public List<CorpInfoCO> getUserCorpList(Long id) {
//返回企业列表
UserDO userDO = userRepository.getById(id);
//判断是流动人员还是固定人员
if(UserFlowFlagEnum.FIXED.getCode().equals(userDO.getFlowFlag()) && userDO.getCorpinfoId() != null){
CorpInfoDO corpInfoDO = corpInfoRepository.getById(userDO.getCorpinfoId());
CorpInfoCO corpInfoCO = new CorpInfoCO();
BeanUtils.copyProperties(corpInfoDO, corpInfoCO);
return Arrays.asList(corpInfoCO);
}
if(UserFlowFlagEnum.FLOW.getCode().equals(userDO.getFlowFlag())){
List<UserCorpDO> userCorpDOS = userCorpRepository.getONCorpInfo(userDO.getId());
if(CollUtil.isEmpty(userCorpDOS)){
return null;
}
List<Long> corpinfoIds = userCorpDOS.stream().map(UserCorpDO::getCorpinfoId).collect(Collectors.toList());
List<CorpInfoDO> corpInfoDOList = corpInfoRepository.getByIdList(corpinfoIds);
List<CorpInfoCO> corpInfoCOS = corpInfoCoConvertor.converDOsToCOs(corpInfoDOList);
return corpInfoCOS;
}
return null;
}
}

View File

@ -36,7 +36,6 @@ public class UserCorpServiceImpl implements UserCorpServiceI {
@Override
public SingleResponse add(UserCorpAddCmd cmd) {
userCorpAddExe.execute(cmd);
return SingleResponse.buildSuccess();
}

View File

@ -11,6 +11,7 @@ import com.zcloud.basic.info.command.UserRemoveExe;
import com.zcloud.basic.info.command.UserUpdateExe;
import com.zcloud.basic.info.command.query.UserQueryExe;
import com.zcloud.basic.info.dto.*;
import com.zcloud.basic.info.dto.clientobject.CorpInfoCO;
import com.zcloud.basic.info.dto.clientobject.UserCO;
import com.zcloud.basic.info.dto.clientobject.UserXmfCO;
import lombok.AllArgsConstructor;
@ -207,5 +208,16 @@ public class UserServiceImpl implements UserServiceI {
public void checkOnboarding(AppUserLogOutCmd cmd) {
userRemoveExe.executeCheckOnboarding(cmd);
}
@Override
public List<CorpInfoCO> login(UserAppLoginCmd cmd) {
return userQueryExe.login(cmd);
}
@Override
public List<CorpInfoCO> getUserCorpList(Long id) {
return userQueryExe.getUserCorpList(id);
}
}

View File

@ -6,6 +6,7 @@ import com.alibaba.cola.dto.PageResponse;
import com.alibaba.cola.dto.Response;
import com.alibaba.cola.dto.SingleResponse;
import com.zcloud.basic.info.dto.*;
import com.zcloud.basic.info.dto.clientobject.CorpInfoCO;
import com.zcloud.basic.info.dto.clientobject.UserCO;
import com.zcloud.basic.info.dto.clientobject.UserXmfCO;
import org.springframework.web.multipart.MultipartFile;
@ -81,5 +82,9 @@ public interface UserServiceI {
void logOut(AppUserLogOutCmd cmd);
void checkOnboarding(AppUserLogOutCmd cmd);
List<CorpInfoCO> login(UserAppLoginCmd cmd);
List<CorpInfoCO> getUserCorpList(Long id);
}

View File

@ -0,0 +1,27 @@
package com.zcloud.basic.info.dto;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import javax.validation.constraints.NotEmpty;
/**
* web-client
*
* @Author zhangyue
* @Date 2025-11-04 14:07:36
*/
@Data
public class UserAppLoginCmd {
@ApiModelProperty(value = "手机号", name = "phone", required = true)
@NotEmpty(message = "手机号不能为空")
private String phone;
//密码
@ApiModelProperty(value = "密码", name = "password", required = true)
@NotEmpty(message = "密码不能为空")
private String password;
}

View File

@ -1,8 +1,11 @@
package com.zcloud.basic.info.dto;
import com.alibaba.cola.dto.PageQuery;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import javax.validation.constraints.NotNull;
/**
* web-client
@ -23,6 +26,9 @@ public class UserCorpRecordPageQry extends PageQuery {
* - `le`:
* - `ne`: SQL!=
*/
private String likeUserCorpRecordId;
@ApiModelProperty("不等于的入职状态,(就职企业传0)1-在职 0-离职, 11-入职待审核, 10-离职待审核")
@NotNull(message = "状态不能为空")
private Integer neEmploymentFlag;
}

View File

@ -3,6 +3,7 @@ package com.zcloud.basic.info.dto;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import javax.validation.constraints.NotNull;
import java.io.Serializable;
@ -26,15 +27,18 @@ public class UserReviewStatusCmd implements Serializable {
* - `ne`: SQL!=
*/
@ApiModelProperty(value = "用户id")
@NotNull(message = "用户不能为空")
private Long userId;
//企业id
@ApiModelProperty(value = "企业id")
@NotNull(message = "企业不能为空")
private Long corpinfoId;
//审核状态
@ApiModelProperty(value = "审核状态,2-通过,3-驳回")
@NotNull(message = "审核状态不能为空")
private Integer reviewStatus;
//审核状态
@ApiModelProperty(value = "入职状态1-在职 0-离职, 11-入职待审核, 10-离职待审核")
@ApiModelProperty(value = "入职状态1-在职 0-离职,")
private Integer employmentFlag;

View File

@ -0,0 +1,18 @@
package com.zcloud.basic.info.domain.enums;
import lombok.Getter;
//是否启用1:启用,0:关闭
@Getter
public enum CorpUseFlagEnum {
NO(0,"关闭"),
YES(1,"启用"),
;
private final Integer code;
private final String name;
CorpUseFlagEnum(Integer code,String name) {
this.code = code;
this.name = name;
}
}

View File

@ -22,7 +22,6 @@ public enum UserEmploymentFlagEnum {
END_OF_LABOR_DISPATCH(8, "劳务派遣结束"),
ENTRY_AUDIT(11, "入职待审核"),
RESIGNATION_AUDIT(10, "离职待审核"),
// REJECT(12, "驳回"),
;
private final Integer code;
private final String desc;

View File

@ -79,7 +79,7 @@ public class UserChangeRecordE extends BaseE {
this.setDepartmentNameAfter(departmentName);
this.setPostIdAfter(userE.getPostId());
this.setPostNameAfter(userE.getPostName());
this.setUserStatusAfter(UserEmploymentFlagEnum.ENTRY_AUDIT.getCode());
this.setUserStatusAfter(UserEmploymentFlagEnum.ON.getCode());
this.setStatus(UserChangeRecordStatusEnum.PENDING.getCode());
}

View File

@ -87,7 +87,7 @@ public class UserCorpRecordE extends BaseE {
this.departmentName = departmentName;
this.postId = userE.getPostId();
this.postName = userE.getPostName();
this.employmentFlag = UserEmploymentFlagEnum.ENTRY_AUDIT.getCode();
this.employmentFlag = UserEmploymentFlagEnum.NOT_ON.getCode();
this.status = UserChangeRecordStatusEnum.PENDING.getCode();
}

View File

@ -286,5 +286,15 @@ public class UserE extends BaseE {
this.setCorpinfoId(userCorpE.getCorpinfoId());
this.setEmploymentFlag(userCorpE.getEmploymentFlag());
}
public boolean verifyTransferFlow(UserE oldUserE, UserE newUserE) {
if(newUserE.getFlowFlag() == null){
return false;
}
if (!oldUserE.getFlowFlag().equals(newUserE.getFlowFlag())) {
return true;
}
return false;
}
}

View File

@ -35,6 +35,7 @@ public class UserDO extends BaseDO {
@ApiModelProperty(value = "企业名称")
@TableField(exist = false)
private String corpinfoName;
//是否主账号1是0否
@ApiModelProperty(value = "是否主账号1是0否")
private Integer mainCorpFlag;
@ -134,7 +135,6 @@ public class UserDO extends BaseDO {
//密码
@ApiModelProperty(value = "密码")
@TableField(exist = false)
private String password;
//密码
@ApiModelProperty(value = "新密码")

View File

@ -33,5 +33,7 @@ public interface CorpInfoRepository extends BaseRepository<CorpInfoDO> {
PageResponse<CorpInfoDO> corpUserMiddlePage(Map<String, Object> parmas);
CorpInfoDO getCorpInfoByCorpName(String corpName);
List<CorpInfoDO> getByIdList(List<Long> corpinfoIds);
}

View File

@ -4,6 +4,8 @@ import com.alibaba.cola.dto.PageResponse;
import com.jjb.saas.framework.repository.repo.BaseRepository;
import com.zcloud.basic.info.persistence.dataobject.UserCorpRecordDO;
import javax.validation.constraints.NotNull;
import java.util.List;
import java.util.Map;
/**
@ -16,5 +18,8 @@ public interface UserCorpRecordRepository extends BaseRepository<UserCorpRecordD
PageResponse<UserCorpRecordDO> listPage(Map<String, Object> params);
UserCorpRecordDO getInfoByUserId(Long id, Long corpinfoId, Integer code);
UserCorpRecordDO getInfoByUserStatus(Long id, Long corpinfoId, Integer status);
List<UserCorpRecordDO> getInfoListByUserId(Long id);
}

View File

@ -5,6 +5,7 @@ import com.jjb.saas.framework.repository.repo.BaseRepository;
import com.zcloud.basic.info.domain.model.UserE;
import com.zcloud.basic.info.persistence.dataobject.UserCorpDO;
import javax.validation.constraints.NotNull;
import java.util.List;
import java.util.Map;
@ -33,5 +34,6 @@ public interface UserCorpRepository extends BaseRepository<UserCorpDO> {
void removeByUserId(Long userId);
List<UserCorpDO> getONCorpInfo(@NotNull(message = "用户id不能为空") Long id);
}

View File

@ -23,6 +23,7 @@ import com.jjb.saas.system.client.unit.request.OpeUnitUpdateCmd;
import com.jjb.saas.system.client.user.facade.UserFacade;
import com.jjb.saas.system.client.user.request.UserUpdateCmd;
import com.zcloud.basic.info.domain.enums.CorpTypeEnum;
import com.zcloud.basic.info.domain.enums.CorpUseFlagEnum;
import com.zcloud.basic.info.domain.enums.MenuEnum;
import com.zcloud.basic.info.persistence.dataobject.CorpInfoDO;
import com.zcloud.basic.info.persistence.mapper.CorpInfoMapper;
@ -203,5 +204,13 @@ public class CorpInfoRepositoryImpl extends BaseRepositoryImpl<CorpInfoMapper, C
queryWrapper.eq("corp_name", corpName);
return corpInfoMapper.selectOne(queryWrapper);
}
@Override
public List<CorpInfoDO> getByIdList(List<Long> corpinfoIds) {
QueryWrapper<CorpInfoDO> queryWrapper = new QueryWrapper<>();
queryWrapper.in("id", corpinfoIds);
queryWrapper.eq("use_flag", CorpUseFlagEnum.YES.getCode());
return corpInfoMapper.selectList(queryWrapper);
}
}

View File

@ -5,6 +5,7 @@ import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.jjb.saas.framework.repository.common.PageHelper;
import com.jjb.saas.framework.repository.repo.impl.BaseRepositoryImpl;
import com.zcloud.basic.info.domain.enums.UserEmploymentFlagEnum;
import com.zcloud.basic.info.persistence.dataobject.UserCorpRecordDO;
import com.zcloud.basic.info.persistence.mapper.UserCorpRecordMapper;
import com.zcloud.basic.info.persistence.repository.UserCorpRecordRepository;
@ -13,6 +14,7 @@ import com.zcloud.gbscommon.utils.Query;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;
import java.util.List;
import java.util.Map;
/**
@ -44,5 +46,23 @@ public class UserCorpRecordRepositoryImpl extends BaseRepositoryImpl<UserCorpRec
queryWrapper.eq("employment_flag", code);
return userCorpRecordMapper.selectOne(queryWrapper);
}
@Override
public UserCorpRecordDO getInfoByUserStatus(Long id, Long corpinfoId, Integer status) {
QueryWrapper<UserCorpRecordDO> queryWrapper = new QueryWrapper<>();
queryWrapper.eq("user_id", id);
queryWrapper.eq("corpinfo_id", corpinfoId);
queryWrapper.eq("status", status);
return userCorpRecordMapper.selectOne(queryWrapper);
}
//获取用户下未离职的企业
@Override
public List<UserCorpRecordDO> getInfoListByUserId(Long id) {
QueryWrapper<UserCorpRecordDO> queryWrapper = new QueryWrapper<>();
queryWrapper.eq("user_id", id);
queryWrapper.ne("employment_flag", UserEmploymentFlagEnum.RESIGNATION.getCode());
return userCorpRecordMapper.selectList(queryWrapper);
}
}

View File

@ -8,6 +8,7 @@ import com.jjb.saas.framework.repository.repo.impl.BaseRepositoryImpl;
import com.zcloud.basic.info.domain.enums.UserEmploymentFlagEnum;
import com.zcloud.basic.info.domain.model.UserE;
import com.zcloud.basic.info.persistence.dataobject.UserCorpDO;
import com.zcloud.basic.info.persistence.dataobject.UserCorpRecordDO;
import com.zcloud.basic.info.persistence.mapper.UserCorpMapper;
import com.zcloud.basic.info.persistence.repository.UserCorpRepository;
import com.zcloud.gbscommon.utils.PageQueryHelper;
@ -108,6 +109,13 @@ public class UserCorpRepositoryImpl extends BaseRepositoryImpl<UserCorpMapper, U
queryWrapper.eq("user_id", userId);
remove(queryWrapper);
}
@Override
public List<UserCorpDO> getONCorpInfo(Long id) {
QueryWrapper<UserCorpDO> queryWrapper = new QueryWrapper<>();
queryWrapper.eq("user_id", id);
queryWrapper.eq("employment_flag", UserEmploymentFlagEnum.ON.getCode());
return userCorpMapper.selectList(queryWrapper);
}
}

View File

@ -363,6 +363,12 @@ public class UserRepositoryImpl extends BaseRepositoryImpl<UserMapper, UserDO> i
@Override
public void changePassword(Long id, String password) {
//更新本地密码
UserDO userDOUpdate = new UserDO();
userDOUpdate.setId(id);
userDOUpdate.setPassword(password);
updateById(userDOUpdate);
//更新gbs密码
UserUpdatePasswordCmd userUpdatePasswordCmd = new UserUpdatePasswordCmd();
userUpdatePasswordCmd.setId(id);
userUpdatePasswordCmd.setPassword(password);
@ -426,6 +432,11 @@ public class UserRepositoryImpl extends BaseRepositoryImpl<UserMapper, UserDO> i
return Response.buildFailure("原密码不正确");
}
}
//更新本地密码
UserDO userDOUpdate = new UserDO();
userDOUpdate.setId(userDO.getId());
userDOUpdate.setPassword(userDO.getNewPassword());
updateById(userDOUpdate);
// 更新密码
UserUpdatePasswordCmd userUpdatePasswordCmd = new UserUpdatePasswordCmd();