fix: 优化流域电站树

This commit is contained in:
tangwei 2026-04-22 09:56:42 +08:00
parent fca2c1cb8b
commit 37e17b6755
3 changed files with 98 additions and 0 deletions

View File

@ -28,6 +28,16 @@ public class TreeStructureController {
@Resource
private ITreeStructureService treeStructureService;
@GetMapping("/rvcdEng")
@Operation(summary = "获取流域-电站树形结构")
public ResponseResult getRvcdEngTree(
@RequestParam(required = false) String rvcd,
@RequestParam(required = false) String engName) {
List<Map<String, Object>> result = treeStructureService.getRvcdEngTree(rvcd, engName);
return ResponseResult.successData(result);
}
@GetMapping("/rvcdBaseEng")
@Operation(summary = "获取流域-基地-电站树形结构")
public ResponseResult getRvcdBaseEngTree(@RequestParam(required = false) String rvcd, @RequestParam(required = false) String engName) {

View File

@ -38,4 +38,11 @@ public interface ITreeStructureService {
* 获取公司树带子节点标记
*/
List<Map<String, Object>> getHycdTree(String phycd);
/**
* 获取流域-电站树形结构二级树
* @param rvcd 流域编码可选为空则返回全部
* @param engName 电站名称可选用于模糊筛选电站
*/
List<Map<String, Object>> getRvcdEngTree(String rvcd, String engName);
}

View File

@ -346,4 +346,85 @@ public class TreeStructureServiceImpl implements ITreeStructureService {
return result;
}
@Override
public List<Map<String, Object>> getRvcdEngTree(String rvcd, String engName) {
List<Map<String, Object>> result = new ArrayList<>();
// 1. 查询流域列表
List<SdRvcdDic> rvcdList;
if (StringUtils.hasText(rvcd)) {
rvcdList = rvcdDicMapper.selectByPrvcd(rvcd);
SdRvcdDic singleRvcd = rvcdDicMapper.selectById(rvcd);
if (singleRvcd != null && !rvcdList.contains(singleRvcd)) {
rvcdList = new ArrayList<>();
rvcdList.add(singleRvcd);
}
} else {
rvcdList = rvcdDicMapper.selectRootList();
}
// 2. 预加载所有流域下的电站按流域分组
Map<String, List<SdEngInfoBH>> rvcdEngMap = new HashMap<>();
for (SdRvcdDic rvcdDic : rvcdList) {
List<SdEngInfoBH> engList = engInfoBHMapper.selectByRvcd(rvcdDic.getRvcd());
// 如果提供了电站名称参数进行模糊匹配筛选
if (StringUtils.hasText(engName) && engList != null) {
engList = engList.stream()
.filter(eng -> eng.getEnnm() != null && eng.getEnnm().contains(engName))
.collect(Collectors.toList());
}
if (engList != null && !engList.isEmpty()) {
rvcdEngMap.put(rvcdDic.getRvcd(), engList);
}
}
// 3. 构建二级树形结构流域 -> 电站
for (SdRvcdDic rvcdDic : rvcdList) {
Map<String, Object> rvcdNode = new LinkedHashMap<>();
rvcdNode.put("type", "BASIN");
rvcdNode.put("code", rvcdDic.getRvcd());
rvcdNode.put("name", rvcdDic.getRvnm());
rvcdNode.put("path", rvcdDic.getPath());
rvcdNode.put("orgLevel", 0);
rvcdNode.put("grd", rvcdDic.getGrd());
rvcdNode.put("lgtd", rvcdDic.getLgtd());
rvcdNode.put("lttd", rvcdDic.getLttd());
rvcdNode.put("parentId", "0");
// 获取该流域下的所有电站
List<SdEngInfoBH> engList = rvcdEngMap.get(rvcdDic.getRvcd());
List<Map<String, Object>> engChildren = new ArrayList<>();
if (engList != null && !engList.isEmpty()) {
for (SdEngInfoBH eng : engList) {
Map<String, Object> engNode = new LinkedHashMap<>();
engNode.put("type", "STATION");
engNode.put("code", eng.getStcd());
engNode.put("name", eng.getEnnm());
engNode.put("lgtd", eng.getLgtd());
engNode.put("lttd", eng.getLttd());
engNode.put("elev", eng.getElev());
engNode.put("usfl", eng.getUsfl());
engNode.put("bldstt", eng.getBldstt());
engNode.put("engtp", eng.getEngtp());
engNode.put("parentId", rvcdDic.getRvcd());
engNode.put("orgLevel", 1);
engChildren.add(engNode);
}
}
// 只有当该流域下有电站时才添加该流域节点
if (!engChildren.isEmpty()) {
rvcdNode.put("children", engChildren);
result.add(rvcdNode);
}
}
return result;
}
}