1
0

YdbpDataMapper.xml 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294
  1. <?xml version="1.0" encoding="UTF-8" ?>
  2. <!DOCTYPE mapper
  3. PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
  4. "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
  5. <mapper namespace="com.siwei.apply.mapper.YdbpDataMapper">
  6. <resultMap id="YdbpDataResultMap" type="com.siwei.apply.domain.YdbpData">
  7. <id property="id" column="id"/>
  8. <result property="name" column="name"/>
  9. <result property="ydArea" column="yd_area"/>
  10. <result property="ydUnit" column="yd_unit"/>
  11. <result property="zsArea" column="zs_area"/>
  12. <result property="zsUnit" column="zs_unit"/>
  13. <result property="hasZz" column="has_zz"/>
  14. <result property="bpDate" column="bp_date"/>
  15. <result property="pfwh" column="pfwh"/>
  16. <result property="pfDate" column="pf_date"/>
  17. <result property="hasOnchain" column="has_onchain"/>
  18. <result property="creatorId" column="creator_id"/>
  19. <result property="createdAt" column="created_at"/>
  20. <result property="updatedAt" column="updated_at"/>
  21. <result property="batchType" column="batch_type"/>
  22. <result property="projectPropertyId" column="project_property_id"/>
  23. <result property="bz" column="bz"/>
  24. </resultMap>
  25. <insert id="add" parameterType="com.siwei.apply.domain.YdbpData">
  26. INSERT INTO t_ydbp_data (
  27. id, name, yd_area, yd_unit, zs_area, zs_unit, has_zz, bp_date, pfwh, pf_date, bz, creator_id, created_at, updated_at
  28. ) VALUES (
  29. #{id}, #{name}, #{ydArea}, #{ydUnit}, #{zsArea}, #{zsUnit}, #{hasZz}, #{bpDate}, #{pfwh}, #{pfDate}, #{bz}, #{creatorId}, now(), now()
  30. )
  31. </insert>
  32. <select id="getById" parameterType="string" resultMap="YdbpDataResultMap">
  33. 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
  34. FROM t_ydbp_data
  35. WHERE id = #{id}
  36. </select>
  37. <select id="selectPage" resultMap="YdbpDataResultMap">
  38. 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
  39. FROM t_ydbp_data
  40. where 1=1
  41. <if test="name != null and name != ''">
  42. AND name LIKE CONCAT('%', #{name}, '%')
  43. </if>
  44. <if test="ids != null and ids.size() > 0">
  45. AND id IN
  46. <foreach collection="ids" item="id" open="(" separator="," close=")">
  47. #{id}
  48. </foreach>
  49. </if>
  50. <if test="shape != null and shape != ''">
  51. AND EXISTS (
  52. SELECT 1
  53. FROM t_node_land nl
  54. JOIN t_geom_db_details gd ON gd.upload_id = nl.geom_db_id
  55. WHERE nl.node_id = t_ydbp_data.id
  56. AND public.ST_Intersects(gd.geom, public.ST_GeomFromEWKT(#{shape}))
  57. )
  58. </if>
  59. ORDER BY updated_at DESC
  60. LIMIT #{pageSize} OFFSET #{offset}
  61. </select>
  62. <update id="update" parameterType="com.siwei.apply.domain.YdbpData">
  63. UPDATE t_ydbp_data
  64. <set>
  65. <if test="name != null">name = #{name},</if>
  66. <if test="ydArea != null">yd_area = #{ydArea},</if>
  67. <if test="ydUnit != null">yd_unit = #{ydUnit},</if>
  68. <if test="zsArea != null">zs_area = #{zsArea},</if>
  69. <if test="zsUnit != null">zs_unit = #{zsUnit},</if>
  70. <if test="hasZz != null">has_zz = #{hasZz},</if>
  71. <if test="bpDate != null">bp_date = #{bpDate},</if>
  72. <if test="pfwh != null">pfwh = #{pfwh},</if>
  73. <if test="pfDate != null">pf_date = #{pfDate},</if>
  74. <if test="bz != null">bz = #{bz},</if>
  75. updated_at = #{updatedAt}
  76. </set>
  77. WHERE id = #{id}
  78. </update>
  79. <select id="countAll" resultType="int">
  80. SELECT COUNT(1)
  81. FROM t_ydbp_data
  82. where 1=1
  83. <if test="name != null and name != ''">
  84. AND name LIKE CONCAT('%', #{name}, '%')
  85. </if>
  86. <if test="ids != null and ids.size() > 0">
  87. AND id IN
  88. <foreach collection="ids" item="id" open="(" separator="," close=")">
  89. #{id}
  90. </foreach>
  91. </if>
  92. <if test="shape != null and shape != ''">
  93. AND EXISTS (
  94. SELECT 1
  95. FROM t_node_land nl
  96. JOIN t_geom_db_details gd ON gd.upload_id = nl.geom_db_id
  97. WHERE nl.node_id = t_ydbp_data.id
  98. AND public.ST_Intersects(gd.geom, public.ST_GeomFromEWKT(#{shape}))
  99. )
  100. </if>
  101. </select>
  102. <delete id="batchDelete">
  103. DELETE FROM t_ydbp_data
  104. WHERE id IN
  105. <foreach collection="ids" item="id" open="(" separator="," close=")">
  106. #{id}
  107. </foreach>
  108. </delete>
  109. <update id="updateHasOnchain">
  110. UPDATE t_ydbp_data
  111. SET has_onchain = #{hasOnchain}, updated_at = now()
  112. WHERE id = #{id}
  113. </update>
  114. <select id="getStatisticsList" resultMap="YdbpDataResultMap">
  115. SELECT
  116. id, name, yd_unit,
  117. '2' AS batch_type,
  118. COALESCE (
  119. CASE
  120. WHEN yd_unit = '平方米' THEN
  121. COALESCE ( yd_area, 0 ) / 666.6666667
  122. WHEN yd_unit = '公顷' THEN
  123. COALESCE ( yd_area, 0 ) * 15
  124. WHEN yd_unit = '亩' THEN
  125. COALESCE ( yd_area, 0 ) * 1
  126. END,
  127. 0
  128. ) AS yd_area ,
  129. COALESCE (
  130. CASE
  131. WHEN zs_unit = '平方米' THEN
  132. COALESCE ( zs_area, 0 ) / 666.6666667
  133. WHEN zs_unit = '公顷' THEN
  134. COALESCE ( zs_area, 0 ) * 15
  135. WHEN zs_unit = '亩' THEN
  136. COALESCE ( zs_area, 0 ) * 1
  137. END,
  138. 0
  139. ) AS zs_area,
  140. <if test="hasGeom != null and hasGeom">
  141. COALESCE((
  142. SELECT ST_AsEWKT(ST_Union(gd.geom))
  143. FROM t_node_land nl
  144. LEFT JOIN t_geom_db_details gd ON nl.geom_db_id = gd.upload_id
  145. WHERE nl.node_id = bp.id AND gd.geom IS NOT NULL
  146. ), '') AS geom,
  147. </if>
  148. -- left(pf_date,4) AS nf,
  149. '亩' as zs_unit,
  150. has_zz, bp_date, pfwh, pf_date, creator_id, created_at, updated_at,has_onchain
  151. FROM t_ydbp_data bp
  152. WHERE bp.has_onchain='t'
  153. <if test="year != null and year != '' ">
  154. AND left(bp.pf_date,4) = #{year}
  155. </if>
  156. <if test="(startYear != null and startYear != null) and (endYear != '' and endYear != '')">
  157. AND left(bp.pf_date,4)::NUMERIC BETWEEN #{startYear}::NUMERIC AND #{endYear}::NUMERIC
  158. </if>
  159. <if test="keyWord != null and keyWord != ''">
  160. AND (
  161. COALESCE(bp.name, '') LIKE CONCAT('%', #{keyWord}, '%')
  162. )
  163. </if>
  164. </select>
  165. <sql id="commonYdbpDataCte" >
  166. WITH
  167. supply_geom AS (
  168. SELECT DISTINCT
  169. ST_Normalize(gd.geom) AS norm_geom
  170. FROM t_geom_db_details gd
  171. INNER JOIN t_node_land nl ON gd.upload_id = nl.geom_db_id
  172. INNER JOIN t_tdgy gy ON nl.node_id = gy.id
  173. INNER JOIN t_project pro ON gy.project_id = pro.id
  174. WHERE gy.has_onchain = 't'
  175. AND pro.project_type = 2
  176. ),
  177. hit_geom_id AS (
  178. SELECT DISTINCT gd.id as details_id
  179. FROM t_geom_db_details gd
  180. INNER JOIN t_node_land nl ON gd.upload_id = nl.geom_db_id
  181. INNER JOIN t_ydbp_data bp ON nl.node_id = bp.id
  182. WHERE bp.has_onchain = 't'
  183. AND EXISTS (
  184. SELECT 1 FROM supply_geom
  185. WHERE ST_Equals(ST_Normalize(gd.geom), supply_geom.norm_geom)
  186. )
  187. )
  188. </sql>
  189. <!--
  190. 方案:已批未供的图层相关:
  191. 1.把土地供应的所有的地块。并且已经上链的的查找出来。
  192. 2.把这些地块与报批中所有地块等值判断进行筛选。
  193. 3.再查找所有的报批的地块,减去上面找出的地块。然后按照年份统计其面积。
  194. -->
  195. <select id="queryRemainGeomAreaByYear" resultType="java.util.Map">
  196. <include refid="commonYdbpDataCte"></include>
  197. SELECT
  198. LEFT(bp.pf_date, '4') AS stat_year,
  199. COUNT(DISTINCT gd.id) AS patch_count,
  200. '亩' as area_unit,
  201. SUM( COALESCE(ST_Area(gd.geom::public.geography), 0) / 666.6666667 ) AS total_area_mu
  202. FROM t_geom_db_details gd
  203. INNER JOIN t_node_land nl ON gd.upload_id = nl.geom_db_id
  204. INNER JOIN t_ydbp_data bp ON nl.node_id = bp.id
  205. WHERE bp.has_onchain = 't'
  206. AND NOT EXISTS (
  207. SELECT 1 FROM hit_geom_id h WHERE h.details_id = gd.id
  208. )
  209. GROUP BY stat_year
  210. ORDER BY stat_year
  211. </select>
  212. <select id="queryDifferenceGeomAreaByYear" resultType="java.util.Map">
  213. WITH geom_gy_data AS (
  214. SELECT nf, "public".ST_Union(geom) AS union_geom from (
  215. SELECT COALESCE(left(hbcrht_date,4), '其它') AS nf, geom
  216. FROM t_geom_db_details gd
  217. INNER JOIN t_node_land nl ON gd.upload_id = nl.geom_db_id
  218. INNER JOIN t_tdgy gy ON nl.node_id = gy.id
  219. INNER JOIN t_project pro ON gy.project_id = pro.id
  220. WHERE gy.has_onchain = 't'
  221. AND pro.project_type = 2
  222. UNION
  223. SELECT COALESCE(left(nf,4), '其它') AS nf , geom from vector.gj_gd_data
  224. ) tmp GROUP BY nf
  225. ),
  226. geom_ydbp_data AS (
  227. SELECT COALESCE(left(pf_date,4), '其它') AS nf , "public".ST_Union(geom) AS union_geom, count(DISTINCT bp.id ) as patch_count
  228. FROM t_geom_db_details gd
  229. INNER JOIN t_node_land nl ON gd.upload_id = nl.geom_db_id
  230. INNER JOIN "public"."t_ydbp_data" bp ON nl.node_id = bp.id
  231. WHERE bp.has_onchain = 't' GROUP BY nf
  232. ),
  233. diff_result AS (
  234. SELECT
  235. bp.nf,
  236. bp.patch_count,
  237. ST_Difference(bp.union_geom, COALESCE(gy.union_geom, ST_GeomFromText('POLYGON EMPTY',4326))) AS diff_geom
  238. FROM geom_ydbp_data bp
  239. LEFT JOIN geom_gy_data gy ON bp.nf = gy.nf
  240. <if test="year != null and year != ''">
  241. WHERE bp.nf = #{year}
  242. </if>
  243. )
  244. SELECT
  245. nf,
  246. patch_count,
  247. '' AS details_id,
  248. '' AS project_id,
  249. '' AS node_id,
  250. '' AS id,
  251. '2' AS batch_type,
  252. ST_AsEWKT(diff_geom::geography ) AS geom,
  253. COALESCE (ST_Area(diff_geom::geography ),0) / 666.6666667 AS rest_area
  254. FROM diff_result
  255. WHERE NOT ST_IsEmpty(diff_geom)
  256. order by nf
  257. </select>
  258. <select id="queryRemainGeomListByYear" resultType="java.util.Map">
  259. <include refid="commonYdbpDataCte"></include>
  260. SELECT
  261. gd.id as details_id,
  262. LEFT(bp.pf_date, '4') AS year,
  263. '2' AS batch_type,
  264. bp.id as node_id,
  265. bp.id as id,
  266. '' as project_id,
  267. public.st_asewkt(geom) geom
  268. FROM t_geom_db_details gd
  269. INNER JOIN t_node_land nl ON gd.upload_id = nl.geom_db_id
  270. INNER JOIN t_ydbp_data bp ON nl.node_id = bp.id
  271. WHERE bp.has_onchain = 't'
  272. <if test="year != null and year != ''">
  273. AND LEFT(bp.pf_date, '4')=#{year}
  274. </if>
  275. AND NOT EXISTS (
  276. SELECT 1 FROM hit_geom_id h WHERE h.details_id = gd.id
  277. )
  278. </select>
  279. </mapper>