From 8aa79d9913374a471c80f5855a773850b87f601c Mon Sep 17 00:00:00 2001
From: 13693261870 <252740454@qq.com>
Date: 星期五, 04 十一月 2022 10:41:31 +0800
Subject: [PATCH] 1

---
 src/main/java/com/lf/server/service/all/BaseQueryService.java       |   38 +++++++++++++++++--
 src/main/java/com/lf/server/mapper/all/GeomBaseMapper.java          |   11 +++++
 data/db_fn.sql                                                      |   14 +++++++
 src/main/java/com/lf/server/controller/all/BaseQueryController.java |   18 +++++----
 说明.txt                                                              |    7 +--
 src/main/java/com/lf/server/entity/all/RedisCacheKey.java           |    7 +++
 6 files changed, 78 insertions(+), 17 deletions(-)

diff --git a/data/db_fn.sql b/data/db_fn.sql
index 39d027a..a55f8ca 100644
--- a/data/db_fn.sql
+++ b/data/db_fn.sql
@@ -276,6 +276,20 @@
 select * from lf.sys_domain where dom_name='dlg25gbcode';
 select * from bd.dlg_25w_aanp limit 10;
 
+select * from bd.dlg_25w_agnp
+where ST_Intersects(geom, 
+ST_PolygonFromText('POLYGON ((115.94927385452 32.3754479115071 0,121.989371092554 32.2766788010181 0,121.850621222894 29.6874200067864 0,115.9727267226 29.7835368627922 0,115.94927385452 32.3754479115071 0))', 0))
+limit 10;
+select st_srid(geom) from bd.dlg_25w_agnp limit 1;
+select * from bd.dlg_25w_agnp where class != 'BB' limit 1;
+
+
+
+
+
+
+
+
 
 
 
diff --git a/src/main/java/com/lf/server/controller/all/BaseQueryController.java b/src/main/java/com/lf/server/controller/all/BaseQueryController.java
index 79a465b..d755398 100644
--- a/src/main/java/com/lf/server/controller/all/BaseQueryController.java
+++ b/src/main/java/com/lf/server/controller/all/BaseQueryController.java
@@ -20,6 +20,7 @@
 import io.swagger.annotations.ApiOperation;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PostMapping;
 
 import java.util.List;
 
@@ -36,11 +37,11 @@
     @ApiImplicitParams({
             @ApiImplicitParam(name = "name", value = "鏄犲皠鍚嶇О", dataType = "String", paramType = "query", example = "dlgAgnp"),
             @ApiImplicitParam(name = "filter", value = "杩囨护鏉′欢", dataType = "String", paramType = "query", example = "gid >= 50 and name like '鍘�' and objectid < 5000.0"),
-            @ApiImplicitParam(name = "wkt", value = "WKT锛堣憲鍚嶆枃鏈級", dataType = "String", paramType = "query", example = "gAPpDbZ53XfoQfvT8dj/uhBWX5os8kBJQ1LrNvH3VX7byFQdUJMPiEr8Fkj0q2i1pw+L8KFrvR0MLXq2xaO21nlQQXmEPofJxpDQZwEWUIFZsToXo1kLRD3t6WQezxWB8YTzXHM20Ba73x/ZuuezVhOFOq1U8HKf1dXQdv7gBzEB6fWMmFDc3FuH8GDDHv3LfT86Gio9VgMO6ohlrUdf3ZKtTHeLSuzGF4t0RZuX97YBNo25IIzpeTfRTXBxfdxA"),
-            @ApiImplicitParam(name = "srid", value = "绌洪棿寮曠敤鏍囪瘑绗�", dataType = "Integer", paramType = "query", example = "4326")
+            @ApiImplicitParam(name = "wkt", value = "WKT锛堣憲鍚嶆枃鏈級", dataType = "String", paramType = "query", example = "gAPpDbZ53XfoQfvT8dj/uhBWX5os8kBJQ1LrNvH3VX7byFQdUJMPiEr8Fkj0q2i1pw+L8KFrvR0MLXq2xaO21nlQQXmEPofJxpDQZwEWUIFZsToXo1kLRD3t6WQezxWB8YTzXHM20Ba73x/ZuuezVhOFOq1U8HKf1dXQdv7gBzEB6fWMmFDc3FuH8GDDHv3LfT86Gio9VgMO6ohlrUdf3ZKtTHeLSuzGF4t0RZuX97YBNo25IIzpeTfRTXBxfdxA")
     })
-    @GetMapping({"/selectCount"})
-    public ResponseMsg<Long> selectCount(String name, String filter, String wkt, Integer srid) {
+    @GetMapping(value = "/selectCount")
+    @PostMapping(value = "/selectCount")
+    public ResponseMsg<Long> selectCount(String name, String filter, String wkt) {
         try {
             BasicMapper baseMapper = baseQueryService.getBasicMapper(name);
             if (baseMapper == null) {
@@ -49,7 +50,7 @@
 
             QueryWrapper wrapper = new QueryWrapper();
             baseQueryService.addFilterWrapper(wrapper, filter);
-            baseQueryService.addGeomWrapper(baseMapper, wrapper, wkt, srid);
+            baseQueryService.addGeomWrapper(baseMapper, wrapper, wkt);
 
             long count = baseMapper.selectCount(wrapper);
 
@@ -65,12 +66,13 @@
             @ApiImplicitParam(name = "name", value = "鏄犲皠鍚嶇О", dataType = "String", paramType = "query", example = "dlgAgnp"),
             @ApiImplicitParam(name = "filter", value = "杩囨护鏉′欢", dataType = "String", paramType = "query", example = ""),
             @ApiImplicitParam(name = "wkt", value = "WKT锛堣憲鍚嶆枃鏈級", dataType = "String", paramType = "query", example = ""),
-            @ApiImplicitParam(name = "srid", value = "绌洪棿寮曠敤鏍囪瘑绗�", dataType = "Integer", paramType = "query", example = "4326"),
+            //@ApiImplicitParam(name = "srid", value = "绌洪棿寮曠敤鏍囪瘑绗�", dataType = "Integer", paramType = "query", example = "4326"),
             @ApiImplicitParam(name = "pageIndex", value = "鍒嗛〉鏁帮紙浠�1寮�濮嬶級", dataType = "Integer", paramType = "query", example = "1"),
             @ApiImplicitParam(name = "pageSize", value = "姣忛〉鏉℃暟", dataType = "Integer", paramType = "query", example = "10")
     })
     @GetMapping(value = "/selectByPage")
-    public ResponseMsg<List<Object>> selectByPage(String name, String filter, String wkt, Integer srid, Integer pageIndex, Integer pageSize) {
+    @PostMapping(value = "/selectByPage")
+    public ResponseMsg<List<Object>> selectByPage(String name, String filter, String wkt, Integer pageIndex, Integer pageSize) {
         try {
             BasicMapper baseMapper = baseQueryService.getBasicMapper(name);
             if (baseMapper == null) {
@@ -79,7 +81,7 @@
 
             QueryWrapper wrapper = new QueryWrapper();
             baseQueryService.addFilterWrapper(wrapper, filter);
-            baseQueryService.addGeomWrapper(baseMapper, wrapper, wkt, srid);
+            baseQueryService.addGeomWrapper(baseMapper, wrapper, wkt);
 
             Page<Object> page = new Page<>(pageIndex, pageSize);
             page.addOrder(OrderItem.asc("gid"));
diff --git a/src/main/java/com/lf/server/entity/all/RedisCacheKey.java b/src/main/java/com/lf/server/entity/all/RedisCacheKey.java
index 2c15a63..27bff13 100644
--- a/src/main/java/com/lf/server/entity/all/RedisCacheKey.java
+++ b/src/main/java/com/lf/server/entity/all/RedisCacheKey.java
@@ -67,4 +67,11 @@
     public static String blacklistKey(String key) {
         return "blacklist:" + key;
     }
+
+    /**
+     * 鍑犱綍瀵硅薄鐨勭┖闂村弬鑰冮敭
+     */
+    public static String sridKey(String key) {
+        return "geom:srid:" + key;
+    }
 }
diff --git a/src/main/java/com/lf/server/mapper/all/GeomBaseMapper.java b/src/main/java/com/lf/server/mapper/all/GeomBaseMapper.java
index 616be8c..dbcefd9 100644
--- a/src/main/java/com/lf/server/mapper/all/GeomBaseMapper.java
+++ b/src/main/java/com/lf/server/mapper/all/GeomBaseMapper.java
@@ -16,6 +16,15 @@
      * @param gid GID
      * @return WKT
      */
-    @Select("select st_astext(geom) geom from ${tab} where gid = #{gid}")
+    @Select("select ST_AsText(geom) geom from ${tab} where gid = #{gid}")
     public String selectWktById(@Param("tab") String tab, @Param("gid") Integer gid);
+
+    /**
+     * 鏍规嵁琛ㄥ悕鏌ヨ绌洪棿鍙傝��
+     *
+     * @param tab 琛ㄥ悕
+     * @return SRID
+     */
+    @Select("select ST_SRID(geom) from ${tab} limit 1")
+    public Integer selectSrid(@Param("tab") String tab);
 }
diff --git a/src/main/java/com/lf/server/service/all/BaseQueryService.java b/src/main/java/com/lf/server/service/all/BaseQueryService.java
index bf20e0a..40a1769 100644
--- a/src/main/java/com/lf/server/service/all/BaseQueryService.java
+++ b/src/main/java/com/lf/server/service/all/BaseQueryService.java
@@ -2,6 +2,7 @@
 
 import com.baomidou.mybatisplus.annotation.TableName;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.lf.server.entity.all.RedisCacheKey;
 import com.lf.server.entity.ctrl.IdNameEntity;
 import com.lf.server.entity.ctrl.TabEntity;
 import com.lf.server.entity.data.DictEntity;
@@ -13,11 +14,13 @@
 import com.lf.server.mapper.all.BasicMapper;
 import com.lf.server.mapper.all.GeomBaseMapper;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.data.redis.cache.RedisCache;
 import org.springframework.stereotype.Service;
 
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
+import java.util.concurrent.TimeUnit;
 
 /**
  * 鐖舵煡璇㈡湇鍔$被
@@ -27,6 +30,9 @@
 public class BaseQueryService implements BaseQueryMapper {
     @Autowired
     BaseQueryMapper baseQueryMapper;
+
+    @Autowired
+    RedisService redisService;
 
     /**
      * 琛ㄥ悕Map
@@ -161,17 +167,41 @@
      * @param basicMapper 鐖禡apper
      * @param wrapper     QueryWrapper
      * @param wkt         WKT锛堣憲鍚嶆枃鏈級
-     * @param srid        绌洪棿寮曠敤鏍囪瘑绗�
      * @throws Exception 寮傚父
      */
-    public void addGeomWrapper(BasicMapper basicMapper, QueryWrapper wrapper, String wkt, Integer srid) throws Exception {
-        if (basicMapper instanceof GeomBaseMapper && !StringHelper.isEmpty(wkt) && srid != null) {
+    public void addGeomWrapper(BasicMapper basicMapper, QueryWrapper wrapper, String wkt) throws Exception {
+        if (basicMapper instanceof GeomBaseMapper && !StringHelper.isEmpty(wkt)) {
             wkt = AesHelper.decrypt(wkt);
-            wrapper.apply(String.format("ST_Intersects(geom, ST_PolygonFromText('%s', %d))", wkt, srid));
+
+            Integer srid = getSrid((GeomBaseMapper) basicMapper);
+            wrapper.apply(String.format("ST_Intersects(ST_PolygonFromText('%s', %d), geom)", wkt, srid));
         }
     }
 
     /**
+     * 鑾峰彇鍑犱綍瀵硅薄鐨勭┖闂村弬鑰�
+     *
+     * @param basicMapper 绌洪棿鍩虹Mapper
+     * @return SRID
+     */
+    private Integer getSrid(GeomBaseMapper basicMapper) {
+        String tab = getTabName(basicMapper);
+        String key = RedisCacheKey.sridKey(tab);
+
+        Object obj = redisService.get(key);
+        if (obj instanceof Integer) {
+            return (Integer) obj;
+        }
+
+        Integer srid = basicMapper.selectSrid(tab);
+        if (srid != null) {
+            redisService.put(key, srid, 5, TimeUnit.MINUTES);
+        }
+
+        return srid;
+    }
+
+    /**
      * 鏍规嵁Mapper鑾峰彇琛ㄥ悕
      *
      * @param basicMapper Mapper
diff --git "a/\350\257\264\346\230\216.txt" "b/\350\257\264\346\230\216.txt"
index 4648dbf..70932bb 100644
--- "a/\350\257\264\346\230\216.txt"
+++ "b/\350\257\264\346\230\216.txt"
@@ -31,16 +31,15 @@
 30.寮�鍙戜笂浼燬hp鏂囦欢鍔熻兘
 31.浣跨敤Gdal璇诲彇Shp鏂囦欢锛岃鍙栧悗鍒犻櫎鏂囦欢
 32.淇敼瀛楀吀琛ㄧ殑鏁版嵁缁撴瀯锛屽彉鏇存墍鏈夋秹鍙婄殑鍚庡彴鏂规硶
-33.寮�鍙戝�煎煙琛ㄧ殑鎿嶄綔鎺ュ彛 <
-34.
-35.
+33.寮�鍙戝�煎煙琛ㄧ殑鎿嶄綔鎺ュ彛
+34.淇敼瀛楀吀绠$悊銆佸�煎煙绠$悊鐨勬帴鍙�
+35.瀵圭敤鎴枫�佽彍鍗曘�佽鑹层�佽祫婧愯繘琛屾巿鏉� <
 36.
 37.
 38.
 39.
 40.
 -----------------------------------------------
-.瀵圭敤鎴枫�佽彍鍗曘�佽鑹层�佽祫婧愯繘琛屾巿鏉�
 .娣诲姞鏌ヨ瑙掕壊銆佽彍鍗曘�佽祫婧愭潈闄愭帴鍙�
 .寮�鍙戞牴鎹疄浣撳悕绉板姩鎬佹煡璇㈣〃鐨勮褰曟暟
 .寮�鍙戞牴鎹疄浣撳悕绉拌繘琛屽姩鎬佸垎椤垫煡璇�

--
Gitblit v1.9.3