MenuServiceImpl.java 2.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576
  1. package com.om.service.impl;
  2. import cn.hutool.core.util.StrUtil;
  3. import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
  4. import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
  5. import com.om.entity.po.Menu;
  6. import com.om.mapper.MenuMapper;
  7. import com.om.service.IMenuService;
  8. import org.springframework.beans.factory.annotation.Autowired;
  9. import org.springframework.stereotype.Service;
  10. import com.om.mapper.RoleMapper;
  11. import com.om.mapper.RoleMenuMapper;
  12. import java.util.ArrayList;
  13. import java.util.List;
  14. import java.util.stream.Collectors;
  15. /**
  16. * <p>
  17. * 服务实现类
  18. * </p>
  19. *
  20. * @author 何超
  21. * @since 2022-08-22
  22. */
  23. @Service
  24. public class MenuServiceImpl extends ServiceImpl<MenuMapper, Menu> implements IMenuService {
  25. @Autowired
  26. RoleMapper roleMapper;
  27. @Autowired
  28. RoleMenuMapper roleMenuMapper;
  29. @Autowired
  30. IMenuService menuService;
  31. @Override
  32. public List<Menu> getRoleMenu(String roleFlag) {
  33. Integer roleId = roleMapper.selectByFlag(roleFlag);
  34. //当前角色所有菜单id集合
  35. List<Integer> menuIds = roleMenuMapper.selectByRoleId(roleId);
  36. //查出所有菜单
  37. List<Menu> menus = menuService.findMenus("");
  38. //new一个最后筛选完成之后的list
  39. List<Menu> roleMenus = new ArrayList<>();
  40. //筛选当前用户角色菜单
  41. for (Menu menu : menus) {
  42. if (menuIds.contains(menu.getId())) {
  43. roleMenus.add(menu);
  44. }
  45. List<Menu> children = menu.getChildren();
  46. children.removeIf(child -> !menuIds.contains(child.getId()));
  47. }
  48. return roleMenus;
  49. }
  50. @Override
  51. public List<Menu> findMenus(String name) {
  52. QueryWrapper<Menu> queryWrapper = new QueryWrapper<>();
  53. queryWrapper.orderByAsc("sort_num");
  54. if (StrUtil.isNotBlank(name)) {
  55. queryWrapper.like("name", name);
  56. }
  57. // 查询所有数据
  58. List<Menu> list = list(queryWrapper);
  59. // 找出pid为null的一级菜单
  60. List<Menu> parentNodes = list.stream().filter(menu -> menu.getPid() == null).collect(Collectors.toList());
  61. // 找出一级菜单的子菜单
  62. for (Menu menu : parentNodes) {
  63. // 筛选所有数据中pid=父级id的数据就是二级菜单
  64. menu.setChildren(list.stream().filter(m -> menu.getId().equals(m.getPid())).collect(Collectors.toList()));
  65. }
  66. return parentNodes;
  67. }
  68. }