SysUserServiceImpl.java 17 KB

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