java代码递归部门结构树
组织所有部门树,以及条件查询部门树:
/** * 组织部门树 * @return */ @Override public List<SxyBranchVO> findAllBranchTree(String branchname) { SxyBranchVO sxyBranchVOParam = new SxyBranchVO(); sxyBranchVOParam.setBranchcode(""); sxyBranchVOParam.setDeleteflag("1"); // 查询所有根节点root List<SxyBranchVO> sxyBranchVOList = sxyBranchMapper.findParentBranchVO(sxyBranchVOParam); if(StringUtils.isNotBlank(branchname)){ // 按部门名称查询,将符合条件的节点组织成结构树 Set<SxyBranchVO> branchVOSet = new HashSet<>(); Set<SxyBranchVO> branchVOSetSub = new HashSet<>(); // 查询所有符合条件的子节点 List<SxyBranchVO> sxyBranchVOS = sxyBranchMapper.getBranchsByName(branchname); for(SxyBranchVO sxyBranchVOSub : sxyBranchVOS){ sxyBranchVOSub.setDeleteflag("1"); branchVOSet.add(sxyBranchVOSub); // 向上递归,将符合条件的节点以及其所有上级父节点放在set集合中 branchVOSetSub = buildTreeUp(sxyBranchVOSub,branchVOSetSub); for(SxyBranchVO sbv : branchVOSetSub){ branchVOSet.add(sbv); } } // 组织结构树,将符合条件的所有节点组织进结构树 List<SxyBranchVO> sxyBranchVOListNew = new ArrayList<>(); for(SxyBranchVO sxyBranchVO : sxyBranchVOList){ // 组织结构树,根节点下的所有部门 sxyBranchVO.setDeleteflag("1"); buildTree(sxyBranchVO,branchVOSet); if(sxyBranchVO.getChildren() != null && sxyBranchVO.getChildren().size() > 0){ sxyBranchVOListNew.add(sxyBranchVO); } } return sxyBranchVOListNew; }else{ // 查询所有,将所有节点组织成结构树 for(SxyBranchVO sxyBranchVO : sxyBranchVOList){ // 组织结构树,根节点下的所有部门 sxyBranchVO.setDeleteflag("1"); buildTreeAll(sxyBranchVO); } return sxyBranchVOList; } } /** * 向上递归查询所有父节点(每一层的父节点只有一个) * @param sxyBranchVOSub * @param branchVOSetSub * @return */ private Set<SxyBranchVO> buildTreeUp(SxyBranchVO sxyBranchVOSub, Set<SxyBranchVO> branchVOSetSub) { // 向上递归查询所有父节点 SxyBranchVO sxyBranchVO = sxyBranchMapper.findParentBranchVOByParentCode(sxyBranchVOSub); if(sxyBranchVO != null){ // 如果不是根节点 branchVOSetSub.add(sxyBranchVO); sxyBranchVO.setDeleteflag("1"); buildTreeUp(sxyBranchVO,branchVOSetSub); } return branchVOSetSub; } /** * 递归查询子节点(向下递归,组织符合条件的结构树) * @param sxyBranchVO */ private void buildTree(SxyBranchVO sxyBranchVO,Set<SxyBranchVO> branchVOSet) { List<SxyBranchVO> sxyBranchVOListNew = new ArrayList<>(); // 查询直属子节点 List<SxyBranchVO> sxyBranchVOList = sxyBranchMapper.findParentBranchVO(sxyBranchVO); for(SxyBranchVO sxyBranch : sxyBranchVOList){ for(SxyBranchVO sbr : branchVOSet){ if(sxyBranch.getBranchcode().equals(sbr.getBranchcode())){ sxyBranchVOListNew.add(sxyBranch); } } } sxyBranchVO.setChildren(sxyBranchVOListNew); for(SxyBranchVO sxyBranchItem : sxyBranchVOList){ sxyBranchItem.setDeleteflag("1"); buildTree(sxyBranchItem,branchVOSet); } } /** * 递归查询子节点(向下递归,组织所有结构树) * @param sxyBranchVO */ private void buildTreeAll(SxyBranchVO sxyBranchVO) { // 查询直属子节点 List<SxyBranchVO> sxyBranchVOList = sxyBranchMapper.findParentBranchVO(sxyBranchVO); sxyBranchVO.setChildren(sxyBranchVOList); for(SxyBranchVO sxyBranchItem : sxyBranchVOList){ sxyBranchItem.setDeleteflag("1"); buildTreeAll(sxyBranchItem); } }
注释掉代码,供参考:
/*private Boolean buildTreeMatch(SxyBranchVO sxyBranchVO,List<SxyBranchVO> sxyBranchVOS) {
Boolean flag = false;
// 查询直属子节点
List<SxyBranchVO> sxyBranchVOList = sxyBranchMapper.findParentBranchVO(sxyBranchVO);
for(SxyBranchVO sb : sxyBranchVOS){
for(SxyBranchVO sbv : sxyBranchVOList){
if(sb.getBranchcode().equals(sbv.getBranchcode())){
return true;
}
}
}
if(!flag){
sxyBranchVO.setChildren(sxyBranchVOList);
for(SxyBranchVO sxyBranchItem : sxyBranchVOList){
sxyBranchItem.setDeleteflag("1");
buildTreeMatch(sxyBranchItem,sxyBranchVOS);
}
}
return flag;
}*/