package com.demo.utils;
import com.demo.TreePojo;
import java.util.ArrayList;
import java.util.List;
/**
* 递归封装 tree 数据
* by CHENYB date 2022-10-25
* @version 1.0
*/
public class TreeUtils {
/**
* 使用递归方法建树
*
* @param
* @return
*/
public static List<TreePojo> buildByRecursive(List<TreePojo> treePojos) {
List<TreePojo> trees = new ArrayList<TreePojo>();
//检查是否是伪根节点
TreePojo pojo = treePojos.stream().min((b1, b2) -> b1.getParentPath().length() - b2.getParentPath().length()).get();
String parentId = null;
Iterator<TreePojo> iterator = treePojos.iterator();
while (iterator.hasNext()){
TreePojo next = iterator.next();
if (next.getId().equals(pojo.getId())) {
parentId = next.getParentId();
next.setParentId(null);
}
}
for (TreePojo treePojo : treePojos) {
if (
null != treePojo &&
(
"".equals(treePojo.getParentId()) || treePojo.getParentId() == null
)
) {
if (StringUtils.isNotBlank(parentId)){
treePojo.setParentId(parentId);
trees.add(findChildren(treePojo, treePojos));
}else {
trees.add(findChildren(treePojo, treePojos));
}
}
}
return trees;
}
/**
* 递归查找子节点
*
* @param
* @return
*/
public static TreePojo findChildren(TreePojo treePojo, List<TreePojo> treePojos) {
for (TreePojo menuTreePojo2 : treePojos) {
if (treePojo.getId().equals(menuTreePojo2.getParentId())) {
if (treePojo.getChildren() == null) {
treePojo.setChildren(new ArrayList<TreePojo>());
}
//是否还有子节点,如果有的话继续往下遍历,如果没有则直接返回
treePojo.getChildren().add(findChildren(menuTreePojo2, treePojos));
}
}
return treePojo;
}
}
package com.demo.one;
import lombok.Data;
import javax.persistence.*;
import java.io.Serializable;
/**
* tree 实体
* by CHENYB date 2022-10-26
*/
@Data
@Entity
@Table(name = "tbl_tree", schema = "demo")
public class TreeInfo extends BaseTable implements Serializable {
private static final long serialVersionUID = 98554512600065464L;
/*
* ID
*/
@Id
@Column(name = "pkid")
@ApiModelProperty("主键ID")
private String id;
/*
* 创建人
*/
@Column(name = "fk_create_user_id")
@ApiModelProperty("创建人")
private String createUserId;
/*
* 更新人
*/
@Column(name = "fk_update_user_id")
@ApiModelProperty("更新人")
private String updateUserId;
/*
* 创建时间
*/
@Column(name = "create_time")
@ApiModelProperty("创建时间")
private Long createTime;
/*
* 更新时间
*/
@Column(name = "update_time")
@ApiModelProperty("更新时间")
private Long updateTime;
/*
* 逻辑删除(1、删除;0、有效)
*/
@Column(name = "del")
@ApiModelProperty("逻辑删除(1、删除;0、有效)")
private Integer del;
/*
* 类型:0-文件夹,1-元素
* 元素:汽车安全体系内是文件
*/
@Column(name = "node_type")
private Integer nodeType;
/*
* 数据类型:1:汽车安全体系
*/
@Column(name = "data_type")
private Integer dataType;
/*
* 节点名称
*/
@Column(name = "name")
private String name;
/*
* 上级节点id
*/
@Column(name = "parent_id")
private String parentId;
/**
*上级节点路径
*/
@Column(name = "parent_path")
private String parentPath;
/**
*上级节点路径名称
*/
@Column(name = "parent_path_name")
private String parentPathName;
}
表结构
-- tbl_tree_auth definition
CREATE TABLE `tbl_tree_auth` (
`pkid` varchar(32) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL COMMENT '主键id',
`fk_auth_user_id` varchar(32) CHARACTER SET utf8 COLLATE utf8_bin DEFAULT NULL COMMENT '有权限的用户',
`fk_auth_path` varchar(255) CHARACTER SET utf8 COLLATE utf8_bin DEFAULT NULL COMMENT '权限路径',
`fk_graph_id` varchar(32) CHARACTER SET utf8 COLLATE utf8_bin DEFAULT NULL COMMENT '规范图形ID',
PRIMARY KEY (`pkid`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT='树形结构权限表';
-- tbl_tree definition
CREATE TABLE `tbl_tree` (
`pkid` varchar(32) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL COMMENT '主键id',
`node_type` int NOT NULL COMMENT '节点类型:0-文件夹,1-元素',
`fk_create_user_id` varchar(32) CHARACTER SET utf8 COLLATE utf8_bin DEFAULT NULL COMMENT '创建人',
`name` varchar(40) CHARACTER SET utf8 COLLATE utf8_bin DEFAULT NULL COMMENT '节点名称',
`parent_id` varchar(32) CHARACTER SET utf8 COLLATE utf8_bin DEFAULT NULL COMMENT '上级节点id',
`parent_path` varchar(255) CHARACTER SET utf8 COLLATE utf8_bin DEFAULT NULL COMMENT '上级节点路径',
`update_time` bigint DEFAULT NULL COMMENT '更新时间',
`parent_path_name` varchar(255) CHARACTER SET utf8 COLLATE utf8_bin DEFAULT NULL COMMENT '上级节点名称',
`data_type` int NOT NULL COMMENT '数据类型:1-汽车安全体系;2-项目文件',
`create_time` bigint DEFAULT NULL COMMENT '创建时间',
`del` int NOT NULL COMMENT '删除逻辑:1:是;0:否',
`fk_update_user_id` varchar(32) CHARACTER SET utf8 COLLATE utf8_bin DEFAULT NULL COMMENT '更信人',
PRIMARY KEY (`pkid`),
KEY `parentGraphId` (`parent_id`) USING BTREE
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT='树形结构信息表';