package com.doumee.dao.business.vo; 
 | 
  
 | 
import com.doumee.config.DataSyncConfig; 
 | 
import com.doumee.dao.business.model.Shop; 
 | 
import org.apache.commons.lang3.StringUtils; 
 | 
  
 | 
import java.util.ArrayList; 
 | 
import java.util.List; 
 | 
import java.util.Objects; 
 | 
  
 | 
/** 
 | 
 * Created by IntelliJ IDEA. 
 | 
 * 
 | 
 * @Author : Rk 
 | 
 * @create 2023/7/13 10:40 
 | 
 */ 
 | 
public class ShopTree { 
 | 
  
 | 
    // 保存参与构建树形的所有数据(通常数据库查询结果) 
 | 
    public List<ShopTreeVo> nodeList = new ArrayList<>(); 
 | 
    public List<ShopTreeVo> dealedList = new ArrayList<>(); 
 | 
    public int dealIndex =0; 
 | 
  
 | 
    /** 
 | 
     *  构造方法 
 | 
     *  @param nodeList 将数据集合赋值给nodeList,即所有数据作为所有节点。 
 | 
     */ 
 | 
    public ShopTree(List<ShopTreeVo> nodeList ){ 
 | 
        this.nodeList = nodeList; 
 | 
        this.dealedList = new ArrayList<>(); 
 | 
    } 
 | 
  
 | 
  
 | 
    /** 
 | 
     *   获取需构建的所有根节点(顶级节点) "0" 
 | 
     *   @return 所有根节点List集合 
 | 
     */ 
 | 
    public List<ShopTreeVo> getRootNode(){ 
 | 
        // 保存所有根节点(所有根节点的数据) 
 | 
        List<ShopTreeVo> rootNodeList = new ArrayList<>(); 
 | 
        // treeNode:查询出的每一条数据(节点) 
 | 
        for (ShopTreeVo treeNode : nodeList){ 
 | 
            if (isParentNode(treeNode) ) { 
 | 
                // 是,添加 
 | 
                rootNodeList.add(treeNode); 
 | 
            } 
 | 
  
 | 
        } 
 | 
        return rootNodeList; 
 | 
    } 
 | 
  
 | 
    private boolean isParentNode(ShopTreeVo treeNode) { 
 | 
        if(StringUtils.isBlank(treeNode.getParentIamId())){ 
 | 
            return  true; 
 | 
        } 
 | 
       /* for (Shop s : nodeList){ 
 | 
            if ( StringUtils.equals(treeNode.getParentIamId(),s.getOrgId())) { 
 | 
                // 是,添加 
 | 
                return false; 
 | 
            } 
 | 
  
 | 
        }*/ 
 | 
        return false; 
 | 
    } 
 | 
  
 | 
  
 | 
    /** 
 | 
     *  根据每一个顶级节点(根节点)进行构建树形结构 
 | 
     *  @return  构建整棵树 
 | 
     */ 
 | 
    public List<ShopTreeVo> buildTree(){ 
 | 
        List<ShopTreeVo> treeNodes = new ArrayList<>(); 
 | 
        // getRootNode():获取所有的根节点 
 | 
        for (ShopTreeVo treeRootNode : getRootNode()) { 
 | 
            // 将顶级节点进行构建子树 
 | 
            treeRootNode = buildChildTree(treeRootNode); 
 | 
            // 完成一个顶级节点所构建的树形,增加进来 
 | 
            treeNodes.add(treeRootNode); 
 | 
        } 
 | 
        return treeNodes; 
 | 
    } 
 | 
  
 | 
    private boolean isDealedNode(ShopTreeVo treeRootNode) { 
 | 
        for (ShopTreeVo s : this.dealedList) { 
 | 
            // 将顶级节点进行构建子树 
 | 
            if(StringUtils.equals(s.getOrgId(),treeRootNode.getOrgId())){ 
 | 
               return true; 
 | 
            } 
 | 
        } 
 | 
        return false; 
 | 
    } 
 | 
  
 | 
    /** 
 | 
     *  递归-----构建子树形结构 
 | 
     *  @param  pNode 根节点(顶级节点) 
 | 
     *  @return 整棵树 
 | 
     */ 
 | 
    public ShopTreeVo buildChildTree(ShopTreeVo pNode){ 
 | 
        if(isDealedNode(pNode)){ 
 | 
            System.out.println(pNode.getId()+"==已处理=="+pNode.getName()); 
 | 
            return pNode; 
 | 
        } 
 | 
        // 再递归进行判断当前节点的情况,调用自身方法 
 | 
        this.dealedList.add(pNode); 
 | 
        List<ShopTreeVo> childTree = new ArrayList<>(); 
 | 
        // nodeList:所有节点集合(所有数据) 
 | 
        for (ShopTreeVo treeNode : nodeList) { 
 | 
            // 判断当前节点的父节点ID是否等于根节点的ID,即当前节点为其下的子节点 
 | 
            if (StringUtils.isNotBlank(treeNode.getParentIamId())&&StringUtils.equals(treeNode.getParentIamId(),pNode.getOrgId())) { 
 | 
                childTree.add(buildChildTree(treeNode)); 
 | 
            } 
 | 
        } 
 | 
        // for循环结束,即节点下没有任何节点,树形构建结束,设置树结果 
 | 
        pNode.setChildList(childTree); 
 | 
        if(childTree.size()>0){ 
 | 
            System.out.println(pNode.getId()+"==有下级=="+(dealIndex++)+pNode.getName()); 
 | 
        }else{ 
 | 
            System.out.println(pNode.getId()+"==无下级=="+(dealIndex++)+pNode.getName()); 
 | 
        } 
 | 
        return pNode; 
 | 
    } 
 | 
  
 | 
  
 | 
  
 | 
} 
 |