Files
qwsy/材料/code/areatree.txt
2025-08-12 13:49:51 +08:00

79 lines
2.1 KiB
Plaintext

/**
* 获取区域树结构
*/
@GetMapping("/areaTree")
public AjaxResult areaTree() throws Exception {
return success(areaService.selectAreaAllTree());
}
/**
* 获取完整区域树结构
* @return
*/
List<TreeSelectNew> selectAreaAllTree();
/**
* 构建完整的树形结构
*/
public List<SysArea> buildAreaTree(List<SysArea> allAreas) {
// 创建 parentId -> 子节点列表 映射
Map<Long, List<SysArea>> 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<SysArea> getChildren(Long parentId, Map<Long, List<SysArea>> childrenMap) {
List<SysArea> children = childrenMap.getOrDefault(parentId, new ArrayList<>());
children.forEach(child -> child.setChildren(getChildren(child.getDeptId(), childrenMap)));
return children;
}
/**
* 获取完整区域树结构
*/
@Override
public List<TreeSelectNew> selectAreaAllTree() {
// 获取所有区域信息
List<SysArea> allAreas = sysAreaMapper.selectAreaAllTree();
// 获取完整树结构
List<SysArea> fullTree = buildAreaTree(allAreas);
return fullTree.stream()
.map(TreeSelectNew::new)
.collect(Collectors.toList());
}
/**
* 获取全部区域数据
* @return
*/
List<SysArea> selectAreaAllTree();
<select id="selectAreaAllTree" resultMap="SysAreaResult">
SELECT
dept_id ,
dept_code,
parent_id,
ancestors,
dept_name ,
types,
levels
FROM
sys_area
<where>
del_flag = 0
AND `status` = 0
</where>
</select>