diff --git a/backend/src/main/java/com/yfd/platform/env/controller/SdRvcdDicController.java b/backend/src/main/java/com/yfd/platform/env/controller/SdRvcdDicController.java
index db9159d..c4f0890 100644
--- a/backend/src/main/java/com/yfd/platform/env/controller/SdRvcdDicController.java
+++ b/backend/src/main/java/com/yfd/platform/env/controller/SdRvcdDicController.java
@@ -71,6 +71,14 @@ public class SdRvcdDicController {
return ResponseResult.successData(rvcdDicService.getById(rvcd));
}
+ @GetMapping("/tree")
+ @Operation(summary = "获取流域树形结构")
+ public ResponseResult getTree(
+ @RequestParam(required = false) String rvcd,
+ @RequestParam(required = false) String rvnm) {
+ return ResponseResult.successData(rvcdDicService.getTree(rvcd, rvnm));
+ }
+
// @Log(module = "流域管理", value = "新增流域")
@PostMapping("/add")
@Operation(summary = "新增流域")
diff --git a/backend/src/main/java/com/yfd/platform/env/domain/SdRvcdDic.java b/backend/src/main/java/com/yfd/platform/env/domain/SdRvcdDic.java
index 239cc4d..9f3a967 100644
--- a/backend/src/main/java/com/yfd/platform/env/domain/SdRvcdDic.java
+++ b/backend/src/main/java/com/yfd/platform/env/domain/SdRvcdDic.java
@@ -6,6 +6,7 @@ import lombok.EqualsAndHashCode;
import java.io.Serializable;
import java.util.Date;
+import java.util.List;
/**
*
@@ -114,4 +115,10 @@ public class SdRvcdDic implements Serializable {
* 地图专题流域标识:1=是 0否
*/
private Integer ismap;
+
+ /**
+ * 子节点(用于树形结构,不映射数据库字段)
+ */
+ @TableField(exist = false)
+ private List children;
}
diff --git a/backend/src/main/java/com/yfd/platform/env/service/ISdRvcdDicService.java b/backend/src/main/java/com/yfd/platform/env/service/ISdRvcdDicService.java
index a66fb6a..ea8da57 100644
--- a/backend/src/main/java/com/yfd/platform/env/service/ISdRvcdDicService.java
+++ b/backend/src/main/java/com/yfd/platform/env/service/ISdRvcdDicService.java
@@ -42,4 +42,11 @@ public interface ISdRvcdDicService extends IService {
* 删除流域
*/
boolean deleteRvcdDic(String rvcd);
+
+ /**
+ * 获取流域树形结构
+ * @param rvcd 流域编码(可选,为空则返回全部)
+ * @param rvnm 流域名称(可选,用于模糊搜索)
+ */
+ List getTree(String rvcd, String rvnm);
}
diff --git a/backend/src/main/java/com/yfd/platform/env/service/impl/SdRvcdDicServiceImpl.java b/backend/src/main/java/com/yfd/platform/env/service/impl/SdRvcdDicServiceImpl.java
index 51e4b69..85f77a4 100644
--- a/backend/src/main/java/com/yfd/platform/env/service/impl/SdRvcdDicServiceImpl.java
+++ b/backend/src/main/java/com/yfd/platform/env/service/impl/SdRvcdDicServiceImpl.java
@@ -6,8 +6,10 @@ import com.yfd.platform.env.domain.SdRvcdDic;
import com.yfd.platform.env.mapper.SdRvcdDicMapper;
import com.yfd.platform.env.service.ISdRvcdDicService;
import org.springframework.stereotype.Service;
+import org.springframework.util.StringUtils;
-import java.util.List;
+import java.util.*;
+import java.util.stream.Collectors;
/**
*
@@ -58,4 +60,58 @@ public class SdRvcdDicServiceImpl extends ServiceImpl getTree(String rvcd, String rvnm) {
+ List result = new ArrayList<>();
+
+ List rootList;
+ Set rootRvcdSet = new HashSet<>();
+
+ if (StringUtils.hasText(rvcd)) {
+ SdRvcdDic singleRvcd = this.getById(rvcd);
+ if (singleRvcd != null) {
+ rootList = new ArrayList<>();
+ rootList.add(singleRvcd);
+ rootRvcdSet.add(singleRvcd.getRvcd());
+ } else {
+ return result;
+ }
+ } else {
+ rootList = getRootList();
+ for (SdRvcdDic root : rootList) {
+ rootRvcdSet.add(root.getRvcd());
+ }
+ }
+
+ List allList = this.lambdaQuery()
+ .like(StringUtils.hasText(rvnm), SdRvcdDic::getRvnm, rvnm)
+ .orderByAsc(SdRvcdDic::getOrderIndex)
+ .list();
+
+ Map> childrenMap = allList.stream()
+ .filter(item -> item.getPrvcd() != null)
+ .collect(Collectors.groupingBy(SdRvcdDic::getPrvcd));
+
+ for (SdRvcdDic root : rootList) {
+ if (rootRvcdSet.contains(root.getRvcd())) {
+ buildTreeRecursive(root, childrenMap, rootRvcdSet);
+ result.add(root);
+ }
+ }
+
+ return result;
+ }
+
+ private void buildTreeRecursive(SdRvcdDic parent, Map> childrenMap, Set rootRvcdSet) {
+ List children = childrenMap.get(parent.getRvcd());
+ if (children != null && !children.isEmpty()) {
+ for (SdRvcdDic child : children) {
+ buildTreeRecursive(child, childrenMap, rootRvcdSet);
+ }
+ parent.setChildren(children);
+ } else {
+ parent.setChildren(new ArrayList<>());
+ }
+ }
+}
\ No newline at end of file