/** * 获取区域树结构 */ @GetMapping("/areaTree") public AjaxResult areaTree() throws Exception { return success(areaService.selectAreaAllTree()); } /** * 获取完整区域树结构 * @return */ List selectAreaAllTree(); /** * 构建完整的树形结构 */ public List buildAreaTree(List allAreas) { // 创建 parentId -> 子节点列表 映射 Map> childrenMap = new HashMap<>(); allAreas.forEach(area -> { childrenMap.computeIfAbsent(area.getParentId(), k -> new ArrayList<>()).add(area); }); // 筛选顶层节点 return allAreas.stream() .filter(area -> area.getParentId() == null || area.getParentId() <= 0) .peek(area -> area.setChildren(getChildren(area.getDeptId(), childrenMap))) .collect(Collectors.toList()); } /** * 递归获取子节点 */ private List getChildren(Long parentId, Map> childrenMap) { List children = childrenMap.getOrDefault(parentId, new ArrayList<>()); children.forEach(child -> child.setChildren(getChildren(child.getDeptId(), childrenMap))); return children; } /** * 获取完整区域树结构 */ @Override public List selectAreaAllTree() { // 获取所有区域信息 List allAreas = sysAreaMapper.selectAreaAllTree(); // 获取完整树结构 List fullTree = buildAreaTree(allAreas); return fullTree.stream() .map(TreeSelectNew::new) .collect(Collectors.toList()); } /** * 获取全部区域数据 * @return */ List selectAreaAllTree();