|  |  | 
 |  |  |      */ | 
 |  |  |     private static <T extends TreeNode2> T findChildren(List<T> treeNodes, T rootNode) { | 
 |  |  |         for (T treeNode : treeNodes) { | 
 |  |  |             if (rootNode.getId().equals(treeNode.getPid())) { | 
 |  |  |             if (rootNode.getIid().equals(treeNode.getPid())) { | 
 |  |  |                 rootNode.getChildren().add(findChildren(treeNodes, treeNode)); | 
 |  |  |             } | 
 |  |  |         } | 
 |  |  | 
 |  |  |         List<T> result = new ArrayList<>(); | 
 |  |  |  | 
 |  |  |         // list转map | 
 |  |  |         Map<String, T> nodeMap = new LinkedHashMap<>(treeNodes.size()); | 
 |  |  |         Map<Long, T> nodeMap = new LinkedHashMap<>(treeNodes.size()); | 
 |  |  |         for (T treeNode : treeNodes) { | 
 |  |  |             nodeMap.put(treeNode.getId(), treeNode); | 
 |  |  |             nodeMap.put(treeNode.getIid(), treeNode); | 
 |  |  |         } | 
 |  |  |  | 
 |  |  |         for (T node : nodeMap.values()) { | 
 |  |  |             T parent = nodeMap.get(node.getPid()); | 
 |  |  |             if (parent != null && !(node.getId().equals(parent.getId()))) { | 
 |  |  |             if (parent != null && !(node.getIid().equals(parent.getIid()))) { | 
 |  |  |                 parent.getChildren().add(node); | 
 |  |  |                 continue; | 
 |  |  |             } | 
 |  |  | 
 |  |  |      * @return | 
 |  |  |      */ | 
 |  |  |     public static <T extends TreeNode2> List<T> getAncestor(List<T> allNodes, Long id) { | 
 |  |  |         Map<String, T> map = allNodes.stream().collect(Collectors.toMap(dept -> dept.getId(), dept -> dept)); | 
 |  |  |         Map<Long, T> map = allNodes.stream().collect(Collectors.toMap(item -> item.getIid(), item -> item)); | 
 |  |  |         List<T> list = new ArrayList<>(); | 
 |  |  |         TreeNode2 node = map.get(id); | 
 |  |  |         if (node != null) { | 
 |  |  | 
 |  |  |     } | 
 |  |  |  | 
 |  |  |     public static <T extends TreeNode2> T getTreeRoot(List<T> allNodes, Long id, Long rootParentId) { | 
 |  |  |         Map<String, T> map = allNodes.stream().collect(Collectors.toMap(type -> type.getId(), type -> type)); | 
 |  |  |         Map<Long, T> map = allNodes.stream().collect(Collectors.toMap(type -> type.getIid(), type -> type)); | 
 |  |  |         T parent = map.get(id); | 
 |  |  |         while (parent != null) { | 
 |  |  |             if (rootParentId.equals(parent.getPid())) { | 
 |  |  | 
 |  |  |         if (id == 0) { | 
 |  |  |             list.addAll(allNodes); | 
 |  |  |         } else { | 
 |  |  |             if (allNodes.stream().filter(n -> n.getId().equals(id)).count() > 0) { | 
 |  |  |                 T node = allNodes.stream().filter(n -> n.getId().equals(id)).findFirst().get(); | 
 |  |  |             if (allNodes.stream().filter(n -> n.getIid().equals(id)).count() > 0) { | 
 |  |  |                 T node = allNodes.stream().filter(n -> n.getIid().equals(id)).findFirst().get(); | 
 |  |  |                 list.add(node); | 
 |  |  |                 queryChildrenDepartmentRecursion((List<TreeNode2>) list, (List<TreeNode2>) allNodes, node.getId()); | 
 |  |  |                 queryChildrenDepartmentRecursion((List<TreeNode2>) list, (List<TreeNode2>) allNodes, node.getIid()); | 
 |  |  |             } | 
 |  |  |         } | 
 |  |  |         return list; | 
 |  |  | 
 |  |  |      * @param id | 
 |  |  |      * @return | 
 |  |  |      */ | 
 |  |  |     public static <T extends TreeNode2> List<T> getDescendant(List<T> allNodes, String id) { | 
 |  |  |     public static <T extends TreeNode2> List<T> getDescendant(List<T> allNodes, Long id) { | 
 |  |  |         List<T> list = new ArrayList<>(); | 
 |  |  |         queryChildrenDepartmentRecursion((List<TreeNode2>) list, (List<TreeNode2>) allNodes, id); | 
 |  |  |         return list; | 
 |  |  | 
 |  |  |     /** | 
 |  |  |      * 递归查询子节点 | 
 |  |  |      */ | 
 |  |  |     private static void queryChildrenDepartmentRecursion(List<TreeNode2> list, List<TreeNode2> allNodes, String id) { | 
 |  |  |     private static void queryChildrenDepartmentRecursion(List<TreeNode2> list, List<TreeNode2> allNodes, Long id) { | 
 |  |  |         for (TreeNode2 node : allNodes.stream().filter(n -> n.getPid().equals(id)).collect(Collectors.toList())) { | 
 |  |  |             list.add(node); | 
 |  |  |             queryChildrenDepartmentRecursion(list, allNodes, node.getId()); | 
 |  |  |             queryChildrenDepartmentRecursion(list, allNodes, node.getIid()); | 
 |  |  |         } | 
 |  |  |     } | 
 |  |  |  | 
 |  |  | 
 |  |  |             throw new RenException("查询信息失败"); | 
 |  |  |         } | 
 |  |  |         // 上级菜单不能为自身 | 
 |  |  |         if (node.getId().equals(node.getPid())) { | 
 |  |  |         if (node.getIid().equals(node.getPid())) { | 
 |  |  |             throw new RenException(ErrorCode.SUPERIOR_MENU_ERROR); | 
 |  |  |         } | 
 |  |  |         // 上级不能为下级 | 
 |  |  |         if (!dbNode.getPid().equals(node.getPid())) {// 层级改变了 | 
 |  |  |             if (node.getId().equals(node.getPid())) { | 
 |  |  |             if (node.getIid().equals(node.getPid())) { | 
 |  |  |                 throw new RenException("上级不能设置为其本身!"); | 
 |  |  |             } | 
 |  |  |  | 
 |  |  |             List<T> list = TreeUtils2.getDescendant(allNodes, node.getId()); | 
 |  |  |             List<T> list = TreeUtils2.getDescendant(allNodes, node.getIid()); | 
 |  |  |             for (T d : list) { | 
 |  |  |                 if (d.getId().equals(node.getPid())) { | 
 |  |  |                 if (d.getIid().equals(node.getPid())) { | 
 |  |  |                     throw new RenException("上级不能设置为其下级!"); | 
 |  |  |                 } | 
 |  |  |             } |