fix: 优化流域树

This commit is contained in:
tangwei 2026-06-04 18:00:10 +08:00
parent 272b85b275
commit 820eb37548

View File

@ -353,17 +353,14 @@ public class TreeStructureServiceImpl implements ITreeStructureService {
public List<Map<String, Object>> getRvcdEngTree(String rvcd, String engName) {
List<Map<String, Object>> result = new ArrayList<>();
// 1. 查询流域列表
List<SdRvcdDic> rvcdList;
// 1. 查询流域列表名称与排序口径对齐注册下拉
List<SdRvcdDic> 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<String, SdRvcdDic> 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<String, SdRvcdDic> rvcdMap) {
if (current == null || !StringUtils.hasText(targetRvcd)) {
return false;
}
if (targetRvcd.equals(current.getRvcd())) {
return true;
}
Set<String> 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<Map<String, Object>> getBaseEngTree(String baseId, String engName) {
List<Map<String, Object>> result = new ArrayList<>();