Commit 7d45cfa33ab53e227c4ae891508a1cacff78382a

Authored by 芋道源码
Committed by Gitee
2 parents d5fb438f b621f15b

!22 个人信息 修改信息、修改密码

Merge pull request !22 from niu_dehua/feat_userprofile
src/main/java/cn/iocoder/dashboard/modules/system/controller/user/SysUserProfileController.java
... ... @@ -3,8 +3,9 @@ package cn.iocoder.dashboard.modules.system.controller.user;
3 3 import cn.iocoder.dashboard.common.exception.util.ServiceExceptionUtil;
4 4 import cn.iocoder.dashboard.common.pojo.CommonResult;
5 5 import cn.iocoder.dashboard.framework.security.core.util.SecurityFrameworkUtils;
6   -import cn.iocoder.dashboard.modules.system.controller.user.vo.user.SysUserProfileRespVO;
7   -import cn.iocoder.dashboard.modules.system.controller.user.vo.user.SysUserProfileUpdateReqVO;
  6 +import cn.iocoder.dashboard.modules.system.controller.user.vo.profile.SysUserProfileRespVO;
  7 +import cn.iocoder.dashboard.modules.system.controller.user.vo.profile.SysUserProfileUpdatePasswordReqVo;
  8 +import cn.iocoder.dashboard.modules.system.controller.user.vo.profile.SysUserProfileUpdateReqVO;
8 9 import cn.iocoder.dashboard.modules.system.convert.auth.SysAuthConvert;
9 10 import cn.iocoder.dashboard.modules.system.convert.user.SysUserConvert;
10 11 import cn.iocoder.dashboard.modules.system.dal.dataobject.permission.SysRoleDO;
... ... @@ -16,11 +17,17 @@ import cn.iocoder.dashboard.util.collection.CollectionUtils;
16 17 import io.swagger.annotations.Api;
17 18 import io.swagger.annotations.ApiOperation;
18 19 import lombok.extern.slf4j.Slf4j;
19   -import org.springframework.web.bind.annotation.*;
  20 +import org.springframework.web.bind.annotation.GetMapping;
  21 +import org.springframework.web.bind.annotation.PutMapping;
  22 +import org.springframework.web.bind.annotation.RequestBody;
  23 +import org.springframework.web.bind.annotation.RequestMapping;
  24 +import org.springframework.web.bind.annotation.RequestParam;
  25 +import org.springframework.web.bind.annotation.RestController;
20 26 import org.springframework.web.multipart.MultipartFile;
21 27  
22 28 import javax.annotation.Resource;
23 29 import javax.servlet.http.HttpServletRequest;
  30 +import javax.validation.Valid;
24 31 import java.io.IOException;
25 32 import java.util.List;
26 33  
... ... @@ -57,12 +64,20 @@ public class SysUserProfileController {
57 64  
58 65 @PutMapping("/update")
59 66 @ApiOperation("修改用户个人信息")
60   - public CommonResult<Boolean> updateUserProfile(@RequestBody SysUserProfileUpdateReqVO reqVO, HttpServletRequest request) {
  67 + public CommonResult<Boolean> updateUserProfile(@Valid @RequestBody SysUserProfileUpdateReqVO reqVO, HttpServletRequest request) {
61 68 userService.updateUserProfile(reqVO);
62 69 SecurityFrameworkUtils.setLoginUser(SysAuthConvert.INSTANCE.convert(reqVO), request);
63 70 return success(true);
64 71 }
65 72  
  73 + @PutMapping("/update-password")
  74 + @ApiOperation("修改用户个人密码")
  75 + public CommonResult<Boolean> updateUserProfilePassword(@Valid @RequestBody SysUserProfileUpdatePasswordReqVo reqVO, HttpServletRequest request) {
  76 + userService.updateUserPassword(reqVO);
  77 + SecurityFrameworkUtils.setLoginUser(SysAuthConvert.INSTANCE.convert(reqVO), request);
  78 + return success(true);
  79 + }
  80 +
66 81 @PutMapping("/upload-avatar")
67 82 @ApiOperation("上传用户个人头像")
68 83 public CommonResult<Boolean> updateUserAvatar(@RequestParam("avatarFile") MultipartFile file) throws IOException {
... ...
src/main/java/cn/iocoder/dashboard/modules/system/controller/user/vo/user/SysUserProfileRespVO.java renamed to src/main/java/cn/iocoder/dashboard/modules/system/controller/user/vo/profile/SysUserProfileRespVO.java
1   -package cn.iocoder.dashboard.modules.system.controller.user.vo.user;
  1 +package cn.iocoder.dashboard.modules.system.controller.user.vo.profile;
2 2  
  3 +import cn.iocoder.dashboard.modules.system.controller.user.vo.user.SysUserBaseVO;
3 4 import io.swagger.annotations.ApiModel;
4 5 import io.swagger.annotations.ApiModelProperty;
5 6 import lombok.AllArgsConstructor;
... ... @@ -7,15 +8,30 @@ import lombok.Data;
7 8 import lombok.EqualsAndHashCode;
8 9 import lombok.NoArgsConstructor;
9 10  
  11 +import java.util.Date;
10 12 import java.util.Set;
11 13  
12 14  
13   -@ApiModel("用户个人中心信息 Response VO")
14 15 @Data
  16 +@EqualsAndHashCode(callSuper = true)
15 17 @NoArgsConstructor
16 18 @AllArgsConstructor
17   -@EqualsAndHashCode(callSuper = true)
18   -public class SysUserProfileRespVO extends SysUserRespVO {
  19 +@ApiModel("用户个人中心信息 Response VO")
  20 +public class SysUserProfileRespVO extends SysUserBaseVO {
  21 + @ApiModelProperty(value = "用户编号", required = true, example = "1")
  22 + private Long id;
  23 +
  24 + @ApiModelProperty(value = "状态", required = true, example = "1", notes = "参见 SysCommonStatusEnum 枚举类")
  25 + private Integer status;
  26 +
  27 + @ApiModelProperty(value = "最后登陆 IP", required = true, example = "192.168.1.1")
  28 + private String loginIp;
  29 +
  30 + @ApiModelProperty(value = "最后登录时间", required = true, example = "时间戳格式")
  31 + private Date loginDate;
  32 +
  33 + @ApiModelProperty(value = "创建时间", required = true, example = "时间戳格式")
  34 + private Date createTime;
19 35  
20 36 /**
21 37 * 所属角色
... ...
src/main/java/cn/iocoder/dashboard/modules/system/controller/user/vo/profile/SysUserProfileUpdatePasswordReqVo.java 0 → 100644
  1 +package cn.iocoder.dashboard.modules.system.controller.user.vo.profile;
  2 +
  3 +import io.swagger.annotations.ApiModel;
  4 +import io.swagger.annotations.ApiModelProperty;
  5 +import lombok.Data;
  6 +import org.hibernate.validator.constraints.Length;
  7 +
  8 +import javax.validation.constraints.NotEmpty;
  9 +import javax.validation.constraints.NotNull;
  10 +
  11 +/**
  12 + * 类名称:SysUserUpdatePersonalPasswordReqVo
  13 + * ***********************
  14 + * <p>
  15 + * 类描述:更新用户个人密码
  16 + *
  17 + * @author deng on 2021/3/15 22:04
  18 + */
  19 +@ApiModel("用户个人中心更新密码 Response VO")
  20 +@Data
  21 +public class SysUserProfileUpdatePasswordReqVo {
  22 +
  23 + @ApiModelProperty(value = "用户编号", required = true, example = "1024")
  24 + @NotNull(message = "用户编号不能为空")
  25 + private Long id;
  26 +
  27 + @ApiModelProperty(value = "旧密码", required = true, example = "123456")
  28 + @NotEmpty(message = "旧密码不能为空")
  29 + @Length(min = 4, max = 16, message = "密码长度为 4-16 位")
  30 + private String oldPassword;
  31 +
  32 + @ApiModelProperty(value = "新密码", required = true, example = "654321")
  33 + @NotEmpty(message = "新密码不能为空")
  34 + @Length(min = 4, max = 16, message = "密码长度为 4-16 位")
  35 + private String newPassword;
  36 +}
0 37 \ No newline at end of file
... ...
src/main/java/cn/iocoder/dashboard/modules/system/controller/user/vo/user/SysUserProfileUpdateReqVO.java renamed to src/main/java/cn/iocoder/dashboard/modules/system/controller/user/vo/profile/SysUserProfileUpdateReqVO.java
1   -package cn.iocoder.dashboard.modules.system.controller.user.vo.user;
  1 +package cn.iocoder.dashboard.modules.system.controller.user.vo.profile;
2 2  
3 3 import io.swagger.annotations.ApiModel;
4 4 import io.swagger.annotations.ApiModelProperty;
... ... @@ -6,6 +6,7 @@ import lombok.Data;
6 6  
7 7 import javax.validation.constraints.Email;
8 8 import javax.validation.constraints.NotNull;
  9 +import javax.validation.constraints.Pattern;
9 10 import javax.validation.constraints.Size;
10 11  
11 12 @ApiModel("用户个人信息更新 Request VO")
... ... @@ -26,7 +27,7 @@ public class SysUserProfileUpdateReqVO {
26 27 private String email;
27 28  
28 29 @ApiModelProperty(value = "手机号码", example = "15601691300")
29   - @Size(max = 11, message = "手机号码长度不能超过11个字符")
  30 + @Pattern(regexp = "^1(3|4|5|7|8)\\d{9}$",message = "手机号码格式错误")
30 31 private String mobile;
31 32  
32 33 @ApiModelProperty(value = "用户性别", example = "1", notes = "参见 SysSexEnum 枚举类")
... ... @@ -35,10 +36,4 @@ public class SysUserProfileUpdateReqVO {
35 36 @ApiModelProperty(value = "用户头像", example = "http://www.iocoder.cn/xxx.png")
36 37 private String avatar;
37 38  
38   - @ApiModelProperty(value = "旧密码", required = true, example = "123456")
39   - private String oldPassword;
40   -
41   - @ApiModelProperty(value = "新密码", required = true, example = "654321")
42   - private String newPassword;
43   -
44 39 }
... ...
src/main/java/cn/iocoder/dashboard/modules/system/controller/user/vo/user/SysUserBaseVO.java
... ... @@ -5,6 +5,7 @@ import lombok.Data;
5 5  
6 6 import javax.validation.constraints.Email;
7 7 import javax.validation.constraints.NotBlank;
  8 +import javax.validation.constraints.Pattern;
8 9 import javax.validation.constraints.Size;
9 10 import java.util.Set;
10 11  
... ... @@ -39,7 +40,7 @@ public class SysUserBaseVO {
39 40 private String email;
40 41  
41 42 @ApiModelProperty(value = "手机号码", example = "15601691300")
42   - @Size(max = 11, message = "手机号码长度不能超过11个字符")
  43 + @Pattern(regexp = "^1(3|4|5|7|8)\\d{9}$",message = "手机号码格式错误")
43 44 private String mobile;
44 45  
45 46 @ApiModelProperty(value = "用户性别", example = "1", notes = "参见 SysSexEnum 枚举类")
... ... @@ -48,5 +49,4 @@ public class SysUserBaseVO {
48 49 @ApiModelProperty(value = "用户头像", example = "http://www.iocoder.cn/xxx.png")
49 50 private String avatar;
50 51  
51   -
52 52 }
... ...
src/main/java/cn/iocoder/dashboard/modules/system/convert/auth/SysAuthConvert.java
... ... @@ -3,7 +3,8 @@ package cn.iocoder.dashboard.modules.system.convert.auth;
3 3 import cn.iocoder.dashboard.framework.security.core.LoginUser;
4 4 import cn.iocoder.dashboard.modules.system.controller.auth.vo.auth.SysAuthMenuRespVO;
5 5 import cn.iocoder.dashboard.modules.system.controller.auth.vo.auth.SysAuthPermissionInfoRespVO;
6   -import cn.iocoder.dashboard.modules.system.controller.user.vo.user.SysUserProfileUpdateReqVO;
  6 +import cn.iocoder.dashboard.modules.system.controller.user.vo.profile.SysUserProfileUpdatePasswordReqVo;
  7 +import cn.iocoder.dashboard.modules.system.controller.user.vo.profile.SysUserProfileUpdateReqVO;
7 8 import cn.iocoder.dashboard.modules.system.dal.dataobject.permission.SysMenuDO;
8 9 import cn.iocoder.dashboard.modules.system.dal.dataobject.permission.SysRoleDO;
9 10 import cn.iocoder.dashboard.modules.system.dal.dataobject.user.SysUserDO;
... ... @@ -41,6 +42,8 @@ public interface SysAuthConvert {
41 42  
42 43 LoginUser convert(SysUserProfileUpdateReqVO reqVO);
43 44  
  45 + LoginUser convert(SysUserProfileUpdatePasswordReqVo reqVO);
  46 +
44 47 /**
45 48 * 将菜单列表,构建成菜单树
46 49 *
... ...
src/main/java/cn/iocoder/dashboard/modules/system/convert/user/SysUserConvert.java
1 1 package cn.iocoder.dashboard.modules.system.convert.user;
2 2  
  3 +import cn.iocoder.dashboard.modules.system.controller.user.vo.profile.SysUserProfileRespVO;
  4 +import cn.iocoder.dashboard.modules.system.controller.user.vo.profile.SysUserProfileUpdatePasswordReqVo;
  5 +import cn.iocoder.dashboard.modules.system.controller.user.vo.profile.SysUserProfileUpdateReqVO;
3 6 import cn.iocoder.dashboard.modules.system.controller.user.vo.user.SysUserCreateReqVO;
4 7 import cn.iocoder.dashboard.modules.system.controller.user.vo.user.SysUserExcelVO;
5 8 import cn.iocoder.dashboard.modules.system.controller.user.vo.user.SysUserImportExcelVO;
6 9 import cn.iocoder.dashboard.modules.system.controller.user.vo.user.SysUserPageItemRespVO;
7   -import cn.iocoder.dashboard.modules.system.controller.user.vo.user.SysUserProfileRespVO;
8   -import cn.iocoder.dashboard.modules.system.controller.user.vo.user.SysUserProfileUpdateReqVO;
9 10 import cn.iocoder.dashboard.modules.system.controller.user.vo.user.SysUserUpdateReqVO;
10 11 import cn.iocoder.dashboard.modules.system.dal.dataobject.dept.SysDeptDO;
11 12 import cn.iocoder.dashboard.modules.system.dal.dataobject.permission.SysRoleDO;
... ... @@ -36,6 +37,7 @@ public interface SysUserConvert {
36 37  
37 38 SysUserDO convert(SysUserProfileUpdateReqVO bean);
38 39  
  40 + SysUserDO convert(SysUserProfileUpdatePasswordReqVo bean);
39 41  
40 42  
41 43 }
... ...
src/main/java/cn/iocoder/dashboard/modules/system/service/user/SysUserService.java
... ... @@ -2,7 +2,14 @@ package cn.iocoder.dashboard.modules.system.service.user;
2 2  
3 3 import cn.hutool.core.collection.CollUtil;
4 4 import cn.iocoder.dashboard.common.pojo.PageResult;
5   -import cn.iocoder.dashboard.modules.system.controller.user.vo.user.*;
  5 +import cn.iocoder.dashboard.modules.system.controller.user.vo.profile.SysUserProfileUpdatePasswordReqVo;
  6 +import cn.iocoder.dashboard.modules.system.controller.user.vo.profile.SysUserProfileUpdateReqVO;
  7 +import cn.iocoder.dashboard.modules.system.controller.user.vo.user.SysUserCreateReqVO;
  8 +import cn.iocoder.dashboard.modules.system.controller.user.vo.user.SysUserExportReqVO;
  9 +import cn.iocoder.dashboard.modules.system.controller.user.vo.user.SysUserImportExcelVO;
  10 +import cn.iocoder.dashboard.modules.system.controller.user.vo.user.SysUserImportRespVO;
  11 +import cn.iocoder.dashboard.modules.system.controller.user.vo.user.SysUserPageReqVO;
  12 +import cn.iocoder.dashboard.modules.system.controller.user.vo.user.SysUserUpdateReqVO;
6 13 import cn.iocoder.dashboard.modules.system.dal.dataobject.user.SysUserDO;
7 14 import cn.iocoder.dashboard.util.collection.CollectionUtils;
8 15  
... ... @@ -42,6 +49,14 @@ public interface SysUserService {
42 49 void updateUserProfile(SysUserProfileUpdateReqVO reqVO);
43 50  
44 51 /**
  52 + * 修改用户个人密码
  53 + *
  54 + * @param reqVO 更新用户个人密码
  55 + */
  56 + void updateUserPassword(SysUserProfileUpdatePasswordReqVo reqVO);
  57 +
  58 +
  59 + /**
45 60 * 更新用户头像
46 61 *
47 62 * @param id 用户 id
... ...
src/main/java/cn/iocoder/dashboard/modules/system/service/user/SysUserServiceImpl.java
... ... @@ -9,12 +9,13 @@ import cn.iocoder.dashboard.common.exception.ServiceException;
9 9 import cn.iocoder.dashboard.common.exception.util.ServiceExceptionUtil;
10 10 import cn.iocoder.dashboard.common.pojo.PageResult;
11 11 import cn.iocoder.dashboard.modules.infra.service.file.InfFileService;
  12 +import cn.iocoder.dashboard.modules.system.controller.user.vo.profile.SysUserProfileUpdatePasswordReqVo;
  13 +import cn.iocoder.dashboard.modules.system.controller.user.vo.profile.SysUserProfileUpdateReqVO;
12 14 import cn.iocoder.dashboard.modules.system.controller.user.vo.user.SysUserCreateReqVO;
13 15 import cn.iocoder.dashboard.modules.system.controller.user.vo.user.SysUserExportReqVO;
14 16 import cn.iocoder.dashboard.modules.system.controller.user.vo.user.SysUserImportExcelVO;
15 17 import cn.iocoder.dashboard.modules.system.controller.user.vo.user.SysUserImportRespVO;
16 18 import cn.iocoder.dashboard.modules.system.controller.user.vo.user.SysUserPageReqVO;
17   -import cn.iocoder.dashboard.modules.system.controller.user.vo.user.SysUserProfileUpdateReqVO;
18 19 import cn.iocoder.dashboard.modules.system.controller.user.vo.user.SysUserUpdateReqVO;
19 20 import cn.iocoder.dashboard.modules.system.convert.user.SysUserConvert;
20 21 import cn.iocoder.dashboard.modules.system.dal.dataobject.dept.SysDeptDO;
... ... @@ -70,7 +71,7 @@ public class SysUserServiceImpl implements SysUserService {
70 71 public Long createUser(SysUserCreateReqVO reqVO) {
71 72 // 校验正确性
72 73 this.checkCreateOrUpdate(null, reqVO.getUsername(), reqVO.getMobile(), reqVO.getEmail(),
73   - reqVO.getDeptId(), reqVO.getPostIds());
  74 + reqVO.getDeptId(), reqVO.getPostIds());
74 75 // 插入用户
75 76 SysUserDO user = SysUserConvert.INSTANCE.convert(reqVO);
76 77 user.setStatus(CommonStatusEnum.ENABLE.getStatus()); // 默认开启
... ... @@ -83,7 +84,7 @@ public class SysUserServiceImpl implements SysUserService {
83 84 public void updateUser(SysUserUpdateReqVO reqVO) {
84 85 // 校验正确性
85 86 this.checkCreateOrUpdate(reqVO.getId(), reqVO.getUsername(), reqVO.getMobile(), reqVO.getEmail(),
86   - reqVO.getDeptId(), reqVO.getPostIds());
  87 + reqVO.getDeptId(), reqVO.getPostIds());
87 88 // 更新用户
88 89 SysUserDO updateObj = SysUserConvert.INSTANCE.convert(reqVO);
89 90 userMapper.updateById(updateObj);
... ... @@ -95,16 +96,17 @@ public class SysUserServiceImpl implements SysUserService {
95 96 this.checkUserExists(reqVO.getId());
96 97 this.checkEmailUnique(reqVO.getId(), reqVO.getEmail());
97 98 this.checkMobileUnique(reqVO.getId(), reqVO.getMobile());
98   - // 校验填写密码
99   - String encode = null;
100   - if (this.checkOldPassword(reqVO.getId(), reqVO.getOldPassword(), reqVO.getNewPassword())) {
101   - // 更新密码
102   - encode = passwordEncoder.encode(reqVO.getNewPassword());
103   - }
104   - SysUserDO updateObj = SysUserConvert.INSTANCE.convert(reqVO);
105   - if (StrUtil.isNotBlank(encode)) {
106   - updateObj.setPassword(encode);
107   - }
  99 + userMapper.updateById(SysUserConvert.INSTANCE.convert(reqVO));
  100 + }
  101 +
  102 + @Override
  103 + public void updateUserPassword(SysUserProfileUpdatePasswordReqVo reqVO) {
  104 + // 校验旧密码密码
  105 + this.checkOldPassword(reqVO.getId(), reqVO.getOldPassword());
  106 + SysUserDO updateObj = new SysUserDO();
  107 + updateObj.setId(reqVO.getId());
  108 + // 加密密码
  109 + updateObj.setPassword(passwordEncoder.encode(reqVO.getNewPassword()));
108 110 userMapper.updateById(updateObj);
109 111 }
110 112  
... ... @@ -314,26 +316,19 @@ public class SysUserServiceImpl implements SysUserService {
314 316 }
315 317  
316 318 /**
317   - * 校验旧密码、新密码
  319 + * 校验旧密码
318 320 *
319 321 * @param id 用户 id
320 322 * @param oldPassword 旧密码
321   - * @param newPassword 新密码
322   - * @return 校验结果
323 323 */
324   - private boolean checkOldPassword(Long id, String oldPassword, String newPassword) {
325   - if (id == null || StrUtil.isBlank(oldPassword) || StrUtil.isBlank(newPassword)) {
326   - return false;
327   - }
  324 + private void checkOldPassword(Long id, String oldPassword) {
328 325 SysUserDO user = userMapper.selectById(id);
329 326 if (user == null) {
330 327 throw ServiceExceptionUtil.exception(USER_NOT_EXISTS);
331 328 }
332   -
333 329 if (!passwordEncoder.matches(oldPassword, user.getPassword())) {
334 330 throw ServiceExceptionUtil.exception(USER_PASSWORD_FAILED);
335 331 }
336   - return true;
337 332 }
338 333  
339 334 @Override
... ...