SysUserServiceImpl.java 16 KB

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