79 lines
2.1 KiB
Plaintext
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> |