Jelajahi Sumber

宗地变更方法

chenendian 55 menit lalu
induk
melakukan
f5fc9023f2

+ 36 - 0
siwei-modules/siwei-apply/src/main/java/com/siwei/apply/domain/cadastre/Zdbhqk.java

@@ -0,0 +1,36 @@
+package com.siwei.apply.domain.cadastre;
+
+import lombok.Data;
+import java.math.BigDecimal;
+import java.util.Date;
+
+/**
+ * 不动产权属变更申请表 ZDBHQK
+ */
+@Data
+public class Zdbhqk {
+    /** 不动产单元号 */
+    private String bdcdyh;
+    /** 宗地代码 */
+    private String zddm;
+    /** 变更原因 */
+    private String bhyy;
+    /** 变更内容 */
+    private String bhnr;
+    /** 变更日期 */
+    private Date bhsj;
+    /** 登记日期 */
+    private Date djsj;
+    /** 变更前宗地代码 */
+    private String bhqzddm;
+    /** 业务编号 */
+    private String ywh;
+    /** 登记备案人 */
+    private String dbr;
+    /** 申请业务编号 */
+    private String ssywh;
+    /** 附件 */
+    private String fj;
+    /** 有效标识:0-当前版本,1-历史版本 */
+    private Integer validFlag;
+}

+ 36 - 0
siwei-modules/siwei-apply/src/main/java/com/siwei/apply/mapper/cadastre/ZdbhqkMapper.java

@@ -0,0 +1,36 @@
+package com.siwei.apply.mapper.cadastre;
+
+import com.siwei.apply.domain.cadastre.Zdbhqk;
+import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
+import java.util.Map;
+
+
+/**
+ * 不动产权属变更申请表 数据层
+ */
+@Mapper
+public interface ZdbhqkMapper {
+
+    /**
+     * 新增不动产权属变更记录
+     */
+    void add(Zdbhqk zdbhqk);
+
+    /**
+     * 根据bdcdyh获取不动产权属变更记录
+     */
+    Zdbhqk get(@Param("bdcdyh") String bdcdyh);
+
+    /**
+     * 获取不动产权属变更记录列表
+     */
+    List<Zdbhqk> getList();
+
+    /**
+     * 更新不动产权属变更记录
+     */
+    void update(Zdbhqk zdbhqk);
+}

+ 16 - 0
siwei-modules/siwei-apply/src/main/java/com/siwei/apply/mapper/cadastre/ZdjbxxMapper.java

@@ -42,6 +42,12 @@ public interface ZdjbxxMapper {
      */
     void update(Zdjbxx zdjbxx);
 
+
+    void updateZtByBsmList(@Param("idList") List<Integer> idList);
+
+
+
+
     /**
      * 批量删除宗地基本信息记录
      */
@@ -84,4 +90,14 @@ public interface ZdjbxxMapper {
      */
     List<Map<String, Object>> getZdytReportData();
 
+    List<Zdjbxx> selectByContainsWkt(@Param("ewkt") String ewkt,@Param("rightType") String rightType);
+
+    List<Zdjbxx> queryByIntersectList(@Param("wktList") List<String> wktList);
+
+    List<Zdjbxx> selectIntersectByGeom(@Param("ewkt") String ewkt);
+
+    List<Zdjbxx> selectByInvertContainsWkt(@Param("ewkt") String ewkt ,@Param("rightType") String rightType);
+
+
+
 }

+ 169 - 2
siwei-modules/siwei-apply/src/main/java/com/siwei/apply/service/cadastre/impl/CadastreManageServiceImpl.java

@@ -1,16 +1,23 @@
 package com.siwei.apply.service.cadastre.impl;
 
+import com.fasterxml.jackson.databind.ObjectMapper;
 import com.siwei.apply.domain.CadastreFile;
 import com.siwei.apply.domain.LayerAndDbData;
 import com.siwei.apply.domain.MdbAndDbData;
+import com.siwei.apply.domain.cadastre.Zdbhqk;
+import com.siwei.apply.domain.cadastre.Zdjbxx;
 import com.siwei.apply.domain.vo.*;
 import com.siwei.apply.mapper.CadastreFileMapper;
 import com.siwei.apply.mapper.FzssFxrwrzMapper;
+import com.siwei.apply.mapper.cadastre.ZdbhqkMapper;
+import com.siwei.apply.mapper.cadastre.ZdjbxxMapper;
 import com.siwei.apply.service.cadastre.CadastreManageService;
 
 import com.siwei.apply.utils.FileExtractUtil;
 import com.siwei.apply.utils.MdbUtil;
 import com.siwei.common.core.exception.ServiceException;
+import com.siwei.common.core.utils.DateUtils;
+import com.siwei.common.core.utils.bean.BeanUtils;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.collections4.CollectionUtils;
 import org.apache.commons.collections4.MapUtils;
@@ -31,6 +38,7 @@ import java.io.File;
 import java.nio.file.Files;
 import java.nio.file.Path;
 import java.nio.file.Paths;
+import java.time.LocalDateTime;
 import java.util.*;
 import java.util.stream.Collectors;
 
@@ -57,6 +65,14 @@ public class CadastreManageServiceImpl implements CadastreManageService {
     @Autowired
     private FzssFxrwrzMapper fzssFxrwrzMapper;
 
+    @Autowired
+    private ZdjbxxMapper zdjbxxMapper;
+
+    @Autowired
+    private ZdbhqkMapper zdbhqkMapper;
+
+
+
     /**
      * 解压文件并且根据情况进行拆分或合并的处理
      * @param  上传文件名
@@ -167,9 +183,132 @@ public class CadastreManageServiceImpl implements CadastreManageService {
                             //throw new ServiceException(name + ":字段数据不一致!-" + dbFieldNameList);
                         }
                         // -----------------第三部分遍历图层进行数据处理 -------------------------------
+//                        1.方法:先获取当前图层数据,进行数据处理,获取到变化和变更多少条
+//                        2.写一个方法,通过交集求出变化和变更多少条
+//                         3. 	a.合并情况,假定excel中3条数据,先遍历excel 然后,每条数据key-然后求所有交集得到id 分组。
+//                        每一条数据获取到其 ewkt,然后进行,库中取查询,查询出所包含的数据的id
+
+                        List<Map<String, String>> dbFieldNameAndTypeList = cadastreFileMapper.selectTableCollumAndType(name.toLowerCase(Locale.ROOT));
+                        Map<String, String> dbFieldNameAndTypeMap = dbFieldNameAndTypeList.stream().collect(Collectors.toMap(
+                                s -> s.get("column_name"),
+                                s -> s.get("data_type"),
+                                (existing, replacement) -> existing // 如果有重复键,保留第一个值
+                        ));
+
+                        Map<String, String> columnTypeMap = new LinkedHashMap<>();
+                        for (Map<String, String> col : dbFieldNameAndTypeList) {
+                            columnTypeMap.put(col.get("column_name"), col.get("data_type"));
+                        }
 
-
-
+                        List<Map<String, Object>> theValueList = getValueList(layer, dbFieldNameAndTypeMap, haveGeom);
+                        //1-合并;2-拆分
+                        if("1".equalsIgnoreCase(landChangeMode)){
+                            //这里进行遍历每条数据,获取到其geom,然后进行库中查询,获取到所有的id,然后进行分组,获取到变化和变更多少条
+                            Map<Map<String, Object>, List<Integer>> geomToIdsMap = new HashMap<>();
+                            Map<Map<String, Object>, String> zddmMap = new HashMap<>();
+
+                            for (Map<String, Object> theValue : theValueList) {
+                                String wkt = (String) theValue.get("geom");
+                                List<Zdjbxx> containsZdList = zdjbxxMapper.selectByContainsWkt(wkt, landRightType);
+                                if(CollectionUtils.isEmpty(containsZdList)){
+                                    throw new ServiceException(theValue + "当前数据在库中不存在分割的数据,无法进行合并操作,请检查数据是否正确!");
+                                }
+                                containsZdList.stream().filter(s->s.getGeom()!=null).forEach(s->{
+                                    List<Integer> idList = geomToIdsMap.getOrDefault(theValue, new ArrayList<>());
+                                    idList.add(s.getBsm());
+                                    geomToIdsMap.put(theValue, idList);
+                                    //这里需要把宗地代码用/分隔,存储到zddmMap中
+                                    zddmMap.put(theValue, zddmMap.getOrDefault(theValue, "") + s.getZddm() + "/");
+                                });
+                            }//end for
+
+                            //这里针对每个key 进行入库,然后,修改bsm的zt 然后,进行入库。
+                            // -----------------第四部分遍历图层进行数据处理 ------------------------------------
+                            if(MapUtils.isNotEmpty(geomToIdsMap)){
+                                ObjectMapper objectMapper = new ObjectMapper();
+                                for(Map.Entry<Map<String, Object>, List<Integer>> entry : geomToIdsMap.entrySet()){
+                                    Map<String, Object> theValue = entry.getKey();
+                                    List<Integer> idList = entry.getValue();
+                                    //theValue.put("bsm",null);
+                                    //theValue.put("valid_flag", 0);
+
+                                    //统一转成小写
+                                    Map<String,Object> newMap = new HashMap<>();
+                                    for(Map.Entry<String,Object> e : theValue.entrySet()){
+                                        newMap.put(e.getKey().toLowerCase(), e.getValue());
+                                    }
+
+                                    //cleanDataForInsert(newMap, columnTypeMap);
+                                    Zdjbxx zdjbxx = objectMapper.convertValue(newMap, Zdjbxx.class);
+                                    zdjbxx.setValidFlag(0);
+                                    //1.入库
+                                    zdjbxxMapper.add(zdjbxx);
+                                    //2.修改bsm的zt
+                                    zdjbxxMapper.updateZtByBsmList(idList);
+                                    //合并处理入库之后需要记录到变更记录表:
+                                    String bhqzddm =   zddmMap.get(theValue);//变化前宗地代码,多个用/分隔
+                                    addZdbhqkData(zdjbxx,bhqzddm,"多块合并为一块"); //更新变化情况表
+                                }
+                            }
+                        } else if ("2".equalsIgnoreCase(landChangeMode)) { //这里拆分逻辑
+                            //这里进行遍历每条数据,获取到其geom,然后进行库中查询,获取到所有的id,然后进行分组,获取到变化和变更多少条
+                            Map<Integer, String> zddmMap = new HashMap<>();
+                            Map<Integer,List<Map<String, Object>>>  zdBsmMap = new LinkedHashMap<>();
+                            for (Map<String, Object> theValue : theValueList) {
+                                /**
+                                 * 1.先查出所有的交集bsm
+                                 * 2.用交集的bsm 二次循环,获取交集为key 的list 集合。
+                                 * 3.得出一个map<交集bsm,list<宗地信息>>  然后进行入库
+                                 * 4.  这里需要把宗地代码用/分隔,存储到zddmMap中
+                                 */
+                                String ewkt = (String) theValue.get("geom");
+                                List<Zdjbxx> containsZdList = zdjbxxMapper.selectByInvertContainsWkt(ewkt, landRightType);
+                                if(CollectionUtils.isEmpty(containsZdList)){
+                                    throw new ServiceException(theValue + "当前数据在库中不存在分割的数据,无法进行合并操作,请检查数据是否正确!");
+                                }
+                                if(containsZdList.size()>1){
+                                    throw new ServiceException(theValue + "当前拆分的地块,存在于多个历史地块中,请检查数据是否正确!");
+                                }
+                                Zdjbxx tmpZdjbxx = containsZdList.stream().findFirst().get();
+                                Integer dbZdBsm = tmpZdjbxx.getBsm();
+
+                                List<Map<String, Object>> bsmToFileList = zdBsmMap.getOrDefault(dbZdBsm, new ArrayList<>());
+                                bsmToFileList.add(theValue);
+                                zddmMap.put(dbZdBsm, zddmMap.getOrDefault(dbZdBsm, "") + tmpZdjbxx.getZddm());
+                                // 然后循环每一个map,再次转为
+                            }//end for
+
+                            //这里针对每个key 进行入库,然后,修改bsm的zt 然后,进行入库。
+                            // -----------------第四部分遍历图层进行数据处理 ------------------------------------
+                            if(MapUtils.isNotEmpty(zdBsmMap)) {
+                                ObjectMapper objectMapper = new ObjectMapper();
+
+                                List<Integer> idList =new ArrayList<>();
+                                for (Map.Entry<Integer,List<Map<String, Object>>> entry : zdBsmMap.entrySet()) {
+                                    List<Map<String, Object>> theValue = entry.getValue();
+                                    Integer dbBsm = entry.getKey();
+                                    for(Map<String, Object> map:theValue){
+                                        //统一转成小写
+                                        Map<String,Object> newMap = new HashMap<>();
+                                        for(Map.Entry<String,Object> e : map.entrySet()){
+                                            newMap.put(e.getKey().toLowerCase(), e.getValue());
+                                        }
+
+                                        //cleanDataForInsert(newMap, columnTypeMap);
+                                        Zdjbxx zdjbxx = objectMapper.convertValue(newMap, Zdjbxx.class);
+                                        zdjbxx.setValidFlag(0);
+                                        zdjbxxMapper.add(zdjbxx);
+                                        //合并处理入库之后需要记录到变更记录表:
+                                        String bhqzddm = zddmMap.get(dbBsm);
+                                        addZdbhqkData(zdjbxx,bhqzddm,"拆分子地块"); //更新变化情况表
+                                    }
+                                    idList.add(dbBsm);
+                                } //end for
+                                //2.修改bsm的zt
+                                zdjbxxMapper.updateZtByBsmList(idList);
+                            }
+                        }
+                        int aa =100;
                     }
                 }
             } catch (Exception e) {
@@ -181,6 +320,34 @@ public class CadastreManageServiceImpl implements CadastreManageService {
 
 
 
+    /**
+     *
+     * @param zdjbxx
+     * @param bhqzddm 变更前宗地代码
+     * @param msg 变更消息
+     * @return
+     */
+    private String addZdbhqkData(Zdjbxx zdjbxx ,String bhqzddm,String msg) {
+        //这里入库一条相关数据,多个宗地号用/分隔
+        Zdbhqk zdbhqk = new Zdbhqk();
+        zdbhqk.setBdcdyh(zdjbxx.getBdcdyh());
+        zdbhqk.setZddm(zdjbxx.getZddm());
+        zdbhqk.setBhyy(msg);
+        zdbhqk.setBhnr(msg);
+        Date tmpDate = DateUtils.getNowDate();
+        zdbhqk.setBhsj(tmpDate);
+        zdbhqk.setDjsj(tmpDate);
+        //String bhqzddm =   zddmMap.get(theValue);
+        zdbhqk.setBhqzddm(bhqzddm); //变化前宗地代码,多个用/分隔
+        zdbhqk.setYwh(""+tmpDate.getTime());
+        zdbhqk.setDbr(""); //备案人
+        zdbhqk.setSsywh(""+tmpDate.getTime()); //申请业务号
+        zdbhqk.setFj("附记 :无"); //附记录
+        zdbhqk.setValidFlag(0);
+        zdbhqkMapper.add(zdbhqk);
+        return "success";
+    }
+
 
     /**
      *

+ 60 - 0
siwei-modules/siwei-apply/src/main/resources/mapper/cadastre/ZdbhqkMapper.xml

@@ -0,0 +1,60 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper
+        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.siwei.apply.mapper.cadastre.ZdbhqkMapper">
+    <resultMap id="BaseResultMap" type="com.siwei.apply.domain.cadastre.Zdbhqk">
+        <id column="bdcdyh" property="bdcdyh"/>
+        <result column="zddm" property="zddm"/>
+        <result column="bhyy" property="bhyy"/>
+        <result column="bhnr" property="bhnr"/>
+        <result column="bhsj" property="bhsj"/>
+        <result column="djsj" property="djsj"/>
+        <result column="bhqzddm" property="bhqzddm"/>
+        <result column="ywh" property="ywh"/>
+        <result column="dbr" property="dbr"/>
+        <result column="ssywh" property="ssywh"/>
+        <result column="fj" property="fj"/>
+        <result column="valid_flag" property="validFlag"/>
+    </resultMap>
+
+    <insert id="add" parameterType="com.siwei.apply.domain.cadastre.Zdbhqk">
+        INSERT INTO vector.zdbhqk (
+            bdcdyh, zddm, bhyy, bhnr, bhsj, djsj, bhqzddm, ywh, dbr, ssywh, fj, valid_flag
+        ) VALUES (
+            #{bdcdyh}, #{zddm}, #{bhyy}, #{bhnr}, #{bhsj}, #{djsj}, #{bhqzddm}, #{ywh}, #{dbr}, #{ssywh}, #{fj}, #{validFlag}
+        )
+    </insert>
+
+    <select id="get" resultMap="BaseResultMap">
+        SELECT *
+        FROM vector.zdbhqk
+        WHERE bdcdyh = #{bdcdyh}
+          AND valid_flag = 0
+    </select>
+
+    <select id="getList" resultMap="BaseResultMap">
+        SELECT *
+        FROM vector.zdbhqk
+        WHERE valid_flag = 0
+    </select>
+
+    <update id="update" parameterType="com.siwei.apply.domain.cadastre.Zdbhqk">
+        UPDATE vector.zdbhqk
+        <set>
+            <if test="zddm != null">zddm = #{zddm},</if>
+            <if test="bhyy != null">bhyy = #{bhyy},</if>
+            <if test="bhnr != null">bhnr = #{bhnr},</if>
+            <if test="bhsj != null">bhsj = #{bhsj},</if>
+            <if test="djsj != null">djsj = #{djsj},</if>
+            <if test="bhqzddm != null">bhqzddm = #{bhqzddm},</if>
+            <if test="ywh != null">ywh = #{ywh},</if>
+            <if test="dbr != null">dbr = #{dbr},</if>
+            <if test="ssywh != null">ssywh = #{ssywh},</if>
+            <if test="fj != null">fj = #{fj},</if>
+            <if test="validFlag != null">valid_flag = #{validFlag},</if>
+        </set>
+        WHERE bdcdyh = #{bdcdyh}
+    </update>
+
+</mapper>

+ 96 - 5
siwei-modules/siwei-apply/src/main/resources/mapper/cadastre/ZdjbxxMapper.xml

@@ -70,17 +70,18 @@
         <result column="valid_flag" property="validFlag"/>
     </resultMap>
 
-    <insert id="add" parameterType="com.siwei.apply.domain.cadastre.Zdjbxx">
+
+    <insert id="add" parameterType="com.siwei.apply.domain.cadastre.Zdjbxx" useGeneratedKeys="true" keyProperty="bsm" keyColumn="bsm">
         INSERT INTO vector.zdjbxx (
-            bsm, ysdm, bdcdyh, ybzddm, zddm, xmbh, dzjgh, glh, zdtzm, dclxtzm,
+            ysdm, bdcdyh, ybzddm, zddm, xmbh, dzjgh, glh, zdtzm, dclxtzm,
             zl, zdmj, mjdw, yt, ghytmc, ydyhfl, dj, jg, jgdw, qllx, qlxz, qlsdfs,
             rjl, jzmd, jzxg, zdszd, zdszn, zdszx, zdszb, tfh, djh, dah, dkdm, bz,
             zt, djzt, qlrsjsyrlxm, gmjjhyfldm, xmmc, zdmjzyy, tdsjyt, tdsjytmc,
             blc, zjzjdmj, zjzmj, jgrq, qsdcjs, gygyqk, sm, dcy, dcrq, bdcchjs,
-            cly, clrq, shyj, shr, shrq, dcdwjg, tdzspfwh, tdgywjh, jsydghxkzh,
+            cly, clrq, shyj, shr, shrq, dcdwjg, tdzspfwh, tdgywjh, jsydghxkzh,bdcdyb,
             geom, valid_flag
         ) VALUES (
-            #{bsm}, #{ysdm}, #{bdcdyh}, #{ybzddm}, #{zddm}, #{xmbh}, #{dzjgh}, #{glh},
+            #{ysdm}, #{bdcdyh}, #{ybzddm}, #{zddm}, #{xmbh}, #{dzjgh}, #{glh},
             #{zdtzm}, #{dclxtzm}, #{zl}, #{zdmj}, #{mjdw}, #{yt}, #{ghytmc}, #{ydyhfl},
             #{dj}, #{jg}, #{jgdw}, #{qllx}, #{qlxz}, #{qlsdfs}, #{rjl}, #{jzmd},
             #{jzxg}, #{zdszd}, #{zdszn}, #{zdszx}, #{zdszb}, #{tfh}, #{djh}, #{dah},
@@ -88,7 +89,7 @@
             #{zdmjzyy}, #{tdsjyt}, #{tdsjytmc}, #{blc}, #{zjzjdmj}, #{zjzmj},
             #{jgrq}, #{qsdcjs}, #{gygyqk}, #{sm}, #{dcy}, #{dcrq}, #{bdcchjs},
             #{cly}, #{clrq}, #{shyj}, #{shr}, #{shrq}, #{dcdwjg}, #{tdzspfwh},
-            #{tdgywjh}, #{jsydghxkzh}, #{geom}, #{validFlag}
+            #{tdgywjh}, #{jsydghxkzh},#{bdcdyb}, public.st_transform(public.st_geomfromewkt(#{geom}), 4326), #{validFlag}
         )
     </insert>
 
@@ -207,6 +208,20 @@
         WHERE bsm = #{bsm}
     </update>
 
+
+    <update id="updateZtByBsmList" parameterType="List">
+        UPDATE vector.zdjbxx
+        <set>
+            zt = '0'
+        </set>
+        WHERE bsm IN
+        <foreach collection="idList" item="bsm" open="(" separator="," close=")">
+            #{bsm}
+        </foreach>
+        and valid_flag = 0 and zt in ('1','2')
+    </update>
+
+
     <delete id="batchDelete">
         DELETE FROM vector.zdjbxx
         WHERE bsm IN
@@ -345,4 +360,80 @@
         ORDER BY LEFT(zd.yt, 2), zd.qlxz
     </select>
 
+    <select id="selectByContainsWkt"  resultMap="BaseResultMap">
+        SELECT
+            bsm, ysdm, bdcdyh, ybzddm, zddm, xmbh, dzjgh, glh, zdtzm, dclxtzm,
+            zl, zdmj, mjdw, yt, ghytmc, ydyhfl, dj, jg, jgdw, qllx, qlxz, qlsdfs,
+            rjl, jzmd, jzxg, zdszd, zdszn, zdszx, zdszb, tfh, djh, dah, dkdm, bz,
+            zt, djzt, qlrsjsyrlxm, gmjjhyfldm, xmmc, zdmjzyy, tdsjyt, tdsjytmc,
+            blc, zjzjdmj, zjzmj, jgrq, qsdcjs, gygyqk, sm, dcy, dcrq, bdcchjs,
+            cly, clrq, shyj, shr, shrq, dcdwjg, tdzspfwh, tdgywjh, jsydghxkzh,
+            ST_AsEWKT(geom) as geom, valid_flag
+        FROM vector.zdjbxx
+        WHERE  st_contains(ST_Buffer(#{ewkt}::geography,0.1 )::geometry,geom)
+            <if test="rightType != null and rightType != ''">
+                and sm = #{rightType}
+            </if>
+          AND  valid_flag = 0 AND   zt IN ('1', '2')
+    </select>
+
+    <!-- 通过出传入的{wktList} string 类型的数据,然后展开为新表,进行一次交集查询  -->
+    <select id="queryByIntersectList" resultType="com.siwei.apply.domain.cadastre.Zdjbxx">
+        SELECT * FROM vector.zdjbxx gd
+        WHERE EXISTS (
+            SELECT 1 FROM unnest(#{wktList}::text[]) t(wkt)
+            WHERE public.ST_Intersects(gd.geom, public.ST_GeomFromEWKT(t.wkt))
+        )    AND valid_flag = 0 AND zt IN ('1', '2')
+    </select>
+
+    <select id="selectIntersectByGeom" resultType="com.siwei.apply.domain.cadastre.Zdjbxx">
+        SELECT * FROM vector.zdjbxx
+        WHERE public.ST_Intersects(geom, public.ST_GeomFromEWKT(#{ewkt}))
+          AND valid_flag = 0 AND zt IN ('1', '2')
+    </select>
+
+
+    <!-- 通过出传入的{wktList} Object 类型的数据,通过jsonb进行解析,然后展开成新表进行一次性命中查询  -->
+    <select id="queryMatchSubGeom2" resultType="java.util.Map">
+        SELECT
+        gd.bsm,
+        gd.bdcdyh,
+        gd.ybzddm,
+        gd.zddm,
+        -- 取出子图形内各个业务字段
+        sub ->> 'geom' AS sub_wkt,
+        sub ->> 'tbbh' AS tbbh,
+        sub ->> 'fileRowNo' AS fileRowNo,
+        sub ->> 'sourceArea' AS source_area,
+        -- 可继续取其他属性 sub ->> 'xxx'
+        public.ST_Area(public.ST_GeomFromEWKT(sub ->> 'geom')) AS db_calc_area
+        FROM vector.zdjbxx gd
+        -- 将Java List《!Map-->转为jsonb数组,然后展开
+        CROSS JOIN jsonb_array_elements(#{wktArray}::jsonb) AS t(sub)
+        WHERE
+        public.ST_Contains(
+        gd.geom,
+        public.ST_GeomFromEWKT(sub ->> 'geom')
+        )
+    </select>
+
+
+    <select id="selectByInvertContainsWkt"  resultMap="BaseResultMap">
+        SELECT
+        bsm, ysdm, bdcdyh, ybzddm, zddm, xmbh, dzjgh, glh, zdtzm, dclxtzm,
+        zl, zdmj, mjdw, yt, ghytmc, ydyhfl, dj, jg, jgdw, qllx, qlxz, qlsdfs,
+        rjl, jzmd, jzxg, zdszd, zdszn, zdszx, zdszb, tfh, djh, dah, dkdm, bz,
+        zt, djzt, qlrsjsyrlxm, gmjjhyfldm, xmmc, zdmjzyy, tdsjyt, tdsjytmc,
+        blc, zjzjdmj, zjzmj, jgrq, qsdcjs, gygyqk, sm, dcy, dcrq, bdcchjs,
+        cly, clrq, shyj, shr, shrq, dcdwjg, tdzspfwh, tdgywjh, jsydghxkzh,
+        ST_AsEWKT(geom) as geom, valid_flag
+        FROM vector.zdjbxx
+        WHERE st_contains(ST_Buffer(geom::geography, 0.1)::geometry,st_geomfromewkt(#{ewkt}))
+        <if test="rightType != null and rightType != ''">
+            and sm = #{rightType}
+        </if>
+        AND  valid_flag = 0 AND   zt IN ('1', '2')
+    </select>
+
+
 </mapper>