From 21e9191ed0f0b3280c511f85cb0ce71e7b0b10c0 Mon Sep 17 00:00:00 2001 From: smallchill Date: Wed, 29 Jun 2022 00:45:36 +0800 Subject: [PATCH] =?UTF-8?q?:bug:=20=E4=BF=AE=E5=A4=8D=E7=BB=91=E5=AE=9A?= =?UTF-8?q?=E7=A7=9F=E6=88=B7=E4=BA=A7=E5=93=81=E5=8C=85=E5=90=8E=E6=99=AE?= =?UTF-8?q?=E9=80=9A=E7=AE=A1=E7=90=86=E5=91=98=E6=9D=83=E9=99=90=E9=85=8D?= =?UTF-8?q?=E7=BD=AE=E4=B8=A2=E5=A4=B1=E6=8C=89=E9=92=AE=E9=80=89=E9=A1=B9?= =?UTF-8?q?=E7=9A=84=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../system/service/impl/MenuServiceImpl.java | 35 ++++++++++++++++++- 1 file changed, 34 insertions(+), 1 deletion(-) 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); + } + }); + } + /** * 租户菜单权限自定义筛选 */