Browse Source

添加用户离职

contract
Yen 2 years ago
parent
commit
6590150396
  1. 2
      src/main/java/com/qs/serve/common/model/enums/BizType.java
  2. 2
      src/main/java/com/qs/serve/modules/seeyon/entity/XltPaymentRecord.java
  3. 6
      src/main/java/com/qs/serve/modules/sys/controller/SysAttachController.java
  4. 79
      src/main/java/com/qs/serve/modules/sys/controller/SysUserController.java
  5. 2
      src/main/java/com/qs/serve/modules/sys/entity/SysAttach.java
  6. 18
      src/main/java/com/qs/serve/modules/sys/entity/SysUser.java
  7. 132
      src/main/java/com/qs/serve/modules/sys/entity/SysUserLeave.java
  8. 51
      src/main/java/com/qs/serve/modules/sys/entity/bo/SysUserLeaveBo.java
  9. 13
      src/main/java/com/qs/serve/modules/sys/entity/dto/SysUserSalesTreeVo.java
  10. 14
      src/main/java/com/qs/serve/modules/sys/mapper/SysUserLeaveMapper.java
  11. 17
      src/main/java/com/qs/serve/modules/sys/service/SysUserLeaveService.java
  12. 28
      src/main/java/com/qs/serve/modules/sys/service/SysUserService.java
  13. 29
      src/main/java/com/qs/serve/modules/sys/service/impl/SysUserLeaveServiceImpl.java
  14. 98
      src/main/java/com/qs/serve/modules/sys/service/impl/SysUserServiceImpl.java

2
src/main/java/com/qs/serve/common/model/enums/BizType.java

@ -43,6 +43,8 @@ public enum BizType {
QUERY("查询"),
LEAVE("离职"),
RESET("重置");
String value;

2
src/main/java/com/qs/serve/modules/seeyon/entity/XltPaymentRecord.java

@ -86,7 +86,7 @@ public class XltPaymentRecord implements Serializable {
@Length(max = 50,message = "发票编号长度不能超过50字")
private String cSBVCode;
/** 发货单 */
/** */
@Length(max = 1000,message = "发货单长度不能超过1000字")
private String cDLCode;

6
src/main/java/com/qs/serve/modules/sys/controller/SysAttachController.java

@ -68,15 +68,17 @@ public class SysAttachController {
FileUtil.createTempFile(new File(uploadPath+prefix));
String newName = IdUtil.timeStampId();
String fileType = mimeType.toLowerCase(Locale.ROOT);
File dest = new File(uploadPath + prefix + newName + fileType);
String relativeName = prefix + newName + fileType;
File dest = new File(uploadPath + relativeName);
Long size = file.getSize();
file.transferTo(dest);
String path = uploadProperties.getProxyUrl() + prefix + newName + fileType;
String path = uploadProperties.getProxyUrl() + relativeName;
SysAttach attach = new SysAttach();
attach.setName(fileOrgName);
attach.setPath(path);
attach.setSize(size);
attach.setFileType(fileType);
attach.setRelativePath(relativeName);
sysAttachService.save(attach);
return R.ok(attach);
} catch (IOException e) {

79
src/main/java/com/qs/serve/modules/sys/controller/SysUserController.java

@ -11,10 +11,7 @@ import com.qs.serve.common.model.dto.R;
import com.qs.serve.common.model.enums.BizType;
import com.qs.serve.common.util.*;
import com.qs.serve.modules.sys.entity.*;
import com.qs.serve.modules.sys.entity.bo.SysUserBatchBo;
import com.qs.serve.modules.sys.entity.bo.SysUserBo;
import com.qs.serve.modules.sys.entity.bo.SysUserParentParam;
import com.qs.serve.modules.sys.entity.bo.SysUserSalesParam;
import com.qs.serve.modules.sys.entity.bo.*;
import com.qs.serve.modules.sys.entity.dto.*;
import com.qs.serve.modules.sys.service.*;
import com.qs.serve.modules.wx.entity.WxUser;
@ -133,41 +130,13 @@ public class SysUserController {
SysUser sysUser = sysUserService.getById(loginUser.getUserId());
sysUser.setAuthorIds(loginUser.getAuthorIds());
sysUser.setAuthorList(loginUser.getAuthorList());
sysUserService.relateInfo(sysUser);
sysUserService.relateInfo(sysUser,true);
sysUser.setPassword(null);
return R.ok(sysUser);
}
//获取检测工号
// @LimitSubmit(message = "请勿频繁操作!!")
// @GetMapping("/getUserCode")
// @PreAuthorize("hasRole('sys:user:query')")
// public R<String> getUserCode(){
// LocalDateTime localDateTime = LocalDateTime.now();
// String timeKey = localDateTime.getYear() + String.format("%02d",localDateTime.getMonthValue());
// String key = RedisCacheKeys.SYS_USER_CODE_KEY + timeKey;
// Integer val = redisService.getInteger(key);
// if(val==null){
// val = 1;
// }else {
// val +=1;
// }
// redisService.set(key,val);
// return R.ok("A"+timeKey+val,R.SUCCESS_TIPS);
// }
//检测工号是否已被使用
// @GetMapping("/checkCode")
// @PreAuthorize("hasRole('sys:user:query')")
// public R<Boolean> checkCode(String code){
// return R.ok(sysUserMapper.checkCode(code)>0L);
// }
/**
* 翻页查询
* @param param
@ -185,7 +154,7 @@ public class SysUserController {
PageUtil.startPage();
List<SysUser> list = sysUserService.listUser(param);
//前端页面展示参数
list.forEach(a->sysUserService.relateInfo(a));
list.forEach(a->sysUserService.relateInfo(a,false));
return R.byPageHelperList(list);
}
@ -227,7 +196,7 @@ public class SysUserController {
return R.ok();
}
sysUser.setPassword(null);
sysUserService.relateInfo(sysUser);
sysUserService.relateInfo(sysUser,true);
List<WxUser> wxUserList = wxUserService.getBySysUserId(sysUser.getId());
sysUser.setWxUserInfoList(wxUserList);
return R.ok(sysUser);
@ -455,5 +424,45 @@ public class SysUserController {
return R.ok();
}
/**
* 人员离职(更新即将离职信息)
* @param userLeaveParam
* @return
*/
@SysLog(title = "人员",desc = "离职调整",biz = BizType.LEAVE)
@PostMapping("/leave")
//@PreAuthorize("hasRole('sys:user:leave')")
public R<?> leave(@RequestBody @Valid SysUserLeaveBo userLeaveParam){
sysUserService.leave(userLeaveParam);
return R.ok();
}
/**
* 取消离职
* @param uid
* @return
*/
@SysLog(title = "人员",desc = "取消离职",biz = BizType.RESET)
@PostMapping("/cancelLeave/{uid}")
//@PreAuthorize("hasRole('sys:user:leave')")
public R<?> cancelLeave(@PathVariable("uid") String uid){
sysUserService.cancelLeave(uid);
return R.ok();
}
/**
* 重新入职
* @param uid
* @return
*/
@SysLog(title = "人员",desc = "重新入职",biz = BizType.RESET)
@PostMapping("/reEntry/{uid}")
//@PreAuthorize("hasRole('sys:user:leave')")
public R<?> reEntry(@PathVariable("uid") String uid){
sysUserService.reEntry(uid);
return R.ok();
}
}

2
src/main/java/com/qs/serve/modules/sys/entity/SysAttach.java

@ -37,6 +37,8 @@ public class SysAttach implements Serializable {
/** 文件类型 */
private String fileType;
private String relativePath;
/** 创建时间 */
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone = "GMT+8")

18
src/main/java/com/qs/serve/modules/sys/entity/SysUser.java

@ -74,9 +74,19 @@ public class SysUser implements Serializable {
/** 系统登录权限【0->停用;1->启用】 */
private Integer loginEnable;
/** 在职状态【0->离职;1->在职】 */
/** 在职状态【0->离职;1->在职;2->准备离职】 */
private Integer servingState;
/** 入职/复职日期 */
@DateTimeFormat(pattern = "yyyy-MM-dd")
@JsonFormat(pattern = "yyyy-MM-dd",timezone = "GMT+8")
private LocalDate servingDate;
/** 离职或上一次离职的日期 */
@DateTimeFormat(pattern = "yyyy-MM-dd")
@JsonFormat(pattern = "yyyy-MM-dd",timezone = "GMT+8")
private LocalDate servingLeaveDate;
/** 是否销售人员 */
private Integer salesFlag;
@ -173,6 +183,12 @@ public class SysUser implements Serializable {
@TableField(exist = false)
private String parentId;
/**
* 离职信息
*/
@TableField(exist = false)
private Object leaveInfo;
/**
* 返回前端过滤敏感信息
* @return

132
src/main/java/com/qs/serve/modules/sys/entity/SysUserLeave.java

@ -0,0 +1,132 @@
package com.qs.serve.modules.sys.entity;
import java.time.LocalDate;
import java.io.Serializable;
import java.math.BigDecimal;
import java.time.LocalDateTime;
import com.baomidou.mybatisplus.annotation.*;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.fasterxml.jackson.annotation.JsonIgnore;
import com.fasterxml.jackson.annotation.JsonProperty;
import lombok.Data;
import org.hibernate.validator.constraints.Length;
import org.springframework.format.annotation.DateTimeFormat;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.NotBlank;
/**
* 用户离职 实体类
* @author YenHex
* @since 2023-02-13
*/
@Data
@TableName("sys_user_leave")
public class SysUserLeave implements Serializable {
private static final long serialVersionUID = 1L;
/** id */
@TableId(type = IdType.AUTO)
private Long id;
/** 离职员工id */
@NotBlank(message = "离职员工id不能为空")
@Length(max = 32,message = "离职员工id长度不能超过32字")
private String userId;
/** 离职员工 */
@Length(max = 32,message = "离职员工长度不能超过32字")
private String userName;
/** 离职员工工号 */
@Length(max = 32,message = "离职员工工号长度不能超过32字")
private String userCode;
/** 状态:0-待处理;1-已处理;2-取消离职 */
@NotNull(message = "状态:0-待处理;1-已处理;2-取消离职不能为空")
private Integer leaveStatus;
/** 离职原因 */
@Length(max = 255,message = "离职原因长度不能超过255字")
private String leaveReason;
/** 离职取消日期 */
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone = "GMT+8")
private LocalDateTime leaveCancelDate;
/** 离职生效日期 */
@DateTimeFormat(pattern = "yyyy-MM-dd")
@JsonFormat(pattern = "yyyy-MM-dd",timezone = "GMT+8")
private LocalDate leaveEffectDate;
/** 工作交接人id */
@Length(max = 32,message = "工作交接人id长度不能超过32字")
private String flowUserId;
/** 工作交接人 */
@Length(max = 32,message = "工作交接人长度不能超过32字")
private String flowUserName;
/** 工作交接人工号 */
@Length(max = 32,message = "工作交接人工号长度不能超过32字")
private String flowUserCode;
/** 客户交接人id */
@Length(max = 32,message = "客户交接人id长度不能超过32字")
private String cusUserId;
/** 客户交接人 */
@Length(max = 32,message = "客户交接人长度不能超过32字")
private String cusUserName;
/** 客户交接人工号 */
@Length(max = 32,message = "客户交接人工号长度不能超过32字")
private String cusUserCode;
/** 角色交接人id */
@Length(max = 32,message = "角色交接人id长度不能超过32字")
private String roleUserId;
/** 角色交接人 */
@Length(max = 32,message = "角色交接人长度不能超过32字")
private String roleUserName;
/** 角色交接人工号 */
@Length(max = 32,message = "角色交接人工号长度不能超过32字")
private String roleUserCode;
/** 创建时间 */
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone = "GMT+8")
@TableField(fill = FieldFill.INSERT)
private LocalDateTime createTime;
/** 创建人 */
@TableField(fill = FieldFill.INSERT)
private String createBy;
/** 更新时间 */
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone = "GMT+8")
@TableField(fill = FieldFill.UPDATE)
private LocalDateTime updateTime;
/** 更新人 */
@TableField(fill = FieldFill.UPDATE)
private String updateBy;
/** 删除标识 */
@JsonIgnore
@JsonProperty
private Boolean delFlag;
/** 系统id */
@JsonIgnore
@JsonProperty
private String tenantId;
}

51
src/main/java/com/qs/serve/modules/sys/entity/bo/SysUserLeaveBo.java

@ -0,0 +1,51 @@
package com.qs.serve.modules.sys.entity.bo;
import java.time.LocalDate;
import java.io.Serializable;
import java.math.BigDecimal;
import java.time.LocalDateTime;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.fasterxml.jackson.annotation.JsonIgnore;
import com.fasterxml.jackson.annotation.JsonProperty;
import lombok.Data;
import org.hibernate.validator.constraints.Length;
import org.springframework.format.annotation.DateTimeFormat;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.NotBlank;
/**
* 用户离职 Bo
* @author YenHex
* @since 2023-02-13
*/
@Data
public class SysUserLeaveBo implements Serializable {
private static final long serialVersionUID = 1L;
/** id */
private Long id;
/** 离职员工id */
private String userId;
/** 离职原因 */
private String leaveReason;
/** 离职生效日期 */
@DateTimeFormat(pattern = "yyyy-MM-dd")
private LocalDate leaveEffectDate;
/** 工作交接人id */
private String flowUserId;
/** 客户交接人id */
private String cusUserId;
/** 角色交接人id */
private String roleUserId;
}

13
src/main/java/com/qs/serve/modules/sys/entity/dto/SysUserSalesTreeVo.java

@ -10,6 +10,7 @@ import lombok.Data;
import org.hibernate.validator.constraints.Length;
import org.springframework.format.annotation.DateTimeFormat;
import java.time.LocalDate;
import java.time.LocalDateTime;
/**
@ -54,10 +55,20 @@ public class SysUserSalesTreeVo extends TreeNode {
@TableField(exist = false)
private Integer loginEnable;
/** 在职状态【0->离职;1->在职】 */
/** 在职状态【0->离职;1->在职;2->准备离职】 */
@TableField(exist = false)
private Integer servingState;
/** 入职/复职日期 */
@DateTimeFormat(pattern = "yyyy-MM-dd")
@JsonFormat(pattern = "yyyy-MM-dd",timezone = "GMT+8")
private LocalDate servingDate;
/** 离职或上一次离职的日期 */
@DateTimeFormat(pattern = "yyyy-MM-dd")
@JsonFormat(pattern = "yyyy-MM-dd",timezone = "GMT+8")
private LocalDate servingLeaveDate;
/** 是否销售人员 */
@TableField(exist = false)
private Integer salesFlag;

14
src/main/java/com/qs/serve/modules/sys/mapper/SysUserLeaveMapper.java

@ -0,0 +1,14 @@
package com.qs.serve.modules.sys.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.qs.serve.modules.sys.entity.SysUserLeave;
/**
* 用户离职 Mapper
* @author YenHex
* @date 2023-02-13
*/
public interface SysUserLeaveMapper extends BaseMapper<SysUserLeave> {
}

17
src/main/java/com/qs/serve/modules/sys/service/SysUserLeaveService.java

@ -0,0 +1,17 @@
package com.qs.serve.modules.sys.service;
import com.baomidou.mybatisplus.extension.service.IService;
import com.qs.serve.modules.sys.entity.SysUser;
import com.qs.serve.modules.sys.entity.SysUserLeave;
/**
* 用户离职 服务接口
* @author YenHex
* @date 2023-02-13
*/
public interface SysUserLeaveService extends IService<SysUserLeave> {
SysUserLeave getOneByUserId(String userId);
}

28
src/main/java/com/qs/serve/modules/sys/service/SysUserService.java

@ -3,7 +3,9 @@ package com.qs.serve.modules.sys.service;
import com.baomidou.mybatisplus.extension.service.IService;
import com.qs.serve.common.framework.security.model.LoginUser;
import com.qs.serve.modules.sys.entity.SysUser;
import com.qs.serve.modules.sys.entity.bo.SysUserLeaveBo;
import java.time.LocalDate;
import java.util.List;
/**
@ -34,7 +36,7 @@ public interface SysUserService extends IService<SysUser> {
*/
List<SysUser> listUser(SysUser sysUser);
void relateInfo(SysUser sysUser);
void relateInfo(SysUser sysUser,boolean loadLeave);
LoginUser buildLoginUser(SysUser sysUser);
@ -42,5 +44,29 @@ public interface SysUserService extends IService<SysUser> {
SysUser listByOaMemberId(String memberId);
/**
* 用户离职
* @param userLeaveParam
*/
void leave(SysUserLeaveBo userLeaveParam);
/**
* 离职执行函数
* @param date 执行日期
*/
void leaveAction(LocalDate date);
/**
* 取消离职
* @param userId
*/
void cancelLeave(String userId);
/**
* 重新入职
* @param userId
*/
void reEntry(String userId);
}

29
src/main/java/com/qs/serve/modules/sys/service/impl/SysUserLeaveServiceImpl.java

@ -0,0 +1,29 @@
package com.qs.serve.modules.sys.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import lombok.AllArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
import com.qs.serve.modules.sys.entity.SysUserLeave;
import com.qs.serve.modules.sys.service.SysUserLeaveService;
import com.qs.serve.modules.sys.mapper.SysUserLeaveMapper;
/**
* 用户离职 服务实现类
* @author YenHex
* @since 2023-02-13
*/
@Slf4j
@Service
@AllArgsConstructor
public class SysUserLeaveServiceImpl extends ServiceImpl<SysUserLeaveMapper,SysUserLeave> implements SysUserLeaveService {
@Override
public SysUserLeave getOneByUserId(String userId) {
LambdaQueryWrapper<SysUserLeave> lqw = new LambdaQueryWrapper<>();
lqw.eq(SysUserLeave::getUserId,userId);
return getOne(lqw,false);
}
}

98
src/main/java/com/qs/serve/modules/sys/service/impl/SysUserServiceImpl.java

@ -9,6 +9,7 @@ import com.qs.serve.common.framework.security.model.LoginUserType;
import com.qs.serve.common.model.enums.HttpCode;
import com.qs.serve.common.util.*;
import com.qs.serve.modules.sys.entity.*;
import com.qs.serve.modules.sys.entity.bo.SysUserLeaveBo;
import com.qs.serve.modules.sys.mapper.*;
import com.qs.serve.modules.sys.service.*;
import lombok.AllArgsConstructor;
@ -16,6 +17,8 @@ import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;
@ -31,6 +34,7 @@ import java.util.stream.Collectors;
public class SysUserServiceImpl extends ServiceImpl<SysUserMapper, SysUser> implements SysUserService {
private final SysUserRoleService sysUserRoleService;
private final SysUserLeaveService sysUserLeaveService;
private final SysRoleMenuMapper sysRoleMenuMapper;
private final SysPermitService sysPermitService;
private final SysRoleService sysRoleService;
@ -79,7 +83,7 @@ public class SysUserServiceImpl extends ServiceImpl<SysUserMapper, SysUser> impl
}
@Override
public void relateInfo(SysUser sysUser) {
public void relateInfo(SysUser sysUser,boolean loadLeave) {
if(sysUser==null){return;}
sysUser.setPassword(null);
List<SysUserRole> userRoles = sysUserRoleService.listByUid(sysUser.getId());
@ -92,6 +96,10 @@ public class SysUserServiceImpl extends ServiceImpl<SysUserMapper, SysUser> impl
if(sysUser.getDeptId()!=null){
sysUser.setDeptInfo(sysDeptMapper.selectById(sysUser.getDeptId()));
}
if(loadLeave){
SysUserLeave sysUserLeave = sysUserLeaveService.getOneByUserId(sysUser.getId());
sysUser.setLeaveInfo(sysUserLeave);
}
}
@ -146,5 +154,93 @@ public class SysUserServiceImpl extends ServiceImpl<SysUserMapper, SysUser> impl
lqw.eq(SysUser::getSyUserId,memberId);
return this.getOne(lqw,false);
}
@Override
public void leave(SysUserLeaveBo param) {
LocalDate currDate = LocalDate.now();
SysUser leaveUser = this.getById(param.getUserId());
if(currDate.isBefore(param.getLeaveEffectDate())){
Assert.throwEx("离职日期必须大于等于今天");
}
if(leaveUser.getServingState().equals(0)){
Assert.throwEx("员工已离职");
}
LambdaQueryWrapper<SysUserLeave> leaveLqw = new LambdaQueryWrapper<>();
leaveLqw.eq(SysUserLeave::getUserId,param.getUserId());
leaveLqw.eq(SysUserLeave::getLeaveStatus,0);
SysUserLeave userLeaveObj = sysUserLeaveService.getOne(leaveLqw);
if(userLeaveObj==null){
userLeaveObj = new SysUserLeave();
}
if(StringUtils.hasText(param.getCusUserId())){
SysUser cusUser = this.getById(param.getCusUserId());
userLeaveObj.setCusUserId(cusUser.getId());
userLeaveObj.setCusUserCode(cusUser.getCode());
userLeaveObj.setCusUserName(cusUser.getName());
}
if(StringUtils.hasText(param.getFlowUserId())){
SysUser flowUser = this.getById(param.getFlowUserId());
userLeaveObj.setFlowUserId(flowUser.getId());
userLeaveObj.setFlowUserName(flowUser.getName());
userLeaveObj.setFlowUserCode(flowUser.getCode());
}
if(StringUtils.hasText(param.getRoleUserId())){
SysUser roleUser = this.getById(param.getRoleUserId());
userLeaveObj.setRoleUserId(roleUser.getId());
userLeaveObj.setRoleUserCode(roleUser.getCode());
userLeaveObj.setRoleUserName(roleUser.getName());
}
userLeaveObj.setLeaveReason(param.getLeaveReason());
sysUserLeaveService.save(userLeaveObj);
//更新员工信息
SysUser user = new SysUser();
user.setId(leaveUser.getId());
user.setServingState(2);
this.updateById(user);
}
@Override
public void leaveAction(LocalDate date) {
//todo 更新离职业务
SysUser user = new SysUser();
user.setId(user.getId());
user.setServingState(0);
user.setLoginEnable(0);
this.updateById(user);
}
@Override
public void cancelLeave(String userId) {
SysUser sysUser = this.getById(userId);
if(!sysUser.getServingState().equals(2)){
Assert.throwEx("非准备离职状态,取消失败");
}
SysUser user = new SysUser();
user.setId(user.getId());
user.setServingState(1);
this.updateById(user);
LambdaQueryWrapper<SysUserLeave> leaveLqw = new LambdaQueryWrapper<>();
leaveLqw.eq(SysUserLeave::getUserId,userId);
leaveLqw.eq(SysUserLeave::getLeaveStatus,0);
SysUserLeave userLeave = new SysUserLeave();
userLeave.setLeaveStatus(2);
userLeave.setLeaveCancelDate(LocalDateTime.now());
sysUserLeaveService.update(userLeave,leaveLqw);
}
@Override
public void reEntry(String userId) {
SysUser sysUser = this.getById(userId);
if(!sysUser.getServingState().equals(0)){
Assert.throwEx("非离职状态,操作失败");
}
SysUser user = new SysUser();
user.setId(userId);
user.setServingDate(LocalDate.now());
user.setServingState(1);
user.setLoginEnable(1);
this.updateById(user);
}
}

Loading…
Cancel
Save