1.入口方法: @PostMapping("/tree") public AjaxResult tree(@RequestBody BodyMap body){ //参数 String name = body.getString("name"); //组织名称 Integer status = body.getInt("status"); //状态(0 启用,1 停用) //查询 List<WhpManagerOrg> list = orgService.list(new LambdaQueryWrapper<WhpManagerOrg>() .like(StringUtils.isNotEmpty(name), WhpManagerOrg::getName, name) .eq(status != null, WhpManagerOrg::getStatus, status) .orderByAsc(WhpManagerOrg::getSort) ); return AjaxResult.success(OrgTreeVO.build(list)); }
2.封装model package com.ssitg.project.system.org.vo; import com.fasterxml.jackson.annotation.JsonFormat; import com.ssitg.project.system.org.domain.WhpManagerOrg; import lombok.Data; import org.springframework.beans.BeanUtils; import java.util.ArrayList; import java.util.Date; import java.util.List; import java.util.Map; import java.util.stream.Collectors; /** * @description: 区域树形列表 */ @Data public class OrgTreeVO { private Integer id; //主键 private Integer pid; //父主键 private String name; //名称 private Integer sort; //显示排序 private WhpManagerOrg.Status status; //状态(0 启用,1 停用) @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") private Date createTime; //创建时间 private List<OrgTreeVO> childs; //子节点 public OrgTreeVO(WhpManagerOrg org){ BeanUtils.copyProperties(org, this); } /** * 构建 * @return */ public static List<OrgTreeVO> build(List<WhpManagerOrg> orgList){ //转换为 vo List<OrgTreeVO> voList = orgList.stream().map(OrgTreeVO::new).collect(Collectors.toList()); Map<Integer, OrgTreeVO> voMaps = voList.stream().collect(Collectors.toMap(OrgTreeVO::getId, vo -> vo)); //构建 List<OrgTreeVO> root = new ArrayList<>(); //根节点 for(OrgTreeVO vo : voList){ //根节点 if(vo.getPid() == null){ root.add(vo); } //子节点 else{ OrgTreeVO parentVo = voMaps.get(vo.getPid()); if(parentVo == null) root.add(vo); //如果找不到父节点,则直接放到根节点 else parentVo.addChild(vo); } } return root; } /** * 添加子节点 * @param child */ public void addChild(OrgTreeVO child){ if(childs == null) childs = new ArrayList<>(); childs.add(child); } } 3.表结构:
4.表数据: