package org.springblade.common.utils; import org.springblade.common.node.TreeIntegerNode; import org.springblade.common.node.TreeLongNode; import org.springblade.common.node.TreeStringNode; import org.springblade.core.tool.node.TreeNode; import org.springblade.modules.doorplateAddress.vo.DoorplateAddressVOTree; import org.springblade.modules.house.vo.HouseTree; import org.springblade.modules.system.node.DeptUserTreeNode; import java.util.*; import java.util.stream.Collectors; /** * node tree 工具类 * @author zhongrj * @since 2023-10-28 */ public class NodeTreeUtil { /** * 树转换 * @param treeMap * @return */ public static List getNodeTree(Map treeMap){ List tree = new ArrayList<>(); if (treeMap.size() > 1) { treeMap.forEach((id, treeNode) -> { if (treeMap.containsKey(treeNode.getParentId())) { treeMap.get(treeNode.getParentId()).getChildren().add(treeNode); } else { tree.add(treeNode); } }); } return tree; } /** * 树转换 * @param treeMap * @return */ public static List getLongNodeTree(Map treeMap){ List tree = new ArrayList<>(); if (treeMap.size() > 1) { treeMap.forEach((id, treeNode) -> { if (treeMap.containsKey(treeNode.getParentId())) { treeMap.get(treeNode.getParentId()).getChildren().add(treeNode); } else { tree.add(treeNode); } }); } return tree; } /** * 树转换 * @param treeMap * @return */ public static List getStringNodeTree(Map treeMap){ List tree = new ArrayList<>(); if (treeMap.size() > 0) { if (treeMap.size()==1){ treeMap.forEach((id, treeNode) -> { tree.add(treeNode); }); }else { treeMap.forEach((id, treeNode) -> { if (treeMap.containsKey(treeNode.getParentId())) { treeMap.get(treeNode.getParentId()).getChildren().add(treeNode); } else { tree.add(treeNode); } }); } } return tree; } /** * 树转换 * @param treeMap * @return */ public static List getAddressNodeTree(Map treeMap){ List tree = new ArrayList<>(); if (treeMap.size() > 1) { treeMap.forEach((code, treeNode) -> { if (treeMap.containsKey(treeNode.getParentCode())) { treeMap.get(treeNode.getParentCode()).getChildren().add(treeNode); } else { tree.add(treeNode); } }); } return tree; } /** * 树转换 * @param treeMap * @return */ public static List getHouseTree(Map treeMap){ List tree = new ArrayList<>(); if (treeMap.size() > 1) { treeMap.forEach((code, treeNode) -> { if (treeMap.containsKey(treeNode.getParentCode())) { treeMap.get(treeNode.getParentCode()).getChildren().add(treeNode); } else { tree.add(treeNode); } }); } return tree; } /** * list 转 tree 组织机构 * @param parentList * @param childrenList * @return */ public static List getNodeTree(List parentList, List childrenList){ // 遍历 for (TreeNode parentNode : parentList) { // 判断是否有孩子 if (parentNode.getHasChildren()) { List tree = new ArrayList<>(); // 遍历子集合 for (TreeNode childrenNode : childrenList) { if (parentNode.getId().equals(childrenNode.getParentId())) { tree.add(childrenNode); } } // 设置孩子节点 parentNode.setChildren(tree); } } return parentList; } /** * map 转 tree 组织机构(父子id不会重复的情况,数据查询来自同一个表) * * 把部门用户树遍历一遍,每个值,查询他的parentId在不在用户部门树中。如果存在,就把这个加在下级 * 最后最上级的parentId肯定不在用户部门树中,把最上级的加到新树里。返回新树 * * @param treeMap * @return */ public static List getDeptAndUserNodeTree(Map treeMap){ List tree = new ArrayList<>(); if (treeMap.size() > 1) { treeMap.forEach((id, treeNode) -> { //是否有下级 if (!treeNode.getHasChildren()){ // 多个部门拆分 List asList = Arrays.asList(treeNode.getParentId().split(",")); //有多部门 if (asList.size()>1){ for (String parentId : asList) { //用户部门树中存在该部门 if (treeMap.containsKey(parentId)) { //把该对象放在该部门下 treeMap.get(parentId).getChildren().add(treeNode); } else { //不存在该部门,在新的树中加入 tree.add(treeNode); } } }else { if (treeMap.containsKey(treeNode.getParentId())) { DeptUserTreeNode deptUserTreeNode =treeMap.get(treeNode.getParentId()); deptUserTreeNode.getChildren().add(treeNode); } else { tree.add(treeNode); } } }else { //有下级 if (treeMap.containsKey(treeNode.getParentId())) { treeMap.get(treeNode.getParentId()).getChildren().add(treeNode); } else { tree.add(treeNode); } } }); } return tree; } }