Просмотр исходного кода

fix: RegionController 移除硬编码数据,改用 StreetService 读取 DB 全量省市区数据

Xiaogang Liao 1 месяц назад
Родитель
Сommit
f09c20ee6e
1 измененных файлов с 56 добавлено и 154 удалено
  1. 56 154
      cfc-backend/src/main/java/com/etotem/cfc/controller/RegionController.java

+ 56 - 154
cfc-backend/src/main/java/com/etotem/cfc/controller/RegionController.java

@@ -1,158 +1,48 @@
 package com.etotem.cfc.controller;
 
 import com.etotem.cfc.common.Result;
+import com.etotem.cfc.entity.Street;
+import com.etotem.cfc.service.StreetService;
 import org.springframework.web.bind.annotation.PostMapping;
 import org.springframework.web.bind.annotation.RequestBody;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RestController;
 
+import javax.annotation.Resource;
 import java.util.ArrayList;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
-import java.util.stream.Collectors;
 
+/**
+ * 区域选择控制器 - 省市区三级联动
+ * <p>
+ * 数据统一来自数据库 streets 表(全量数据,与 /api/streets/* 同源),
+ * 返回格式固定为 [{id, name}],供前端省市区三级联动弹窗使用。
+ */
 @RestController
 @RequestMapping("/api/region")
 public class RegionController {
 
-    private static final List<Map<String, Object>> ALL_REGIONS = new ArrayList<>();
-
-    static {
-        // Provinces
-        addRegion(1L, 0L, "北京市", 1);
-        addRegion(2L, 0L, "上海市", 1);
-        addRegion(3L, 0L, "天津市", 1);
-        addRegion(4L, 0L, "重庆市", 1);
-        addRegion(5L, 0L, "广东省", 1);
-        addRegion(6L, 0L, "浙江省", 1);
-        addRegion(7L, 0L, "江苏省", 1);
-        addRegion(8L, 0L, "山东省", 1);
-        addRegion(9L, 0L, "河南省", 1);
-        addRegion(10L, 0L, "四川省", 1);
-        addRegion(11L, 0L, "湖北省", 1);
-        addRegion(12L, 0L, "湖南省", 1);
-        addRegion(13L, 0L, "河北省", 1);
-        addRegion(14L, 0L, "福建省", 1);
-        addRegion(15L, 0L, "安徽省", 1);
-
-        // Beijing districts
-        addRegion(101L, 1L, "朝阳区", 2);
-        addRegion(102L, 1L, "海淀区", 2);
-        addRegion(103L, 1L, "西城区", 2);
-        addRegion(104L, 1L, "东城区", 2);
-        addRegion(105L, 1L, "丰台区", 2);
-        addRegion(106L, 1L, "通州区", 2);
-        addRegion(107L, 1L, "大兴区", 2);
-        addRegion(108L, 1L, "昌平区", 2);
-        addRegion(109L, 1L, "顺义区", 2);
-        addRegion(110L, 1L, "房山区", 2);
-
-        // Shanghai districts
-        addRegion(201L, 2L, "浦东新区", 2);
-        addRegion(202L, 2L, "黄浦区", 2);
-        addRegion(203L, 2L, "徐汇区", 2);
-        addRegion(204L, 2L, "长宁区", 2);
-        addRegion(205L, 2L, "静安区", 2);
-        addRegion(206L, 2L, "普陀区", 2);
-        addRegion(207L, 2L, "虹口区", 2);
-        addRegion(208L, 2L, "杨浦区", 2);
-        addRegion(209L, 2L, "闵行区", 2);
-        addRegion(210L, 2L, "宝山区", 2);
-
-        // Guangzhou (Guangdong)
-        addRegion(501L, 5L, "广州市", 2);
-        addRegion(502L, 5L, "深圳市", 2);
-        addRegion(503L, 5L, "珠海市", 2);
-        addRegion(504L, 5L, "佛山市", 2);
-        addRegion(505L, 5L, "东莞市", 2);
-        addRegion(506L, 5L, "中山市", 2);
-
-        // Hangzhou (Zhejiang)
-        addRegion(601L, 6L, "杭州市", 2);
-        addRegion(602L, 6L, "宁波市", 2);
-        addRegion(603L, 6L, "温州市", 2);
-        addRegion(604L, 6L, "嘉兴市", 2);
-
-        // Nanjing (Jiangsu)
-        addRegion(701L, 7L, "南京市", 2);
-        addRegion(702L, 7L, "苏州市", 2);
-        addRegion(703L, 7L, "无锡市", 2);
-        addRegion(704L, 7L, "常州市", 2);
-
-        // Chengdu (Sichuan)
-        addRegion(1001L, 10L, "成都市", 2);
-        addRegion(1002L, 10L, "绵阳市", 2);
-        addRegion(1003L, 10L, "德阳市", 2);
-
-        // Wuhan (Hubei)
-        addRegion(1101L, 11L, "武汉市", 2);
-        addRegion(1102L, 11L, "宜昌市", 2);
-
-        // Changsha (Hunan)
-        addRegion(1201L, 12L, "长沙市", 2);
-        addRegion(1202L, 12L, "株洲市", 2);
-
-        // Jinan (Shandong)
-        addRegion(801L, 8L, "济南市", 2);
-        addRegion(802L, 8L, "青岛市", 2);
-        addRegion(803L, 8L, "烟台市", 2);
-
-        // Fuzhou (Fujian)
-        addRegion(1401L, 14L, "福州市", 2);
-        addRegion(1402L, 14L, "厦门市", 2);
-
-        // Hefei (Anhui)
-        addRegion(1501L, 15L, "合肥市", 2);
-
-        // Some districts for major cities
-        addRegion(10101L, 101L, "望京街道", 3);
-        addRegion(10102L, 101L, "双井街道", 3);
-        addRegion(10103L, 101L, "三里屯街道", 3);
-        addRegion(10201L, 102L, "中关村街道", 3);
-        addRegion(10202L, 102L, "五道口街道", 3);
-        addRegion(10203L, 102L, "清华园街道", 3);
-        addRegion(20101L, 201L, "陆家嘴街道", 3);
-        addRegion(20102L, 201L, "张江镇", 3);
-        addRegion(50101L, 501L, "天河区", 3);
-        addRegion(50102L, 501L, "越秀区", 3);
-        addRegion(50103L, 501L, "海珠区", 3);
-        addRegion(50201L, 502L, "南山区", 3);
-        addRegion(50202L, 502L, "福田区", 3);
-        addRegion(50203L, 502L, "宝安区", 3);
-        addRegion(60101L, 601L, "西湖区", 3);
-        addRegion(60102L, 601L, "上城区", 3);
-        addRegion(70101L, 701L, "鼓楼区", 3);
-        addRegion(70102L, 701L, "玄武区", 3);
-        addRegion(100101L, 1001L, "武侯区", 3);
-        addRegion(100102L, 1001L, "锦江区", 3);
-        addRegion(110101L, 1101L, "武昌区", 3);
-        addRegion(110102L, 1101L, "江汉区", 3);
-    }
-
-    private static void addRegion(Long id, Long parentId, String name, int level) {
-        Map<String, Object> region = new HashMap<>();
-        region.put("id", id);
-        region.put("parentId", parentId);
-        region.put("name", name);
-        region.put("level", level);
-        ALL_REGIONS.add(region);
-    }
+    @Resource
+    private StreetService streetService;
 
+    /**
+     * 获取所有省份
+     */
     @PostMapping("/provinces")
     public Result<List<Map<String, Object>>> provinces() {
-        List<Map<String, Object>> result = ALL_REGIONS.stream()
-            .filter(r -> (int) r.get("level") == 1)
-            .map(r -> {
-                Map<String, Object> m = new HashMap<>();
-                m.put("id", r.get("id"));
-                m.put("name", r.get("name"));
-                return m;
-            })
-            .collect(Collectors.toList());
+        List<Street> provinces = streetService.getAllProvinces();
+        List<Map<String, Object>> result = new ArrayList<>();
+        for (Street s : provinces) {
+            result.add(buildNode(s.getId(), s.getProvince()));
+        }
         return Result.success(result);
     }
 
+    /**
+     * 根据父级ID获取下一级(城市/区县)
+     */
     @PostMapping("/cities")
     public Result<List<Map<String, Object>>> cities(@RequestBody Map<String, Object> params) {
         Object parentId = params.get("parentId");
@@ -160,39 +50,51 @@ public class RegionController {
             return Result.error("parentId不能为空");
         }
         Long pid = Long.parseLong(parentId.toString());
-        List<Map<String, Object>> result = ALL_REGIONS.stream()
-            .filter(r -> (int) r.get("level") == 2 && ((Long) r.get("parentId")).equals(pid))
-            .map(r -> {
-                Map<String, Object> m = new HashMap<>();
-                m.put("id", r.get("id"));
-                m.put("name", r.get("name"));
-                return m;
-            })
-            .collect(Collectors.toList());
+        List<Street> children = streetService.getChildrenByParentId(pid);
+        List<Map<String, Object>> result = new ArrayList<>();
+        for (Street s : children) {
+            // 根据层级取对应名称:城市取 city,区县取 district
+            String name;
+            if (s.getLevel() != null && s.getLevel() == 3) {
+                name = s.getDistrict();
+            } else {
+                name = s.getCity();
+            }
+            result.add(buildNode(s.getId(), name));
+        }
         return Result.success(result);
     }
 
+    /**
+     * 根据父级ID获取区县
+     */
     @PostMapping("/districts")
     public Result<List<Map<String, Object>>> districts(@RequestBody Map<String, Object> params) {
+        return cities(params);
+    }
+
+    /**
+     * 根据父级ID获取街道
+     */
+    @PostMapping("/streets")
+    public Result<List<Map<String, Object>>> streets(@RequestBody Map<String, Object> params) {
         Object parentId = params.get("parentId");
         if (parentId == null) {
             return Result.error("parentId不能为空");
         }
         Long pid = Long.parseLong(parentId.toString());
-        List<Map<String, Object>> result = ALL_REGIONS.stream()
-            .filter(r -> (int) r.get("level") == 3 && ((Long) r.get("parentId")).equals(pid))
-            .map(r -> {
-                Map<String, Object> m = new HashMap<>();
-                m.put("id", r.get("id"));
-                m.put("name", r.get("name"));
-                return m;
-            })
-            .collect(Collectors.toList());
+        List<Street> children = streetService.getChildrenByParentId(pid);
+        List<Map<String, Object>> result = new ArrayList<>();
+        for (Street s : children) {
+            result.add(buildNode(s.getId(), s.getStreet()));
+        }
         return Result.success(result);
     }
 
-    @PostMapping("/streets")
-    public Result<List<Map<String, Object>>> streets(@RequestBody Map<String, Object> params) {
-        return districts(params);
+    private static Map<String, Object> buildNode(Long id, String name) {
+        Map<String, Object> m = new HashMap<>();
+        m.put("id", id);
+        m.put("name", name);
+        return m;
     }
-}
+}