Sfoglia il codice sorgente

content-service/geo 的 MapService 添加一个获取省市县三级联动数据的方法

reghao 7 mesi fa
parent
commit
688707f5c7

+ 19 - 0
content/content-service/src/main/java/cn/reghao/tnb/content/app/geo/model/vo/CascadeOption.java

@@ -0,0 +1,19 @@
+package cn.reghao.tnb.content.app.geo.model.vo;
+
+import lombok.Getter;
+import lombok.Setter;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * @author reghao
+ * @date 2025-08-12 15:27:26
+ */
+@Getter
+@Setter
+public class CascadeOption {
+    private String label;
+    private String value;
+    private List<CascadeOption> children = new ArrayList<>();
+}

+ 55 - 2
content/content-service/src/main/java/cn/reghao/tnb/content/app/geo/service/MapService.java

@@ -7,6 +7,7 @@ import cn.reghao.tnb.content.app.geo.model.po.BusStation;
 import cn.reghao.tnb.content.app.geo.model.po.GeoChina;
 import cn.reghao.tnb.content.app.geo.model.po.GeoChina;
 import cn.reghao.tnb.content.app.geo.model.po.GeoPoint;
 import cn.reghao.tnb.content.app.geo.model.po.GeoPoint;
 import cn.reghao.tnb.content.app.geo.model.po.GeoPolygon;
 import cn.reghao.tnb.content.app.geo.model.po.GeoPolygon;
+import cn.reghao.tnb.content.app.geo.model.vo.CascadeOption;
 import cn.reghao.tnb.content.app.geo.model.vo.GeoMarker;
 import cn.reghao.tnb.content.app.geo.model.vo.GeoMarker;
 import cn.reghao.tnb.content.app.geo.model.vo.MapMarker;
 import cn.reghao.tnb.content.app.geo.model.vo.MapMarker;
 import cn.reghao.tnb.content.app.geo.model.vo.MapPoint;
 import cn.reghao.tnb.content.app.geo.model.vo.MapPoint;
@@ -15,6 +16,7 @@ import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 import org.springframework.transaction.annotation.Transactional;
 import org.springframework.transaction.interceptor.TransactionAspectSupport;
 import org.springframework.transaction.interceptor.TransactionAspectSupport;
 
 
+import java.util.ArrayList;
 import java.util.HashMap;
 import java.util.HashMap;
 import java.util.List;
 import java.util.List;
 import java.util.Map;
 import java.util.Map;
@@ -31,6 +33,7 @@ public class MapService {
     private final GeoPolygonMapper geoPolygonMapper;
     private final GeoPolygonMapper geoPolygonMapper;
     private final GeoPointMapper geoPointMapper;
     private final GeoPointMapper geoPointMapper;
     private final BusStationMapper busStationMapper;
     private final BusStationMapper busStationMapper;
+    private final List<CascadeOption> cascadeOptionList = new ArrayList<>();
 
 
     public MapService(GeoChinaMapper geoChinaMapper, GeoPolygonMapper geoPolygonMapper,
     public MapService(GeoChinaMapper geoChinaMapper, GeoPolygonMapper geoPolygonMapper,
                       GeoPointMapper geoPointMapper, BusStationMapper busStationMapper) {
                       GeoPointMapper geoPointMapper, BusStationMapper busStationMapper) {
@@ -43,8 +46,8 @@ public class MapService {
     @Transactional(rollbackFor = Exception.class)
     @Transactional(rollbackFor = Exception.class)
     public void add(GeoChina geoChina, GeoPolygon geoPolygon) {
     public void add(GeoChina geoChina, GeoPolygon geoPolygon) {
         try {
         try {
-            //geoChinaMapper.save(geoChina);
-            geoPolygonMapper.save(geoPolygon);
+            geoChinaMapper.save(geoChina);
+            //geoPolygonMapper.save(geoPolygon);
         } catch (Exception e) {
         } catch (Exception e) {
             log.info("insert {} -> {} error", geoChina.getId(), geoChina.getExtName());
             log.info("insert {} -> {} error", geoChina.getId(), geoChina.getExtName());
             TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
             TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
@@ -112,4 +115,54 @@ public class MapService {
         map.put("path", list1);
         map.put("path", list1);
         return List.of(map);
         return List.of(map);
     }
     }
+
+    private void loadChinaCascade() {
+        cascadeOptionList.clear();
+        List<GeoChina> geoChinaList = geoChinaMapper.findAll();
+        Map<Integer, List<GeoChina>> groupMap = geoChinaList.stream().collect(Collectors.groupingBy(GeoChina::getPid));
+        int pid = 0;
+        List<GeoChina> level1 = groupMap.get(pid);
+        for (GeoChina  geoChina1 : level1) {
+            CascadeOption cascadeOption1 = new CascadeOption();
+            cascadeOption1.setLabel(geoChina1.getName());
+            cascadeOption1.setValue(geoChina1.getName());
+
+            pid = geoChina1.getId();
+            List<GeoChina> level2 = groupMap.get(pid);
+            for (GeoChina geoChina2 : level2) {
+                CascadeOption cascadeOption2 = new CascadeOption();
+                cascadeOption2.setLabel(geoChina2.getName());
+                cascadeOption2.setValue(geoChina2.getName());
+
+                pid = geoChina2.getId();
+                List<GeoChina> level3 = groupMap.get(pid);
+                for (GeoChina geoChina3 : level3) {
+                    CascadeOption cascadeOption3 = new CascadeOption();
+                    cascadeOption3.setLabel(geoChina3.getName());
+                    cascadeOption3.setValue(geoChina3.getName());
+                    cascadeOption3.setChildren(null);
+                    cascadeOption2.getChildren().add(cascadeOption3);
+                }
+                cascadeOption1.getChildren().add(cascadeOption2);
+            }
+
+            cascadeOptionList.add(cascadeOption1);
+        }
+    }
+
+    /**
+     * 省市县三级联动数据
+     *
+     * @param
+     * @return
+     * @date 2025-08-12 16:41:41
+     */
+    public List<CascadeOption> getChinaCascade() {
+        if (!cascadeOptionList.isEmpty()) {
+            return cascadeOptionList;
+        }
+
+        loadChinaCascade();
+        return cascadeOptionList;
+    }
 }
 }

+ 5 - 0
content/content-service/src/main/resources/mapper/geo/GeoChinaMapper.xml

@@ -17,6 +17,11 @@
         </foreach>
         </foreach>
     </insert>
     </insert>
 
 
+    <select id="findAll" resultType="cn.reghao.tnb.content.app.geo.model.po.GeoChina">
+        select *
+        from geo_china
+        limit 10000
+    </select>
     <select id="findById" resultType="cn.reghao.tnb.content.app.geo.model.po.GeoChina">
     <select id="findById" resultType="cn.reghao.tnb.content.app.geo.model.po.GeoChina">
         select *
         select *
         from geo_china
         from geo_china