SysUserServiceImpl.java 18 KB

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