Commit b8857df7fe835115298916a1afe38d50f474c42f

Authored by YunaiV
1 parent d6cc9e23

完成用户中心的对接

ruoyi-ui/src/api/system/user.js
@@ -104,9 +104,9 @@ export function updateUserPwd(oldPassword, newPassword) { @@ -104,9 +104,9 @@ export function updateUserPwd(oldPassword, newPassword) {
104 newPassword 104 newPassword
105 } 105 }
106 return request({ 106 return request({
107 - url: '/system/user/profile/updatePwd', 107 + url: '/system/user/profile/update-password',
108 method: 'put', 108 method: 'put',
109 - params: data 109 + data: data
110 }) 110 })
111 } 111 }
112 112
ruoyi-ui/src/views/system/user/index.vue
@@ -107,8 +107,7 @@ @@ -107,8 +107,7 @@
107 <el-col :span="12"> 107 <el-col :span="12">
108 <el-form-item label="归属部门" prop="deptId"> 108 <el-form-item label="归属部门" prop="deptId">
109 <treeselect v-model="form.deptId" :options="deptOptions" :show-count="true" 109 <treeselect v-model="form.deptId" :options="deptOptions" :show-count="true"
110 - placeholder="请选择归属部门" :normalizer="normalizer"  
111 - /> 110 + placeholder="请选择归属部门" :normalizer="normalizer"/>
112 </el-form-item> 111 </el-form-item>
113 </el-col> 112 </el-col>
114 </el-row> 113 </el-row>
@@ -140,12 +139,7 @@ @@ -140,12 +139,7 @@
140 <el-col :span="12"> 139 <el-col :span="12">
141 <el-form-item label="用户性别"> 140 <el-form-item label="用户性别">
142 <el-select v-model="form.sex" placeholder="请选择"> 141 <el-select v-model="form.sex" placeholder="请选择">
143 - <el-option  
144 - v-for="dict in sexDictDatas"  
145 - :key="parseInt(dict.value)"  
146 - :label="dict.label"  
147 - :value="parseInt(dict.value)"  
148 - ></el-option> 142 + <el-option v-for="dict in sexDictDatas" :key="parseInt(dict.value)" :label="dict.label" :value="parseInt(dict.value)"/>
149 </el-select> 143 </el-select>
150 </el-form-item> 144 </el-form-item>
151 </el-col> 145 </el-col>
ruoyi-ui/src/views/system/user/profile/index.vue
@@ -13,11 +13,11 @@ @@ -13,11 +13,11 @@
13 <ul class="list-group list-group-striped"> 13 <ul class="list-group list-group-striped">
14 <li class="list-group-item"> 14 <li class="list-group-item">
15 <svg-icon icon-class="user" />用户名称 15 <svg-icon icon-class="user" />用户名称
16 - <div class="pull-right">{{ user.userName }}</div> 16 + <div class="pull-right">{{ user.username }}</div>
17 </li> 17 </li>
18 <li class="list-group-item"> 18 <li class="list-group-item">
19 <svg-icon icon-class="phone" />手机号码 19 <svg-icon icon-class="phone" />手机号码
20 - <div class="pull-right">{{ user.phonenumber }}</div> 20 + <div class="pull-right">{{ user.mobile }}</div>
21 </li> 21 </li>
22 <li class="list-group-item"> 22 <li class="list-group-item">
23 <svg-icon icon-class="email" />用户邮箱 23 <svg-icon icon-class="email" />用户邮箱
@@ -25,15 +25,19 @@ @@ -25,15 +25,19 @@
25 </li> 25 </li>
26 <li class="list-group-item"> 26 <li class="list-group-item">
27 <svg-icon icon-class="tree" />所属部门 27 <svg-icon icon-class="tree" />所属部门
28 - <div class="pull-right" v-if="user.dept">{{ user.dept.deptName }} / {{ postGroup }}</div> 28 + <div class="pull-right" v-if="user.dept">{{ user.dept.name }}</div>
  29 + </li>
  30 + <li class="list-group-item">
  31 + <svg-icon icon-class="tree" />所属岗位
  32 + <div class="pull-right" v-if="user.posts">{{ user.posts.map(post => post.name).join(',') }}</div>
29 </li> 33 </li>
30 <li class="list-group-item"> 34 <li class="list-group-item">
31 <svg-icon icon-class="peoples" />所属角色 35 <svg-icon icon-class="peoples" />所属角色
32 - <div class="pull-right">{{ roleGroup }}</div> 36 + <div class="pull-right">{{ user.roles.map(post => post.name).join(',') }}</div>
33 </li> 37 </li>
34 <li class="list-group-item"> 38 <li class="list-group-item">
35 <svg-icon icon-class="date" />创建日期 39 <svg-icon icon-class="date" />创建日期
36 - <div class="pull-right">{{ user.createTime }}</div> 40 + <div class="pull-right">{{ parseTime(user.createTime) }}</div>
37 </li> 41 </li>
38 </ul> 42 </ul>
39 </div> 43 </div>
@@ -82,8 +86,6 @@ export default { @@ -82,8 +86,6 @@ export default {
82 getUser() { 86 getUser() {
83 getUserProfile().then(response => { 87 getUserProfile().then(response => {
84 this.user = response.data; 88 this.user = response.data;
85 - this.roleGroup = response.roleGroup;  
86 - this.postGroup = response.postGroup;  
87 }); 89 });
88 } 90 }
89 } 91 }
ruoyi-ui/src/views/system/user/profile/userInfo.vue
@@ -3,7 +3,7 @@ @@ -3,7 +3,7 @@
3 <el-form-item label="用户昵称" prop="nickName"> 3 <el-form-item label="用户昵称" prop="nickName">
4 <el-input v-model="user.nickname" /> 4 <el-input v-model="user.nickname" />
5 </el-form-item> 5 </el-form-item>
6 - <el-form-item label="手机号码" prop="phonenumber"> 6 + <el-form-item label="手机号码" prop="mobile">
7 <el-input v-model="user.mobile" maxlength="11" /> 7 <el-input v-model="user.mobile" maxlength="11" />
8 </el-form-item> 8 </el-form-item>
9 <el-form-item label="邮箱" prop="email"> 9 <el-form-item label="邮箱" prop="email">
src/main/java/cn/iocoder/dashboard/framework/redis/config/RedisConfig.java
@@ -83,8 +83,8 @@ public class RedisConfig { @@ -83,8 +83,8 @@ public class RedisConfig {
83 redisTemplate.getRequiredConnectionFactory(), containerOptions); 83 redisTemplate.getRequiredConnectionFactory(), containerOptions);
84 84
85 // 第二步,注册监听器,消费对应的 Stream 主题 85 // 第二步,注册监听器,消费对应的 Stream 主题
86 -// String consumerName = buildConsumerName();  
87 - String consumerName = "110"; 86 + String consumerName = buildConsumerName();
  87 +// String consumerName = "110";
88 listeners.forEach(listener -> { 88 listeners.forEach(listener -> {
89 // 创建 listener 对应的消费者分组 89 // 创建 listener 对应的消费者分组
90 try { 90 try {
@@ -106,6 +106,12 @@ public class RedisConfig { @@ -106,6 +106,12 @@ public class RedisConfig {
106 return container; 106 return container;
107 } 107 }
108 108
  109 + /**
  110 + * 构建消费者名字,使用本地 IP + 进程编号的方式。
  111 + * 参考自 RocketMQ clientId 的实现
  112 + *
  113 + * @return 消费者名字
  114 + */
109 private static String buildConsumerName() { 115 private static String buildConsumerName() {
110 return String.format("%s@%d", SystemUtil.getHostInfo().getAddress(), SystemUtil.getCurrentPID()); 116 return String.format("%s@%d", SystemUtil.getHostInfo().getAddress(), SystemUtil.getCurrentPID());
111 } 117 }
src/main/java/cn/iocoder/dashboard/modules/system/controller/user/SysUserProfileController.java
1 package cn.iocoder.dashboard.modules.system.controller.user; 1 package cn.iocoder.dashboard.modules.system.controller.user;
2 2
  3 +import cn.hutool.core.collection.CollUtil;
3 import cn.iocoder.dashboard.common.exception.util.ServiceExceptionUtil; 4 import cn.iocoder.dashboard.common.exception.util.ServiceExceptionUtil;
4 import cn.iocoder.dashboard.common.pojo.CommonResult; 5 import cn.iocoder.dashboard.common.pojo.CommonResult;
5 -import cn.iocoder.dashboard.framework.security.core.util.SecurityFrameworkUtils;  
6 import cn.iocoder.dashboard.modules.system.controller.user.vo.profile.SysUserProfileRespVO; 6 import cn.iocoder.dashboard.modules.system.controller.user.vo.profile.SysUserProfileRespVO;
7 -import cn.iocoder.dashboard.modules.system.controller.user.vo.profile.SysUserProfileUpdatePasswordReqVo; 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 import cn.iocoder.dashboard.modules.system.controller.user.vo.profile.SysUserProfileUpdateReqVO;
9 -import cn.iocoder.dashboard.modules.system.convert.auth.SysAuthConvert;  
10 import cn.iocoder.dashboard.modules.system.convert.user.SysUserConvert; 9 import cn.iocoder.dashboard.modules.system.convert.user.SysUserConvert;
  10 +import cn.iocoder.dashboard.modules.system.dal.dataobject.dept.SysDeptDO;
  11 +import cn.iocoder.dashboard.modules.system.dal.dataobject.dept.SysPostDO;
11 import cn.iocoder.dashboard.modules.system.dal.dataobject.permission.SysRoleDO; 12 import cn.iocoder.dashboard.modules.system.dal.dataobject.permission.SysRoleDO;
12 import cn.iocoder.dashboard.modules.system.dal.dataobject.user.SysUserDO; 13 import cn.iocoder.dashboard.modules.system.dal.dataobject.user.SysUserDO;
  14 +import cn.iocoder.dashboard.modules.system.service.dept.SysDeptService;
  15 +import cn.iocoder.dashboard.modules.system.service.dept.SysPostService;
13 import cn.iocoder.dashboard.modules.system.service.permission.SysPermissionService; 16 import cn.iocoder.dashboard.modules.system.service.permission.SysPermissionService;
14 import cn.iocoder.dashboard.modules.system.service.permission.SysRoleService; 17 import cn.iocoder.dashboard.modules.system.service.permission.SysRoleService;
15 import cn.iocoder.dashboard.modules.system.service.user.SysUserService; 18 import cn.iocoder.dashboard.modules.system.service.user.SysUserService;
16 -import cn.iocoder.dashboard.util.collection.CollectionUtils;  
17 import io.swagger.annotations.Api; 19 import io.swagger.annotations.Api;
18 import io.swagger.annotations.ApiOperation; 20 import io.swagger.annotations.ApiOperation;
19 import lombok.extern.slf4j.Slf4j; 21 import lombok.extern.slf4j.Slf4j;
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; 22 +import org.springframework.validation.annotation.Validated;
  23 +import org.springframework.web.bind.annotation.*;
26 import org.springframework.web.multipart.MultipartFile; 24 import org.springframework.web.multipart.MultipartFile;
27 25
28 import javax.annotation.Resource; 26 import javax.annotation.Resource;
29 -import javax.servlet.http.HttpServletRequest;  
30 import javax.validation.Valid; 27 import javax.validation.Valid;
31 import java.io.IOException; 28 import java.io.IOException;
32 import java.util.List; 29 import java.util.List;
33 30
34 import static cn.iocoder.dashboard.common.pojo.CommonResult.success; 31 import static cn.iocoder.dashboard.common.pojo.CommonResult.success;
  32 +import static cn.iocoder.dashboard.framework.security.core.util.SecurityFrameworkUtils.getLoginUserId;
35 import static cn.iocoder.dashboard.modules.system.enums.SysErrorCodeConstants.FILE_IS_EMPTY; 33 import static cn.iocoder.dashboard.modules.system.enums.SysErrorCodeConstants.FILE_IS_EMPTY;
36 34
37 /** 35 /**
38 * @author niudehua 36 * @author niudehua
39 */ 37 */
  38 +@Api(tags = "用户个人中心")
40 @RestController 39 @RestController
41 @RequestMapping("/system/user/profile") 40 @RequestMapping("/system/user/profile")
42 -@Api(tags = "用户个人中心") 41 +@Validated
43 @Slf4j 42 @Slf4j
44 public class SysUserProfileController { 43 public class SysUserProfileController {
45 44
46 @Resource 45 @Resource
47 private SysUserService userService; 46 private SysUserService userService;
48 @Resource 47 @Resource
  48 + private SysDeptService deptService;
  49 + @Resource
  50 + private SysPostService postService;
  51 + @Resource
49 private SysPermissionService permissionService; 52 private SysPermissionService permissionService;
50 @Resource 53 @Resource
51 private SysRoleService roleService; 54 private SysRoleService roleService;
@@ -53,28 +56,36 @@ public class SysUserProfileController { @@ -53,28 +56,36 @@ public class SysUserProfileController {
53 @GetMapping("/get") 56 @GetMapping("/get")
54 @ApiOperation("获得登录用户信息") 57 @ApiOperation("获得登录用户信息")
55 public CommonResult<SysUserProfileRespVO> profile() { 58 public CommonResult<SysUserProfileRespVO> profile() {
56 - // 获取用户信息  
57 - Long userId = SecurityFrameworkUtils.getLoginUserId();  
58 - SysUserDO user = userService.getUser(userId);  
59 - SysUserProfileRespVO userProfileRespVO = SysUserConvert.INSTANCE.convert03(user);  
60 - List<SysRoleDO> userRoles = roleService.getRolesFromCache(permissionService.listUserRoleIs(userId));  
61 - userProfileRespVO.setRoles(CollectionUtils.convertSet(userRoles, SysUserConvert.INSTANCE::convert));  
62 - return success(userProfileRespVO); 59 + // 获得用户基本信息
  60 + SysUserDO user = userService.getUser(getLoginUserId());
  61 + SysUserProfileRespVO resp = SysUserConvert.INSTANCE.convert03(user);
  62 + // 获得用户角色
  63 + List<SysRoleDO> userRoles = roleService.getRolesFromCache(permissionService.listUserRoleIs(user.getId()));
  64 + resp.setRoles(SysUserConvert.INSTANCE.convertList(userRoles));
  65 + // 获得部门信息
  66 + if (user.getDeptId() != null) {
  67 + SysDeptDO dept = deptService.getDept(user.getDeptId());
  68 + resp.setDept(SysUserConvert.INSTANCE.convert02(dept));
  69 + }
  70 + // 获得岗位信息
  71 + if (CollUtil.isNotEmpty(user.getPostIds())) {
  72 + List<SysPostDO> posts = postService.getPosts(user.getPostIds());
  73 + resp.setPosts(SysUserConvert.INSTANCE.convertList02(posts));
  74 + }
  75 + return success(resp);
63 } 76 }
64 77
65 @PutMapping("/update") 78 @PutMapping("/update")
66 @ApiOperation("修改用户个人信息") 79 @ApiOperation("修改用户个人信息")
67 - public CommonResult<Boolean> updateUserProfile(@Valid @RequestBody SysUserProfileUpdateReqVO reqVO, HttpServletRequest request) {  
68 - userService.updateUserProfile(reqVO);  
69 - SecurityFrameworkUtils.setLoginUser(SysAuthConvert.INSTANCE.convert(reqVO), request); 80 + public CommonResult<Boolean> updateUserProfile(@Valid @RequestBody SysUserProfileUpdateReqVO reqVO) {
  81 + userService.updateUserProfile(getLoginUserId(), reqVO);
70 return success(true); 82 return success(true);
71 } 83 }
72 84
73 @PutMapping("/update-password") 85 @PutMapping("/update-password")
74 @ApiOperation("修改用户个人密码") 86 @ApiOperation("修改用户个人密码")
75 - public CommonResult<Boolean> updateUserProfilePassword(@Valid @RequestBody SysUserProfileUpdatePasswordReqVo reqVO, HttpServletRequest request) {  
76 - userService.updateUserPassword(reqVO);  
77 - SecurityFrameworkUtils.setLoginUser(SysAuthConvert.INSTANCE.convert(reqVO), request); 87 + public CommonResult<Boolean> updateUserProfilePassword(@Valid @RequestBody SysUserProfileUpdatePasswordReqVO reqVO) {
  88 + userService.updateUserPassword(getLoginUserId(), reqVO);
78 return success(true); 89 return success(true);
79 } 90 }
80 91
@@ -84,7 +95,7 @@ public class SysUserProfileController { @@ -84,7 +95,7 @@ public class SysUserProfileController {
84 if (file.isEmpty()) { 95 if (file.isEmpty()) {
85 throw ServiceExceptionUtil.exception(FILE_IS_EMPTY); 96 throw ServiceExceptionUtil.exception(FILE_IS_EMPTY);
86 } 97 }
87 - userService.updateUserAvatar(SecurityFrameworkUtils.getLoginUserId(), file.getInputStream()); 98 + userService.updateUserAvatar(getLoginUserId(), file.getInputStream());
88 return success(true); 99 return success(true);
89 } 100 }
90 101
src/main/java/cn/iocoder/dashboard/modules/system/controller/user/vo/profile/SysUserProfileRespVO.java
@@ -9,7 +9,7 @@ import lombok.EqualsAndHashCode; @@ -9,7 +9,7 @@ import lombok.EqualsAndHashCode;
9 import lombok.NoArgsConstructor; 9 import lombok.NoArgsConstructor;
10 10
11 import java.util.Date; 11 import java.util.Date;
12 -import java.util.Set; 12 +import java.util.List;
13 13
14 14
15 @Data 15 @Data
@@ -18,6 +18,7 @@ import java.util.Set; @@ -18,6 +18,7 @@ import java.util.Set;
18 @AllArgsConstructor 18 @AllArgsConstructor
19 @ApiModel("用户个人中心信息 Response VO") 19 @ApiModel("用户个人中心信息 Response VO")
20 public class SysUserProfileRespVO extends SysUserBaseVO { 20 public class SysUserProfileRespVO extends SysUserBaseVO {
  21 +
21 @ApiModelProperty(value = "用户编号", required = true, example = "1") 22 @ApiModelProperty(value = "用户编号", required = true, example = "1")
22 private Long id; 23 private Long id;
23 24
@@ -36,8 +37,17 @@ public class SysUserProfileRespVO extends SysUserBaseVO { @@ -36,8 +37,17 @@ public class SysUserProfileRespVO extends SysUserBaseVO {
36 /** 37 /**
37 * 所属角色 38 * 所属角色
38 */ 39 */
39 - @ApiModelProperty(value = "所属角色", required = true, example = "123456")  
40 - private Set<Role> roles; 40 + private List<Role> roles;
  41 +
  42 + /**
  43 + * 所在部门
  44 + */
  45 + private Dept dept;
  46 +
  47 + /**
  48 + * 所属岗位数组
  49 + */
  50 + private List<Post> posts;
41 51
42 @ApiModel("角色") 52 @ApiModel("角色")
43 @Data 53 @Data
@@ -50,4 +60,29 @@ public class SysUserProfileRespVO extends SysUserBaseVO { @@ -50,4 +60,29 @@ public class SysUserProfileRespVO extends SysUserBaseVO {
50 private String name; 60 private String name;
51 61
52 } 62 }
  63 +
  64 + @ApiModel("部门")
  65 + @Data
  66 + public static class Dept {
  67 +
  68 + @ApiModelProperty(value = "部门编号", required = true, example = "1")
  69 + private Long id;
  70 +
  71 + @ApiModelProperty(value = "部门名称", required = true, example = "研发部")
  72 + private String name;
  73 +
  74 + }
  75 +
  76 + @ApiModel("岗位")
  77 + @Data
  78 + public static class Post {
  79 +
  80 + @ApiModelProperty(value = "岗位编号", required = true, example = "1")
  81 + private Long id;
  82 +
  83 + @ApiModelProperty(value = "岗位名称", required = true, example = "开发")
  84 + private String name;
  85 +
  86 + }
  87 +
53 } 88 }
src/main/java/cn/iocoder/dashboard/modules/system/controller/user/vo/profile/SysUserProfileUpdatePasswordReqVo.java renamed to src/main/java/cn/iocoder/dashboard/modules/system/controller/user/vo/profile/SysUserProfileUpdatePasswordReqVO.java
@@ -6,23 +6,10 @@ import lombok.Data; @@ -6,23 +6,10 @@ import lombok.Data;
6 import org.hibernate.validator.constraints.Length; 6 import org.hibernate.validator.constraints.Length;
7 7
8 import javax.validation.constraints.NotEmpty; 8 import javax.validation.constraints.NotEmpty;
9 -import javax.validation.constraints.NotNull;  
10 9
11 -/**  
12 - * 类名称:SysUserUpdatePersonalPasswordReqVo  
13 - * ***********************  
14 - * <p>  
15 - * 类描述:更新用户个人密码  
16 - *  
17 - * @author deng on 2021/3/15 22:04  
18 - */  
19 -@ApiModel("用户个人中心更新密码 Response VO") 10 +@ApiModel("用户个人中心更新密码 Request VO")
20 @Data 11 @Data
21 -public class SysUserProfileUpdatePasswordReqVo {  
22 -  
23 - @ApiModelProperty(value = "用户编号", required = true, example = "1024")  
24 - @NotNull(message = "用户编号不能为空")  
25 - private Long id; 12 +public class SysUserProfileUpdatePasswordReqVO {
26 13
27 @ApiModelProperty(value = "旧密码", required = true, example = "123456") 14 @ApiModelProperty(value = "旧密码", required = true, example = "123456")
28 @NotEmpty(message = "旧密码不能为空") 15 @NotEmpty(message = "旧密码不能为空")
@@ -33,4 +20,5 @@ public class SysUserProfileUpdatePasswordReqVo { @@ -33,4 +20,5 @@ public class SysUserProfileUpdatePasswordReqVo {
33 @NotEmpty(message = "新密码不能为空") 20 @NotEmpty(message = "新密码不能为空")
34 @Length(min = 4, max = 16, message = "密码长度为 4-16 位") 21 @Length(min = 4, max = 16, message = "密码长度为 4-16 位")
35 private String newPassword; 22 private String newPassword;
36 -}  
37 \ No newline at end of file 23 \ No newline at end of file
  24 +
  25 +}
src/main/java/cn/iocoder/dashboard/modules/system/controller/user/vo/profile/SysUserProfileUpdateReqVO.java
@@ -5,7 +5,6 @@ import io.swagger.annotations.ApiModelProperty; @@ -5,7 +5,6 @@ import io.swagger.annotations.ApiModelProperty;
5 import lombok.Data; 5 import lombok.Data;
6 6
7 import javax.validation.constraints.Email; 7 import javax.validation.constraints.Email;
8 -import javax.validation.constraints.NotNull;  
9 import javax.validation.constraints.Pattern; 8 import javax.validation.constraints.Pattern;
10 import javax.validation.constraints.Size; 9 import javax.validation.constraints.Size;
11 10
@@ -13,17 +12,13 @@ import javax.validation.constraints.Size; @@ -13,17 +12,13 @@ import javax.validation.constraints.Size;
13 @Data 12 @Data
14 public class SysUserProfileUpdateReqVO { 13 public class SysUserProfileUpdateReqVO {
15 14
16 - @ApiModelProperty(value = "用户编号", required = true, example = "1024")  
17 - @NotNull(message = "用户编号不能为空")  
18 - private Long id;  
19 -  
20 @ApiModelProperty(value = "用户昵称", required = true, example = "芋艿") 15 @ApiModelProperty(value = "用户昵称", required = true, example = "芋艿")
21 @Size(max = 30, message = "用户昵称长度不能超过30个字符") 16 @Size(max = 30, message = "用户昵称长度不能超过30个字符")
22 private String nickname; 17 private String nickname;
23 18
24 @ApiModelProperty(value = "用户邮箱", example = "yudao@iocoder.cn") 19 @ApiModelProperty(value = "用户邮箱", example = "yudao@iocoder.cn")
25 @Email(message = "邮箱格式不正确") 20 @Email(message = "邮箱格式不正确")
26 - @Size(max = 50, message = "邮箱长度不能超过50个字符") 21 + @Size(max = 50, message = "邮箱长度不能超过 50 个字符")
27 private String email; 22 private String email;
28 23
29 @ApiModelProperty(value = "手机号码", example = "15601691300") 24 @ApiModelProperty(value = "手机号码", example = "15601691300")
@@ -33,7 +28,4 @@ public class SysUserProfileUpdateReqVO { @@ -33,7 +28,4 @@ public class SysUserProfileUpdateReqVO {
33 @ApiModelProperty(value = "用户性别", example = "1", notes = "参见 SysSexEnum 枚举类") 28 @ApiModelProperty(value = "用户性别", example = "1", notes = "参见 SysSexEnum 枚举类")
34 private Integer sex; 29 private Integer sex;
35 30
36 - @ApiModelProperty(value = "用户头像", example = "http://www.iocoder.cn/xxx.png")  
37 - private String avatar;  
38 -  
39 } 31 }
src/main/java/cn/iocoder/dashboard/modules/system/controller/user/vo/user/SysUserBaseVO.java
@@ -36,7 +36,7 @@ public class SysUserBaseVO { @@ -36,7 +36,7 @@ public class SysUserBaseVO {
36 36
37 @ApiModelProperty(value = "用户邮箱", example = "yudao@iocoder.cn") 37 @ApiModelProperty(value = "用户邮箱", example = "yudao@iocoder.cn")
38 @Email(message = "邮箱格式不正确") 38 @Email(message = "邮箱格式不正确")
39 - @Size(max = 50, message = "邮箱长度不能超过50个字符") 39 + @Size(max = 50, message = "邮箱长度不能超过 50 个字符")
40 private String email; 40 private String email;
41 41
42 @ApiModelProperty(value = "手机号码", example = "15601691300") 42 @ApiModelProperty(value = "手机号码", example = "15601691300")
src/main/java/cn/iocoder/dashboard/modules/system/controller/user/vo/user/SysUserPageItemRespVO.java
1 package cn.iocoder.dashboard.modules.system.controller.user.vo.user; 1 package cn.iocoder.dashboard.modules.system.controller.user.vo.user;
2 2
3 -import com.fasterxml.jackson.annotation.JsonIgnore;  
4 import io.swagger.annotations.ApiModel; 3 import io.swagger.annotations.ApiModel;
5 import io.swagger.annotations.ApiModelProperty; 4 import io.swagger.annotations.ApiModelProperty;
6 import lombok.AllArgsConstructor; 5 import lombok.AllArgsConstructor;
@@ -18,7 +17,6 @@ public class SysUserPageItemRespVO extends SysUserRespVO { @@ -18,7 +17,6 @@ public class SysUserPageItemRespVO extends SysUserRespVO {
18 /** 17 /**
19 * 所在部门 18 * 所在部门
20 */ 19 */
21 - @JsonIgnore  
22 private Dept dept; 20 private Dept dept;
23 21
24 @ApiModel("部门") 22 @ApiModel("部门")
src/main/java/cn/iocoder/dashboard/modules/system/convert/auth/SysAuthConvert.java
@@ -3,7 +3,7 @@ package cn.iocoder.dashboard.modules.system.convert.auth; @@ -3,7 +3,7 @@ package cn.iocoder.dashboard.modules.system.convert.auth;
3 import cn.iocoder.dashboard.framework.security.core.LoginUser; 3 import cn.iocoder.dashboard.framework.security.core.LoginUser;
4 import cn.iocoder.dashboard.modules.system.controller.auth.vo.auth.SysAuthMenuRespVO; 4 import cn.iocoder.dashboard.modules.system.controller.auth.vo.auth.SysAuthMenuRespVO;
5 import cn.iocoder.dashboard.modules.system.controller.auth.vo.auth.SysAuthPermissionInfoRespVO; 5 import cn.iocoder.dashboard.modules.system.controller.auth.vo.auth.SysAuthPermissionInfoRespVO;
6 -import cn.iocoder.dashboard.modules.system.controller.user.vo.profile.SysUserProfileUpdatePasswordReqVo; 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 import cn.iocoder.dashboard.modules.system.controller.user.vo.profile.SysUserProfileUpdateReqVO;
8 import cn.iocoder.dashboard.modules.system.dal.dataobject.permission.SysMenuDO; 8 import cn.iocoder.dashboard.modules.system.dal.dataobject.permission.SysMenuDO;
9 import cn.iocoder.dashboard.modules.system.dal.dataobject.permission.SysRoleDO; 9 import cn.iocoder.dashboard.modules.system.dal.dataobject.permission.SysRoleDO;
@@ -42,7 +42,7 @@ public interface SysAuthConvert { @@ -42,7 +42,7 @@ public interface SysAuthConvert {
42 42
43 LoginUser convert(SysUserProfileUpdateReqVO reqVO); 43 LoginUser convert(SysUserProfileUpdateReqVO reqVO);
44 44
45 - LoginUser convert(SysUserProfileUpdatePasswordReqVo reqVO); 45 + LoginUser convert(SysUserProfileUpdatePasswordReqVO reqVO);
46 46
47 /** 47 /**
48 * 将菜单列表,构建成菜单树 48 * 将菜单列表,构建成菜单树
src/main/java/cn/iocoder/dashboard/modules/system/convert/user/SysUserConvert.java
1 package cn.iocoder.dashboard.modules.system.convert.user; 1 package cn.iocoder.dashboard.modules.system.convert.user;
2 2
3 import cn.iocoder.dashboard.modules.system.controller.user.vo.profile.SysUserProfileRespVO; 3 import cn.iocoder.dashboard.modules.system.controller.user.vo.profile.SysUserProfileRespVO;
4 -import cn.iocoder.dashboard.modules.system.controller.user.vo.profile.SysUserProfileUpdatePasswordReqVo; 4 +import cn.iocoder.dashboard.modules.system.controller.user.vo.profile.SysUserProfileUpdatePasswordReqVO;
5 import cn.iocoder.dashboard.modules.system.controller.user.vo.profile.SysUserProfileUpdateReqVO; 5 import cn.iocoder.dashboard.modules.system.controller.user.vo.profile.SysUserProfileUpdateReqVO;
6 -import cn.iocoder.dashboard.modules.system.controller.user.vo.user.SysUserCreateReqVO;  
7 -import cn.iocoder.dashboard.modules.system.controller.user.vo.user.SysUserExcelVO;  
8 -import cn.iocoder.dashboard.modules.system.controller.user.vo.user.SysUserImportExcelVO;  
9 -import cn.iocoder.dashboard.modules.system.controller.user.vo.user.SysUserPageItemRespVO;  
10 -import cn.iocoder.dashboard.modules.system.controller.user.vo.user.SysUserUpdateReqVO; 6 +import cn.iocoder.dashboard.modules.system.controller.user.vo.user.*;
11 import cn.iocoder.dashboard.modules.system.dal.dataobject.dept.SysDeptDO; 7 import cn.iocoder.dashboard.modules.system.dal.dataobject.dept.SysDeptDO;
  8 +import cn.iocoder.dashboard.modules.system.dal.dataobject.dept.SysPostDO;
12 import cn.iocoder.dashboard.modules.system.dal.dataobject.permission.SysRoleDO; 9 import cn.iocoder.dashboard.modules.system.dal.dataobject.permission.SysRoleDO;
13 import cn.iocoder.dashboard.modules.system.dal.dataobject.user.SysUserDO; 10 import cn.iocoder.dashboard.modules.system.dal.dataobject.user.SysUserDO;
14 import org.mapstruct.Mapper; 11 import org.mapstruct.Mapper;
15 import org.mapstruct.factory.Mappers; 12 import org.mapstruct.factory.Mappers;
16 13
  14 +import java.util.List;
  15 +
17 @Mapper 16 @Mapper
18 public interface SysUserConvert { 17 public interface SysUserConvert {
19 18
@@ -33,11 +32,14 @@ public interface SysUserConvert { @@ -33,11 +32,14 @@ public interface SysUserConvert {
33 32
34 SysUserProfileRespVO convert03(SysUserDO bean); 33 SysUserProfileRespVO convert03(SysUserDO bean);
35 34
36 - SysUserProfileRespVO.Role convert(SysRoleDO bean); 35 + List<SysUserProfileRespVO.Role> convertList(List<SysRoleDO> list);
  36 +
  37 + SysUserProfileRespVO.Dept convert02(SysDeptDO bean);
37 38
38 SysUserDO convert(SysUserProfileUpdateReqVO bean); 39 SysUserDO convert(SysUserProfileUpdateReqVO bean);
39 40
40 - SysUserDO convert(SysUserProfileUpdatePasswordReqVo bean); 41 + SysUserDO convert(SysUserProfileUpdatePasswordReqVO bean);
41 42
  43 + List<SysUserProfileRespVO.Post> convertList02(List<SysPostDO> list);
42 44
43 } 45 }
src/main/java/cn/iocoder/dashboard/modules/system/service/dept/SysPostService.java
1 package cn.iocoder.dashboard.modules.system.service.dept; 1 package cn.iocoder.dashboard.modules.system.service.dept;
2 2
  3 +import cn.iocoder.dashboard.common.enums.CommonStatusEnum;
3 import cn.iocoder.dashboard.common.pojo.PageResult; 4 import cn.iocoder.dashboard.common.pojo.PageResult;
4 import cn.iocoder.dashboard.modules.system.controller.dept.vo.post.SysPostCreateReqVO; 5 import cn.iocoder.dashboard.modules.system.controller.dept.vo.post.SysPostCreateReqVO;
5 import cn.iocoder.dashboard.modules.system.controller.dept.vo.post.SysPostExportReqVO; 6 import cn.iocoder.dashboard.modules.system.controller.dept.vo.post.SysPostExportReqVO;
@@ -11,6 +12,8 @@ import org.springframework.lang.Nullable; @@ -11,6 +12,8 @@ import org.springframework.lang.Nullable;
11 import java.util.Collection; 12 import java.util.Collection;
12 import java.util.List; 13 import java.util.List;
13 14
  15 +import static cn.iocoder.dashboard.util.collection.SetUtils.asSet;
  16 +
14 /** 17 /**
15 * 岗位 Service 接口 18 * 岗位 Service 接口
16 * 19 *
@@ -41,6 +44,16 @@ public interface SysPostService { @@ -41,6 +44,16 @@ public interface SysPostService {
41 void deletePost(Long id); 44 void deletePost(Long id);
42 45
43 /** 46 /**
  47 + * 获得岗位列表
  48 + *
  49 + * @param ids 岗位编号数组。如果为空,不进行筛选
  50 + * @return 部门列表
  51 + */
  52 + default List<SysPostDO> getPosts(@Nullable Collection<Long> ids) {
  53 + return getPosts(ids, asSet(CommonStatusEnum.ENABLE.getStatus(), CommonStatusEnum.DISABLE.getStatus()));
  54 + }
  55 +
  56 + /**
44 * 获得符合条件的岗位列表 57 * 获得符合条件的岗位列表
45 * 58 *
46 * @param ids 岗位编号数组。如果为空,不进行筛选 59 * @param ids 岗位编号数组。如果为空,不进行筛选
src/main/java/cn/iocoder/dashboard/modules/system/service/user/SysUserService.java
@@ -2,7 +2,7 @@ package cn.iocoder.dashboard.modules.system.service.user; @@ -2,7 +2,7 @@ package cn.iocoder.dashboard.modules.system.service.user;
2 2
3 import cn.hutool.core.collection.CollUtil; 3 import cn.hutool.core.collection.CollUtil;
4 import cn.iocoder.dashboard.common.pojo.PageResult; 4 import cn.iocoder.dashboard.common.pojo.PageResult;
5 -import cn.iocoder.dashboard.modules.system.controller.user.vo.profile.SysUserProfileUpdatePasswordReqVo; 5 +import cn.iocoder.dashboard.modules.system.controller.user.vo.profile.SysUserProfileUpdatePasswordReqVO;
6 import cn.iocoder.dashboard.modules.system.controller.user.vo.profile.SysUserProfileUpdateReqVO; 6 import cn.iocoder.dashboard.modules.system.controller.user.vo.profile.SysUserProfileUpdateReqVO;
7 import cn.iocoder.dashboard.modules.system.controller.user.vo.user.SysUserCreateReqVO; 7 import cn.iocoder.dashboard.modules.system.controller.user.vo.user.SysUserCreateReqVO;
8 import cn.iocoder.dashboard.modules.system.controller.user.vo.user.SysUserExportReqVO; 8 import cn.iocoder.dashboard.modules.system.controller.user.vo.user.SysUserExportReqVO;
@@ -44,17 +44,18 @@ public interface SysUserService { @@ -44,17 +44,18 @@ public interface SysUserService {
44 /** 44 /**
45 * 修改用户个人信息 45 * 修改用户个人信息
46 * 46 *
  47 + * @param id 用户编号
47 * @param reqVO 用户个人信息 48 * @param reqVO 用户个人信息
48 */ 49 */
49 - void updateUserProfile(SysUserProfileUpdateReqVO reqVO); 50 + void updateUserProfile(Long id, SysUserProfileUpdateReqVO reqVO);
50 51
51 /** 52 /**
52 * 修改用户个人密码 53 * 修改用户个人密码
53 * 54 *
  55 + * @param id 用户编号
54 * @param reqVO 更新用户个人密码 56 * @param reqVO 更新用户个人密码
55 */ 57 */
56 - void updateUserPassword(SysUserProfileUpdatePasswordReqVo reqVO);  
57 - 58 + void updateUserPassword(Long id, SysUserProfileUpdatePasswordReqVO reqVO);
58 59
59 /** 60 /**
60 * 更新用户头像 61 * 更新用户头像
src/main/java/cn/iocoder/dashboard/modules/system/service/user/SysUserServiceImpl.java
@@ -9,7 +9,7 @@ import cn.iocoder.dashboard.common.exception.ServiceException; @@ -9,7 +9,7 @@ import cn.iocoder.dashboard.common.exception.ServiceException;
9 import cn.iocoder.dashboard.common.exception.util.ServiceExceptionUtil; 9 import cn.iocoder.dashboard.common.exception.util.ServiceExceptionUtil;
10 import cn.iocoder.dashboard.common.pojo.PageResult; 10 import cn.iocoder.dashboard.common.pojo.PageResult;
11 import cn.iocoder.dashboard.modules.infra.service.file.InfFileService; 11 import cn.iocoder.dashboard.modules.infra.service.file.InfFileService;
12 -import cn.iocoder.dashboard.modules.system.controller.user.vo.profile.SysUserProfileUpdatePasswordReqVo; 12 +import cn.iocoder.dashboard.modules.system.controller.user.vo.profile.SysUserProfileUpdatePasswordReqVO;
13 import cn.iocoder.dashboard.modules.system.controller.user.vo.profile.SysUserProfileUpdateReqVO; 13 import cn.iocoder.dashboard.modules.system.controller.user.vo.profile.SysUserProfileUpdateReqVO;
14 import cn.iocoder.dashboard.modules.system.controller.user.vo.user.SysUserCreateReqVO; 14 import cn.iocoder.dashboard.modules.system.controller.user.vo.user.SysUserCreateReqVO;
15 import cn.iocoder.dashboard.modules.system.controller.user.vo.user.SysUserExportReqVO; 15 import cn.iocoder.dashboard.modules.system.controller.user.vo.user.SysUserExportReqVO;
@@ -91,22 +91,22 @@ public class SysUserServiceImpl implements SysUserService { @@ -91,22 +91,22 @@ public class SysUserServiceImpl implements SysUserService {
91 } 91 }
92 92
93 @Override 93 @Override
94 - public void updateUserProfile(SysUserProfileUpdateReqVO reqVO) { 94 + public void updateUserProfile(Long id, SysUserProfileUpdateReqVO reqVO) {
95 // 校验正确性 95 // 校验正确性
96 - this.checkUserExists(reqVO.getId());  
97 - this.checkEmailUnique(reqVO.getId(), reqVO.getEmail());  
98 - this.checkMobileUnique(reqVO.getId(), reqVO.getMobile());  
99 - userMapper.updateById(SysUserConvert.INSTANCE.convert(reqVO)); 96 + this.checkUserExists(id);
  97 + this.checkEmailUnique(id, reqVO.getEmail());
  98 + this.checkMobileUnique(id, reqVO.getMobile());
  99 + // 执行更新
  100 + userMapper.updateById(SysUserConvert.INSTANCE.convert(reqVO).setId(id));
100 } 101 }
101 102
102 @Override 103 @Override
103 - public void updateUserPassword(SysUserProfileUpdatePasswordReqVo reqVO) { 104 + public void updateUserPassword(Long id, SysUserProfileUpdatePasswordReqVO reqVO) {
104 // 校验旧密码密码 105 // 校验旧密码密码
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())); 106 + this.checkOldPassword(id, reqVO.getOldPassword());
  107 + // 执行更新
  108 + SysUserDO updateObj = new SysUserDO().setId(id);
  109 + updateObj.setPassword(passwordEncoder.encode(reqVO.getNewPassword())); // 加密密码
110 userMapper.updateById(updateObj); 110 userMapper.updateById(updateObj);
111 } 111 }
112 112