SysUserServiceImpl.java 13 KB

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