Commit 33ab2e96333472c2b022754bd756b4bea03af8b4

Authored by YunaiV
1 parent 2809254a

【修改】修改部门负责人,从 String 字符串,调整成和后台用户的用户编号绑定

yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/controller/dept/vo/dept/SysDeptBaseVO.java
1 package cn.iocoder.yudao.adminserver.modules.system.controller.dept.vo.dept; 1 package cn.iocoder.yudao.adminserver.modules.system.controller.dept.vo.dept;
2 2
  3 +import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum;
  4 +import cn.iocoder.yudao.framework.common.validation.InEnum;
3 import io.swagger.annotations.ApiModelProperty; 5 import io.swagger.annotations.ApiModelProperty;
4 import lombok.Data; 6 import lombok.Data;
5 7
@@ -28,8 +30,8 @@ public class SysDeptBaseVO { @@ -28,8 +30,8 @@ public class SysDeptBaseVO {
28 @NotNull(message = "显示顺序不能为空") 30 @NotNull(message = "显示顺序不能为空")
29 private Integer sort; 31 private Integer sort;
30 32
31 - @ApiModelProperty(value = "负责人", example = "芋道")  
32 - private String leader; 33 + @ApiModelProperty(value = "负责人的用户编号", example = "2048")
  34 + private Long leaderUserId;
33 35
34 @ApiModelProperty(value = "联系电话", example = "15601691000") 36 @ApiModelProperty(value = "联系电话", example = "15601691000")
35 @Size(max = 11, message = "联系电话长度不能超过11个字符") 37 @Size(max = 11, message = "联系电话长度不能超过11个字符")
@@ -42,7 +44,7 @@ public class SysDeptBaseVO { @@ -42,7 +44,7 @@ public class SysDeptBaseVO {
42 44
43 @ApiModelProperty(value = "状态", required = true, example = "1", notes = "见 SysCommonStatusEnum 枚举") 45 @ApiModelProperty(value = "状态", required = true, example = "1", notes = "见 SysCommonStatusEnum 枚举")
44 @NotNull(message = "状态不能为空") 46 @NotNull(message = "状态不能为空")
45 -// @InEnum(value = SysCommonStatusEnum.class, message = "修改状态必须是 {value}") 47 +// @InEnum(value = CommonStatusEnum.class, message = "修改状态必须是 {value}")
46 private Integer status; 48 private Integer status;
47 49
48 } 50 }
yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/controller/user/SysUserController.java
1 package cn.iocoder.yudao.adminserver.modules.system.controller.user; 1 package cn.iocoder.yudao.adminserver.modules.system.controller.user;
2 2
3 import cn.hutool.core.collection.CollUtil; 3 import cn.hutool.core.collection.CollUtil;
  4 +import cn.iocoder.yudao.adminserver.modules.system.controller.dept.vo.dept.SysDeptListReqVO;
  5 +import cn.iocoder.yudao.adminserver.modules.system.controller.dept.vo.dept.SysDeptSimpleRespVO;
4 import cn.iocoder.yudao.adminserver.modules.system.controller.user.vo.user.*; 6 import cn.iocoder.yudao.adminserver.modules.system.controller.user.vo.user.*;
  7 +import cn.iocoder.yudao.adminserver.modules.system.convert.dept.SysDeptConvert;
5 import cn.iocoder.yudao.adminserver.modules.system.convert.user.SysUserConvert; 8 import cn.iocoder.yudao.adminserver.modules.system.convert.user.SysUserConvert;
6 import cn.iocoder.yudao.adminserver.modules.system.dal.dataobject.dept.SysDeptDO; 9 import cn.iocoder.yudao.adminserver.modules.system.dal.dataobject.dept.SysDeptDO;
7 import cn.iocoder.yudao.adminserver.modules.system.service.dept.SysDeptService; 10 import cn.iocoder.yudao.adminserver.modules.system.service.dept.SysDeptService;
@@ -32,6 +35,8 @@ import java.io.IOException; @@ -32,6 +35,8 @@ import java.io.IOException;
32 import java.util.*; 35 import java.util.*;
33 36
34 import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success; 37 import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success;
  38 +import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.convertList;
  39 +import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.convertSet;
35 import static cn.iocoder.yudao.framework.operatelog.core.enums.OperateTypeEnum.EXPORT; 40 import static cn.iocoder.yudao.framework.operatelog.core.enums.OperateTypeEnum.EXPORT;
36 41
37 @Api(tags = "用户") 42 @Api(tags = "用户")
@@ -99,7 +104,7 @@ public class SysUserController { @@ -99,7 +104,7 @@ public class SysUserController {
99 } 104 }
100 105
101 // 获得拼接需要的数据 106 // 获得拼接需要的数据
102 - Collection<Long> deptIds = CollectionUtils.convertList(pageResult.getList(), SysUserDO::getDeptId); 107 + Collection<Long> deptIds = convertList(pageResult.getList(), SysUserDO::getDeptId);
103 Map<Long, SysDeptDO> deptMap = deptService.getDeptMap(deptIds); 108 Map<Long, SysDeptDO> deptMap = deptService.getDeptMap(deptIds);
104 // 拼接结果返回 109 // 拼接结果返回
105 List<SysUserPageItemRespVO> userList = new ArrayList<>(pageResult.getList().size()); 110 List<SysUserPageItemRespVO> userList = new ArrayList<>(pageResult.getList().size());
@@ -111,6 +116,15 @@ public class SysUserController { @@ -111,6 +116,15 @@ public class SysUserController {
111 return success(new PageResult<>(userList, pageResult.getTotal())); 116 return success(new PageResult<>(userList, pageResult.getTotal()));
112 } 117 }
113 118
  119 + @GetMapping("/list-all-simple")
  120 + @ApiOperation(value = "获取用户精简信息列表", notes = "只包含被开启的用户,主要用于前端的下拉选项")
  121 + public CommonResult<List<SysUserSimpleRespVO>> getSimpleUsers() {
  122 + // 获用户门列表,只要开启状态的
  123 + List<SysUserDO> list = userService.getUsersByStatus(CommonStatusEnum.ENABLE.getStatus());
  124 + // 排序后,返回给前端
  125 + return success(SysUserConvert.INSTANCE.convertList04(list));
  126 + }
  127 +
114 @GetMapping("/get") 128 @GetMapping("/get")
115 @ApiOperation("获得用户详情") 129 @ApiOperation("获得用户详情")
116 @ApiImplicitParam(name = "id", value = "编号", required = true, example = "1024", dataTypeClass = Long.class) 130 @ApiImplicitParam(name = "id", value = "编号", required = true, example = "1024", dataTypeClass = Long.class)
@@ -129,15 +143,19 @@ public class SysUserController { @@ -129,15 +143,19 @@ public class SysUserController {
129 List<SysUserDO> users = userService.getUsers(reqVO); 143 List<SysUserDO> users = userService.getUsers(reqVO);
130 144
131 // 获得拼接需要的数据 145 // 获得拼接需要的数据
132 - Collection<Long> deptIds = CollectionUtils.convertList(users, SysUserDO::getDeptId); 146 + Collection<Long> deptIds = convertList(users, SysUserDO::getDeptId);
133 Map<Long, SysDeptDO> deptMap = deptService.getDeptMap(deptIds); 147 Map<Long, SysDeptDO> deptMap = deptService.getDeptMap(deptIds);
  148 + Map<Long, SysUserDO> deptLeaderUserMap = userService.getUserMap(convertSet(deptMap.values(), SysDeptDO::getLeaderUserId));
134 // 拼接数据 149 // 拼接数据
135 List<SysUserExcelVO> excelUsers = new ArrayList<>(users.size()); 150 List<SysUserExcelVO> excelUsers = new ArrayList<>(users.size());
136 users.forEach(user -> { 151 users.forEach(user -> {
137 SysUserExcelVO excelVO = SysUserConvert.INSTANCE.convert02(user); 152 SysUserExcelVO excelVO = SysUserConvert.INSTANCE.convert02(user);
  153 + // 设置部门
138 MapUtils.findAndThen(deptMap, user.getDeptId(), dept -> { 154 MapUtils.findAndThen(deptMap, user.getDeptId(), dept -> {
139 excelVO.setDeptName(dept.getName()); 155 excelVO.setDeptName(dept.getName());
140 - excelVO.setDeptLeader(dept.getLeader()); 156 + // 设置部门负责人的名字
  157 + MapUtils.findAndThen(deptLeaderUserMap, dept.getLeaderUserId(),
  158 + deptLeaderUser -> excelVO.setDeptLeaderNickname(deptLeaderUser.getNickname()));
141 }); 159 });
142 excelUsers.add(excelVO); 160 excelUsers.add(excelVO);
143 }); 161 });
yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/controller/user/vo/user/SysUserExcelVO.java
@@ -47,6 +47,6 @@ public class SysUserExcelVO { @@ -47,6 +47,6 @@ public class SysUserExcelVO {
47 private String deptName; 47 private String deptName;
48 48
49 @ExcelProperty("部门负责人") 49 @ExcelProperty("部门负责人")
50 - private String deptLeader; 50 + private String deptLeaderNickname;
51 51
52 } 52 }
yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/controller/user/vo/user/SysUserSimpleRespVO.java 0 → 100644
  1 +package cn.iocoder.yudao.adminserver.modules.system.controller.user.vo.user;
  2 +
  3 +import io.swagger.annotations.ApiModel;
  4 +import io.swagger.annotations.ApiModelProperty;
  5 +import lombok.AllArgsConstructor;
  6 +import lombok.Data;
  7 +import lombok.NoArgsConstructor;
  8 +
  9 +@ApiModel("用户精简信息 Response VO")
  10 +@Data
  11 +@NoArgsConstructor
  12 +@AllArgsConstructor
  13 +public class SysUserSimpleRespVO {
  14 +
  15 + @ApiModelProperty(value = "用户编号", required = true, example = "1024")
  16 + private Long id;
  17 +
  18 + @ApiModelProperty(value = "用户昵称", required = true, example = "芋道")
  19 + private String nickname;
  20 +
  21 +}
yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/convert/user/SysUserConvert.java
@@ -45,4 +45,5 @@ public interface SysUserConvert { @@ -45,4 +45,5 @@ public interface SysUserConvert {
45 45
46 List<SysUserProfileRespVO.SocialUser> convertList03(List<SysSocialUserDO> list); 46 List<SysUserProfileRespVO.SocialUser> convertList03(List<SysSocialUserDO> list);
47 47
  48 + List<SysUserSimpleRespVO> convertList04(List<SysUserDO> list);
48 } 49 }
yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/dal/dataobject/dept/SysDeptDO.java
1 package cn.iocoder.yudao.adminserver.modules.system.dal.dataobject.dept; 1 package cn.iocoder.yudao.adminserver.modules.system.dal.dataobject.dept;
2 2
  3 +import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.user.SysUserDO;
3 import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum; 4 import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum;
4 import cn.iocoder.yudao.framework.tenant.core.db.TenantBaseDO; 5 import cn.iocoder.yudao.framework.tenant.core.db.TenantBaseDO;
5 import com.baomidou.mybatisplus.annotation.TableId; 6 import com.baomidou.mybatisplus.annotation.TableId;
@@ -38,8 +39,10 @@ public class SysDeptDO extends TenantBaseDO { @@ -38,8 +39,10 @@ public class SysDeptDO extends TenantBaseDO {
38 private Integer sort; 39 private Integer sort;
39 /** 40 /**
40 * 负责人 41 * 负责人
  42 + *
  43 + * 关联 {@link SysUserDO#getId()}
41 */ 44 */
42 - private String leader; 45 + private Long leaderUserId;
43 /** 46 /**
44 * 联系电话 47 * 联系电话
45 */ 48 */
yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/dal/mysql/user/SysUserMapper.java
@@ -55,7 +55,7 @@ public interface SysUserMapper extends BaseMapperX&lt;SysUserDO&gt; { @@ -55,7 +55,7 @@ public interface SysUserMapper extends BaseMapperX&lt;SysUserDO&gt; {
55 return selectList(new QueryWrapperX<SysUserDO>().like("username", username)); 55 return selectList(new QueryWrapperX<SysUserDO>().like("username", username));
56 } 56 }
57 57
58 - 58 + // TODO 芋艿:可废弃该方法
59 default List<SysUserDO> selectListByDepartIdAndPostId(Long departId, Long postId) { 59 default List<SysUserDO> selectListByDepartIdAndPostId(Long departId, Long postId) {
60 return selectList(new QueryWrapperX<SysUserDO>() 60 return selectList(new QueryWrapperX<SysUserDO>()
61 .eq("status", CommonStatusEnum.ENABLE.getStatus()) 61 .eq("status", CommonStatusEnum.ENABLE.getStatus())
@@ -64,5 +64,9 @@ public interface SysUserMapper extends BaseMapperX&lt;SysUserDO&gt; { @@ -64,5 +64,9 @@ public interface SysUserMapper extends BaseMapperX&lt;SysUserDO&gt; {
64 .likeIfPresent("post_ids", Optional.ofNullable(postId).map(t -> String.valueOf(postId)).orElse(""))); 64 .likeIfPresent("post_ids", Optional.ofNullable(postId).map(t -> String.valueOf(postId)).orElse("")));
65 } 65 }
66 66
  67 + default List<SysUserDO> selectListByStatus(Integer status) {
  68 + return selectList("status", status);
  69 + }
  70 +
67 } 71 }
68 72
yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/service/user/SysUserService.java
@@ -169,4 +169,12 @@ public interface SysUserService { @@ -169,4 +169,12 @@ public interface SysUserService {
169 */ 169 */
170 SysUserImportRespVO importUsers(List<SysUserImportExcelVO> importUsers, boolean isUpdateSupport); 170 SysUserImportRespVO importUsers(List<SysUserImportExcelVO> importUsers, boolean isUpdateSupport);
171 171
  172 + /**
  173 + * 获得指定状态的用户们
  174 + *
  175 + * @param status 状态
  176 + * @return 用户们
  177 + */
  178 + List<SysUserDO> getUsersByStatus(Integer status);
  179 +
172 } 180 }
yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/service/user/impl/SysUserServiceImpl.java
@@ -379,4 +379,9 @@ public class SysUserServiceImpl implements SysUserService { @@ -379,4 +379,9 @@ public class SysUserServiceImpl implements SysUserService {
379 return respVO; 379 return respVO;
380 } 380 }
381 381
  382 + @Override
  383 + public List<SysUserDO> getUsersByStatus(Integer status) {
  384 + return userMapper.selectListByStatus(status);
  385 + }
  386 +
382 } 387 }
yudao-admin-ui/src/api/system/user.js
@@ -10,6 +10,14 @@ export function listUser(query) { @@ -10,6 +10,14 @@ export function listUser(query) {
10 }) 10 })
11 } 11 }
12 12
  13 +// 获取用户精简信息列表
  14 +export function listSimpleUsers() {
  15 + return request({
  16 + url: '/system/user/list-all-simple',
  17 + method: 'get'
  18 + })
  19 +}
  20 +
13 // 查询用户详细 21 // 查询用户详细
14 export function getUser(userId) { 22 export function getUser(userId) {
15 return request({ 23 return request({
yudao-admin-ui/src/views/system/dept/index.vue
@@ -25,8 +25,9 @@ @@ -25,8 +25,9 @@
25 <el-table v-loading="loading" :data="deptList" row-key="id" default-expand-all 25 <el-table v-loading="loading" :data="deptList" row-key="id" default-expand-all
26 :tree-props="{children: 'children', hasChildren: 'hasChildren'}"> 26 :tree-props="{children: 'children', hasChildren: 'hasChildren'}">
27 <el-table-column prop="name" label="部门名称" width="260"></el-table-column> 27 <el-table-column prop="name" label="部门名称" width="260"></el-table-column>
  28 + <el-table-column prop="status" label="负责人" :formatter="userNicknameFormat" width="120"/>
28 <el-table-column prop="sort" label="排序" width="200"></el-table-column> 29 <el-table-column prop="sort" label="排序" width="200"></el-table-column>
29 - <el-table-column prop="status" label="状态" :formatter="statusFormat" width="100"></el-table-column> 30 + <el-table-column prop="status" label="状态" :formatter="statusFormat" width="100"/>
30 <el-table-column label="创建时间" align="center" prop="createTime" width="200"> 31 <el-table-column label="创建时间" align="center" prop="createTime" width="200">
31 <template slot-scope="scope"> 32 <template slot-scope="scope">
32 <span>{{ parseTime(scope.row.createTime) }}</span> 33 <span>{{ parseTime(scope.row.createTime) }}</span>
@@ -64,8 +65,10 @@ @@ -64,8 +65,10 @@
64 </el-form-item> 65 </el-form-item>
65 </el-col> 66 </el-col>
66 <el-col :span="12"> 67 <el-col :span="12">
67 - <el-form-item label="负责人" prop="leader">  
68 - <el-input v-model="form.leader" placeholder="请输入负责人" maxlength="20" /> 68 + <el-form-item label="负责人" prop="leaderUserId">
  69 + <el-select v-model="form.leaderUserId" placeholder="请输入负责人" clearable style="width: 100%">
  70 + <el-option v-for="item in users" :key="parseInt(item.id)" :label="item.nickname" :value="parseInt(item.id)" />
  71 + </el-select>
69 </el-form-item> 72 </el-form-item>
70 </el-col> 73 </el-col>
71 <el-col :span="12"> 74 <el-col :span="12">
@@ -103,6 +106,7 @@ import &quot;@riophae/vue-treeselect/dist/vue-treeselect.css&quot;; @@ -103,6 +106,7 @@ import &quot;@riophae/vue-treeselect/dist/vue-treeselect.css&quot;;
103 106
104 import {SysCommonStatusEnum} from '@/utils/constants' 107 import {SysCommonStatusEnum} from '@/utils/constants'
105 import { getDictDataLabel, getDictDatas, DICT_TYPE } from '@/utils/dict' 108 import { getDictDataLabel, getDictDatas, DICT_TYPE } from '@/utils/dict'
  109 +import {listSimpleUsers} from "@/api/system/user";
106 110
107 export default { 111 export default {
108 name: "Dept", 112 name: "Dept",
@@ -117,6 +121,8 @@ export default { @@ -117,6 +121,8 @@ export default {
117 deptList: [], 121 deptList: [],
118 // 部门树选项 122 // 部门树选项
119 deptOptions: [], 123 deptOptions: [],
  124 + // 用户下拉列表
  125 + users: [],
120 // 弹出层标题 126 // 弹出层标题
121 title: "", 127 title: "",
122 // 是否显示弹出层 128 // 是否显示弹出层
@@ -168,6 +174,10 @@ export default { @@ -168,6 +174,10 @@ export default {
168 }, 174 },
169 created() { 175 created() {
170 this.getList(); 176 this.getList();
  177 + // 获得用户列表
  178 + listSimpleUsers().then(response => {
  179 + this.users = response.data;
  180 + });
171 }, 181 },
172 methods: { 182 methods: {
173 /** 查询部门列表 */ 183 /** 查询部门列表 */
@@ -193,6 +203,18 @@ export default { @@ -193,6 +203,18 @@ export default {
193 statusFormat(row, column) { 203 statusFormat(row, column) {
194 return getDictDataLabel(DICT_TYPE.SYS_COMMON_STATUS, row.status) 204 return getDictDataLabel(DICT_TYPE.SYS_COMMON_STATUS, row.status)
195 }, 205 },
  206 + // 用户昵称展示
  207 + userNicknameFormat(row, column) {
  208 + if (!row.leaderUserId) {
  209 + return '未设置';
  210 + }
  211 + for (const user of this.users) {
  212 + if (row.leaderUserId === user.id) {
  213 + return user.nickname;
  214 + }
  215 + }
  216 + return '未知【' + row.leaderUserId + '】';
  217 + },
196 // 取消按钮 218 // 取消按钮
197 cancel() { 219 cancel() {
198 this.open = false; 220 this.open = false;
@@ -205,7 +227,7 @@ export default { @@ -205,7 +227,7 @@ export default {
205 parentId: undefined, 227 parentId: undefined,
206 name: undefined, 228 name: undefined,
207 sort: undefined, 229 sort: undefined,
208 - leader: undefined, 230 + leaderUserId: undefined,
209 phone: undefined, 231 phone: undefined,
210 email: undefined, 232 email: undefined,
211 status: SysCommonStatusEnum.ENABLE, 233 status: SysCommonStatusEnum.ENABLE,
更新日志.md
@@ -20,6 +20,12 @@ @@ -20,6 +20,12 @@
20 5. 流程结束 20 5. 流程结束
21 * 我的请假中,可以查询本人的请假申请, 和进度 21 * 我的请假中,可以查询本人的请假申请, 和进度
22 22
  23 +### 📝 TODO
  24 +
  25 +* 支付
  26 +* 用户前台的社交登陆
  27 +* 用户前台的修改手机、修改密码、忘记密码
  28 +
23 ## [v1.3.0] 进行中 29 ## [v1.3.0] 进行中
24 30
25 ### ⚠️ Warning 31 ### ⚠️ Warning
@@ -33,6 +39,7 @@ @@ -33,6 +39,7 @@
33 * 【新增】待办任务的管理,支持任务的审批通过与不通过 39 * 【新增】待办任务的管理,支持任务的审批通过与不通过
34 * 【新增】已办任务的管理,支持详情的查看 40 * 【新增】已办任务的管理,支持详情的查看
35 * 【新增】引入 bpmn-process-designer 0.0.1 版本,提供流程设计器的能力 41 * 【新增】引入 bpmn-process-designer 0.0.1 版本,提供流程设计器的能力
  42 +* 【修改】修改部门负责人,从 String 字符串,调整成和后台用户的用户编号绑定
36 43
37 ### 🐞 Bug Fixes 44 ### 🐞 Bug Fixes
38 45
@@ -45,12 +52,6 @@ @@ -45,12 +52,6 @@
45 * 【升级】druid from 1.2.4 to 1.2.8,提升数据库连接池的稳定性 52 * 【升级】druid from 1.2.4 to 1.2.8,提升数据库连接池的稳定性
46 * 【升级】dynamic-datasource from 3.3.2 to 3.5.0,修复动态数据源切换的问题 53 * 【升级】dynamic-datasource from 3.3.2 to 3.5.0,修复动态数据源切换的问题
47 54
48 -### 📝 TODO  
49 -  
50 -* 支付  
51 -* 用户前台的社交登陆  
52 -* 用户前台的修改手机、修改密码、忘记密码  
53 -  
54 ## [v1.2.0] 55 ## [v1.2.0]
55 56
56 ### ⚠️ Warning 57 ### ⚠️ Warning