SysUserServiceImpl.java 16 KB

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