1、数据库实体类:
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.util.ArrayList;
import java.util.List;
@Data
@ApiModel(value="机构树结构", description="机构树结构")
public class OrganizationTree {
private Long id;
/**
* 机构编码
*/
@ApiModelProperty(value = "机构编码")
private String orgCode;
/**
* 机构名称
*/
@ApiModelProperty(value = "机构名称")
private String orgName;
/**
* 父机构id
*/
@ApiModelProperty(value = "子机构")
private List<OrganizationTree> children=new ArrayList<>();
}
2、树实体类:
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.util.ArrayList;
import java.util.List;
@Data
@ApiModel(value="机构树结构", description="机构树结构")
public class OrganizationTree {
private Long id;
/**
* 机构编码
*/
@ApiModelProperty(value = "机构编码")
private String orgCode;
/**
* 机构名称
*/
@ApiModelProperty(value = "机构名称")
private String orgName;
/**
* 父机构id
*/
@ApiModelProperty(value = "子机构")
private List<OrganizationTree> children=new ArrayList<>();
}
3、循环构建树
/**
* 根据pid将列表转成树结构
* @param organizationEntityList
* @return
*/
private List<OrganizationTree> listToTree(List<OrganizationEntity> organizationEntityList){
List<OrganizationEntity> rootList=getRootParent(organizationEntityList,-1L);
List<OrganizationTree> organizationTreeList=new ArrayList<>();
ListUtil.copyList(rootList,organizationTreeList,OrganizationTree.class);
return createChildren(organizationTreeList,organizationEntityList);
}
/**
* 循环构建children
* @param organizationTreeList
*/
private List<OrganizationTree> createChildren(List<OrganizationTree> organizationTreeList,List<OrganizationEntity> rootList){
for(OrganizationTree tree:organizationTreeList){
List<OrganizationEntity> organizationEntityList=getRootParent(rootList,tree.getId());
if(organizationEntityList!=null&&organizationEntityList.size()>0){
List<OrganizationTree> organizationTrees=new ArrayList<>();
ListUtil.copyList(organizationEntityList,organizationTrees,OrganizationTree.class);
tree.setChildren(organizationTrees);
createChildren(tree.getChildren(),rootList);
}
}
return organizationTreeList;
}
/**
* 找到列表中所有的顶级节点
* @param organizationEntityList
* @return
*/
private List<OrganizationEntity> getRootParent(List<OrganizationEntity> organizationEntityList,Long pid){
List<OrganizationEntity> list=new ArrayList<>();
for(OrganizationEntity organizationEntity:organizationEntityList){
if(pid==organizationEntity.getPid()){
list.add(organizationEntity);
}
}
organizationEntityList.removeAll(list);
return list;
}