diff --git a/core/src/main/java/com/dite/znpt/domain/entity/RoleEntity.java b/core/src/main/java/com/dite/znpt/domain/entity/RoleEntity.java index fbdbe5a..43331dd 100644 --- a/core/src/main/java/com/dite/znpt/domain/entity/RoleEntity.java +++ b/core/src/main/java/com/dite/znpt/domain/entity/RoleEntity.java @@ -43,8 +43,8 @@ public class RoleEntity extends AuditableEntity implements Serializable { @TableField("role_key") private String roleKey; - @ExcelProperty("1正常0禁用") - @ApiModelProperty("1正常0禁用") + @ExcelProperty("0正常1禁用") + @ApiModelProperty("0正常1禁用") @TableField("status") private Integer status; diff --git a/core/src/main/java/com/dite/znpt/domain/entity/UserEntity.java b/core/src/main/java/com/dite/znpt/domain/entity/UserEntity.java index cabdef5..bb6cf0a 100644 --- a/core/src/main/java/com/dite/znpt/domain/entity/UserEntity.java +++ b/core/src/main/java/com/dite/znpt/domain/entity/UserEntity.java @@ -55,8 +55,8 @@ public class UserEntity extends AuditableEntity implements Serializable { @TableField("salt") private String salt; - @ExcelProperty("1正常0禁用") - @ApiModelProperty("1正常0禁用") + @ExcelProperty("0正常1禁用") + @ApiModelProperty("0正常1禁用") @TableField("status") private Integer status; @@ -65,6 +65,21 @@ public class UserEntity extends AuditableEntity implements Serializable { @TableField("name") private String name; + @ExcelProperty("用户编码") + @ApiModelProperty("用户编码") + @TableField("user_code") + private String userCode; + + @ExcelProperty("用户类型") + @ApiModelProperty("用户类型") + @TableField("user_type") + private String userType; + + @ExcelProperty("用户状态") + @ApiModelProperty("用户状态") + @TableField("user_status") + private String userStatus; + @ApiModelProperty("所属部门") @TableField("dept_id") private String deptId; diff --git a/core/src/main/java/com/dite/znpt/domain/vo/UserListReq.java b/core/src/main/java/com/dite/znpt/domain/vo/UserListReq.java index 6d60091..bf56563 100644 --- a/core/src/main/java/com/dite/znpt/domain/vo/UserListReq.java +++ b/core/src/main/java/com/dite/znpt/domain/vo/UserListReq.java @@ -17,6 +17,9 @@ public class UserListReq implements Serializable { private static final long serialVersionUID = -10363935468256543L; + @ApiModelProperty("员工编码") + private String userCode; + @ApiModelProperty("账号") private String account; @@ -26,17 +29,14 @@ public class UserListReq implements Serializable { @ApiModelProperty("所属部门id") private String deptId; - @ApiModelProperty("岗位id") - private String postId; - @ApiModelProperty("手机号码") private String mobile; - @ApiModelProperty("邮箱") - private String email; + @ApiModelProperty("在职状态,枚举UserStatusEnum") + private String userStatus; - @ApiModelProperty("1正常0禁用") - private Integer status; + @ApiModelProperty("员工性质,枚举UserTypeEnum") + private String userType; } diff --git a/core/src/main/java/com/dite/znpt/domain/vo/UserListResp.java b/core/src/main/java/com/dite/znpt/domain/vo/UserListResp.java index f99c724..14383a4 100644 --- a/core/src/main/java/com/dite/znpt/domain/vo/UserListResp.java +++ b/core/src/main/java/com/dite/znpt/domain/vo/UserListResp.java @@ -8,6 +8,7 @@ import lombok.Data; import java.io.Serial; import java.io.Serializable; import java.time.LocalDate; +import java.time.LocalDateTime; /** * @author huise23 @@ -27,34 +28,42 @@ public class UserListResp implements Serializable { @ApiModelProperty("账号") private String account; - @ApiModelProperty("1正常0禁用") + @ApiModelProperty("0正常1禁用") private Integer status; @ApiModelProperty("姓名") private String name; + @ApiModelProperty("员工编码") + private String userCode; + + @ApiModelProperty("员工性质") + private String userType; + + @ApiModelProperty("员工性质描述") + private String userTypeLabel; + + @ApiModelProperty("在职状态") + private String userStatus; + + @ApiModelProperty("在职状态描述") + private String userStatusLabel; + @ApiModelProperty("所属部门名称") private String deptName; + @ApiModelProperty("角色名称") + private String roleName; + @ApiModelProperty("岗位名称") private String postName; - @ApiModelProperty("身份证") - private String identityCard; - @ApiModelProperty("手机号码") private String mobile; - @ApiModelProperty("邮箱") - private String email; - - @JsonFormat(pattern = "yyyy-MM-dd") - @ApiModelProperty("入职日期") - private LocalDate hiredate; - - @JsonFormat(pattern = "yyyy-MM-dd") - @ApiModelProperty("出生日期") - private LocalDate birthdate; + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") + @ApiModelProperty("创建时间") + private LocalDateTime createTime; } diff --git a/core/src/main/java/com/dite/znpt/domain/vo/UserReq.java b/core/src/main/java/com/dite/znpt/domain/vo/UserReq.java index cee022c..0b49e39 100644 --- a/core/src/main/java/com/dite/znpt/domain/vo/UserReq.java +++ b/core/src/main/java/com/dite/znpt/domain/vo/UserReq.java @@ -32,19 +32,30 @@ public class UserReq implements Serializable { @ApiModelProperty("头像地址") private String avatar; - @ApiModelProperty("1正常0禁用") + @ApiModelProperty("0正常1禁用") private Integer status; @Size(groups = {ValidationGroup.Insert.class, ValidationGroup.Update.class}, max = 20, message = "姓名长度不能超过20字符") @ApiModelProperty("姓名") private String name; + @NotBlank(message = "员工性质不能为空") + @ApiModelProperty("员工性质") + private String userType; + + @NotBlank(message = "在职状态不能为空") + @ApiModelProperty("在职状态") + private String userStatus; + @ApiModelProperty("所属部门") private String deptId; @ApiModelProperty("岗位") private List postIds; + @ApiModelProperty("角色") + private List roleIds; + @Pattern(groups = {ValidationGroup.Insert.class, ValidationGroup.Update.class}, regexp = "^$|\\d(?:\\d{15}|\\d{17})$", message = "身份证号码格式不正确") @ApiModelProperty("身份证") private String identityCard; diff --git a/core/src/main/java/com/dite/znpt/domain/vo/UserResp.java b/core/src/main/java/com/dite/znpt/domain/vo/UserResp.java index fe1bf6d..db10ead 100644 --- a/core/src/main/java/com/dite/znpt/domain/vo/UserResp.java +++ b/core/src/main/java/com/dite/znpt/domain/vo/UserResp.java @@ -22,18 +22,24 @@ public class UserResp extends UserReq implements Serializable{ @ApiModelProperty("用户名") private String userId; - @ApiModelProperty("账号") - private String account; - @ApiModelProperty("所属部门") private String deptName; @ApiModelProperty("岗位,多个岗位英文逗号隔开") private String postName; + @ApiModelProperty("角色,多个角色英文逗号隔开") + private String roleName; + @ApiModelProperty("学历描述") private String educationLabel; + @ApiModelProperty("员工性质描述") + private String userTypeLabel; + + @ApiModelProperty("在职状态描述") + private String userStatusLabel; + } diff --git a/core/src/main/java/com/dite/znpt/domain/vo/UserRoleReq.java b/core/src/main/java/com/dite/znpt/domain/vo/UserRoleReq.java index 4f7502d..4fef747 100644 --- a/core/src/main/java/com/dite/znpt/domain/vo/UserRoleReq.java +++ b/core/src/main/java/com/dite/znpt/domain/vo/UserRoleReq.java @@ -4,6 +4,7 @@ import com.dite.znpt.util.ValidationGroup; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; +import lombok.experimental.Accessors; import javax.validation.constraints.NotBlank; import javax.validation.constraints.NotEmpty; @@ -17,6 +18,7 @@ import java.util.List; * @description */ @Data +@Accessors(chain = true) @ApiModel("用户角色绑定请求实体") public class UserRoleReq implements Serializable { @Serial diff --git a/core/src/main/java/com/dite/znpt/enums/UserStatusEnum.java b/core/src/main/java/com/dite/znpt/enums/UserStatusEnum.java new file mode 100644 index 0000000..6107111 --- /dev/null +++ b/core/src/main/java/com/dite/znpt/enums/UserStatusEnum.java @@ -0,0 +1,52 @@ +package com.dite.znpt.enums; + +import cn.hutool.json.JSONObject; +import lombok.Getter; + +import java.util.ArrayList; +import java.util.List; + +/** + * @Author: gaoxiong + * @Date: 2025/6/23 22:38 + * @Description: + */ +@Getter +public enum UserStatusEnum { + + EMPLOYED("EMPLOYED", "在职"), + DIMISSION("DIMISSION", "正常离职"), + ABNORMAL_DIMISSION("ABNORMAL_DIMISSION", "非正常离职"); + + private final String code; + private final String desc; + + UserStatusEnum(String code, String desc){ + this.code = code; + this.desc = desc; + } + + public static UserStatusEnum getByCode(String code){ + for (UserStatusEnum e : UserStatusEnum.values() ) { + if(e.code.equals(code)){ + return e; + } + } + return null; + } + + public static String getDescByCode(String code){ + UserStatusEnum e = getByCode(code); + return null == e ? null : e.desc; + } + + public static List listAll(){ + List list = new ArrayList<>(UserStatusEnum.values().length); + for (UserStatusEnum e : UserStatusEnum.values() ) { + JSONObject jsonObject = new JSONObject(); + jsonObject.set(e.code, e.desc); + list.add(jsonObject); + } + return list; + } +} diff --git a/core/src/main/java/com/dite/znpt/enums/UserTypeEnum.java b/core/src/main/java/com/dite/znpt/enums/UserTypeEnum.java new file mode 100644 index 0000000..7d3d17a --- /dev/null +++ b/core/src/main/java/com/dite/znpt/enums/UserTypeEnum.java @@ -0,0 +1,51 @@ +package com.dite.znpt.enums; + +import cn.hutool.json.JSONObject; +import lombok.Getter; + +import java.util.ArrayList; +import java.util.List; + +/** + * @Author: gaoxiong + * @Date: 2025/6/23 22:38 + * @Description: + */ +@Getter +public enum UserTypeEnum { + + PERMANENT("PERMANENT", "正式工"), + TEMPORARY("TEMPORARY", "临时工"); + + private final String code; + private final String desc; + + UserTypeEnum(String code, String desc){ + this.code = code; + this.desc = desc; + } + + public static UserTypeEnum getByCode(String code){ + for (UserTypeEnum e : UserTypeEnum.values() ) { + if(e.code.equals(code)){ + return e; + } + } + return null; + } + + public static String getDescByCode(String code){ + UserTypeEnum e = getByCode(code); + return null == e ? null : e.desc; + } + + public static List listAll(){ + List list = new ArrayList<>(UserTypeEnum.values().length); + for (UserTypeEnum e : UserTypeEnum.values() ) { + JSONObject jsonObject = new JSONObject(); + jsonObject.set(e.code, e.desc); + list.add(jsonObject); + } + return list; + } +} diff --git a/core/src/main/java/com/dite/znpt/service/impl/AuthServiceImpl.java b/core/src/main/java/com/dite/znpt/service/impl/AuthServiceImpl.java index 4c76bd7..36e9d97 100644 --- a/core/src/main/java/com/dite/znpt/service/impl/AuthServiceImpl.java +++ b/core/src/main/java/com/dite/znpt/service/impl/AuthServiceImpl.java @@ -61,7 +61,7 @@ public class AuthServiceImpl implements AuthService { }catch (Exception e){ return Result.error(Constants.PASSWORD_EXCEPTION, Constants.PASSWORD_EXCEPTION_MESSAGE); } - if(!user.getStatus().equals(Constants.STATUS_0)){ + if(!user.getStatus().equals(Constants.STATUS_1)){ return Result.error(Constants.USER_DISABLE_EXCEPTION, Constants.USER_DISABLE_EXCEPTION_MESSAGE); } if(user.getIsDefaultPassword()){ diff --git a/core/src/main/java/com/dite/znpt/service/impl/CertificationServiceImpl.java b/core/src/main/java/com/dite/znpt/service/impl/CertificationServiceImpl.java index 0e99937..f7d57a0 100644 --- a/core/src/main/java/com/dite/znpt/service/impl/CertificationServiceImpl.java +++ b/core/src/main/java/com/dite/znpt/service/impl/CertificationServiceImpl.java @@ -66,7 +66,7 @@ public class CertificationServiceImpl extends ServiceImpl(); } - List posts= postService.listByIds(postIds).stream().filter(post -> Constants.STATUS_0.equals(post.getStatus())).toList(); + List posts= postService.listByIds(postIds).stream().filter(post -> Constants.STATUS_1.equals(post.getStatus())).toList(); return Converts.INSTANCE.toPostResp(posts); } @@ -71,7 +71,7 @@ public class UserPostServiceImpl extends ServiceImpl userIds) { PostEntity post = postService.getById(postId); - if(null == post || !Constants.STATUS_0.equals(post.getStatus())){ + if(null == post || !Constants.STATUS_1.equals(post.getStatus())){ throw new ServiceException(Message.POST_ID_NOT_EXIST_OR_ILLEGAL); } List userList = userService.listByIds(userIds).stream().filter(userEntity -> !Constants.DEL_FLAG_1.equals(userEntity.getDelFlag())).toList(); diff --git a/core/src/main/java/com/dite/znpt/service/impl/UserRoleServiceImpl.java b/core/src/main/java/com/dite/znpt/service/impl/UserRoleServiceImpl.java index 13688f5..1299612 100644 --- a/core/src/main/java/com/dite/znpt/service/impl/UserRoleServiceImpl.java +++ b/core/src/main/java/com/dite/znpt/service/impl/UserRoleServiceImpl.java @@ -43,7 +43,7 @@ public class UserRoleServiceImpl extends ServiceImpl(); } - List roles = roleService.listByIds(roleIds).stream().filter(role -> Constants.DEL_FLAG_0.equals(role.getDelFlag()) && Constants.STATUS_0.equals(role.getStatus())).toList(); + List roles = roleService.listByIds(roleIds).stream().filter(role -> Constants.DEL_FLAG_0.equals(role.getDelFlag()) && Constants.STATUS_1.equals(role.getStatus())).toList(); return Converts.INSTANCE.toRoleResp(roles); } diff --git a/core/src/main/java/com/dite/znpt/service/impl/UserServiceImpl.java b/core/src/main/java/com/dite/znpt/service/impl/UserServiceImpl.java index 6197865..08b6af0 100644 --- a/core/src/main/java/com/dite/znpt/service/impl/UserServiceImpl.java +++ b/core/src/main/java/com/dite/znpt/service/impl/UserServiceImpl.java @@ -6,24 +6,19 @@ import cn.hutool.core.collection.CollUtil; import cn.hutool.core.util.RandomUtil; import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.dite.znpt.constant.Constants; import com.dite.znpt.constant.Message; import com.dite.znpt.converts.Converts; -import com.dite.znpt.domain.entity.PostEntity; -import com.dite.znpt.domain.entity.UserEntity; -import com.dite.znpt.domain.entity.UserPostEntity; -import com.dite.znpt.domain.vo.UserListReq; -import com.dite.znpt.domain.vo.UserListResp; -import com.dite.znpt.domain.vo.UserReq; -import com.dite.znpt.domain.vo.UserResp; +import com.dite.znpt.domain.entity.*; +import com.dite.znpt.domain.vo.*; +import com.dite.znpt.enums.UserStatusEnum; +import com.dite.znpt.enums.UserTypeEnum; import com.dite.znpt.exception.ServiceException; import com.dite.znpt.mapper.UserMapper; -import com.dite.znpt.service.DeptService; -import com.dite.znpt.service.PostService; -import com.dite.znpt.service.UserPostService; -import com.dite.znpt.service.UserService; +import com.dite.znpt.service.*; import com.dite.znpt.util.PageUtil; import com.dite.znpt.util.PasswordUtil; import lombok.RequiredArgsConstructor; @@ -33,6 +28,7 @@ import org.springframework.transaction.annotation.Transactional; import javax.annotation.Resource; import java.util.List; +import java.util.Map; import java.util.stream.Collectors; /** @@ -50,14 +46,22 @@ public class UserServiceImpl extends ServiceImpl impleme @Value("${password.enable-default:true}") private Boolean enableDefaultPassword; + private static final String USER_CODE_PREFIX = "YG"; + private static final Integer USER_CODE_LENGTH = 4; + @Resource private DeptService deptService; @Resource private PostService postService; + @Resource + private RoleService roleService; + @Resource private UserPostService userPostService; + @Resource + private UserRoleService userRoleService; /** * 功能描述:分页查询用户信息列表 @@ -83,7 +87,11 @@ public class UserServiceImpl extends ServiceImpl impleme **/ @Override public List list(UserListReq req) { - return this.baseMapper.queryBySelective(req); + return this.baseMapper.queryBySelective(req).stream().map(resp -> { + resp.setUserTypeLabel(UserTypeEnum.getDescByCode(resp.getUserType())); + resp.setUserStatusLabel(UserStatusEnum.getDescByCode(resp.getUserStatus())); + return resp; + }).collect(Collectors.toList()); } /** @@ -101,13 +109,18 @@ public class UserServiceImpl extends ServiceImpl impleme if(StrUtil.isNotBlank(userResp.getDeptId())){ userResp.setUserId(deptService.getById(userResp.getDeptId()).getDeptName()); } + userResp.setUserTypeLabel(UserTypeEnum.getDescByCode(userResp.getUserType())); + userResp.setUserStatusLabel(UserStatusEnum.getDescByCode(userResp.getUserStatus())); List userPostList = userPostService.list(Wrappers.lambdaQuery(UserPostEntity.class).eq(UserPostEntity::getUserId, userId)); if(CollUtil.isNotEmpty(userPostList)){ - String postName = postService.listByIds( - userPostList.stream().map(UserPostEntity::getPostId).toList() - ).stream().map(PostEntity::getPostName).collect(Collectors.joining(StrUtil.COMMA)); + String postName = postService.listByIds(userPostList.stream().map(UserPostEntity::getPostId).toList()).stream().map(PostEntity::getPostName).collect(Collectors.joining(StrUtil.COMMA)); userResp.setPostName(postName); } + List userRoleList = userRoleService.list(Wrappers.lambdaQuery(UserRoleEntity.class).eq(UserRoleEntity::getUserId, userId)); + if(CollUtil.isNotEmpty(userRoleList)){ + String roleName = roleService.listByIds(userRoleList.stream().map(UserRoleEntity::getRoleId).toList()).stream().map(RoleEntity::getRoleName).collect(Collectors.joining(StrUtil.COMMA)); + userResp.setRoleName(roleName); + } return userResp; } @@ -127,13 +140,48 @@ public class UserServiceImpl extends ServiceImpl impleme entity.setSalt(salt); String password = enableDefaultPassword ? defaultPassword : PasswordUtil.generatePassword(); entity.setPassword(SaSecureUtil.md5(req.getAccount().concat(password).concat(salt))); + entity.setUserCode(userCodeGenerator()); this.save(entity); if(CollUtil.isNotEmpty(req.getPostIds())){ - userPostService.bindUserPost(entity.getUserId(), req.getPostIds()); + List postIds = postService.listByIds(req.getPostIds()).stream().filter(post -> Constants.STATUS_0.equals(post.getPostId())).map(PostEntity::getPostId).toList(); + if(CollUtil.isNotEmpty(postIds)){ + userPostService.bindUserPost(entity.getUserId(),postIds); + } + } + if(CollUtil.isNotEmpty(req.getRoleIds())){ + List roleIds = roleService.listByIds(req.getRoleIds()).stream().filter(role -> Constants.STATUS_0.equals(role.getStatus())).map(RoleEntity::getRoleId).toList(); + if(CollUtil.isNotEmpty(roleIds)){ + userRoleService.bindUserRole(new UserRoleReq().setUserId(entity.getUserId()).setRoleIds(req.getRoleIds())); + } } return SaBase64Util.encode(password); } + private String userCodeGenerator(){ + QueryWrapper queryWrapper = new QueryWrapper(); + queryWrapper.select("max(user_code) as userCode"); + List> list = this.baseMapper.selectMaps(queryWrapper); + if(CollUtil.isEmpty(list)){ + return USER_CODE_PREFIX.concat("0001"); + }else { + String maxUserCode = list.get(0).get("userCode").toString(); + String num = maxUserCode.replace(USER_CODE_PREFIX, StrUtil.EMPTY); + Integer nextNum = Integer.parseInt(num) + 1; + if(nextNum.toString().length() < USER_CODE_LENGTH){ + return USER_CODE_PREFIX.concat(StrUtil.fillBefore(nextNum.toString(), '0', USER_CODE_LENGTH)); + }else { + return USER_CODE_PREFIX.concat(nextNum.toString()); + } + } + + } + + public static void main(String[] args) { + System.out.println(Integer.parseInt("00001") + 1); + System.out.println(StrUtil.fillBefore("2",'0', 5)); + } + + /** * 功能描述:更新用户信息 * diff --git a/core/src/main/resources/mapper/UserMapper.xml b/core/src/main/resources/mapper/UserMapper.xml index 343fefb..d61f50d 100644 --- a/core/src/main/resources/mapper/UserMapper.xml +++ b/core/src/main/resources/mapper/UserMapper.xml @@ -8,13 +8,18 @@