Commit f5b7142ab6b8e82931dd937a067530bd6e3bd728
1 parent
cdaa0d91
完成用户列表的前后端对接
Showing
18 changed files
with
480 additions
and
319 deletions
ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysUserServiceImpl.java
| @@ -2,6 +2,7 @@ package com.ruoyi.system.service.impl; | @@ -2,6 +2,7 @@ package com.ruoyi.system.service.impl; | ||
| 2 | 2 | ||
| 3 | import java.util.ArrayList; | 3 | import java.util.ArrayList; |
| 4 | import java.util.List; | 4 | import java.util.List; |
| 5 | + | ||
| 5 | import org.slf4j.Logger; | 6 | import org.slf4j.Logger; |
| 6 | import org.slf4j.LoggerFactory; | 7 | import org.slf4j.LoggerFactory; |
| 7 | import org.springframework.beans.factory.annotation.Autowired; | 8 | import org.springframework.beans.factory.annotation.Autowired; |
| @@ -27,86 +28,38 @@ import com.ruoyi.system.service.ISysUserService; | @@ -27,86 +28,38 @@ import com.ruoyi.system.service.ISysUserService; | ||
| 27 | 28 | ||
| 28 | /** | 29 | /** |
| 29 | * 用户 业务层处理 | 30 | * 用户 业务层处理 |
| 30 | - * | 31 | + * |
| 31 | * @author ruoyi | 32 | * @author ruoyi |
| 32 | */ | 33 | */ |
| 33 | @Service | 34 | @Service |
| 34 | -public class SysUserServiceImpl implements ISysUserService | ||
| 35 | -{ | ||
| 36 | - private static final Logger log = LoggerFactory.getLogger(SysUserServiceImpl.class); | ||
| 37 | - | ||
| 38 | - @Autowired | ||
| 39 | - private SysUserMapper userMapper; | ||
| 40 | - | ||
| 41 | - @Autowired | ||
| 42 | - private SysRoleMapper roleMapper; | ||
| 43 | - | ||
| 44 | - @Autowired | ||
| 45 | - private SysPostMapper postMapper; | ||
| 46 | - | ||
| 47 | - @Autowired | ||
| 48 | - private SysUserRoleMapper userRoleMapper; | ||
| 49 | - | ||
| 50 | - @Autowired | ||
| 51 | - private SysUserPostMapper userPostMapper; | ||
| 52 | - | ||
| 53 | - @Autowired | ||
| 54 | - private ISysConfigService configService; | 35 | +public class SysUserServiceImpl implements ISysUserService { |
| 55 | 36 | ||
| 56 | /** | 37 | /** |
| 57 | * 根据条件分页查询用户列表 | 38 | * 根据条件分页查询用户列表 |
| 58 | - * | 39 | + * |
| 59 | * @param user 用户信息 | 40 | * @param user 用户信息 |
| 60 | * @return 用户信息集合信息 | 41 | * @return 用户信息集合信息 |
| 61 | */ | 42 | */ |
| 62 | @Override | 43 | @Override |
| 63 | @DataScope(deptAlias = "d", userAlias = "u") | 44 | @DataScope(deptAlias = "d", userAlias = "u") |
| 64 | - public List<SysUser> selectUserList(SysUser user) | ||
| 65 | - { | 45 | + public List<SysUser> selectUserList(SysUser user) { |
| 66 | return userMapper.selectUserList(user); | 46 | return userMapper.selectUserList(user); |
| 67 | } | 47 | } |
| 68 | 48 | ||
| 69 | /** | 49 | /** |
| 70 | - * 通过用户名查询用户 | ||
| 71 | - * | ||
| 72 | - * @param userName 用户名 | ||
| 73 | - * @return 用户对象信息 | ||
| 74 | - */ | ||
| 75 | - @Override | ||
| 76 | - public SysUser selectUserByUserName(String userName) | ||
| 77 | - { | ||
| 78 | - return userMapper.selectUserByUserName(userName); | ||
| 79 | - } | ||
| 80 | - | ||
| 81 | - /** | ||
| 82 | - * 通过用户ID查询用户 | ||
| 83 | - * | ||
| 84 | - * @param userId 用户ID | ||
| 85 | - * @return 用户对象信息 | ||
| 86 | - */ | ||
| 87 | - @Override | ||
| 88 | - public SysUser selectUserById(Long userId) | ||
| 89 | - { | ||
| 90 | - return userMapper.selectUserById(userId); | ||
| 91 | - } | ||
| 92 | - | ||
| 93 | - /** | ||
| 94 | * 查询用户所属角色组 | 50 | * 查询用户所属角色组 |
| 95 | - * | 51 | + * |
| 96 | * @param userName 用户名 | 52 | * @param userName 用户名 |
| 97 | * @return 结果 | 53 | * @return 结果 |
| 98 | */ | 54 | */ |
| 99 | @Override | 55 | @Override |
| 100 | - public String selectUserRoleGroup(String userName) | ||
| 101 | - { | 56 | + public String selectUserRoleGroup(String userName) { |
| 102 | List<SysRole> list = roleMapper.selectRolesByUserName(userName); | 57 | List<SysRole> list = roleMapper.selectRolesByUserName(userName); |
| 103 | StringBuffer idsStr = new StringBuffer(); | 58 | StringBuffer idsStr = new StringBuffer(); |
| 104 | - for (SysRole role : list) | ||
| 105 | - { | 59 | + for (SysRole role : list) { |
| 106 | idsStr.append(role.getRoleName()).append(","); | 60 | idsStr.append(role.getRoleName()).append(","); |
| 107 | } | 61 | } |
| 108 | - if (StringUtils.isNotEmpty(idsStr.toString())) | ||
| 109 | - { | 62 | + if (StringUtils.isNotEmpty(idsStr.toString())) { |
| 110 | return idsStr.substring(0, idsStr.length() - 1); | 63 | return idsStr.substring(0, idsStr.length() - 1); |
| 111 | } | 64 | } |
| 112 | return idsStr.toString(); | 65 | return idsStr.toString(); |
| @@ -114,74 +67,34 @@ public class SysUserServiceImpl implements ISysUserService | @@ -114,74 +67,34 @@ public class SysUserServiceImpl implements ISysUserService | ||
| 114 | 67 | ||
| 115 | /** | 68 | /** |
| 116 | * 查询用户所属岗位组 | 69 | * 查询用户所属岗位组 |
| 117 | - * | 70 | + * |
| 118 | * @param userName 用户名 | 71 | * @param userName 用户名 |
| 119 | * @return 结果 | 72 | * @return 结果 |
| 120 | */ | 73 | */ |
| 121 | @Override | 74 | @Override |
| 122 | - public String selectUserPostGroup(String userName) | ||
| 123 | - { | 75 | + public String selectUserPostGroup(String userName) { |
| 124 | List<SysPost> list = postMapper.selectPostsByUserName(userName); | 76 | List<SysPost> list = postMapper.selectPostsByUserName(userName); |
| 125 | StringBuffer idsStr = new StringBuffer(); | 77 | StringBuffer idsStr = new StringBuffer(); |
| 126 | - for (SysPost post : list) | ||
| 127 | - { | 78 | + for (SysPost post : list) { |
| 128 | idsStr.append(post.getPostName()).append(","); | 79 | idsStr.append(post.getPostName()).append(","); |
| 129 | } | 80 | } |
| 130 | - if (StringUtils.isNotEmpty(idsStr.toString())) | ||
| 131 | - { | 81 | + if (StringUtils.isNotEmpty(idsStr.toString())) { |
| 132 | return idsStr.substring(0, idsStr.length() - 1); | 82 | return idsStr.substring(0, idsStr.length() - 1); |
| 133 | } | 83 | } |
| 134 | return idsStr.toString(); | 84 | return idsStr.toString(); |
| 135 | } | 85 | } |
| 136 | 86 | ||
| 137 | /** | 87 | /** |
| 138 | - * 校验用户名称是否唯一 | ||
| 139 | - * | ||
| 140 | - * @param userName 用户名称 | ||
| 141 | - * @return 结果 | ||
| 142 | - */ | ||
| 143 | - @Override | ||
| 144 | - public String checkUserNameUnique(String userName) | ||
| 145 | - { | ||
| 146 | - int count = userMapper.checkUserNameUnique(userName); | ||
| 147 | - if (count > 0) | ||
| 148 | - { | ||
| 149 | - return UserConstants.NOT_UNIQUE; | ||
| 150 | - } | ||
| 151 | - return UserConstants.UNIQUE; | ||
| 152 | - } | ||
| 153 | - | ||
| 154 | - /** | ||
| 155 | - * 校验用户名称是否唯一 | ||
| 156 | - * | ||
| 157 | - * @param user 用户信息 | ||
| 158 | - * @return | ||
| 159 | - */ | ||
| 160 | - @Override | ||
| 161 | - public String checkPhoneUnique(SysUser user) | ||
| 162 | - { | ||
| 163 | - Long userId = StringUtils.isNull(user.getUserId()) ? -1L : user.getUserId(); | ||
| 164 | - SysUser info = userMapper.checkPhoneUnique(user.getPhonenumber()); | ||
| 165 | - if (StringUtils.isNotNull(info) && info.getUserId().longValue() != userId.longValue()) | ||
| 166 | - { | ||
| 167 | - return UserConstants.NOT_UNIQUE; | ||
| 168 | - } | ||
| 169 | - return UserConstants.UNIQUE; | ||
| 170 | - } | ||
| 171 | - | ||
| 172 | - /** | ||
| 173 | * 校验email是否唯一 | 88 | * 校验email是否唯一 |
| 174 | * | 89 | * |
| 175 | * @param user 用户信息 | 90 | * @param user 用户信息 |
| 176 | * @return | 91 | * @return |
| 177 | */ | 92 | */ |
| 178 | @Override | 93 | @Override |
| 179 | - public String checkEmailUnique(SysUser user) | ||
| 180 | - { | 94 | + public String checkEmailUnique(SysUser user) { |
| 181 | Long userId = StringUtils.isNull(user.getUserId()) ? -1L : user.getUserId(); | 95 | Long userId = StringUtils.isNull(user.getUserId()) ? -1L : user.getUserId(); |
| 182 | SysUser info = userMapper.checkEmailUnique(user.getEmail()); | 96 | SysUser info = userMapper.checkEmailUnique(user.getEmail()); |
| 183 | - if (StringUtils.isNotNull(info) && info.getUserId().longValue() != userId.longValue()) | ||
| 184 | - { | 97 | + if (StringUtils.isNotNull(info) && info.getUserId().longValue() != userId.longValue()) { |
| 185 | return UserConstants.NOT_UNIQUE; | 98 | return UserConstants.NOT_UNIQUE; |
| 186 | } | 99 | } |
| 187 | return UserConstants.UNIQUE; | 100 | return UserConstants.UNIQUE; |
| @@ -189,28 +102,25 @@ public class SysUserServiceImpl implements ISysUserService | @@ -189,28 +102,25 @@ public class SysUserServiceImpl implements ISysUserService | ||
| 189 | 102 | ||
| 190 | /** | 103 | /** |
| 191 | * 校验用户是否允许操作 | 104 | * 校验用户是否允许操作 |
| 192 | - * | 105 | + * |
| 193 | * @param user 用户信息 | 106 | * @param user 用户信息 |
| 194 | */ | 107 | */ |
| 195 | @Override | 108 | @Override |
| 196 | - public void checkUserAllowed(SysUser user) | ||
| 197 | - { | ||
| 198 | - if (StringUtils.isNotNull(user.getUserId()) && user.isAdmin()) | ||
| 199 | - { | 109 | + public void checkUserAllowed(SysUser user) { |
| 110 | + if (StringUtils.isNotNull(user.getUserId()) && user.isAdmin()) { | ||
| 200 | throw new CustomException("不允许操作超级管理员用户"); | 111 | throw new CustomException("不允许操作超级管理员用户"); |
| 201 | } | 112 | } |
| 202 | } | 113 | } |
| 203 | 114 | ||
| 204 | /** | 115 | /** |
| 205 | * 新增保存用户信息 | 116 | * 新增保存用户信息 |
| 206 | - * | 117 | + * |
| 207 | * @param user 用户信息 | 118 | * @param user 用户信息 |
| 208 | * @return 结果 | 119 | * @return 结果 |
| 209 | */ | 120 | */ |
| 210 | @Override | 121 | @Override |
| 211 | @Transactional | 122 | @Transactional |
| 212 | - public int insertUser(SysUser user) | ||
| 213 | - { | 123 | + public int insertUser(SysUser user) { |
| 214 | // 新增用户信息 | 124 | // 新增用户信息 |
| 215 | int rows = userMapper.insertUser(user); | 125 | int rows = userMapper.insertUser(user); |
| 216 | // 新增用户岗位关联 | 126 | // 新增用户岗位关联 |
| @@ -222,14 +132,13 @@ public class SysUserServiceImpl implements ISysUserService | @@ -222,14 +132,13 @@ public class SysUserServiceImpl implements ISysUserService | ||
| 222 | 132 | ||
| 223 | /** | 133 | /** |
| 224 | * 修改保存用户信息 | 134 | * 修改保存用户信息 |
| 225 | - * | 135 | + * |
| 226 | * @param user 用户信息 | 136 | * @param user 用户信息 |
| 227 | * @return 结果 | 137 | * @return 结果 |
| 228 | */ | 138 | */ |
| 229 | @Override | 139 | @Override |
| 230 | @Transactional | 140 | @Transactional |
| 231 | - public int updateUser(SysUser user) | ||
| 232 | - { | 141 | + public int updateUser(SysUser user) { |
| 233 | Long userId = user.getUserId(); | 142 | Long userId = user.getUserId(); |
| 234 | // 删除用户与角色关联 | 143 | // 删除用户与角色关联 |
| 235 | userRoleMapper.deleteUserRoleByUserId(userId); | 144 | userRoleMapper.deleteUserRoleByUserId(userId); |
| @@ -243,88 +152,68 @@ public class SysUserServiceImpl implements ISysUserService | @@ -243,88 +152,68 @@ public class SysUserServiceImpl implements ISysUserService | ||
| 243 | } | 152 | } |
| 244 | 153 | ||
| 245 | /** | 154 | /** |
| 246 | - * 修改用户状态 | ||
| 247 | - * | ||
| 248 | - * @param user 用户信息 | ||
| 249 | - * @return 结果 | ||
| 250 | - */ | ||
| 251 | - @Override | ||
| 252 | - public int updateUserStatus(SysUser user) | ||
| 253 | - { | ||
| 254 | - return userMapper.updateUser(user); | ||
| 255 | - } | ||
| 256 | - | ||
| 257 | - /** | ||
| 258 | * 修改用户基本信息 | 155 | * 修改用户基本信息 |
| 259 | - * | 156 | + * |
| 260 | * @param user 用户信息 | 157 | * @param user 用户信息 |
| 261 | * @return 结果 | 158 | * @return 结果 |
| 262 | */ | 159 | */ |
| 263 | @Override | 160 | @Override |
| 264 | - public int updateUserProfile(SysUser user) | ||
| 265 | - { | 161 | + public int updateUserProfile(SysUser user) { |
| 266 | return userMapper.updateUser(user); | 162 | return userMapper.updateUser(user); |
| 267 | } | 163 | } |
| 268 | 164 | ||
| 269 | /** | 165 | /** |
| 270 | * 修改用户头像 | 166 | * 修改用户头像 |
| 271 | - * | 167 | + * |
| 272 | * @param userName 用户名 | 168 | * @param userName 用户名 |
| 273 | - * @param avatar 头像地址 | 169 | + * @param avatar 头像地址 |
| 274 | * @return 结果 | 170 | * @return 结果 |
| 275 | */ | 171 | */ |
| 276 | @Override | 172 | @Override |
| 277 | - public boolean updateUserAvatar(String userName, String avatar) | ||
| 278 | - { | 173 | + public boolean updateUserAvatar(String userName, String avatar) { |
| 279 | return userMapper.updateUserAvatar(userName, avatar) > 0; | 174 | return userMapper.updateUserAvatar(userName, avatar) > 0; |
| 280 | } | 175 | } |
| 281 | 176 | ||
| 282 | /** | 177 | /** |
| 283 | * 重置用户密码 | 178 | * 重置用户密码 |
| 284 | - * | 179 | + * |
| 285 | * @param user 用户信息 | 180 | * @param user 用户信息 |
| 286 | * @return 结果 | 181 | * @return 结果 |
| 287 | */ | 182 | */ |
| 288 | @Override | 183 | @Override |
| 289 | - public int resetPwd(SysUser user) | ||
| 290 | - { | 184 | + public int resetPwd(SysUser user) { |
| 291 | return userMapper.updateUser(user); | 185 | return userMapper.updateUser(user); |
| 292 | } | 186 | } |
| 293 | 187 | ||
| 294 | /** | 188 | /** |
| 295 | * 重置用户密码 | 189 | * 重置用户密码 |
| 296 | - * | 190 | + * |
| 297 | * @param userName 用户名 | 191 | * @param userName 用户名 |
| 298 | * @param password 密码 | 192 | * @param password 密码 |
| 299 | * @return 结果 | 193 | * @return 结果 |
| 300 | */ | 194 | */ |
| 301 | @Override | 195 | @Override |
| 302 | - public int resetUserPwd(String userName, String password) | ||
| 303 | - { | 196 | + public int resetUserPwd(String userName, String password) { |
| 304 | return userMapper.resetUserPwd(userName, password); | 197 | return userMapper.resetUserPwd(userName, password); |
| 305 | } | 198 | } |
| 306 | 199 | ||
| 307 | /** | 200 | /** |
| 308 | * 新增用户角色信息 | 201 | * 新增用户角色信息 |
| 309 | - * | 202 | + * |
| 310 | * @param user 用户对象 | 203 | * @param user 用户对象 |
| 311 | */ | 204 | */ |
| 312 | - public void insertUserRole(SysUser user) | ||
| 313 | - { | 205 | + public void insertUserRole(SysUser user) { |
| 314 | Long[] roles = user.getRoleIds(); | 206 | Long[] roles = user.getRoleIds(); |
| 315 | - if (StringUtils.isNotNull(roles)) | ||
| 316 | - { | 207 | + if (StringUtils.isNotNull(roles)) { |
| 317 | // 新增用户与角色管理 | 208 | // 新增用户与角色管理 |
| 318 | List<SysUserRole> list = new ArrayList<SysUserRole>(); | 209 | List<SysUserRole> list = new ArrayList<SysUserRole>(); |
| 319 | - for (Long roleId : roles) | ||
| 320 | - { | 210 | + for (Long roleId : roles) { |
| 321 | SysUserRole ur = new SysUserRole(); | 211 | SysUserRole ur = new SysUserRole(); |
| 322 | ur.setUserId(user.getUserId()); | 212 | ur.setUserId(user.getUserId()); |
| 323 | ur.setRoleId(roleId); | 213 | ur.setRoleId(roleId); |
| 324 | list.add(ur); | 214 | list.add(ur); |
| 325 | } | 215 | } |
| 326 | - if (list.size() > 0) | ||
| 327 | - { | 216 | + if (list.size() > 0) { |
| 328 | userRoleMapper.batchUserRole(list); | 217 | userRoleMapper.batchUserRole(list); |
| 329 | } | 218 | } |
| 330 | } | 219 | } |
| @@ -332,25 +221,21 @@ public class SysUserServiceImpl implements ISysUserService | @@ -332,25 +221,21 @@ public class SysUserServiceImpl implements ISysUserService | ||
| 332 | 221 | ||
| 333 | /** | 222 | /** |
| 334 | * 新增用户岗位信息 | 223 | * 新增用户岗位信息 |
| 335 | - * | 224 | + * |
| 336 | * @param user 用户对象 | 225 | * @param user 用户对象 |
| 337 | */ | 226 | */ |
| 338 | - public void insertUserPost(SysUser user) | ||
| 339 | - { | 227 | + public void insertUserPost(SysUser user) { |
| 340 | Long[] posts = user.getPostIds(); | 228 | Long[] posts = user.getPostIds(); |
| 341 | - if (StringUtils.isNotNull(posts)) | ||
| 342 | - { | 229 | + if (StringUtils.isNotNull(posts)) { |
| 343 | // 新增用户与岗位管理 | 230 | // 新增用户与岗位管理 |
| 344 | List<SysUserPost> list = new ArrayList<SysUserPost>(); | 231 | List<SysUserPost> list = new ArrayList<SysUserPost>(); |
| 345 | - for (Long postId : posts) | ||
| 346 | - { | 232 | + for (Long postId : posts) { |
| 347 | SysUserPost up = new SysUserPost(); | 233 | SysUserPost up = new SysUserPost(); |
| 348 | up.setUserId(user.getUserId()); | 234 | up.setUserId(user.getUserId()); |
| 349 | up.setPostId(postId); | 235 | up.setPostId(postId); |
| 350 | list.add(up); | 236 | list.add(up); |
| 351 | } | 237 | } |
| 352 | - if (list.size() > 0) | ||
| 353 | - { | 238 | + if (list.size() > 0) { |
| 354 | userPostMapper.batchUserPost(list); | 239 | userPostMapper.batchUserPost(list); |
| 355 | } | 240 | } |
| 356 | } | 241 | } |
| @@ -358,14 +243,13 @@ public class SysUserServiceImpl implements ISysUserService | @@ -358,14 +243,13 @@ public class SysUserServiceImpl implements ISysUserService | ||
| 358 | 243 | ||
| 359 | /** | 244 | /** |
| 360 | * 通过用户ID删除用户 | 245 | * 通过用户ID删除用户 |
| 361 | - * | 246 | + * |
| 362 | * @param userId 用户ID | 247 | * @param userId 用户ID |
| 363 | * @return 结果 | 248 | * @return 结果 |
| 364 | */ | 249 | */ |
| 365 | @Override | 250 | @Override |
| 366 | @Transactional | 251 | @Transactional |
| 367 | - public int deleteUserById(Long userId) | ||
| 368 | - { | 252 | + public int deleteUserById(Long userId) { |
| 369 | // 删除用户与角色关联 | 253 | // 删除用户与角色关联 |
| 370 | userRoleMapper.deleteUserRoleByUserId(userId); | 254 | userRoleMapper.deleteUserRoleByUserId(userId); |
| 371 | // 删除用户与岗位表 | 255 | // 删除用户与岗位表 |
| @@ -375,16 +259,14 @@ public class SysUserServiceImpl implements ISysUserService | @@ -375,16 +259,14 @@ public class SysUserServiceImpl implements ISysUserService | ||
| 375 | 259 | ||
| 376 | /** | 260 | /** |
| 377 | * 批量删除用户信息 | 261 | * 批量删除用户信息 |
| 378 | - * | 262 | + * |
| 379 | * @param userIds 需要删除的用户ID | 263 | * @param userIds 需要删除的用户ID |
| 380 | * @return 结果 | 264 | * @return 结果 |
| 381 | */ | 265 | */ |
| 382 | @Override | 266 | @Override |
| 383 | @Transactional | 267 | @Transactional |
| 384 | - public int deleteUserByIds(Long[] userIds) | ||
| 385 | - { | ||
| 386 | - for (Long userId : userIds) | ||
| 387 | - { | 268 | + public int deleteUserByIds(Long[] userIds) { |
| 269 | + for (Long userId : userIds) { | ||
| 388 | checkUserAllowed(new SysUser(userId)); | 270 | checkUserAllowed(new SysUser(userId)); |
| 389 | } | 271 | } |
| 390 | // 删除用户与角色关联 | 272 | // 删除用户与角色关联 |
| @@ -396,17 +278,15 @@ public class SysUserServiceImpl implements ISysUserService | @@ -396,17 +278,15 @@ public class SysUserServiceImpl implements ISysUserService | ||
| 396 | 278 | ||
| 397 | /** | 279 | /** |
| 398 | * 导入用户数据 | 280 | * 导入用户数据 |
| 399 | - * | ||
| 400 | - * @param userList 用户数据列表 | 281 | + * |
| 282 | + * @param userList 用户数据列表 | ||
| 401 | * @param isUpdateSupport 是否更新支持,如果已存在,则进行更新数据 | 283 | * @param isUpdateSupport 是否更新支持,如果已存在,则进行更新数据 |
| 402 | - * @param operName 操作用户 | 284 | + * @param operName 操作用户 |
| 403 | * @return 结果 | 285 | * @return 结果 |
| 404 | */ | 286 | */ |
| 405 | @Override | 287 | @Override |
| 406 | - public String importUser(List<SysUser> userList, Boolean isUpdateSupport, String operName) | ||
| 407 | - { | ||
| 408 | - if (StringUtils.isNull(userList) || userList.size() == 0) | ||
| 409 | - { | 288 | + public String importUser(List<SysUser> userList, Boolean isUpdateSupport, String operName) { |
| 289 | + if (StringUtils.isNull(userList) || userList.size() == 0) { | ||
| 410 | throw new CustomException("导入用户数据不能为空!"); | 290 | throw new CustomException("导入用户数据不能为空!"); |
| 411 | } | 291 | } |
| 412 | int successNum = 0; | 292 | int successNum = 0; |
| @@ -414,48 +294,36 @@ public class SysUserServiceImpl implements ISysUserService | @@ -414,48 +294,36 @@ public class SysUserServiceImpl implements ISysUserService | ||
| 414 | StringBuilder successMsg = new StringBuilder(); | 294 | StringBuilder successMsg = new StringBuilder(); |
| 415 | StringBuilder failureMsg = new StringBuilder(); | 295 | StringBuilder failureMsg = new StringBuilder(); |
| 416 | String password = configService.selectConfigByKey("sys.user.initPassword"); | 296 | String password = configService.selectConfigByKey("sys.user.initPassword"); |
| 417 | - for (SysUser user : userList) | ||
| 418 | - { | ||
| 419 | - try | ||
| 420 | - { | 297 | + for (SysUser user : userList) { |
| 298 | + try { | ||
| 421 | // 验证是否存在这个用户 | 299 | // 验证是否存在这个用户 |
| 422 | SysUser u = userMapper.selectUserByUserName(user.getUserName()); | 300 | SysUser u = userMapper.selectUserByUserName(user.getUserName()); |
| 423 | - if (StringUtils.isNull(u)) | ||
| 424 | - { | 301 | + if (StringUtils.isNull(u)) { |
| 425 | user.setPassword(SecurityUtils.encryptPassword(password)); | 302 | user.setPassword(SecurityUtils.encryptPassword(password)); |
| 426 | user.setCreateBy(operName); | 303 | user.setCreateBy(operName); |
| 427 | this.insertUser(user); | 304 | this.insertUser(user); |
| 428 | successNum++; | 305 | successNum++; |
| 429 | successMsg.append("<br/>" + successNum + "、账号 " + user.getUserName() + " 导入成功"); | 306 | successMsg.append("<br/>" + successNum + "、账号 " + user.getUserName() + " 导入成功"); |
| 430 | - } | ||
| 431 | - else if (isUpdateSupport) | ||
| 432 | - { | 307 | + } else if (isUpdateSupport) { |
| 433 | user.setUpdateBy(operName); | 308 | user.setUpdateBy(operName); |
| 434 | this.updateUser(user); | 309 | this.updateUser(user); |
| 435 | successNum++; | 310 | successNum++; |
| 436 | successMsg.append("<br/>" + successNum + "、账号 " + user.getUserName() + " 更新成功"); | 311 | successMsg.append("<br/>" + successNum + "、账号 " + user.getUserName() + " 更新成功"); |
| 437 | - } | ||
| 438 | - else | ||
| 439 | - { | 312 | + } else { |
| 440 | failureNum++; | 313 | failureNum++; |
| 441 | failureMsg.append("<br/>" + failureNum + "、账号 " + user.getUserName() + " 已存在"); | 314 | failureMsg.append("<br/>" + failureNum + "、账号 " + user.getUserName() + " 已存在"); |
| 442 | } | 315 | } |
| 443 | - } | ||
| 444 | - catch (Exception e) | ||
| 445 | - { | 316 | + } catch (Exception e) { |
| 446 | failureNum++; | 317 | failureNum++; |
| 447 | String msg = "<br/>" + failureNum + "、账号 " + user.getUserName() + " 导入失败:"; | 318 | String msg = "<br/>" + failureNum + "、账号 " + user.getUserName() + " 导入失败:"; |
| 448 | failureMsg.append(msg + e.getMessage()); | 319 | failureMsg.append(msg + e.getMessage()); |
| 449 | log.error(msg, e); | 320 | log.error(msg, e); |
| 450 | } | 321 | } |
| 451 | } | 322 | } |
| 452 | - if (failureNum > 0) | ||
| 453 | - { | 323 | + if (failureNum > 0) { |
| 454 | failureMsg.insert(0, "很抱歉,导入失败!共 " + failureNum + " 条数据格式不正确,错误如下:"); | 324 | failureMsg.insert(0, "很抱歉,导入失败!共 " + failureNum + " 条数据格式不正确,错误如下:"); |
| 455 | throw new CustomException(failureMsg.toString()); | 325 | throw new CustomException(failureMsg.toString()); |
| 456 | - } | ||
| 457 | - else | ||
| 458 | - { | 326 | + } else { |
| 459 | successMsg.insert(0, "恭喜您,数据已全部导入成功!共 " + successNum + " 条,数据如下:"); | 327 | successMsg.insert(0, "恭喜您,数据已全部导入成功!共 " + successNum + " 条,数据如下:"); |
| 460 | } | 328 | } |
| 461 | return successMsg.toString(); | 329 | return successMsg.toString(); |
ruoyi-ui/src/api/system/user.js
| @@ -4,7 +4,7 @@ import { praseStrEmpty } from "@/utils/ruoyi"; | @@ -4,7 +4,7 @@ import { praseStrEmpty } from "@/utils/ruoyi"; | ||
| 4 | // 查询用户列表 | 4 | // 查询用户列表 |
| 5 | export function listUser(query) { | 5 | export function listUser(query) { |
| 6 | return request({ | 6 | return request({ |
| 7 | - url: '/system/user/list', | 7 | + url: '/system/user/page', |
| 8 | method: 'get', | 8 | method: 'get', |
| 9 | params: query | 9 | params: query |
| 10 | }) | 10 | }) |
| @@ -13,7 +13,7 @@ export function listUser(query) { | @@ -13,7 +13,7 @@ export function listUser(query) { | ||
| 13 | // 查询用户详细 | 13 | // 查询用户详细 |
| 14 | export function getUser(userId) { | 14 | export function getUser(userId) { |
| 15 | return request({ | 15 | return request({ |
| 16 | - url: '/system/user/' + praseStrEmpty(userId), | 16 | + url: '/system/user/get?id=' + praseStrEmpty(userId), |
| 17 | method: 'get' | 17 | method: 'get' |
| 18 | }) | 18 | }) |
| 19 | } | 19 | } |
| @@ -21,7 +21,7 @@ export function getUser(userId) { | @@ -21,7 +21,7 @@ export function getUser(userId) { | ||
| 21 | // 新增用户 | 21 | // 新增用户 |
| 22 | export function addUser(data) { | 22 | export function addUser(data) { |
| 23 | return request({ | 23 | return request({ |
| 24 | - url: '/system/user', | 24 | + url: '/system/user/create', |
| 25 | method: 'post', | 25 | method: 'post', |
| 26 | data: data | 26 | data: data |
| 27 | }) | 27 | }) |
| @@ -30,7 +30,7 @@ export function addUser(data) { | @@ -30,7 +30,7 @@ export function addUser(data) { | ||
| 30 | // 修改用户 | 30 | // 修改用户 |
| 31 | export function updateUser(data) { | 31 | export function updateUser(data) { |
| 32 | return request({ | 32 | return request({ |
| 33 | - url: '/system/user', | 33 | + url: '/system/user/update', |
| 34 | method: 'put', | 34 | method: 'put', |
| 35 | data: data | 35 | data: data |
| 36 | }) | 36 | }) |
| @@ -39,7 +39,7 @@ export function updateUser(data) { | @@ -39,7 +39,7 @@ export function updateUser(data) { | ||
| 39 | // 删除用户 | 39 | // 删除用户 |
| 40 | export function delUser(userId) { | 40 | export function delUser(userId) { |
| 41 | return request({ | 41 | return request({ |
| 42 | - url: '/system/user/' + userId, | 42 | + url: '/system/user/delete?id=' + userId, |
| 43 | method: 'delete' | 43 | method: 'delete' |
| 44 | }) | 44 | }) |
| 45 | } | 45 | } |
| @@ -73,7 +73,7 @@ export function changeUserStatus(userId, status) { | @@ -73,7 +73,7 @@ export function changeUserStatus(userId, status) { | ||
| 73 | status | 73 | status |
| 74 | } | 74 | } |
| 75 | return request({ | 75 | return request({ |
| 76 | - url: '/system/user/changeStatus', | 76 | + url: '/system/user/updateStatus', |
| 77 | method: 'put', | 77 | method: 'put', |
| 78 | data: data | 78 | data: data |
| 79 | }) | 79 | }) |
ruoyi-ui/src/views/system/user/index.vue
| @@ -28,9 +28,9 @@ | @@ -28,9 +28,9 @@ | ||
| 28 | <!--用户数据--> | 28 | <!--用户数据--> |
| 29 | <el-col :span="20" :xs="24"> | 29 | <el-col :span="20" :xs="24"> |
| 30 | <el-form :model="queryParams" ref="queryForm" :inline="true" v-show="showSearch" label-width="68px"> | 30 | <el-form :model="queryParams" ref="queryForm" :inline="true" v-show="showSearch" label-width="68px"> |
| 31 | - <el-form-item label="用户名称" prop="userName"> | 31 | + <el-form-item label="用户名称" prop="username"> |
| 32 | <el-input | 32 | <el-input |
| 33 | - v-model="queryParams.userName" | 33 | + v-model="queryParams.username" |
| 34 | placeholder="请输入用户名称" | 34 | placeholder="请输入用户名称" |
| 35 | clearable | 35 | clearable |
| 36 | size="small" | 36 | size="small" |
| @@ -38,9 +38,9 @@ | @@ -38,9 +38,9 @@ | ||
| 38 | @keyup.enter.native="handleQuery" | 38 | @keyup.enter.native="handleQuery" |
| 39 | /> | 39 | /> |
| 40 | </el-form-item> | 40 | </el-form-item> |
| 41 | - <el-form-item label="手机号码" prop="phonenumber"> | 41 | + <el-form-item label="手机号码" prop="mobile"> |
| 42 | <el-input | 42 | <el-input |
| 43 | - v-model="queryParams.phonenumber" | 43 | + v-model="queryParams.mobile" |
| 44 | placeholder="请输入手机号码" | 44 | placeholder="请输入手机号码" |
| 45 | clearable | 45 | clearable |
| 46 | size="small" | 46 | size="small" |
| @@ -57,10 +57,10 @@ | @@ -57,10 +57,10 @@ | ||
| 57 | style="width: 240px" | 57 | style="width: 240px" |
| 58 | > | 58 | > |
| 59 | <el-option | 59 | <el-option |
| 60 | - v-for="dict in statusOptions" | ||
| 61 | - :key="dict.dictValue" | ||
| 62 | - :label="dict.dictLabel" | ||
| 63 | - :value="dict.dictValue" | 60 | + v-for="dict in statusDictDatas" |
| 61 | + :key="parseInt(dict.value)" | ||
| 62 | + :label="dict.label" | ||
| 63 | + :value="parseInt(dict.value)" | ||
| 64 | /> | 64 | /> |
| 65 | </el-select> | 65 | </el-select> |
| 66 | </el-form-item> | 66 | </el-form-item> |
| @@ -94,26 +94,6 @@ | @@ -94,26 +94,6 @@ | ||
| 94 | </el-col> | 94 | </el-col> |
| 95 | <el-col :span="1.5"> | 95 | <el-col :span="1.5"> |
| 96 | <el-button | 96 | <el-button |
| 97 | - type="success" | ||
| 98 | - icon="el-icon-edit" | ||
| 99 | - size="mini" | ||
| 100 | - :disabled="single" | ||
| 101 | - @click="handleUpdate" | ||
| 102 | - v-hasPermi="['system:user:edit']" | ||
| 103 | - >修改</el-button> | ||
| 104 | - </el-col> | ||
| 105 | - <el-col :span="1.5"> | ||
| 106 | - <el-button | ||
| 107 | - type="danger" | ||
| 108 | - icon="el-icon-delete" | ||
| 109 | - size="mini" | ||
| 110 | - :disabled="multiple" | ||
| 111 | - @click="handleDelete" | ||
| 112 | - v-hasPermi="['system:user:remove']" | ||
| 113 | - >删除</el-button> | ||
| 114 | - </el-col> | ||
| 115 | - <el-col :span="1.5"> | ||
| 116 | - <el-button | ||
| 117 | type="info" | 97 | type="info" |
| 118 | icon="el-icon-upload2" | 98 | icon="el-icon-upload2" |
| 119 | size="mini" | 99 | size="mini" |
| @@ -133,20 +113,19 @@ | @@ -133,20 +113,19 @@ | ||
| 133 | <right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar> | 113 | <right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar> |
| 134 | </el-row> | 114 | </el-row> |
| 135 | 115 | ||
| 136 | - <el-table v-loading="loading" :data="userList" @selection-change="handleSelectionChange"> | ||
| 137 | - <el-table-column type="selection" width="50" align="center" /> | ||
| 138 | - <el-table-column label="用户编号" align="center" prop="userId" /> | ||
| 139 | - <el-table-column label="用户名称" align="center" prop="userName" :show-overflow-tooltip="true" /> | ||
| 140 | - <el-table-column label="用户昵称" align="center" prop="nickName" :show-overflow-tooltip="true" /> | ||
| 141 | - <el-table-column label="部门" align="center" prop="dept.deptName" :show-overflow-tooltip="true" /> | ||
| 142 | - <el-table-column label="手机号码" align="center" prop="phonenumber" width="120" /> | 116 | + <el-table v-loading="loading" :data="userList"> |
| 117 | + <el-table-column label="用户编号" align="center" prop="id" /> | ||
| 118 | + <el-table-column label="用户名称" align="center" prop="username" :show-overflow-tooltip="true" /> | ||
| 119 | + <el-table-column label="用户昵称" align="center" prop="nickname" :show-overflow-tooltip="true" /> | ||
| 120 | + <el-table-column label="部门" align="center" prop="dept.name" :show-overflow-tooltip="true" /> | ||
| 121 | + <el-table-column label="手机号码" align="center" prop="mobile" width="120" /> | ||
| 143 | <el-table-column label="状态" align="center"> | 122 | <el-table-column label="状态" align="center"> |
| 144 | <template slot-scope="scope"> | 123 | <template slot-scope="scope"> |
| 145 | <el-switch | 124 | <el-switch |
| 146 | - v-model="scope.row.status" | ||
| 147 | - active-value="0" | ||
| 148 | - inactive-value="1" | ||
| 149 | - @change="handleStatusChange(scope.row)" | 125 | + v-model="scope.row.status" |
| 126 | + :active-value="0" | ||
| 127 | + :inactive-value="1" | ||
| 128 | + @change="handleStatusChange(scope.row)" | ||
| 150 | ></el-switch> | 129 | ></el-switch> |
| 151 | </template> | 130 | </template> |
| 152 | </el-table-column> | 131 | </el-table-column> |
| @@ -170,7 +149,7 @@ | @@ -170,7 +149,7 @@ | ||
| 170 | v-hasPermi="['system:user:edit']" | 149 | v-hasPermi="['system:user:edit']" |
| 171 | >修改</el-button> | 150 | >修改</el-button> |
| 172 | <el-button | 151 | <el-button |
| 173 | - v-if="scope.row.userId !== 1" | 152 | + v-if="scope.row.id !== 1" |
| 174 | size="mini" | 153 | size="mini" |
| 175 | type="text" | 154 | type="text" |
| 176 | icon="el-icon-delete" | 155 | icon="el-icon-delete" |
| @@ -191,7 +170,7 @@ | @@ -191,7 +170,7 @@ | ||
| 191 | <pagination | 170 | <pagination |
| 192 | v-show="total>0" | 171 | v-show="total>0" |
| 193 | :total="total" | 172 | :total="total" |
| 194 | - :page.sync="queryParams.pageNum" | 173 | + :page.sync="queryParams.pageNo" |
| 195 | :limit.sync="queryParams.pageSize" | 174 | :limit.sync="queryParams.pageSize" |
| 196 | @pagination="getList" | 175 | @pagination="getList" |
| 197 | /> | 176 | /> |
| @@ -203,8 +182,8 @@ | @@ -203,8 +182,8 @@ | ||
| 203 | <el-form ref="form" :model="form" :rules="rules" label-width="80px"> | 182 | <el-form ref="form" :model="form" :rules="rules" label-width="80px"> |
| 204 | <el-row> | 183 | <el-row> |
| 205 | <el-col :span="12"> | 184 | <el-col :span="12"> |
| 206 | - <el-form-item label="用户昵称" prop="nickName"> | ||
| 207 | - <el-input v-model="form.nickName" placeholder="请输入用户昵称" /> | 185 | + <el-form-item label="用户昵称" prop="nickname"> |
| 186 | + <el-input v-model="form.nickname" placeholder="请输入用户昵称" /> | ||
| 208 | </el-form-item> | 187 | </el-form-item> |
| 209 | </el-col> | 188 | </el-col> |
| 210 | <el-col :span="12"> | 189 | <el-col :span="12"> |
| @@ -215,8 +194,8 @@ | @@ -215,8 +194,8 @@ | ||
| 215 | </el-row> | 194 | </el-row> |
| 216 | <el-row> | 195 | <el-row> |
| 217 | <el-col :span="12"> | 196 | <el-col :span="12"> |
| 218 | - <el-form-item label="手机号码" prop="phonenumber"> | ||
| 219 | - <el-input v-model="form.phonenumber" placeholder="请输入手机号码" maxlength="11" /> | 197 | + <el-form-item label="手机号码" prop="mobile"> |
| 198 | + <el-input v-model="form.mobile" placeholder="请输入手机号码" maxlength="11" /> | ||
| 220 | </el-form-item> | 199 | </el-form-item> |
| 221 | </el-col> | 200 | </el-col> |
| 222 | <el-col :span="12"> | 201 | <el-col :span="12"> |
| @@ -227,12 +206,12 @@ | @@ -227,12 +206,12 @@ | ||
| 227 | </el-row> | 206 | </el-row> |
| 228 | <el-row> | 207 | <el-row> |
| 229 | <el-col :span="12"> | 208 | <el-col :span="12"> |
| 230 | - <el-form-item v-if="form.userId == undefined" label="用户名称" prop="userName"> | ||
| 231 | - <el-input v-model="form.userName" placeholder="请输入用户名称" /> | 209 | + <el-form-item v-if="form.id === undefined" label="用户名称" prop="username"> |
| 210 | + <el-input v-model="form.username" placeholder="请输入用户名称" /> | ||
| 232 | </el-form-item> | 211 | </el-form-item> |
| 233 | </el-col> | 212 | </el-col> |
| 234 | <el-col :span="12"> | 213 | <el-col :span="12"> |
| 235 | - <el-form-item v-if="form.userId == undefined" label="用户密码" prop="password"> | 214 | + <el-form-item v-if="form.id === undefined" label="用户密码" prop="password"> |
| 236 | <el-input v-model="form.password" placeholder="请输入用户密码" type="password" /> | 215 | <el-input v-model="form.password" placeholder="请输入用户密码" type="password" /> |
| 237 | </el-form-item> | 216 | </el-form-item> |
| 238 | </el-col> | 217 | </el-col> |
| @@ -344,6 +323,11 @@ import { treeselect } from "@/api/system/dept"; | @@ -344,6 +323,11 @@ import { treeselect } from "@/api/system/dept"; | ||
| 344 | import Treeselect from "@riophae/vue-treeselect"; | 323 | import Treeselect from "@riophae/vue-treeselect"; |
| 345 | import "@riophae/vue-treeselect/dist/vue-treeselect.css"; | 324 | import "@riophae/vue-treeselect/dist/vue-treeselect.css"; |
| 346 | 325 | ||
| 326 | +import {listSimpleDepts} from "@/api/system/dept"; | ||
| 327 | + | ||
| 328 | +import {SysCommonStatusEnum} from "@/utils/constants"; | ||
| 329 | +import {DICT_TYPE, getDictDatas} from "@/utils/dict"; | ||
| 330 | + | ||
| 347 | export default { | 331 | export default { |
| 348 | name: "User", | 332 | name: "User", |
| 349 | components: { Treeselect }, | 333 | components: { Treeselect }, |
| @@ -351,12 +335,6 @@ export default { | @@ -351,12 +335,6 @@ export default { | ||
| 351 | return { | 335 | return { |
| 352 | // 遮罩层 | 336 | // 遮罩层 |
| 353 | loading: true, | 337 | loading: true, |
| 354 | - // 选中数组 | ||
| 355 | - ids: [], | ||
| 356 | - // 非单个禁用 | ||
| 357 | - single: true, | ||
| 358 | - // 非多个禁用 | ||
| 359 | - multiple: true, | ||
| 360 | // 显示搜索条件 | 338 | // 显示搜索条件 |
| 361 | showSearch: true, | 339 | showSearch: true, |
| 362 | // 总条数 | 340 | // 总条数 |
| @@ -387,7 +365,7 @@ export default { | @@ -387,7 +365,7 @@ export default { | ||
| 387 | form: {}, | 365 | form: {}, |
| 388 | defaultProps: { | 366 | defaultProps: { |
| 389 | children: "children", | 367 | children: "children", |
| 390 | - label: "label" | 368 | + label: "name" |
| 391 | }, | 369 | }, |
| 392 | // 用户导入参数 | 370 | // 用户导入参数 |
| 393 | upload: { | 371 | upload: { |
| @@ -406,19 +384,19 @@ export default { | @@ -406,19 +384,19 @@ export default { | ||
| 406 | }, | 384 | }, |
| 407 | // 查询参数 | 385 | // 查询参数 |
| 408 | queryParams: { | 386 | queryParams: { |
| 409 | - pageNum: 1, | 387 | + pageNo: 1, |
| 410 | pageSize: 10, | 388 | pageSize: 10, |
| 411 | - userName: undefined, | ||
| 412 | - phonenumber: undefined, | 389 | + username: undefined, |
| 390 | + mobile: undefined, | ||
| 413 | status: undefined, | 391 | status: undefined, |
| 414 | deptId: undefined | 392 | deptId: undefined |
| 415 | }, | 393 | }, |
| 416 | // 表单校验 | 394 | // 表单校验 |
| 417 | rules: { | 395 | rules: { |
| 418 | - userName: [ | 396 | + username: [ |
| 419 | { required: true, message: "用户名称不能为空", trigger: "blur" } | 397 | { required: true, message: "用户名称不能为空", trigger: "blur" } |
| 420 | ], | 398 | ], |
| 421 | - nickName: [ | 399 | + nickname: [ |
| 422 | { required: true, message: "用户昵称不能为空", trigger: "blur" } | 400 | { required: true, message: "用户昵称不能为空", trigger: "blur" } |
| 423 | ], | 401 | ], |
| 424 | password: [ | 402 | password: [ |
| @@ -431,14 +409,19 @@ export default { | @@ -431,14 +409,19 @@ export default { | ||
| 431 | trigger: ["blur", "change"] | 409 | trigger: ["blur", "change"] |
| 432 | } | 410 | } |
| 433 | ], | 411 | ], |
| 434 | - phonenumber: [ | 412 | + mobile: [ |
| 435 | { | 413 | { |
| 436 | pattern: /^1[3|4|5|6|7|8|9][0-9]\d{8}$/, | 414 | pattern: /^1[3|4|5|6|7|8|9][0-9]\d{8}$/, |
| 437 | message: "请输入正确的手机号码", | 415 | message: "请输入正确的手机号码", |
| 438 | trigger: "blur" | 416 | trigger: "blur" |
| 439 | } | 417 | } |
| 440 | ] | 418 | ] |
| 441 | - } | 419 | + }, |
| 420 | + | ||
| 421 | + // 枚举 | ||
| 422 | + SysCommonStatusEnum: SysCommonStatusEnum, | ||
| 423 | + // 数据字典 | ||
| 424 | + statusDictDatas: getDictDatas(DICT_TYPE.SYS_COMMON_STATUS), | ||
| 442 | }; | 425 | }; |
| 443 | }, | 426 | }, |
| 444 | watch: { | 427 | watch: { |
| @@ -450,12 +433,6 @@ export default { | @@ -450,12 +433,6 @@ export default { | ||
| 450 | created() { | 433 | created() { |
| 451 | this.getList(); | 434 | this.getList(); |
| 452 | this.getTreeselect(); | 435 | this.getTreeselect(); |
| 453 | - this.getDicts("sys_normal_disable").then(response => { | ||
| 454 | - this.statusOptions = response.data; | ||
| 455 | - }); | ||
| 456 | - this.getDicts("sys_user_sex").then(response => { | ||
| 457 | - this.sexOptions = response.data; | ||
| 458 | - }); | ||
| 459 | this.getConfigKey("sys.user.initPassword").then(response => { | 436 | this.getConfigKey("sys.user.initPassword").then(response => { |
| 460 | this.initPassword = response.msg; | 437 | this.initPassword = response.msg; |
| 461 | }); | 438 | }); |
| @@ -464,23 +441,28 @@ export default { | @@ -464,23 +441,28 @@ export default { | ||
| 464 | /** 查询用户列表 */ | 441 | /** 查询用户列表 */ |
| 465 | getList() { | 442 | getList() { |
| 466 | this.loading = true; | 443 | this.loading = true; |
| 467 | - listUser(this.addDateRange(this.queryParams, this.dateRange)).then(response => { | ||
| 468 | - this.userList = response.rows; | ||
| 469 | - this.total = response.total; | 444 | + listUser(this.addDateRange(this.queryParams, [ |
| 445 | + this.dateRange[0] ? this.dateRange[0] + ' 00:00:00' : undefined, | ||
| 446 | + this.dateRange[1] ? this.dateRange[1] + ' 23:59:59' : undefined, | ||
| 447 | + ])).then(response => { | ||
| 448 | + this.userList = response.data.list; | ||
| 449 | + this.total = response.data.list; | ||
| 470 | this.loading = false; | 450 | this.loading = false; |
| 471 | } | 451 | } |
| 472 | ); | 452 | ); |
| 473 | }, | 453 | }, |
| 474 | /** 查询部门下拉树结构 */ | 454 | /** 查询部门下拉树结构 */ |
| 475 | getTreeselect() { | 455 | getTreeselect() { |
| 476 | - treeselect().then(response => { | ||
| 477 | - this.deptOptions = response.data; | 456 | + listSimpleDepts().then(response => { |
| 457 | + // 处理 menuOptions 参数 | ||
| 458 | + this.deptOptions = []; | ||
| 459 | + this.deptOptions.push(...this.handleTree(response.data, "id")); | ||
| 478 | }); | 460 | }); |
| 479 | }, | 461 | }, |
| 480 | // 筛选节点 | 462 | // 筛选节点 |
| 481 | filterNode(value, data) { | 463 | filterNode(value, data) { |
| 482 | if (!value) return true; | 464 | if (!value) return true; |
| 483 | - return data.label.indexOf(value) !== -1; | 465 | + return data.name.indexOf(value) !== -1; |
| 484 | }, | 466 | }, |
| 485 | // 节点单击事件 | 467 | // 节点单击事件 |
| 486 | handleNodeClick(data) { | 468 | handleNodeClick(data) { |
| @@ -490,12 +472,12 @@ export default { | @@ -490,12 +472,12 @@ export default { | ||
| 490 | // 用户状态修改 | 472 | // 用户状态修改 |
| 491 | handleStatusChange(row) { | 473 | handleStatusChange(row) { |
| 492 | let text = row.status === "0" ? "启用" : "停用"; | 474 | let text = row.status === "0" ? "启用" : "停用"; |
| 493 | - this.$confirm('确认要"' + text + '""' + row.userName + '"用户吗?', "警告", { | 475 | + this.$confirm('确认要"' + text + '""' + row.username + '"用户吗?', "警告", { |
| 494 | confirmButtonText: "确定", | 476 | confirmButtonText: "确定", |
| 495 | cancelButtonText: "取消", | 477 | cancelButtonText: "取消", |
| 496 | type: "warning" | 478 | type: "warning" |
| 497 | }).then(function() { | 479 | }).then(function() { |
| 498 | - return changeUserStatus(row.userId, row.status); | 480 | + return changeUserStatus(row.id, row.status); |
| 499 | }).then(() => { | 481 | }).then(() => { |
| 500 | this.msgSuccess(text + "成功"); | 482 | this.msgSuccess(text + "成功"); |
| 501 | }).catch(function() { | 483 | }).catch(function() { |
| @@ -510,12 +492,12 @@ export default { | @@ -510,12 +492,12 @@ export default { | ||
| 510 | // 表单重置 | 492 | // 表单重置 |
| 511 | reset() { | 493 | reset() { |
| 512 | this.form = { | 494 | this.form = { |
| 513 | - userId: undefined, | 495 | + id: undefined, |
| 514 | deptId: undefined, | 496 | deptId: undefined, |
| 515 | - userName: undefined, | ||
| 516 | - nickName: undefined, | 497 | + username: undefined, |
| 498 | + nickname: undefined, | ||
| 517 | password: undefined, | 499 | password: undefined, |
| 518 | - phonenumber: undefined, | 500 | + mobile: undefined, |
| 519 | email: undefined, | 501 | email: undefined, |
| 520 | sex: undefined, | 502 | sex: undefined, |
| 521 | status: "0", | 503 | status: "0", |
| @@ -536,12 +518,6 @@ export default { | @@ -536,12 +518,6 @@ export default { | ||
| 536 | this.resetForm("queryForm"); | 518 | this.resetForm("queryForm"); |
| 537 | this.handleQuery(); | 519 | this.handleQuery(); |
| 538 | }, | 520 | }, |
| 539 | - // 多选框选中数据 | ||
| 540 | - handleSelectionChange(selection) { | ||
| 541 | - this.ids = selection.map(item => item.userId); | ||
| 542 | - this.single = selection.length != 1; | ||
| 543 | - this.multiple = !selection.length; | ||
| 544 | - }, | ||
| 545 | /** 新增按钮操作 */ | 521 | /** 新增按钮操作 */ |
| 546 | handleAdd() { | 522 | handleAdd() { |
| 547 | this.reset(); | 523 | this.reset(); |
| @@ -558,8 +534,8 @@ export default { | @@ -558,8 +534,8 @@ export default { | ||
| 558 | handleUpdate(row) { | 534 | handleUpdate(row) { |
| 559 | this.reset(); | 535 | this.reset(); |
| 560 | this.getTreeselect(); | 536 | this.getTreeselect(); |
| 561 | - const userId = row.userId || this.ids; | ||
| 562 | - getUser(userId).then(response => { | 537 | + const id = row.id; |
| 538 | + getUser(id).then(response => { | ||
| 563 | this.form = response.data; | 539 | this.form = response.data; |
| 564 | this.postOptions = response.posts; | 540 | this.postOptions = response.posts; |
| 565 | this.roleOptions = response.roles; | 541 | this.roleOptions = response.roles; |
| @@ -572,11 +548,11 @@ export default { | @@ -572,11 +548,11 @@ export default { | ||
| 572 | }, | 548 | }, |
| 573 | /** 重置密码按钮操作 */ | 549 | /** 重置密码按钮操作 */ |
| 574 | handleResetPwd(row) { | 550 | handleResetPwd(row) { |
| 575 | - this.$prompt('请输入"' + row.userName + '"的新密码', "提示", { | 551 | + this.$prompt('请输入"' + row.username + '"的新密码', "提示", { |
| 576 | confirmButtonText: "确定", | 552 | confirmButtonText: "确定", |
| 577 | cancelButtonText: "取消" | 553 | cancelButtonText: "取消" |
| 578 | }).then(({ value }) => { | 554 | }).then(({ value }) => { |
| 579 | - resetUserPwd(row.userId, value).then(response => { | 555 | + resetUserPwd(row.id, value).then(response => { |
| 580 | this.msgSuccess("修改成功,新密码是:" + value); | 556 | this.msgSuccess("修改成功,新密码是:" + value); |
| 581 | }); | 557 | }); |
| 582 | }).catch(() => {}); | 558 | }).catch(() => {}); |
| @@ -585,7 +561,7 @@ export default { | @@ -585,7 +561,7 @@ export default { | ||
| 585 | submitForm: function() { | 561 | submitForm: function() { |
| 586 | this.$refs["form"].validate(valid => { | 562 | this.$refs["form"].validate(valid => { |
| 587 | if (valid) { | 563 | if (valid) { |
| 588 | - if (this.form.userId != undefined) { | 564 | + if (this.form.id != undefined) { |
| 589 | updateUser(this.form).then(response => { | 565 | updateUser(this.form).then(response => { |
| 590 | this.msgSuccess("修改成功"); | 566 | this.msgSuccess("修改成功"); |
| 591 | this.open = false; | 567 | this.open = false; |
| @@ -603,13 +579,13 @@ export default { | @@ -603,13 +579,13 @@ export default { | ||
| 603 | }, | 579 | }, |
| 604 | /** 删除按钮操作 */ | 580 | /** 删除按钮操作 */ |
| 605 | handleDelete(row) { | 581 | handleDelete(row) { |
| 606 | - const userIds = row.userId || this.ids; | ||
| 607 | - this.$confirm('是否确认删除用户编号为"' + userIds + '"的数据项?', "警告", { | 582 | + const ids = row.id || this.ids; |
| 583 | + this.$confirm('是否确认删除用户编号为"' + ids + '"的数据项?', "警告", { | ||
| 608 | confirmButtonText: "确定", | 584 | confirmButtonText: "确定", |
| 609 | cancelButtonText: "取消", | 585 | cancelButtonText: "取消", |
| 610 | type: "warning" | 586 | type: "warning" |
| 611 | }).then(function() { | 587 | }).then(function() { |
| 612 | - return delUser(userIds); | 588 | + return delUser(ids); |
| 613 | }).then(() => { | 589 | }).then(() => { |
| 614 | this.getList(); | 590 | this.getList(); |
| 615 | this.msgSuccess("删除成功"); | 591 | this.msgSuccess("删除成功"); |
| @@ -657,4 +633,4 @@ export default { | @@ -657,4 +633,4 @@ export default { | ||
| 657 | } | 633 | } |
| 658 | } | 634 | } |
| 659 | }; | 635 | }; |
| 660 | -</script> | ||
| 661 | \ No newline at end of file | 636 | \ No newline at end of file |
| 637 | +</script> |
src/main/java/cn/iocoder/dashboard/common/pojo/PageResult.java
| @@ -5,6 +5,7 @@ import io.swagger.annotations.ApiModelProperty; | @@ -5,6 +5,7 @@ import io.swagger.annotations.ApiModelProperty; | ||
| 5 | import lombok.Data; | 5 | import lombok.Data; |
| 6 | 6 | ||
| 7 | import java.io.Serializable; | 7 | import java.io.Serializable; |
| 8 | +import java.util.ArrayList; | ||
| 8 | import java.util.List; | 9 | import java.util.List; |
| 9 | 10 | ||
| 10 | @ApiModel("分页结果") | 11 | @ApiModel("分页结果") |
| @@ -17,4 +18,17 @@ public final class PageResult<T> implements Serializable { | @@ -17,4 +18,17 @@ public final class PageResult<T> implements Serializable { | ||
| 17 | @ApiModelProperty(value = "总量", required = true) | 18 | @ApiModelProperty(value = "总量", required = true) |
| 18 | private Long total; | 19 | private Long total; |
| 19 | 20 | ||
| 21 | + public PageResult() { | ||
| 22 | + } | ||
| 23 | + | ||
| 24 | + public PageResult(List<T> list, Long total) { | ||
| 25 | + this.list = list; | ||
| 26 | + this.total = total; | ||
| 27 | + } | ||
| 28 | + | ||
| 29 | + public PageResult(Long total) { | ||
| 30 | + this.list = new ArrayList<>(); | ||
| 31 | + this.total = total; | ||
| 32 | + } | ||
| 33 | + | ||
| 20 | } | 34 | } |
src/main/java/cn/iocoder/dashboard/framework/security/core/LoginUser.java
src/main/java/cn/iocoder/dashboard/framework/security/core/handler/AccessDeniedHandlerImpl.java
| @@ -6,7 +6,6 @@ import cn.iocoder.dashboard.framework.security.core.util.SecurityUtils; | @@ -6,7 +6,6 @@ import cn.iocoder.dashboard.framework.security.core.util.SecurityUtils; | ||
| 6 | import cn.iocoder.dashboard.util.servlet.ServletUtils; | 6 | import cn.iocoder.dashboard.util.servlet.ServletUtils; |
| 7 | import lombok.extern.slf4j.Slf4j; | 7 | import lombok.extern.slf4j.Slf4j; |
| 8 | import org.springframework.security.access.AccessDeniedException; | 8 | import org.springframework.security.access.AccessDeniedException; |
| 9 | -import org.springframework.security.core.AuthenticationException; | ||
| 10 | import org.springframework.security.web.access.AccessDeniedHandler; | 9 | import org.springframework.security.web.access.AccessDeniedHandler; |
| 11 | import org.springframework.security.web.access.ExceptionTranslationFilter; | 10 | import org.springframework.security.web.access.ExceptionTranslationFilter; |
| 12 | import org.springframework.stereotype.Component; | 11 | import org.springframework.stereotype.Component; |
| @@ -36,7 +35,7 @@ public class AccessDeniedHandlerImpl implements AccessDeniedHandler { | @@ -36,7 +35,7 @@ public class AccessDeniedHandlerImpl implements AccessDeniedHandler { | ||
| 36 | throws IOException, ServletException { | 35 | throws IOException, ServletException { |
| 37 | // 打印 warn 的原因是,不定期合并 warn,看看有没恶意破坏 | 36 | // 打印 warn 的原因是,不定期合并 warn,看看有没恶意破坏 |
| 38 | log.warn("[commence][访问 URL({}) 时,用户({}) 权限不够]", request.getRequestURI(), | 37 | log.warn("[commence][访问 URL({}) 时,用户({}) 权限不够]", request.getRequestURI(), |
| 39 | - SecurityUtils.getLoginUser().getUserId(), e); | 38 | + SecurityUtils.getLoginUser().getId(), e); |
| 40 | // 返回 403 | 39 | // 返回 403 |
| 41 | ServletUtils.writeJSON(response, CommonResult.error(UNAUTHORIZED)); | 40 | ServletUtils.writeJSON(response, CommonResult.error(UNAUTHORIZED)); |
| 42 | } | 41 | } |
src/main/java/cn/iocoder/dashboard/framework/security/core/util/SecurityUtils.java
| @@ -50,7 +50,7 @@ public class SecurityUtils { | @@ -50,7 +50,7 @@ public class SecurityUtils { | ||
| 50 | * @return 用户编号 | 50 | * @return 用户编号 |
| 51 | */ | 51 | */ |
| 52 | public static Long getLoginUserId() { | 52 | public static Long getLoginUserId() { |
| 53 | - return getLoginUser().getUserId(); | 53 | + return getLoginUser().getId(); |
| 54 | } | 54 | } |
| 55 | 55 | ||
| 56 | public static Set<Long> getLoginUserRoleIds() { | 56 | public static Set<Long> getLoginUserRoleIds() { |
src/main/java/cn/iocoder/dashboard/modules/system/controller/user/SysUserController.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; | ||
| 4 | +import cn.iocoder.dashboard.common.pojo.CommonResult; | ||
| 5 | +import cn.iocoder.dashboard.common.pojo.PageResult; | ||
| 6 | +import cn.iocoder.dashboard.modules.system.controller.user.vo.user.SysUserPageItemRespVO; | ||
| 7 | +import cn.iocoder.dashboard.modules.system.controller.user.vo.user.SysUserPageReqVO; | ||
| 8 | +import cn.iocoder.dashboard.modules.system.convert.user.SysUserConvert; | ||
| 9 | +import cn.iocoder.dashboard.modules.system.dal.mysql.dataobject.dept.SysDeptDO; | ||
| 10 | +import cn.iocoder.dashboard.modules.system.dal.mysql.dataobject.user.SysUserDO; | ||
| 11 | +import cn.iocoder.dashboard.modules.system.service.dept.SysDeptService; | ||
| 12 | +import cn.iocoder.dashboard.modules.system.service.user.SysUserService; | ||
| 13 | +import cn.iocoder.dashboard.util.collection.CollectionUtils; | ||
| 14 | +import io.swagger.annotations.Api; | ||
| 15 | +import io.swagger.annotations.ApiOperation; | ||
| 16 | +import org.springframework.web.bind.annotation.GetMapping; | ||
| 17 | +import org.springframework.web.bind.annotation.RequestMapping; | ||
| 18 | +import org.springframework.web.bind.annotation.RestController; | ||
| 19 | + | ||
| 20 | +import javax.annotation.Resource; | ||
| 21 | +import java.util.*; | ||
| 22 | + | ||
| 23 | +import static cn.iocoder.dashboard.common.pojo.CommonResult.success; | ||
| 24 | + | ||
| 25 | +@Api(tags = "用户 API") | ||
| 26 | +@RestController | ||
| 27 | +@RequestMapping("/system/user") | ||
| 3 | public class SysUserController { | 28 | public class SysUserController { |
| 4 | 29 | ||
| 5 | -// /** | ||
| 6 | -// * 获取用户列表 | ||
| 7 | -// */ | 30 | + @Resource |
| 31 | + private SysUserService userService; | ||
| 32 | + @Resource | ||
| 33 | + private SysDeptService deptService; | ||
| 34 | + | ||
| 35 | + @ApiOperation("获得用户分页列表") | ||
| 36 | + @GetMapping("/page") | ||
| 8 | // @PreAuthorize("@ss.hasPermi('system:user:list')") | 37 | // @PreAuthorize("@ss.hasPermi('system:user:list')") |
| 9 | -// @GetMapping("/list") | ||
| 10 | -// public TableDataInfo list(SysUser user) | ||
| 11 | -// { | ||
| 12 | -// startPage(); | ||
| 13 | -// List<SysUser> list = userService.selectUserList(user); | ||
| 14 | -// return getDataTable(list); | ||
| 15 | -// } | 38 | + public CommonResult<PageResult<SysUserPageItemRespVO>> pageUsers(SysUserPageReqVO reqVO) { |
| 39 | + // 获得用户分页列表 | ||
| 40 | + PageResult<SysUserDO> pageResult = userService.pageUsers(reqVO); | ||
| 41 | + if (CollUtil.isEmpty(pageResult.getList())) { | ||
| 42 | + return success(new PageResult<>(pageResult.getTotal())); // 返回空 | ||
| 43 | + } | ||
| 44 | + | ||
| 45 | + // 获得拼接需要的数据 | ||
| 46 | + Map<Long, SysDeptDO> deptMap; | ||
| 47 | + Collection<Long> deptIds = CollectionUtils.convertList(pageResult.getList(), SysUserDO::getDeptId); | ||
| 48 | + if (CollUtil.isNotEmpty(deptIds)) { | ||
| 49 | + deptMap = CollectionUtils.convertMap(deptService.listDepts(deptIds), SysDeptDO::getId); | ||
| 50 | + } else { | ||
| 51 | + deptMap = Collections.emptyMap(); | ||
| 52 | + } | ||
| 53 | + // 拼接结果返回 | ||
| 54 | + List<SysUserPageItemRespVO> userList = new ArrayList<>(pageResult.getList().size()); | ||
| 55 | + pageResult.getList().forEach(user -> { | ||
| 56 | + SysUserPageItemRespVO respVO = SysUserConvert.INSTANCE.convert(user); | ||
| 57 | + respVO.setDept(SysUserConvert.INSTANCE.convert(deptMap.get(user.getDeptId()))); | ||
| 58 | + userList.add(respVO); | ||
| 59 | + }); | ||
| 60 | + return success(new PageResult<>(userList, pageResult.getTotal())); | ||
| 61 | + } | ||
| 16 | // | 62 | // |
| 17 | // @Log(title = "用户管理", businessType = BusinessType.EXPORT) | 63 | // @Log(title = "用户管理", businessType = BusinessType.EXPORT) |
| 18 | // @PreAuthorize("@ss.hasPermi('system:user:export')") | 64 | // @PreAuthorize("@ss.hasPermi('system:user:export')") |
src/main/java/cn/iocoder/dashboard/modules/system/controller/user/vo/user/SysUserPageItemRespVO.java
0 → 100644
| 1 | +package cn.iocoder.dashboard.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.EqualsAndHashCode; | ||
| 8 | +import lombok.NoArgsConstructor; | ||
| 9 | + | ||
| 10 | +@ApiModel(value = "用户分页时的信息 Response VO", description = "相比用户基本信息来说,会多部门信息") | ||
| 11 | +@Data | ||
| 12 | +@NoArgsConstructor | ||
| 13 | +@AllArgsConstructor | ||
| 14 | +@EqualsAndHashCode(callSuper = true) | ||
| 15 | +public class SysUserPageItemRespVO extends SysUserRespVO { | ||
| 16 | + | ||
| 17 | + /** | ||
| 18 | + * 所在部门 | ||
| 19 | + */ | ||
| 20 | + private Dept dept; | ||
| 21 | + | ||
| 22 | + @ApiModel("部门") | ||
| 23 | + @Data | ||
| 24 | + public static class Dept { | ||
| 25 | + | ||
| 26 | + @ApiModelProperty(value = "部门编号", required = true, example = "1") | ||
| 27 | + private Integer id; | ||
| 28 | + | ||
| 29 | + @ApiModelProperty(value = "部门名称", required = true, example = "研发部") | ||
| 30 | + private String name; | ||
| 31 | + | ||
| 32 | + } | ||
| 33 | + | ||
| 34 | +} |
src/main/java/cn/iocoder/dashboard/modules/system/controller/user/vo/user/SysUserPageReqVO.java
0 → 100644
| 1 | +package cn.iocoder.dashboard.modules.system.controller.user.vo.user; | ||
| 2 | + | ||
| 3 | +import cn.iocoder.dashboard.common.pojo.PageParam; | ||
| 4 | +import io.swagger.annotations.ApiModel; | ||
| 5 | +import io.swagger.annotations.ApiModelProperty; | ||
| 6 | +import lombok.AllArgsConstructor; | ||
| 7 | +import lombok.Data; | ||
| 8 | +import lombok.EqualsAndHashCode; | ||
| 9 | +import lombok.NoArgsConstructor; | ||
| 10 | +import org.springframework.format.annotation.DateTimeFormat; | ||
| 11 | + | ||
| 12 | +import java.util.Date; | ||
| 13 | + | ||
| 14 | +import static cn.iocoder.dashboard.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND; | ||
| 15 | + | ||
| 16 | +@ApiModel("用户分页 Request VO") | ||
| 17 | +@Data | ||
| 18 | +@NoArgsConstructor | ||
| 19 | +@AllArgsConstructor | ||
| 20 | +@EqualsAndHashCode(callSuper = true) | ||
| 21 | +public class SysUserPageReqVO extends PageParam { | ||
| 22 | + | ||
| 23 | + @ApiModelProperty(value = "用户账号", example = "yudao", notes = "模糊匹配") | ||
| 24 | + private String username; | ||
| 25 | + | ||
| 26 | + @ApiModelProperty(value = "手机号码", example = "yudao", notes = "模糊匹配") | ||
| 27 | + private String mobile; | ||
| 28 | + | ||
| 29 | + @ApiModelProperty(value = "展示状态", example = "1", notes = "参见 SysCommonStatusEnum 枚举类") | ||
| 30 | + private Integer status; | ||
| 31 | + | ||
| 32 | + @ApiModelProperty(value = "开始时间", example = "2020-10-24") | ||
| 33 | + @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) | ||
| 34 | + private Date beginTime; | ||
| 35 | + | ||
| 36 | + @ApiModelProperty(value = "结束时间", example = "2020-10-24") | ||
| 37 | + @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) | ||
| 38 | + private Date endTime; | ||
| 39 | + | ||
| 40 | + @ApiModelProperty(value = "部门编号", example = "1024", notes = "同时筛选子部门") | ||
| 41 | + private Long deptId; | ||
| 42 | + | ||
| 43 | +} |
src/main/java/cn/iocoder/dashboard/modules/system/convert/user/SysUserConvert.java
0 → 100644
| 1 | +package cn.iocoder.dashboard.modules.system.convert.user; | ||
| 2 | + | ||
| 3 | +import cn.iocoder.dashboard.common.pojo.PageResult; | ||
| 4 | +import cn.iocoder.dashboard.modules.system.controller.user.vo.user.SysUserPageItemRespVO; | ||
| 5 | +import cn.iocoder.dashboard.modules.system.dal.mysql.dataobject.dept.SysDeptDO; | ||
| 6 | +import cn.iocoder.dashboard.modules.system.dal.mysql.dataobject.user.SysUserDO; | ||
| 7 | +import com.baomidou.mybatisplus.core.metadata.IPage; | ||
| 8 | +import org.mapstruct.Mapper; | ||
| 9 | +import org.mapstruct.Mapping; | ||
| 10 | +import org.mapstruct.factory.Mappers; | ||
| 11 | + | ||
| 12 | +@Mapper | ||
| 13 | +public interface SysUserConvert { | ||
| 14 | + | ||
| 15 | + SysUserConvert INSTANCE = Mappers.getMapper(SysUserConvert.class); | ||
| 16 | + | ||
| 17 | + SysUserPageItemRespVO convert(SysUserDO bean); | ||
| 18 | + | ||
| 19 | + SysUserPageItemRespVO.Dept convert(SysDeptDO bean); | ||
| 20 | + | ||
| 21 | + @Mapping(source = "records", target = "list") | ||
| 22 | + PageResult<SysUserDO> convertPage(IPage<SysUserDO> page); | ||
| 23 | + | ||
| 24 | +} |
src/main/java/cn/iocoder/dashboard/modules/system/dal/mysql/dao/user/SysUserMapper.java
| 1 | package cn.iocoder.dashboard.modules.system.dal.mysql.dao.user; | 1 | package cn.iocoder.dashboard.modules.system.dal.mysql.dao.user; |
| 2 | 2 | ||
| 3 | +import cn.iocoder.dashboard.framework.mybatis.core.query.QueryWrapperX; | ||
| 4 | +import cn.iocoder.dashboard.framework.mybatis.core.util.MyBatisUtils; | ||
| 5 | +import cn.iocoder.dashboard.modules.system.controller.user.vo.user.SysUserPageReqVO; | ||
| 3 | import cn.iocoder.dashboard.modules.system.dal.mysql.dataobject.user.SysUserDO; | 6 | import cn.iocoder.dashboard.modules.system.dal.mysql.dataobject.user.SysUserDO; |
| 4 | import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; | 7 | import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; |
| 5 | import com.baomidou.mybatisplus.core.mapper.BaseMapper; | 8 | import com.baomidou.mybatisplus.core.mapper.BaseMapper; |
| 9 | +import com.baomidou.mybatisplus.core.metadata.IPage; | ||
| 6 | import org.apache.ibatis.annotations.Mapper; | 10 | import org.apache.ibatis.annotations.Mapper; |
| 7 | 11 | ||
| 12 | +import java.util.List; | ||
| 13 | + | ||
| 8 | @Mapper | 14 | @Mapper |
| 9 | public interface SysUserMapper extends BaseMapper<SysUserDO> { | 15 | public interface SysUserMapper extends BaseMapper<SysUserDO> { |
| 10 | 16 | ||
| @@ -12,4 +18,14 @@ public interface SysUserMapper extends BaseMapper<SysUserDO> { | @@ -12,4 +18,14 @@ public interface SysUserMapper extends BaseMapper<SysUserDO> { | ||
| 12 | return selectOne(new QueryWrapper<SysUserDO>().eq("username", username)); | 18 | return selectOne(new QueryWrapper<SysUserDO>().eq("username", username)); |
| 13 | } | 19 | } |
| 14 | 20 | ||
| 21 | + default IPage<SysUserDO> selectList(SysUserPageReqVO reqVO, List<Long> deptIds) { | ||
| 22 | + return selectPage(MyBatisUtils.buildPage(reqVO), | ||
| 23 | + new QueryWrapperX<SysUserDO>().likeIfPresent("username", reqVO.getUsername()) | ||
| 24 | + .likeIfPresent("mobile", reqVO.getMobile()) | ||
| 25 | + .eqIfPresent("status", reqVO.getStatus()) | ||
| 26 | + .betweenIfPresent("create_time", reqVO.getBeginTime(), reqVO.getEndTime()) | ||
| 27 | + .inIfPresent("dept_id", deptIds)); | ||
| 28 | + } | ||
| 29 | + | ||
| 15 | } | 30 | } |
| 31 | + |
src/main/java/cn/iocoder/dashboard/modules/system/service/auth/impl/SysAuthServiceImpl.java
| @@ -80,7 +80,7 @@ public class SysAuthServiceImpl implements SysAuthService { | @@ -80,7 +80,7 @@ public class SysAuthServiceImpl implements SysAuthService { | ||
| 80 | // 创建 LoginUser 对象 | 80 | // 创建 LoginUser 对象 |
| 81 | LoginUser loginUser = SysAuthConvert.INSTANCE.convert(user); | 81 | LoginUser loginUser = SysAuthConvert.INSTANCE.convert(user); |
| 82 | loginUser.setUpdateTime(new Date()); | 82 | loginUser.setUpdateTime(new Date()); |
| 83 | - loginUser.setRoleIds(this.getUserRoleIds(loginUser.getUserId())); | 83 | + loginUser.setRoleIds(this.getUserRoleIds(loginUser.getId())); |
| 84 | return loginUser; | 84 | return loginUser; |
| 85 | } | 85 | } |
| 86 | 86 | ||
| @@ -94,7 +94,7 @@ public class SysAuthServiceImpl implements SysAuthService { | @@ -94,7 +94,7 @@ public class SysAuthServiceImpl implements SysAuthService { | ||
| 94 | // 缓存登陆用户到 Redis 中 | 94 | // 缓存登陆用户到 Redis 中 |
| 95 | String sessionId = IdUtil.fastSimpleUUID(); | 95 | String sessionId = IdUtil.fastSimpleUUID(); |
| 96 | loginUser.setUpdateTime(new Date()); | 96 | loginUser.setUpdateTime(new Date()); |
| 97 | - loginUser.setRoleIds(this.getUserRoleIds(loginUser.getUserId())); | 97 | + loginUser.setRoleIds(this.getUserRoleIds(loginUser.getId())); |
| 98 | loginUserRedisDAO.set(sessionId, loginUser); | 98 | loginUserRedisDAO.set(sessionId, loginUser); |
| 99 | 99 | ||
| 100 | // 创建 Token | 100 | // 创建 Token |
| @@ -197,7 +197,7 @@ public class SysAuthServiceImpl implements SysAuthService { | @@ -197,7 +197,7 @@ public class SysAuthServiceImpl implements SysAuthService { | ||
| 197 | } | 197 | } |
| 198 | 198 | ||
| 199 | // 重新加载 SysUserDO 信息 | 199 | // 重新加载 SysUserDO 信息 |
| 200 | - SysUserDO user = userService.getUser(loginUser.getUserId()); | 200 | + SysUserDO user = userService.getUser(loginUser.getId()); |
| 201 | if (user == null || CommonStatusEnum.DISABLE.getStatus().equals(user.getStatus())) { | 201 | if (user == null || CommonStatusEnum.DISABLE.getStatus().equals(user.getStatus())) { |
| 202 | throw exception(TOKEN_EXPIRED); // 校验 token 时,用户被禁用的情况下,也认为 token 过期,方便前端跳转到登陆界面 | 202 | throw exception(TOKEN_EXPIRED); // 校验 token 时,用户被禁用的情况下,也认为 token 过期,方便前端跳转到登陆界面 |
| 203 | } | 203 | } |
| @@ -205,7 +205,7 @@ public class SysAuthServiceImpl implements SysAuthService { | @@ -205,7 +205,7 @@ public class SysAuthServiceImpl implements SysAuthService { | ||
| 205 | // 刷新 LoginUser 缓存 | 205 | // 刷新 LoginUser 缓存 |
| 206 | loginUser.setDeptId(user.getDeptId()); | 206 | loginUser.setDeptId(user.getDeptId()); |
| 207 | loginUser.setUpdateTime(new Date()); | 207 | loginUser.setUpdateTime(new Date()); |
| 208 | - loginUser.setRoleIds(this.getUserRoleIds(loginUser.getUserId())); | 208 | + loginUser.setRoleIds(this.getUserRoleIds(loginUser.getId())); |
| 209 | loginUserRedisDAO.set(sessionId, loginUser); | 209 | loginUserRedisDAO.set(sessionId, loginUser); |
| 210 | } | 210 | } |
| 211 | 211 |
src/main/java/cn/iocoder/dashboard/modules/system/service/dept/SysDeptService.java
| @@ -3,6 +3,7 @@ package cn.iocoder.dashboard.modules.system.service.dept; | @@ -3,6 +3,7 @@ package cn.iocoder.dashboard.modules.system.service.dept; | ||
| 3 | import cn.iocoder.dashboard.modules.system.controller.dept.vo.dept.SysDeptListReqVO; | 3 | import cn.iocoder.dashboard.modules.system.controller.dept.vo.dept.SysDeptListReqVO; |
| 4 | import cn.iocoder.dashboard.modules.system.dal.mysql.dataobject.dept.SysDeptDO; | 4 | import cn.iocoder.dashboard.modules.system.dal.mysql.dataobject.dept.SysDeptDO; |
| 5 | 5 | ||
| 6 | +import java.util.Collection; | ||
| 6 | import java.util.List; | 7 | import java.util.List; |
| 7 | 8 | ||
| 8 | /** | 9 | /** |
| @@ -13,6 +14,11 @@ import java.util.List; | @@ -13,6 +14,11 @@ import java.util.List; | ||
| 13 | public interface SysDeptService { | 14 | public interface SysDeptService { |
| 14 | 15 | ||
| 15 | /** | 16 | /** |
| 17 | + * 初始化 | ||
| 18 | + */ | ||
| 19 | + void init(); | ||
| 20 | + | ||
| 21 | + /** | ||
| 16 | * 获得所有部门列表 | 22 | * 获得所有部门列表 |
| 17 | * | 23 | * |
| 18 | * @return 部门列表 | 24 | * @return 部门列表 |
| @@ -20,6 +26,14 @@ public interface SysDeptService { | @@ -20,6 +26,14 @@ public interface SysDeptService { | ||
| 20 | List<SysDeptDO> listDepts(); | 26 | List<SysDeptDO> listDepts(); |
| 21 | 27 | ||
| 22 | /** | 28 | /** |
| 29 | + * 获得指定编号的部门列表 | ||
| 30 | + * | ||
| 31 | + * @param ids 部门编号数组 | ||
| 32 | + * @return 部门列表 | ||
| 33 | + */ | ||
| 34 | + List<SysDeptDO> listDepts(Collection<Long> ids); | ||
| 35 | + | ||
| 36 | + /** | ||
| 23 | * 筛选部门列表 | 37 | * 筛选部门列表 |
| 24 | * | 38 | * |
| 25 | * @param reqVO 筛选条件请求 VO | 39 | * @param reqVO 筛选条件请求 VO |
| @@ -27,4 +41,13 @@ public interface SysDeptService { | @@ -27,4 +41,13 @@ public interface SysDeptService { | ||
| 27 | */ | 41 | */ |
| 28 | List<SysDeptDO> listDepts(SysDeptListReqVO reqVO); | 42 | List<SysDeptDO> listDepts(SysDeptListReqVO reqVO); |
| 29 | 43 | ||
| 44 | + /** | ||
| 45 | + * 获得所有子部门,从缓存中 | ||
| 46 | + * | ||
| 47 | + * @param parentId 部门编号 | ||
| 48 | + * @param recursive 是否递归获取所有 | ||
| 49 | + * @return 子部门列表 | ||
| 50 | + */ | ||
| 51 | + List<SysDeptDO> listDeptsByParentIdFromCache(Long parentId, boolean recursive); | ||
| 52 | + | ||
| 30 | } | 53 | } |
src/main/java/cn/iocoder/dashboard/modules/system/service/dept/impl/SysDeptServiceImpl.java
| 1 | package cn.iocoder.dashboard.modules.system.service.dept.impl; | 1 | package cn.iocoder.dashboard.modules.system.service.dept.impl; |
| 2 | 2 | ||
| 3 | +import cn.hutool.core.collection.CollUtil; | ||
| 3 | import cn.iocoder.dashboard.modules.system.controller.dept.vo.dept.SysDeptListReqVO; | 4 | import cn.iocoder.dashboard.modules.system.controller.dept.vo.dept.SysDeptListReqVO; |
| 4 | import cn.iocoder.dashboard.modules.system.dal.mysql.dao.dept.SysDeptMapper; | 5 | import cn.iocoder.dashboard.modules.system.dal.mysql.dao.dept.SysDeptMapper; |
| 5 | import cn.iocoder.dashboard.modules.system.dal.mysql.dataobject.dept.SysDeptDO; | 6 | import cn.iocoder.dashboard.modules.system.dal.mysql.dataobject.dept.SysDeptDO; |
| 6 | import cn.iocoder.dashboard.modules.system.service.dept.SysDeptService; | 7 | import cn.iocoder.dashboard.modules.system.service.dept.SysDeptService; |
| 8 | +import com.google.common.collect.ImmutableMap; | ||
| 9 | +import com.google.common.collect.ImmutableMultimap; | ||
| 10 | +import com.google.common.collect.Multimap; | ||
| 11 | +import lombok.extern.slf4j.Slf4j; | ||
| 7 | import org.springframework.stereotype.Service; | 12 | import org.springframework.stereotype.Service; |
| 8 | 13 | ||
| 14 | +import javax.annotation.PostConstruct; | ||
| 9 | import javax.annotation.Resource; | 15 | import javax.annotation.Resource; |
| 16 | +import java.util.ArrayList; | ||
| 17 | +import java.util.Collection; | ||
| 10 | import java.util.List; | 18 | import java.util.List; |
| 19 | +import java.util.Map; | ||
| 11 | 20 | ||
| 12 | /** | 21 | /** |
| 13 | * 部门 Service 实现类 | 22 | * 部门 Service 实现类 |
| @@ -15,19 +24,94 @@ import java.util.List; | @@ -15,19 +24,94 @@ import java.util.List; | ||
| 15 | * @author 芋道源码 | 24 | * @author 芋道源码 |
| 16 | */ | 25 | */ |
| 17 | @Service | 26 | @Service |
| 27 | +@Slf4j | ||
| 18 | public class SysDeptServiceImpl implements SysDeptService { | 28 | public class SysDeptServiceImpl implements SysDeptService { |
| 19 | 29 | ||
| 30 | + /** | ||
| 31 | + * 部门缓存 | ||
| 32 | + * key:部门编号 {@link SysDeptDO#getId()} | ||
| 33 | + * | ||
| 34 | + * 这里声明 volatile 修饰的原因是,每次刷新时,直接修改指向 | ||
| 35 | + */ | ||
| 36 | + private volatile Map<Long, SysDeptDO> deptCache; | ||
| 37 | + /** | ||
| 38 | + * 父部门缓存 | ||
| 39 | + * key:部门编号 {@link SysDeptDO#getParentId()} | ||
| 40 | + * value: 直接子部门列表 | ||
| 41 | + * | ||
| 42 | + * 这里声明 volatile 修饰的原因是,每次刷新时,直接修改指向 | ||
| 43 | + */ | ||
| 44 | + private volatile Multimap<Long, SysDeptDO> parentDeptCache; | ||
| 45 | + | ||
| 20 | @Resource | 46 | @Resource |
| 21 | private SysDeptMapper deptMapper; | 47 | private SysDeptMapper deptMapper; |
| 22 | 48 | ||
| 23 | @Override | 49 | @Override |
| 50 | + @PostConstruct | ||
| 51 | + public void init() { | ||
| 52 | + // 从数据库中读取 | ||
| 53 | + List<SysDeptDO> sysDeptDOList = deptMapper.selectList(); | ||
| 54 | + // 构建缓存 | ||
| 55 | + ImmutableMap.Builder<Long, SysDeptDO> builder = ImmutableMap.builder(); | ||
| 56 | + ImmutableMultimap.Builder<Long, SysDeptDO> parentBuilder = ImmutableMultimap.builder(); | ||
| 57 | + sysDeptDOList.forEach(sysRoleDO -> { | ||
| 58 | + builder.put(sysRoleDO.getId(), sysRoleDO); | ||
| 59 | + parentBuilder.put(sysRoleDO.getParentId(), sysRoleDO); | ||
| 60 | + }); | ||
| 61 | + // 设置缓存 | ||
| 62 | + deptCache = builder.build(); | ||
| 63 | + parentDeptCache = parentBuilder.build(); | ||
| 64 | + log.info("[init][初始化 Dept 数量为 {}]", sysDeptDOList.size()); | ||
| 65 | + } | ||
| 66 | + | ||
| 67 | + @Override | ||
| 24 | public List<SysDeptDO> listDepts() { | 68 | public List<SysDeptDO> listDepts() { |
| 25 | return deptMapper.selectList(); | 69 | return deptMapper.selectList(); |
| 26 | } | 70 | } |
| 27 | 71 | ||
| 28 | @Override | 72 | @Override |
| 73 | + public List<SysDeptDO> listDepts(Collection<Long> ids) { | ||
| 74 | + return deptMapper.selectBatchIds(ids); | ||
| 75 | + } | ||
| 76 | + | ||
| 77 | + @Override | ||
| 29 | public List<SysDeptDO> listDepts(SysDeptListReqVO reqVO) { | 78 | public List<SysDeptDO> listDepts(SysDeptListReqVO reqVO) { |
| 30 | return deptMapper.selectList(reqVO); | 79 | return deptMapper.selectList(reqVO); |
| 31 | } | 80 | } |
| 32 | 81 | ||
| 82 | + @Override | ||
| 83 | + public List<SysDeptDO> listDeptsByParentIdFromCache(Long parentId, boolean recursive) { | ||
| 84 | + List<SysDeptDO> result = new ArrayList<>(); | ||
| 85 | + // 递归,简单粗暴 | ||
| 86 | + this.listDeptsByParentIdFromCache(result, parentId, | ||
| 87 | + recursive ? Integer.MAX_VALUE : 1, // 如果递归获取,则无限;否则,只递归 1 次 | ||
| 88 | + parentDeptCache); | ||
| 89 | + return result; | ||
| 90 | + } | ||
| 91 | + | ||
| 92 | + /** | ||
| 93 | + * 递归获取所有的子部门,添加到 result 结果 | ||
| 94 | + * | ||
| 95 | + * @param result 结果 | ||
| 96 | + * @param parentId 父编号 | ||
| 97 | + * @param recursiveCount 递归次数 | ||
| 98 | + * @param parentDeptMap 父部门 Map,使用缓存,避免变化 | ||
| 99 | + */ | ||
| 100 | + private void listDeptsByParentIdFromCache(List<SysDeptDO> result, Long parentId, int recursiveCount, | ||
| 101 | + Multimap<Long, SysDeptDO> parentDeptMap) { | ||
| 102 | + // 递归次数为 0,结束! | ||
| 103 | + if (recursiveCount == 0) { | ||
| 104 | + return; | ||
| 105 | + } | ||
| 106 | + // 获得子部门 | ||
| 107 | + Collection<SysDeptDO> depts = parentDeptMap.get(parentId); | ||
| 108 | + if (CollUtil.isEmpty(depts)) { | ||
| 109 | + return; | ||
| 110 | + } | ||
| 111 | + result.addAll(depts); | ||
| 112 | + // 继续递归 | ||
| 113 | + depts.forEach(dept -> listDeptsByParentIdFromCache(result, dept.getId(), | ||
| 114 | + recursiveCount - 1, parentDeptMap)); | ||
| 115 | + } | ||
| 116 | + | ||
| 33 | } | 117 | } |
src/main/java/cn/iocoder/dashboard/modules/system/service/permission/impl/SysRoleServiceImpl.java
| @@ -37,12 +37,6 @@ import static cn.iocoder.dashboard.modules.system.enums.SysErrorCodeConstants.*; | @@ -37,12 +37,6 @@ import static cn.iocoder.dashboard.modules.system.enums.SysErrorCodeConstants.*; | ||
| 37 | @Slf4j | 37 | @Slf4j |
| 38 | public class SysRoleServiceImpl implements SysRoleService { | 38 | public class SysRoleServiceImpl implements SysRoleService { |
| 39 | 39 | ||
| 40 | - @Resource | ||
| 41 | - private SysPermissionService permissionService; | ||
| 42 | - | ||
| 43 | - @Resource | ||
| 44 | - private SysRoleMapper roleMapper; | ||
| 45 | - | ||
| 46 | /** | 40 | /** |
| 47 | * 角色缓存 | 41 | * 角色缓存 |
| 48 | * key:角色编号 {@link SysRoleDO#getId()} | 42 | * key:角色编号 {@link SysRoleDO#getId()} |
| @@ -51,6 +45,12 @@ public class SysRoleServiceImpl implements SysRoleService { | @@ -51,6 +45,12 @@ public class SysRoleServiceImpl implements SysRoleService { | ||
| 51 | */ | 45 | */ |
| 52 | private volatile Map<Long, SysRoleDO> roleCache; | 46 | private volatile Map<Long, SysRoleDO> roleCache; |
| 53 | 47 | ||
| 48 | + @Resource | ||
| 49 | + private SysPermissionService permissionService; | ||
| 50 | + | ||
| 51 | + @Resource | ||
| 52 | + private SysRoleMapper roleMapper; | ||
| 53 | + | ||
| 54 | /** | 54 | /** |
| 55 | * 初始化 {@link #roleCache} 缓存 | 55 | * 初始化 {@link #roleCache} 缓存 |
| 56 | */ | 56 | */ |
src/main/java/cn/iocoder/dashboard/modules/system/service/user/SysUserService.java
| 1 | package cn.iocoder.dashboard.modules.system.service.user; | 1 | package cn.iocoder.dashboard.modules.system.service.user; |
| 2 | 2 | ||
| 3 | +import cn.iocoder.dashboard.common.pojo.PageResult; | ||
| 4 | +import cn.iocoder.dashboard.modules.system.controller.user.vo.user.SysUserPageReqVO; | ||
| 3 | import cn.iocoder.dashboard.modules.system.dal.mysql.dataobject.user.SysUserDO; | 5 | import cn.iocoder.dashboard.modules.system.dal.mysql.dataobject.user.SysUserDO; |
| 4 | 6 | ||
| 5 | /** | 7 | /** |
| 6 | * 用户 Service 接口 | 8 | * 用户 Service 接口 |
| 7 | * | 9 | * |
| 8 | - * @author ruoyi | 10 | + * @author 芋道源码 |
| 9 | */ | 11 | */ |
| 10 | public interface SysUserService { | 12 | public interface SysUserService { |
| 11 | // /** | 13 | // /** |
| @@ -32,6 +34,14 @@ public interface SysUserService { | @@ -32,6 +34,14 @@ public interface SysUserService { | ||
| 32 | */ | 34 | */ |
| 33 | SysUserDO getUser(Long userId); | 35 | SysUserDO getUser(Long userId); |
| 34 | 36 | ||
| 37 | + /** | ||
| 38 | + * 获得用户分页列表 | ||
| 39 | + * | ||
| 40 | + * @param reqVO 分页条件 | ||
| 41 | + * @return 分页列表 | ||
| 42 | + */ | ||
| 43 | + PageResult<SysUserDO> pageUsers(SysUserPageReqVO reqVO); | ||
| 44 | + | ||
| 35 | // | 45 | // |
| 36 | // /** | 46 | // /** |
| 37 | // * 根据用户ID查询用户所属角色组 | 47 | // * 根据用户ID查询用户所属角色组 |
src/main/java/cn/iocoder/dashboard/modules/system/service/user/SysUserServiceImpl.java
| 1 | package cn.iocoder.dashboard.modules.system.service.user; | 1 | package cn.iocoder.dashboard.modules.system.service.user; |
| 2 | 2 | ||
| 3 | +import cn.iocoder.dashboard.common.pojo.PageResult; | ||
| 4 | +import cn.iocoder.dashboard.modules.system.controller.user.vo.user.SysUserPageReqVO; | ||
| 5 | +import cn.iocoder.dashboard.modules.system.convert.user.SysUserConvert; | ||
| 3 | import cn.iocoder.dashboard.modules.system.dal.mysql.dao.user.SysUserMapper; | 6 | import cn.iocoder.dashboard.modules.system.dal.mysql.dao.user.SysUserMapper; |
| 7 | +import cn.iocoder.dashboard.modules.system.dal.mysql.dataobject.dept.SysDeptDO; | ||
| 4 | import cn.iocoder.dashboard.modules.system.dal.mysql.dataobject.user.SysUserDO; | 8 | import cn.iocoder.dashboard.modules.system.dal.mysql.dataobject.user.SysUserDO; |
| 9 | +import cn.iocoder.dashboard.modules.system.service.dept.SysDeptService; | ||
| 10 | +import cn.iocoder.dashboard.util.collection.CollectionUtils; | ||
| 5 | import lombok.extern.slf4j.Slf4j; | 11 | import lombok.extern.slf4j.Slf4j; |
| 6 | import org.springframework.stereotype.Service; | 12 | import org.springframework.stereotype.Service; |
| 7 | 13 | ||
| 8 | import javax.annotation.Resource; | 14 | import javax.annotation.Resource; |
| 15 | +import java.util.Collections; | ||
| 16 | +import java.util.List; | ||
| 9 | 17 | ||
| 10 | 18 | ||
| 11 | /** | 19 | /** |
| 12 | - * 用户 业务层处理 | 20 | + * 用户 Service 实现类 |
| 13 | * | 21 | * |
| 14 | - * @author ruoyi | 22 | + * @author 芋道源码 |
| 15 | */ | 23 | */ |
| 16 | @Service | 24 | @Service |
| 17 | @Slf4j | 25 | @Slf4j |
| @@ -20,6 +28,9 @@ public class SysUserServiceImpl implements SysUserService { | @@ -20,6 +28,9 @@ public class SysUserServiceImpl implements SysUserService { | ||
| 20 | @Resource | 28 | @Resource |
| 21 | private SysUserMapper userMapper; | 29 | private SysUserMapper userMapper; |
| 22 | 30 | ||
| 31 | + @Resource | ||
| 32 | + private SysDeptService deptService; | ||
| 33 | + | ||
| 23 | // @Autowired | 34 | // @Autowired |
| 24 | // private SysUserMapper userMapper; | 35 | // private SysUserMapper userMapper; |
| 25 | // | 36 | // |
| @@ -61,6 +72,19 @@ public class SysUserServiceImpl implements SysUserService { | @@ -61,6 +72,19 @@ public class SysUserServiceImpl implements SysUserService { | ||
| 61 | return userMapper.selectById(userId); | 72 | return userMapper.selectById(userId); |
| 62 | } | 73 | } |
| 63 | 74 | ||
| 75 | + @Override | ||
| 76 | + public PageResult<SysUserDO> pageUsers(SysUserPageReqVO reqVO) { | ||
| 77 | + // 处理部门查询条件 | ||
| 78 | + List<Long> deptIds = Collections.emptyList(); | ||
| 79 | + if (reqVO.getDeptId() != null) { | ||
| 80 | + deptIds = CollectionUtils.convertList(deptService.listDeptsByParentIdFromCache(reqVO.getDeptId(), true), | ||
| 81 | + SysDeptDO::getId); | ||
| 82 | + deptIds.add(reqVO.getDeptId()); | ||
| 83 | + } | ||
| 84 | + // 执行查询 | ||
| 85 | + return SysUserConvert.INSTANCE.convertPage(userMapper.selectList(reqVO, deptIds)); | ||
| 86 | + } | ||
| 87 | + | ||
| 64 | // /** | 88 | // /** |
| 65 | // * 通过用户ID查询用户 | 89 | // * 通过用户ID查询用户 |
| 66 | // * | 90 | // * |