SysUserServiceImpl.java 17 KB

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