1
0
gushoubang преди 2 месеца
родител
ревизия
b635e85ef1

+ 4 - 4
siwei-modules/siwei-apply/src/main/java/com/siwei/apply/controller/NodeLandController.java

@@ -50,17 +50,17 @@ public class NodeLandController extends BaseController {
      * 根据nodeId查询地块几何信息
      *
      * @param nodeId 节点ID
-     * @return 地块几何信息列表
+     * @return 地块几何信息,包含geom_db_id和并集的外边框、中心点
      */
     @GetMapping("/geom/{nodeId}")
-    public R<List<String>> getGeomByNodeId(@PathVariable String nodeId) {
+    public R<Map<String, Object>> getGeomByNodeId(@PathVariable String nodeId) {
         try {
             if (nodeId == null || nodeId.trim().isEmpty()) {
                 return R.fail("nodeId不能为空");
             }
 
-            List<String> geomList = nodeLandService.getGeomByNodeId(nodeId);
-            return R.ok(geomList);
+            Map<String, Object> geomInfo = nodeLandService.getGeomByNodeId(nodeId);
+            return R.ok(geomInfo);
 
         } catch (Exception e) {
             logger.error("查询节点地块几何信息异常", e);

+ 3 - 3
siwei-modules/siwei-apply/src/main/java/com/siwei/apply/mapper/NodeLandMapper.java

@@ -13,12 +13,12 @@ import java.util.Map;
 public interface NodeLandMapper {
 
     /**
-     * 根据node_id查询地块几何信息,返回ewkt格式
+     * 根据node_id查询地块几何信息,返回geom_db_id和并集的外边框、中心点
      *
      * @param nodeId 节点ID
-     * @return geom字符串数组
+     * @return 包含geomDbId、geoms、envelope、centroid的Map
      */
-    List<String> selectGeomByNodeId(String nodeId);
+    Map<String, String> selectGeomByNodeId(String nodeId);
 
     /**
      * 根据node_id和geom_db_id创建记录

+ 3 - 3
siwei-modules/siwei-apply/src/main/java/com/siwei/apply/service/NodeLandService.java

@@ -17,12 +17,12 @@ public interface NodeLandService {
     void createNodeLand(String nodeId, String geomDbId);
 
     /**
-     * 根据nodeId查询地块几何信息,返回ewkt格式
+     * 根据nodeId查询地块几何信息,返回geom_db_id和并集的外边框、中心点
      *
      * @param nodeId 节点ID
-     * @return geom字符串数组
+     * @return 包含geomDbId、geoms、envelope、centroid的Map
      */
-    List<String> getGeomByNodeId(String nodeId);
+    Map<String, Object> getGeomByNodeId(String nodeId);
 
     /**
      * 根据nodeId删除节点地块关联记录

+ 32 - 6
siwei-modules/siwei-apply/src/main/java/com/siwei/apply/service/impl/NodeLandServiceImpl.java

@@ -8,8 +8,7 @@ import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
-import java.util.List;
-import java.util.Map;
+import java.util.*;
 
 /**
  * 节点地块关联 服务实现类
@@ -51,16 +50,43 @@ public class NodeLandServiceImpl implements NodeLandService {
     }
     
     @Override
-    public List<String> getGeomByNodeId(String nodeId) {
+    public Map<String, Object> getGeomByNodeId(String nodeId) {
         try {
             if (nodeId == null || nodeId.trim().isEmpty()) {
                 logger.warn("查询地块几何信息失败:nodeId不能为空");
                 return null;
             }
 
-            List<String> geomList = nodeLandMapper.selectGeomByNodeId(nodeId);
-            logger.info("查询到 {} 条地块几何信息,nodeId: {}", geomList.size(), nodeId);
-            return geomList;
+            Map<String, String> result = nodeLandMapper.selectGeomByNodeId(nodeId);
+            if (result == null) {
+                logger.info("未查询到地块几何信息,nodeId: {}", nodeId);
+                return null;
+            }
+
+            // 调试日志:打印从数据库返回的原始数据
+            logger.info("数据库返回的原始数据: {}", result);
+            logger.info("geomDbId的值: {}", result.get("geomDbId"));
+
+            // 处理返回数据格式
+            Map<String, Object> response = new HashMap<>();
+
+            // 添加geomDbId - 单个值
+            response.put("geomDbId", result.get("geomDbId"));
+
+            // 处理geoms - 转换为字符串数组
+            String geomsStr = result.get("geoms");
+            if (geomsStr != null && !geomsStr.trim().isEmpty()) {
+                response.put("geoms", Arrays.asList(geomsStr.split("\\|")));
+            } else {
+                response.put("geoms", new ArrayList<>());
+            }
+
+            // 添加envelope和centroid
+            response.put("envelope", result.get("envelope"));
+            response.put("centroid", result.get("centroid"));
+
+            logger.info("查询到地块几何信息,nodeId: {}", nodeId);
+            return response;
 
         } catch (Exception e) {
             logger.error("查询地块几何信息异常,nodeId: {}", nodeId, e);

+ 7 - 4
siwei-modules/siwei-apply/src/main/resources/mapper/NodeLandMapper.xml

@@ -17,15 +17,18 @@
         id, node_id, geom_db_id
     </sql>
 
-    <!-- 根据node_id查询地块几何信息,返回ewkt格式 -->
-    <select id="selectGeomByNodeId" resultType="String" parameterType="String">
+    <!-- 根据node_id查询地块几何信息,返回geom_db_id和并集的外边框、中心点 -->
+    <select id="selectGeomByNodeId" resultType="map" parameterType="String">
         SELECT
-            ST_AsEWKT(gd.geom) as geom
+            nl.geom_db_id as "geomDbId",
+            array_to_string(array_agg(ST_AsEWKT(gd.geom)), '|') as "geoms",
+            ST_AsEWKT(ST_Envelope(ST_Union(gd.geom))) as "envelope",
+            ST_AsEWKT(ST_Centroid(ST_Union(gd.geom))) as "centroid"
         FROM t_node_land nl
         LEFT JOIN t_geom_db_details gd ON nl.geom_db_id = gd.upload_id
         WHERE nl.node_id = #{nodeId}
         AND gd.geom IS NOT NULL
-        ORDER BY nl.id
+        GROUP BY nl.geom_db_id
     </select>
 
     <!-- 根据node_id和geom_db_id创建记录 -->