From 820eb3754877a56ca100fe9cdb8887a1deb393fe Mon Sep 17 00:00:00 2001 From: tangwei Date: Thu, 4 Jun 2026 18:00:10 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E4=BC=98=E5=8C=96=E6=B5=81=E5=9F=9F?= =?UTF-8?q?=E6=A0=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../impl/TreeStructureServiceImpl.java | 35 +++++++++++++------ 1 file changed, 25 insertions(+), 10 deletions(-) diff --git a/backend/src/main/java/com/yfd/platform/qgc_base/service/impl/TreeStructureServiceImpl.java b/backend/src/main/java/com/yfd/platform/qgc_base/service/impl/TreeStructureServiceImpl.java index 0f627d39..4ceb2135 100644 --- a/backend/src/main/java/com/yfd/platform/qgc_base/service/impl/TreeStructureServiceImpl.java +++ b/backend/src/main/java/com/yfd/platform/qgc_base/service/impl/TreeStructureServiceImpl.java @@ -353,17 +353,14 @@ public class TreeStructureServiceImpl implements ITreeStructureService { public List> getRvcdEngTree(String rvcd, String engName) { List> result = new ArrayList<>(); - // 1. 查询流域列表 - List rvcdList; + // 1. 查询流域列表,名称与排序口径对齐注册下拉 + List rvcdList = rvcdDicMapper.selectRegDropdown(null, null); 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(); + Map rvcdMap = rvcdList.stream() + .collect(Collectors.toMap(SdRvcdDic::getRvcd, item -> item, (left, right) -> left)); + rvcdList = rvcdList.stream() + .filter(item -> isSameOrDescendantRvcd(item, rvcd, rvcdMap)) + .collect(Collectors.toList()); } // 2. 预加载所有流域下的电站(按流域分组) @@ -428,6 +425,24 @@ public class TreeStructureServiceImpl implements ITreeStructureService { return result; } + private boolean isSameOrDescendantRvcd(SdRvcdDic current, String targetRvcd, Map rvcdMap) { + if (current == null || !StringUtils.hasText(targetRvcd)) { + return false; + } + if (targetRvcd.equals(current.getRvcd())) { + return true; + } + Set visited = new HashSet<>(); + SdRvcdDic cursor = current; + while (cursor != null && StringUtils.hasText(cursor.getPrvcd()) && visited.add(cursor.getRvcd())) { + if (targetRvcd.equals(cursor.getPrvcd())) { + return true; + } + cursor = rvcdMap.get(cursor.getPrvcd()); + } + return false; + } + @Override public List> getBaseEngTree(String baseId, String engName) { List> result = new ArrayList<>();