|  |  |  | 
|---|
|  |  |  | */ | 
|---|
|  |  |  | 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("上级不能设置为其下级!"); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|