AttProjectInsuranceDao.xml 48 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082
  1. <?xml version="1.0" encoding="UTF-8" ?>
  2. <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
  3. <mapper namespace="cn.com.goldenwater.dcproj.dao.AttProjectInsuranceDao">
  4. <resultMap type="cn.com.goldenwater.dcproj.model.AttProjectInsurance" id="attProjectInsuranceResultMap">
  5. <result property="businessType" column="BUSINESS_TYPE"/>
  6. <result property="adName" column="AD_NAME"/>
  7. <result property="adCode" column="AD_CODE"/>
  8. <result property="id" column="ID"/>
  9. <result property="name" column="NAME"/>
  10. <result property="type" column="TYPE"/>
  11. <result property="loc" column="LOC"/>
  12. <result property="investment" column="INVESTMENT"/>
  13. <result property="plannedDuration" column="PLANNED_DURATION"/>
  14. <result property="startDate" column="START_DATE"/>
  15. <result property="status" column="STATUS"/>
  16. <result property="managementUnit" column="MANAGEMENT_UNIT"/>
  17. <result property="constructors" column="CONSTRUCTORS"/>
  18. <result property="contactPerson" column="CONTACT_PERSON"/>
  19. <result property="centerX" column="CENTER_X"/>
  20. <result property="centerY" column="CENTER_Y"/>
  21. <result property="gdX" column="GD_X"/>
  22. <result property="gdY" column="GD_Y"/>
  23. <result property="intm" column="INTM"/>
  24. <result property="uptm" column="UPTM"/>
  25. <result property="dataStat" column="DATA_STAT"/>
  26. </resultMap>
  27. <sql id="table_columns">
  28. BUSINESS_TYPE
  29. ,
  30. AD_NAME,
  31. AD_CODE,
  32. ID,
  33. NAME,
  34. TYPE,
  35. LOC,
  36. INVESTMENT,
  37. PLANNED_DURATION,
  38. START_DATE,
  39. STATUS,
  40. MANAGEMENT_UNIT,
  41. CONSTRUCTORS,
  42. CONTACT_PERSON,
  43. CENTER_X,
  44. CENTER_Y,
  45. GD_X,
  46. GD_Y,
  47. INTM,
  48. UPTM,
  49. DATA_STAT
  50. </sql>
  51. <sql id="entity_properties">
  52. #{businessType},
  53. #{adName},
  54. #{adCode},
  55. #{id},
  56. #{name},
  57. #{type},
  58. #{loc},
  59. #{investment},
  60. #{plannedDuration},
  61. #{startDate},
  62. #{status},
  63. #{managementUnit},
  64. #{constructors},
  65. #{contactPerson},
  66. #{centerX},
  67. #{centerY},
  68. #{gdX},
  69. #{gdY},
  70. #{intm},
  71. #{uptm},
  72. #{dataStat}
  73. </sql>
  74. <sql id="page_where">
  75. <trim prefix="where" prefixOverrides="and | or ">
  76. <if test="adName != null and adName != ''">and AD_NAME = #{adName}</if>
  77. <if test="businessType != null and businessType != ''">and BUSINESS_TYPE = #{businessType}</if>
  78. <if test="adCode != null and adCode != ''">and AD_CODE = #{adCode}</if>
  79. <if test="id != null and id != ''">and ID = #{id}</if>
  80. <if test="name != null and name != ''">and NAME like '%${name}%'</if>
  81. <if test="type != null and type != ''">and TYPE = #{type}</if>
  82. <if test="loc != null and loc != ''">and LOC = #{loc}</if>
  83. <if test="investment != null and investment != ''">and INVESTMENT = #{investment}</if>
  84. <if test="plannedDuration != null and plannedDuration != ''">and PLANNED_DURATION = #{plannedDuration}</if>
  85. <if test="startDate != null">and START_DATE = #{startDate}</if>
  86. <if test="status != null and status != ''">and STATUS = #{status}</if>
  87. <if test="managementUnit != null and managementUnit != ''">and MANAGEMENT_UNIT = #{managementUnit}</if>
  88. <if test="constructors != null and constructors != ''">and CONSTRUCTORS = #{constructors}</if>
  89. <if test="contactPerson != null and contactPerson != ''">and CONTACT_PERSON = #{contactPerson}</if>
  90. <if test="centerX != null and centerX != ''">and CENTER_X = #{centerX}</if>
  91. <if test="centerY != null and centerY != ''">and CENTER_Y = #{centerY}</if>
  92. <if test="gdX != null and gdX != ''">and GD_X = #{gdX}</if>
  93. <if test="gdY != null and gdY != ''">and GD_Y = #{gdY}</if>
  94. <if test="intm != null">and INTM = #{intm}</if>
  95. <if test="uptm != null">and UPTM = #{uptm}</if>
  96. and DATA_STAT='0'
  97. </trim>
  98. </sql>
  99. <select id="get" resultMap="attProjectInsuranceResultMap" parameterType="String">
  100. select
  101. <include refid="table_columns"/>
  102. from ATT_PROJECT_INSURANCE where ID = #{id}
  103. </select>
  104. <select id="getBy" resultMap="attProjectInsuranceResultMap">
  105. select
  106. <include refid="table_columns"/>
  107. from ATT_PROJECT_INSURANCE
  108. <include refid="page_where"/>
  109. </select>
  110. <select id="findAll" resultMap="attProjectInsuranceResultMap">
  111. select
  112. <include refid="table_columns"/>
  113. from ATT_PROJECT_INSURANCE
  114. </select>
  115. <select id="findList" resultMap="attProjectInsuranceResultMap">
  116. select
  117. <include refid="table_columns"/>
  118. from ATT_PROJECT_INSURANCE
  119. <include refid="page_where"/>
  120. </select>
  121. <select id="selectCount" resultType="int">
  122. select count(ID) from ATT_PROJECT_INSURANCE
  123. <include refid="page_where"/>
  124. </select>
  125. <insert id="insert" parameterType="cn.com.goldenwater.dcproj.model.AttProjectInsurance">
  126. insert into ATT_PROJECT_INSURANCE(
  127. <include refid="table_columns"/>
  128. )
  129. values (
  130. <include refid="entity_properties"/>
  131. )
  132. </insert>
  133. <delete id="delete" parameterType="java.lang.String">
  134. update ATT_PROJECT_INSURANCE
  135. set DATA_STAT='9'
  136. where ID = #{id}
  137. </delete>
  138. <delete id="deleteBy" parameterType="cn.com.goldenwater.dcproj.model.AttProjectInsurance">
  139. update ATT_PROJECT_INSURANCE set DATA_STAT='9'
  140. <include refid="page_where"/>
  141. </delete>
  142. <update id="deleteInFlag" parameterType="java.lang.String">
  143. update ATT_PROJECT_INSURANCE
  144. set DATA_STAT = '9'
  145. where ID = #{id}
  146. </update>
  147. <update id="update" parameterType="cn.com.goldenwater.dcproj.model.AttProjectInsurance">
  148. update ATT_PROJECT_INSURANCE
  149. <trim prefix="set" suffixOverrides=",">
  150. <if test="adName != null and adName != ''">AD_NAME = #{adName},</if>
  151. <if test="adCode != null and adCode != ''">AD_CODE = #{adCode},</if>
  152. <if test="id != null and id != ''">ID = #{id},</if>
  153. <if test="name != null and name != ''">NAME = #{name},</if>
  154. <if test="type != null and type != ''">TYPE = #{type},</if>
  155. <if test="loc != null and loc != ''">LOC = #{loc},</if>
  156. <if test="investment != null and investment != ''">INVESTMENT = #{investment},</if>
  157. <if test="plannedDuration != null and plannedDuration != ''">PLANNED_DURATION = #{plannedDuration},</if>
  158. <if test="startDate != null">START_DATE = #{startDate},</if>
  159. <if test="status != null and status != ''">STATUS = #{status},</if>
  160. <if test="managementUnit != null and managementUnit != ''">MANAGEMENT_UNIT = #{managementUnit},</if>
  161. <if test="constructors != null and constructors != ''">CONSTRUCTORS = #{constructors},</if>
  162. <if test="contactPerson != null and contactPerson != ''">CONTACT_PERSON = #{contactPerson},</if>
  163. <if test="centerX != null and centerX != ''">CENTER_X = #{centerX},</if>
  164. <if test="centerY != null and centerY != ''">CENTER_Y = #{centerY},</if>
  165. <if test="gdX != null and gdX != ''">GD_X = #{gdX},</if>
  166. <if test="gdY != null and gdY != ''">GD_Y = #{gdY},</if>
  167. <if test="intm != null">INTM = #{intm},</if>
  168. <if test="uptm != null">UPTM = #{uptm},</if>
  169. <if test="dataStat != null and dataStat != ''">DATA_STAT = #{dataStat},</if>
  170. </trim>
  171. <where>ID = #{id}</where>
  172. </update>
  173. <update id="updateBy" parameterType="cn.com.goldenwater.dcproj.model.AttProjectInsurance">
  174. update ATT_PROJECT_INSURANCE
  175. <trim prefix="set" suffixOverrides=",">
  176. <if test="adName != null and adName != ''">AD_NAME = #{adName},</if>
  177. <if test="adCode != null and adCode != ''">AD_CODE = #{adCode},</if>
  178. <if test="id != null and id != ''">ID = #{id},</if>
  179. <if test="name != null and name != ''">NAME = #{name},</if>
  180. <if test="type != null and type != ''">TYPE = #{type},</if>
  181. <if test="loc != null and loc != ''">LOC = #{loc},</if>
  182. <if test="investment != null and investment != ''">INVESTMENT = #{investment},</if>
  183. <if test="plannedDuration != null and plannedDuration != ''">PLANNED_DURATION = #{plannedDuration},</if>
  184. <if test="startDate != null">START_DATE = #{startDate},</if>
  185. <if test="status != null and status != ''">STATUS = #{status},</if>
  186. <if test="managementUnit != null and managementUnit != ''">MANAGEMENT_UNIT = #{managementUnit},</if>
  187. <if test="constructors != null and constructors != ''">CONSTRUCTORS = #{constructors},</if>
  188. <if test="contactPerson != null and contactPerson != ''">CONTACT_PERSON = #{contactPerson},</if>
  189. <if test="centerX != null and centerX != ''">CENTER_X = #{centerX},</if>
  190. <if test="centerY != null and centerY != ''">CENTER_Y = #{centerY},</if>
  191. <if test="gdX != null and gdX != ''">GD_X = #{gdX},</if>
  192. <if test="gdY != null and gdY != ''">GD_Y = #{gdY},</if>
  193. <if test="intm != null">INTM = #{intm},</if>
  194. <if test="uptm != null">UPTM = #{uptm},</if>
  195. <if test="dataStat != null and dataStat != ''">DATA_STAT = #{dataStat},</if>
  196. </trim>
  197. <include refid="page_where"/>
  198. </update>
  199. <!-- 其他自定义SQL -->
  200. <select id="getByRgstrId" resultMap="attProjectInsuranceResultMap">
  201. SELECT A.*
  202. FROM ATT_PROJECT_INSURANCE A
  203. JOIN BIS_INSP_ALL_OBJ B ON A.ID = B.CODE
  204. JOIN BIS_INSP_ANZE_RGSTR ON B.OBJ_ID = C.OBJ_ID
  205. where C.ID = #{id}
  206. </select>
  207. <select id="listOfUnderwriting" resultType="cn.com.goldenwater.dcproj.dto.AttAnzeUnderwritingDto">
  208. SELECT
  209. A.ID, A.AD_CODE, A.AD_NAME, A.NAME, A.TYPE, A.LOC, A.INVESTMENT,
  210. A.PLANNED_DURATION, A.START_DATE, A.STATUS, A.MANAGEMENT_UNIT,
  211. A.CONTACT_PERSON, A.CENTER_X, A.CENTER_Y, A.GD_X, A.GD_Y,
  212. B.ID AS recordId, B.POLICYHOLDER, B.POLICYHOLDER_PHONE, B.INSURANCE_COMPANY,
  213. B.INSURANCE_CONTACT_PERSON, B.INSURANCE_CONTACT_PHONE, B.PREMIUM_AMOUNT, B.PREVENTION_SERVICE_FEE,
  214. B.INSURANCE_DATE, B.PREVENTION_SERVICE_UNIT, B.SERVICE_UNIT_CONTACT_PERSON,
  215. B.SERVICE_UNIT_CONTACT_PHONE, B.INTM, B.UPTM, B.YEAR
  216. FROM ATT_PROJECT_INSURANCE A
  217. JOIN ATT_PROJECT_INSURANCE_RECORD B ON A.ID = B.PROJECT_ID
  218. WHERE B.YEAR = #{year}
  219. AND A.BUSINESS_TYPE = '1'
  220. <if test="id != null and id != ''">and A.ID = #{id}</if>
  221. <if test="adCode != null and adCode != ''">and A.AD_CODE like '${adCode}%'</if>
  222. <if test="adName != null and adName != ''">and A.AD_NAME like '%${adName}%'</if>
  223. <if test="name != null and name != ''">and A.NAME like '%${name}%'</if>
  224. <if test="type != null and type != ''">and A.TYPE = #{type}</if>
  225. <if test="insuranceCompany != null and insuranceCompany != ''">and B.INSURANCE_COMPANY like '%${insuranceCompany}%'</if>
  226. <if test="preventionServiceUnit != null and preventionServiceUnit != ''">and B.PREVENTION_SERVICE_UNIT like '%${preventionServiceUnit}%'</if>
  227. <if test="investment != null and investment != ''">and A.INVESTMENT = #{investment}</if>
  228. <if test="plannedDuration != null and plannedDuration != ''">and A.PLANNED_DURATION = #{plannedDuration}</if>
  229. <if test="startDate != null">and A.START_DATE = #{startDate}</if>
  230. <if test="state != null and state != ''">and B.STATE = #{state}</if>
  231. <if test="managementUnit != null and managementUnit != ''">and A.MANAGEMENT_UNIT = #{managementUnit}</if>
  232. <if test="contactPerson != null and contactPerson != ''">and A.CONTACT_PERSON = #{contactPerson}</if>
  233. and A.DATA_STAT='0'
  234. and B.DATA_STAT='0'
  235. </select>
  236. <select id="cityRecordView" resultType="cn.com.goldenwater.dcproj.dto.AttProjectInsuranceRecordViewDto">
  237. WITH city_total_proj AS (
  238. -- 各地市总有效工程数量,新增4位adCode,增加业务类型过滤
  239. SELECT
  240. SUBSTR(t."AD_CODE",1,4) AS "AD_CODE",
  241. CASE SUBSTR(t."AD_CODE",1,4)
  242. WHEN '3501' THEN '福州市'
  243. WHEN '3502' THEN '厦门市'
  244. WHEN '3503' THEN '莆田市'
  245. WHEN '3504' THEN '三明市'
  246. WHEN '3505' THEN '泉州市'
  247. WHEN '3506' THEN '漳州市'
  248. WHEN '3507' THEN '南平市'
  249. WHEN '3508' THEN '龙岩市'
  250. WHEN '3509' THEN '宁德市'
  251. END AS "CITY_NAME",
  252. COUNT(DISTINCT t."ID") AS "TOTAL_PROJECT_CNT"
  253. FROM "ATT_PROJECT_INSURANCE" t
  254. WHERE t."DATA_STAT" = '0'
  255. AND t.BUSINESS_TYPE = '1'
  256. AND SUBSTR(t."AD_CODE",1,4) IN ('3501','3502','3503','3504','3505','3506','3507','3508','3509')
  257. GROUP BY SUBSTR(t."AD_CODE",1,4)
  258. ),
  259. city_insured_proj AS (
  260. -- 各地市当年投保工程、保费合计,新增AD_CODE用于关联,增加业务类型过滤
  261. SELECT
  262. SUBSTR(p."AD_CODE",1,4) AS "AD_CODE",
  263. CASE SUBSTR(p."AD_CODE",1,4)
  264. WHEN '3501' THEN '福州市'
  265. WHEN '3502' THEN '厦门市'
  266. WHEN '3503' THEN '莆田市'
  267. WHEN '3504' THEN '三明市'
  268. WHEN '3505' THEN '泉州市'
  269. WHEN '3506' THEN '漳州市'
  270. WHEN '3507' THEN '南平市'
  271. WHEN '3508' THEN '龙岩市'
  272. WHEN '3509' THEN '宁德市'
  273. END AS "CITY_NAME",
  274. COUNT(DISTINCT r."PROJECT_ID") AS "INSURED_CNT",
  275. ROUND(SUM(r."PREMIUM_AMOUNT"), 1) AS "PREMIUM_SUM"
  276. FROM "ATT_PROJECT_INSURANCE_RECORD" r
  277. INNER JOIN "ATT_PROJECT_INSURANCE" p ON r."PROJECT_ID" = p."ID"
  278. WHERE r."YEAR" = TO_CHAR(SYSDATE, 'YYYY')
  279. AND r."DATA_STAT" = '0'
  280. AND p."DATA_STAT" = '0'
  281. AND p.BUSINESS_TYPE = '1'
  282. AND SUBSTR(p."AD_CODE",1,4) IN ('3501','3502','3503','3504','3505','3506','3507','3508','3509')
  283. AND r."INSURANCE_COMPANY" IS NOT NULL
  284. GROUP BY SUBSTR(p."AD_CODE",1,4)
  285. )
  286. SELECT
  287. t."AD_CODE" AS adCode,
  288. t."CITY_NAME" AS city,
  289. t."TOTAL_PROJECT_CNT" AS projectTotal,
  290. NVL(i."INSURED_CNT", 0) AS insuredTotal,
  291. LTRIM(TO_CHAR(ROUND(NVL(i."INSURED_CNT",0) / NULLIF(t."TOTAL_PROJECT_CNT",0) * 100, 1), '999.0')) || '%' AS insuranceRatio,
  292. NVL(i."PREMIUM_SUM", 0) AS premiumSum
  293. FROM city_total_proj t
  294. LEFT JOIN city_insured_proj i
  295. ON t."AD_CODE" = i."AD_CODE"
  296. ORDER BY
  297. CASE t."CITY_NAME"
  298. WHEN '福州市' THEN 1
  299. WHEN '厦门市' THEN 2
  300. WHEN '泉州市' THEN 3
  301. WHEN '漳州市' THEN 4
  302. WHEN '南平市' THEN 5
  303. WHEN '宁德市' THEN 6
  304. WHEN '龙岩市' THEN 7
  305. WHEN '三明市' THEN 8
  306. WHEN '莆田市' THEN 9
  307. END
  308. </select>
  309. <select id="projectView" resultType="cn.com.goldenwater.dcproj.dto.AttProjectInsuranceRecordViewDto">
  310. WITH all_type_total AS (
  311. -- 全局分母:所有TYPE不为空且BUSINESS_TYPE='1'的工程总数量
  312. SELECT COUNT(DISTINCT t."ID") AS global_total
  313. FROM "ATT_PROJECT_INSURANCE" t
  314. WHERE t."DATA_STAT" = '0'
  315. AND t."TYPE" IS NOT NULL
  316. AND t.BUSINESS_TYPE = '1'
  317. ),
  318. type_total AS (
  319. -- 各类型自身总工程(TYPE非空 + BUSINESS_TYPE='1')
  320. SELECT
  321. t."TYPE" AS project_type,
  322. COUNT(DISTINCT t."ID") AS type_self_total
  323. FROM "ATT_PROJECT_INSURANCE" t
  324. WHERE t."DATA_STAT" = '0'
  325. AND t."TYPE" IS NOT NULL
  326. AND t.BUSINESS_TYPE = '1'
  327. GROUP BY t."TYPE"
  328. ),
  329. type_insured AS (
  330. -- 各类型投保数量,仅TYPE非空、BUSINESS_TYPE='1'
  331. SELECT
  332. p."TYPE" AS project_type,
  333. COUNT(DISTINCT r."PROJECT_ID") AS insured_cnt
  334. FROM "ATT_PROJECT_INSURANCE_RECORD" r
  335. INNER JOIN "ATT_PROJECT_INSURANCE" p ON r."PROJECT_ID" = p."ID"
  336. WHERE r."YEAR" = TO_CHAR(SYSDATE, 'YYYY')
  337. AND r."DATA_STAT" = '0'
  338. AND p."DATA_STAT" = '0'
  339. AND p."TYPE" IS NOT NULL
  340. AND p.BUSINESS_TYPE = '1'
  341. GROUP BY p."TYPE"
  342. )
  343. SELECT
  344. t.project_type AS projectType,
  345. t.type_self_total AS projectTotal,
  346. NVL(i.insured_cnt, 0) AS insuredTotal,
  347. -- 投保率:当前类型投保数 / 全局所有TYPE非空工程总数
  348. LTRIM(
  349. TO_CHAR(
  350. ROUND(NVL(i.insured_cnt,0) / NULLIF(g.global_total, 0) * 100, 1),
  351. '999.0'
  352. )
  353. ) || '%' AS insuranceRatio
  354. FROM type_total t
  355. CROSS JOIN all_type_total g
  356. LEFT JOIN type_insured i
  357. ON t.project_type = i.project_type
  358. ORDER BY t.type_self_total DESC
  359. </select>
  360. <select id="insuranceCompanyView" resultType="cn.com.goldenwater.dcproj.dto.AttProjectInsuranceRecordViewDto">
  361. WITH all_insured AS (
  362. -- 所有当年有效投保工程总数量(分母,仅保险机构不为空、业务类型1)
  363. SELECT COUNT(DISTINCT r.PROJECT_ID) AS total_all_insured
  364. FROM "ATT_PROJECT_INSURANCE_RECORD" r
  365. JOIN "ATT_PROJECT_INSURANCE" p ON r.PROJECT_ID = p.ID
  366. WHERE r."YEAR" = TO_CHAR(SYSDATE, 'YYYY')
  367. AND r.DATA_STAT = '0'
  368. AND p.DATA_STAT = '0'
  369. AND r.INSURANCE_COMPANY IS NOT NULL
  370. -- 新增业务类型过滤
  371. AND p.BUSINESS_TYPE = '1'
  372. ),
  373. company_data AS (
  374. -- 每家保险机构承保工程数量,仅业务类型BUSINESS_TYPE='1'
  375. SELECT
  376. r.INSURANCE_COMPANY AS insurance_company,
  377. COUNT(DISTINCT r.PROJECT_ID) AS company_insured_cnt
  378. FROM "ATT_PROJECT_INSURANCE_RECORD" r
  379. JOIN "ATT_PROJECT_INSURANCE" p ON r.PROJECT_ID = p.ID
  380. WHERE r."YEAR" = TO_CHAR(SYSDATE, 'YYYY')
  381. AND r.DATA_STAT = '0'
  382. AND p.DATA_STAT = '0'
  383. AND r.INSURANCE_COMPANY IS NOT NULL
  384. -- 新增业务类型过滤
  385. AND p.BUSINESS_TYPE = '1'
  386. GROUP BY r.INSURANCE_COMPANY
  387. )
  388. SELECT
  389. c.insurance_company AS insuranceCompany,
  390. c.company_insured_cnt AS insuredTotal,
  391. a.total_all_insured AS projectTotal,
  392. LTRIM(TO_CHAR(ROUND(c.company_insured_cnt / NULLIF(a.total_all_insured, 0) * 100, 1), '999.0')) || '%' AS insuranceRatio
  393. FROM company_data c, all_insured a
  394. ORDER BY c.company_insured_cnt DESC
  395. </select>
  396. <select id="preventionServiceUnitView" resultType="cn.com.goldenwater.dcproj.dto.AttProjectInsuranceRecordViewDto">
  397. WITH all_insured AS (
  398. SELECT COUNT(DISTINCT r."PROJECT_ID") AS total_all_proj
  399. FROM "ATT_PROJECT_INSURANCE_RECORD" r
  400. INNER JOIN "ATT_PROJECT_INSURANCE" p ON r."PROJECT_ID" = p."ID"
  401. WHERE r."YEAR" = TO_CHAR(SYSDATE, 'YYYY')
  402. AND r."DATA_STAT" = '0'
  403. AND p.DATA_STAT = '0'
  404. AND p.BUSINESS_TYPE = '1'
  405. ),
  406. unit_group AS (
  407. SELECT
  408. service_unit,
  409. COUNT(DISTINCT "PROJECT_ID") AS unit_proj_cnt
  410. FROM (
  411. SELECT
  412. CASE
  413. WHEN r."PREVENTION_SERVICE_UNIT" IS NULL THEN '无预防服务单位'
  414. ELSE r."PREVENTION_SERVICE_UNIT"
  415. END AS service_unit,
  416. r."PROJECT_ID"
  417. FROM "ATT_PROJECT_INSURANCE_RECORD" r
  418. INNER JOIN "ATT_PROJECT_INSURANCE" p ON r."PROJECT_ID" = p."ID"
  419. WHERE r."YEAR" = TO_CHAR(SYSDATE, 'YYYY')
  420. AND r."DATA_STAT" = '0'
  421. AND p.DATA_STAT = '0'
  422. AND p.BUSINESS_TYPE = '1'
  423. ) t
  424. GROUP BY service_unit
  425. )
  426. SELECT
  427. g.service_unit AS preventionServiceUnit,
  428. g.unit_proj_cnt AS projectTotal,
  429. a.total_all_proj AS insuredTotal,
  430. DECODE(a.total_all_proj,
  431. 0, '0.0%',
  432. TRUNC(g.unit_proj_cnt * 1000 / a.total_all_proj) / 10 || '%'
  433. ) AS insuranceRatio
  434. FROM unit_group g
  435. CROSS JOIN all_insured a
  436. ORDER BY g.unit_proj_cnt DESC
  437. </select>
  438. <select id="handView" resultType="cn.com.goldenwater.dcproj.dto.AttProjectInsuranceRecordViewDto">
  439. WITH raw_data AS (
  440. SELECT
  441. r."INSURANCE_COMPANY",
  442. r."PROJECT_ID",
  443. r."PREMIUM_AMOUNT",
  444. SUBSTR(p."AD_CODE",1,4) AS city_code
  445. FROM "ATT_PROJECT_INSURANCE_RECORD" r
  446. INNER JOIN "ATT_PROJECT_INSURANCE" p ON r."PROJECT_ID" = p."ID"
  447. WHERE r."YEAR" = TO_CHAR(SYSDATE, 'YYYY')
  448. AND r."DATA_STAT" = '0'
  449. AND p."DATA_STAT" = '0'
  450. AND r."INSURANCE_COMPANY" IS NOT NULL
  451. -- 新增业务类型过滤条件
  452. AND p.BUSINESS_TYPE = '1'
  453. ),
  454. agg_all AS (
  455. SELECT
  456. COUNT(DISTINCT "INSURANCE_COMPANY") AS company_total,
  457. COUNT(DISTINCT "PROJECT_ID") AS project_total,
  458. SUM("PREMIUM_AMOUNT") AS total_premium,
  459. COUNT(DISTINCT CASE WHEN city_code IN ('3501','3502','3503','3504','3505','3506','3507','3508','3509') THEN city_code END) AS covered_city_num
  460. FROM raw_data
  461. )
  462. SELECT
  463. company_total AS companyCount,
  464. project_total AS insuredTotal,
  465. total_premium AS premiumSum,
  466. covered_city_num || '/9' AS coveredCityNum
  467. FROM agg_all
  468. </select>
  469. <select id="numberRanking" resultType="cn.com.goldenwater.dcproj.dto.AttProjectInsuranceRecordViewDto">
  470. SELECT
  471. r."INSURANCE_COMPANY" AS insuranceCompany,
  472. COUNT(DISTINCT r."PROJECT_ID") AS insuredTotal
  473. FROM "ATT_PROJECT_INSURANCE_RECORD" r
  474. INNER JOIN "ATT_PROJECT_INSURANCE" p
  475. ON r."PROJECT_ID" = p."ID"
  476. WHERE r."YEAR" = TO_CHAR(SYSDATE, 'YYYY')
  477. AND r."DATA_STAT" = '0'
  478. AND p."DATA_STAT" = '0'
  479. AND r."INSURANCE_COMPANY" IS NOT NULL
  480. -- 新增:仅统计主表业务类型为1的工程
  481. AND p.BUSINESS_TYPE = '1'
  482. GROUP BY r."INSURANCE_COMPANY"
  483. ORDER BY COUNT(DISTINCT r."PROJECT_ID") DESC
  484. </select>
  485. <select id="insuranceCompanyDetail" resultType="cn.com.goldenwater.dcproj.dto.AttProjectInsuranceRecordViewDto">
  486. WITH year_total AS (
  487. -- 当年全省总承保工程,关联主表过滤BUSINESS_TYPE='1'
  488. SELECT COUNT(DISTINCT r."PROJECT_ID") AS total_proj
  489. FROM "ATT_PROJECT_INSURANCE_RECORD" r
  490. INNER JOIN "ATT_PROJECT_INSURANCE" p ON r."PROJECT_ID" = p."ID"
  491. WHERE r."YEAR" = TO_CHAR(SYSDATE, 'YYYY')
  492. AND r."DATA_STAT" = '0'
  493. AND p."DATA_STAT" = '0'
  494. AND r."INSURANCE_COMPANY" IS NOT NULL
  495. AND p.BUSINESS_TYPE = '1'
  496. ),
  497. company_stat AS (
  498. SELECT
  499. r."INSURANCE_COMPANY",
  500. COUNT(DISTINCT r."PROJECT_ID") AS company_proj_cnt,
  501. SUM(r."PREMIUM_AMOUNT") AS company_premium
  502. FROM "ATT_PROJECT_INSURANCE_RECORD" r
  503. INNER JOIN "ATT_PROJECT_INSURANCE" p ON r."PROJECT_ID" = p."ID"
  504. WHERE r."YEAR" = TO_CHAR(SYSDATE, 'YYYY')
  505. AND r."DATA_STAT" = '0'
  506. AND p."DATA_STAT" = '0'
  507. AND r."INSURANCE_COMPANY" IS NOT NULL
  508. AND p.BUSINESS_TYPE = '1'
  509. GROUP BY r."INSURANCE_COMPANY"
  510. )
  511. SELECT
  512. c."INSURANCE_COMPANY" AS insuranceCompany,
  513. c.company_proj_cnt AS insuredTotal,
  514. LTRIM(TO_CHAR(ROUND(c.company_proj_cnt / NULLIF(t.total_proj,0) * 100,1), '999.0')) || '%' AS insuranceRatio,
  515. c.company_premium AS premiumSum
  516. FROM company_stat c, year_total t
  517. ORDER BY c.company_proj_cnt DESC
  518. </select>
  519. <select id="handServiceView" resultType="cn.com.goldenwater.dcproj.dto.AttProjectInsuranceRecordViewDto">
  520. WITH rec_all AS (
  521. -- 当年全部投保记录,增加业务类型BUSINESS_TYPE='1'过滤
  522. SELECT
  523. r."PROJECT_ID",
  524. r."PREVENTION_SERVICE_UNIT",
  525. SUBSTR(p."AD_CODE",1,4) AS city_code
  526. FROM "ATT_PROJECT_INSURANCE_RECORD" r
  527. INNER JOIN "ATT_PROJECT_INSURANCE" p
  528. ON r."PROJECT_ID" = p."ID"
  529. WHERE r."YEAR" = TO_CHAR(SYSDATE, 'YYYY')
  530. AND r."DATA_STAT" = '0'
  531. AND p."DATA_STAT" = '0'
  532. AND p.BUSINESS_TYPE = '1'
  533. ),
  534. agg_base AS (
  535. SELECT
  536. -- 全部当年总工程(分母,空/非空服务单位都算)
  537. COUNT(DISTINCT "PROJECT_ID") AS total_all_proj,
  538. -- 有服务单位的工程总数
  539. COUNT(DISTINCT CASE WHEN "PREVENTION_SERVICE_UNIT" IS NOT NULL THEN "PROJECT_ID" END) AS service_proj_cnt,
  540. -- 去重有效服务机构数量
  541. COUNT(DISTINCT CASE WHEN "PREVENTION_SERVICE_UNIT" IS NOT NULL THEN "PREVENTION_SERVICE_UNIT" END) AS service_org_total,
  542. -- 已覆盖地市编码数量
  543. COUNT(DISTINCT CASE
  544. WHEN city_code IN ('3501','3502','3503','3504','3505','3506','3507','3508','3509')
  545. THEN city_code
  546. END) AS covered_city
  547. FROM rec_all
  548. )
  549. SELECT
  550. service_org_total AS serviceCount,
  551. service_proj_cnt AS insuredTotal,
  552. -- 服务覆盖率 保留1位小数
  553. LTRIM(TO_CHAR(ROUND(service_proj_cnt / NULLIF(total_all_proj, 0) * 100, 1), '999.0')) || '%' AS insuranceRatio,
  554. covered_city || '/9' AS coveredCityNum
  555. FROM agg_base
  556. </select>
  557. <select id="numberServiceRanking" resultType="cn.com.goldenwater.dcproj.dto.AttProjectInsuranceRecordViewDto">
  558. SELECT
  559. r."PREVENTION_SERVICE_UNIT" AS preventionServiceUnit,
  560. COUNT(DISTINCT r."PROJECT_ID") AS insuredTotal
  561. FROM "ATT_PROJECT_INSURANCE_RECORD" r
  562. INNER JOIN "ATT_PROJECT_INSURANCE" p
  563. ON r."PROJECT_ID" = p."ID"
  564. WHERE r."YEAR" = TO_CHAR(SYSDATE, 'YYYY')
  565. AND r."DATA_STAT" = '0'
  566. AND p."DATA_STAT" = '0'
  567. AND r."PREVENTION_SERVICE_UNIT" IS NOT NULL
  568. -- 新增业务类型过滤
  569. AND p.BUSINESS_TYPE = '1'
  570. GROUP BY r."PREVENTION_SERVICE_UNIT"
  571. ORDER BY COUNT(DISTINCT r."PROJECT_ID") DESC
  572. </select>
  573. <select id="serviceUnitDetail" resultType="cn.com.goldenwater.dcproj.dto.AttProjectInsuranceRecordViewDto">
  574. WITH year_total AS (
  575. -- 当年全部工程总数(占比分母,关联主表过滤BUSINESS_TYPE='1')
  576. SELECT COUNT(DISTINCT r."PROJECT_ID") AS total_proj
  577. FROM "ATT_PROJECT_INSURANCE_RECORD" r
  578. INNER JOIN "ATT_PROJECT_INSURANCE" p ON r."PROJECT_ID" = p."ID"
  579. WHERE r."YEAR" = TO_CHAR(SYSDATE, 'YYYY')
  580. AND r."DATA_STAT" = '0'
  581. AND p."DATA_STAT" = '0'
  582. AND p.BUSINESS_TYPE = '1'
  583. ),
  584. org_stat AS (
  585. SELECT
  586. r."PREVENTION_SERVICE_UNIT" AS service_unit,
  587. COUNT(DISTINCT r."PROJECT_ID") AS unit_proj_cnt
  588. FROM "ATT_PROJECT_INSURANCE_RECORD" r
  589. INNER JOIN "ATT_PROJECT_INSURANCE" p ON r."PROJECT_ID" = p."ID"
  590. WHERE r."YEAR" = TO_CHAR(SYSDATE, 'YYYY')
  591. AND r."DATA_STAT" = '0'
  592. AND p."DATA_STAT" = '0'
  593. AND r."PREVENTION_SERVICE_UNIT" IS NOT NULL
  594. AND p.BUSINESS_TYPE = '1'
  595. GROUP BY r."PREVENTION_SERVICE_UNIT"
  596. )
  597. SELECT
  598. o.service_unit AS preventionServiceUnit,
  599. o.unit_proj_cnt AS insuredTotal,
  600. LTRIM(TO_CHAR(ROUND(o.unit_proj_cnt / NULLIF(t.total_proj, 0) * 100, 1), '999.0')) || '%' AS insuranceRatio
  601. FROM org_stat o, year_total t
  602. ORDER BY o.unit_proj_cnt DESC
  603. </select>
  604. <select id="cityCovered" resultType="cn.com.goldenwater.dcproj.dto.AttProjectInsuranceRecordViewDto">
  605. SELECT
  606. r.INSURANCE_COMPANY AS insuranceCompany,
  607. COUNT(DISTINCT r.PROJECT_ID) AS insuredTotal,
  608. ROUND(SUM(r.PREMIUM_AMOUNT)/1,2) AS premiumSum,
  609. CONCAT(COUNT(DISTINCT CASE WHEN SUBSTR(p.AD_CODE,1,4) IN ('3501','3502','3503','3504','3505','3506','3507','3508','3509') THEN SUBSTR(p.AD_CODE,1,4) END), '/9') AS coveredCityNum
  610. FROM GW_HUIYI.ATT_PROJECT_INSURANCE_RECORD r
  611. JOIN GW_HUIYI.ATT_PROJECT_INSURANCE p ON r.PROJECT_ID=p.ID
  612. WHERE r.YEAR=TO_CHAR(SYSDATE,'yyyy')
  613. AND r.DATA_STAT='0'
  614. AND p.DATA_STAT='0'
  615. -- 新增业务类型过滤条件
  616. AND p.BUSINESS_TYPE='1'
  617. <if test="insuranceCompany != null and insuranceCompany != ''">
  618. and r.INSURANCE_COMPANY = #{insuranceCompany}
  619. </if>
  620. <if test="adCode != null and adCode != ''">
  621. and p.AD_CODE like '${adCode}%'
  622. </if>
  623. GROUP BY r.INSURANCE_COMPANY
  624. </select>
  625. <select id="cityCoveredDetail" resultType="cn.com.goldenwater.dcproj.dto.AttProjectInsuranceRecordViewDto">
  626. SELECT
  627. SUBSTR(p.AD_CODE,1,4) AS adCode,
  628. CASE SUBSTR(p.AD_CODE,1,4)
  629. WHEN '3501' THEN '福州市'
  630. WHEN '3502' THEN '厦门市'
  631. WHEN '3503' THEN '莆田市'
  632. WHEN '3504' THEN '三明市'
  633. WHEN '3505' THEN '泉州市'
  634. WHEN '3506' THEN '漳州市'
  635. WHEN '3507' THEN '南平市'
  636. WHEN '3508' THEN '龙岩市'
  637. WHEN '3509' THEN '宁德市'
  638. END AS city,
  639. COUNT(DISTINCT r.PROJECT_ID) AS insuredTotal,
  640. -- 原占比:当前地市该保险公司项目 / 全省该保险公司总项目
  641. LTRIM(TO_CHAR(
  642. ROUND(
  643. COUNT(DISTINCT r.PROJECT_ID)
  644. / NULLIF(
  645. (SELECT COUNT(DISTINCT rr.PROJECT_ID)
  646. FROM GW_HUIYI.ATT_PROJECT_INSURANCE_RECORD rr
  647. INNER JOIN GW_HUIYI.ATT_PROJECT_INSURANCE pp ON rr.PROJECT_ID = pp.ID
  648. WHERE rr.YEAR = TO_CHAR(SYSDATE, 'yyyy')
  649. AND rr.DATA_STAT = '0'
  650. AND pp.DATA_STAT = '0'
  651. AND rr.INSURANCE_COMPANY IS NOT NULL
  652. AND pp.BUSINESS_TYPE = '1'
  653. <if test="insuranceCompany != null and insuranceCompany != ''">
  654. AND rr.INSURANCE_COMPANY = #{insuranceCompany}
  655. </if>
  656. ),
  657. 0
  658. ) * 100,
  659. 1
  660. ), '999.0'
  661. )) || '%' AS insuranceRatio,
  662. -- 新增覆盖率 coverage:当前地市该保险公司项目 / 该地全市所有保险公司总项目
  663. LTRIM(TO_CHAR(
  664. ROUND(
  665. COUNT(DISTINCT r.PROJECT_ID)
  666. / NULLIF(
  667. (SELECT COUNT(DISTINCT rr2.PROJECT_ID)
  668. FROM GW_HUIYI.ATT_PROJECT_INSURANCE_RECORD rr2
  669. INNER JOIN GW_HUIYI.ATT_PROJECT_INSURANCE pp2 ON rr2.PROJECT_ID = pp2.ID
  670. WHERE rr2.YEAR = TO_CHAR(SYSDATE, 'yyyy')
  671. AND rr2.DATA_STAT = '0'
  672. AND pp2.DATA_STAT = '0'
  673. AND rr2.INSURANCE_COMPANY IS NOT NULL
  674. AND pp2.BUSINESS_TYPE = '1'
  675. -- 绑定外层当前地市4位编码,不限制保险公司
  676. AND SUBSTR(pp2.AD_CODE,1,4) = SUBSTR(p.AD_CODE,1,4)
  677. ),
  678. 0
  679. ) * 100,
  680. 1
  681. ), '999.0'
  682. )) || '%' AS coverage,
  683. ROUND(SUM(r.PREMIUM_AMOUNT),1) AS premiumSum
  684. FROM GW_HUIYI.ATT_PROJECT_INSURANCE_RECORD r
  685. JOIN GW_HUIYI.ATT_PROJECT_INSURANCE p ON r.PROJECT_ID=p.ID
  686. WHERE r.YEAR=TO_CHAR(SYSDATE,'yyyy')
  687. AND r.DATA_STAT='0'
  688. AND p.DATA_STAT='0'
  689. AND r.INSURANCE_COMPANY IS NOT NULL
  690. -- 主查询新增业务类型过滤
  691. AND p.BUSINESS_TYPE = '1'
  692. <if test="insuranceCompany != null and insuranceCompany != ''">
  693. AND r.INSURANCE_COMPANY = #{insuranceCompany}
  694. </if>
  695. GROUP BY SUBSTR(p.AD_CODE,1,4)
  696. ORDER BY COUNT(DISTINCT r.PROJECT_ID) DESC
  697. </select>
  698. <select id="countyCovered" resultType="cn.com.goldenwater.dcproj.dto.AttProjectInsuranceRecordViewDto">
  699. SELECT
  700. CASE SUBSTR(p.AD_CODE,1,4)
  701. WHEN '3501' THEN '福州市'
  702. WHEN '3502' THEN '厦门市'
  703. WHEN '3503' THEN '莆田市'
  704. WHEN '3504' THEN '三明市'
  705. WHEN '3505' THEN '泉州市'
  706. WHEN '3506' THEN '漳州市'
  707. WHEN '3507' THEN '南平市'
  708. WHEN '3508' THEN '龙岩市'
  709. WHEN '3509' THEN '宁德市'
  710. END AS city,
  711. r.INSURANCE_COMPANY AS insuranceCompany,
  712. COUNT(DISTINCT r.PROJECT_ID) AS insuredTotal,
  713. TO_CHAR(ROUND(SUM(r.PREMIUM_AMOUNT),2)) AS premiumSum
  714. FROM GW_HUIYI.ATT_PROJECT_INSURANCE_RECORD r
  715. JOIN GW_HUIYI.ATT_PROJECT_INSURANCE p ON r.PROJECT_ID = p.ID
  716. WHERE r.YEAR = TO_CHAR(SYSDATE,'yyyy')
  717. AND r.DATA_STAT = '0'
  718. AND p.DATA_STAT = '0'
  719. AND r.INSURANCE_COMPANY IS NOT NULL
  720. -- 新增业务类型过滤
  721. AND p.BUSINESS_TYPE = '1'
  722. <if test="insuranceCompany != null and insuranceCompany != ''">
  723. AND r.INSURANCE_COMPANY = #{insuranceCompany}
  724. </if>
  725. <if test="adCode != null and adCode != ''">
  726. AND SUBSTR(p.AD_CODE,1,4) LIKE CONCAT(SUBSTR(#{adCode},1,4),'%')
  727. </if>
  728. GROUP BY SUBSTR(p.AD_CODE,1,4), r.INSURANCE_COMPANY
  729. </select>
  730. <select id="serviceCityCovered" resultType="cn.com.goldenwater.dcproj.dto.AttProjectInsuranceRecordViewDto">
  731. SELECT
  732. r.PREVENTION_SERVICE_UNIT AS preventionServiceUnit,
  733. COUNT(DISTINCT r.PROJECT_ID) AS insuredTotal,
  734. ROUND(SUM(r.PREVENTION_SERVICE_FEE)/1,2) AS premiumSum,
  735. CONCAT(COUNT(DISTINCT CASE WHEN SUBSTR(p.AD_CODE,1,4) IN ('3501','3502','3503','3504','3505','3506','3507','3508','3509') THEN SUBSTR(p.AD_CODE,1,4) END), '/9') AS coveredCityNum
  736. FROM GW_HUIYI.ATT_PROJECT_INSURANCE_RECORD r
  737. JOIN GW_HUIYI.ATT_PROJECT_INSURANCE p ON r.PROJECT_ID=p.ID
  738. WHERE r.YEAR=TO_CHAR(SYSDATE,'yyyy')
  739. AND r.DATA_STAT='0'
  740. AND p.DATA_STAT='0'
  741. AND r.PREVENTION_SERVICE_UNIT IS NOT NULL
  742. -- 新增业务类型过滤条件
  743. AND p.BUSINESS_TYPE='1'
  744. <if test="preventionServiceUnit != null and preventionServiceUnit != ''">
  745. and r.PREVENTION_SERVICE_UNIT = #{preventionServiceUnit}
  746. </if>
  747. <if test="adCode != null and adCode != ''">
  748. and p.AD_CODE like '${adCode}%'
  749. </if>
  750. GROUP BY r.PREVENTION_SERVICE_UNIT
  751. </select>
  752. <select id="serviceCityCoveredDetail" resultType="cn.com.goldenwater.dcproj.dto.AttProjectInsuranceRecordViewDto">
  753. SELECT
  754. SUBSTR(p.AD_CODE,1,4) AS adCode,
  755. CASE SUBSTR(p.AD_CODE,1,4)
  756. WHEN '3501' THEN '福州市'
  757. WHEN '3502' THEN '厦门市'
  758. WHEN '3503' THEN '莆田市'
  759. WHEN '3504' THEN '三明市'
  760. WHEN '3505' THEN '泉州市'
  761. WHEN '3506' THEN '漳州市'
  762. WHEN '3507' THEN '南平市'
  763. WHEN '3508' THEN '龙岩市'
  764. WHEN '3509' THEN '宁德市'
  765. END AS city,
  766. COUNT(DISTINCT r.PROJECT_ID) AS insuredTotal,
  767. -- 原有占比:当前地市该服务机构项目 / 全省该服务机构总项目
  768. LTRIM(TO_CHAR(
  769. ROUND(
  770. COUNT(DISTINCT r.PROJECT_ID)
  771. / NULLIF(
  772. (SELECT COUNT(DISTINCT rr.PROJECT_ID)
  773. FROM GW_HUIYI.ATT_PROJECT_INSURANCE_RECORD rr
  774. INNER JOIN GW_HUIYI.ATT_PROJECT_INSURANCE pp ON rr.PROJECT_ID = pp.ID
  775. WHERE rr.YEAR = TO_CHAR(SYSDATE, 'yyyy')
  776. AND rr.DATA_STAT = '0'
  777. AND pp.DATA_STAT = '0'
  778. AND rr.PREVENTION_SERVICE_UNIT IS NOT NULL
  779. AND pp.BUSINESS_TYPE = '1'
  780. <if test="preventionServiceUnit != null and preventionServiceUnit != ''">
  781. AND rr.PREVENTION_SERVICE_UNIT = #{preventionServiceUnit}
  782. </if>
  783. ),
  784. 0
  785. ) * 100,
  786. 1
  787. ), '999.0'
  788. )) || '%' AS insuranceRatio,
  789. -- 新增覆盖率 coverage:当前地市该机构项目 ÷ 该地全市所有服务机构总项目
  790. LTRIM(TO_CHAR(
  791. ROUND(
  792. COUNT(DISTINCT r.PROJECT_ID)
  793. / NULLIF(
  794. (SELECT COUNT(DISTINCT rr2.PROJECT_ID)
  795. FROM GW_HUIYI.ATT_PROJECT_INSURANCE_RECORD rr2
  796. INNER JOIN GW_HUIYI.ATT_PROJECT_INSURANCE pp2 ON rr2.PROJECT_ID = pp2.ID
  797. WHERE rr2.YEAR = TO_CHAR(SYSDATE, 'yyyy')
  798. AND rr2.DATA_STAT = '0'
  799. AND pp2.DATA_STAT = '0'
  800. AND rr2.PREVENTION_SERVICE_UNIT IS NOT NULL
  801. AND pp2.BUSINESS_TYPE = '1'
  802. -- 匹配外层当前地市4位编码,不限制服务单位
  803. AND SUBSTR(pp2.AD_CODE,1,4) = SUBSTR(p.AD_CODE,1,4)
  804. ),
  805. 0
  806. ) * 100,
  807. 1
  808. ), '999.0'
  809. )) || '%' AS coverage,
  810. ROUND(SUM(r.PREVENTION_SERVICE_FEE),1) AS premiumSum
  811. FROM GW_HUIYI.ATT_PROJECT_INSURANCE_RECORD r
  812. JOIN GW_HUIYI.ATT_PROJECT_INSURANCE p ON r.PROJECT_ID=p.ID
  813. WHERE r.YEAR=TO_CHAR(SYSDATE,'yyyy')
  814. AND r.DATA_STAT='0'
  815. AND p.DATA_STAT='0'
  816. AND r.PREVENTION_SERVICE_UNIT IS NOT NULL
  817. -- 外层主查询新增业务类型过滤
  818. AND p.BUSINESS_TYPE = '1'
  819. <if test="preventionServiceUnit != null and preventionServiceUnit != ''">
  820. AND r.PREVENTION_SERVICE_UNIT = #{preventionServiceUnit}
  821. </if>
  822. GROUP BY SUBSTR(p.AD_CODE,1,4)
  823. ORDER BY COUNT(DISTINCT r.PROJECT_ID) DESC
  824. </select>
  825. <select id="serviceCountyCovered" resultType="cn.com.goldenwater.dcproj.dto.AttProjectInsuranceRecordViewDto">
  826. SELECT
  827. CASE SUBSTR(p.AD_CODE,1,4)
  828. WHEN '3501' THEN '福州市'
  829. WHEN '3502' THEN '厦门市'
  830. WHEN '3503' THEN '莆田市'
  831. WHEN '3504' THEN '三明市'
  832. WHEN '3505' THEN '泉州市'
  833. WHEN '3506' THEN '漳州市'
  834. WHEN '3507' THEN '南平市'
  835. WHEN '3508' THEN '龙岩市'
  836. WHEN '3509' THEN '宁德市'
  837. END AS city,
  838. r.PREVENTION_SERVICE_UNIT AS preventionServiceUnit,
  839. COUNT(DISTINCT r.PROJECT_ID) AS insuredTotal,
  840. TO_CHAR(ROUND(SUM(r.PREVENTION_SERVICE_FEE),2)) AS premiumSum
  841. FROM GW_HUIYI.ATT_PROJECT_INSURANCE_RECORD r
  842. JOIN GW_HUIYI.ATT_PROJECT_INSURANCE p ON r.PROJECT_ID = p.ID
  843. WHERE r.YEAR = TO_CHAR(SYSDATE,'yyyy')
  844. AND r.DATA_STAT = '0'
  845. AND p.DATA_STAT = '0'
  846. AND r.PREVENTION_SERVICE_UNIT IS NOT NULL
  847. -- 新增业务类型过滤条件
  848. AND p.BUSINESS_TYPE = '1'
  849. <if test="preventionServiceUnit != null and preventionServiceUnit != ''">
  850. AND r.PREVENTION_SERVICE_UNIT = #{preventionServiceUnit}
  851. </if>
  852. <if test="adCode != null and adCode != ''">
  853. AND SUBSTR(p.AD_CODE,1,4) LIKE CONCAT(SUBSTR(#{adCode},1,4),'%')
  854. </if>
  855. GROUP BY SUBSTR(p.AD_CODE,1,4), r.PREVENTION_SERVICE_UNIT
  856. </select>
  857. <select id="insuranceCompanyCountyDetail" resultType="cn.com.goldenwater.dcproj.dto.AttProjectInsuranceRecordViewDto">
  858. SELECT
  859. p.AD_CODE AS adCode,
  860. distOrg.ORG_NM AS county,
  861. COUNT(DISTINCT r.PROJECT_ID) AS insuredTotal,
  862. -- 原占比:当前保险公司区县项目 / 全市该保险公司总项目
  863. LTRIM(TO_CHAR(
  864. ROUND(
  865. COUNT(DISTINCT r.PROJECT_ID)
  866. / NULLIF(
  867. (SELECT COUNT(DISTINCT rr.PROJECT_ID)
  868. FROM GW_HUIYI.ATT_PROJECT_INSURANCE_RECORD rr
  869. INNER JOIN GW_HUIYI.ATT_PROJECT_INSURANCE pp ON rr.PROJECT_ID = pp.ID
  870. WHERE rr.YEAR = TO_CHAR(SYSDATE, 'yyyy')
  871. AND rr.DATA_STAT = '0'
  872. AND pp.DATA_STAT = '0'
  873. AND rr.INSURANCE_COMPANY IS NOT NULL
  874. AND pp.BUSINESS_TYPE = '1'
  875. <if test="adCode != null and adCode != ''">
  876. AND pp.AD_CODE LIKE #{adCode} || '%'
  877. </if>
  878. <if test="insuranceCompany != null and insuranceCompany != ''">
  879. AND rr.INSURANCE_COMPANY = #{insuranceCompany}
  880. </if>
  881. ),
  882. 0
  883. ) * 100,
  884. 1
  885. ), '999.0'
  886. )) || '%' AS insuranceRatio,
  887. -- 新增覆盖率coverage:当前公司区县量 / 该区县所有保险公司总量
  888. LTRIM(TO_CHAR(
  889. ROUND(
  890. COUNT(DISTINCT r.PROJECT_ID)
  891. / NULLIF(
  892. (SELECT COUNT(DISTINCT rr2.PROJECT_ID)
  893. FROM GW_HUIYI.ATT_PROJECT_INSURANCE_RECORD rr2
  894. INNER JOIN GW_HUIYI.ATT_PROJECT_INSURANCE pp2 ON rr2.PROJECT_ID = pp2.ID
  895. WHERE rr2.YEAR = TO_CHAR(SYSDATE, 'yyyy')
  896. AND rr2.DATA_STAT = '0'
  897. AND pp2.DATA_STAT = '0'
  898. AND rr2.INSURANCE_COMPANY IS NOT NULL
  899. AND pp2.BUSINESS_TYPE = '1'
  900. -- 只限定和外层同一区县,不限制保险公司
  901. AND pp2.AD_CODE = p.AD_CODE
  902. ),
  903. 0
  904. ) * 100,
  905. 1
  906. ), '999.0'
  907. )) || '%' AS coverage,
  908. ROUND(SUM(r.PREMIUM_AMOUNT), 1) AS premiumSum
  909. FROM GW_HUIYI.ATT_PROJECT_INSURANCE_RECORD r
  910. JOIN GW_HUIYI.ATT_PROJECT_INSURANCE p
  911. ON r.PROJECT_ID = p.ID
  912. LEFT JOIN BIS_INSP_ORG distOrg
  913. ON p.AD_CODE = distOrg.AD_CODE
  914. WHERE 1=1
  915. AND r.YEAR = TO_CHAR(SYSDATE, 'yyyy')
  916. AND r.DATA_STAT = '0'
  917. AND p.DATA_STAT = '0'
  918. AND r.INSURANCE_COMPANY IS NOT NULL
  919. -- 主表新增业务类型过滤
  920. AND p.BUSINESS_TYPE = '1'
  921. <if test="adCode != null and adCode != ''">
  922. AND p.AD_CODE LIKE #{adCode} || '%'
  923. </if>
  924. <if test="insuranceCompany != null and insuranceCompany != ''">
  925. AND r.INSURANCE_COMPANY = #{insuranceCompany}
  926. </if>
  927. GROUP BY p.AD_CODE, distOrg.ORG_NM
  928. ORDER BY insuredTotal DESC
  929. </select>
  930. <select id="serviceCountyDetail" resultType="cn.com.goldenwater.dcproj.dto.AttProjectInsuranceRecordViewDto">
  931. SELECT
  932. p.AD_CODE AS adCode,
  933. distOrg.ORG_NM AS county,
  934. COUNT(DISTINCT r.PROJECT_ID) AS insuredTotal,
  935. -- 市维度占比:区县项目 / 全市所有机构项目
  936. LTRIM(TO_CHAR(
  937. ROUND(
  938. COUNT(DISTINCT r.PROJECT_ID)
  939. / NULLIF(
  940. (SELECT COUNT(DISTINCT rr.PROJECT_ID)
  941. FROM GW_HUIYI.ATT_PROJECT_INSURANCE_RECORD rr
  942. INNER JOIN GW_HUIYI.ATT_PROJECT_INSURANCE pp ON rr.PROJECT_ID = pp.ID
  943. WHERE rr.YEAR = TO_CHAR(SYSDATE, 'yyyy')
  944. AND rr.DATA_STAT = '0'
  945. AND pp.DATA_STAT = '0'
  946. AND rr.PREVENTION_SERVICE_UNIT IS NOT NULL
  947. AND pp.BUSINESS_TYPE = '1'
  948. <if test="adCode != null and adCode != ''">
  949. AND pp.AD_CODE LIKE #{adCode} || '%'
  950. </if>
  951. <if test="preventionServiceUnit != null and preventionServiceUnit != ''">
  952. AND rr.PREVENTION_SERVICE_UNIT = #{preventionServiceUnit}
  953. </if>
  954. ),
  955. 0
  956. ) * 100,
  957. 1
  958. ), '999.0'
  959. )) || '%' AS insuranceRatio,
  960. -- 新增覆盖率:当前机构区县项目 / 该区县全部机构总项目
  961. LTRIM(TO_CHAR(
  962. ROUND(
  963. COUNT(DISTINCT r.PROJECT_ID)
  964. / NULLIF(
  965. (SELECT COUNT(DISTINCT rr2.PROJECT_ID)
  966. FROM GW_HUIYI.ATT_PROJECT_INSURANCE_RECORD rr2
  967. INNER JOIN GW_HUIYI.ATT_PROJECT_INSURANCE pp2 ON rr2.PROJECT_ID = pp2.ID
  968. WHERE rr2.YEAR = TO_CHAR(SYSDATE, 'yyyy')
  969. AND rr2.DATA_STAT = '0'
  970. AND pp2.DATA_STAT = '0'
  971. AND rr2.PREVENTION_SERVICE_UNIT IS NOT NULL
  972. AND pp2.BUSINESS_TYPE = '1'
  973. -- 关键:限定和外层同一区县,不限制服务单位
  974. AND pp2.AD_CODE = p.AD_CODE
  975. ),
  976. 0
  977. ) * 100,
  978. 1
  979. ), '999.0'
  980. )) || '%' AS coverage,
  981. ROUND(SUM(r.PREVENTION_SERVICE_FEE), 1) AS premiumSum
  982. FROM GW_HUIYI.ATT_PROJECT_INSURANCE_RECORD r
  983. JOIN GW_HUIYI.ATT_PROJECT_INSURANCE p
  984. ON r.PROJECT_ID = p.ID
  985. LEFT JOIN BIS_INSP_ORG distOrg
  986. ON p.AD_CODE = distOrg.AD_CODE
  987. WHERE 1=1
  988. AND r.YEAR = TO_CHAR(SYSDATE, 'yyyy')
  989. AND r.DATA_STAT = '0'
  990. AND p.DATA_STAT = '0'
  991. AND r.PREVENTION_SERVICE_UNIT IS NOT NULL
  992. -- 主查询增加业务类型过滤
  993. AND p.BUSINESS_TYPE = '1'
  994. <if test="adCode != null and adCode != ''">
  995. AND p.AD_CODE LIKE #{adCode} || '%'
  996. </if>
  997. <if test="preventionServiceUnit != null and preventionServiceUnit != ''">
  998. AND r.PREVENTION_SERVICE_UNIT = #{preventionServiceUnit}
  999. </if>
  1000. GROUP BY p.AD_CODE, distOrg.ORG_NM
  1001. ORDER BY insuredTotal DESC
  1002. </select>
  1003. <select id="serviceCountyDetailAll" resultType="cn.com.goldenwater.dcproj.dto.AttProjectInsuranceRecordViewDto">
  1004. WITH
  1005. -- CTE1:当前地市下每个区县全部基础工程(覆盖率分母),增加业务类型过滤
  1006. county_all_project AS (
  1007. SELECT
  1008. t.AD_CODE AS districtAdCode,
  1009. COUNT(DISTINCT t.ID) AS totalProjectCnt
  1010. FROM GW_HUIYI.ATT_PROJECT_INSURANCE t
  1011. WHERE t.DATA_STAT = '0'
  1012. AND t.BUSINESS_TYPE = '1'
  1013. <if test="adCode != null and adCode != ''">
  1014. AND t.AD_CODE LIKE #{adCode} || '%'
  1015. </if>
  1016. GROUP BY t.AD_CODE
  1017. ),
  1018. -- CTE2:当前地市各区县投保数据(承保数、保费),增加业务类型过滤
  1019. county_insured AS (
  1020. SELECT
  1021. p.AD_CODE AS districtAdCode,
  1022. COUNT(DISTINCT r.PROJECT_ID) AS insuredCnt,
  1023. ROUND(SUM(r.PREMIUM_AMOUNT), 1) AS premiumTotal
  1024. FROM GW_HUIYI.ATT_PROJECT_INSURANCE_RECORD r
  1025. JOIN GW_HUIYI.ATT_PROJECT_INSURANCE p ON r.PROJECT_ID = p.ID
  1026. WHERE r.YEAR = TO_CHAR(SYSDATE, 'yyyy')
  1027. AND r.DATA_STAT = '0'
  1028. AND p.DATA_STAT = '0'
  1029. AND r.INSURANCE_COMPANY IS NOT NULL
  1030. AND p.BUSINESS_TYPE = '1'
  1031. <if test="adCode != null and adCode != ''">
  1032. AND p.AD_CODE LIKE #{adCode} || '%'
  1033. </if>
  1034. GROUP BY p.AD_CODE
  1035. ),
  1036. -- CTE3:全市所有区县总承保数(占比分母)
  1037. city_total_insured AS (
  1038. SELECT SUM(NVL(ci.insuredCnt, 0)) AS totalInsuredNum
  1039. FROM county_insured ci
  1040. )
  1041. SELECT
  1042. ci.districtAdCode AS adCode,
  1043. org.ORG_NM AS county,
  1044. NVL(ci.insuredCnt, 0) AS insuredTotal,
  1045. -- 占比:区县承保 / 全市总承保
  1046. LTRIM(TO_CHAR(
  1047. ROUND(NVL(ci.insuredCnt,0) / NULLIF(ct.totalInsuredNum, 0) * 100, 1),
  1048. '999.0'
  1049. )) || '%' AS insuranceRatio,
  1050. NVL(ci.premiumTotal, 0) AS premiumSum,
  1051. -- 覆盖率:区县承保 / 该区县全部工程
  1052. LTRIM(TO_CHAR(
  1053. ROUND(NVL(ci.insuredCnt,0) / NULLIF(cap.totalProjectCnt, 0) * 100, 1),
  1054. '999.0'
  1055. )) || '%' AS coverage
  1056. FROM county_insured ci
  1057. LEFT JOIN county_all_project cap ON ci.districtAdCode = cap.districtAdCode
  1058. LEFT JOIN BIS_INSP_ORG org ON ci.districtAdCode = org.AD_CODE
  1059. CROSS JOIN city_total_insured ct
  1060. ORDER BY insuredTotal DESC
  1061. </select>
  1062. </mapper>