diff --git a/basic-pojo/src/main/java/ink/wgink/pojo/vos/UpdatePhoneUsernameVO.java b/basic-pojo/src/main/java/ink/wgink/pojo/vos/UpdatePhoneUsernameVO.java new file mode 100644 index 00000000..b4c5c409 --- /dev/null +++ b/basic-pojo/src/main/java/ink/wgink/pojo/vos/UpdatePhoneUsernameVO.java @@ -0,0 +1,39 @@ +package ink.wgink.pojo.vos; + +import ink.wgink.annotation.CheckEmptyAnnotation; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; + +/** + * @ClassName: UpdatePhoneUsernameVO + * @Description: 更改手机用户名 + * @Author: wanggeng + * @Date: 2022/11/1 16:51 + * @Version: 1.0 + */ +@ApiModel +public class UpdatePhoneUsernameVO { + + @ApiModelProperty(name = "newPhone", value = "新手机号") + @CheckEmptyAnnotation(name = "新手机号", verifyType = "newPhone") + private String newPhone; + @ApiModelProperty(name = "verificationCode", value = "verificationCode") + @CheckEmptyAnnotation(name = "验证码") + private String verificationCode; + + public String getNewPhone() { + return newPhone == null ? "" : newPhone.trim(); + } + + public void setNewPhone(String newPhone) { + this.newPhone = newPhone; + } + + public String getVerificationCode() { + return verificationCode == null ? "" : verificationCode.trim(); + } + + public void setVerificationCode(String verificationCode) { + this.verificationCode = verificationCode; + } +} 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 0419386d..80ff9b60 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 @@ -15,6 +15,7 @@ import ink.wgink.pojo.result.SuccessResultData; import ink.wgink.pojo.vos.IdsVO; import ink.wgink.pojo.vos.UpdatePasswordVO; import ink.wgink.pojo.vos.UpdatePhonePasswordVO; +import ink.wgink.pojo.vos.UpdatePhoneUsernameVO; import ink.wgink.service.user.pojo.dtos.AppUserDTO; import ink.wgink.service.user.pojo.vos.UpdateUserVO; import ink.wgink.service.user.service.IUserService; @@ -148,6 +149,31 @@ public class UserAppController extends DefaultBaseController { return new SuccessResult(); } + @ApiOperation(value = "修改手机用户名", notes = "修改手机用户名接口") + @ApiImplicitParams({ + @ApiImplicitParam(name = "token", value = "token", paramType = "header"), + }) + @ApiResponses({@ApiResponse(code = 400, message = "请求失败", response = ErrorResult.class)}) + @PutMapping("update-phone-username/{phone}") + @CheckRequestBodyAnnotation + public SuccessResult updatePhoneUsername(@PathVariable("phone") String phone, @RequestBody UpdatePhoneUsernameVO updatePhoneUsernameVO) throws Exception { + if (smsBaseService == null) { + throw new DependencyException("短信依赖未引入"); + } + String verifyCode = smsBaseService.getVerifyCode(updatePhoneUsernameVO.getNewPhone()); + if (!RegexUtil.isPhone(phone)) { + throw new ParamsException("手机格式不正确"); + } + if (StringUtils.isBlank(verifyCode)) { + throw new ParamsException("验证码为空"); + } + if (!StringUtils.equalsIgnoreCase(verifyCode, updatePhoneUsernameVO.getVerificationCode())) { + throw new ParamsException("验证码错误"); + } + userService.updatePhoneUsername(phone, updatePhoneUsernameVO); + return new SuccessResult(); + } + @ApiOperation(value = "忘记手机密码", notes = "忘记手机密码接口") @ApiResponses({@ApiResponse(code = 400, message = "请求失败", response = ErrorResult.class)}) @PutMapping("forget-phone-password") 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 b30bfdeb..9ef9cf68 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 @@ -4,6 +4,7 @@ import ink.wgink.interfaces.user.IUserBaseService; import ink.wgink.interfaces.user.IUserCheckService; import ink.wgink.pojo.result.UploadExcelResultDTO; import ink.wgink.pojo.vos.UpdatePasswordVO; +import ink.wgink.pojo.vos.UpdatePhoneUsernameVO; import ink.wgink.service.user.enums.UserStateEnum; import ink.wgink.service.user.enums.UserTypeEnum; import ink.wgink.service.user.pojo.dtos.AppUserDTO; @@ -154,6 +155,15 @@ public interface IUserService extends IUserBaseService, IUserCheckService { */ void updateUsername(String userId, UpdateUsernameVO updateUsernameVO, boolean updateAdjustment); + /** + * 修改用户名 + * + * @param phone + * @param updatePhoneUsernameVO + */ + void updatePhoneUsername(String phone, UpdatePhoneUsernameVO updatePhoneUsernameVO); + + /** * 修改密码 * 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 c288af98..4473af80 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 @@ -26,6 +26,7 @@ import ink.wgink.pojo.result.SuccessResultData; import ink.wgink.pojo.result.SuccessResultList; import ink.wgink.pojo.result.UploadExcelResultDTO; import ink.wgink.pojo.vos.UpdatePasswordVO; +import ink.wgink.pojo.vos.UpdatePhoneUsernameVO; import ink.wgink.service.user.dao.IUserDao; import ink.wgink.service.user.enums.UserStateEnum; import ink.wgink.service.user.enums.UserTypeEnum; @@ -259,13 +260,40 @@ public class UserServiceImpl extends DefaultBaseService implements IUserService updateMongoLoginUser(userId); if (updateAdjustment) { - updateUsernameAdjustment(userId, oldUserDTO.getUserUsername(), updateUsernameVO); + updateUsernameAdjustment(userId, oldUserDTO.getUserName(), oldUserDTO.getUserUsername(), updateUsernameVO); } if (userUpdateAfterHandler != null) { userUpdateAfterHandler.handle(userId); } } + @Override + public void updatePhoneUsername(String phone, UpdatePhoneUsernameVO updatePhoneUsernameVO) { + UserPO userPO = getPOByUsername(phone); + if (userPO == null) { + throw new SearchException("用户名不存在"); + } + UserPO newUserPO = getPOByUsername(updatePhoneUsernameVO.getNewPhone()); + if (newUserPO != null && !StringUtils.equals(userPO.getUserId(), newUserPO.getUserId())) { + throw new SearchException("新用户名已经存在"); + } + Map params = getHashMap(2); + params.put("userUsername", updatePhoneUsernameVO.getNewPhone()); + params.put("userId", userPO.getUserId()); + userDao.updateUsername(params); + + updateMongoLoginUser(userPO.getUserId()); + + UpdateUsernameVO updateUsernameVO = new UpdateUsernameVO(); + updateUsernameVO.setUsername(updatePhoneUsernameVO.getNewPhone()); + updateUsernameVO.setUpdateReason("用户自行修改"); + updateUsernameAdjustment(userPO.getUserId(), userPO.getUserName(), userPO.getUserUsername(), updateUsernameVO); + + if (userUpdateAfterHandler != null) { + userUpdateAfterHandler.handle(userPO.getUserId()); + } + } + @Override public void updatePassword(UpdatePasswordVO updatePasswordVO) { updatePasswordByUserId(securityComponent.getCurrentUser().getUserId(), updatePasswordVO); @@ -872,27 +900,15 @@ public class UserServiceImpl extends DefaultBaseService implements IUserService * 更新用户名记录 * * @param userId + * @param userName * @param oldUsername * @param updateUsernameVO */ - private void updateUsernameAdjustment(String userId, String oldUsername, UpdateUsernameVO updateUsernameVO) { - Map params = getHashMap(1); - UserDTO updateUserDTO = get(userId); - if (updateUserDTO == null) { - throw new SearchException("修改用户不存在"); - } - UserDTO userDTO = getByUsername(updateUsernameVO.getUsername()); - if (userDTO != null && !StringUtils.equals(userId, userDTO.getUserId())) { - throw new SearchException("新用户名已经存在"); - } - params.put("userId", userId); - params.put("userUsername", updateUsernameVO.getUsername()); - userDao.updateUsername(params); - + private void updateUsernameAdjustment(String userId, String userName, String oldUsername, UpdateUsernameVO updateUsernameVO) { // 日志 UserAdjustmentBO userAdjustmentBO = new UserAdjustmentBO(); userAdjustmentBO.setUserId(userId); - userAdjustmentBO.setUserName(updateUserDTO.getUserName()); + userAdjustmentBO.setUserName(userName); userAdjustmentBO.setUpdateType(UserUpdateTypeEnum.USERNAME.getValue()); userAdjustmentBO.setOldValue(oldUsername); userAdjustmentBO.setNewValue(updateUsernameVO.getUsername());