Commit 42dc4b6194bbc3ea7090e868604c631e9dd16fc0
1 parent
d4cf945a
🔧 简化 user 模块的 VO
Showing
18 changed files
with
222 additions
and
453 deletions
yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/api/user/AdminUserApiImpl.java
| 1 | package cn.iocoder.yudao.module.system.api.user; | 1 | package cn.iocoder.yudao.module.system.api.user; |
| 2 | 2 | ||
| 3 | +import cn.iocoder.yudao.framework.common.util.object.BeanUtils; | ||
| 3 | import cn.iocoder.yudao.module.system.api.user.dto.AdminUserRespDTO; | 4 | import cn.iocoder.yudao.module.system.api.user.dto.AdminUserRespDTO; |
| 4 | -import cn.iocoder.yudao.module.system.convert.user.UserConvert; | ||
| 5 | import cn.iocoder.yudao.module.system.dal.dataobject.user.AdminUserDO; | 5 | import cn.iocoder.yudao.module.system.dal.dataobject.user.AdminUserDO; |
| 6 | import cn.iocoder.yudao.module.system.service.user.AdminUserService; | 6 | import cn.iocoder.yudao.module.system.service.user.AdminUserService; |
| 7 | import org.springframework.stereotype.Service; | 7 | import org.springframework.stereotype.Service; |
| @@ -24,25 +24,25 @@ public class AdminUserApiImpl implements AdminUserApi { | @@ -24,25 +24,25 @@ public class AdminUserApiImpl implements AdminUserApi { | ||
| 24 | @Override | 24 | @Override |
| 25 | public AdminUserRespDTO getUser(Long id) { | 25 | public AdminUserRespDTO getUser(Long id) { |
| 26 | AdminUserDO user = userService.getUser(id); | 26 | AdminUserDO user = userService.getUser(id); |
| 27 | - return UserConvert.INSTANCE.convert4(user); | 27 | + return BeanUtils.toBean(user, AdminUserRespDTO.class); |
| 28 | } | 28 | } |
| 29 | 29 | ||
| 30 | @Override | 30 | @Override |
| 31 | public List<AdminUserRespDTO> getUserList(Collection<Long> ids) { | 31 | public List<AdminUserRespDTO> getUserList(Collection<Long> ids) { |
| 32 | List<AdminUserDO> users = userService.getUserList(ids); | 32 | List<AdminUserDO> users = userService.getUserList(ids); |
| 33 | - return UserConvert.INSTANCE.convertList4(users); | 33 | + return BeanUtils.toBean(users, AdminUserRespDTO.class); |
| 34 | } | 34 | } |
| 35 | 35 | ||
| 36 | @Override | 36 | @Override |
| 37 | public List<AdminUserRespDTO> getUserListByDeptIds(Collection<Long> deptIds) { | 37 | public List<AdminUserRespDTO> getUserListByDeptIds(Collection<Long> deptIds) { |
| 38 | List<AdminUserDO> users = userService.getUserListByDeptIds(deptIds); | 38 | List<AdminUserDO> users = userService.getUserListByDeptIds(deptIds); |
| 39 | - return UserConvert.INSTANCE.convertList4(users); | 39 | + return BeanUtils.toBean(users, AdminUserRespDTO.class); |
| 40 | } | 40 | } |
| 41 | 41 | ||
| 42 | @Override | 42 | @Override |
| 43 | public List<AdminUserRespDTO> getUserListByPostIds(Collection<Long> postIds) { | 43 | public List<AdminUserRespDTO> getUserListByPostIds(Collection<Long> postIds) { |
| 44 | List<AdminUserDO> users = userService.getUserListByPostIds(postIds); | 44 | List<AdminUserDO> users = userService.getUserListByPostIds(postIds); |
| 45 | - return UserConvert.INSTANCE.convertList4(users); | 45 | + return BeanUtils.toBean(users, AdminUserRespDTO.class); |
| 46 | } | 46 | } |
| 47 | 47 | ||
| 48 | @Override | 48 | @Override |
yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/user/UserController.java
| 1 | package cn.iocoder.yudao.module.system.controller.admin.user; | 1 | package cn.iocoder.yudao.module.system.controller.admin.user; |
| 2 | 2 | ||
| 3 | import cn.hutool.core.collection.CollUtil; | 3 | import cn.hutool.core.collection.CollUtil; |
| 4 | +import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum; | ||
| 5 | +import cn.iocoder.yudao.framework.common.pojo.CommonResult; | ||
| 6 | +import cn.iocoder.yudao.framework.common.pojo.PageParam; | ||
| 7 | +import cn.iocoder.yudao.framework.common.pojo.PageResult; | ||
| 8 | +import cn.iocoder.yudao.framework.excel.core.util.ExcelUtils; | ||
| 9 | +import cn.iocoder.yudao.framework.operatelog.core.annotations.OperateLog; | ||
| 4 | import cn.iocoder.yudao.module.system.controller.admin.user.vo.user.*; | 10 | import cn.iocoder.yudao.module.system.controller.admin.user.vo.user.*; |
| 5 | import cn.iocoder.yudao.module.system.convert.user.UserConvert; | 11 | import cn.iocoder.yudao.module.system.convert.user.UserConvert; |
| 6 | import cn.iocoder.yudao.module.system.dal.dataobject.dept.DeptDO; | 12 | import cn.iocoder.yudao.module.system.dal.dataobject.dept.DeptDO; |
| 7 | import cn.iocoder.yudao.module.system.dal.dataobject.user.AdminUserDO; | 13 | import cn.iocoder.yudao.module.system.dal.dataobject.user.AdminUserDO; |
| 14 | +import cn.iocoder.yudao.module.system.enums.common.SexEnum; | ||
| 8 | import cn.iocoder.yudao.module.system.service.dept.DeptService; | 15 | import cn.iocoder.yudao.module.system.service.dept.DeptService; |
| 9 | import cn.iocoder.yudao.module.system.service.user.AdminUserService; | 16 | import cn.iocoder.yudao.module.system.service.user.AdminUserService; |
| 10 | -import cn.iocoder.yudao.module.system.enums.common.SexEnum; | ||
| 11 | -import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum; | ||
| 12 | -import cn.iocoder.yudao.framework.common.pojo.CommonResult; | ||
| 13 | -import cn.iocoder.yudao.framework.common.pojo.PageResult; | ||
| 14 | -import cn.iocoder.yudao.framework.common.util.collection.MapUtils; | ||
| 15 | -import cn.iocoder.yudao.framework.excel.core.util.ExcelUtils; | ||
| 16 | -import cn.iocoder.yudao.framework.operatelog.core.annotations.OperateLog; | ||
| 17 | -import io.swagger.v3.oas.annotations.tags.Tag; | 17 | +import io.swagger.v3.oas.annotations.Operation; |
| 18 | import io.swagger.v3.oas.annotations.Parameter; | 18 | import io.swagger.v3.oas.annotations.Parameter; |
| 19 | import io.swagger.v3.oas.annotations.Parameters; | 19 | import io.swagger.v3.oas.annotations.Parameters; |
| 20 | -import io.swagger.v3.oas.annotations.Operation; | 20 | +import io.swagger.v3.oas.annotations.tags.Tag; |
| 21 | import org.springframework.security.access.prepost.PreAuthorize; | 21 | import org.springframework.security.access.prepost.PreAuthorize; |
| 22 | import org.springframework.validation.annotation.Validated; | 22 | import org.springframework.validation.annotation.Validated; |
| 23 | import org.springframework.web.bind.annotation.*; | 23 | import org.springframework.web.bind.annotation.*; |
| @@ -27,11 +27,12 @@ import javax.annotation.Resource; | @@ -27,11 +27,12 @@ import javax.annotation.Resource; | ||
| 27 | import javax.servlet.http.HttpServletResponse; | 27 | import javax.servlet.http.HttpServletResponse; |
| 28 | import javax.validation.Valid; | 28 | import javax.validation.Valid; |
| 29 | import java.io.IOException; | 29 | import java.io.IOException; |
| 30 | -import java.util.*; | 30 | +import java.util.Arrays; |
| 31 | +import java.util.List; | ||
| 32 | +import java.util.Map; | ||
| 31 | 33 | ||
| 32 | import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success; | 34 | import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success; |
| 33 | import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.convertList; | 35 | import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.convertList; |
| 34 | -import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.convertSet; | ||
| 35 | import static cn.iocoder.yudao.framework.operatelog.core.enums.OperateTypeEnum.EXPORT; | 36 | import static cn.iocoder.yudao.framework.operatelog.core.enums.OperateTypeEnum.EXPORT; |
| 36 | 37 | ||
| 37 | @Tag(name = "管理后台 - 用户") | 38 | @Tag(name = "管理后台 - 用户") |
| @@ -48,7 +49,7 @@ public class UserController { | @@ -48,7 +49,7 @@ public class UserController { | ||
| 48 | @PostMapping("/create") | 49 | @PostMapping("/create") |
| 49 | @Operation(summary = "新增用户") | 50 | @Operation(summary = "新增用户") |
| 50 | @PreAuthorize("@ss.hasPermission('system:user:create')") | 51 | @PreAuthorize("@ss.hasPermission('system:user:create')") |
| 51 | - public CommonResult<Long> createUser(@Valid @RequestBody UserCreateReqVO reqVO) { | 52 | + public CommonResult<Long> createUser(@Valid @RequestBody UserSaveReqVO reqVO) { |
| 52 | Long id = userService.createUser(reqVO); | 53 | Long id = userService.createUser(reqVO); |
| 53 | return success(id); | 54 | return success(id); |
| 54 | } | 55 | } |
| @@ -56,7 +57,7 @@ public class UserController { | @@ -56,7 +57,7 @@ public class UserController { | ||
| 56 | @PutMapping("update") | 57 | @PutMapping("update") |
| 57 | @Operation(summary = "修改用户") | 58 | @Operation(summary = "修改用户") |
| 58 | @PreAuthorize("@ss.hasPermission('system:user:update')") | 59 | @PreAuthorize("@ss.hasPermission('system:user:update')") |
| 59 | - public CommonResult<Boolean> updateUser(@Valid @RequestBody UserUpdateReqVO reqVO) { | 60 | + public CommonResult<Boolean> updateUser(@Valid @RequestBody UserSaveReqVO reqVO) { |
| 60 | userService.updateUser(reqVO); | 61 | userService.updateUser(reqVO); |
| 61 | return success(true); | 62 | return success(true); |
| 62 | } | 63 | } |
| @@ -89,56 +90,27 @@ public class UserController { | @@ -89,56 +90,27 @@ public class UserController { | ||
| 89 | @GetMapping("/page") | 90 | @GetMapping("/page") |
| 90 | @Operation(summary = "获得用户分页列表") | 91 | @Operation(summary = "获得用户分页列表") |
| 91 | @PreAuthorize("@ss.hasPermission('system:user:list')") | 92 | @PreAuthorize("@ss.hasPermission('system:user:list')") |
| 92 | - public CommonResult<PageResult<UserPageItemRespVO>> getUserPage(@Valid UserPageReqVO reqVO) { | 93 | + public CommonResult<PageResult<UserRespVO>> getUserPage(@Valid UserPageReqVO pageReqVO) { |
| 93 | // 获得用户分页列表 | 94 | // 获得用户分页列表 |
| 94 | - PageResult<AdminUserDO> pageResult = userService.getUserPage(reqVO); | 95 | + PageResult<AdminUserDO> pageResult = userService.getUserPage(pageReqVO); |
| 95 | if (CollUtil.isEmpty(pageResult.getList())) { | 96 | if (CollUtil.isEmpty(pageResult.getList())) { |
| 96 | - return success(new PageResult<>(pageResult.getTotal())); // 返回空 | 97 | + return success(new PageResult<>(pageResult.getTotal())); |
| 97 | } | 98 | } |
| 98 | - | ||
| 99 | - // 获得拼接需要的数据 | ||
| 100 | - Collection<Long> deptIds = convertList(pageResult.getList(), AdminUserDO::getDeptId); | ||
| 101 | - Map<Long, DeptDO> deptMap = deptService.getDeptMap(deptIds); | ||
| 102 | - // 拼接结果返回 | ||
| 103 | - List<UserPageItemRespVO> userList = new ArrayList<>(pageResult.getList().size()); | ||
| 104 | - pageResult.getList().forEach(user -> { | ||
| 105 | - UserPageItemRespVO respVO = UserConvert.INSTANCE.convert(user); | ||
| 106 | - respVO.setDept(UserConvert.INSTANCE.convert(deptMap.get(user.getDeptId()))); | ||
| 107 | - userList.add(respVO); | ||
| 108 | - }); | ||
| 109 | - return success(new PageResult<>(userList, pageResult.getTotal())); | ||
| 110 | - } | ||
| 111 | - | ||
| 112 | - // TODO @芋艿:看看这里怎么统一调整下;客户的选择组件; | ||
| 113 | - @GetMapping("/all") | ||
| 114 | - @Operation(summary = "查询所有用户列表") | ||
| 115 | - public CommonResult<List<UserPageItemRespVO>> getAllUser() { | ||
| 116 | - // 获得用户分页列表 | ||
| 117 | - List<AdminUserDO> pageResult = userService.getUserList(); | ||
| 118 | - if (CollUtil.isEmpty(pageResult)) { | ||
| 119 | - return success(Collections.emptyList()); // 返回空 | ||
| 120 | - } | ||
| 121 | - | ||
| 122 | - // 获得拼接需要的数据 | ||
| 123 | - Collection<Long> deptIds = convertList(pageResult, AdminUserDO::getDeptId); | ||
| 124 | - Map<Long, DeptDO> deptMap = deptService.getDeptMap(deptIds); | ||
| 125 | - // 拼接结果返回 | ||
| 126 | - List<UserPageItemRespVO> userList = new ArrayList<>(pageResult.size()); | ||
| 127 | - pageResult.forEach(user -> { | ||
| 128 | - UserPageItemRespVO respVO = UserConvert.INSTANCE.convert(user); | ||
| 129 | - respVO.setDept(UserConvert.INSTANCE.convert(deptMap.get(user.getDeptId()))); | ||
| 130 | - userList.add(respVO); | ||
| 131 | - }); | ||
| 132 | - return success(userList); | 99 | + // 拼接数据 |
| 100 | + Map<Long, DeptDO> deptMap = deptService.getDeptMap( | ||
| 101 | + convertList(pageResult.getList(), AdminUserDO::getDeptId)); | ||
| 102 | + return success(new PageResult<>(UserConvert.INSTANCE.convertList(pageResult.getList(), deptMap), | ||
| 103 | + pageResult.getTotal())); | ||
| 133 | } | 104 | } |
| 134 | 105 | ||
| 135 | - @GetMapping("/list-all-simple") | 106 | + @GetMapping({"/list-all-simple", "/simple-list"}) |
| 136 | @Operation(summary = "获取用户精简信息列表", description = "只包含被开启的用户,主要用于前端的下拉选项") | 107 | @Operation(summary = "获取用户精简信息列表", description = "只包含被开启的用户,主要用于前端的下拉选项") |
| 137 | public CommonResult<List<UserSimpleRespVO>> getSimpleUserList() { | 108 | public CommonResult<List<UserSimpleRespVO>> getSimpleUserList() { |
| 138 | - // 获用户列表,只要开启状态的 | ||
| 139 | List<AdminUserDO> list = userService.getUserListByStatus(CommonStatusEnum.ENABLE.getStatus()); | 109 | List<AdminUserDO> list = userService.getUserListByStatus(CommonStatusEnum.ENABLE.getStatus()); |
| 140 | - // 排序后,返回给前端 | ||
| 141 | - return success(UserConvert.INSTANCE.convertList04(list)); | 110 | + // 拼接数据 |
| 111 | + Map<Long, DeptDO> deptMap = deptService.getDeptMap( | ||
| 112 | + convertList(list, AdminUserDO::getDeptId)); | ||
| 113 | + return success(UserConvert.INSTANCE.convertSimpleList(list, deptMap)); | ||
| 142 | } | 114 | } |
| 143 | 115 | ||
| 144 | @GetMapping("/get") | 116 | @GetMapping("/get") |
| @@ -147,41 +119,24 @@ public class UserController { | @@ -147,41 +119,24 @@ public class UserController { | ||
| 147 | @PreAuthorize("@ss.hasPermission('system:user:query')") | 119 | @PreAuthorize("@ss.hasPermission('system:user:query')") |
| 148 | public CommonResult<UserRespVO> getUser(@RequestParam("id") Long id) { | 120 | public CommonResult<UserRespVO> getUser(@RequestParam("id") Long id) { |
| 149 | AdminUserDO user = userService.getUser(id); | 121 | AdminUserDO user = userService.getUser(id); |
| 150 | - // 获得部门数据 | 122 | + // 拼接数据 |
| 151 | DeptDO dept = deptService.getDept(user.getDeptId()); | 123 | DeptDO dept = deptService.getDept(user.getDeptId()); |
| 152 | - return success(UserConvert.INSTANCE.convert(user).setDept(UserConvert.INSTANCE.convert(dept))); | 124 | + return success(UserConvert.INSTANCE.convert(user, dept)); |
| 153 | } | 125 | } |
| 154 | 126 | ||
| 155 | @GetMapping("/export") | 127 | @GetMapping("/export") |
| 156 | @Operation(summary = "导出用户") | 128 | @Operation(summary = "导出用户") |
| 157 | @PreAuthorize("@ss.hasPermission('system:user:export')") | 129 | @PreAuthorize("@ss.hasPermission('system:user:export')") |
| 158 | @OperateLog(type = EXPORT) | 130 | @OperateLog(type = EXPORT) |
| 159 | - public void exportUserList(@Validated UserExportReqVO reqVO, | 131 | + public void exportUserList(@Validated UserPageReqVO exportReqVO, |
| 160 | HttpServletResponse response) throws IOException { | 132 | HttpServletResponse response) throws IOException { |
| 161 | - // 获得用户列表 | ||
| 162 | - List<AdminUserDO> users = userService.getUserList(reqVO); | ||
| 163 | - | ||
| 164 | - // 获得拼接需要的数据 | ||
| 165 | - Collection<Long> deptIds = convertList(users, AdminUserDO::getDeptId); | ||
| 166 | - Map<Long, DeptDO> deptMap = deptService.getDeptMap(deptIds); | ||
| 167 | - Map<Long, AdminUserDO> deptLeaderUserMap = userService.getUserMap( | ||
| 168 | - convertSet(deptMap.values(), DeptDO::getLeaderUserId)); | ||
| 169 | - // 拼接数据 | ||
| 170 | - List<UserExcelVO> excelUsers = new ArrayList<>(users.size()); | ||
| 171 | - users.forEach(user -> { | ||
| 172 | - UserExcelVO excelVO = UserConvert.INSTANCE.convert02(user); | ||
| 173 | - // 设置部门 | ||
| 174 | - MapUtils.findAndThen(deptMap, user.getDeptId(), dept -> { | ||
| 175 | - excelVO.setDeptName(dept.getName()); | ||
| 176 | - // 设置部门负责人的名字 | ||
| 177 | - MapUtils.findAndThen(deptLeaderUserMap, dept.getLeaderUserId(), | ||
| 178 | - deptLeaderUser -> excelVO.setDeptLeaderNickname(deptLeaderUser.getNickname())); | ||
| 179 | - }); | ||
| 180 | - excelUsers.add(excelVO); | ||
| 181 | - }); | ||
| 182 | - | ||
| 183 | - // 输出 | ||
| 184 | - ExcelUtils.write(response, "用户数据.xls", "用户列表", UserExcelVO.class, excelUsers); | 133 | + exportReqVO.setPageSize(PageParam.PAGE_SIZE_NONE); |
| 134 | + List<AdminUserDO> list = userService.getUserPage(exportReqVO).getList(); | ||
| 135 | + // 输出 Excel | ||
| 136 | + Map<Long, DeptDO> deptMap = deptService.getDeptMap( | ||
| 137 | + convertList(list, AdminUserDO::getDeptId)); | ||
| 138 | + ExcelUtils.write(response, "用户数据.xls", "数据", UserRespVO.class, | ||
| 139 | + UserConvert.INSTANCE.convertList(list, deptMap)); | ||
| 185 | } | 140 | } |
| 186 | 141 | ||
| 187 | @GetMapping("/get-import-template") | 142 | @GetMapping("/get-import-template") |
| @@ -194,7 +149,6 @@ public class UserController { | @@ -194,7 +149,6 @@ public class UserController { | ||
| 194 | UserImportExcelVO.builder().username("yuanma").deptId(2L).email("yuanma@iocoder.cn").mobile("15601701300") | 149 | UserImportExcelVO.builder().username("yuanma").deptId(2L).email("yuanma@iocoder.cn").mobile("15601701300") |
| 195 | .nickname("源码").status(CommonStatusEnum.DISABLE.getStatus()).sex(SexEnum.FEMALE.getSex()).build() | 150 | .nickname("源码").status(CommonStatusEnum.DISABLE.getStatus()).sex(SexEnum.FEMALE.getSex()).build() |
| 196 | ); | 151 | ); |
| 197 | - | ||
| 198 | // 输出 | 152 | // 输出 |
| 199 | ExcelUtils.write(response, "用户导入模板.xls", "用户列表", UserImportExcelVO.class, list); | 153 | ExcelUtils.write(response, "用户导入模板.xls", "用户列表", UserImportExcelVO.class, list); |
| 200 | } | 154 | } |
yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/user/UserProfileController.java
| @@ -58,27 +58,18 @@ public class UserProfileController { | @@ -58,27 +58,18 @@ public class UserProfileController { | ||
| 58 | @GetMapping("/get") | 58 | @GetMapping("/get") |
| 59 | @Operation(summary = "获得登录用户信息") | 59 | @Operation(summary = "获得登录用户信息") |
| 60 | @DataPermission(enable = false) // 关闭数据权限,避免只查看自己时,查询不到部门。 | 60 | @DataPermission(enable = false) // 关闭数据权限,避免只查看自己时,查询不到部门。 |
| 61 | - public CommonResult<UserProfileRespVO> profile() { | 61 | + public CommonResult<UserProfileRespVO> getUserProfile() { |
| 62 | // 获得用户基本信息 | 62 | // 获得用户基本信息 |
| 63 | AdminUserDO user = userService.getUser(getLoginUserId()); | 63 | AdminUserDO user = userService.getUser(getLoginUserId()); |
| 64 | - UserProfileRespVO resp = UserConvert.INSTANCE.convert03(user); | ||
| 65 | // 获得用户角色 | 64 | // 获得用户角色 |
| 66 | List<RoleDO> userRoles = roleService.getRoleListFromCache(permissionService.getUserRoleIdListByUserId(user.getId())); | 65 | List<RoleDO> userRoles = roleService.getRoleListFromCache(permissionService.getUserRoleIdListByUserId(user.getId())); |
| 67 | - resp.setRoles(UserConvert.INSTANCE.convertList(userRoles)); | ||
| 68 | // 获得部门信息 | 66 | // 获得部门信息 |
| 69 | - if (user.getDeptId() != null) { | ||
| 70 | - DeptDO dept = deptService.getDept(user.getDeptId()); | ||
| 71 | - resp.setDept(UserConvert.INSTANCE.convert02(dept)); | ||
| 72 | - } | 67 | + DeptDO dept = user.getDeptId() != null ? deptService.getDept(user.getDeptId()) : null; |
| 73 | // 获得岗位信息 | 68 | // 获得岗位信息 |
| 74 | - if (CollUtil.isNotEmpty(user.getPostIds())) { | ||
| 75 | - List<PostDO> posts = postService.getPostList(user.getPostIds()); | ||
| 76 | - resp.setPosts(UserConvert.INSTANCE.convertList02(posts)); | ||
| 77 | - } | 69 | + List<PostDO> posts = CollUtil.isNotEmpty(user.getPostIds()) ? postService.getPostList(user.getPostIds()) : null; |
| 78 | // 获得社交用户信息 | 70 | // 获得社交用户信息 |
| 79 | List<SocialUserDO> socialUsers = socialService.getSocialUserList(user.getId(), UserTypeEnum.ADMIN.getValue()); | 71 | List<SocialUserDO> socialUsers = socialService.getSocialUserList(user.getId(), UserTypeEnum.ADMIN.getValue()); |
| 80 | - resp.setSocialUsers(UserConvert.INSTANCE.convertList03(socialUsers)); | ||
| 81 | - return success(resp); | 72 | + return success(UserConvert.INSTANCE.convert(user, userRoles, dept, posts, socialUsers)); |
| 82 | } | 73 | } |
| 83 | 74 | ||
| 84 | @PutMapping("/update") | 75 | @PutMapping("/update") |
| @@ -95,7 +86,8 @@ public class UserProfileController { | @@ -95,7 +86,8 @@ public class UserProfileController { | ||
| 95 | return success(true); | 86 | return success(true); |
| 96 | } | 87 | } |
| 97 | 88 | ||
| 98 | - @RequestMapping(value = "/update-avatar", method = {RequestMethod.POST, RequestMethod.PUT}) // 解决 uni-app 不支持 Put 上传文件的问题 | 89 | + @RequestMapping(value = "/update-avatar", |
| 90 | + method = {RequestMethod.POST, RequestMethod.PUT}) // 解决 uni-app 不支持 Put 上传文件的问题 | ||
| 99 | @Operation(summary = "上传用户个人头像") | 91 | @Operation(summary = "上传用户个人头像") |
| 100 | public CommonResult<String> updateUserAvatar(@RequestParam("avatarFile") MultipartFile file) throws Exception { | 92 | public CommonResult<String> updateUserAvatar(@RequestParam("avatarFile") MultipartFile file) throws Exception { |
| 101 | if (file.isEmpty()) { | 93 | if (file.isEmpty()) { |
yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/user/vo/profile/UserProfileRespVO.java
| 1 | package cn.iocoder.yudao.module.system.controller.admin.user.vo.profile; | 1 | package cn.iocoder.yudao.module.system.controller.admin.user.vo.profile; |
| 2 | 2 | ||
| 3 | -import cn.iocoder.yudao.module.system.controller.admin.user.vo.user.UserBaseVO; | 3 | +import cn.iocoder.yudao.module.system.controller.admin.dept.vo.dept.DeptSimpleRespVO; |
| 4 | +import cn.iocoder.yudao.module.system.controller.admin.dept.vo.post.PostSimpleRespVO; | ||
| 5 | +import cn.iocoder.yudao.module.system.controller.admin.permission.vo.role.RoleSimpleRespVO; | ||
| 4 | import io.swagger.v3.oas.annotations.media.Schema; | 6 | import io.swagger.v3.oas.annotations.media.Schema; |
| 5 | -import lombok.AllArgsConstructor; | ||
| 6 | import lombok.Data; | 7 | import lombok.Data; |
| 7 | -import lombok.EqualsAndHashCode; | ||
| 8 | -import lombok.NoArgsConstructor; | ||
| 9 | 8 | ||
| 10 | import java.time.LocalDateTime; | 9 | import java.time.LocalDateTime; |
| 11 | import java.util.List; | 10 | import java.util.List; |
| 12 | 11 | ||
| 13 | - | ||
| 14 | @Data | 12 | @Data |
| 15 | -@EqualsAndHashCode(callSuper = true) | ||
| 16 | -@NoArgsConstructor | ||
| 17 | -@AllArgsConstructor | ||
| 18 | @Schema(description = "管理后台 - 用户个人中心信息 Response VO") | 13 | @Schema(description = "管理后台 - 用户个人中心信息 Response VO") |
| 19 | -public class UserProfileRespVO extends UserBaseVO { | 14 | +public class UserProfileRespVO { |
| 20 | 15 | ||
| 21 | @Schema(description = "用户编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "1") | 16 | @Schema(description = "用户编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "1") |
| 22 | private Long id; | 17 | private Long id; |
| 23 | 18 | ||
| 24 | - @Schema(description = "状态,参见 CommonStatusEnum 枚举类", requiredMode = Schema.RequiredMode.REQUIRED, example = "1") | ||
| 25 | - private Integer status; | 19 | + @Schema(description = "用户账号", requiredMode = Schema.RequiredMode.REQUIRED, example = "yudao") |
| 20 | + private String username; | ||
| 21 | + | ||
| 22 | + @Schema(description = "用户昵称", requiredMode = Schema.RequiredMode.REQUIRED, example = "芋艿") | ||
| 23 | + private String nickname; | ||
| 24 | + | ||
| 25 | + @Schema(description = "用户邮箱", example = "yudao@iocoder.cn") | ||
| 26 | + private String email; | ||
| 27 | + | ||
| 28 | + @Schema(description = "手机号码", example = "15601691300") | ||
| 29 | + private String mobile; | ||
| 30 | + | ||
| 31 | + @Schema(description = "用户性别,参见 SexEnum 枚举类", example = "1") | ||
| 32 | + private Integer sex; | ||
| 33 | + | ||
| 34 | + @Schema(description = "用户头像", example = "https://www.iocoder.cn/xxx.png") | ||
| 35 | + private String avatar; | ||
| 26 | 36 | ||
| 27 | @Schema(description = "最后登录 IP", requiredMode = Schema.RequiredMode.REQUIRED, example = "192.168.1.1") | 37 | @Schema(description = "最后登录 IP", requiredMode = Schema.RequiredMode.REQUIRED, example = "192.168.1.1") |
| 28 | private String loginIp; | 38 | private String loginIp; |
| @@ -36,58 +46,20 @@ public class UserProfileRespVO extends UserBaseVO { | @@ -36,58 +46,20 @@ public class UserProfileRespVO extends UserBaseVO { | ||
| 36 | /** | 46 | /** |
| 37 | * 所属角色 | 47 | * 所属角色 |
| 38 | */ | 48 | */ |
| 39 | - private List<Role> roles; | ||
| 40 | - | 49 | + private List<RoleSimpleRespVO> roles; |
| 41 | /** | 50 | /** |
| 42 | * 所在部门 | 51 | * 所在部门 |
| 43 | */ | 52 | */ |
| 44 | - private Dept dept; | ||
| 45 | - | 53 | + private DeptSimpleRespVO dept; |
| 46 | /** | 54 | /** |
| 47 | * 所属岗位数组 | 55 | * 所属岗位数组 |
| 48 | */ | 56 | */ |
| 49 | - private List<Post> posts; | 57 | + private List<PostSimpleRespVO> posts; |
| 50 | /** | 58 | /** |
| 51 | * 社交用户数组 | 59 | * 社交用户数组 |
| 52 | */ | 60 | */ |
| 53 | private List<SocialUser> socialUsers; | 61 | private List<SocialUser> socialUsers; |
| 54 | 62 | ||
| 55 | - @Schema(description = "角色") | ||
| 56 | - @Data | ||
| 57 | - public static class Role { | ||
| 58 | - | ||
| 59 | - @Schema(description = "角色编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "1") | ||
| 60 | - private Long id; | ||
| 61 | - | ||
| 62 | - @Schema(description = "角色名称", requiredMode = Schema.RequiredMode.REQUIRED, example = "普通角色") | ||
| 63 | - private String name; | ||
| 64 | - | ||
| 65 | - } | ||
| 66 | - | ||
| 67 | - @Schema(description = "部门") | ||
| 68 | - @Data | ||
| 69 | - public static class Dept { | ||
| 70 | - | ||
| 71 | - @Schema(description = "部门编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "1") | ||
| 72 | - private Long id; | ||
| 73 | - | ||
| 74 | - @Schema(description = "部门名称", requiredMode = Schema.RequiredMode.REQUIRED, example = "研发部") | ||
| 75 | - private String name; | ||
| 76 | - | ||
| 77 | - } | ||
| 78 | - | ||
| 79 | - @Schema(description = "岗位") | ||
| 80 | - @Data | ||
| 81 | - public static class Post { | ||
| 82 | - | ||
| 83 | - @Schema(description = "岗位编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "1") | ||
| 84 | - private Long id; | ||
| 85 | - | ||
| 86 | - @Schema(description = "岗位名称", requiredMode = Schema.RequiredMode.REQUIRED, example = "开发") | ||
| 87 | - private String name; | ||
| 88 | - | ||
| 89 | - } | ||
| 90 | - | ||
| 91 | @Schema(description = "社交用户") | 63 | @Schema(description = "社交用户") |
| 92 | @Data | 64 | @Data |
| 93 | public static class SocialUser { | 65 | public static class SocialUser { |
yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/user/vo/user/UserCreateReqVO.java deleted
| 1 | -package cn.iocoder.yudao.module.system.controller.admin.user.vo.user; | ||
| 2 | - | ||
| 3 | -import io.swagger.v3.oas.annotations.media.Schema; | ||
| 4 | -import lombok.Data; | ||
| 5 | -import lombok.EqualsAndHashCode; | ||
| 6 | -import org.hibernate.validator.constraints.Length; | ||
| 7 | - | ||
| 8 | -import javax.validation.constraints.NotEmpty; | ||
| 9 | - | ||
| 10 | -@Schema(description = "管理后台 - 用户创建 Request VO") | ||
| 11 | -@Data | ||
| 12 | -@EqualsAndHashCode(callSuper = true) | ||
| 13 | -public class UserCreateReqVO extends UserBaseVO { | ||
| 14 | - | ||
| 15 | - @Schema(description = "密码", requiredMode = Schema.RequiredMode.REQUIRED, example = "123456") | ||
| 16 | - @NotEmpty(message = "密码不能为空") | ||
| 17 | - @Length(min = 4, max = 16, message = "密码长度为 4-16 位") | ||
| 18 | - private String password; | ||
| 19 | - | ||
| 20 | -} |
yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/user/vo/user/UserExcelVO.java deleted
| 1 | -package cn.iocoder.yudao.module.system.controller.admin.user.vo.user; | ||
| 2 | - | ||
| 3 | -import cn.iocoder.yudao.framework.excel.core.annotations.DictFormat; | ||
| 4 | -import cn.iocoder.yudao.framework.excel.core.convert.DictConvert; | ||
| 5 | -import cn.iocoder.yudao.module.system.enums.DictTypeConstants; | ||
| 6 | -import com.alibaba.excel.annotation.ExcelProperty; | ||
| 7 | -import lombok.Data; | ||
| 8 | - | ||
| 9 | -import java.time.LocalDateTime; | ||
| 10 | - | ||
| 11 | -/** | ||
| 12 | - * 用户 Excel 导出 VO | ||
| 13 | - */ | ||
| 14 | -@Data | ||
| 15 | -public class UserExcelVO { | ||
| 16 | - | ||
| 17 | - @ExcelProperty("用户编号") | ||
| 18 | - private Long id; | ||
| 19 | - | ||
| 20 | - @ExcelProperty("用户名称") | ||
| 21 | - private String username; | ||
| 22 | - | ||
| 23 | - @ExcelProperty("用户昵称") | ||
| 24 | - private String nickname; | ||
| 25 | - | ||
| 26 | - @ExcelProperty("用户邮箱") | ||
| 27 | - private String email; | ||
| 28 | - | ||
| 29 | - @ExcelProperty("手机号码") | ||
| 30 | - private String mobile; | ||
| 31 | - | ||
| 32 | - @ExcelProperty(value = "用户性别", converter = DictConvert.class) | ||
| 33 | - @DictFormat(DictTypeConstants.USER_SEX) | ||
| 34 | - private Integer sex; | ||
| 35 | - | ||
| 36 | - @ExcelProperty(value = "帐号状态", converter = DictConvert.class) | ||
| 37 | - @DictFormat(DictTypeConstants.COMMON_STATUS) | ||
| 38 | - private Integer status; | ||
| 39 | - | ||
| 40 | - @ExcelProperty("最后登录IP") | ||
| 41 | - private String loginIp; | ||
| 42 | - | ||
| 43 | - @ExcelProperty("最后登录时间") | ||
| 44 | - private LocalDateTime loginDate; | ||
| 45 | - | ||
| 46 | - @ExcelProperty("部门名称") | ||
| 47 | - private String deptName; | ||
| 48 | - | ||
| 49 | - @ExcelProperty("部门负责人") | ||
| 50 | - private String deptLeaderNickname; | ||
| 51 | - | ||
| 52 | -} |
yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/user/vo/user/UserExportReqVO.java deleted
| 1 | -package cn.iocoder.yudao.module.system.controller.admin.user.vo.user; | ||
| 2 | - | ||
| 3 | -import io.swagger.v3.oas.annotations.media.Schema; | ||
| 4 | -import lombok.AllArgsConstructor; | ||
| 5 | -import lombok.Data; | ||
| 6 | -import lombok.NoArgsConstructor; | ||
| 7 | -import org.springframework.format.annotation.DateTimeFormat; | ||
| 8 | - | ||
| 9 | -import java.time.LocalDateTime; | ||
| 10 | - | ||
| 11 | -import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND; | ||
| 12 | - | ||
| 13 | -@Schema(description = "管理后台 - 用户导出 Request VO,参数和 UserPageReqVO 是一致的") | ||
| 14 | -@Data | ||
| 15 | -@NoArgsConstructor | ||
| 16 | -@AllArgsConstructor | ||
| 17 | -public class UserExportReqVO { | ||
| 18 | - | ||
| 19 | - @Schema(description = "用户账号,模糊匹配", example = "yudao") | ||
| 20 | - private String username; | ||
| 21 | - | ||
| 22 | - @Schema(description = "手机号码,模糊匹配", example = "yudao") | ||
| 23 | - private String mobile; | ||
| 24 | - | ||
| 25 | - @Schema(description = "展示状态,参见 CommonStatusEnum 枚举类", example = "1") | ||
| 26 | - private Integer status; | ||
| 27 | - | ||
| 28 | - @Schema(description = "创建时间", example = "[2022-07-01 00:00:00,2022-07-01 23:59:59]") | ||
| 29 | - @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) | ||
| 30 | - private LocalDateTime[] createTime; | ||
| 31 | - | ||
| 32 | - @Schema(description = "部门编号,同时筛选子部门", example = "1024") | ||
| 33 | - private Long deptId; | ||
| 34 | - | ||
| 35 | -} |
yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/user/vo/user/UserPageItemRespVO.java deleted
| 1 | -package cn.iocoder.yudao.module.system.controller.admin.user.vo.user; | ||
| 2 | - | ||
| 3 | -import io.swagger.v3.oas.annotations.media.Schema; | ||
| 4 | -import lombok.AllArgsConstructor; | ||
| 5 | -import lombok.Data; | ||
| 6 | -import lombok.EqualsAndHashCode; | ||
| 7 | -import lombok.NoArgsConstructor; | ||
| 8 | - | ||
| 9 | -@Schema(description = "管理后台 - 用户分页时的信息 Response VO,相比用户基本信息来说,会多部门信息") | ||
| 10 | -@Data | ||
| 11 | -@NoArgsConstructor | ||
| 12 | -@AllArgsConstructor | ||
| 13 | -@EqualsAndHashCode(callSuper = true) | ||
| 14 | -public class UserPageItemRespVO extends UserRespVO { | ||
| 15 | - | ||
| 16 | - /** | ||
| 17 | - * 所在部门 | ||
| 18 | - */ | ||
| 19 | - private Dept dept; | ||
| 20 | - | ||
| 21 | - @Schema(description = "部门") | ||
| 22 | - @Data | ||
| 23 | - public static class Dept { | ||
| 24 | - | ||
| 25 | - @Schema(description = "部门编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "1") | ||
| 26 | - private Long id; | ||
| 27 | - | ||
| 28 | - @Schema(description = "部门名称", requiredMode = Schema.RequiredMode.REQUIRED, example = "研发部") | ||
| 29 | - private String name; | ||
| 30 | - | ||
| 31 | - } | ||
| 32 | - | ||
| 33 | -} |
yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/user/vo/user/UserRespVO.java
| 1 | package cn.iocoder.yudao.module.system.controller.admin.user.vo.user; | 1 | package cn.iocoder.yudao.module.system.controller.admin.user.vo.user; |
| 2 | 2 | ||
| 3 | +import cn.iocoder.yudao.framework.excel.core.annotations.DictFormat; | ||
| 4 | +import cn.iocoder.yudao.framework.excel.core.convert.DictConvert; | ||
| 5 | +import cn.iocoder.yudao.module.system.enums.DictTypeConstants; | ||
| 6 | +import com.alibaba.excel.annotation.ExcelIgnoreUnannotated; | ||
| 7 | +import com.alibaba.excel.annotation.ExcelProperty; | ||
| 3 | import io.swagger.v3.oas.annotations.media.Schema; | 8 | import io.swagger.v3.oas.annotations.media.Schema; |
| 4 | -import lombok.*; | 9 | +import lombok.Data; |
| 5 | 10 | ||
| 6 | import java.time.LocalDateTime; | 11 | import java.time.LocalDateTime; |
| 7 | - | 12 | +import java.util.Set; |
| 8 | 13 | ||
| 9 | @Schema(description = "管理后台 - 用户信息 Response VO") | 14 | @Schema(description = "管理后台 - 用户信息 Response VO") |
| 10 | @Data | 15 | @Data |
| 11 | -@NoArgsConstructor | ||
| 12 | -@AllArgsConstructor | ||
| 13 | -@EqualsAndHashCode(callSuper = true) | ||
| 14 | -public class UserRespVO extends UserBaseVO { | 16 | +@ExcelIgnoreUnannotated |
| 17 | +public class UserRespVO{ | ||
| 15 | 18 | ||
| 16 | @Schema(description = "用户编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "1") | 19 | @Schema(description = "用户编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "1") |
| 20 | + @ExcelProperty("用户编号") | ||
| 17 | private Long id; | 21 | private Long id; |
| 18 | 22 | ||
| 23 | + @Schema(description = "用户账号", requiredMode = Schema.RequiredMode.REQUIRED, example = "yudao") | ||
| 24 | + @ExcelProperty("用户名称") | ||
| 25 | + private String username; | ||
| 26 | + | ||
| 27 | + @Schema(description = "用户昵称", requiredMode = Schema.RequiredMode.REQUIRED, example = "芋艿") | ||
| 28 | + @ExcelProperty("用户昵称") | ||
| 29 | + private String nickname; | ||
| 30 | + | ||
| 31 | + @Schema(description = "备注", example = "我是一个用户") | ||
| 32 | + private String remark; | ||
| 33 | + | ||
| 34 | + @Schema(description = "部门ID", example = "我是一个用户") | ||
| 35 | + private Long deptId; | ||
| 36 | + @Schema(description = "部门名称", example = "IT 部") | ||
| 37 | + @ExcelProperty("部门名称") | ||
| 38 | + private String deptName; | ||
| 39 | + | ||
| 40 | + @Schema(description = "岗位编号数组", example = "1") | ||
| 41 | + private Set<Long> postIds; | ||
| 42 | + | ||
| 43 | + @Schema(description = "用户邮箱", example = "yudao@iocoder.cn") | ||
| 44 | + @ExcelProperty("用户邮箱") | ||
| 45 | + private String email; | ||
| 46 | + | ||
| 47 | + @Schema(description = "手机号码", example = "15601691300") | ||
| 48 | + @ExcelProperty("手机号码") | ||
| 49 | + private String mobile; | ||
| 50 | + | ||
| 51 | + @Schema(description = "用户性别,参见 SexEnum 枚举类", example = "1") | ||
| 52 | + @ExcelProperty(value = "用户性别", converter = DictConvert.class) | ||
| 53 | + @DictFormat(DictTypeConstants.USER_SEX) | ||
| 54 | + private Integer sex; | ||
| 55 | + | ||
| 56 | + @Schema(description = "用户头像", example = "https://www.iocoder.cn/xxx.png") | ||
| 57 | + private String avatar; | ||
| 58 | + | ||
| 19 | @Schema(description = "状态,参见 CommonStatusEnum 枚举类", requiredMode = Schema.RequiredMode.REQUIRED, example = "1") | 59 | @Schema(description = "状态,参见 CommonStatusEnum 枚举类", requiredMode = Schema.RequiredMode.REQUIRED, example = "1") |
| 60 | + @ExcelProperty(value = "帐号状态", converter = DictConvert.class) | ||
| 61 | + @DictFormat(DictTypeConstants.COMMON_STATUS) | ||
| 20 | private Integer status; | 62 | private Integer status; |
| 21 | 63 | ||
| 22 | @Schema(description = "最后登录 IP", requiredMode = Schema.RequiredMode.REQUIRED, example = "192.168.1.1") | 64 | @Schema(description = "最后登录 IP", requiredMode = Schema.RequiredMode.REQUIRED, example = "192.168.1.1") |
| 65 | + @ExcelProperty("最后登录IP") | ||
| 23 | private String loginIp; | 66 | private String loginIp; |
| 24 | 67 | ||
| 25 | @Schema(description = "最后登录时间", requiredMode = Schema.RequiredMode.REQUIRED, example = "时间戳格式") | 68 | @Schema(description = "最后登录时间", requiredMode = Schema.RequiredMode.REQUIRED, example = "时间戳格式") |
| 69 | + @ExcelProperty("最后登录时间") | ||
| 26 | private LocalDateTime loginDate; | 70 | private LocalDateTime loginDate; |
| 27 | 71 | ||
| 28 | @Schema(description = "创建时间", requiredMode = Schema.RequiredMode.REQUIRED, example = "时间戳格式") | 72 | @Schema(description = "创建时间", requiredMode = Schema.RequiredMode.REQUIRED, example = "时间戳格式") |
yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/user/vo/user/UserBaseVO.java renamed to yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/user/vo/user/UserSaveReqVO.java
| 1 | package cn.iocoder.yudao.module.system.controller.admin.user.vo.user; | 1 | package cn.iocoder.yudao.module.system.controller.admin.user.vo.user; |
| 2 | 2 | ||
| 3 | +import cn.hutool.core.util.ObjectUtil; | ||
| 3 | import cn.iocoder.yudao.framework.common.validation.Mobile; | 4 | import cn.iocoder.yudao.framework.common.validation.Mobile; |
| 5 | +import com.fasterxml.jackson.annotation.JsonIgnore; | ||
| 4 | import io.swagger.v3.oas.annotations.media.Schema; | 6 | import io.swagger.v3.oas.annotations.media.Schema; |
| 5 | import lombok.Data; | 7 | import lombok.Data; |
| 8 | +import org.hibernate.validator.constraints.Length; | ||
| 6 | 9 | ||
| 7 | -import javax.validation.constraints.Email; | ||
| 8 | -import javax.validation.constraints.NotBlank; | ||
| 9 | -import javax.validation.constraints.Pattern; | ||
| 10 | -import javax.validation.constraints.Size; | 10 | +import javax.validation.constraints.*; |
| 11 | import java.util.Set; | 11 | import java.util.Set; |
| 12 | 12 | ||
| 13 | -/** | ||
| 14 | - * 用户 Base VO,提供给添加、修改、详细的子 VO 使用 | ||
| 15 | - * 如果子 VO 存在差异的字段,请不要添加到这里,影响 Swagger 文档生成 | ||
| 16 | - */ | 13 | +@Schema(description = "管理后台 - 用户创建/修改 Request VO") |
| 17 | @Data | 14 | @Data |
| 18 | -public class UserBaseVO { | 15 | +public class UserSaveReqVO { |
| 16 | + | ||
| 17 | + @Schema(description = "用户编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "1024") | ||
| 18 | + @NotNull(message = "用户编号不能为空") | ||
| 19 | + private Long id; | ||
| 19 | 20 | ||
| 20 | @Schema(description = "用户账号", requiredMode = Schema.RequiredMode.REQUIRED, example = "yudao") | 21 | @Schema(description = "用户账号", requiredMode = Schema.RequiredMode.REQUIRED, example = "yudao") |
| 21 | @NotBlank(message = "用户账号不能为空") | 22 | @NotBlank(message = "用户账号不能为空") |
| @@ -51,4 +52,17 @@ public class UserBaseVO { | @@ -51,4 +52,17 @@ public class UserBaseVO { | ||
| 51 | @Schema(description = "用户头像", example = "https://www.iocoder.cn/xxx.png") | 52 | @Schema(description = "用户头像", example = "https://www.iocoder.cn/xxx.png") |
| 52 | private String avatar; | 53 | private String avatar; |
| 53 | 54 | ||
| 55 | + // ========== 仅【创建】时,需要传递的字段 ========== | ||
| 56 | + | ||
| 57 | + @Schema(description = "密码", requiredMode = Schema.RequiredMode.REQUIRED, example = "123456") | ||
| 58 | + @Length(min = 4, max = 16, message = "密码长度为 4-16 位") | ||
| 59 | + private String password; | ||
| 60 | + | ||
| 61 | + @AssertTrue(message = "密码不能为空") | ||
| 62 | + @JsonIgnore | ||
| 63 | + public boolean isPasswordValid() { | ||
| 64 | + return id != null // 修改时,不需要传递 | ||
| 65 | + || (ObjectUtil.isAllNotEmpty(password)); // 新增时,必须都传递 password | ||
| 66 | + } | ||
| 67 | + | ||
| 54 | } | 68 | } |
yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/user/vo/user/UserSimpleRespVO.java
| @@ -17,4 +17,9 @@ public class UserSimpleRespVO { | @@ -17,4 +17,9 @@ public class UserSimpleRespVO { | ||
| 17 | @Schema(description = "用户昵称", requiredMode = Schema.RequiredMode.REQUIRED, example = "芋道") | 17 | @Schema(description = "用户昵称", requiredMode = Schema.RequiredMode.REQUIRED, example = "芋道") |
| 18 | private String nickname; | 18 | private String nickname; |
| 19 | 19 | ||
| 20 | + @Schema(description = "部门ID", example = "我是一个用户") | ||
| 21 | + private Long deptId; | ||
| 22 | + @Schema(description = "部门名称", example = "IT 部") | ||
| 23 | + private String deptName; | ||
| 24 | + | ||
| 20 | } | 25 | } |
yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/user/vo/user/UserUpdateReqVO.java deleted
| 1 | -package cn.iocoder.yudao.module.system.controller.admin.user.vo.user; | ||
| 2 | - | ||
| 3 | -import io.swagger.v3.oas.annotations.media.Schema; | ||
| 4 | -import lombok.Data; | ||
| 5 | -import lombok.EqualsAndHashCode; | ||
| 6 | - | ||
| 7 | -import javax.validation.constraints.NotNull; | ||
| 8 | - | ||
| 9 | -@Schema(description = "管理后台 - 用户更新 Request VO") | ||
| 10 | -@Data | ||
| 11 | -@EqualsAndHashCode(callSuper = true) | ||
| 12 | -public class UserUpdateReqVO extends UserBaseVO { | ||
| 13 | - | ||
| 14 | - @Schema(description = "用户编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "1024") | ||
| 15 | - @NotNull(message = "用户编号不能为空") | ||
| 16 | - private Long id; | ||
| 17 | - | ||
| 18 | -} |
yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/convert/tenant/TenantConvert.java
| 1 | package cn.iocoder.yudao.module.system.convert.tenant; | 1 | package cn.iocoder.yudao.module.system.convert.tenant; |
| 2 | 2 | ||
| 3 | import cn.iocoder.yudao.module.system.controller.admin.tenant.vo.tenant.TenantSaveReqVO; | 3 | import cn.iocoder.yudao.module.system.controller.admin.tenant.vo.tenant.TenantSaveReqVO; |
| 4 | -import cn.iocoder.yudao.module.system.controller.admin.user.vo.user.UserCreateReqVO; | 4 | +import cn.iocoder.yudao.module.system.controller.admin.user.vo.user.UserSaveReqVO; |
| 5 | import org.mapstruct.Mapper; | 5 | import org.mapstruct.Mapper; |
| 6 | import org.mapstruct.factory.Mappers; | 6 | import org.mapstruct.factory.Mappers; |
| 7 | 7 | ||
| @@ -15,8 +15,8 @@ public interface TenantConvert { | @@ -15,8 +15,8 @@ public interface TenantConvert { | ||
| 15 | 15 | ||
| 16 | TenantConvert INSTANCE = Mappers.getMapper(TenantConvert.class); | 16 | TenantConvert INSTANCE = Mappers.getMapper(TenantConvert.class); |
| 17 | 17 | ||
| 18 | - default UserCreateReqVO convert02(TenantSaveReqVO bean) { | ||
| 19 | - UserCreateReqVO reqVO = new UserCreateReqVO(); | 18 | + default UserSaveReqVO convert02(TenantSaveReqVO bean) { |
| 19 | + UserSaveReqVO reqVO = new UserSaveReqVO(); | ||
| 20 | reqVO.setUsername(bean.getUsername()); | 20 | reqVO.setUsername(bean.getUsername()); |
| 21 | reqVO.setPassword(bean.getPassword()); | 21 | reqVO.setPassword(bean.getPassword()); |
| 22 | reqVO.setNickname(bean.getContactName()).setMobile(bean.getContactMobile()); | 22 | reqVO.setNickname(bean.getContactName()).setMobile(bean.getContactMobile()); |
yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/convert/user/UserConvert.java
| 1 | package cn.iocoder.yudao.module.system.convert.user; | 1 | package cn.iocoder.yudao.module.system.convert.user; |
| 2 | 2 | ||
| 3 | -import cn.iocoder.yudao.module.system.api.user.dto.AdminUserRespDTO; | 3 | +import cn.iocoder.yudao.framework.common.util.collection.CollectionUtils; |
| 4 | +import cn.iocoder.yudao.framework.common.util.collection.MapUtils; | ||
| 5 | +import cn.iocoder.yudao.framework.common.util.object.BeanUtils; | ||
| 6 | +import cn.iocoder.yudao.module.system.controller.admin.dept.vo.dept.DeptSimpleRespVO; | ||
| 7 | +import cn.iocoder.yudao.module.system.controller.admin.dept.vo.post.PostSimpleRespVO; | ||
| 8 | +import cn.iocoder.yudao.module.system.controller.admin.permission.vo.role.RoleSimpleRespVO; | ||
| 4 | import cn.iocoder.yudao.module.system.controller.admin.user.vo.profile.UserProfileRespVO; | 9 | import cn.iocoder.yudao.module.system.controller.admin.user.vo.profile.UserProfileRespVO; |
| 5 | -import cn.iocoder.yudao.module.system.controller.admin.user.vo.profile.UserProfileUpdatePasswordReqVO; | ||
| 6 | -import cn.iocoder.yudao.module.system.controller.admin.user.vo.profile.UserProfileUpdateReqVO; | ||
| 7 | -import cn.iocoder.yudao.module.system.controller.admin.user.vo.user.*; | 10 | +import cn.iocoder.yudao.module.system.controller.admin.user.vo.user.UserRespVO; |
| 11 | +import cn.iocoder.yudao.module.system.controller.admin.user.vo.user.UserSimpleRespVO; | ||
| 8 | import cn.iocoder.yudao.module.system.dal.dataobject.dept.DeptDO; | 12 | import cn.iocoder.yudao.module.system.dal.dataobject.dept.DeptDO; |
| 9 | import cn.iocoder.yudao.module.system.dal.dataobject.dept.PostDO; | 13 | import cn.iocoder.yudao.module.system.dal.dataobject.dept.PostDO; |
| 10 | import cn.iocoder.yudao.module.system.dal.dataobject.permission.RoleDO; | 14 | import cn.iocoder.yudao.module.system.dal.dataobject.permission.RoleDO; |
| @@ -14,42 +18,41 @@ import org.mapstruct.Mapper; | @@ -14,42 +18,41 @@ import org.mapstruct.Mapper; | ||
| 14 | import org.mapstruct.factory.Mappers; | 18 | import org.mapstruct.factory.Mappers; |
| 15 | 19 | ||
| 16 | import java.util.List; | 20 | import java.util.List; |
| 21 | +import java.util.Map; | ||
| 17 | 22 | ||
| 18 | @Mapper | 23 | @Mapper |
| 19 | public interface UserConvert { | 24 | public interface UserConvert { |
| 20 | 25 | ||
| 21 | UserConvert INSTANCE = Mappers.getMapper(UserConvert.class); | 26 | UserConvert INSTANCE = Mappers.getMapper(UserConvert.class); |
| 22 | 27 | ||
| 23 | - UserPageItemRespVO convert(AdminUserDO bean); | ||
| 24 | - | ||
| 25 | - UserPageItemRespVO.Dept convert(DeptDO bean); | ||
| 26 | - | ||
| 27 | - AdminUserDO convert(UserCreateReqVO bean); | ||
| 28 | - | ||
| 29 | - AdminUserDO convert(UserUpdateReqVO bean); | ||
| 30 | - | ||
| 31 | - UserExcelVO convert02(AdminUserDO bean); | ||
| 32 | - | ||
| 33 | - AdminUserDO convert(UserImportExcelVO bean); | ||
| 34 | - | ||
| 35 | - UserProfileRespVO convert03(AdminUserDO bean); | ||
| 36 | - | ||
| 37 | - List<UserProfileRespVO.Role> convertList(List<RoleDO> list); | ||
| 38 | - | ||
| 39 | - UserProfileRespVO.Dept convert02(DeptDO bean); | ||
| 40 | - | ||
| 41 | - AdminUserDO convert(UserProfileUpdateReqVO bean); | ||
| 42 | - | ||
| 43 | - AdminUserDO convert(UserProfileUpdatePasswordReqVO bean); | ||
| 44 | - | ||
| 45 | - List<UserProfileRespVO.Post> convertList02(List<PostDO> list); | ||
| 46 | - | ||
| 47 | - List<UserProfileRespVO.SocialUser> convertList03(List<SocialUserDO> list); | ||
| 48 | - | ||
| 49 | - List<UserSimpleRespVO> convertList04(List<AdminUserDO> list); | ||
| 50 | - | ||
| 51 | - AdminUserRespDTO convert4(AdminUserDO bean); | ||
| 52 | - | ||
| 53 | - List<AdminUserRespDTO> convertList4(List<AdminUserDO> users); | 28 | + default List<UserRespVO> convertList(List<AdminUserDO> list, Map<Long, DeptDO> deptMap) { |
| 29 | + return CollectionUtils.convertList(list, user -> convert(user, deptMap.get(user.getDeptId()))); | ||
| 30 | + } | ||
| 31 | + | ||
| 32 | + default UserRespVO convert(AdminUserDO user, DeptDO dept) { | ||
| 33 | + UserRespVO userVO = BeanUtils.toBean(user, UserRespVO.class); | ||
| 34 | + if (dept != null) { | ||
| 35 | + userVO.setDeptName(dept.getName()); | ||
| 36 | + } | ||
| 37 | + return userVO; | ||
| 38 | + } | ||
| 39 | + | ||
| 40 | + default List<UserSimpleRespVO> convertSimpleList(List<AdminUserDO> list, Map<Long, DeptDO> deptMap) { | ||
| 41 | + return CollectionUtils.convertList(list, user -> { | ||
| 42 | + UserSimpleRespVO userVO = BeanUtils.toBean(user, UserSimpleRespVO.class); | ||
| 43 | + MapUtils.findAndThen(deptMap, user.getDeptId(), dept -> userVO.setDeptName(dept.getName())); | ||
| 44 | + return userVO; | ||
| 45 | + }); | ||
| 46 | + } | ||
| 47 | + | ||
| 48 | + default UserProfileRespVO convert(AdminUserDO user, List<RoleDO> userRoles, | ||
| 49 | + DeptDO dept, List<PostDO> posts, List<SocialUserDO> socialUsers) { | ||
| 50 | + UserProfileRespVO userVO = BeanUtils.toBean(user, UserProfileRespVO.class); | ||
| 51 | + userVO.setRoles(BeanUtils.toBean(userRoles, RoleSimpleRespVO.class)); | ||
| 52 | + userVO.setDept(BeanUtils.toBean(dept, DeptSimpleRespVO.class)); | ||
| 53 | + userVO.setPosts(BeanUtils.toBean(posts, PostSimpleRespVO.class)); | ||
| 54 | + userVO.setSocialUsers(BeanUtils.toBean(socialUsers, UserProfileRespVO.SocialUser.class)); | ||
| 55 | + return userVO; | ||
| 56 | + } | ||
| 54 | 57 | ||
| 55 | } | 58 | } |
yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/user/AdminUserMapper.java
| @@ -3,7 +3,6 @@ package cn.iocoder.yudao.module.system.dal.mysql.user; | @@ -3,7 +3,6 @@ package cn.iocoder.yudao.module.system.dal.mysql.user; | ||
| 3 | import cn.iocoder.yudao.framework.common.pojo.PageResult; | 3 | import cn.iocoder.yudao.framework.common.pojo.PageResult; |
| 4 | import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX; | 4 | import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX; |
| 5 | import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX; | 5 | import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX; |
| 6 | -import cn.iocoder.yudao.module.system.controller.admin.user.vo.user.UserExportReqVO; | ||
| 7 | import cn.iocoder.yudao.module.system.controller.admin.user.vo.user.UserPageReqVO; | 6 | import cn.iocoder.yudao.module.system.controller.admin.user.vo.user.UserPageReqVO; |
| 8 | import cn.iocoder.yudao.module.system.dal.dataobject.user.AdminUserDO; | 7 | import cn.iocoder.yudao.module.system.dal.dataobject.user.AdminUserDO; |
| 9 | import org.apache.ibatis.annotations.Mapper; | 8 | import org.apache.ibatis.annotations.Mapper; |
| @@ -36,15 +35,6 @@ public interface AdminUserMapper extends BaseMapperX<AdminUserDO> { | @@ -36,15 +35,6 @@ public interface AdminUserMapper extends BaseMapperX<AdminUserDO> { | ||
| 36 | .orderByDesc(AdminUserDO::getId)); | 35 | .orderByDesc(AdminUserDO::getId)); |
| 37 | } | 36 | } |
| 38 | 37 | ||
| 39 | - default List<AdminUserDO> selectList(UserExportReqVO reqVO, Collection<Long> deptIds) { | ||
| 40 | - return selectList(new LambdaQueryWrapperX<AdminUserDO>() | ||
| 41 | - .likeIfPresent(AdminUserDO::getUsername, reqVO.getUsername()) | ||
| 42 | - .likeIfPresent(AdminUserDO::getMobile, reqVO.getMobile()) | ||
| 43 | - .eqIfPresent(AdminUserDO::getStatus, reqVO.getStatus()) | ||
| 44 | - .betweenIfPresent(AdminUserDO::getCreateTime, reqVO.getCreateTime()) | ||
| 45 | - .inIfPresent(AdminUserDO::getDeptId, deptIds)); | ||
| 46 | - } | ||
| 47 | - | ||
| 48 | default List<AdminUserDO> selectListByNickname(String nickname) { | 38 | default List<AdminUserDO> selectListByNickname(String nickname) { |
| 49 | return selectList(new LambdaQueryWrapperX<AdminUserDO>().like(AdminUserDO::getNickname, nickname)); | 39 | return selectList(new LambdaQueryWrapperX<AdminUserDO>().like(AdminUserDO::getNickname, nickname)); |
| 50 | } | 40 | } |
yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/user/AdminUserService.java
| @@ -22,17 +22,17 @@ public interface AdminUserService { | @@ -22,17 +22,17 @@ public interface AdminUserService { | ||
| 22 | /** | 22 | /** |
| 23 | * 创建用户 | 23 | * 创建用户 |
| 24 | * | 24 | * |
| 25 | - * @param reqVO 用户信息 | 25 | + * @param createReqVO 用户信息 |
| 26 | * @return 用户编号 | 26 | * @return 用户编号 |
| 27 | */ | 27 | */ |
| 28 | - Long createUser(@Valid UserCreateReqVO reqVO); | 28 | + Long createUser(@Valid UserSaveReqVO createReqVO); |
| 29 | 29 | ||
| 30 | /** | 30 | /** |
| 31 | * 修改用户 | 31 | * 修改用户 |
| 32 | * | 32 | * |
| 33 | - * @param reqVO 用户信息 | 33 | + * @param updateReqVO 用户信息 |
| 34 | */ | 34 | */ |
| 35 | - void updateUser(@Valid UserUpdateReqVO reqVO); | 35 | + void updateUser(@Valid UserSaveReqVO updateReqVO); |
| 36 | 36 | ||
| 37 | /** | 37 | /** |
| 38 | * 更新用户的最后登陆信息 | 38 | * 更新用户的最后登陆信息 |
| @@ -168,14 +168,6 @@ public interface AdminUserService { | @@ -168,14 +168,6 @@ public interface AdminUserService { | ||
| 168 | } | 168 | } |
| 169 | 169 | ||
| 170 | /** | 170 | /** |
| 171 | - * 获得用户列表 | ||
| 172 | - * | ||
| 173 | - * @param reqVO 列表请求 | ||
| 174 | - * @return 用户列表 | ||
| 175 | - */ | ||
| 176 | - List<AdminUserDO> getUserList(UserExportReqVO reqVO); | ||
| 177 | - | ||
| 178 | - /** | ||
| 179 | * 获得用户列表,基于昵称模糊匹配 | 171 | * 获得用户列表,基于昵称模糊匹配 |
| 180 | * | 172 | * |
| 181 | * @param nickname 昵称 | 173 | * @param nickname 昵称 |
| @@ -209,10 +201,4 @@ public interface AdminUserService { | @@ -209,10 +201,4 @@ public interface AdminUserService { | ||
| 209 | */ | 201 | */ |
| 210 | boolean isPasswordMatch(String rawPassword, String encodedPassword); | 202 | boolean isPasswordMatch(String rawPassword, String encodedPassword); |
| 211 | 203 | ||
| 212 | - /** | ||
| 213 | - * 获取所有用户列表 | ||
| 214 | - * | ||
| 215 | - * @return 用户列表 | ||
| 216 | - */ | ||
| 217 | - List<AdminUserDO> getUserList(); | ||
| 218 | } | 204 | } |
yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/user/AdminUserServiceImpl.java
| @@ -8,12 +8,15 @@ import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum; | @@ -8,12 +8,15 @@ import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum; | ||
| 8 | import cn.iocoder.yudao.framework.common.exception.ServiceException; | 8 | import cn.iocoder.yudao.framework.common.exception.ServiceException; |
| 9 | import cn.iocoder.yudao.framework.common.pojo.PageResult; | 9 | import cn.iocoder.yudao.framework.common.pojo.PageResult; |
| 10 | import cn.iocoder.yudao.framework.common.util.collection.CollectionUtils; | 10 | import cn.iocoder.yudao.framework.common.util.collection.CollectionUtils; |
| 11 | +import cn.iocoder.yudao.framework.common.util.object.BeanUtils; | ||
| 11 | import cn.iocoder.yudao.framework.datapermission.core.util.DataPermissionUtils; | 12 | import cn.iocoder.yudao.framework.datapermission.core.util.DataPermissionUtils; |
| 12 | import cn.iocoder.yudao.module.infra.api.file.FileApi; | 13 | import cn.iocoder.yudao.module.infra.api.file.FileApi; |
| 13 | import cn.iocoder.yudao.module.system.controller.admin.user.vo.profile.UserProfileUpdatePasswordReqVO; | 14 | import cn.iocoder.yudao.module.system.controller.admin.user.vo.profile.UserProfileUpdatePasswordReqVO; |
| 14 | import cn.iocoder.yudao.module.system.controller.admin.user.vo.profile.UserProfileUpdateReqVO; | 15 | import cn.iocoder.yudao.module.system.controller.admin.user.vo.profile.UserProfileUpdateReqVO; |
| 15 | -import cn.iocoder.yudao.module.system.controller.admin.user.vo.user.*; | ||
| 16 | -import cn.iocoder.yudao.module.system.convert.user.UserConvert; | 16 | +import cn.iocoder.yudao.module.system.controller.admin.user.vo.user.UserImportExcelVO; |
| 17 | +import cn.iocoder.yudao.module.system.controller.admin.user.vo.user.UserImportRespVO; | ||
| 18 | +import cn.iocoder.yudao.module.system.controller.admin.user.vo.user.UserPageReqVO; | ||
| 19 | +import cn.iocoder.yudao.module.system.controller.admin.user.vo.user.UserSaveReqVO; | ||
| 17 | import cn.iocoder.yudao.module.system.dal.dataobject.dept.DeptDO; | 20 | import cn.iocoder.yudao.module.system.dal.dataobject.dept.DeptDO; |
| 18 | import cn.iocoder.yudao.module.system.dal.dataobject.dept.UserPostDO; | 21 | import cn.iocoder.yudao.module.system.dal.dataobject.dept.UserPostDO; |
| 19 | import cn.iocoder.yudao.module.system.dal.dataobject.user.AdminUserDO; | 22 | import cn.iocoder.yudao.module.system.dal.dataobject.user.AdminUserDO; |
| @@ -76,7 +79,7 @@ public class AdminUserServiceImpl implements AdminUserService { | @@ -76,7 +79,7 @@ public class AdminUserServiceImpl implements AdminUserService { | ||
| 76 | 79 | ||
| 77 | @Override | 80 | @Override |
| 78 | @Transactional(rollbackFor = Exception.class) | 81 | @Transactional(rollbackFor = Exception.class) |
| 79 | - public Long createUser(UserCreateReqVO reqVO) { | 82 | + public Long createUser(UserSaveReqVO createReqVO) { |
| 80 | // 校验账户配合 | 83 | // 校验账户配合 |
| 81 | tenantService.handleTenantInfo(tenant -> { | 84 | tenantService.handleTenantInfo(tenant -> { |
| 82 | long count = userMapper.selectCount(); | 85 | long count = userMapper.selectCount(); |
| @@ -85,12 +88,12 @@ public class AdminUserServiceImpl implements AdminUserService { | @@ -85,12 +88,12 @@ public class AdminUserServiceImpl implements AdminUserService { | ||
| 85 | } | 88 | } |
| 86 | }); | 89 | }); |
| 87 | // 校验正确性 | 90 | // 校验正确性 |
| 88 | - validateUserForCreateOrUpdate(null, reqVO.getUsername(), reqVO.getMobile(), reqVO.getEmail(), | ||
| 89 | - reqVO.getDeptId(), reqVO.getPostIds()); | 91 | + validateUserForCreateOrUpdate(null, createReqVO.getUsername(), |
| 92 | + createReqVO.getMobile(), createReqVO.getEmail(), createReqVO.getDeptId(), createReqVO.getPostIds()); | ||
| 90 | // 插入用户 | 93 | // 插入用户 |
| 91 | - AdminUserDO user = UserConvert.INSTANCE.convert(reqVO); | 94 | + AdminUserDO user = BeanUtils.toBean(createReqVO, AdminUserDO.class); |
| 92 | user.setStatus(CommonStatusEnum.ENABLE.getStatus()); // 默认开启 | 95 | user.setStatus(CommonStatusEnum.ENABLE.getStatus()); // 默认开启 |
| 93 | - user.setPassword(encodePassword(reqVO.getPassword())); // 加密密码 | 96 | + user.setPassword(encodePassword(createReqVO.getPassword())); // 加密密码 |
| 94 | userMapper.insert(user); | 97 | userMapper.insert(user); |
| 95 | // 插入关联岗位 | 98 | // 插入关联岗位 |
| 96 | if (CollectionUtil.isNotEmpty(user.getPostIds())) { | 99 | if (CollectionUtil.isNotEmpty(user.getPostIds())) { |
| @@ -102,18 +105,19 @@ public class AdminUserServiceImpl implements AdminUserService { | @@ -102,18 +105,19 @@ public class AdminUserServiceImpl implements AdminUserService { | ||
| 102 | 105 | ||
| 103 | @Override | 106 | @Override |
| 104 | @Transactional(rollbackFor = Exception.class) | 107 | @Transactional(rollbackFor = Exception.class) |
| 105 | - public void updateUser(UserUpdateReqVO reqVO) { | 108 | + public void updateUser(UserSaveReqVO updateReqVO) { |
| 109 | + updateReqVO.setPassword(null); // 特殊:此处不更新密码 | ||
| 106 | // 校验正确性 | 110 | // 校验正确性 |
| 107 | - validateUserForCreateOrUpdate(reqVO.getId(), reqVO.getUsername(), reqVO.getMobile(), reqVO.getEmail(), | ||
| 108 | - reqVO.getDeptId(), reqVO.getPostIds()); | 111 | + validateUserForCreateOrUpdate(updateReqVO.getId(), updateReqVO.getUsername(), |
| 112 | + updateReqVO.getMobile(), updateReqVO.getEmail(), updateReqVO.getDeptId(), updateReqVO.getPostIds()); | ||
| 109 | // 更新用户 | 113 | // 更新用户 |
| 110 | - AdminUserDO updateObj = UserConvert.INSTANCE.convert(reqVO); | 114 | + AdminUserDO updateObj = BeanUtils.toBean(updateReqVO, AdminUserDO.class); |
| 111 | userMapper.updateById(updateObj); | 115 | userMapper.updateById(updateObj); |
| 112 | // 更新岗位 | 116 | // 更新岗位 |
| 113 | - updateUserPost(reqVO, updateObj); | 117 | + updateUserPost(updateReqVO, updateObj); |
| 114 | } | 118 | } |
| 115 | 119 | ||
| 116 | - private void updateUserPost(UserUpdateReqVO reqVO, AdminUserDO updateObj) { | 120 | + private void updateUserPost(UserSaveReqVO reqVO, AdminUserDO updateObj) { |
| 117 | Long userId = reqVO.getId(); | 121 | Long userId = reqVO.getId(); |
| 118 | Set<Long> dbPostIds = convertSet(userPostMapper.selectListByUserId(userId), UserPostDO::getPostId); | 122 | Set<Long> dbPostIds = convertSet(userPostMapper.selectListByUserId(userId), UserPostDO::getPostId); |
| 119 | // 计算新增和删除的岗位编号 | 123 | // 计算新增和删除的岗位编号 |
| @@ -142,7 +146,7 @@ public class AdminUserServiceImpl implements AdminUserService { | @@ -142,7 +146,7 @@ public class AdminUserServiceImpl implements AdminUserService { | ||
| 142 | validateEmailUnique(id, reqVO.getEmail()); | 146 | validateEmailUnique(id, reqVO.getEmail()); |
| 143 | validateMobileUnique(id, reqVO.getMobile()); | 147 | validateMobileUnique(id, reqVO.getMobile()); |
| 144 | // 执行更新 | 148 | // 执行更新 |
| 145 | - userMapper.updateById(UserConvert.INSTANCE.convert(reqVO).setId(id)); | 149 | + userMapper.updateById(BeanUtils.toBean(reqVO, AdminUserDO.class).setId(id)); |
| 146 | } | 150 | } |
| 147 | 151 | ||
| 148 | @Override | 152 | @Override |
| @@ -156,7 +160,7 @@ public class AdminUserServiceImpl implements AdminUserService { | @@ -156,7 +160,7 @@ public class AdminUserServiceImpl implements AdminUserService { | ||
| 156 | } | 160 | } |
| 157 | 161 | ||
| 158 | @Override | 162 | @Override |
| 159 | - public String updateUserAvatar(Long id, InputStream avatarFile) throws Exception { | 163 | + public String updateUserAvatar(Long id, InputStream avatarFile) { |
| 160 | validateUserExists(id); | 164 | validateUserExists(id); |
| 161 | // 存储文件 | 165 | // 存储文件 |
| 162 | String avatar = fileApi.createFile(IoUtil.readBytes(avatarFile)); | 166 | String avatar = fileApi.createFile(IoUtil.readBytes(avatarFile)); |
| @@ -272,11 +276,6 @@ public class AdminUserServiceImpl implements AdminUserService { | @@ -272,11 +276,6 @@ public class AdminUserServiceImpl implements AdminUserService { | ||
| 272 | } | 276 | } |
| 273 | 277 | ||
| 274 | @Override | 278 | @Override |
| 275 | - public List<AdminUserDO> getUserList(UserExportReqVO reqVO) { | ||
| 276 | - return userMapper.selectList(reqVO, getDeptCondition(reqVO.getDeptId())); | ||
| 277 | - } | ||
| 278 | - | ||
| 279 | - @Override | ||
| 280 | public List<AdminUserDO> getUserListByNickname(String nickname) { | 279 | public List<AdminUserDO> getUserListByNickname(String nickname) { |
| 281 | return userMapper.selectListByNickname(nickname); | 280 | return userMapper.selectListByNickname(nickname); |
| 282 | } | 281 | } |
| @@ -415,7 +414,7 @@ public class AdminUserServiceImpl implements AdminUserService { | @@ -415,7 +414,7 @@ public class AdminUserServiceImpl implements AdminUserService { | ||
| 415 | // 判断如果不存在,在进行插入 | 414 | // 判断如果不存在,在进行插入 |
| 416 | AdminUserDO existUser = userMapper.selectByUsername(importUser.getUsername()); | 415 | AdminUserDO existUser = userMapper.selectByUsername(importUser.getUsername()); |
| 417 | if (existUser == null) { | 416 | if (existUser == null) { |
| 418 | - userMapper.insert(UserConvert.INSTANCE.convert(importUser) | 417 | + userMapper.insert(BeanUtils.toBean(importUser, AdminUserDO.class) |
| 419 | .setPassword(encodePassword(userInitPassword)).setPostIds(new HashSet<>())); // 设置默认密码及空岗位编号数组 | 418 | .setPassword(encodePassword(userInitPassword)).setPostIds(new HashSet<>())); // 设置默认密码及空岗位编号数组 |
| 420 | respVO.getCreateUsernames().add(importUser.getUsername()); | 419 | respVO.getCreateUsernames().add(importUser.getUsername()); |
| 421 | return; | 420 | return; |
| @@ -425,7 +424,7 @@ public class AdminUserServiceImpl implements AdminUserService { | @@ -425,7 +424,7 @@ public class AdminUserServiceImpl implements AdminUserService { | ||
| 425 | respVO.getFailureUsernames().put(importUser.getUsername(), USER_USERNAME_EXISTS.getMsg()); | 424 | respVO.getFailureUsernames().put(importUser.getUsername(), USER_USERNAME_EXISTS.getMsg()); |
| 426 | return; | 425 | return; |
| 427 | } | 426 | } |
| 428 | - AdminUserDO updateUser = UserConvert.INSTANCE.convert(importUser); | 427 | + AdminUserDO updateUser = BeanUtils.toBean(importUser, AdminUserDO.class); |
| 429 | updateUser.setId(existUser.getId()); | 428 | updateUser.setId(existUser.getId()); |
| 430 | userMapper.updateById(updateUser); | 429 | userMapper.updateById(updateUser); |
| 431 | respVO.getUpdateUsernames().add(importUser.getUsername()); | 430 | respVO.getUpdateUsernames().add(importUser.getUsername()); |
| @@ -444,16 +443,6 @@ public class AdminUserServiceImpl implements AdminUserService { | @@ -444,16 +443,6 @@ public class AdminUserServiceImpl implements AdminUserService { | ||
| 444 | } | 443 | } |
| 445 | 444 | ||
| 446 | /** | 445 | /** |
| 447 | - * 获取所有用户列表 | ||
| 448 | - * | ||
| 449 | - * @return 用户列表 | ||
| 450 | - */ | ||
| 451 | - @Override | ||
| 452 | - public List<AdminUserDO> getUserList() { | ||
| 453 | - return userMapper.selectList(); | ||
| 454 | - } | ||
| 455 | - | ||
| 456 | - /** | ||
| 457 | * 对密码进行加密 | 446 | * 对密码进行加密 |
| 458 | * | 447 | * |
| 459 | * @param password 密码 | 448 | * @param password 密码 |
yudao-module-system/yudao-module-system-biz/src/test/java/cn/iocoder/yudao/module/system/service/user/AdminUserServiceImplTest.java
| @@ -80,11 +80,11 @@ public class AdminUserServiceImplTest extends BaseDbUnitTest { | @@ -80,11 +80,11 @@ public class AdminUserServiceImplTest extends BaseDbUnitTest { | ||
| 80 | @Test | 80 | @Test |
| 81 | public void testCreatUser_success() { | 81 | public void testCreatUser_success() { |
| 82 | // 准备参数 | 82 | // 准备参数 |
| 83 | - UserCreateReqVO reqVO = randomPojo(UserCreateReqVO.class, o -> { | 83 | + UserSaveReqVO reqVO = randomPojo(UserSaveReqVO.class, o -> { |
| 84 | o.setSex(RandomUtil.randomEle(SexEnum.values()).getSex()); | 84 | o.setSex(RandomUtil.randomEle(SexEnum.values()).getSex()); |
| 85 | o.setMobile(randomString()); | 85 | o.setMobile(randomString()); |
| 86 | o.setPostIds(asSet(1L, 2L)); | 86 | o.setPostIds(asSet(1L, 2L)); |
| 87 | - }); | 87 | + }).setId(null); // 避免 id 被赋值 |
| 88 | // mock 账户额度充足 | 88 | // mock 账户额度充足 |
| 89 | TenantDO tenant = randomPojo(TenantDO.class, o -> o.setAccountCount(1)); | 89 | TenantDO tenant = randomPojo(TenantDO.class, o -> o.setAccountCount(1)); |
| 90 | doNothing().when(tenantService).handleTenantInfo(argThat(handler -> { | 90 | doNothing().when(tenantService).handleTenantInfo(argThat(handler -> { |
| @@ -111,7 +111,7 @@ public class AdminUserServiceImplTest extends BaseDbUnitTest { | @@ -111,7 +111,7 @@ public class AdminUserServiceImplTest extends BaseDbUnitTest { | ||
| 111 | Long userId = userService.createUser(reqVO); | 111 | Long userId = userService.createUser(reqVO); |
| 112 | // 断言 | 112 | // 断言 |
| 113 | AdminUserDO user = userMapper.selectById(userId); | 113 | AdminUserDO user = userMapper.selectById(userId); |
| 114 | - assertPojoEquals(reqVO, user, "password"); | 114 | + assertPojoEquals(reqVO, user, "password", "id"); |
| 115 | assertEquals("yudaoyuanma", user.getPassword()); | 115 | assertEquals("yudaoyuanma", user.getPassword()); |
| 116 | assertEquals(CommonStatusEnum.ENABLE.getStatus(), user.getStatus()); | 116 | assertEquals(CommonStatusEnum.ENABLE.getStatus(), user.getStatus()); |
| 117 | // 断言关联岗位 | 117 | // 断言关联岗位 |
| @@ -123,7 +123,7 @@ public class AdminUserServiceImplTest extends BaseDbUnitTest { | @@ -123,7 +123,7 @@ public class AdminUserServiceImplTest extends BaseDbUnitTest { | ||
| 123 | @Test | 123 | @Test |
| 124 | public void testCreatUser_max() { | 124 | public void testCreatUser_max() { |
| 125 | // 准备参数 | 125 | // 准备参数 |
| 126 | - UserCreateReqVO reqVO = randomPojo(UserCreateReqVO.class); | 126 | + UserSaveReqVO reqVO = randomPojo(UserSaveReqVO.class); |
| 127 | // mock 账户额度不足 | 127 | // mock 账户额度不足 |
| 128 | TenantDO tenant = randomPojo(TenantDO.class, o -> o.setAccountCount(-1)); | 128 | TenantDO tenant = randomPojo(TenantDO.class, o -> o.setAccountCount(-1)); |
| 129 | doNothing().when(tenantService).handleTenantInfo(argThat(handler -> { | 129 | doNothing().when(tenantService).handleTenantInfo(argThat(handler -> { |
| @@ -143,7 +143,7 @@ public class AdminUserServiceImplTest extends BaseDbUnitTest { | @@ -143,7 +143,7 @@ public class AdminUserServiceImplTest extends BaseDbUnitTest { | ||
| 143 | userPostMapper.insert(new UserPostDO().setUserId(dbUser.getId()).setPostId(1L)); | 143 | userPostMapper.insert(new UserPostDO().setUserId(dbUser.getId()).setPostId(1L)); |
| 144 | userPostMapper.insert(new UserPostDO().setUserId(dbUser.getId()).setPostId(2L)); | 144 | userPostMapper.insert(new UserPostDO().setUserId(dbUser.getId()).setPostId(2L)); |
| 145 | // 准备参数 | 145 | // 准备参数 |
| 146 | - UserUpdateReqVO reqVO = randomPojo(UserUpdateReqVO.class, o -> { | 146 | + UserSaveReqVO reqVO = randomPojo(UserSaveReqVO.class, o -> { |
| 147 | o.setId(dbUser.getId()); | 147 | o.setId(dbUser.getId()); |
| 148 | o.setSex(RandomUtil.randomEle(SexEnum.values()).getSex()); | 148 | o.setSex(RandomUtil.randomEle(SexEnum.values()).getSex()); |
| 149 | o.setMobile(randomString()); | 149 | o.setMobile(randomString()); |
| @@ -167,7 +167,7 @@ public class AdminUserServiceImplTest extends BaseDbUnitTest { | @@ -167,7 +167,7 @@ public class AdminUserServiceImplTest extends BaseDbUnitTest { | ||
| 167 | userService.updateUser(reqVO); | 167 | userService.updateUser(reqVO); |
| 168 | // 断言 | 168 | // 断言 |
| 169 | AdminUserDO user = userMapper.selectById(reqVO.getId()); | 169 | AdminUserDO user = userMapper.selectById(reqVO.getId()); |
| 170 | - assertPojoEquals(reqVO, user); | 170 | + assertPojoEquals(reqVO, user, "password"); |
| 171 | // 断言关联岗位 | 171 | // 断言关联岗位 |
| 172 | List<UserPostDO> userPosts = userPostMapper.selectListByUserId(user.getId()); | 172 | List<UserPostDO> userPosts = userPostMapper.selectListByUserId(user.getId()); |
| 173 | assertEquals(2L, userPosts.get(0).getPostId()); | 173 | assertEquals(2L, userPosts.get(0).getPostId()); |
| @@ -355,28 +355,6 @@ public class AdminUserServiceImplTest extends BaseDbUnitTest { | @@ -355,28 +355,6 @@ public class AdminUserServiceImplTest extends BaseDbUnitTest { | ||
| 355 | assertPojoEquals(dbUser, pageResult.getList().get(0)); | 355 | assertPojoEquals(dbUser, pageResult.getList().get(0)); |
| 356 | } | 356 | } |
| 357 | 357 | ||
| 358 | - @Test | ||
| 359 | - public void testGetUserList_export() { | ||
| 360 | - // mock 数据 | ||
| 361 | - AdminUserDO dbUser = initGetUserPageData(); | ||
| 362 | - // 准备参数 | ||
| 363 | - UserExportReqVO reqVO = new UserExportReqVO(); | ||
| 364 | - reqVO.setUsername("tu"); | ||
| 365 | - reqVO.setMobile("1560"); | ||
| 366 | - reqVO.setStatus(CommonStatusEnum.ENABLE.getStatus()); | ||
| 367 | - reqVO.setCreateTime(buildBetweenTime(2020, 12, 1, 2020, 12, 24)); | ||
| 368 | - reqVO.setDeptId(1L); // 其中,1L 是 2L 的父部门 | ||
| 369 | - // mock 方法 | ||
| 370 | - List<DeptDO> deptList = newArrayList(randomPojo(DeptDO.class, o -> o.setId(2L))); | ||
| 371 | - when(deptService.getChildDeptList(eq(reqVO.getDeptId()))).thenReturn(deptList); | ||
| 372 | - | ||
| 373 | - // 调用 | ||
| 374 | - List<AdminUserDO> list = userService.getUserList(reqVO); | ||
| 375 | - // 断言 | ||
| 376 | - assertEquals(1, list.size()); | ||
| 377 | - assertPojoEquals(dbUser, list.get(0)); | ||
| 378 | - } | ||
| 379 | - | ||
| 380 | /** | 358 | /** |
| 381 | * 初始化 getUserPage 方法的测试数据 | 359 | * 初始化 getUserPage 方法的测试数据 |
| 382 | */ | 360 | */ |