linwe
2024-09-03 764d883b5ea3bdc06abbec548b6df0511e567978
src/main/java/org/springblade/common/utils/NodeTreeUtil.java
@@ -1,13 +1,13 @@
package org.springblade.common.utils;
import org.springblade.common.node.TreeIntegerNode;
import org.springblade.common.node.TreeNode;
import org.springblade.modules.doorplateAddress.vo.DoorplateAddressVOTree;
import org.springblade.modules.house.vo.HouseTree;
import org.springblade.common.node.TreeLongNode;
import org.springblade.common.node.TreeStringNode;
import org.springblade.core.tool.node.TreeNode;
import org.springblade.modules.system.node.DeptUserTreeNode;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.*;
import java.util.stream.Collectors;
/**
 * node tree 工具类
@@ -40,12 +40,12 @@
    * @param treeMap
    * @return
    */
   public static List<DoorplateAddressVOTree> getAddressNodeTree(Map<String, DoorplateAddressVOTree> treeMap){
      List<DoorplateAddressVOTree> tree = new ArrayList<>();
   public static List<TreeLongNode> getLongNodeTree(Map<Long, TreeLongNode> treeMap){
      List<TreeLongNode> tree = new ArrayList<>();
      if (treeMap.size() > 1) {
         treeMap.forEach((code, treeNode) -> {
            if (treeMap.containsKey(treeNode.getParentCode())) {
               treeMap.get(treeNode.getParentCode()).getChildren().add(treeNode);
         treeMap.forEach((id, treeNode) -> {
            if (treeMap.containsKey(treeNode.getParentId())) {
               treeMap.get(treeNode.getParentId()).getChildren().add(treeNode);
            } else {
               tree.add(treeNode);
            }
@@ -59,17 +59,103 @@
    * @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 {
   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;
   }
   /**
    * 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;
   }
}