1.根据父节点查找下面所有叶子节点的id集合,其中selectAllChildSysDeptList方法中的sysDept实体为父节点。
public List selectAllChildSysDeptList(SysDept sysDept) {
List childIdList=new ArrayList<>();
recursionSelect(sysDept,childIdList);
return childIdList;
}
private void recursionSelect(SysDept sysDept,List<String> childIdList) {
//先通过parentId查找下面的所有叶子节点
SysDept dept=new SysDept();
dept.setParentDeptId(sysDept.getDeptId());
List<SysDept> childList=sysDeptDao.selectSysDeptList(dept);
if(!CollectionUtils.isEmpty(childList)){
for(SysDept sysDeptVo:childList){
childIdList.add(sysDeptVo.getDeptId());
recursionSelect(sysDeptVo,childIdList);
}
}
}
2.获取树结构的递归算法。
public List getDeptTree() {
List sysDeptList = sysDeptRepository.findAll();
List treeNodeVoList = new ArrayList();
if (!CollectionUtils.isEmpty(sysDeptList)) {
for (SysDept sysDept : sysDeptList) {
//父id为空的节点为根节点
if (StringUtils.isEmpty(sysDept.getParentDeptId())) {
TreeNodeVo treeNodeVo = new TreeNodeVo();
treeNodeVo.setId(sysDept.getDeptId());
treeNodeVo.setName(sysDept.getDeptName());
treeNodeVo.setSonNodeList(recursionSelect(sysDept, sysDeptList));
treeNodeVoList.add(treeNodeVo);
}
}
}
return treeNodeVoList;
}
private List recursionSelect(SysDept sysDept, List sysDeptList) {
List sontreeNodeVoList = new ArrayList();
for (SysDept dept : sysDeptList) {
TreeNodeVo treeNode = new TreeNodeVo();
treeNode.setId(dept.getDeptId());
treeNode.setName(dept.getDeptName());
if (sysDept.getDeptId().equals(dept.getParentDeptId())) {
treeNode.setSonNodeList(recursionSelect(dept, sysDeptList));
sontreeNodeVoList.add(treeNode);
}
}
return sontreeNodeVoList;
}