SysUserServiceImpl.java 15 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541
  1. package com.ruoyi.system.service.impl;
  2. import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
  3. import com.ruoyi.common.annotation.DataScope;
  4. import com.ruoyi.common.constant.UserConstants;
  5. import com.ruoyi.common.core.domain.entity.SysRole;
  6. import com.ruoyi.common.core.domain.entity.SysUser;
  7. import com.ruoyi.common.exception.ServiceException;
  8. import com.ruoyi.common.utils.SecurityUtils;
  9. import com.ruoyi.common.utils.StringUtils;
  10. import com.ruoyi.common.utils.bean.BeanValidators;
  11. import com.ruoyi.common.utils.spring.SpringUtils;
  12. import com.ruoyi.system.domain.SysPost;
  13. import com.ruoyi.system.domain.SysUserPost;
  14. import com.ruoyi.system.domain.SysUserRole;
  15. import com.ruoyi.system.mapper.*;
  16. import com.ruoyi.system.service.ISysConfigService;
  17. import com.ruoyi.system.service.ISysUserService;
  18. import org.slf4j.Logger;
  19. import org.slf4j.LoggerFactory;
  20. import org.springframework.beans.factory.annotation.Autowired;
  21. import org.springframework.stereotype.Service;
  22. import org.springframework.transaction.annotation.Transactional;
  23. import org.springframework.util.CollectionUtils;
  24. import javax.validation.Validator;
  25. import java.util.ArrayList;
  26. import java.util.List;
  27. import java.util.stream.Collectors;
  28. /**
  29. * 用户 业务层处理
  30. *
  31. * @author ruoyi
  32. */
  33. @Service
  34. public class SysUserServiceImpl extends ServiceImpl<SysUserMapper, SysUser> implements ISysUserService {
  35. private static final Logger log = LoggerFactory.getLogger(SysUserServiceImpl.class);
  36. @Autowired
  37. private SysUserMapper userMapper;
  38. @Autowired
  39. private SysRoleMapper roleMapper;
  40. @Autowired
  41. private SysPostMapper postMapper;
  42. @Autowired
  43. private SysUserRoleMapper userRoleMapper;
  44. @Autowired
  45. private SysUserPostMapper userPostMapper;
  46. @Autowired
  47. private ISysConfigService configService;
  48. @Autowired
  49. protected Validator validator;
  50. /**
  51. * 根据条件分页查询用户列表
  52. *
  53. * @param user 用户信息
  54. * @return 用户信息集合信息
  55. */
  56. @Override
  57. @DataScope(deptAlias = "d", userAlias = "u")
  58. public List<SysUser> selectUserList(SysUser user)
  59. {
  60. return userMapper.selectUserList(user);
  61. }
  62. /**
  63. * 根据条件分页查询已分配用户角色列表
  64. *
  65. * @param user 用户信息
  66. * @return 用户信息集合信息
  67. */
  68. @Override
  69. @DataScope(deptAlias = "d", userAlias = "u")
  70. public List<SysUser> selectAllocatedList(SysUser user)
  71. {
  72. return userMapper.selectAllocatedList(user);
  73. }
  74. /**
  75. * 根据条件分页查询未分配用户角色列表
  76. *
  77. * @param user 用户信息
  78. * @return 用户信息集合信息
  79. */
  80. @Override
  81. @DataScope(deptAlias = "d", userAlias = "u")
  82. public List<SysUser> selectUnallocatedList(SysUser user)
  83. {
  84. return userMapper.selectUnallocatedList(user);
  85. }
  86. /**
  87. * 通过用户名查询用户
  88. *
  89. * @param userName 用户名
  90. * @return 用户对象信息
  91. */
  92. @Override
  93. public SysUser selectUserByUserName(String userName)
  94. {
  95. return userMapper.selectUserByUserName(userName);
  96. }
  97. /**
  98. * 通过用户ID查询用户
  99. *
  100. * @param userId 用户ID
  101. * @return 用户对象信息
  102. */
  103. @Override
  104. public SysUser selectUserById(Long userId)
  105. {
  106. return userMapper.selectUserById(userId);
  107. }
  108. /**
  109. * 查询用户所属角色组
  110. *
  111. * @param userName 用户名
  112. * @return 结果
  113. */
  114. @Override
  115. public String selectUserRoleGroup(String userName)
  116. {
  117. List<SysRole> list = roleMapper.selectRolesByUserName(userName);
  118. if (CollectionUtils.isEmpty(list))
  119. {
  120. return StringUtils.EMPTY;
  121. }
  122. return list.stream().map(SysRole::getRoleName).collect(Collectors.joining(","));
  123. }
  124. /**
  125. * 查询用户所属岗位组
  126. *
  127. * @param userName 用户名
  128. * @return 结果
  129. */
  130. @Override
  131. public String selectUserPostGroup(String userName)
  132. {
  133. List<SysPost> list = postMapper.selectPostsByUserName(userName);
  134. if (CollectionUtils.isEmpty(list))
  135. {
  136. return StringUtils.EMPTY;
  137. }
  138. return list.stream().map(SysPost::getPostName).collect(Collectors.joining(","));
  139. }
  140. /**
  141. * 校验用户名称是否唯一
  142. *
  143. * @param user 用户信息
  144. * @return 结果
  145. */
  146. @Override
  147. public boolean checkUserNameUnique(SysUser user)
  148. {
  149. Long userId = StringUtils.isNull(user.getUserId()) ? -1L : user.getUserId();
  150. SysUser info = userMapper.checkUserNameUnique(user.getUserName());
  151. if (StringUtils.isNotNull(info) && info.getUserId().longValue() != userId.longValue())
  152. {
  153. return UserConstants.NOT_UNIQUE;
  154. }
  155. return UserConstants.UNIQUE;
  156. }
  157. /**
  158. * 校验手机号码是否唯一
  159. *
  160. * @param user 用户信息
  161. * @return
  162. */
  163. @Override
  164. public boolean checkPhoneUnique(SysUser user)
  165. {
  166. Long userId = StringUtils.isNull(user.getUserId()) ? -1L : user.getUserId();
  167. SysUser info = userMapper.checkPhoneUnique(user.getPhonenumber());
  168. if (StringUtils.isNotNull(info) && info.getUserId().longValue() != userId.longValue())
  169. {
  170. return UserConstants.NOT_UNIQUE;
  171. }
  172. return UserConstants.UNIQUE;
  173. }
  174. /**
  175. * 校验email是否唯一
  176. *
  177. * @param user 用户信息
  178. * @return
  179. */
  180. @Override
  181. public boolean checkEmailUnique(SysUser user)
  182. {
  183. Long userId = StringUtils.isNull(user.getUserId()) ? -1L : user.getUserId();
  184. SysUser info = userMapper.checkEmailUnique(user.getEmail());
  185. if (StringUtils.isNotNull(info) && info.getUserId().longValue() != userId.longValue())
  186. {
  187. return UserConstants.NOT_UNIQUE;
  188. }
  189. return UserConstants.UNIQUE;
  190. }
  191. /**
  192. * 校验用户是否允许操作
  193. *
  194. * @param user 用户信息
  195. */
  196. @Override
  197. public void checkUserAllowed(SysUser user)
  198. {
  199. if (StringUtils.isNotNull(user.getUserId()) && user.isAdmin())
  200. {
  201. throw new ServiceException("不允许操作超级管理员用户");
  202. }
  203. }
  204. /**
  205. * 校验用户是否有数据权限
  206. *
  207. * @param userId 用户id
  208. */
  209. @Override
  210. public void checkUserDataScope(Long userId)
  211. {
  212. if (!SysUser.isAdmin(SecurityUtils.getUserId()))
  213. {
  214. SysUser user = new SysUser();
  215. user.setUserId(userId);
  216. List<SysUser> users = SpringUtils.getAopProxy(this).selectUserList(user);
  217. if (StringUtils.isEmpty(users))
  218. {
  219. throw new ServiceException("没有权限访问用户数据!");
  220. }
  221. }
  222. }
  223. /**
  224. * 新增保存用户信息
  225. *
  226. * @param user 用户信息
  227. * @return 结果
  228. */
  229. @Override
  230. @Transactional
  231. public int insertUser(SysUser user)
  232. {
  233. // 新增用户信息
  234. int rows = userMapper.insertUser(user);
  235. // 新增用户岗位关联
  236. insertUserPost(user);
  237. // 新增用户与角色管理
  238. insertUserRole(user);
  239. return rows;
  240. }
  241. /**
  242. * 注册用户信息
  243. *
  244. * @param user 用户信息
  245. * @return 结果
  246. */
  247. @Override
  248. public boolean registerUser(SysUser user)
  249. {
  250. return userMapper.insertUser(user) > 0;
  251. }
  252. /**
  253. * 修改保存用户信息
  254. *
  255. * @param user 用户信息
  256. * @return 结果
  257. */
  258. @Override
  259. @Transactional
  260. public int updateUser(SysUser user)
  261. {
  262. Long userId = user.getUserId();
  263. // 删除用户与角色关联
  264. userRoleMapper.deleteUserRoleByUserId(userId);
  265. // 新增用户与角色管理
  266. insertUserRole(user);
  267. // 删除用户与岗位关联
  268. userPostMapper.deleteUserPostByUserId(userId);
  269. // 新增用户与岗位管理
  270. insertUserPost(user);
  271. return userMapper.updateUser(user);
  272. }
  273. /**
  274. * 用户授权角色
  275. *
  276. * @param userId 用户ID
  277. * @param roleIds 角色组
  278. */
  279. @Override
  280. @Transactional
  281. public void insertUserAuth(Long userId, Long[] roleIds)
  282. {
  283. userRoleMapper.deleteUserRoleByUserId(userId);
  284. insertUserRole(userId, roleIds);
  285. }
  286. /**
  287. * 修改用户状态
  288. *
  289. * @param user 用户信息
  290. * @return 结果
  291. */
  292. @Override
  293. public int updateUserStatus(SysUser user)
  294. {
  295. return userMapper.updateUser(user);
  296. }
  297. /**
  298. * 修改用户基本信息
  299. *
  300. * @param user 用户信息
  301. * @return 结果
  302. */
  303. @Override
  304. public int updateUserProfile(SysUser user)
  305. {
  306. return userMapper.updateUser(user);
  307. }
  308. /**
  309. * 修改用户头像
  310. *
  311. * @param userName 用户名
  312. * @param avatar 头像地址
  313. * @return 结果
  314. */
  315. @Override
  316. public boolean updateUserAvatar(String userName, String avatar)
  317. {
  318. return userMapper.updateUserAvatar(userName, avatar) > 0;
  319. }
  320. /**
  321. * 重置用户密码
  322. *
  323. * @param user 用户信息
  324. * @return 结果
  325. */
  326. @Override
  327. public int resetPwd(SysUser user)
  328. {
  329. return userMapper.updateUser(user);
  330. }
  331. /**
  332. * 重置用户密码
  333. *
  334. * @param userName 用户名
  335. * @param password 密码
  336. * @return 结果
  337. */
  338. @Override
  339. public int resetUserPwd(String userName, String password)
  340. {
  341. return userMapper.resetUserPwd(userName, password);
  342. }
  343. /**
  344. * 新增用户角色信息
  345. *
  346. * @param user 用户对象
  347. */
  348. public void insertUserRole(SysUser user)
  349. {
  350. this.insertUserRole(user.getUserId(), user.getRoleIds());
  351. }
  352. /**
  353. * 新增用户岗位信息
  354. *
  355. * @param user 用户对象
  356. */
  357. public void insertUserPost(SysUser user)
  358. {
  359. Long[] posts = user.getPostIds();
  360. if (StringUtils.isNotEmpty(posts))
  361. {
  362. // 新增用户与岗位管理
  363. List<SysUserPost> list = new ArrayList<SysUserPost>(posts.length);
  364. for (Long postId : posts)
  365. {
  366. SysUserPost up = new SysUserPost();
  367. up.setUserId(user.getUserId());
  368. up.setPostId(postId);
  369. list.add(up);
  370. }
  371. userPostMapper.batchUserPost(list);
  372. }
  373. }
  374. /**
  375. * 新增用户角色信息
  376. *
  377. * @param userId 用户ID
  378. * @param roleIds 角色组
  379. */
  380. public void insertUserRole(Long userId, Long[] roleIds)
  381. {
  382. if (StringUtils.isNotEmpty(roleIds))
  383. {
  384. // 新增用户与角色管理
  385. List<SysUserRole> list = new ArrayList<SysUserRole>(roleIds.length);
  386. for (Long roleId : roleIds)
  387. {
  388. SysUserRole ur = new SysUserRole();
  389. ur.setUserId(userId);
  390. ur.setRoleId(roleId);
  391. list.add(ur);
  392. }
  393. userRoleMapper.batchUserRole(list);
  394. }
  395. }
  396. /**
  397. * 通过用户ID删除用户
  398. *
  399. * @param userId 用户ID
  400. * @return 结果
  401. */
  402. @Override
  403. @Transactional
  404. public int deleteUserById(Long userId)
  405. {
  406. // 删除用户与角色关联
  407. userRoleMapper.deleteUserRoleByUserId(userId);
  408. // 删除用户与岗位表
  409. userPostMapper.deleteUserPostByUserId(userId);
  410. return userMapper.deleteUserById(userId);
  411. }
  412. /**
  413. * 批量删除用户信息
  414. *
  415. * @param userIds 需要删除的用户ID
  416. * @return 结果
  417. */
  418. @Override
  419. @Transactional
  420. public int deleteUserByIds(Long[] userIds)
  421. {
  422. for (Long userId : userIds)
  423. {
  424. checkUserAllowed(new SysUser(userId));
  425. checkUserDataScope(userId);
  426. }
  427. // 删除用户与角色关联
  428. userRoleMapper.deleteUserRole(userIds);
  429. // 删除用户与岗位关联
  430. userPostMapper.deleteUserPost(userIds);
  431. return userMapper.deleteUserByIds(userIds);
  432. }
  433. /**
  434. * 导入用户数据
  435. *
  436. * @param userList 用户数据列表
  437. * @param isUpdateSupport 是否更新支持,如果已存在,则进行更新数据
  438. * @param operName 操作用户
  439. * @return 结果
  440. */
  441. @Override
  442. public String importUser(List<SysUser> userList, Boolean isUpdateSupport, String operName)
  443. {
  444. if (StringUtils.isNull(userList) || userList.size() == 0)
  445. {
  446. throw new ServiceException("导入用户数据不能为空!");
  447. }
  448. int successNum = 0;
  449. int failureNum = 0;
  450. StringBuilder successMsg = new StringBuilder();
  451. StringBuilder failureMsg = new StringBuilder();
  452. String password = configService.selectConfigByKey("sys.user.initPassword");
  453. for (SysUser user : userList)
  454. {
  455. try
  456. {
  457. // 验证是否存在这个用户
  458. SysUser u = userMapper.selectUserByUserName(user.getUserName());
  459. if (StringUtils.isNull(u))
  460. {
  461. BeanValidators.validateWithException(validator, user);
  462. user.setPassword(SecurityUtils.encryptPassword(password));
  463. user.setCreateBy(operName);
  464. this.insertUser(user);
  465. successNum++;
  466. successMsg.append("<br/>" + successNum + "、账号 " + user.getUserName() + " 导入成功");
  467. }
  468. else if (isUpdateSupport)
  469. {
  470. BeanValidators.validateWithException(validator, user);
  471. checkUserAllowed(user);
  472. checkUserDataScope(user.getUserId());
  473. user.setUpdateBy(operName);
  474. this.updateUser(user);
  475. successNum++;
  476. successMsg.append("<br/>" + successNum + "、账号 " + user.getUserName() + " 更新成功");
  477. }
  478. else
  479. {
  480. failureNum++;
  481. failureMsg.append("<br/>" + failureNum + "、账号 " + user.getUserName() + " 已存在");
  482. }
  483. }
  484. catch (Exception e)
  485. {
  486. failureNum++;
  487. String msg = "<br/>" + failureNum + "、账号 " + user.getUserName() + " 导入失败:";
  488. failureMsg.append(msg + e.getMessage());
  489. log.error(msg, e);
  490. }
  491. }
  492. if (failureNum > 0)
  493. {
  494. failureMsg.insert(0, "很抱歉,导入失败!共 " + failureNum + " 条数据格式不正确,错误如下:");
  495. throw new ServiceException(failureMsg.toString());
  496. }
  497. else
  498. {
  499. successMsg.insert(0, "恭喜您,数据已全部导入成功!共 " + successNum + " 条,数据如下:");
  500. }
  501. return successMsg.toString();
  502. }
  503. }