diff --git a/backend/src/main/java/com/yfd/platform/env/controller/TreeStructureController.java b/backend/src/main/java/com/yfd/platform/env/controller/TreeStructureController.java index c3ab36e..f1c4b4b 100644 --- a/backend/src/main/java/com/yfd/platform/env/controller/TreeStructureController.java +++ b/backend/src/main/java/com/yfd/platform/env/controller/TreeStructureController.java @@ -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> 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) { diff --git a/backend/src/main/java/com/yfd/platform/env/service/ITreeStructureService.java b/backend/src/main/java/com/yfd/platform/env/service/ITreeStructureService.java index 918c854..360f88d 100644 --- a/backend/src/main/java/com/yfd/platform/env/service/ITreeStructureService.java +++ b/backend/src/main/java/com/yfd/platform/env/service/ITreeStructureService.java @@ -38,4 +38,11 @@ public interface ITreeStructureService { * 获取公司树(带子节点标记) */ List> getHycdTree(String phycd); + + /** + * 获取流域-电站树形结构(二级树) + * @param rvcd 流域编码(可选,为空则返回全部) + * @param engName 电站名称(可选,用于模糊筛选电站) + */ + List> getRvcdEngTree(String rvcd, String engName); } diff --git a/backend/src/main/java/com/yfd/platform/env/service/impl/TreeStructureServiceImpl.java b/backend/src/main/java/com/yfd/platform/env/service/impl/TreeStructureServiceImpl.java index f8502ca..440687a 100644 --- a/backend/src/main/java/com/yfd/platform/env/service/impl/TreeStructureServiceImpl.java +++ b/backend/src/main/java/com/yfd/platform/env/service/impl/TreeStructureServiceImpl.java @@ -346,4 +346,85 @@ public class TreeStructureServiceImpl implements ITreeStructureService { return result; } + + @Override + public List> getRvcdEngTree(String rvcd, String engName) { + List> result = new ArrayList<>(); + + // 1. 查询流域列表 + List 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> rvcdEngMap = new HashMap<>(); + for (SdRvcdDic rvcdDic : rvcdList) { + List 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 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 engList = rvcdEngMap.get(rvcdDic.getRvcd()); + List> engChildren = new ArrayList<>(); + + if (engList != null && !engList.isEmpty()) { + for (SdEngInfoBH eng : engList) { + Map 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; + } + + }