| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294 |
- <?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.YdbpDataMapper">
- <resultMap id="YdbpDataResultMap" type="com.siwei.apply.domain.YdbpData">
- <id property="id" column="id"/>
- <result property="name" column="name"/>
- <result property="ydArea" column="yd_area"/>
- <result property="ydUnit" column="yd_unit"/>
- <result property="zsArea" column="zs_area"/>
- <result property="zsUnit" column="zs_unit"/>
- <result property="hasZz" column="has_zz"/>
- <result property="bpDate" column="bp_date"/>
- <result property="pfwh" column="pfwh"/>
- <result property="pfDate" column="pf_date"/>
- <result property="hasOnchain" column="has_onchain"/>
- <result property="creatorId" column="creator_id"/>
- <result property="createdAt" column="created_at"/>
- <result property="updatedAt" column="updated_at"/>
- <result property="batchType" column="batch_type"/>
- <result property="projectPropertyId" column="project_property_id"/>
- <result property="bz" column="bz"/>
- </resultMap>
- <insert id="add" parameterType="com.siwei.apply.domain.YdbpData">
- INSERT INTO t_ydbp_data (
- id, name, yd_area, yd_unit, zs_area, zs_unit, has_zz, bp_date, pfwh, pf_date, bz, creator_id, created_at, updated_at
- ) VALUES (
- #{id}, #{name}, #{ydArea}, #{ydUnit}, #{zsArea}, #{zsUnit}, #{hasZz}, #{bpDate}, #{pfwh}, #{pfDate}, #{bz}, #{creatorId}, now(), now()
- )
- </insert>
- <select id="getById" parameterType="string" resultMap="YdbpDataResultMap">
- SELECT id, name, yd_area, yd_unit, zs_area, zs_unit, has_zz, bp_date, pfwh, pf_date, bz, creator_id, created_at, updated_at,has_onchain
- FROM t_ydbp_data
- WHERE id = #{id}
- </select>
- <select id="selectPage" resultMap="YdbpDataResultMap">
- SELECT id, name, yd_area, yd_unit, zs_area, zs_unit, has_zz, bp_date, pfwh, pf_date, bz, creator_id, created_at, updated_at
- FROM t_ydbp_data
- where 1=1
- <if test="name != null and name != ''">
- AND name LIKE CONCAT('%', #{name}, '%')
- </if>
- <if test="ids != null and ids.size() > 0">
- AND id IN
- <foreach collection="ids" item="id" open="(" separator="," close=")">
- #{id}
- </foreach>
- </if>
- <if test="shape != null and shape != ''">
- AND EXISTS (
- SELECT 1
- FROM t_node_land nl
- JOIN t_geom_db_details gd ON gd.upload_id = nl.geom_db_id
- WHERE nl.node_id = t_ydbp_data.id
- AND public.ST_Intersects(gd.geom, public.ST_GeomFromEWKT(#{shape}))
- )
- </if>
- ORDER BY updated_at DESC
- LIMIT #{pageSize} OFFSET #{offset}
- </select>
- <update id="update" parameterType="com.siwei.apply.domain.YdbpData">
- UPDATE t_ydbp_data
- <set>
- <if test="name != null">name = #{name},</if>
- <if test="ydArea != null">yd_area = #{ydArea},</if>
- <if test="ydUnit != null">yd_unit = #{ydUnit},</if>
- <if test="zsArea != null">zs_area = #{zsArea},</if>
- <if test="zsUnit != null">zs_unit = #{zsUnit},</if>
- <if test="hasZz != null">has_zz = #{hasZz},</if>
- <if test="bpDate != null">bp_date = #{bpDate},</if>
- <if test="pfwh != null">pfwh = #{pfwh},</if>
- <if test="pfDate != null">pf_date = #{pfDate},</if>
- <if test="bz != null">bz = #{bz},</if>
- updated_at = #{updatedAt}
- </set>
- WHERE id = #{id}
- </update>
- <select id="countAll" resultType="int">
- SELECT COUNT(1)
- FROM t_ydbp_data
- where 1=1
- <if test="name != null and name != ''">
- AND name LIKE CONCAT('%', #{name}, '%')
- </if>
- <if test="ids != null and ids.size() > 0">
- AND id IN
- <foreach collection="ids" item="id" open="(" separator="," close=")">
- #{id}
- </foreach>
- </if>
- <if test="shape != null and shape != ''">
- AND EXISTS (
- SELECT 1
- FROM t_node_land nl
- JOIN t_geom_db_details gd ON gd.upload_id = nl.geom_db_id
- WHERE nl.node_id = t_ydbp_data.id
- AND public.ST_Intersects(gd.geom, public.ST_GeomFromEWKT(#{shape}))
- )
- </if>
- </select>
- <delete id="batchDelete">
- DELETE FROM t_ydbp_data
- WHERE id IN
- <foreach collection="ids" item="id" open="(" separator="," close=")">
- #{id}
- </foreach>
- </delete>
- <update id="updateHasOnchain">
- UPDATE t_ydbp_data
- SET has_onchain = #{hasOnchain}, updated_at = now()
- WHERE id = #{id}
- </update>
- <select id="getStatisticsList" resultMap="YdbpDataResultMap">
- SELECT
- id, name, yd_unit,
- '2' AS batch_type,
- COALESCE (
- CASE
- WHEN yd_unit = '平方米' THEN
- COALESCE ( yd_area, 0 ) / 666.6666667
- WHEN yd_unit = '公顷' THEN
- COALESCE ( yd_area, 0 ) * 15
- WHEN yd_unit = '亩' THEN
- COALESCE ( yd_area, 0 ) * 1
- END,
- 0
- ) AS yd_area ,
- COALESCE (
- CASE
- WHEN zs_unit = '平方米' THEN
- COALESCE ( zs_area, 0 ) / 666.6666667
- WHEN zs_unit = '公顷' THEN
- COALESCE ( zs_area, 0 ) * 15
- WHEN zs_unit = '亩' THEN
- COALESCE ( zs_area, 0 ) * 1
- END,
- 0
- ) AS zs_area,
- <if test="hasGeom != null and hasGeom">
- COALESCE((
- SELECT ST_AsEWKT(ST_Union(gd.geom))
- FROM t_node_land nl
- LEFT JOIN t_geom_db_details gd ON nl.geom_db_id = gd.upload_id
- WHERE nl.node_id = bp.id AND gd.geom IS NOT NULL
- ), '') AS geom,
- </if>
- -- left(pf_date,4) AS nf,
- '亩' as zs_unit,
- has_zz, bp_date, pfwh, pf_date, creator_id, created_at, updated_at,has_onchain
- FROM t_ydbp_data bp
- WHERE bp.has_onchain='t'
- <if test="year != null and year != '' ">
- AND left(bp.pf_date,4) = #{year}
- </if>
- <if test="(startYear != null and startYear != null) and (endYear != '' and endYear != '')">
- AND left(bp.pf_date,4)::NUMERIC BETWEEN #{startYear}::NUMERIC AND #{endYear}::NUMERIC
- </if>
- <if test="keyWord != null and keyWord != ''">
- AND (
- COALESCE(bp.name, '') LIKE CONCAT('%', #{keyWord}, '%')
- )
- </if>
- </select>
- <sql id="commonYdbpDataCte" >
- WITH
- supply_geom AS (
- SELECT DISTINCT
- ST_Normalize(gd.geom) AS norm_geom
- FROM t_geom_db_details gd
- INNER JOIN t_node_land nl ON gd.upload_id = nl.geom_db_id
- INNER JOIN t_tdgy gy ON nl.node_id = gy.id
- INNER JOIN t_project pro ON gy.project_id = pro.id
- WHERE gy.has_onchain = 't'
- AND pro.project_type = 2
- ),
- hit_geom_id AS (
- SELECT DISTINCT gd.id as details_id
- FROM t_geom_db_details gd
- INNER JOIN t_node_land nl ON gd.upload_id = nl.geom_db_id
- INNER JOIN t_ydbp_data bp ON nl.node_id = bp.id
- WHERE bp.has_onchain = 't'
- AND EXISTS (
- SELECT 1 FROM supply_geom
- WHERE ST_Equals(ST_Normalize(gd.geom), supply_geom.norm_geom)
- )
- )
- </sql>
- <!--
- 方案:已批未供的图层相关:
- 1.把土地供应的所有的地块。并且已经上链的的查找出来。
- 2.把这些地块与报批中所有地块等值判断进行筛选。
- 3.再查找所有的报批的地块,减去上面找出的地块。然后按照年份统计其面积。
- -->
- <select id="queryRemainGeomAreaByYear" resultType="java.util.Map">
- <include refid="commonYdbpDataCte"></include>
- SELECT
- LEFT(bp.pf_date, '4') AS stat_year,
- COUNT(DISTINCT gd.id) AS patch_count,
- '亩' as area_unit,
- SUM( COALESCE(ST_Area(gd.geom::public.geography), 0) / 666.6666667 ) AS total_area_mu
- FROM t_geom_db_details gd
- INNER JOIN t_node_land nl ON gd.upload_id = nl.geom_db_id
- INNER JOIN t_ydbp_data bp ON nl.node_id = bp.id
- WHERE bp.has_onchain = 't'
- AND NOT EXISTS (
- SELECT 1 FROM hit_geom_id h WHERE h.details_id = gd.id
- )
- GROUP BY stat_year
- ORDER BY stat_year
- </select>
- <select id="queryDifferenceGeomAreaByYear" resultType="java.util.Map">
- WITH geom_gy_data AS (
- SELECT nf, "public".ST_Union(geom) AS union_geom from (
- SELECT COALESCE(left(hbcrht_date,4), '其它') AS nf, geom
- FROM t_geom_db_details gd
- INNER JOIN t_node_land nl ON gd.upload_id = nl.geom_db_id
- INNER JOIN t_tdgy gy ON nl.node_id = gy.id
- INNER JOIN t_project pro ON gy.project_id = pro.id
- WHERE gy.has_onchain = 't'
- AND pro.project_type = 2
- UNION
- SELECT COALESCE(left(nf,4), '其它') AS nf , geom from vector.gj_gd_data
- ) tmp GROUP BY nf
- ),
- geom_ydbp_data AS (
- SELECT COALESCE(left(pf_date,4), '其它') AS nf , "public".ST_Union(geom) AS union_geom, count(DISTINCT bp.id ) as patch_count
- FROM t_geom_db_details gd
- INNER JOIN t_node_land nl ON gd.upload_id = nl.geom_db_id
- INNER JOIN "public"."t_ydbp_data" bp ON nl.node_id = bp.id
- WHERE bp.has_onchain = 't' GROUP BY nf
- ),
- diff_result AS (
- SELECT
- bp.nf,
- bp.patch_count,
- ST_Difference(bp.union_geom, COALESCE(gy.union_geom, ST_GeomFromText('POLYGON EMPTY',4326))) AS diff_geom
- FROM geom_ydbp_data bp
- LEFT JOIN geom_gy_data gy ON bp.nf = gy.nf
- <if test="year != null and year != ''">
- WHERE bp.nf = #{year}
- </if>
- )
- SELECT
- nf,
- patch_count,
- '' AS details_id,
- '' AS project_id,
- '' AS node_id,
- '' AS id,
- '2' AS batch_type,
- ST_AsEWKT(diff_geom::geography ) AS geom,
- COALESCE (ST_Area(diff_geom::geography ),0) / 666.6666667 AS rest_area
- FROM diff_result
- WHERE NOT ST_IsEmpty(diff_geom)
- order by nf
- </select>
- <select id="queryRemainGeomListByYear" resultType="java.util.Map">
- <include refid="commonYdbpDataCte"></include>
- SELECT
- gd.id as details_id,
- LEFT(bp.pf_date, '4') AS year,
- '2' AS batch_type,
- bp.id as node_id,
- bp.id as id,
- '' as project_id,
- public.st_asewkt(geom) geom
- FROM t_geom_db_details gd
- INNER JOIN t_node_land nl ON gd.upload_id = nl.geom_db_id
- INNER JOIN t_ydbp_data bp ON nl.node_id = bp.id
- WHERE bp.has_onchain = 't'
- <if test="year != null and year != ''">
- AND LEFT(bp.pf_date, '4')=#{year}
- </if>
- AND NOT EXISTS (
- SELECT 1 FROM hit_geom_id h WHERE h.details_id = gd.id
- )
- </select>
- </mapper>
|