SysUserServiceImpl.java 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431
  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 com.ruoyi.common.annotation.DataScope;
  9. import com.ruoyi.common.constant.UserConstants;
  10. import com.ruoyi.common.exception.BusinessException;
  11. import com.ruoyi.common.support.Convert;
  12. import com.ruoyi.common.utils.Md5Utils;
  13. import com.ruoyi.common.utils.StringUtils;
  14. import com.ruoyi.system.domain.SysPost;
  15. import com.ruoyi.system.domain.SysRole;
  16. import com.ruoyi.system.domain.SysUser;
  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 SysUserPostMapper userPostMapper;
  43. @Autowired
  44. private SysUserRoleMapper userRoleMapper;
  45. @Autowired
  46. private ISysConfigService configService;
  47. /**
  48. * 根据条件分页查询用户对象
  49. *
  50. * @param user 用户信息
  51. *
  52. * @return 用户信息集合信息
  53. */
  54. @Override
  55. @DataScope(tableAlias = "u")
  56. public List<SysUser> selectUserList(SysUser user)
  57. {
  58. return userMapper.selectUserList(user);
  59. }
  60. /**
  61. * 通过用户名查询用户
  62. *
  63. * @param userName 用户名
  64. * @return 用户对象信息
  65. */
  66. @Override
  67. public SysUser selectUserByLoginName(String userName)
  68. {
  69. return userMapper.selectUserByLoginName(userName);
  70. }
  71. /**
  72. * 通过手机号码查询用户
  73. *
  74. * @param phoneNumber 手机号码
  75. * @return 用户对象信息
  76. */
  77. @Override
  78. public SysUser selectUserByPhoneNumber(String phoneNumber)
  79. {
  80. return userMapper.selectUserByPhoneNumber(phoneNumber);
  81. }
  82. /**
  83. * 通过邮箱查询用户
  84. *
  85. * @param email 邮箱
  86. * @return 用户对象信息
  87. */
  88. @Override
  89. public SysUser selectUserByEmail(String email)
  90. {
  91. return userMapper.selectUserByEmail(email);
  92. }
  93. /**
  94. * 通过用户ID查询用户
  95. *
  96. * @param userId 用户ID
  97. * @return 用户对象信息
  98. */
  99. @Override
  100. public SysUser selectUserById(Long userId)
  101. {
  102. return userMapper.selectUserById(userId);
  103. }
  104. /**
  105. * 通过用户ID删除用户
  106. *
  107. * @param userId 用户ID
  108. * @return 结果
  109. */
  110. @Override
  111. public int deleteUserById(Long userId)
  112. {
  113. // 删除用户与角色关联
  114. userRoleMapper.deleteUserRoleByUserId(userId);
  115. // 删除用户与岗位表
  116. userPostMapper.deleteUserPostByUserId(userId);
  117. return userMapper.deleteUserById(userId);
  118. }
  119. /**
  120. * 批量删除用户信息
  121. *
  122. * @param ids 需要删除的数据ID
  123. * @return 结果
  124. */
  125. @Override
  126. public int deleteUserByIds(String ids) throws BusinessException
  127. {
  128. Long[] userIds = Convert.toLongArray(ids);
  129. for (Long userId : userIds)
  130. {
  131. if (SysUser.isAdmin(userId))
  132. {
  133. throw new BusinessException("不允许删除超级管理员用户");
  134. }
  135. }
  136. return userMapper.deleteUserByIds(userIds);
  137. }
  138. /**
  139. * 新增保存用户信息
  140. *
  141. * @param user 用户信息
  142. * @return 结果
  143. */
  144. @Override
  145. public int insertUser(SysUser user)
  146. {
  147. // 新增用户信息
  148. int rows = userMapper.insertUser(user);
  149. // 新增用户岗位关联
  150. insertUserPost(user);
  151. // 新增用户与角色管理
  152. insertUserRole(user);
  153. return rows;
  154. }
  155. /**
  156. * 修改保存用户信息
  157. *
  158. * @param user 用户信息
  159. * @return 结果
  160. */
  161. @Override
  162. public int updateUser(SysUser user)
  163. {
  164. Long userId = user.getUserId();
  165. // 删除用户与角色关联
  166. userRoleMapper.deleteUserRoleByUserId(userId);
  167. // 新增用户与角色管理
  168. insertUserRole(user);
  169. // 删除用户与岗位关联
  170. userPostMapper.deleteUserPostByUserId(userId);
  171. // 新增用户与岗位管理
  172. insertUserPost(user);
  173. return userMapper.updateUser(user);
  174. }
  175. /**
  176. * 修改用户个人详细信息
  177. *
  178. * @param user 用户信息
  179. * @return 结果
  180. */
  181. @Override
  182. public int updateUserInfo(SysUser user)
  183. {
  184. return userMapper.updateUser(user);
  185. }
  186. /**
  187. * 修改用户密码
  188. *
  189. * @param user 用户信息
  190. * @return 结果
  191. */
  192. @Override
  193. public int resetUserPwd(SysUser user)
  194. {
  195. return updateUserInfo(user);
  196. }
  197. /**
  198. * 新增用户角色信息
  199. *
  200. * @param user 用户对象
  201. */
  202. public void insertUserRole(SysUser user)
  203. {
  204. Long[] roles = user.getRoleIds();
  205. if (StringUtils.isNotNull(roles))
  206. {
  207. // 新增用户与角色管理
  208. List<SysUserRole> list = new ArrayList<SysUserRole>();
  209. for (Long roleId : roles)
  210. {
  211. SysUserRole ur = new SysUserRole();
  212. ur.setUserId(user.getUserId());
  213. ur.setRoleId(roleId);
  214. list.add(ur);
  215. }
  216. if (list.size() > 0)
  217. {
  218. userRoleMapper.batchUserRole(list);
  219. }
  220. }
  221. }
  222. /**
  223. * 新增用户岗位信息
  224. *
  225. * @param user 用户对象
  226. */
  227. public void insertUserPost(SysUser user)
  228. {
  229. Long[] posts = user.getPostIds();
  230. if (StringUtils.isNotNull(posts))
  231. {
  232. // 新增用户与岗位管理
  233. List<SysUserPost> list = new ArrayList<SysUserPost>();
  234. for (Long postId : posts)
  235. {
  236. SysUserPost up = new SysUserPost();
  237. up.setUserId(user.getUserId());
  238. up.setPostId(postId);
  239. list.add(up);
  240. }
  241. if (list.size() > 0)
  242. {
  243. userPostMapper.batchUserPost(list);
  244. }
  245. }
  246. }
  247. /**
  248. * 校验用户名称是否唯一
  249. *
  250. * @param loginName 用户名
  251. * @return
  252. */
  253. @Override
  254. public String checkLoginNameUnique(String loginName)
  255. {
  256. int count = userMapper.checkLoginNameUnique(loginName);
  257. if (count > 0)
  258. {
  259. return UserConstants.USER_NAME_NOT_UNIQUE;
  260. }
  261. return UserConstants.USER_NAME_UNIQUE;
  262. }
  263. /**
  264. * 校验用户名称是否唯一
  265. *
  266. * @param user 用户信息
  267. * @return
  268. */
  269. @Override
  270. public String checkPhoneUnique(SysUser user)
  271. {
  272. Long userId = StringUtils.isNull(user.getUserId()) ? -1L : user.getUserId();
  273. SysUser info = userMapper.checkPhoneUnique(user.getPhonenumber());
  274. if (StringUtils.isNotNull(info) && info.getUserId().longValue() != userId.longValue())
  275. {
  276. return UserConstants.USER_PHONE_NOT_UNIQUE;
  277. }
  278. return UserConstants.USER_PHONE_UNIQUE;
  279. }
  280. /**
  281. * 校验email是否唯一
  282. *
  283. * @param user 用户信息
  284. * @return
  285. */
  286. @Override
  287. public String checkEmailUnique(SysUser user)
  288. {
  289. Long userId = StringUtils.isNull(user.getUserId()) ? -1L : user.getUserId();
  290. SysUser info = userMapper.checkEmailUnique(user.getEmail());
  291. if (StringUtils.isNotNull(info) && info.getUserId().longValue() != userId.longValue())
  292. {
  293. return UserConstants.USER_EMAIL_NOT_UNIQUE;
  294. }
  295. return UserConstants.USER_EMAIL_UNIQUE;
  296. }
  297. /**
  298. * 查询用户所属角色组
  299. *
  300. * @param userId 用户ID
  301. * @return 结果
  302. */
  303. @Override
  304. public String selectUserRoleGroup(Long userId)
  305. {
  306. List<SysRole> list = roleMapper.selectRolesByUserId(userId);
  307. StringBuffer idsStr = new StringBuffer();
  308. for (SysRole role : list)
  309. {
  310. idsStr.append(role.getRoleName()).append(",");
  311. }
  312. if (StringUtils.isNotEmpty(idsStr.toString()))
  313. {
  314. return idsStr.substring(0, idsStr.length() - 1);
  315. }
  316. return idsStr.toString();
  317. }
  318. /**
  319. * 查询用户所属岗位组
  320. *
  321. * @param userId 用户ID
  322. * @return 结果
  323. */
  324. @Override
  325. public String selectUserPostGroup(Long userId)
  326. {
  327. List<SysPost> list = postMapper.selectPostsByUserId(userId);
  328. StringBuffer idsStr = new StringBuffer();
  329. for (SysPost post : list)
  330. {
  331. idsStr.append(post.getPostName()).append(",");
  332. }
  333. if (StringUtils.isNotEmpty(idsStr.toString()))
  334. {
  335. return idsStr.substring(0, idsStr.length() - 1);
  336. }
  337. return idsStr.toString();
  338. }
  339. /**
  340. * 导入用户数据
  341. *
  342. * @param userList 用户数据列表
  343. * @param isUpdateSupport 是否更新支持,如果已存在,则进行更新数据
  344. * @param operName 操作用户
  345. * @return 结果
  346. */
  347. public String importUser(List<SysUser> userList, Boolean isUpdateSupport, String operName)
  348. {
  349. if (StringUtils.isNull(userList) || userList.size() == 0)
  350. {
  351. throw new BusinessException("导入用户数据不能为空!");
  352. }
  353. int successNum = 0;
  354. int failureNum = 0;
  355. StringBuilder successMsg = new StringBuilder();
  356. StringBuilder failureMsg = new StringBuilder();
  357. String password = configService.selectConfigByKey("sys.user.initPassword");
  358. for (SysUser user : userList)
  359. {
  360. try
  361. {
  362. // 验证是否存在这个用户
  363. SysUser u = userMapper.selectUserByLoginName(user.getLoginName());
  364. if (StringUtils.isNull(u))
  365. {
  366. user.setPassword(Md5Utils.hash(user.getLoginName() + password));
  367. user.setCreateBy(operName);
  368. this.insertUser(user);
  369. successNum++;
  370. successMsg.append("<br/>" + successNum + "、账号 " + user.getLoginName() + " 导入成功");
  371. }
  372. else if (isUpdateSupport)
  373. {
  374. user.setUpdateBy(operName);
  375. this.updateUser(user);
  376. successNum++;
  377. successMsg.append("<br/>" + successNum + "、账号 " + user.getLoginName() + " 更新成功");
  378. }
  379. else
  380. {
  381. failureNum++;
  382. failureMsg.append("<br/>" + failureNum + "、账号 " + user.getLoginName() + " 已存在");
  383. }
  384. }
  385. catch (Exception e)
  386. {
  387. failureNum++;
  388. String msg = "<br/>" + failureNum + "、账号 " + user.getLoginName() + " 导入失败:";
  389. failureMsg.append(msg + e.getMessage());
  390. log.error(msg, e);
  391. }
  392. }
  393. if (failureNum > 0)
  394. {
  395. failureMsg.insert(0, "很抱歉,导入失败!共 " + failureNum + " 条数据格式不正确,错误如下:");
  396. throw new BusinessException(failureMsg.toString());
  397. }
  398. else
  399. {
  400. successMsg.insert(0, "恭喜您,数据已全部导入成功!共 " + successNum + " 条,数据如下:");
  401. }
  402. return successMsg.toString();
  403. }
  404. }