From cba22d40660bc545b7255226e2ffa1ee9315b2e7 Mon Sep 17 00:00:00 2001 From: akhan Date: Fri, 28 Mar 2025 11:18:34 +0800 Subject: [PATCH] =?UTF-8?q?=E2=9C=A8=20feat:=20=E7=99=BB=E5=BD=95=E9=A1=B5?= =?UTF-8?q?=E6=96=B0=E5=A2=9E=E6=89=BE=E5=9B=9E=E5=AF=86=E7=A0=81=E5=8A=9F?= =?UTF-8?q?=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/SysRegisterController.java | 18 +++++++++--- .../pigx/admin/service/SysUserService.java | 9 ++++++ .../service/impl/SysUserServiceImpl.java | 29 +++++++++++++++++++ 3 files changed, 52 insertions(+), 4 deletions(-) diff --git a/pigx-upms/pigx-upms-biz/src/main/java/com/pig4cloud/pigx/admin/controller/SysRegisterController.java b/pigx-upms/pigx-upms-biz/src/main/java/com/pig4cloud/pigx/admin/controller/SysRegisterController.java index 3717e19d9..6deca3b6a 100644 --- a/pigx-upms/pigx-upms-biz/src/main/java/com/pig4cloud/pigx/admin/controller/SysRegisterController.java +++ b/pigx-upms/pigx-upms-biz/src/main/java/com/pig4cloud/pigx/admin/controller/SysRegisterController.java @@ -1,16 +1,14 @@ package com.pig4cloud.pigx.admin.controller; import com.pig4cloud.pigx.admin.api.dto.RegisterUserDTO; +import com.pig4cloud.pigx.admin.api.dto.UserDTO; import com.pig4cloud.pigx.admin.service.SysUserService; import com.pig4cloud.pigx.common.core.util.R; import com.pig4cloud.pigx.common.log.annotation.SysLog; import com.pig4cloud.pigx.common.security.annotation.Inner; import lombok.RequiredArgsConstructor; import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; -import org.springframework.web.bind.annotation.PostMapping; -import org.springframework.web.bind.annotation.RequestBody; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; +import org.springframework.web.bind.annotation.*; /** * @author lengleng @@ -51,4 +49,16 @@ public class SysRegisterController { return userService.resetUserPassword(userDto); } + /** + * 找回密码 + * + * @param userDto 用户信息 + * @param code 验证码 + * @return success/false + */ + @SysLog("找回用户密码") + @PostMapping("/forget/{code}") + public R forgetUserPassword(@RequestBody RegisterUserDTO userDto, @PathVariable String code) { + return userService.forgetUserPassword(userDto, code); + } } 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 77d6498c7..576c16819 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 @@ -186,4 +186,13 @@ public interface SysUserService extends IService { * @return */ R resetUserPassword(RegisterUserDTO userDto); + + /** + * 找回用户密码 + * + * @param userDto 用户信息 + * @param code 验证码 + * @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 091a6b0e1..5c2bbb068 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 @@ -25,6 +25,7 @@ import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.core.toolkit.StringPool; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; @@ -57,11 +58,13 @@ 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; import org.springframework.transaction.annotation.Transactional; import org.springframework.validation.BindingResult; +import org.springframework.validation.annotation.Validated; import java.time.LocalDateTime; import java.util.*; @@ -92,6 +95,8 @@ public class SysUserServiceImpl extends ServiceImpl impl private final CacheManager cacheManager; + private final StringRedisTemplate redisTemplate; + /** * 保存用户信息 * @@ -573,6 +578,30 @@ public class SysUserServiceImpl extends ServiceImpl impl return R.ok(); } + @Override + public R forgetUserPassword(RegisterUserDTO userDto, String code) { + if (StrUtil.isBlank(userDto.getPhone())){ + return R.failed("非法参数"); + } + + String codeObj = redisTemplate.opsForValue().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(); + + // 重置密码 + 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())); + cacheManager.getCache(CacheConstants.USER_DETAILS).evict(username); + return R.ok(); + } + @Override public List listUserIdByRoleIds(List roleIdList) { return sysUserRoleMapper.selectList(Wrappers.lambdaQuery().in(SysUserRole::getRoleId, roleIdList))