SysMenuServiceImpl.java 5.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160
  1. package com.fdkankan.manage.service.impl;
  2. import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
  3. import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
  4. import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
  5. import com.fdkankan.common.request.RequestBase;
  6. import com.fdkankan.common.response.PageInfo;
  7. import com.fdkankan.manage.entity.SysMenu;
  8. import com.fdkankan.manage.entity.SysRoleMenu;
  9. import com.fdkankan.manage.entity.SysUser;
  10. import com.fdkankan.manage.mapper.ISysMenuMapper;
  11. import com.fdkankan.manage.service.ISysMenuService;
  12. import com.fdkankan.manage.service.ISysRoleMenuService;
  13. import com.fdkankan.manage.service.ISysUserService;
  14. import com.fdkankan.manage.vo.response.SysMenuVo;
  15. import org.springframework.beans.BeanUtils;
  16. import org.springframework.beans.factory.annotation.Autowired;
  17. import org.springframework.stereotype.Service;
  18. import java.util.ArrayList;
  19. import java.util.HashMap;
  20. import java.util.List;
  21. import java.util.stream.Collectors;
  22. /**
  23. * <p>
  24. * 服务实现类
  25. * </p>
  26. *
  27. * @author
  28. * @since 2022-06-09
  29. */
  30. @Service
  31. public class SysMenuServiceImpl extends ServiceImpl<ISysMenuMapper, SysMenu> implements ISysMenuService {
  32. @Autowired
  33. ISysRoleMenuService roleMenuService;
  34. @Autowired
  35. ISysUserService userService;
  36. @Override
  37. public List<SysMenu> getListByUserId(Object loginId) {
  38. return getBaseMapper().getListByUserId(loginId);
  39. }
  40. @Override
  41. public PageInfo pageList(RequestBase param) {
  42. LambdaQueryWrapper<SysMenu> wrapper = new LambdaQueryWrapper<>();
  43. wrapper.isNull(SysMenu::getParentId);
  44. wrapper.orderByAsc(SysMenu::getSort);
  45. Page<SysMenu> page = this.page(new Page<>(param.getPageNum(),param.getPageSize()), wrapper);
  46. // List<SysMenuVo> voList = getByParentId(null,page.getRecords(),false,null);
  47. List<SysMenuVo> allVos = setTreeMenuVo(false,null);
  48. List<Long> ids = page.getRecords().parallelStream().map(SysMenu::getId).collect(Collectors.toList());
  49. List<SysMenuVo> voList = allVos.parallelStream().filter(vo -> ids.contains(vo.getId())).collect(Collectors.toList());
  50. Page<SysMenuVo> resultPage = new Page<>(page.getCurrent(),page.getSize());
  51. resultPage.setRecords(voList);
  52. resultPage.setTotal(page.getTotal());
  53. return PageInfo.PageInfo(resultPage);
  54. }
  55. @Override
  56. public List<SysMenuVo> allShowList() {
  57. return setTreeMenuVo(true,null);
  58. }
  59. @Override
  60. public List<SysMenuVo> getByUserId(Long userId) {
  61. SysUser user = userService.getById(userId);
  62. List<SysMenu> menuList = this.getListByUserId(userId);
  63. List<Long> menuIds = menuList.parallelStream().map(SysMenu::getId).collect(Collectors.toList());
  64. menuList.forEach(sysMenu -> setMenuIds(menuIds,sysMenu));
  65. return getByRoleId(menuIds,user.getRoleId());
  66. }
  67. private void setMenuIds( List<Long> menuIds ,SysMenu sysMenu){
  68. if(sysMenu.getParentId()!= null && !menuIds.contains(sysMenu.getParentId())) {
  69. menuIds.add(sysMenu.getParentId());
  70. SysMenu menu = this.getById(sysMenu.getParentId());
  71. this.setMenuIds(menuIds,menu);
  72. }
  73. }
  74. @Override
  75. public List<SysMenuVo> getByRoleId(List<Long> menuIds ,Long roleId) {
  76. if(menuIds == null){
  77. List<SysRoleMenu> roleMenus = roleMenuService.getByRoleId(roleId);
  78. menuIds = roleMenus.parallelStream().map(SysRoleMenu::getMenuId).collect(Collectors.toList());
  79. }
  80. return setTreeMenuVo(true,menuIds);
  81. }
  82. //递归设置menuTree
  83. private List<SysMenuVo> getByParentId(Long parentId, List<SysMenu> list, boolean show ,List<Long> menuIds){
  84. if(list == null){
  85. LambdaQueryWrapper<SysMenu> wrapper = new LambdaQueryWrapper<>();
  86. if(show){
  87. wrapper.eq(SysMenu::getIsShow,1);
  88. }
  89. if(parentId == null){
  90. wrapper.isNull(SysMenu::getParentId);
  91. }else {
  92. wrapper.eq(SysMenu::getParentId,parentId);
  93. }
  94. if(menuIds != null){
  95. wrapper.in(SysMenu::getId,menuIds);
  96. }
  97. list = this.list(wrapper);
  98. }
  99. List<SysMenuVo> sysMenuVos = new ArrayList<>();
  100. if(list.size() <=0){
  101. return sysMenuVos;
  102. }
  103. for (SysMenu record : list) {
  104. SysMenuVo vo = new SysMenuVo();
  105. BeanUtils.copyProperties(record,vo);
  106. sysMenuVos.add(vo);
  107. List<SysMenuVo> children = getByParentId(record.getId(),null,show,menuIds);
  108. vo.setChildren(children);
  109. }
  110. return sysMenuVos;
  111. }
  112. //查询到全部list ,根据parentId组装树形结构
  113. private List<SysMenuVo> setTreeMenuVo( boolean show ,List<Long> menuIds){
  114. LambdaQueryWrapper<SysMenu> wrapper = new LambdaQueryWrapper<>();
  115. if(show){
  116. wrapper.eq(SysMenu::getIsShow,1);
  117. }
  118. if(menuIds != null){
  119. wrapper.in(SysMenu::getId,menuIds);
  120. }
  121. List<SysMenu> list = this.list(wrapper);
  122. List<SysMenuVo> voList = new ArrayList<>();
  123. HashMap<Long,SysMenuVo> voMap = new HashMap<>();
  124. for (SysMenu sysMenu : list) {
  125. SysMenuVo menuVo = new SysMenuVo();
  126. BeanUtils.copyProperties(sysMenu,menuVo);
  127. voMap.put(sysMenu.getId(),menuVo);
  128. }
  129. for (SysMenu sysMenu : list) {
  130. if(sysMenu.getParentId() !=null){
  131. SysMenuVo menuVo = voMap.get(sysMenu.getId());
  132. List<SysMenuVo> children = voMap.get(sysMenu.getParentId()).getChildren();
  133. children.add(menuVo);
  134. }else {
  135. voList.add(voMap.get(sysMenu.getId()));
  136. }
  137. }
  138. return voList;
  139. }
  140. }