機構樹,數據表格裏面有parentId這種,通過遞歸查詢機構樹
結果類似於
實體:通過list存儲子菜單
@Data
public class OrganizationVo{
private String fatherName;
private Integer id;
private String name;
private Integer fatherId;
private Date createTime;
private Date updateTime;
/**
* 是否葉子節點:0否、1是
*/
private Integer isLeaf;
private static final long serialVersionUID = 1L;
private List<CustomerOrganizationVo> child;
}
通過遞歸查詢子機構
@Override
public OrganizationVo departmentTree(Integer id) {
OrganizationVo OrganizationVoTree = new OrganizationVo();
//找到最頂級菜單
Organization departmentFather = organizationMapper.selectByPrimaryKey(1);
OrganizationVoTree.setId(departmentFather.getId());
OrganizationVoTree.setName(departmentFather.getName());
OrganizationVoTree.setFatherId(departmentFather.getFatherId());
OrganizationVoTree.setChild(getDepartmentChild(departmentFather));
return OrganizationVoTree;
}
private List<OrganizationVo> getDepartmentChild(Organization father) {
List<OrganizationVo> tree = new LinkedList<>();
if (father.getIsLeaf() == 0) {
//通過當前機構的id,找到他的所有的字機構,這裏使用Example
OrganizationExample example = new OrganizationExample();
example.createCriteria().andFatherIdEqualTo(father.getId());
List<Organization> OrganizationList = organizationMapper.selectByExample(example);
for (Organization organization : OrganizationList) {
OrganizationVo organizationVo = new OrganizationVo();
BeanUtils.copyProperties(organization, organizationVo);
organizationVo.setFatherId(father.getId());
organizationVo.setFatherName(father.getName());
//遞歸查詢子結構
organizationVo.setChild(getDepartmentChild(organization));
tree.add(organizationVo);
}
}
return tree;
}