生成树形结构的数据,将其返回给前端
一、处理树形结构逻辑
最近在开发中,前端需要以树形结构来展示各个级联部门,因此需要后端把数据处理成树形结构再返回给前端。
我的想法是:需要三个集合,第一个是所有部门数据集合,第二个是处理生成树状的集合,第三个是子集合(在树状集合的父节点中)。遍历所有部门数据集合,查找顶级父节点(A),将其封装到树状集合中,那么现在的树状集合只有顶级父节点(A)。再遍历树状集合,判断顶级父节点(A)是否有子节点,若有子节点(A1),则把这些子节点封装到父节点的子集合中,再判断这些子节点(A1)是否有它自己的子节点(A11、A12、A13,若有则再次将这些子节点)封装到他的父节点(A1)的子集合中,再判断(A11)是否有它的子节点,以此类推,就像递归一样。把处理好的树状集合返回给前端,这里的顶级父节点可以有多个(A、B、C…)。
二、代码实现
数据库表(sys_depart)
这里为了方便查看将id设置成了自增,不用mybatis-plus的自动生成id。
实体类
SysDepart :
@TableId(type = IdType.AUTO)这是表明表字段自增,不加此注解和type默认的是自动生成id
@JsonFormat(timezone = “GMT+8”, pattern = “yyyy-MM-dd HH:mm:ss”)这是返回json数据时间的格式
@Data
@AllArgsConstructor
@NoArgsConstructor
public class SysDepart implements Serializable {
/**
* 主键
*/
@TableId(type = IdType.AUTO)
@ApiModelProperty(value="主键")
private Integer id;
/**
* 父部门id
*/
@ApiModelProperty(value="父部门id")
private Integer parentId;
/**
* 部门
*/
@ApiModelProperty(value="部门")
private String departName;
/**
* 排序
*/
@ApiModelProperty(value = "排序")
private Integer departOrder;
/**
* 创建人
*/
@TableField(fill = FieldFill.INSERT)
@ApiModelProperty(value="创建人")
private String createBy;
/**
* 创建时间
*/
@ApiModelProperty(value="创建时间")
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
@JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss")
@TableField(fill = FieldFill.INSERT)
private Date createTime;
/**
* 更新人
*/
@ApiModelProperty(value="更新人")
@TableField(fill = FieldFill.UPDATE)
private String updateBy;
/**
* 更新时间
*/
@ApiModelProperty(value="更新时间")
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
@JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss")
@TableField(fill = FieldFill.UPDATE)
private Date updateTime;
/**
* 删除状态
*/
@ApiModelProperty(value="删除状态")
@TableField(fill = FieldFill.INSERT)
@TableLogic
private Integer delFlag;
/**
* 版本号
*/
@ApiModelProperty(value="版本号")
@Version