SysUserServiceImpl.java 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451
  1. package com.ruoyi.system.service.impl;
  2. import cn.hutool.core.collection.CollUtil;
  3. import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
  4. import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
  5. import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
  6. import com.ruoyi.common.constant.UserConstants;
  7. import com.ruoyi.common.core.domain.PageQuery;
  8. import com.ruoyi.common.core.domain.entity.SysRole;
  9. import com.ruoyi.common.core.domain.entity.SysUser;
  10. import com.ruoyi.common.core.page.TableDataInfo;
  11. import com.ruoyi.common.core.service.UserService;
  12. import com.ruoyi.common.exception.ServiceException;
  13. import com.ruoyi.common.utils.LoginUtils;
  14. import com.ruoyi.common.utils.SecurityUtils;
  15. import com.ruoyi.common.utils.StringUtils;
  16. import com.ruoyi.common.utils.spring.SpringUtils;
  17. import com.ruoyi.system.domain.SysPost;
  18. import com.ruoyi.system.domain.SysUserPost;
  19. import com.ruoyi.system.domain.SysUserRole;
  20. import com.ruoyi.system.mapper.*;
  21. import com.ruoyi.system.service.ISysUserService;
  22. import lombok.RequiredArgsConstructor;
  23. import lombok.extern.slf4j.Slf4j;
  24. import org.springframework.stereotype.Service;
  25. import org.springframework.transaction.annotation.Transactional;
  26. import java.util.ArrayList;
  27. import java.util.Arrays;
  28. import java.util.List;
  29. import java.util.stream.Collectors;
  30. /**
  31. * 用户 业务层处理
  32. *
  33. * @author Lion Li
  34. */
  35. @Slf4j
  36. @RequiredArgsConstructor
  37. @Service
  38. public class SysUserServiceImpl implements ISysUserService, UserService {
  39. private final SysUserMapper baseMapper;
  40. private final SysRoleMapper roleMapper;
  41. private final SysPostMapper postMapper;
  42. private final SysUserRoleMapper userRoleMapper;
  43. private final SysUserPostMapper userPostMapper;
  44. @Override
  45. public TableDataInfo<SysUser> selectPageUserList(SysUser user, PageQuery pageQuery) {
  46. Page<SysUser> page = baseMapper.selectPageUserList(pageQuery.build(), user);
  47. return TableDataInfo.build(page);
  48. }
  49. /**
  50. * 根据条件分页查询用户列表
  51. *
  52. * @param user 用户信息
  53. * @return 用户信息集合信息
  54. */
  55. @Override
  56. public List<SysUser> selectUserList(SysUser user) {
  57. return baseMapper.selectUserList(user);
  58. }
  59. /**
  60. * 根据条件分页查询已分配用户角色列表
  61. *
  62. * @param user 用户信息
  63. * @return 用户信息集合信息
  64. */
  65. @Override
  66. public TableDataInfo<SysUser> selectAllocatedList(SysUser user, PageQuery pageQuery) {
  67. Page<SysUser> page = baseMapper.selectAllocatedList(pageQuery.build(), user);
  68. return TableDataInfo.build(page);
  69. }
  70. /**
  71. * 根据条件分页查询未分配用户角色列表
  72. *
  73. * @param user 用户信息
  74. * @return 用户信息集合信息
  75. */
  76. @Override
  77. public TableDataInfo<SysUser> selectUnallocatedList(SysUser user, PageQuery pageQuery) {
  78. Page<SysUser> page = baseMapper.selectUnallocatedList(pageQuery.build(), user);
  79. return TableDataInfo.build(page);
  80. }
  81. /**
  82. * 通过用户名查询用户
  83. *
  84. * @param userName 用户名
  85. * @return 用户对象信息
  86. */
  87. @Override
  88. public SysUser selectUserByUserName(String userName) {
  89. return baseMapper.selectUserByUserName(userName);
  90. }
  91. /**
  92. * 通过用户ID查询用户
  93. *
  94. * @param userId 用户ID
  95. * @return 用户对象信息
  96. */
  97. @Override
  98. public SysUser selectUserById(Long userId) {
  99. return baseMapper.selectUserById(userId);
  100. }
  101. /**
  102. * 查询用户所属角色组
  103. *
  104. * @param userName 用户名
  105. * @return 结果
  106. */
  107. @Override
  108. public String selectUserRoleGroup(String userName) {
  109. List<SysRole> list = roleMapper.selectRolesByUserName(userName);
  110. if (CollUtil.isEmpty(list)) {
  111. return StringUtils.EMPTY;
  112. }
  113. return list.stream().map(SysRole::getRoleName).collect(Collectors.joining(","));
  114. }
  115. /**
  116. * 查询用户所属岗位组
  117. *
  118. * @param userName 用户名
  119. * @return 结果
  120. */
  121. @Override
  122. public String selectUserPostGroup(String userName) {
  123. List<SysPost> list = postMapper.selectPostsByUserName(userName);
  124. if (CollUtil.isEmpty(list)) {
  125. return StringUtils.EMPTY;
  126. }
  127. return list.stream().map(SysPost::getPostName).collect(Collectors.joining(","));
  128. }
  129. /**
  130. * 校验用户名称是否唯一
  131. *
  132. * @param userName 用户名称
  133. * @return 结果
  134. */
  135. @Override
  136. public String checkUserNameUnique(String userName) {
  137. long count = baseMapper.selectCount(new LambdaQueryWrapper<SysUser>().eq(SysUser::getUserName, userName));
  138. if (count > 0) {
  139. return UserConstants.NOT_UNIQUE;
  140. }
  141. return UserConstants.UNIQUE;
  142. }
  143. /**
  144. * 校验手机号码是否唯一
  145. *
  146. * @param user 用户信息
  147. * @return
  148. */
  149. @Override
  150. public String checkPhoneUnique(SysUser user) {
  151. Long userId = StringUtils.isNull(user.getUserId()) ? -1L : user.getUserId();
  152. boolean count = baseMapper.exists(new LambdaQueryWrapper<SysUser>()
  153. .eq(SysUser::getPhonenumber, user.getPhonenumber())
  154. .ne(SysUser::getUserId, userId));
  155. if (count) {
  156. return UserConstants.NOT_UNIQUE;
  157. }
  158. return UserConstants.UNIQUE;
  159. }
  160. /**
  161. * 校验email是否唯一
  162. *
  163. * @param user 用户信息
  164. * @return
  165. */
  166. @Override
  167. public String checkEmailUnique(SysUser user) {
  168. Long userId = StringUtils.isNull(user.getUserId()) ? -1L : user.getUserId();
  169. boolean count = baseMapper.exists(new LambdaQueryWrapper<SysUser>()
  170. .eq(SysUser::getEmail, user.getEmail())
  171. .ne(SysUser::getUserId, userId));
  172. if (count) {
  173. return UserConstants.NOT_UNIQUE;
  174. }
  175. return UserConstants.UNIQUE;
  176. }
  177. /**
  178. * 校验用户是否允许操作
  179. *
  180. * @param user 用户信息
  181. */
  182. @Override
  183. public void checkUserAllowed(SysUser user) {
  184. if (StringUtils.isNotNull(user.getUserId()) && user.isAdmin()) {
  185. throw new ServiceException("不允许操作超级管理员用户");
  186. }
  187. }
  188. /**
  189. * 校验用户是否有数据权限
  190. *
  191. * @param userId 用户id
  192. */
  193. @Override
  194. public void checkUserDataScope(Long userId) {
  195. if (!SysUser.isAdmin(LoginUtils.getUserId())) {
  196. SysUser user = new SysUser();
  197. user.setUserId(userId);
  198. List<SysUser> users = SpringUtils.getAopProxy(this).selectUserList(user);
  199. if (StringUtils.isEmpty(users)) {
  200. throw new ServiceException("没有权限访问用户数据!");
  201. }
  202. }
  203. }
  204. /**
  205. * 新增保存用户信息
  206. *
  207. * @param user 用户信息
  208. * @return 结果
  209. */
  210. @Override
  211. @Transactional(rollbackFor = Exception.class)
  212. public int insertUser(SysUser user) {
  213. // 新增用户信息
  214. int rows = baseMapper.insert(user);
  215. // 新增用户岗位关联
  216. insertUserPost(user);
  217. // 新增用户与角色管理
  218. insertUserRole(user);
  219. return rows;
  220. }
  221. /**
  222. * 注册用户信息
  223. *
  224. * @param user 用户信息
  225. * @return 结果
  226. */
  227. @Override
  228. public boolean registerUser(SysUser user) {
  229. return baseMapper.insert(user) > 0;
  230. }
  231. /**
  232. * 修改保存用户信息
  233. *
  234. * @param user 用户信息
  235. * @return 结果
  236. */
  237. @Override
  238. @Transactional(rollbackFor = Exception.class)
  239. public int updateUser(SysUser user) {
  240. Long userId = user.getUserId();
  241. // 删除用户与角色关联
  242. userRoleMapper.delete(new LambdaQueryWrapper<SysUserRole>().eq(SysUserRole::getUserId, userId));
  243. // 新增用户与角色管理
  244. insertUserRole(user);
  245. // 删除用户与岗位关联
  246. userPostMapper.delete(new LambdaQueryWrapper<SysUserPost>().eq(SysUserPost::getUserId, userId));
  247. // 新增用户与岗位管理
  248. insertUserPost(user);
  249. return baseMapper.updateById(user);
  250. }
  251. /**
  252. * 用户授权角色
  253. *
  254. * @param userId 用户ID
  255. * @param roleIds 角色组
  256. */
  257. @Override
  258. @Transactional(rollbackFor = Exception.class)
  259. public void insertUserAuth(Long userId, Long[] roleIds) {
  260. userRoleMapper.delete(new LambdaQueryWrapper<SysUserRole>()
  261. .eq(SysUserRole::getUserId, userId));
  262. insertUserRole(userId, roleIds);
  263. }
  264. /**
  265. * 修改用户状态
  266. *
  267. * @param user 用户信息
  268. * @return 结果
  269. */
  270. @Override
  271. public int updateUserStatus(SysUser user) {
  272. return baseMapper.updateById(user);
  273. }
  274. /**
  275. * 修改用户基本信息
  276. *
  277. * @param user 用户信息
  278. * @return 结果
  279. */
  280. @Override
  281. public int updateUserProfile(SysUser user) {
  282. return baseMapper.updateById(user);
  283. }
  284. /**
  285. * 修改用户头像
  286. *
  287. * @param userName 用户名
  288. * @param avatar 头像地址
  289. * @return 结果
  290. */
  291. @Override
  292. public boolean updateUserAvatar(String userName, String avatar) {
  293. return baseMapper.update(null,
  294. new LambdaUpdateWrapper<SysUser>()
  295. .set(SysUser::getAvatar, avatar)
  296. .eq(SysUser::getUserName, userName)) > 0;
  297. }
  298. /**
  299. * 重置用户密码
  300. *
  301. * @param user 用户信息
  302. * @return 结果
  303. */
  304. @Override
  305. public int resetPwd(SysUser user) {
  306. return baseMapper.updateById(user);
  307. }
  308. /**
  309. * 重置用户密码
  310. *
  311. * @param userName 用户名
  312. * @param password 密码
  313. * @return 结果
  314. */
  315. @Override
  316. public int resetUserPwd(String userName, String password) {
  317. return baseMapper.update(null,
  318. new LambdaUpdateWrapper<SysUser>()
  319. .set(SysUser::getPassword, password)
  320. .eq(SysUser::getUserName, userName));
  321. }
  322. /**
  323. * 新增用户角色信息
  324. *
  325. * @param user 用户对象
  326. */
  327. public void insertUserRole(SysUser user) {
  328. Long[] roles = user.getRoleIds();
  329. if (StringUtils.isNotNull(roles)) {
  330. // 新增用户与角色管理
  331. List<SysUserRole> list = new ArrayList<SysUserRole>();
  332. for (Long roleId : roles) {
  333. SysUserRole ur = new SysUserRole();
  334. ur.setUserId(user.getUserId());
  335. ur.setRoleId(roleId);
  336. list.add(ur);
  337. }
  338. if (list.size() > 0) {
  339. userRoleMapper.insertBatch(list);
  340. }
  341. }
  342. }
  343. /**
  344. * 新增用户岗位信息
  345. *
  346. * @param user 用户对象
  347. */
  348. public void insertUserPost(SysUser user) {
  349. Long[] posts = user.getPostIds();
  350. if (StringUtils.isNotNull(posts)) {
  351. // 新增用户与岗位管理
  352. List<SysUserPost> list = new ArrayList<SysUserPost>();
  353. for (Long postId : posts) {
  354. SysUserPost up = new SysUserPost();
  355. up.setUserId(user.getUserId());
  356. up.setPostId(postId);
  357. list.add(up);
  358. }
  359. if (list.size() > 0) {
  360. userPostMapper.insertBatch(list);
  361. }
  362. }
  363. }
  364. /**
  365. * 新增用户角色信息
  366. *
  367. * @param userId 用户ID
  368. * @param roleIds 角色组
  369. */
  370. public void insertUserRole(Long userId, Long[] roleIds) {
  371. if (StringUtils.isNotNull(roleIds)) {
  372. // 新增用户与角色管理
  373. List<SysUserRole> list = new ArrayList<SysUserRole>();
  374. for (Long roleId : roleIds) {
  375. SysUserRole ur = new SysUserRole();
  376. ur.setUserId(userId);
  377. ur.setRoleId(roleId);
  378. list.add(ur);
  379. }
  380. if (list.size() > 0) {
  381. userRoleMapper.insertBatch(list);
  382. }
  383. }
  384. }
  385. /**
  386. * 通过用户ID删除用户
  387. *
  388. * @param userId 用户ID
  389. * @return 结果
  390. */
  391. @Override
  392. @Transactional(rollbackFor = Exception.class)
  393. public int deleteUserById(Long userId) {
  394. // 删除用户与角色关联
  395. userRoleMapper.delete(new LambdaQueryWrapper<SysUserRole>().eq(SysUserRole::getUserId, userId));
  396. // 删除用户与岗位表
  397. userPostMapper.delete(new LambdaQueryWrapper<SysUserPost>().eq(SysUserPost::getUserId, userId));
  398. return baseMapper.deleteById(userId);
  399. }
  400. /**
  401. * 批量删除用户信息
  402. *
  403. * @param userIds 需要删除的用户ID
  404. * @return 结果
  405. */
  406. @Override
  407. @Transactional(rollbackFor = Exception.class)
  408. public int deleteUserByIds(Long[] userIds) {
  409. for (Long userId : userIds) {
  410. checkUserAllowed(new SysUser(userId));
  411. }
  412. List<Long> ids = Arrays.asList(userIds);
  413. // 删除用户与角色关联
  414. userRoleMapper.delete(new LambdaQueryWrapper<SysUserRole>().in(SysUserRole::getUserId, ids));
  415. // 删除用户与岗位表
  416. userPostMapper.delete(new LambdaQueryWrapper<SysUserPost>().in(SysUserPost::getUserId, ids));
  417. return baseMapper.deleteBatchIds(ids);
  418. }
  419. }