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