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