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<TreeIntegerNode> getNodeTree(Map<Integer, TreeIntegerNode> treeMap){
|
List<TreeIntegerNode> 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<TreeLongNode> getLongNodeTree(Map<Long, TreeLongNode> treeMap){
|
List<TreeLongNode> 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<TreeStringNode> getStringNodeTree(Map<String, TreeStringNode> treeMap){
|
List<TreeStringNode> 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<DoorplateAddressVOTree> getAddressNodeTree(Map<String, DoorplateAddressVOTree> treeMap){
|
List<DoorplateAddressVOTree> 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<HouseTree> getHouseTree(Map<String, HouseTree> treeMap){
|
List<HouseTree> 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<TreeNode> getNodeTree(List<TreeNode> parentList, List<TreeNode> childrenList){
|
// 遍历
|
for (TreeNode parentNode : parentList) {
|
// 判断是否有孩子
|
if (parentNode.getHasChildren()) {
|
List<TreeNode> 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<DeptUserTreeNode> getDeptAndUserNodeTree(Map<String, DeptUserTreeNode> treeMap){
|
List<DeptUserTreeNode> tree = new ArrayList<>();
|
if (treeMap.size() > 1) {
|
treeMap.forEach((id, treeNode) -> {
|
//是否有下级
|
if (!treeNode.getHasChildren()){
|
// 多个部门拆分
|
List<String> 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;
|
}
|
}
|