SysUserServiceImpl.java 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277
  1. package com.zhongzheng.service.impl;
  2. import cn.hutool.core.bean.BeanUtil;
  3. import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
  4. import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
  5. import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
  6. import com.baomidou.mybatisplus.core.toolkit.StringUtils;
  7. import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
  8. import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
  9. import com.zhongzheng.bo.SysUserBo;
  10. import com.zhongzheng.bo.SysUserQuery;
  11. import com.zhongzheng.bo.UserPwdBo;
  12. import com.zhongzheng.entity.*;
  13. import com.zhongzheng.exception.CustomException;
  14. import com.zhongzheng.mapper.SysUserMapper;
  15. import com.zhongzheng.service.*;
  16. import com.zhongzheng.util.DateUtils;
  17. import com.zhongzheng.util.SecurityUtils;
  18. import com.zhongzheng.util.ToolsUtils;
  19. import com.zhongzheng.vo.SysMenuVo;
  20. import com.zhongzheng.vo.SysUserVo;
  21. import lombok.extern.slf4j.Slf4j;
  22. import org.springframework.beans.factory.annotation.Autowired;
  23. import org.springframework.stereotype.Service;
  24. import org.springframework.transaction.annotation.Transactional;
  25. import java.util.ArrayList;
  26. import java.util.Arrays;
  27. import java.util.List;
  28. import java.util.stream.Collectors;
  29. @Slf4j
  30. @Service
  31. public class SysUserServiceImpl extends ServiceImpl<SysUserMapper, SysUser> implements ISysUserService {
  32. @Autowired
  33. private ISysUserRoleService userRoleService;
  34. @Autowired
  35. private ISysRoleService sysRoleService;
  36. @Autowired
  37. private ISysRoleMenuService sysRoleMenuService;
  38. @Autowired
  39. private ISysMenuService sysMenuService;
  40. @Override
  41. @Transactional(rollbackFor = Exception.class)
  42. public boolean addUser(SysUserBo user) {
  43. if (ObjectUtils.isNotNull(user.getUserId())){
  44. return editUser(user);
  45. }
  46. int count = count(new LambdaQueryWrapper<SysUser>().eq(SysUser::getAccount, user.getAccount()));
  47. if (count > 0) {
  48. throw new CustomException("新增用户'" + user.getUserName() + "'失败,登录账号已存在");
  49. }
  50. int count1 = count(new LambdaQueryWrapper<SysUser>().eq(SysUser::getEmail, user.getEmail()));
  51. if (count1 > 0) {
  52. throw new CustomException("新增用户'" + user.getUserName() + "'失败,邮箱已存在");
  53. }
  54. if (CollectionUtils.isEmpty(user.getRoleIds())){
  55. throw new CustomException("绑定角色不能为空");
  56. }
  57. SysUser entity = BeanUtil.toBean(user, SysUser.class);
  58. entity.setPassword(SecurityUtils.encryptPassword(user.getPassword()));
  59. entity.setPasswordAes(user.getPassword());
  60. entity.setCreateTime(DateUtils.getNowTime());
  61. entity.setUpdateTime(DateUtils.getNowTime());
  62. save(entity);
  63. //保存用户角色关联关系
  64. List<SysUserRole> collect = user.getRoleIds().stream().map(item -> {
  65. SysUserRole sysUserRole = new SysUserRole();
  66. sysUserRole.setUserId(entity.getUserId());
  67. sysUserRole.setRoleId(item);
  68. return sysUserRole;
  69. }).collect(Collectors.toList());
  70. return userRoleService.saveBatch(collect);
  71. }
  72. @Override
  73. public Page<SysUserVo> selectUserList(SysUserQuery bo) {
  74. Page<SysUser> page = new Page<>();
  75. if (ObjectUtils.isNull(bo.getRoleId())){
  76. //全部列表
  77. page = page(new Page<>(bo.getPageNum(), bo.getPageSize()));
  78. }else {
  79. List<SysUserRole> userRoleList = userRoleService.list(new LambdaQueryWrapper<SysUserRole>().eq(SysUserRole::getRoleId, bo.getRoleId()));
  80. if (CollectionUtils.isNotEmpty(userRoleList)){
  81. page = page(new Page<>(bo.getPageNum(), bo.getPageSize()),
  82. new LambdaQueryWrapper<SysUser>().in(SysUser::getUserId, userRoleList.stream().map(SysUserRole::getUserId).collect(Collectors.toList())));
  83. }
  84. }
  85. if (CollectionUtils.isEmpty(page.getRecords())){
  86. return new Page<>();
  87. }
  88. //获取角色
  89. List<SysUserVo> userVos = page.getRecords().stream().map(item -> {
  90. SysUserVo userVo = BeanUtil.toBean(item, SysUserVo.class);
  91. userVo.setPassword(item.getPasswordAes());
  92. List<SysUserRole> roleList = userRoleService.list(new LambdaQueryWrapper<SysUserRole>().eq(SysUserRole::getUserId, item.getUserId()));
  93. if (CollectionUtils.isNotEmpty(roleList)){
  94. List<SysRole> sysRoles = sysRoleService.listByIds(roleList.stream().map(SysUserRole::getRoleId).collect(Collectors.toList()));
  95. userVo.setRoleIds(sysRoles.stream().map(SysRole::getRoleId).collect(Collectors.toList()));
  96. userVo.setRoleName(sysRoles.stream().map(x -> x.getRoleName()).collect(Collectors.joining(",")));
  97. }
  98. return userVo;
  99. }).collect(Collectors.toList());
  100. Page<SysUserVo> result = new Page<>();
  101. result.setTotal(page.getTotal());
  102. result.setRecords(userVos);
  103. result.setSize(page.getSize());
  104. return result;
  105. }
  106. @Override
  107. @Transactional(rollbackFor = Exception.class)
  108. public boolean editUser(SysUserBo bo) {
  109. SysUser user = BeanUtil.toBean(bo, SysUser.class);
  110. updateById(user);
  111. //用户角色关联关系
  112. userRoleService.remove(new LambdaQueryWrapper<SysUserRole>().eq(SysUserRole::getUserId, user.getUserId()));
  113. List<SysUserRole> userRoleList = bo.getRoleIds().stream().map(item -> {
  114. SysUserRole sysUserRole = new SysUserRole();
  115. sysUserRole.setUserId(user.getUserId());
  116. sysUserRole.setRoleId(item);
  117. return sysUserRole;
  118. }).collect(Collectors.toList());
  119. return userRoleService.saveBatch(userRoleList);
  120. }
  121. @Override
  122. @Transactional(rollbackFor = Exception.class)
  123. public boolean delUser(Long userId) {
  124. SysUser user = getById(userId);
  125. if (ObjectUtils.isNull(user)){
  126. throw new CustomException("用户不存在!");
  127. }
  128. userRoleService.remove(new LambdaQueryWrapper<SysUserRole>().eq(SysUserRole::getUserId, user.getUserId()));
  129. removeById(userId);
  130. return true;
  131. }
  132. @Override
  133. public SysUserVo userDetail(Long userId) {
  134. SysUser user = getById(userId);
  135. SysUserVo vo = BeanUtil.toBean(user, SysUserVo.class);
  136. vo.setPassword(user.getPasswordAes());
  137. List<SysUserRole> list = userRoleService.list(new LambdaQueryWrapper<SysUserRole>().eq(SysUserRole::getUserId, userId));
  138. if (CollectionUtils.isNotEmpty(list)){
  139. vo.setRoleIds(list.stream().map(SysUserRole::getRoleId).collect(Collectors.toList()));
  140. }
  141. return vo;
  142. }
  143. @Override
  144. public SysUserVo getUserPermission(Long userId) {
  145. SysUser sysUser = getById(userId);
  146. if (ObjectUtils.isNull(sysUser)){
  147. throw new CustomException("用户获取有误");
  148. }
  149. SysUserVo vo = BeanUtil.toBean(sysUser, SysUserVo.class);
  150. if (sysUser.getUserName().equals("admin")){
  151. vo.setButtonL(Arrays.asList("*:*:*"));
  152. return vo;
  153. }
  154. List<SysUserRole> list = userRoleService.list(new LambdaQueryWrapper<SysUserRole>().eq(SysUserRole::getUserId, userId));
  155. if (CollectionUtils.isNotEmpty(list)){
  156. List<Long> roleIds = list.stream().map(SysUserRole::getRoleId).collect(Collectors.toList());
  157. vo.setRoleIds(roleIds);
  158. //用户菜单权限
  159. List<SysRoleMenu> menus = sysRoleMenuService.list(new LambdaQueryWrapper<SysRoleMenu>().in(SysRoleMenu::getRoleId, roleIds));
  160. if (CollectionUtils.isNotEmpty(menus)){
  161. List<SysMenu> sysMenus = sysMenuService.listByIds(menus.stream().map(SysRoleMenu::getMenuId).collect(Collectors.toList()));
  162. if (CollectionUtils.isNotEmpty(sysMenus)){
  163. List<String> perms = sysMenus.stream().filter(x -> StringUtils.isNotBlank(x.getPerms())).map(SysMenu::getPerms).collect(Collectors.toList());
  164. vo.setButtonL(perms);
  165. }
  166. }
  167. }
  168. return vo;
  169. }
  170. @Override
  171. public List<SysMenuVo> getUserMenu(Long userId) {
  172. SysUser sysUser = getById(userId);
  173. if (ObjectUtils.isNull(sysUser)){
  174. throw new CustomException("用户获取有误");
  175. }
  176. if ("admin".equals(sysUser.getUserName())){
  177. List<SysMenu> sysMenus = sysMenuService.list();
  178. List<SysMenuVo> sysMenuVos = new ArrayList<>();
  179. for (SysMenu menu : sysMenus) {
  180. if (menu.getParentId() == null || menu.getParentId() == 0) {
  181. // 找到顶级节点
  182. SysMenuVo vo = BeanUtil.toBean(menu, SysMenuVo.class);
  183. vo.setChildren(getChildren(menu, sysMenus));
  184. sysMenuVos.add(vo);
  185. }
  186. }
  187. return sysMenuVos;
  188. }
  189. List<SysUserRole> list = userRoleService.list(new LambdaQueryWrapper<SysUserRole>().eq(SysUserRole::getUserId, userId));
  190. if (CollectionUtils.isEmpty(list)){
  191. return new ArrayList<>();
  192. }
  193. List<Long> roleIds = list.stream().map(SysUserRole::getRoleId).collect(Collectors.toList());
  194. //用户菜单权限
  195. List<SysRoleMenu> menus = sysRoleMenuService.list(new LambdaQueryWrapper<SysRoleMenu>().in(SysRoleMenu::getRoleId, roleIds));
  196. if (CollectionUtils.isEmpty(menus)){
  197. return new ArrayList<>();
  198. }
  199. List<SysMenu> sysMenus = sysMenuService.listByIds(menus.stream().map(SysRoleMenu::getMenuId).collect(Collectors.toList()));
  200. List<SysMenuVo> sysMenuVos = new ArrayList<>();
  201. for (SysMenu menu : sysMenus) {
  202. if (menu.getParentId() == null || menu.getParentId() == 0) {
  203. // 找到顶级节点
  204. SysMenuVo vo = BeanUtil.toBean(menu, SysMenuVo.class);
  205. vo.setChildren(getChildren(menu, sysMenus));
  206. sysMenuVos.add(vo);
  207. }
  208. }
  209. return sysMenuVos;
  210. }
  211. @Override
  212. public void initAdmin() {
  213. SysUser admin = getOne(new LambdaQueryWrapper<SysUser>().eq(SysUser::getAccount, "admin"));
  214. if (ObjectUtils.isNotNull(admin)){
  215. throw new CustomException("admin用户已存在");
  216. }
  217. SysUser entity = new SysUser();
  218. entity.setAccount("admin");
  219. entity.setUserName("admin");
  220. entity.setPassword(SecurityUtils.encryptPassword("admin123"));
  221. entity.setPasswordAes("admin123");
  222. entity.setCreateTime(DateUtils.getNowTime());
  223. entity.setUpdateTime(DateUtils.getNowTime());
  224. save(entity);
  225. }
  226. @Override
  227. @Transactional(rollbackFor = Exception.class)
  228. public boolean editPassword(UserPwdBo bo) {
  229. if (!bo.getNewPwd().equals(bo.getAffirmPwd())){
  230. throw new CustomException("二次輸入的密碼不一樣");
  231. }
  232. SysUser user = SecurityUtils.getLoginUser().getUser();
  233. if (ObjectUtils.isNull(user)){
  234. throw new CustomException("用戶獲取失敗");
  235. }
  236. if (!user.getPasswordAes().equals(bo.getOldPwd())){
  237. throw new CustomException("舊密碼輸入有誤");
  238. }
  239. user.setPassword(SecurityUtils.encryptPassword(bo.getAffirmPwd()));
  240. user.setPasswordAes(bo.getAffirmPwd());
  241. return updateById(user);
  242. }
  243. private List<SysMenuVo> getChildren(SysMenu parent, List<SysMenu> sysMenus) {
  244. List<SysMenuVo> children = new ArrayList<>();
  245. for (SysMenu menu : sysMenus) {
  246. if (parent.getMenuId().equals(menu.getParentId())) {
  247. // 递归设置子菜单的子菜单
  248. SysMenuVo vo = BeanUtil.toBean(menu, SysMenuVo.class);
  249. vo.setChildren(getChildren(menu, sysMenus));
  250. children.add(vo);
  251. }
  252. }
  253. return children;
  254. }
  255. }