diff --git a/blade-service/blade-system/src/main/java/org/springblade/system/service/impl/MenuServiceImpl.java b/blade-service/blade-system/src/main/java/org/springblade/system/service/impl/MenuServiceImpl.java index 762ac64a..b7ea85b0 100644 --- a/blade-service/blade-system/src/main/java/org/springblade/system/service/impl/MenuServiceImpl.java +++ b/blade-service/blade-system/src/main/java/org/springblade/system/service/impl/MenuServiceImpl.java @@ -161,11 +161,44 @@ public class MenuServiceImpl extends ServiceImpl implements IM TenantPackage tenantPackage = SysCache.getTenantPackage(tenantId); if (!AuthUtil.isAdministrator() && Func.isNotEmpty(tenantPackage) && tenantPackage.getId() > 0L) { List menuIds = Func.toLongList(tenantPackage.getMenuId()); - menuTree = menuTree.stream().filter(x -> menuIds.contains(x.getId())).collect(Collectors.toList()); + // 筛选出两者菜单交集集合 + List collect = menuTree.stream().filter(x -> menuIds.contains(x.getId())).collect(Collectors.toList()); + // 创建递归基础集合 + List packageTree = new LinkedList<>(collect); + // 递归筛选出菜单集合所有父级 + collect.forEach(treeNode -> recursionParent(menuTree, packageTree, treeNode)); + // 递归筛选出菜单集合所有子级 + collect.forEach(treeNode -> recursionChild(menuTree, packageTree, treeNode)); + // 合并在一起返回最终集合 + return packageTree; } return menuTree; } + /** + * 父节点递归 + */ + public void recursionParent(List menuTree, List packageTree, TreeNode treeNode) { + Optional node = menuTree.stream().filter(x -> Func.equals(x.getId(), treeNode.getParentId())).findFirst(); + if (node.isPresent() && !packageTree.contains(node.get())) { + packageTree.add(node.get()); + recursionParent(menuTree, packageTree, node.get()); + } + } + + /** + * 子节点递归 + */ + public void recursionChild(List menuTree, List packageTree, TreeNode treeNode) { + List nodes = menuTree.stream().filter(x -> Func.equals(x.getParentId(), treeNode.getId())).collect(Collectors.toList()); + nodes.forEach(node -> { + if (!packageTree.contains(node)) { + packageTree.add(node); + recursionChild(menuTree, packageTree, node); + } + }); + } + /** * 租户菜单权限自定义筛选 */