递归调用方式思路
//根据递归调用当前数据解析
//数据库
CREATE TABLE `sys_xxx` (
`id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT 'id',
`parent_id` bigint(20) DEFAULT NULL COMMENT '父机构ID',
`depart_order` int(11) DEFAULT '0' COMMENT '排序',
`description` varchar(500) DEFAULT NULL COMMENT '描述',
`status` tinyint(1) DEFAULT NULL COMMENT '状态(1启用,0不启用)',
`remark` varchar(255) DEFAULT NULL COMMENT '备注',
`is_deleted` tinyint(1) DEFAULT '0' COMMENT '是否删除,0未删除,1已删除',
`create_by` varchar(255) NOT NULL COMMENT '创建人',
`create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`update_by` varchar(255) DEFAULT NULL COMMENT '更新人',
`update_time` datetime DEFAULT NULL COMMENT '更新时间',
`principal_id` bigint(20) DEFAULT NULL COMMENT '组织/部门负责人',
PRIMARY KEY (`id`) USING BTREE
) ENGINE=InnoDB AUTO_INCREMENT=31 DEFAULT CHARSET=utf8 ROW_FORMAT=DYNAMIC COMMENT='xxx';
//实体
@Data
public class SysDepart {
/**
* 主键
*/
@ApiModelProperty(value = "主键ID")
@TableId(type = IdType.AUTO)
protected Long id;
@ApiModelProperty(value = "父机构ID")
private Long parentId;
@ApiModelProperty(value = "机构/部门名称")
private String departName;
@ApiModelProperty(value = "是否删除,0未删除,1已删除")
@TableLogic
private Boolean isDeleted;
@ApiModelProperty(value = "组织/部门负责人")
private Long principalId;
@ApiModelProperty(value = "给前端展示")
@TableField(exist = false)
private List<SysDepart> children; //递归的字段
//函数
//根据字符集关系 级联递归解析数据
List<SysDepart> tree = buildTree(departs, "0");
/**
* 构建树
*构建树并且查询员工信息
* @param list
* @param pid
* @return
*/
private List<SysDepart> buildTree(List<SysDepart> list, String pid) {
List<SysDepart> treeList = new ArrayList<>();
list.forEach(l -> {
if (StrUtil.equals(pid, l.getParentId().toString())) {
l.setChildren(buildTree(list, l.getId().toString()));
treeList.add(l);
}
});
return treeList;
}
//数据