From 23a464bb7fbfb172611db7c45f38bb346fd6437e Mon Sep 17 00:00:00 2001 From: PIG AI Date: Sun, 6 Jul 2025 14:48:20 +0800 Subject: [PATCH] =?UTF-8?q?refactor(user):=20=E4=BD=BF=E7=94=A8RedisUtils?= =?UTF-8?q?=E6=9B=BF=E4=BB=A3StringRedisTemplate=E8=BF=9B=E8=A1=8C?= =?UTF-8?q?=E9=87=8D=E7=BD=AE=E9=AA=8C=E8=AF=81=E7=A0=81=E7=BC=93=E5=AD=98?= =?UTF-8?q?=E6=93=8D=E4=BD=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../pigx/admin/service/SysUserService.java | 27 ++- .../service/impl/SysUserServiceImpl.java | 160 ++++++++---------- 2 files changed, 86 insertions(+), 101 deletions(-) diff --git a/pigx-upms/pigx-upms-biz/src/main/java/com/pig4cloud/pigx/admin/service/SysUserService.java b/pigx-upms/pigx-upms-biz/src/main/java/com/pig4cloud/pigx/admin/service/SysUserService.java index 065237fbc..bfc61d1ba 100644 --- a/pigx-upms/pigx-upms-biz/src/main/java/com/pig4cloud/pigx/admin/service/SysUserService.java +++ b/pigx-upms/pigx-upms-biz/src/main/java/com/pig4cloud/pigx/admin/service/SysUserService.java @@ -41,7 +41,6 @@ public interface SysUserService extends IService { /** * 查询用户信息 - * * @param userDTO 用户数据传输对象 * @return 用户信息对象 */ @@ -49,8 +48,7 @@ public interface SysUserService extends IService { /** * 分页查询用户信息(含有角色信息) - * - * @param page 分页对象 + * @param page 分页对象 * @param userDTO 参数列表 * @return */ @@ -65,7 +63,6 @@ public interface SysUserService extends IService { /** * 更新当前用户基本信息 - * * @param userDto 用户信息 * @return Boolean */ @@ -73,8 +70,8 @@ public interface SysUserService extends IService { /** * 更新指定用户信息 - * @param userDto 用户信息 - * @return + * @param userDto 用户信息DTO对象 + * @return 更新操作是否成功 */ Boolean updateUser(UserDTO userDto); @@ -109,8 +106,7 @@ public interface SysUserService extends IService { /** * excel 导入用户 - * - * @param excelVOList excel 列表数据 + * @param excelVOList excel 列表数据 * @param bindingResult 错误数据 * @return ok fail */ @@ -131,15 +127,14 @@ public interface SysUserService extends IService { R lockUser(String username); /** - * 修改密码 - * @param userDto 用户信息 - * @return + * 修改用户密码 + * @param userDto 包含用户信息的DTO对象 + * @return 操作结果 */ R changePassword(UserDTO userDto); /** * 解绑社交登录 - * * @param type 社交登录类型 * @return R */ @@ -169,16 +164,16 @@ public interface SysUserService extends IService { /** * 重置用户密码 - * @param userDto 用户信息 - * @return + * @param userDto 用户信息DTO + * @return 操作结果,包含是否成功的布尔值 */ R resetUserPassword(RegisterUserDTO userDto); /** * 找回用户密码 - * @param userDto 用户信息 + * @param userDto 用户信息DTO * @param code 验证码 - * @return + * @return 操作结果,包含是否成功的布尔值 */ R forgetUserPassword(RegisterUserDTO userDto, String code); diff --git a/pigx-upms/pigx-upms-biz/src/main/java/com/pig4cloud/pigx/admin/service/impl/SysUserServiceImpl.java b/pigx-upms/pigx-upms-biz/src/main/java/com/pig4cloud/pigx/admin/service/impl/SysUserServiceImpl.java index 2eb279119..7dafea936 100644 --- a/pigx-upms/pigx-upms-biz/src/main/java/com/pig4cloud/pigx/admin/service/impl/SysUserServiceImpl.java +++ b/pigx-upms/pigx-upms-biz/src/main/java/com/pig4cloud/pigx/admin/service/impl/SysUserServiceImpl.java @@ -44,6 +44,7 @@ import com.pig4cloud.pigx.common.core.constant.enums.LoginTypeEnum; import com.pig4cloud.pigx.common.core.exception.ErrorCodes; import com.pig4cloud.pigx.common.core.util.MsgUtils; import com.pig4cloud.pigx.common.core.util.R; +import com.pig4cloud.pigx.common.data.cache.RedisUtils; import com.pig4cloud.pigx.common.data.datascope.DataScope; import com.pig4cloud.pigx.common.data.resolver.ParamResolver; import com.pig4cloud.pigx.common.excel.vo.ErrorMessage; @@ -55,7 +56,6 @@ import org.springframework.beans.BeanUtils; import org.springframework.cache.Cache; import org.springframework.cache.CacheManager; import org.springframework.cache.annotation.CacheEvict; -import org.springframework.data.redis.core.StringRedisTemplate; import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder; import org.springframework.security.crypto.password.PasswordEncoder; import org.springframework.stereotype.Service; @@ -99,11 +99,8 @@ public class SysUserServiceImpl extends ServiceImpl impl private final SysDeptMapper sysDeptMapper; - private final StringRedisTemplate redisTemplate; - /** * 保存用户信息 - * * @param userDto DTO 对象 * @return success/fail */ @@ -135,7 +132,7 @@ public class SysUserServiceImpl extends ServiceImpl impl String defaultRole = ParamResolver.getStr("USER_DEFAULT_ROLE"); // 默认角色 SysRole sysRole = sysRoleService - .getOne(Wrappers.lambdaQuery().eq(SysRole::getRoleCode, defaultRole)); + .getOne(Wrappers.lambdaQuery().eq(SysRole::getRoleCode, defaultRole)); userDto.setRole(Collections.singletonList(sysRole.getRoleId())); } @@ -166,7 +163,6 @@ public class SysUserServiceImpl extends ServiceImpl impl /** * 根据用户信息查询用户全部信息,包括角色和权限 - * * @param userDTO 用户信息DTO * @return 包含用户角色和权限的用户信息对象 */ @@ -183,12 +179,12 @@ public class SysUserServiceImpl extends ServiceImpl impl BeanUtils.copyProperties(dbUser, userInfo); // 设置权限列表(menu.permission) List permissions = dbUser.getRoleList() - .stream() - .map(SysRole::getRoleId) - .flatMap(roleId -> sysMenuService.findMenuByRoleId(roleId).stream()) - .map(SysMenu::getPermission) - .filter(StrUtil::isNotEmpty) - .toList(); + .stream() + .map(SysRole::getRoleId) + .flatMap(roleId -> sysMenuService.findMenuByRoleId(roleId).stream()) + .map(SysMenu::getPermission) + .filter(StrUtil::isNotEmpty) + .toList(); userInfo.setPermissions(permissions); // 如果是登录成功以后查询租户信息并进行校验 @@ -204,8 +200,7 @@ public class SysUserServiceImpl extends ServiceImpl impl /** * 分页查询用户信息(含有角色信息) - * - * @param page 分页对象 + * @param page 分页对象 * @param userDTO 参数列表 * @return */ @@ -217,7 +212,6 @@ public class SysUserServiceImpl extends ServiceImpl impl /** * 通过ID查询用户信息 - * * @param id 用户ID * @return 用户信息 */ @@ -228,7 +222,6 @@ public class SysUserServiceImpl extends ServiceImpl impl /** * 删除用户 - * * @param ids 用户ID 列表 * @return Boolean */ @@ -247,8 +240,8 @@ public class SysUserServiceImpl extends ServiceImpl impl sysUserDeptMapper.delete(Wrappers.lambdaQuery().in(SysUserDept::getUserId, CollUtil.toList(ids))); sysUserPostMapper.delete(Wrappers.lambdaQuery().in(SysUserPost::getUserId, CollUtil.toList(ids))); sysTenantUserMapper.delete(Wrappers.lambdaQuery() - .in(SysTenantUser::getUserId, CollUtil.toList(ids)) - .eq(SysTenantUser::getTenantId, SecurityUtils.getUser().getTenantId())); + .in(SysTenantUser::getUserId, CollUtil.toList(ids)) + .eq(SysTenantUser::getTenantId, SecurityUtils.getUser().getTenantId())); this.removeBatchByIds(CollUtil.toList(ids)); return Boolean.TRUE; } @@ -286,7 +279,7 @@ public class SysUserServiceImpl extends ServiceImpl impl // 更新用户角色表 if (userDto.getRole() != null) { sysUserRoleMapper - .delete(Wrappers.lambdaQuery().eq(SysUserRole::getUserId, userDto.getUserId())); + .delete(Wrappers.lambdaQuery().eq(SysUserRole::getUserId, userDto.getUserId())); userDto.getRole().stream().map(roleId -> { SysUserRole userRole = new SysUserRole(); userRole.setUserId(sysUser.getUserId()); @@ -298,7 +291,7 @@ public class SysUserServiceImpl extends ServiceImpl impl // 更新用户岗位表 if (userDto.getPost() != null) { sysUserPostMapper - .delete(Wrappers.lambdaQuery().eq(SysUserPost::getUserId, userDto.getUserId())); + .delete(Wrappers.lambdaQuery().eq(SysUserPost::getUserId, userDto.getUserId())); userDto.getPost().stream().map(postId -> { SysUserPost userPost = new SysUserPost(); userPost.setUserId(sysUser.getUserId()); @@ -310,7 +303,7 @@ public class SysUserServiceImpl extends ServiceImpl impl // 更新用户部门表 if (Objects.nonNull(userDto.getDeptId())) { sysUserDeptMapper - .delete(Wrappers.lambdaQuery().eq(SysUserDept::getUserId, userDto.getUserId())); + .delete(Wrappers.lambdaQuery().eq(SysUserDept::getUserId, userDto.getUserId())); SysUserDept sysUserDept = new SysUserDept(); sysUserDept.setUserId(sysUser.getUserId()); sysUserDept.setDeptId(userDto.getDeptId()); @@ -322,7 +315,6 @@ public class SysUserServiceImpl extends ServiceImpl impl /** * 查询上级部门的用户信息 - * * @param username 用户名 * @return R */ @@ -339,18 +331,17 @@ public class SysUserServiceImpl extends ServiceImpl impl // 查询用户部门ID List parentDeptList = sysDeptList.stream().map(SysDept::getParentId).toList(); List userIdList = sysUserDeptMapper - .selectList(Wrappers.lambdaQuery().in(SysUserDept::getDeptId, parentDeptList)) - .stream() - .map(SysUserDept::getUserId) - .toList(); + .selectList(Wrappers.lambdaQuery().in(SysUserDept::getDeptId, parentDeptList)) + .stream() + .map(SysUserDept::getUserId) + .toList(); return this.list(Wrappers.lambdaQuery().in(SysUser::getUserId, userIdList)); } /** * 查询全部的用户 - * * @param userDTO 查询条件 - * @param ids ids 用户列表 + * @param ids ids 用户列表 * @return list */ @Override @@ -363,21 +354,21 @@ public class SysUserServiceImpl extends ServiceImpl impl BeanUtils.copyProperties(userVO, excelVO); // 转换角色名称 String roleNameList = userVO.getRoleList() - .stream() - .map(SysRole::getRoleName) - .collect(Collectors.joining(StrUtil.COMMA)); + .stream() + .map(SysRole::getRoleName) + .collect(Collectors.joining(StrUtil.COMMA)); excelVO.setRoleNameList(roleNameList); // 转化岗位名称 String postNameList = userVO.getPostList() - .stream() - .map(SysPost::getPostName) - .collect(Collectors.joining(StrUtil.COMMA)); + .stream() + .map(SysPost::getPostName) + .collect(Collectors.joining(StrUtil.COMMA)); excelVO.setPostNameList(postNameList); // 转化部门名称 String deptNameList = userVO.getDeptList() - .stream() - .map(SysDept::getName) - .collect(Collectors.joining(StrUtil.COMMA)); + .stream() + .map(SysDept::getName) + .collect(Collectors.joining(StrUtil.COMMA)); excelVO.setDeptNameList(deptNameList); return excelVO; }).toList(); @@ -385,8 +376,7 @@ public class SysUserServiceImpl extends ServiceImpl impl /** * excel 导入用户, 插入正确的 错误的提示行号 - * - * @param excelVOList excel 列表数据 + * @param excelVOList excel 列表数据 * @param bindingResult 错误数据 * @return ok fail */ @@ -406,7 +396,7 @@ public class SysUserServiceImpl extends ServiceImpl impl Set errorMsg = new HashSet<>(); // 校验用户名是否存在 boolean exsitUserName = userList.stream() - .anyMatch(sysUser -> excel.getUsername().equals(sysUser.getUsername())); + .anyMatch(sysUser -> excel.getUsername().equals(sysUser.getUsername())); if (exsitUserName) { errorMsg.add(MsgUtils.getMessage(ErrorCodes.SYS_USER_USERNAME_EXISTING, excel.getUsername())); @@ -414,8 +404,8 @@ public class SysUserServiceImpl extends ServiceImpl impl // 判断输入的部门名称列表是否合法 Optional deptOptional = deptList.stream() - .filter(dept -> excel.getDeptNameList().equals(dept.getName())) - .findFirst(); + .filter(dept -> excel.getDeptNameList().equals(dept.getName())) + .findFirst(); if (!deptOptional.isPresent()) { errorMsg.add(MsgUtils.getMessage(ErrorCodes.SYS_DEPT_DEPTNAME_INEXISTENCE, excel.getDeptNameList())); } @@ -423,8 +413,8 @@ public class SysUserServiceImpl extends ServiceImpl impl // 判断输入的角色名称列表是否合法 List roleNameList = StrUtil.split(excel.getRoleNameList(), StrUtil.COMMA); List roleCollList = roleList.stream() - .filter(role -> roleNameList.stream().anyMatch(name -> role.getRoleName().equals(name))) - .toList(); + .filter(role -> roleNameList.stream().anyMatch(name -> role.getRoleName().equals(name))) + .toList(); if (roleCollList.size() != roleNameList.size()) { errorMsg.add(MsgUtils.getMessage(ErrorCodes.SYS_ROLE_ROLENAME_INEXISTENCE, excel.getRoleNameList())); @@ -433,8 +423,8 @@ public class SysUserServiceImpl extends ServiceImpl impl // 判断输入的部门名称列表是否合法 List postNameList = StrUtil.split(excel.getPostNameList(), StrUtil.COMMA); List postCollList = postList.stream() - .filter(post -> postNameList.stream().anyMatch(name -> post.getPostName().equals(name))) - .toList(); + .filter(post -> postNameList.stream().anyMatch(name -> post.getPostName().equals(name))) + .toList(); if (postCollList.size() != postNameList.size()) { errorMsg.add(MsgUtils.getMessage(ErrorCodes.SYS_POST_POSTNAME_INEXISTENCE, excel.getPostNameList())); @@ -443,7 +433,8 @@ public class SysUserServiceImpl extends ServiceImpl impl // 数据合法情况 if (CollUtil.isEmpty(errorMsg)) { insertExcelUser(excel, deptOptional, roleCollList, postCollList); - } else { + } + else { // 数据不合法情况 errorMessageList.add(new ErrorMessage(excel.getLineNum(), errorMsg)); } @@ -460,7 +451,7 @@ public class SysUserServiceImpl extends ServiceImpl impl * 插入excel User */ private void insertExcelUser(UserExcelVO excel, Optional deptOptional, List roleCollList, - List postCollList) { + List postCollList) { UserDTO userDTO = new UserDTO(); userDTO.setUsername(excel.getUsername()); userDTO.setPhone(excel.getPhone()); @@ -490,7 +481,6 @@ public class SysUserServiceImpl extends ServiceImpl impl /** * 注册用户 赋予用户默认角色 - * * @param userDto 用户信息 * @return success/false */ @@ -499,7 +489,7 @@ public class SysUserServiceImpl extends ServiceImpl impl public R registerUser(RegisterUserDTO userDto) { // 判断用户名是否存在 boolean usernameExists = this - .exists(Wrappers.lambdaQuery().eq(SysUser::getUsername, userDto.getUsername())); + .exists(Wrappers.lambdaQuery().eq(SysUser::getUsername, userDto.getUsername())); if (usernameExists) { String message = MsgUtils.getMessage(ErrorCodes.SYS_USER_USERNAME_EXISTING, userDto.getUsername()); return R.failed(message); @@ -520,7 +510,6 @@ public class SysUserServiceImpl extends ServiceImpl impl /** * 锁定用户 - * * @param username 用户名 * @return 操作结果,包含是否成功 */ @@ -538,7 +527,6 @@ public class SysUserServiceImpl extends ServiceImpl impl /** * 修改用户密码 - * * @param userDto 用户数据传输对象,包含原密码和新密码 * @return 操作结果 * @CacheEvict 清除用户详情缓存 @@ -562,9 +550,9 @@ public class SysUserServiceImpl extends ServiceImpl impl String password = ENCODER.encode(userDto.getNewpassword1()); this.update(Wrappers.lambdaUpdate() - .set(SysUser::getPassword, password) - .set(SysUser::getPasswordModifyTime, LocalDateTime.now()) - .eq(SysUser::getUserId, user.getUserId())); + .set(SysUser::getPassword, password) + .set(SysUser::getPasswordModifyTime, LocalDateTime.now()) + .eq(SysUser::getUserId, user.getUserId())); return R.ok(); } @@ -581,23 +569,26 @@ public class SysUserServiceImpl extends ServiceImpl impl // 微信开放平台 (普通用户扫码登录) if (type.equals(LoginTypeEnum.WECHAT.getType())) { wrapper = Wrappers.lambdaUpdate() - .set(SysUser::getWxOpenid, null) - .eq(SysUser::getUserId, user.getId()); + .set(SysUser::getWxOpenid, null) + .eq(SysUser::getUserId, user.getId()); // 码云登录 (方便申请) - } else if (type.equals(LoginTypeEnum.GITEE.getType())) { + } + else if (type.equals(LoginTypeEnum.GITEE.getType())) { wrapper = Wrappers.lambdaUpdate() - .set(SysUser::getGiteeLogin, null) - .eq(SysUser::getUserId, user.getId()); + .set(SysUser::getGiteeLogin, null) + .eq(SysUser::getUserId, user.getId()); // 企业微信登录 - } else if (type.equals(LoginTypeEnum.WEIXIN_CP.getType())) { + } + else if (type.equals(LoginTypeEnum.WEIXIN_CP.getType())) { wrapper = Wrappers.lambdaUpdate() - .set(SysUser::getWxCpUserid, null) - .eq(SysUser::getUserId, user.getId()); + .set(SysUser::getWxCpUserid, null) + .eq(SysUser::getUserId, user.getId()); // 钉钉登录 - } else if (type.equals(LoginTypeEnum.DINGTALK.getType())) { + } + else if (type.equals(LoginTypeEnum.DINGTALK.getType())) { wrapper = Wrappers.lambdaUpdate() - .set(SysUser::getWxDingUserid, null) - .eq(SysUser::getUserId, user.getId()); + .set(SysUser::getWxDingUserid, null) + .eq(SysUser::getUserId, user.getId()); } if (Objects.isNull(wrapper)) { @@ -622,14 +613,14 @@ public class SysUserServiceImpl extends ServiceImpl impl if (!ENCODER.matches(password, sysUser.getPassword())) { log.info("原密码错误"); return R.failed("密码输入错误"); - } else { + } + else { return R.ok(); } } /** * 重置用户密码 - * * @param userDto 用户信息DTO,包含用户名、原密码和新密码等信息 * @return 返回操作结果,成功返回true,失败返回错误信息 */ @@ -650,10 +641,10 @@ public class SysUserServiceImpl extends ServiceImpl impl // 重置密码 String password = ENCODER.encode(userDto.getNewpassword1()); this.update(Wrappers.lambdaUpdate() - .set(SysUser::getPassword, password) - .set(SysUser::getPasswordModifyTime, LocalDateTime.now()) - .set(SysUser::getPasswordExpireFlag, CommonConstants.STATUS_NORMAL) - .eq(SysUser::getUsername, userDto.getUsername())); + .set(SysUser::getPassword, password) + .set(SysUser::getPasswordModifyTime, LocalDateTime.now()) + .set(SysUser::getPasswordExpireFlag, CommonConstants.STATUS_NORMAL) + .eq(SysUser::getUsername, userDto.getUsername())); return R.ok(); } @@ -669,24 +660,24 @@ public class SysUserServiceImpl extends ServiceImpl impl return R.failed("非法参数"); } - String codeObj = redisTemplate.opsForValue() - .get(CacheConstants.DEFAULT_CODE_KEY + LoginTypeEnum.SMS.getType() + StringPool.AT + userDto.getPhone()); + String codeObj = RedisUtils + .get(CacheConstants.DEFAULT_CODE_KEY + LoginTypeEnum.SMS.getType() + StringPool.AT + userDto.getPhone()); if (!StrUtil.equals(codeObj, code)) { return R.failed("验证码错误"); } String username = lambdaQuery().select(SysUser::getUsername) - .eq(SysUser::getPhone, userDto.getPhone()) - .one() - .getUsername(); + .eq(SysUser::getPhone, userDto.getPhone()) + .one() + .getUsername(); // 重置密码 String password = ENCODER.encode(userDto.getNewpassword1()); this.update(Wrappers.lambdaUpdate() - .set(SysUser::getPassword, password) - .set(SysUser::getPasswordModifyTime, LocalDateTime.now()) - .set(SysUser::getPasswordExpireFlag, CommonConstants.STATUS_NORMAL) - .eq(SysUser::getPhone, userDto.getPhone())); + .set(SysUser::getPassword, password) + .set(SysUser::getPasswordModifyTime, LocalDateTime.now()) + .set(SysUser::getPasswordExpireFlag, CommonConstants.STATUS_NORMAL) + .eq(SysUser::getPhone, userDto.getPhone())); cacheManager.getCache(CacheConstants.USER_DETAILS).evict(username); return R.ok(); } @@ -694,14 +685,13 @@ public class SysUserServiceImpl extends ServiceImpl impl @Override public List listUserIdByRoleIds(List roleIdList) { return sysUserRoleMapper.selectList(Wrappers.lambdaQuery().in(SysUserRole::getRoleId, roleIdList)) - .stream() - .map(SysUserRole::getUserId) - .toList(); + .stream() + .map(SysUserRole::getUserId) + .toList(); } /** * 根据部门ID列表获取用户ID列表接口 - * * @param deptIdList 部门ID列表 * @return List 返回结果对象,包含根据部门ID列表获取到的用户ID列表信息 */