SysMenuServiceImpl.java 6.6 KB

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