From 2b43ebd8a3b7fd049212aeed75553e167abc8c4d Mon Sep 17 00:00:00 2001 From: ray <1490493387@qq.com> Date: Tue, 20 Aug 2024 00:18:05 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E4=B8=AA=E4=BA=BA=E4=B8=AD=E5=BF=83?= =?UTF-8?q?=E7=9A=84=E9=82=AE=E7=AE=B1=E5=92=8C=E6=89=8B=E6=9C=BA=E5=8F=B7?= =?UTF-8?q?=E7=BB=91=E5=AE=9A?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../system/controller/SysUserController.java | 34 +++++++--- .../system/model/form/EmailChangeForm.java | 22 +++++++ .../system/model/form/MobileBindingForm.java | 22 +++++++ .../youlai/system/service/SysUserService.java | 23 +++++-- .../service/impl/SysUserServiceImpl.java | 65 +++++++++++++++++-- 5 files changed, 146 insertions(+), 20 deletions(-) create mode 100644 src/main/java/com/youlai/system/model/form/EmailChangeForm.java create mode 100644 src/main/java/com/youlai/system/model/form/MobileBindingForm.java diff --git a/src/main/java/com/youlai/system/controller/SysUserController.java b/src/main/java/com/youlai/system/controller/SysUserController.java index 6db8f3cd..13c621e5 100644 --- a/src/main/java/com/youlai/system/controller/SysUserController.java +++ b/src/main/java/com/youlai/system/controller/SysUserController.java @@ -7,8 +7,7 @@ import com.baomidou.mybatisplus.core.metadata.IPage; import com.youlai.system.common.result.PageResult; import com.youlai.system.common.result.Result; import com.youlai.system.enums.ContactType; -import com.youlai.system.model.form.PasswordChangeForm; -import com.youlai.system.model.form.UserProfileForm; +import com.youlai.system.model.form.*; import com.youlai.system.model.vo.UserProfileVO; import com.youlai.system.security.util.SecurityUtils; import com.youlai.system.util.ExcelUtils; @@ -16,7 +15,6 @@ import com.youlai.system.enums.LogModuleEnum; import com.youlai.system.model.dto.UserImportDTO; import com.youlai.system.plugin.norepeat.annotation.PreventRepeatSubmit; import com.youlai.system.plugin.easyexcel.UserImportListener; -import com.youlai.system.model.form.UserForm; import com.youlai.system.model.entity.SysUser; import com.youlai.system.model.query.UserPageQuery; import com.youlai.system.model.dto.UserExportDTO; @@ -174,12 +172,9 @@ public class SysUserController { } @Operation(summary = "修改个人中心用户信息") - @PutMapping("/{userId}/profile") - public Result updateUserProfile( - @PathVariable Long userId, - @RequestBody UserProfileForm formData - ) { - boolean result = userService.updateUserProfile(userId,formData); + @PutMapping("/profile") + public Result updateUserProfile(@RequestBody UserProfileForm formData) { + boolean result = userService.updateUserProfile(formData); return Result.judge(result); } @@ -214,5 +209,26 @@ public class SysUserController { return Result.judge(result); } + @Operation(summary = "绑定个人中心用户手机号") + @PutMapping(value = "/mobile") + public Result bindMobile( + @RequestBody @Validated MobileBindingForm data + ) { + boolean result = userService.bindMobile(data); + return Result.judge(result); + } + + + @Operation(summary = "绑定个人中心用户邮箱") + @PutMapping(value = "/email") + public Result bindEmail( + @RequestBody @Validated EmailChangeForm data + ) { + boolean result = userService.bindEmail(data); + return Result.judge(result); + } + + + } diff --git a/src/main/java/com/youlai/system/model/form/EmailChangeForm.java b/src/main/java/com/youlai/system/model/form/EmailChangeForm.java new file mode 100644 index 00000000..8ae16df2 --- /dev/null +++ b/src/main/java/com/youlai/system/model/form/EmailChangeForm.java @@ -0,0 +1,22 @@ +package com.youlai.system.model.form; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; + +/** + * 修改邮箱表单 + * + * @author Ray + * @since 2024/8/19 + */ +@Schema(description = "修改邮箱表单") +@Data +public class EmailChangeForm { + + @Schema(description = "原密码") + private String email; + + @Schema(description = "验证码") + private String code; + +} diff --git a/src/main/java/com/youlai/system/model/form/MobileBindingForm.java b/src/main/java/com/youlai/system/model/form/MobileBindingForm.java new file mode 100644 index 00000000..9a678316 --- /dev/null +++ b/src/main/java/com/youlai/system/model/form/MobileBindingForm.java @@ -0,0 +1,22 @@ +package com.youlai.system.model.form; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; + +/** + * 修改手机表单 + * + * @author Ray + * @since 2024/8/19 + */ +@Schema(description = "修改手机表单") +@Data +public class MobileBindingForm { + + @Schema(description = "原密码") + private String mobile; + + @Schema(description = "验证码") + private String code; + +} diff --git a/src/main/java/com/youlai/system/service/SysUserService.java b/src/main/java/com/youlai/system/service/SysUserService.java index d85cf46f..4a5ba81f 100644 --- a/src/main/java/com/youlai/system/service/SysUserService.java +++ b/src/main/java/com/youlai/system/service/SysUserService.java @@ -5,10 +5,8 @@ import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.service.IService; import com.youlai.system.enums.ContactType; import com.youlai.system.model.entity.SysUser; -import com.youlai.system.model.form.PasswordChangeForm; -import com.youlai.system.model.form.UserForm; +import com.youlai.system.model.form.*; import com.youlai.system.model.dto.UserAuthInfo; -import com.youlai.system.model.form.UserProfileForm; import com.youlai.system.model.query.UserPageQuery; import com.youlai.system.model.dto.UserExportDTO; import com.youlai.system.model.vo.UserInfoVO; @@ -105,11 +103,10 @@ public interface SysUserService extends IService { /** * 修改个人中心用户信息 * - * @param userId 用户ID * @param formData 表单数据 * @return */ - boolean updateUserProfile(Long userId, UserProfileForm formData); + boolean updateUserProfile(UserProfileForm formData); /** * 修改用户密码 @@ -137,4 +134,20 @@ public interface SysUserService extends IService { * @return */ boolean sendVerificationCode(String contact, ContactType type); + + /** + * 修改当前用户手机号 + * + * @param data 表单数据 + * @return + */ + boolean bindMobile(MobileBindingForm data); + + /** + * 修改当前用户邮箱 + * + * @param data 表单数据 + * @return + */ + boolean bindEmail(EmailChangeForm data); } diff --git a/src/main/java/com/youlai/system/service/impl/SysUserServiceImpl.java b/src/main/java/com/youlai/system/service/impl/SysUserServiceImpl.java index 084c6a7d..16893bc3 100644 --- a/src/main/java/com/youlai/system/service/impl/SysUserServiceImpl.java +++ b/src/main/java/com/youlai/system/service/impl/SysUserServiceImpl.java @@ -14,16 +14,13 @@ import com.youlai.system.config.property.AliyunSmsProperties; import com.youlai.system.converter.UserConverter; import com.youlai.system.enums.ContactType; import com.youlai.system.exception.BusinessException; -import com.youlai.system.model.form.PasswordChangeForm; -import com.youlai.system.model.form.PasswordResetForm; -import com.youlai.system.model.form.UserProfileForm; +import com.youlai.system.model.form.*; import com.youlai.system.model.vo.UserProfileVO; import com.youlai.system.security.util.SecurityUtils; import com.youlai.system.mapper.SysUserMapper; import com.youlai.system.model.dto.UserAuthInfo; import com.youlai.system.model.bo.UserBO; import com.youlai.system.model.entity.SysUser; -import com.youlai.system.model.form.UserForm; import com.youlai.system.model.query.UserPageQuery; import com.youlai.system.model.dto.UserExportDTO; import com.youlai.system.model.vo.UserInfoVO; @@ -31,7 +28,6 @@ import com.youlai.system.model.vo.UserPageVO; import com.youlai.system.security.service.PermissionService; import com.youlai.system.service.*; import lombok.RequiredArgsConstructor; -import org.springframework.data.redis.core.RedisTemplate; import org.springframework.data.redis.core.StringRedisTemplate; import org.springframework.security.crypto.password.PasswordEncoder; import org.springframework.stereotype.Service; @@ -273,7 +269,8 @@ public class SysUserServiceImpl extends ServiceImpl impl * @return */ @Override - public boolean updateUserProfile(Long userId, UserProfileForm formData) { + public boolean updateUserProfile(UserProfileForm formData) { + Long userId = SecurityUtils.getUserId(); SysUser entity = userConverter.toEntity(formData); entity.setId(userId); return this.updateById(entity); @@ -361,4 +358,60 @@ public class SysUserServiceImpl extends ServiceImpl impl redisTemplate.opsForValue().set(verificationCodePrefix + contact, code, 5, TimeUnit.MINUTES ); return true; } + + /** + * 修改当前用户手机号码 + * + * @param data 表单数据 + * @return + */ + @Override + public boolean bindMobile(MobileBindingForm data) { + Long userId = SecurityUtils.getUserId(); + SysUser user = this.getById(userId); + if (user == null) { + throw new BusinessException("用户不存在"); + } + // 校验验证码 + String verificationCode = data.getCode(); + String contact = data.getMobile(); + String verificationCodeKey = RedisConstants.MOBILE_VERIFICATION_CODE_PREFIX + contact; + String code = redisTemplate.opsForValue().get(verificationCodeKey); + if (!verificationCode.equals(code)) { + throw new BusinessException("验证码错误"); + } + // 更新手机号码 + return this.update(new LambdaUpdateWrapper() + .eq(SysUser::getId, userId) + .set(SysUser::getMobile, contact) + ); + } + + /** + * 修改当前用户邮箱 + * + * @param data 表单数据 + * @return + */ + @Override + public boolean bindEmail(EmailChangeForm data) { + Long userId = SecurityUtils.getUserId(); + SysUser user = this.getById(userId); + if (user == null) { + throw new BusinessException("用户不存在"); + } + // 校验验证码 + String verificationCode = data.getCode(); + String email = data.getEmail(); + String verificationCodeKey = RedisConstants.EMAIL_VERIFICATION_CODE_PREFIX + email; + String code = redisTemplate.opsForValue().get(verificationCodeKey); + if (!verificationCode.equals(code)) { + throw new BusinessException("验证码错误"); + } + // 更新邮箱 + return this.update(new LambdaUpdateWrapper() + .eq(SysUser::getId, userId) + .set(SysUser::getEmail, email) + ); + } }