refactor(user): 使用RedisUtils替代StringRedisTemplate进行重置验证码缓存操作

This commit is contained in:
PIG AI committed 2025-07-06 14:48:20 +08:00
1 parent cb7e7222c4
commit 23a464bb7f
2 files changed
+86 -101

No files matched your search

@@ -41,7 +41,6 @@ public interface SysUserService extends IService<SysUser> {
/**
* 查询用户信息
*
* @param userDTO 用户数据传输对象
* @return 用户信息对象
*/
@@ -49,8 +48,7 @@ public interface SysUserService extends IService<SysUser> {
/**
* 分页查询用户信息(含有角色信息)
*
* @param page 分页对象
* @param page 分页对象
* @param userDTO 参数列表
* @return
*/
@@ -65,7 +63,6 @@ public interface SysUserService extends IService<SysUser> {
/**
* 更新当前用户基本信息
*
* @param userDto 用户信息
* @return Boolean
*/
@@ -73,8 +70,8 @@ public interface SysUserService extends IService<SysUser> {
/**
* 更新指定用户信息
* @param userDto 用户信息
* @return
* @param userDto 用户信息DTO对象
* @return 更新操作是否成功
*/
Boolean updateUser(UserDTO userDto);
@@ -109,8 +106,7 @@ public interface SysUserService extends IService<SysUser> {
/**
* excel 导入用户
*
* @param excelVOList excel 列表数据
* @param excelVOList excel 列表数据
* @param bindingResult 错误数据
* @return ok fail
*/
@@ -131,15 +127,14 @@ public interface SysUserService extends IService<SysUser> {
R<Boolean> 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<SysUser> {
/**
* 重置用户密码
* @param userDto 用户信息
* @return
* @param userDto 用户信息DTO
* @return 操作结果,包含是否成功的布尔值
*/
R<Boolean> resetUserPassword(RegisterUserDTO userDto);
/**
* 找回用户密码
* @param userDto 用户信息
* @param userDto 用户信息DTO
* @param code 验证码
* @return
* @return 操作结果,包含是否成功的布尔值
*/
R<Boolean> forgetUserPassword(RegisterUserDTO userDto, String code);
@@ -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<SysUserMapper, SysUser> impl
private final SysDeptMapper sysDeptMapper;
private final StringRedisTemplate redisTemplate;
/**
* 保存用户信息
*
* @param userDto DTO 对象
* @return success/fail
*/
@@ -135,7 +132,7 @@ public class SysUserServiceImpl extends ServiceImpl<SysUserMapper, SysUser> impl
String defaultRole = ParamResolver.getStr("USER_DEFAULT_ROLE");
// 默认角色
SysRole sysRole = sysRoleService
.getOne(Wrappers.<SysRole>lambdaQuery().eq(SysRole::getRoleCode, defaultRole));
.getOne(Wrappers.<SysRole>lambdaQuery().eq(SysRole::getRoleCode, defaultRole));
userDto.setRole(Collections.singletonList(sysRole.getRoleId()));
}
@@ -166,7 +163,6 @@ public class SysUserServiceImpl extends ServiceImpl<SysUserMapper, SysUser> impl
/**
* 根据用户信息查询用户全部信息,包括角色和权限
*
* @param userDTO 用户信息DTO
* @return 包含用户角色和权限的用户信息对象
*/
@@ -183,12 +179,12 @@ public class SysUserServiceImpl extends ServiceImpl<SysUserMapper, SysUser> impl
BeanUtils.copyProperties(dbUser, userInfo);
// 设置权限列表(menu.permission)
List<String> 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<SysUserMapper, SysUser> impl
/**
* 分页查询用户信息(含有角色信息)
*
* @param page 分页对象
* @param page 分页对象
* @param userDTO 参数列表
* @return
*/
@@ -217,7 +212,6 @@ public class SysUserServiceImpl extends ServiceImpl<SysUserMapper, SysUser> impl
/**
* 通过ID查询用户信息
*
* @param id 用户ID
* @return 用户信息
*/
@@ -228,7 +222,6 @@ public class SysUserServiceImpl extends ServiceImpl<SysUserMapper, SysUser> impl
/**
* 删除用户
*
* @param ids 用户ID 列表
* @return Boolean
*/
@@ -247,8 +240,8 @@ public class SysUserServiceImpl extends ServiceImpl<SysUserMapper, SysUser> impl
sysUserDeptMapper.delete(Wrappers.<SysUserDept>lambdaQuery().in(SysUserDept::getUserId, CollUtil.toList(ids)));
sysUserPostMapper.delete(Wrappers.<SysUserPost>lambdaQuery().in(SysUserPost::getUserId, CollUtil.toList(ids)));
sysTenantUserMapper.delete(Wrappers.<SysTenantUser>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<SysUserMapper, SysUser> impl
// 更新用户角色表
if (userDto.getRole() != null) {
sysUserRoleMapper
.delete(Wrappers.<SysUserRole>lambdaQuery().eq(SysUserRole::getUserId, userDto.getUserId()));
.delete(Wrappers.<SysUserRole>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<SysUserMapper, SysUser> impl
// 更新用户岗位表
if (userDto.getPost() != null) {
sysUserPostMapper
.delete(Wrappers.<SysUserPost>lambdaQuery().eq(SysUserPost::getUserId, userDto.getUserId()));
.delete(Wrappers.<SysUserPost>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<SysUserMapper, SysUser> impl
// 更新用户部门表
if (Objects.nonNull(userDto.getDeptId())) {
sysUserDeptMapper
.delete(Wrappers.<SysUserDept>lambdaQuery().eq(SysUserDept::getUserId, userDto.getUserId()));
.delete(Wrappers.<SysUserDept>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<SysUserMapper, SysUser> impl
/**
* 查询上级部门的用户信息
*
* @param username 用户名
* @return R
*/
@@ -339,18 +331,17 @@ public class SysUserServiceImpl extends ServiceImpl<SysUserMapper, SysUser> impl
// 查询用户部门ID
List<Long> parentDeptList = sysDeptList.stream().map(SysDept::getParentId).toList();
List<Long> userIdList = sysUserDeptMapper
.selectList(Wrappers.<SysUserDept>lambdaQuery().in(SysUserDept::getDeptId, parentDeptList))
.stream()
.map(SysUserDept::getUserId)
.toList();
.selectList(Wrappers.<SysUserDept>lambdaQuery().in(SysUserDept::getDeptId, parentDeptList))
.stream()
.map(SysUserDept::getUserId)
.toList();
return this.list(Wrappers.<SysUser>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<SysUserMapper, SysUser> 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<SysUserMapper, SysUser> impl
/**
* excel 导入用户, 插入正确的 错误的提示行号
*
* @param excelVOList excel 列表数据
* @param excelVOList excel 列表数据
* @param bindingResult 错误数据
* @return ok fail
*/
@@ -406,7 +396,7 @@ public class SysUserServiceImpl extends ServiceImpl<SysUserMapper, SysUser> impl
Set<String> 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<SysUserMapper, SysUser> impl
// 判断输入的部门名称列表是否合法
Optional<SysDept> 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<SysUserMapper, SysUser> impl
// 判断输入的角色名称列表是否合法
List<String> roleNameList = StrUtil.split(excel.getRoleNameList(), StrUtil.COMMA);
List<SysRole> 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<SysUserMapper, SysUser> impl
// 判断输入的部门名称列表是否合法
List<String> postNameList = StrUtil.split(excel.getPostNameList(), StrUtil.COMMA);
List<SysPost> 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<SysUserMapper, SysUser> 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<SysUserMapper, SysUser> impl
* 插入excel User
*/
private void insertExcelUser(UserExcelVO excel, Optional<SysDept> deptOptional, List<SysRole> roleCollList,
List<SysPost> postCollList) {
List<SysPost> postCollList) {
UserDTO userDTO = new UserDTO();
userDTO.setUsername(excel.getUsername());
userDTO.setPhone(excel.getPhone());
@@ -490,7 +481,6 @@ public class SysUserServiceImpl extends ServiceImpl<SysUserMapper, SysUser> impl
/**
* 注册用户 赋予用户默认角色
*
* @param userDto 用户信息
* @return success/false
*/
@@ -499,7 +489,7 @@ public class SysUserServiceImpl extends ServiceImpl<SysUserMapper, SysUser> impl
public R<Boolean> registerUser(RegisterUserDTO userDto) {
// 判断用户名是否存在
boolean usernameExists = this
.exists(Wrappers.<SysUser>lambdaQuery().eq(SysUser::getUsername, userDto.getUsername()));
.exists(Wrappers.<SysUser>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<SysUserMapper, SysUser> impl
/**
* 锁定用户
*
* @param username 用户名
* @return 操作结果,包含是否成功
*/
@@ -538,7 +527,6 @@ public class SysUserServiceImpl extends ServiceImpl<SysUserMapper, SysUser> impl
/**
* 修改用户密码
*
* @param userDto 用户数据传输对象,包含原密码和新密码
* @return 操作结果
* @CacheEvict 清除用户详情缓存
@@ -562,9 +550,9 @@ public class SysUserServiceImpl extends ServiceImpl<SysUserMapper, SysUser> impl
String password = ENCODER.encode(userDto.getNewpassword1());
this.update(Wrappers.<SysUser>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<SysUserMapper, SysUser> impl
// 微信开放平台 (普通用户扫码登录)
if (type.equals(LoginTypeEnum.WECHAT.getType())) {
wrapper = Wrappers.<SysUser>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.<SysUser>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.<SysUser>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.<SysUser>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<SysUserMapper, SysUser> 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<SysUserMapper, SysUser> impl
// 重置密码
String password = ENCODER.encode(userDto.getNewpassword1());
this.update(Wrappers.<SysUser>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<SysUserMapper, SysUser> 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.<SysUser>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<SysUserMapper, SysUser> impl
@Override
public List<Long> listUserIdByRoleIds(List<Long> roleIdList) {
return sysUserRoleMapper.selectList(Wrappers.<SysUserRole>lambdaQuery().in(SysUserRole::getRoleId, roleIdList))
.stream()
.map(SysUserRole::getUserId)
.toList();
.stream()
.map(SysUserRole::getUserId)
.toList();
}
/**
* 根据部门ID列表获取用户ID列表接口
*
* @param deptIdList 部门ID列表
* @return List<Long> 返回结果对象,包含根据部门ID列表获取到的用户ID列表信息
*/