From 58443f929469458226429c4a61298acc3bfc548a Mon Sep 17 00:00:00 2001 From: wanggeng <450292408@qq.com> Date: Mon, 21 Mar 2022 11:03:56 +0800 Subject: [PATCH] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E4=BA=86=E6=89=8B=E6=9C=BA?= =?UTF-8?q?=E5=BF=98=E8=AE=B0=E5=AF=86=E7=A0=81=E6=8E=A5=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../wgink/pojo/vos/UpdatePhonePasswordVO.java | 64 +++++++++++++++++++ .../controller/app/api/UserAppController.java | 27 ++++++++ .../service/user/service/IUserService.java | 8 +++ .../user/service/impl/UserServiceImpl.java | 21 +++++- 4 files changed, 119 insertions(+), 1 deletion(-) create mode 100644 basic-pojo/src/main/java/ink/wgink/pojo/vos/UpdatePhonePasswordVO.java diff --git a/basic-pojo/src/main/java/ink/wgink/pojo/vos/UpdatePhonePasswordVO.java b/basic-pojo/src/main/java/ink/wgink/pojo/vos/UpdatePhonePasswordVO.java new file mode 100644 index 00000000..8f2150d3 --- /dev/null +++ b/basic-pojo/src/main/java/ink/wgink/pojo/vos/UpdatePhonePasswordVO.java @@ -0,0 +1,64 @@ +package ink.wgink.pojo.vos; + +import ink.wgink.annotation.CheckEmptyAnnotation; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; + +/** + * When you feel like quitting. Think about why you started + * 当你想要放弃的时候,想想当初你为何开始 + * + * @ClassName: ForgetPasswordVO + * @Description: 忘记密码 + * @Author: WangGeng + * @Date: 2019-08-15 18:41 + * @Version: 1.0 + **/ +@ApiModel +public class UpdatePhonePasswordVO { + + @ApiModelProperty(name = "phone", value = "手机号") + @CheckEmptyAnnotation(name = "手机号") + private String phone; + @ApiModelProperty(name = "verificationCode", value = "验证码") + @CheckEmptyAnnotation(name = "验证码") + private String verificationCode; + @ApiModelProperty(name = "newPassword", value = "新密码") + @CheckEmptyAnnotation(name = "新密码") + private String newPassword; + + public String getPhone() { + return phone == null ? "" : phone.trim(); + } + + public void setPhone(String phone) { + this.phone = phone; + } + + public String getVerificationCode() { + return verificationCode == null ? "" : verificationCode.trim(); + } + + public void setVerificationCode(String verificationCode) { + this.verificationCode = verificationCode; + } + + public String getNewPassword() { + return newPassword == null ? "" : newPassword.trim(); + } + + public void setNewPassword(String newPassword) { + this.newPassword = newPassword; + } + + @Override + public String toString() { + final StringBuilder sb = new StringBuilder("{"); + sb.append("\"verificationCode\":\"") + .append(verificationCode).append('\"'); + sb.append(",\"newPassword\":\"") + .append(newPassword).append('\"'); + sb.append('}'); + return sb.toString(); + } +} diff --git a/service-user/src/main/java/ink/wgink/service/user/controller/app/api/UserAppController.java b/service-user/src/main/java/ink/wgink/service/user/controller/app/api/UserAppController.java index 56f3ed0d..b1d161a7 100644 --- a/service-user/src/main/java/ink/wgink/service/user/controller/app/api/UserAppController.java +++ b/service-user/src/main/java/ink/wgink/service/user/controller/app/api/UserAppController.java @@ -2,13 +2,16 @@ package ink.wgink.service.user.controller.app.api; import ink.wgink.annotation.CheckRequestBodyAnnotation; import ink.wgink.common.base.DefaultBaseController; +import ink.wgink.exceptions.DependencyException; import ink.wgink.exceptions.ParamsException; import ink.wgink.exceptions.SearchException; import ink.wgink.exceptions.UpdateException; import ink.wgink.interfaces.consts.ISystemConstant; +import ink.wgink.interfaces.sms.ISmsBaseService; import ink.wgink.pojo.result.ErrorResult; import ink.wgink.pojo.result.SuccessResult; import ink.wgink.pojo.result.SuccessResultData; +import ink.wgink.pojo.vos.UpdatePhonePasswordVO; import ink.wgink.service.user.pojo.dtos.AppUserDTO; import ink.wgink.pojo.vos.UpdatePasswordVO; import ink.wgink.service.user.pojo.vos.UpdateUserVO; @@ -40,6 +43,8 @@ public class UserAppController extends DefaultBaseController { @Autowired private IUserService userService; + @Autowired(required = false) + private ISmsBaseService smsBaseService; @ApiOperation(value = "修改用户信息", notes = "修改用户信息接口") @ApiImplicitParams({ @@ -129,6 +134,28 @@ public class UserAppController extends DefaultBaseController { return new SuccessResult(); } + @ApiOperation(value = "忘记手机密码", notes = "忘记手机密码接口") + @ApiResponses({@ApiResponse(code = 400, message = "请求失败", response = ErrorResult.class)}) + @PutMapping("forget-phone-password") + @CheckRequestBodyAnnotation + public SuccessResult updatePhonePassword(@RequestBody UpdatePhonePasswordVO updatePhonePasswordVO) throws ParamsException, SearchException, UpdateException, ReflectUtil.ReflectException { + if (smsBaseService == null) { + throw new DependencyException("短信依赖未引入"); + } + if (updatePhonePasswordVO.getNewPassword().length() < 6) { + throw new ParamsException("新密码长度必须大于6位"); + } + String verifyCode = smsBaseService.getVerifyCode(updatePhonePasswordVO.getPhone()); + if (StringUtils.isBlank(verifyCode)) { + throw new ParamsException("验证码为空"); + } + if (!StringUtils.equalsIgnoreCase(verifyCode, updatePhonePasswordVO.getVerificationCode())) { + throw new ParamsException("验证码错误"); + } + userService.updatePasswordByUsername(updatePhonePasswordVO.getPhone(), updatePhonePasswordVO.getNewPassword()); + return new SuccessResult(); + } + @ApiOperation(value = "获取APP用户", notes = "获取APP用户接口") @ApiImplicitParams({ @ApiImplicitParam(name = "token", value = "token", paramType = "header"), diff --git a/service-user/src/main/java/ink/wgink/service/user/service/IUserService.java b/service-user/src/main/java/ink/wgink/service/user/service/IUserService.java index faf24613..f49781a2 100644 --- a/service-user/src/main/java/ink/wgink/service/user/service/IUserService.java +++ b/service-user/src/main/java/ink/wgink/service/user/service/IUserService.java @@ -170,6 +170,14 @@ public interface IUserService extends IUserBaseService, IUserCheckService { */ void updatePasswordByUserId(String userId, UpdatePasswordVO updatePasswordVO, boolean isPasswordMd5); + /** + * 修改密码 + * + * @param username 用户名 + * @param newPassword 新密码 + */ + void updatePasswordByUsername(String username, String newPassword); + /** * 更新过期时间 * diff --git a/service-user/src/main/java/ink/wgink/service/user/service/impl/UserServiceImpl.java b/service-user/src/main/java/ink/wgink/service/user/service/impl/UserServiceImpl.java index 61d8f8be..fdd08c3e 100644 --- a/service-user/src/main/java/ink/wgink/service/user/service/impl/UserServiceImpl.java +++ b/service-user/src/main/java/ink/wgink/service/user/service/impl/UserServiceImpl.java @@ -258,10 +258,29 @@ public class UserServiceImpl extends DefaultBaseService implements IUserService if (!passwordEncoder.matches(oldPassword, userPO.getUserPassword())) { throw new UpdateException("旧密码错误"); } + updatePasswordByUserPOAndNewPassword(userPO, newPassword); + } + + @Override + public void updatePasswordByUsername(String username, String newPassword) { + UserPO userPO = getPOByUsername(username); + if (userPO == null) { + throw new SearchException("用户不存在"); + } + updatePasswordByUserPOAndNewPassword(userPO, newPassword); + } + + /** + * 修改密码 + * + * @param userPO + * @param newPassword + */ + private void updatePasswordByUserPOAndNewPassword(UserPO userPO, String newPassword) { Map params = getHashMap(4); params.put("userPassword", passwordEncoder.encode(newPassword)); params.put("gmtPasswordModified", DateUtil.getTime()); - params.put("userId", userId); + params.put("userId", userPO.getUserId()); userDao.updatePassword(params); // 日志