feat: 个人中心的邮箱和手机号绑定
This commit is contained in:
@@ -7,8 +7,7 @@ import com.baomidou.mybatisplus.core.metadata.IPage;
|
|||||||
import com.youlai.system.common.result.PageResult;
|
import com.youlai.system.common.result.PageResult;
|
||||||
import com.youlai.system.common.result.Result;
|
import com.youlai.system.common.result.Result;
|
||||||
import com.youlai.system.enums.ContactType;
|
import com.youlai.system.enums.ContactType;
|
||||||
import com.youlai.system.model.form.PasswordChangeForm;
|
import com.youlai.system.model.form.*;
|
||||||
import com.youlai.system.model.form.UserProfileForm;
|
|
||||||
import com.youlai.system.model.vo.UserProfileVO;
|
import com.youlai.system.model.vo.UserProfileVO;
|
||||||
import com.youlai.system.security.util.SecurityUtils;
|
import com.youlai.system.security.util.SecurityUtils;
|
||||||
import com.youlai.system.util.ExcelUtils;
|
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.model.dto.UserImportDTO;
|
||||||
import com.youlai.system.plugin.norepeat.annotation.PreventRepeatSubmit;
|
import com.youlai.system.plugin.norepeat.annotation.PreventRepeatSubmit;
|
||||||
import com.youlai.system.plugin.easyexcel.UserImportListener;
|
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.entity.SysUser;
|
||||||
import com.youlai.system.model.query.UserPageQuery;
|
import com.youlai.system.model.query.UserPageQuery;
|
||||||
import com.youlai.system.model.dto.UserExportDTO;
|
import com.youlai.system.model.dto.UserExportDTO;
|
||||||
@@ -174,12 +172,9 @@ public class SysUserController {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Operation(summary = "修改个人中心用户信息")
|
@Operation(summary = "修改个人中心用户信息")
|
||||||
@PutMapping("/{userId}/profile")
|
@PutMapping("/profile")
|
||||||
public Result<?> updateUserProfile(
|
public Result<?> updateUserProfile(@RequestBody UserProfileForm formData) {
|
||||||
@PathVariable Long userId,
|
boolean result = userService.updateUserProfile(formData);
|
||||||
@RequestBody UserProfileForm formData
|
|
||||||
) {
|
|
||||||
boolean result = userService.updateUserProfile(userId,formData);
|
|
||||||
return Result.judge(result);
|
return Result.judge(result);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -214,5 +209,26 @@ public class SysUserController {
|
|||||||
return Result.judge(result);
|
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);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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;
|
||||||
|
|
||||||
|
}
|
||||||
@@ -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;
|
||||||
|
|
||||||
|
}
|
||||||
@@ -5,10 +5,8 @@ import com.baomidou.mybatisplus.core.metadata.IPage;
|
|||||||
import com.baomidou.mybatisplus.extension.service.IService;
|
import com.baomidou.mybatisplus.extension.service.IService;
|
||||||
import com.youlai.system.enums.ContactType;
|
import com.youlai.system.enums.ContactType;
|
||||||
import com.youlai.system.model.entity.SysUser;
|
import com.youlai.system.model.entity.SysUser;
|
||||||
import com.youlai.system.model.form.PasswordChangeForm;
|
import com.youlai.system.model.form.*;
|
||||||
import com.youlai.system.model.form.UserForm;
|
|
||||||
import com.youlai.system.model.dto.UserAuthInfo;
|
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.query.UserPageQuery;
|
||||||
import com.youlai.system.model.dto.UserExportDTO;
|
import com.youlai.system.model.dto.UserExportDTO;
|
||||||
import com.youlai.system.model.vo.UserInfoVO;
|
import com.youlai.system.model.vo.UserInfoVO;
|
||||||
@@ -105,11 +103,10 @@ public interface SysUserService extends IService<SysUser> {
|
|||||||
/**
|
/**
|
||||||
* 修改个人中心用户信息
|
* 修改个人中心用户信息
|
||||||
*
|
*
|
||||||
* @param userId 用户ID
|
|
||||||
* @param formData 表单数据
|
* @param formData 表单数据
|
||||||
* @return
|
* @return
|
||||||
*/
|
*/
|
||||||
boolean updateUserProfile(Long userId, UserProfileForm formData);
|
boolean updateUserProfile(UserProfileForm formData);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 修改用户密码
|
* 修改用户密码
|
||||||
@@ -137,4 +134,20 @@ public interface SysUserService extends IService<SysUser> {
|
|||||||
* @return
|
* @return
|
||||||
*/
|
*/
|
||||||
boolean sendVerificationCode(String contact, ContactType type);
|
boolean sendVerificationCode(String contact, ContactType type);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 修改当前用户手机号
|
||||||
|
*
|
||||||
|
* @param data 表单数据
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
boolean bindMobile(MobileBindingForm data);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 修改当前用户邮箱
|
||||||
|
*
|
||||||
|
* @param data 表单数据
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
boolean bindEmail(EmailChangeForm data);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -14,16 +14,13 @@ import com.youlai.system.config.property.AliyunSmsProperties;
|
|||||||
import com.youlai.system.converter.UserConverter;
|
import com.youlai.system.converter.UserConverter;
|
||||||
import com.youlai.system.enums.ContactType;
|
import com.youlai.system.enums.ContactType;
|
||||||
import com.youlai.system.exception.BusinessException;
|
import com.youlai.system.exception.BusinessException;
|
||||||
import com.youlai.system.model.form.PasswordChangeForm;
|
import com.youlai.system.model.form.*;
|
||||||
import com.youlai.system.model.form.PasswordResetForm;
|
|
||||||
import com.youlai.system.model.form.UserProfileForm;
|
|
||||||
import com.youlai.system.model.vo.UserProfileVO;
|
import com.youlai.system.model.vo.UserProfileVO;
|
||||||
import com.youlai.system.security.util.SecurityUtils;
|
import com.youlai.system.security.util.SecurityUtils;
|
||||||
import com.youlai.system.mapper.SysUserMapper;
|
import com.youlai.system.mapper.SysUserMapper;
|
||||||
import com.youlai.system.model.dto.UserAuthInfo;
|
import com.youlai.system.model.dto.UserAuthInfo;
|
||||||
import com.youlai.system.model.bo.UserBO;
|
import com.youlai.system.model.bo.UserBO;
|
||||||
import com.youlai.system.model.entity.SysUser;
|
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.query.UserPageQuery;
|
||||||
import com.youlai.system.model.dto.UserExportDTO;
|
import com.youlai.system.model.dto.UserExportDTO;
|
||||||
import com.youlai.system.model.vo.UserInfoVO;
|
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.security.service.PermissionService;
|
||||||
import com.youlai.system.service.*;
|
import com.youlai.system.service.*;
|
||||||
import lombok.RequiredArgsConstructor;
|
import lombok.RequiredArgsConstructor;
|
||||||
import org.springframework.data.redis.core.RedisTemplate;
|
|
||||||
import org.springframework.data.redis.core.StringRedisTemplate;
|
import org.springframework.data.redis.core.StringRedisTemplate;
|
||||||
import org.springframework.security.crypto.password.PasswordEncoder;
|
import org.springframework.security.crypto.password.PasswordEncoder;
|
||||||
import org.springframework.stereotype.Service;
|
import org.springframework.stereotype.Service;
|
||||||
@@ -273,7 +269,8 @@ public class SysUserServiceImpl extends ServiceImpl<SysUserMapper, SysUser> impl
|
|||||||
* @return
|
* @return
|
||||||
*/
|
*/
|
||||||
@Override
|
@Override
|
||||||
public boolean updateUserProfile(Long userId, UserProfileForm formData) {
|
public boolean updateUserProfile(UserProfileForm formData) {
|
||||||
|
Long userId = SecurityUtils.getUserId();
|
||||||
SysUser entity = userConverter.toEntity(formData);
|
SysUser entity = userConverter.toEntity(formData);
|
||||||
entity.setId(userId);
|
entity.setId(userId);
|
||||||
return this.updateById(entity);
|
return this.updateById(entity);
|
||||||
@@ -361,4 +358,60 @@ public class SysUserServiceImpl extends ServiceImpl<SysUserMapper, SysUser> impl
|
|||||||
redisTemplate.opsForValue().set(verificationCodePrefix + contact, code, 5, TimeUnit.MINUTES );
|
redisTemplate.opsForValue().set(verificationCodePrefix + contact, code, 5, TimeUnit.MINUTES );
|
||||||
return true;
|
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<SysUser>()
|
||||||
|
.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<SysUser>()
|
||||||
|
.eq(SysUser::getId, userId)
|
||||||
|
.set(SysUser::getEmail, email)
|
||||||
|
);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user