| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082 |
- <?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="cn.com.goldenwater.dcproj.dao.AttProjectInsuranceDao">
- <resultMap type="cn.com.goldenwater.dcproj.model.AttProjectInsurance" id="attProjectInsuranceResultMap">
- <result property="businessType" column="BUSINESS_TYPE"/>
- <result property="adName" column="AD_NAME"/>
- <result property="adCode" column="AD_CODE"/>
- <result property="id" column="ID"/>
- <result property="name" column="NAME"/>
- <result property="type" column="TYPE"/>
- <result property="loc" column="LOC"/>
- <result property="investment" column="INVESTMENT"/>
- <result property="plannedDuration" column="PLANNED_DURATION"/>
- <result property="startDate" column="START_DATE"/>
- <result property="status" column="STATUS"/>
- <result property="managementUnit" column="MANAGEMENT_UNIT"/>
- <result property="constructors" column="CONSTRUCTORS"/>
- <result property="contactPerson" column="CONTACT_PERSON"/>
- <result property="centerX" column="CENTER_X"/>
- <result property="centerY" column="CENTER_Y"/>
- <result property="gdX" column="GD_X"/>
- <result property="gdY" column="GD_Y"/>
- <result property="intm" column="INTM"/>
- <result property="uptm" column="UPTM"/>
- <result property="dataStat" column="DATA_STAT"/>
- </resultMap>
- <sql id="table_columns">
- BUSINESS_TYPE
- ,
- AD_NAME,
- AD_CODE,
- ID,
- NAME,
- TYPE,
- LOC,
- INVESTMENT,
- PLANNED_DURATION,
- START_DATE,
- STATUS,
- MANAGEMENT_UNIT,
- CONSTRUCTORS,
- CONTACT_PERSON,
- CENTER_X,
- CENTER_Y,
- GD_X,
- GD_Y,
- INTM,
- UPTM,
- DATA_STAT
- </sql>
- <sql id="entity_properties">
- #{businessType},
- #{adName},
- #{adCode},
- #{id},
- #{name},
- #{type},
- #{loc},
- #{investment},
- #{plannedDuration},
- #{startDate},
- #{status},
- #{managementUnit},
- #{constructors},
- #{contactPerson},
- #{centerX},
- #{centerY},
- #{gdX},
- #{gdY},
- #{intm},
- #{uptm},
- #{dataStat}
- </sql>
- <sql id="page_where">
- <trim prefix="where" prefixOverrides="and | or ">
- <if test="adName != null and adName != ''">and AD_NAME = #{adName}</if>
- <if test="businessType != null and businessType != ''">and BUSINESS_TYPE = #{businessType}</if>
- <if test="adCode != null and adCode != ''">and AD_CODE = #{adCode}</if>
- <if test="id != null and id != ''">and ID = #{id}</if>
- <if test="name != null and name != ''">and NAME like '%${name}%'</if>
- <if test="type != null and type != ''">and TYPE = #{type}</if>
- <if test="loc != null and loc != ''">and LOC = #{loc}</if>
- <if test="investment != null and investment != ''">and INVESTMENT = #{investment}</if>
- <if test="plannedDuration != null and plannedDuration != ''">and PLANNED_DURATION = #{plannedDuration}</if>
- <if test="startDate != null">and START_DATE = #{startDate}</if>
- <if test="status != null and status != ''">and STATUS = #{status}</if>
- <if test="managementUnit != null and managementUnit != ''">and MANAGEMENT_UNIT = #{managementUnit}</if>
- <if test="constructors != null and constructors != ''">and CONSTRUCTORS = #{constructors}</if>
- <if test="contactPerson != null and contactPerson != ''">and CONTACT_PERSON = #{contactPerson}</if>
- <if test="centerX != null and centerX != ''">and CENTER_X = #{centerX}</if>
- <if test="centerY != null and centerY != ''">and CENTER_Y = #{centerY}</if>
- <if test="gdX != null and gdX != ''">and GD_X = #{gdX}</if>
- <if test="gdY != null and gdY != ''">and GD_Y = #{gdY}</if>
- <if test="intm != null">and INTM = #{intm}</if>
- <if test="uptm != null">and UPTM = #{uptm}</if>
- and DATA_STAT='0'
- </trim>
- </sql>
- <select id="get" resultMap="attProjectInsuranceResultMap" parameterType="String">
- select
- <include refid="table_columns"/>
- from ATT_PROJECT_INSURANCE where ID = #{id}
- </select>
- <select id="getBy" resultMap="attProjectInsuranceResultMap">
- select
- <include refid="table_columns"/>
- from ATT_PROJECT_INSURANCE
- <include refid="page_where"/>
- </select>
- <select id="findAll" resultMap="attProjectInsuranceResultMap">
- select
- <include refid="table_columns"/>
- from ATT_PROJECT_INSURANCE
- </select>
- <select id="findList" resultMap="attProjectInsuranceResultMap">
- select
- <include refid="table_columns"/>
- from ATT_PROJECT_INSURANCE
- <include refid="page_where"/>
- </select>
- <select id="selectCount" resultType="int">
- select count(ID) from ATT_PROJECT_INSURANCE
- <include refid="page_where"/>
- </select>
- <insert id="insert" parameterType="cn.com.goldenwater.dcproj.model.AttProjectInsurance">
- insert into ATT_PROJECT_INSURANCE(
- <include refid="table_columns"/>
- )
- values (
- <include refid="entity_properties"/>
- )
- </insert>
- <delete id="delete" parameterType="java.lang.String">
- update ATT_PROJECT_INSURANCE
- set DATA_STAT='9'
- where ID = #{id}
- </delete>
- <delete id="deleteBy" parameterType="cn.com.goldenwater.dcproj.model.AttProjectInsurance">
- update ATT_PROJECT_INSURANCE set DATA_STAT='9'
- <include refid="page_where"/>
- </delete>
- <update id="deleteInFlag" parameterType="java.lang.String">
- update ATT_PROJECT_INSURANCE
- set DATA_STAT = '9'
- where ID = #{id}
- </update>
- <update id="update" parameterType="cn.com.goldenwater.dcproj.model.AttProjectInsurance">
- update ATT_PROJECT_INSURANCE
- <trim prefix="set" suffixOverrides=",">
- <if test="adName != null and adName != ''">AD_NAME = #{adName},</if>
- <if test="adCode != null and adCode != ''">AD_CODE = #{adCode},</if>
- <if test="id != null and id != ''">ID = #{id},</if>
- <if test="name != null and name != ''">NAME = #{name},</if>
- <if test="type != null and type != ''">TYPE = #{type},</if>
- <if test="loc != null and loc != ''">LOC = #{loc},</if>
- <if test="investment != null and investment != ''">INVESTMENT = #{investment},</if>
- <if test="plannedDuration != null and plannedDuration != ''">PLANNED_DURATION = #{plannedDuration},</if>
- <if test="startDate != null">START_DATE = #{startDate},</if>
- <if test="status != null and status != ''">STATUS = #{status},</if>
- <if test="managementUnit != null and managementUnit != ''">MANAGEMENT_UNIT = #{managementUnit},</if>
- <if test="constructors != null and constructors != ''">CONSTRUCTORS = #{constructors},</if>
- <if test="contactPerson != null and contactPerson != ''">CONTACT_PERSON = #{contactPerson},</if>
- <if test="centerX != null and centerX != ''">CENTER_X = #{centerX},</if>
- <if test="centerY != null and centerY != ''">CENTER_Y = #{centerY},</if>
- <if test="gdX != null and gdX != ''">GD_X = #{gdX},</if>
- <if test="gdY != null and gdY != ''">GD_Y = #{gdY},</if>
- <if test="intm != null">INTM = #{intm},</if>
- <if test="uptm != null">UPTM = #{uptm},</if>
- <if test="dataStat != null and dataStat != ''">DATA_STAT = #{dataStat},</if>
- </trim>
- <where>ID = #{id}</where>
- </update>
- <update id="updateBy" parameterType="cn.com.goldenwater.dcproj.model.AttProjectInsurance">
- update ATT_PROJECT_INSURANCE
- <trim prefix="set" suffixOverrides=",">
- <if test="adName != null and adName != ''">AD_NAME = #{adName},</if>
- <if test="adCode != null and adCode != ''">AD_CODE = #{adCode},</if>
- <if test="id != null and id != ''">ID = #{id},</if>
- <if test="name != null and name != ''">NAME = #{name},</if>
- <if test="type != null and type != ''">TYPE = #{type},</if>
- <if test="loc != null and loc != ''">LOC = #{loc},</if>
- <if test="investment != null and investment != ''">INVESTMENT = #{investment},</if>
- <if test="plannedDuration != null and plannedDuration != ''">PLANNED_DURATION = #{plannedDuration},</if>
- <if test="startDate != null">START_DATE = #{startDate},</if>
- <if test="status != null and status != ''">STATUS = #{status},</if>
- <if test="managementUnit != null and managementUnit != ''">MANAGEMENT_UNIT = #{managementUnit},</if>
- <if test="constructors != null and constructors != ''">CONSTRUCTORS = #{constructors},</if>
- <if test="contactPerson != null and contactPerson != ''">CONTACT_PERSON = #{contactPerson},</if>
- <if test="centerX != null and centerX != ''">CENTER_X = #{centerX},</if>
- <if test="centerY != null and centerY != ''">CENTER_Y = #{centerY},</if>
- <if test="gdX != null and gdX != ''">GD_X = #{gdX},</if>
- <if test="gdY != null and gdY != ''">GD_Y = #{gdY},</if>
- <if test="intm != null">INTM = #{intm},</if>
- <if test="uptm != null">UPTM = #{uptm},</if>
- <if test="dataStat != null and dataStat != ''">DATA_STAT = #{dataStat},</if>
- </trim>
- <include refid="page_where"/>
- </update>
- <!-- 其他自定义SQL -->
- <select id="getByRgstrId" resultMap="attProjectInsuranceResultMap">
- SELECT A.*
- FROM ATT_PROJECT_INSURANCE A
- JOIN BIS_INSP_ALL_OBJ B ON A.ID = B.CODE
- JOIN BIS_INSP_ANZE_RGSTR ON B.OBJ_ID = C.OBJ_ID
- where C.ID = #{id}
- </select>
- <select id="listOfUnderwriting" resultType="cn.com.goldenwater.dcproj.dto.AttAnzeUnderwritingDto">
- SELECT
- A.ID, A.AD_CODE, A.AD_NAME, A.NAME, A.TYPE, A.LOC, A.INVESTMENT,
- A.PLANNED_DURATION, A.START_DATE, A.STATUS, A.MANAGEMENT_UNIT,
- A.CONTACT_PERSON, A.CENTER_X, A.CENTER_Y, A.GD_X, A.GD_Y,
- B.ID AS recordId, B.POLICYHOLDER, B.POLICYHOLDER_PHONE, B.INSURANCE_COMPANY,
- B.INSURANCE_CONTACT_PERSON, B.INSURANCE_CONTACT_PHONE, B.PREMIUM_AMOUNT, B.PREVENTION_SERVICE_FEE,
- B.INSURANCE_DATE, B.PREVENTION_SERVICE_UNIT, B.SERVICE_UNIT_CONTACT_PERSON,
- B.SERVICE_UNIT_CONTACT_PHONE, B.INTM, B.UPTM, B.YEAR
- FROM ATT_PROJECT_INSURANCE A
- JOIN ATT_PROJECT_INSURANCE_RECORD B ON A.ID = B.PROJECT_ID
- WHERE B.YEAR = #{year}
- AND A.BUSINESS_TYPE = '1'
- <if test="id != null and id != ''">and A.ID = #{id}</if>
- <if test="adCode != null and adCode != ''">and A.AD_CODE like '${adCode}%'</if>
- <if test="adName != null and adName != ''">and A.AD_NAME like '%${adName}%'</if>
- <if test="name != null and name != ''">and A.NAME like '%${name}%'</if>
- <if test="type != null and type != ''">and A.TYPE = #{type}</if>
- <if test="insuranceCompany != null and insuranceCompany != ''">and B.INSURANCE_COMPANY like '%${insuranceCompany}%'</if>
- <if test="preventionServiceUnit != null and preventionServiceUnit != ''">and B.PREVENTION_SERVICE_UNIT like '%${preventionServiceUnit}%'</if>
- <if test="investment != null and investment != ''">and A.INVESTMENT = #{investment}</if>
- <if test="plannedDuration != null and plannedDuration != ''">and A.PLANNED_DURATION = #{plannedDuration}</if>
- <if test="startDate != null">and A.START_DATE = #{startDate}</if>
- <if test="state != null and state != ''">and B.STATE = #{state}</if>
- <if test="managementUnit != null and managementUnit != ''">and A.MANAGEMENT_UNIT = #{managementUnit}</if>
- <if test="contactPerson != null and contactPerson != ''">and A.CONTACT_PERSON = #{contactPerson}</if>
- and A.DATA_STAT='0'
- and B.DATA_STAT='0'
- </select>
- <select id="cityRecordView" resultType="cn.com.goldenwater.dcproj.dto.AttProjectInsuranceRecordViewDto">
- WITH city_total_proj AS (
- -- 各地市总有效工程数量,新增4位adCode,增加业务类型过滤
- SELECT
- SUBSTR(t."AD_CODE",1,4) AS "AD_CODE",
- CASE SUBSTR(t."AD_CODE",1,4)
- WHEN '3501' THEN '福州市'
- WHEN '3502' THEN '厦门市'
- WHEN '3503' THEN '莆田市'
- WHEN '3504' THEN '三明市'
- WHEN '3505' THEN '泉州市'
- WHEN '3506' THEN '漳州市'
- WHEN '3507' THEN '南平市'
- WHEN '3508' THEN '龙岩市'
- WHEN '3509' THEN '宁德市'
- END AS "CITY_NAME",
- COUNT(DISTINCT t."ID") AS "TOTAL_PROJECT_CNT"
- FROM "ATT_PROJECT_INSURANCE" t
- WHERE t."DATA_STAT" = '0'
- AND t.BUSINESS_TYPE = '1'
- AND SUBSTR(t."AD_CODE",1,4) IN ('3501','3502','3503','3504','3505','3506','3507','3508','3509')
- GROUP BY SUBSTR(t."AD_CODE",1,4)
- ),
- city_insured_proj AS (
- -- 各地市当年投保工程、保费合计,新增AD_CODE用于关联,增加业务类型过滤
- SELECT
- SUBSTR(p."AD_CODE",1,4) AS "AD_CODE",
- CASE SUBSTR(p."AD_CODE",1,4)
- WHEN '3501' THEN '福州市'
- WHEN '3502' THEN '厦门市'
- WHEN '3503' THEN '莆田市'
- WHEN '3504' THEN '三明市'
- WHEN '3505' THEN '泉州市'
- WHEN '3506' THEN '漳州市'
- WHEN '3507' THEN '南平市'
- WHEN '3508' THEN '龙岩市'
- WHEN '3509' THEN '宁德市'
- END AS "CITY_NAME",
- COUNT(DISTINCT r."PROJECT_ID") AS "INSURED_CNT",
- ROUND(SUM(r."PREMIUM_AMOUNT"), 1) AS "PREMIUM_SUM"
- FROM "ATT_PROJECT_INSURANCE_RECORD" r
- INNER JOIN "ATT_PROJECT_INSURANCE" p ON r."PROJECT_ID" = p."ID"
- WHERE r."YEAR" = TO_CHAR(SYSDATE, 'YYYY')
- AND r."DATA_STAT" = '0'
- AND p."DATA_STAT" = '0'
- AND p.BUSINESS_TYPE = '1'
- AND SUBSTR(p."AD_CODE",1,4) IN ('3501','3502','3503','3504','3505','3506','3507','3508','3509')
- AND r."INSURANCE_COMPANY" IS NOT NULL
- GROUP BY SUBSTR(p."AD_CODE",1,4)
- )
- SELECT
- t."AD_CODE" AS adCode,
- t."CITY_NAME" AS city,
- t."TOTAL_PROJECT_CNT" AS projectTotal,
- NVL(i."INSURED_CNT", 0) AS insuredTotal,
- LTRIM(TO_CHAR(ROUND(NVL(i."INSURED_CNT",0) / NULLIF(t."TOTAL_PROJECT_CNT",0) * 100, 1), '999.0')) || '%' AS insuranceRatio,
- NVL(i."PREMIUM_SUM", 0) AS premiumSum
- FROM city_total_proj t
- LEFT JOIN city_insured_proj i
- ON t."AD_CODE" = i."AD_CODE"
- ORDER BY
- CASE t."CITY_NAME"
- WHEN '福州市' THEN 1
- WHEN '厦门市' THEN 2
- WHEN '泉州市' THEN 3
- WHEN '漳州市' THEN 4
- WHEN '南平市' THEN 5
- WHEN '宁德市' THEN 6
- WHEN '龙岩市' THEN 7
- WHEN '三明市' THEN 8
- WHEN '莆田市' THEN 9
- END
- </select>
- <select id="projectView" resultType="cn.com.goldenwater.dcproj.dto.AttProjectInsuranceRecordViewDto">
- WITH all_type_total AS (
- -- 全局分母:所有TYPE不为空且BUSINESS_TYPE='1'的工程总数量
- SELECT COUNT(DISTINCT t."ID") AS global_total
- FROM "ATT_PROJECT_INSURANCE" t
- WHERE t."DATA_STAT" = '0'
- AND t."TYPE" IS NOT NULL
- AND t.BUSINESS_TYPE = '1'
- ),
- type_total AS (
- -- 各类型自身总工程(TYPE非空 + BUSINESS_TYPE='1')
- SELECT
- t."TYPE" AS project_type,
- COUNT(DISTINCT t."ID") AS type_self_total
- FROM "ATT_PROJECT_INSURANCE" t
- WHERE t."DATA_STAT" = '0'
- AND t."TYPE" IS NOT NULL
- AND t.BUSINESS_TYPE = '1'
- GROUP BY t."TYPE"
- ),
- type_insured AS (
- -- 各类型投保数量,仅TYPE非空、BUSINESS_TYPE='1'
- SELECT
- p."TYPE" AS project_type,
- COUNT(DISTINCT r."PROJECT_ID") AS insured_cnt
- FROM "ATT_PROJECT_INSURANCE_RECORD" r
- INNER JOIN "ATT_PROJECT_INSURANCE" p ON r."PROJECT_ID" = p."ID"
- WHERE r."YEAR" = TO_CHAR(SYSDATE, 'YYYY')
- AND r."DATA_STAT" = '0'
- AND p."DATA_STAT" = '0'
- AND p."TYPE" IS NOT NULL
- AND p.BUSINESS_TYPE = '1'
- GROUP BY p."TYPE"
- )
- SELECT
- t.project_type AS projectType,
- t.type_self_total AS projectTotal,
- NVL(i.insured_cnt, 0) AS insuredTotal,
- -- 投保率:当前类型投保数 / 全局所有TYPE非空工程总数
- LTRIM(
- TO_CHAR(
- ROUND(NVL(i.insured_cnt,0) / NULLIF(g.global_total, 0) * 100, 1),
- '999.0'
- )
- ) || '%' AS insuranceRatio
- FROM type_total t
- CROSS JOIN all_type_total g
- LEFT JOIN type_insured i
- ON t.project_type = i.project_type
- ORDER BY t.type_self_total DESC
- </select>
- <select id="insuranceCompanyView" resultType="cn.com.goldenwater.dcproj.dto.AttProjectInsuranceRecordViewDto">
- WITH all_insured AS (
- -- 所有当年有效投保工程总数量(分母,仅保险机构不为空、业务类型1)
- SELECT COUNT(DISTINCT r.PROJECT_ID) AS total_all_insured
- FROM "ATT_PROJECT_INSURANCE_RECORD" r
- JOIN "ATT_PROJECT_INSURANCE" p ON r.PROJECT_ID = p.ID
- WHERE r."YEAR" = TO_CHAR(SYSDATE, 'YYYY')
- AND r.DATA_STAT = '0'
- AND p.DATA_STAT = '0'
- AND r.INSURANCE_COMPANY IS NOT NULL
- -- 新增业务类型过滤
- AND p.BUSINESS_TYPE = '1'
- ),
- company_data AS (
- -- 每家保险机构承保工程数量,仅业务类型BUSINESS_TYPE='1'
- SELECT
- r.INSURANCE_COMPANY AS insurance_company,
- COUNT(DISTINCT r.PROJECT_ID) AS company_insured_cnt
- FROM "ATT_PROJECT_INSURANCE_RECORD" r
- JOIN "ATT_PROJECT_INSURANCE" p ON r.PROJECT_ID = p.ID
- WHERE r."YEAR" = TO_CHAR(SYSDATE, 'YYYY')
- AND r.DATA_STAT = '0'
- AND p.DATA_STAT = '0'
- AND r.INSURANCE_COMPANY IS NOT NULL
- -- 新增业务类型过滤
- AND p.BUSINESS_TYPE = '1'
- GROUP BY r.INSURANCE_COMPANY
- )
- SELECT
- c.insurance_company AS insuranceCompany,
- c.company_insured_cnt AS insuredTotal,
- a.total_all_insured AS projectTotal,
- LTRIM(TO_CHAR(ROUND(c.company_insured_cnt / NULLIF(a.total_all_insured, 0) * 100, 1), '999.0')) || '%' AS insuranceRatio
- FROM company_data c, all_insured a
- ORDER BY c.company_insured_cnt DESC
- </select>
- <select id="preventionServiceUnitView" resultType="cn.com.goldenwater.dcproj.dto.AttProjectInsuranceRecordViewDto">
- WITH all_insured AS (
- SELECT COUNT(DISTINCT r."PROJECT_ID") AS total_all_proj
- FROM "ATT_PROJECT_INSURANCE_RECORD" r
- INNER JOIN "ATT_PROJECT_INSURANCE" p ON r."PROJECT_ID" = p."ID"
- WHERE r."YEAR" = TO_CHAR(SYSDATE, 'YYYY')
- AND r."DATA_STAT" = '0'
- AND p.DATA_STAT = '0'
- AND p.BUSINESS_TYPE = '1'
- ),
- unit_group AS (
- SELECT
- service_unit,
- COUNT(DISTINCT "PROJECT_ID") AS unit_proj_cnt
- FROM (
- SELECT
- CASE
- WHEN r."PREVENTION_SERVICE_UNIT" IS NULL THEN '无预防服务单位'
- ELSE r."PREVENTION_SERVICE_UNIT"
- END AS service_unit,
- r."PROJECT_ID"
- FROM "ATT_PROJECT_INSURANCE_RECORD" r
- INNER JOIN "ATT_PROJECT_INSURANCE" p ON r."PROJECT_ID" = p."ID"
- WHERE r."YEAR" = TO_CHAR(SYSDATE, 'YYYY')
- AND r."DATA_STAT" = '0'
- AND p.DATA_STAT = '0'
- AND p.BUSINESS_TYPE = '1'
- ) t
- GROUP BY service_unit
- )
- SELECT
- g.service_unit AS preventionServiceUnit,
- g.unit_proj_cnt AS projectTotal,
- a.total_all_proj AS insuredTotal,
- DECODE(a.total_all_proj,
- 0, '0.0%',
- TRUNC(g.unit_proj_cnt * 1000 / a.total_all_proj) / 10 || '%'
- ) AS insuranceRatio
- FROM unit_group g
- CROSS JOIN all_insured a
- ORDER BY g.unit_proj_cnt DESC
- </select>
- <select id="handView" resultType="cn.com.goldenwater.dcproj.dto.AttProjectInsuranceRecordViewDto">
- WITH raw_data AS (
- SELECT
- r."INSURANCE_COMPANY",
- r."PROJECT_ID",
- r."PREMIUM_AMOUNT",
- SUBSTR(p."AD_CODE",1,4) AS city_code
- FROM "ATT_PROJECT_INSURANCE_RECORD" r
- INNER JOIN "ATT_PROJECT_INSURANCE" p ON r."PROJECT_ID" = p."ID"
- WHERE r."YEAR" = TO_CHAR(SYSDATE, 'YYYY')
- AND r."DATA_STAT" = '0'
- AND p."DATA_STAT" = '0'
- AND r."INSURANCE_COMPANY" IS NOT NULL
- -- 新增业务类型过滤条件
- AND p.BUSINESS_TYPE = '1'
- ),
- agg_all AS (
- SELECT
- COUNT(DISTINCT "INSURANCE_COMPANY") AS company_total,
- COUNT(DISTINCT "PROJECT_ID") AS project_total,
- SUM("PREMIUM_AMOUNT") AS total_premium,
- COUNT(DISTINCT CASE WHEN city_code IN ('3501','3502','3503','3504','3505','3506','3507','3508','3509') THEN city_code END) AS covered_city_num
- FROM raw_data
- )
- SELECT
- company_total AS companyCount,
- project_total AS insuredTotal,
- total_premium AS premiumSum,
- covered_city_num || '/9' AS coveredCityNum
- FROM agg_all
- </select>
- <select id="numberRanking" resultType="cn.com.goldenwater.dcproj.dto.AttProjectInsuranceRecordViewDto">
- SELECT
- r."INSURANCE_COMPANY" AS insuranceCompany,
- COUNT(DISTINCT r."PROJECT_ID") AS insuredTotal
- FROM "ATT_PROJECT_INSURANCE_RECORD" r
- INNER JOIN "ATT_PROJECT_INSURANCE" p
- ON r."PROJECT_ID" = p."ID"
- WHERE r."YEAR" = TO_CHAR(SYSDATE, 'YYYY')
- AND r."DATA_STAT" = '0'
- AND p."DATA_STAT" = '0'
- AND r."INSURANCE_COMPANY" IS NOT NULL
- -- 新增:仅统计主表业务类型为1的工程
- AND p.BUSINESS_TYPE = '1'
- GROUP BY r."INSURANCE_COMPANY"
- ORDER BY COUNT(DISTINCT r."PROJECT_ID") DESC
- </select>
- <select id="insuranceCompanyDetail" resultType="cn.com.goldenwater.dcproj.dto.AttProjectInsuranceRecordViewDto">
- WITH year_total AS (
- -- 当年全省总承保工程,关联主表过滤BUSINESS_TYPE='1'
- SELECT COUNT(DISTINCT r."PROJECT_ID") AS total_proj
- FROM "ATT_PROJECT_INSURANCE_RECORD" r
- INNER JOIN "ATT_PROJECT_INSURANCE" p ON r."PROJECT_ID" = p."ID"
- WHERE r."YEAR" = TO_CHAR(SYSDATE, 'YYYY')
- AND r."DATA_STAT" = '0'
- AND p."DATA_STAT" = '0'
- AND r."INSURANCE_COMPANY" IS NOT NULL
- AND p.BUSINESS_TYPE = '1'
- ),
- company_stat AS (
- SELECT
- r."INSURANCE_COMPANY",
- COUNT(DISTINCT r."PROJECT_ID") AS company_proj_cnt,
- SUM(r."PREMIUM_AMOUNT") AS company_premium
- FROM "ATT_PROJECT_INSURANCE_RECORD" r
- INNER JOIN "ATT_PROJECT_INSURANCE" p ON r."PROJECT_ID" = p."ID"
- WHERE r."YEAR" = TO_CHAR(SYSDATE, 'YYYY')
- AND r."DATA_STAT" = '0'
- AND p."DATA_STAT" = '0'
- AND r."INSURANCE_COMPANY" IS NOT NULL
- AND p.BUSINESS_TYPE = '1'
- GROUP BY r."INSURANCE_COMPANY"
- )
- SELECT
- c."INSURANCE_COMPANY" AS insuranceCompany,
- c.company_proj_cnt AS insuredTotal,
- LTRIM(TO_CHAR(ROUND(c.company_proj_cnt / NULLIF(t.total_proj,0) * 100,1), '999.0')) || '%' AS insuranceRatio,
- c.company_premium AS premiumSum
- FROM company_stat c, year_total t
- ORDER BY c.company_proj_cnt DESC
- </select>
- <select id="handServiceView" resultType="cn.com.goldenwater.dcproj.dto.AttProjectInsuranceRecordViewDto">
- WITH rec_all AS (
- -- 当年全部投保记录,增加业务类型BUSINESS_TYPE='1'过滤
- SELECT
- r."PROJECT_ID",
- r."PREVENTION_SERVICE_UNIT",
- SUBSTR(p."AD_CODE",1,4) AS city_code
- FROM "ATT_PROJECT_INSURANCE_RECORD" r
- INNER JOIN "ATT_PROJECT_INSURANCE" p
- ON r."PROJECT_ID" = p."ID"
- WHERE r."YEAR" = TO_CHAR(SYSDATE, 'YYYY')
- AND r."DATA_STAT" = '0'
- AND p."DATA_STAT" = '0'
- AND p.BUSINESS_TYPE = '1'
- ),
- agg_base AS (
- SELECT
- -- 全部当年总工程(分母,空/非空服务单位都算)
- COUNT(DISTINCT "PROJECT_ID") AS total_all_proj,
- -- 有服务单位的工程总数
- COUNT(DISTINCT CASE WHEN "PREVENTION_SERVICE_UNIT" IS NOT NULL THEN "PROJECT_ID" END) AS service_proj_cnt,
- -- 去重有效服务机构数量
- COUNT(DISTINCT CASE WHEN "PREVENTION_SERVICE_UNIT" IS NOT NULL THEN "PREVENTION_SERVICE_UNIT" END) AS service_org_total,
- -- 已覆盖地市编码数量
- COUNT(DISTINCT CASE
- WHEN city_code IN ('3501','3502','3503','3504','3505','3506','3507','3508','3509')
- THEN city_code
- END) AS covered_city
- FROM rec_all
- )
- SELECT
- service_org_total AS serviceCount,
- service_proj_cnt AS insuredTotal,
- -- 服务覆盖率 保留1位小数
- LTRIM(TO_CHAR(ROUND(service_proj_cnt / NULLIF(total_all_proj, 0) * 100, 1), '999.0')) || '%' AS insuranceRatio,
- covered_city || '/9' AS coveredCityNum
- FROM agg_base
- </select>
- <select id="numberServiceRanking" resultType="cn.com.goldenwater.dcproj.dto.AttProjectInsuranceRecordViewDto">
- SELECT
- r."PREVENTION_SERVICE_UNIT" AS preventionServiceUnit,
- COUNT(DISTINCT r."PROJECT_ID") AS insuredTotal
- FROM "ATT_PROJECT_INSURANCE_RECORD" r
- INNER JOIN "ATT_PROJECT_INSURANCE" p
- ON r."PROJECT_ID" = p."ID"
- WHERE r."YEAR" = TO_CHAR(SYSDATE, 'YYYY')
- AND r."DATA_STAT" = '0'
- AND p."DATA_STAT" = '0'
- AND r."PREVENTION_SERVICE_UNIT" IS NOT NULL
- -- 新增业务类型过滤
- AND p.BUSINESS_TYPE = '1'
- GROUP BY r."PREVENTION_SERVICE_UNIT"
- ORDER BY COUNT(DISTINCT r."PROJECT_ID") DESC
- </select>
- <select id="serviceUnitDetail" resultType="cn.com.goldenwater.dcproj.dto.AttProjectInsuranceRecordViewDto">
- WITH year_total AS (
- -- 当年全部工程总数(占比分母,关联主表过滤BUSINESS_TYPE='1')
- SELECT COUNT(DISTINCT r."PROJECT_ID") AS total_proj
- FROM "ATT_PROJECT_INSURANCE_RECORD" r
- INNER JOIN "ATT_PROJECT_INSURANCE" p ON r."PROJECT_ID" = p."ID"
- WHERE r."YEAR" = TO_CHAR(SYSDATE, 'YYYY')
- AND r."DATA_STAT" = '0'
- AND p."DATA_STAT" = '0'
- AND p.BUSINESS_TYPE = '1'
- ),
- org_stat AS (
- SELECT
- r."PREVENTION_SERVICE_UNIT" AS service_unit,
- COUNT(DISTINCT r."PROJECT_ID") AS unit_proj_cnt
- FROM "ATT_PROJECT_INSURANCE_RECORD" r
- INNER JOIN "ATT_PROJECT_INSURANCE" p ON r."PROJECT_ID" = p."ID"
- WHERE r."YEAR" = TO_CHAR(SYSDATE, 'YYYY')
- AND r."DATA_STAT" = '0'
- AND p."DATA_STAT" = '0'
- AND r."PREVENTION_SERVICE_UNIT" IS NOT NULL
- AND p.BUSINESS_TYPE = '1'
- GROUP BY r."PREVENTION_SERVICE_UNIT"
- )
- SELECT
- o.service_unit AS preventionServiceUnit,
- o.unit_proj_cnt AS insuredTotal,
- LTRIM(TO_CHAR(ROUND(o.unit_proj_cnt / NULLIF(t.total_proj, 0) * 100, 1), '999.0')) || '%' AS insuranceRatio
- FROM org_stat o, year_total t
- ORDER BY o.unit_proj_cnt DESC
- </select>
- <select id="cityCovered" resultType="cn.com.goldenwater.dcproj.dto.AttProjectInsuranceRecordViewDto">
- SELECT
- r.INSURANCE_COMPANY AS insuranceCompany,
- COUNT(DISTINCT r.PROJECT_ID) AS insuredTotal,
- ROUND(SUM(r.PREMIUM_AMOUNT)/1,2) AS premiumSum,
- 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
- FROM GW_HUIYI.ATT_PROJECT_INSURANCE_RECORD r
- JOIN GW_HUIYI.ATT_PROJECT_INSURANCE p ON r.PROJECT_ID=p.ID
- WHERE r.YEAR=TO_CHAR(SYSDATE,'yyyy')
- AND r.DATA_STAT='0'
- AND p.DATA_STAT='0'
- -- 新增业务类型过滤条件
- AND p.BUSINESS_TYPE='1'
- <if test="insuranceCompany != null and insuranceCompany != ''">
- and r.INSURANCE_COMPANY = #{insuranceCompany}
- </if>
- <if test="adCode != null and adCode != ''">
- and p.AD_CODE like '${adCode}%'
- </if>
- GROUP BY r.INSURANCE_COMPANY
- </select>
- <select id="cityCoveredDetail" resultType="cn.com.goldenwater.dcproj.dto.AttProjectInsuranceRecordViewDto">
- SELECT
- SUBSTR(p.AD_CODE,1,4) AS adCode,
- CASE SUBSTR(p.AD_CODE,1,4)
- WHEN '3501' THEN '福州市'
- WHEN '3502' THEN '厦门市'
- WHEN '3503' THEN '莆田市'
- WHEN '3504' THEN '三明市'
- WHEN '3505' THEN '泉州市'
- WHEN '3506' THEN '漳州市'
- WHEN '3507' THEN '南平市'
- WHEN '3508' THEN '龙岩市'
- WHEN '3509' THEN '宁德市'
- END AS city,
- COUNT(DISTINCT r.PROJECT_ID) AS insuredTotal,
- -- 原占比:当前地市该保险公司项目 / 全省该保险公司总项目
- LTRIM(TO_CHAR(
- ROUND(
- COUNT(DISTINCT r.PROJECT_ID)
- / NULLIF(
- (SELECT COUNT(DISTINCT rr.PROJECT_ID)
- FROM GW_HUIYI.ATT_PROJECT_INSURANCE_RECORD rr
- INNER JOIN GW_HUIYI.ATT_PROJECT_INSURANCE pp ON rr.PROJECT_ID = pp.ID
- WHERE rr.YEAR = TO_CHAR(SYSDATE, 'yyyy')
- AND rr.DATA_STAT = '0'
- AND pp.DATA_STAT = '0'
- AND rr.INSURANCE_COMPANY IS NOT NULL
- AND pp.BUSINESS_TYPE = '1'
- <if test="insuranceCompany != null and insuranceCompany != ''">
- AND rr.INSURANCE_COMPANY = #{insuranceCompany}
- </if>
- ),
- 0
- ) * 100,
- 1
- ), '999.0'
- )) || '%' AS insuranceRatio,
- -- 新增覆盖率 coverage:当前地市该保险公司项目 / 该地全市所有保险公司总项目
- LTRIM(TO_CHAR(
- ROUND(
- COUNT(DISTINCT r.PROJECT_ID)
- / NULLIF(
- (SELECT COUNT(DISTINCT rr2.PROJECT_ID)
- FROM GW_HUIYI.ATT_PROJECT_INSURANCE_RECORD rr2
- INNER JOIN GW_HUIYI.ATT_PROJECT_INSURANCE pp2 ON rr2.PROJECT_ID = pp2.ID
- WHERE rr2.YEAR = TO_CHAR(SYSDATE, 'yyyy')
- AND rr2.DATA_STAT = '0'
- AND pp2.DATA_STAT = '0'
- AND rr2.INSURANCE_COMPANY IS NOT NULL
- AND pp2.BUSINESS_TYPE = '1'
- -- 绑定外层当前地市4位编码,不限制保险公司
- AND SUBSTR(pp2.AD_CODE,1,4) = SUBSTR(p.AD_CODE,1,4)
- ),
- 0
- ) * 100,
- 1
- ), '999.0'
- )) || '%' AS coverage,
- ROUND(SUM(r.PREMIUM_AMOUNT),1) AS premiumSum
- FROM GW_HUIYI.ATT_PROJECT_INSURANCE_RECORD r
- JOIN GW_HUIYI.ATT_PROJECT_INSURANCE p ON r.PROJECT_ID=p.ID
- WHERE r.YEAR=TO_CHAR(SYSDATE,'yyyy')
- AND r.DATA_STAT='0'
- AND p.DATA_STAT='0'
- AND r.INSURANCE_COMPANY IS NOT NULL
- -- 主查询新增业务类型过滤
- AND p.BUSINESS_TYPE = '1'
- <if test="insuranceCompany != null and insuranceCompany != ''">
- AND r.INSURANCE_COMPANY = #{insuranceCompany}
- </if>
- GROUP BY SUBSTR(p.AD_CODE,1,4)
- ORDER BY COUNT(DISTINCT r.PROJECT_ID) DESC
- </select>
- <select id="countyCovered" resultType="cn.com.goldenwater.dcproj.dto.AttProjectInsuranceRecordViewDto">
- SELECT
- CASE SUBSTR(p.AD_CODE,1,4)
- WHEN '3501' THEN '福州市'
- WHEN '3502' THEN '厦门市'
- WHEN '3503' THEN '莆田市'
- WHEN '3504' THEN '三明市'
- WHEN '3505' THEN '泉州市'
- WHEN '3506' THEN '漳州市'
- WHEN '3507' THEN '南平市'
- WHEN '3508' THEN '龙岩市'
- WHEN '3509' THEN '宁德市'
- END AS city,
- r.INSURANCE_COMPANY AS insuranceCompany,
- COUNT(DISTINCT r.PROJECT_ID) AS insuredTotal,
- TO_CHAR(ROUND(SUM(r.PREMIUM_AMOUNT),2)) AS premiumSum
- FROM GW_HUIYI.ATT_PROJECT_INSURANCE_RECORD r
- JOIN GW_HUIYI.ATT_PROJECT_INSURANCE p ON r.PROJECT_ID = p.ID
- WHERE r.YEAR = TO_CHAR(SYSDATE,'yyyy')
- AND r.DATA_STAT = '0'
- AND p.DATA_STAT = '0'
- AND r.INSURANCE_COMPANY IS NOT NULL
- -- 新增业务类型过滤
- AND p.BUSINESS_TYPE = '1'
- <if test="insuranceCompany != null and insuranceCompany != ''">
- AND r.INSURANCE_COMPANY = #{insuranceCompany}
- </if>
- <if test="adCode != null and adCode != ''">
- AND SUBSTR(p.AD_CODE,1,4) LIKE CONCAT(SUBSTR(#{adCode},1,4),'%')
- </if>
- GROUP BY SUBSTR(p.AD_CODE,1,4), r.INSURANCE_COMPANY
- </select>
- <select id="serviceCityCovered" resultType="cn.com.goldenwater.dcproj.dto.AttProjectInsuranceRecordViewDto">
- SELECT
- r.PREVENTION_SERVICE_UNIT AS preventionServiceUnit,
- COUNT(DISTINCT r.PROJECT_ID) AS insuredTotal,
- ROUND(SUM(r.PREVENTION_SERVICE_FEE)/1,2) AS premiumSum,
- 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
- FROM GW_HUIYI.ATT_PROJECT_INSURANCE_RECORD r
- JOIN GW_HUIYI.ATT_PROJECT_INSURANCE p ON r.PROJECT_ID=p.ID
- WHERE r.YEAR=TO_CHAR(SYSDATE,'yyyy')
- AND r.DATA_STAT='0'
- AND p.DATA_STAT='0'
- AND r.PREVENTION_SERVICE_UNIT IS NOT NULL
- -- 新增业务类型过滤条件
- AND p.BUSINESS_TYPE='1'
- <if test="preventionServiceUnit != null and preventionServiceUnit != ''">
- and r.PREVENTION_SERVICE_UNIT = #{preventionServiceUnit}
- </if>
- <if test="adCode != null and adCode != ''">
- and p.AD_CODE like '${adCode}%'
- </if>
- GROUP BY r.PREVENTION_SERVICE_UNIT
- </select>
- <select id="serviceCityCoveredDetail" resultType="cn.com.goldenwater.dcproj.dto.AttProjectInsuranceRecordViewDto">
- SELECT
- SUBSTR(p.AD_CODE,1,4) AS adCode,
- CASE SUBSTR(p.AD_CODE,1,4)
- WHEN '3501' THEN '福州市'
- WHEN '3502' THEN '厦门市'
- WHEN '3503' THEN '莆田市'
- WHEN '3504' THEN '三明市'
- WHEN '3505' THEN '泉州市'
- WHEN '3506' THEN '漳州市'
- WHEN '3507' THEN '南平市'
- WHEN '3508' THEN '龙岩市'
- WHEN '3509' THEN '宁德市'
- END AS city,
- COUNT(DISTINCT r.PROJECT_ID) AS insuredTotal,
- -- 原有占比:当前地市该服务机构项目 / 全省该服务机构总项目
- LTRIM(TO_CHAR(
- ROUND(
- COUNT(DISTINCT r.PROJECT_ID)
- / NULLIF(
- (SELECT COUNT(DISTINCT rr.PROJECT_ID)
- FROM GW_HUIYI.ATT_PROJECT_INSURANCE_RECORD rr
- INNER JOIN GW_HUIYI.ATT_PROJECT_INSURANCE pp ON rr.PROJECT_ID = pp.ID
- WHERE rr.YEAR = TO_CHAR(SYSDATE, 'yyyy')
- AND rr.DATA_STAT = '0'
- AND pp.DATA_STAT = '0'
- AND rr.PREVENTION_SERVICE_UNIT IS NOT NULL
- AND pp.BUSINESS_TYPE = '1'
- <if test="preventionServiceUnit != null and preventionServiceUnit != ''">
- AND rr.PREVENTION_SERVICE_UNIT = #{preventionServiceUnit}
- </if>
- ),
- 0
- ) * 100,
- 1
- ), '999.0'
- )) || '%' AS insuranceRatio,
- -- 新增覆盖率 coverage:当前地市该机构项目 ÷ 该地全市所有服务机构总项目
- LTRIM(TO_CHAR(
- ROUND(
- COUNT(DISTINCT r.PROJECT_ID)
- / NULLIF(
- (SELECT COUNT(DISTINCT rr2.PROJECT_ID)
- FROM GW_HUIYI.ATT_PROJECT_INSURANCE_RECORD rr2
- INNER JOIN GW_HUIYI.ATT_PROJECT_INSURANCE pp2 ON rr2.PROJECT_ID = pp2.ID
- WHERE rr2.YEAR = TO_CHAR(SYSDATE, 'yyyy')
- AND rr2.DATA_STAT = '0'
- AND pp2.DATA_STAT = '0'
- AND rr2.PREVENTION_SERVICE_UNIT IS NOT NULL
- AND pp2.BUSINESS_TYPE = '1'
- -- 匹配外层当前地市4位编码,不限制服务单位
- AND SUBSTR(pp2.AD_CODE,1,4) = SUBSTR(p.AD_CODE,1,4)
- ),
- 0
- ) * 100,
- 1
- ), '999.0'
- )) || '%' AS coverage,
- ROUND(SUM(r.PREVENTION_SERVICE_FEE),1) AS premiumSum
- FROM GW_HUIYI.ATT_PROJECT_INSURANCE_RECORD r
- JOIN GW_HUIYI.ATT_PROJECT_INSURANCE p ON r.PROJECT_ID=p.ID
- WHERE r.YEAR=TO_CHAR(SYSDATE,'yyyy')
- AND r.DATA_STAT='0'
- AND p.DATA_STAT='0'
- AND r.PREVENTION_SERVICE_UNIT IS NOT NULL
- -- 外层主查询新增业务类型过滤
- AND p.BUSINESS_TYPE = '1'
- <if test="preventionServiceUnit != null and preventionServiceUnit != ''">
- AND r.PREVENTION_SERVICE_UNIT = #{preventionServiceUnit}
- </if>
- GROUP BY SUBSTR(p.AD_CODE,1,4)
- ORDER BY COUNT(DISTINCT r.PROJECT_ID) DESC
- </select>
- <select id="serviceCountyCovered" resultType="cn.com.goldenwater.dcproj.dto.AttProjectInsuranceRecordViewDto">
- SELECT
- CASE SUBSTR(p.AD_CODE,1,4)
- WHEN '3501' THEN '福州市'
- WHEN '3502' THEN '厦门市'
- WHEN '3503' THEN '莆田市'
- WHEN '3504' THEN '三明市'
- WHEN '3505' THEN '泉州市'
- WHEN '3506' THEN '漳州市'
- WHEN '3507' THEN '南平市'
- WHEN '3508' THEN '龙岩市'
- WHEN '3509' THEN '宁德市'
- END AS city,
- r.PREVENTION_SERVICE_UNIT AS preventionServiceUnit,
- COUNT(DISTINCT r.PROJECT_ID) AS insuredTotal,
- TO_CHAR(ROUND(SUM(r.PREVENTION_SERVICE_FEE),2)) AS premiumSum
- FROM GW_HUIYI.ATT_PROJECT_INSURANCE_RECORD r
- JOIN GW_HUIYI.ATT_PROJECT_INSURANCE p ON r.PROJECT_ID = p.ID
- WHERE r.YEAR = TO_CHAR(SYSDATE,'yyyy')
- AND r.DATA_STAT = '0'
- AND p.DATA_STAT = '0'
- AND r.PREVENTION_SERVICE_UNIT IS NOT NULL
- -- 新增业务类型过滤条件
- AND p.BUSINESS_TYPE = '1'
- <if test="preventionServiceUnit != null and preventionServiceUnit != ''">
- AND r.PREVENTION_SERVICE_UNIT = #{preventionServiceUnit}
- </if>
- <if test="adCode != null and adCode != ''">
- AND SUBSTR(p.AD_CODE,1,4) LIKE CONCAT(SUBSTR(#{adCode},1,4),'%')
- </if>
- GROUP BY SUBSTR(p.AD_CODE,1,4), r.PREVENTION_SERVICE_UNIT
- </select>
- <select id="insuranceCompanyCountyDetail" resultType="cn.com.goldenwater.dcproj.dto.AttProjectInsuranceRecordViewDto">
- SELECT
- p.AD_CODE AS adCode,
- distOrg.ORG_NM AS county,
- COUNT(DISTINCT r.PROJECT_ID) AS insuredTotal,
- -- 原占比:当前保险公司区县项目 / 全市该保险公司总项目
- LTRIM(TO_CHAR(
- ROUND(
- COUNT(DISTINCT r.PROJECT_ID)
- / NULLIF(
- (SELECT COUNT(DISTINCT rr.PROJECT_ID)
- FROM GW_HUIYI.ATT_PROJECT_INSURANCE_RECORD rr
- INNER JOIN GW_HUIYI.ATT_PROJECT_INSURANCE pp ON rr.PROJECT_ID = pp.ID
- WHERE rr.YEAR = TO_CHAR(SYSDATE, 'yyyy')
- AND rr.DATA_STAT = '0'
- AND pp.DATA_STAT = '0'
- AND rr.INSURANCE_COMPANY IS NOT NULL
- AND pp.BUSINESS_TYPE = '1'
- <if test="adCode != null and adCode != ''">
- AND pp.AD_CODE LIKE #{adCode} || '%'
- </if>
- <if test="insuranceCompany != null and insuranceCompany != ''">
- AND rr.INSURANCE_COMPANY = #{insuranceCompany}
- </if>
- ),
- 0
- ) * 100,
- 1
- ), '999.0'
- )) || '%' AS insuranceRatio,
- -- 新增覆盖率coverage:当前公司区县量 / 该区县所有保险公司总量
- LTRIM(TO_CHAR(
- ROUND(
- COUNT(DISTINCT r.PROJECT_ID)
- / NULLIF(
- (SELECT COUNT(DISTINCT rr2.PROJECT_ID)
- FROM GW_HUIYI.ATT_PROJECT_INSURANCE_RECORD rr2
- INNER JOIN GW_HUIYI.ATT_PROJECT_INSURANCE pp2 ON rr2.PROJECT_ID = pp2.ID
- WHERE rr2.YEAR = TO_CHAR(SYSDATE, 'yyyy')
- AND rr2.DATA_STAT = '0'
- AND pp2.DATA_STAT = '0'
- AND rr2.INSURANCE_COMPANY IS NOT NULL
- AND pp2.BUSINESS_TYPE = '1'
- -- 只限定和外层同一区县,不限制保险公司
- AND pp2.AD_CODE = p.AD_CODE
- ),
- 0
- ) * 100,
- 1
- ), '999.0'
- )) || '%' AS coverage,
- ROUND(SUM(r.PREMIUM_AMOUNT), 1) AS premiumSum
- FROM GW_HUIYI.ATT_PROJECT_INSURANCE_RECORD r
- JOIN GW_HUIYI.ATT_PROJECT_INSURANCE p
- ON r.PROJECT_ID = p.ID
- LEFT JOIN BIS_INSP_ORG distOrg
- ON p.AD_CODE = distOrg.AD_CODE
- WHERE 1=1
- AND r.YEAR = TO_CHAR(SYSDATE, 'yyyy')
- AND r.DATA_STAT = '0'
- AND p.DATA_STAT = '0'
- AND r.INSURANCE_COMPANY IS NOT NULL
- -- 主表新增业务类型过滤
- AND p.BUSINESS_TYPE = '1'
- <if test="adCode != null and adCode != ''">
- AND p.AD_CODE LIKE #{adCode} || '%'
- </if>
- <if test="insuranceCompany != null and insuranceCompany != ''">
- AND r.INSURANCE_COMPANY = #{insuranceCompany}
- </if>
- GROUP BY p.AD_CODE, distOrg.ORG_NM
- ORDER BY insuredTotal DESC
- </select>
- <select id="serviceCountyDetail" resultType="cn.com.goldenwater.dcproj.dto.AttProjectInsuranceRecordViewDto">
- SELECT
- p.AD_CODE AS adCode,
- distOrg.ORG_NM AS county,
- COUNT(DISTINCT r.PROJECT_ID) AS insuredTotal,
- -- 市维度占比:区县项目 / 全市所有机构项目
- LTRIM(TO_CHAR(
- ROUND(
- COUNT(DISTINCT r.PROJECT_ID)
- / NULLIF(
- (SELECT COUNT(DISTINCT rr.PROJECT_ID)
- FROM GW_HUIYI.ATT_PROJECT_INSURANCE_RECORD rr
- INNER JOIN GW_HUIYI.ATT_PROJECT_INSURANCE pp ON rr.PROJECT_ID = pp.ID
- WHERE rr.YEAR = TO_CHAR(SYSDATE, 'yyyy')
- AND rr.DATA_STAT = '0'
- AND pp.DATA_STAT = '0'
- AND rr.PREVENTION_SERVICE_UNIT IS NOT NULL
- AND pp.BUSINESS_TYPE = '1'
- <if test="adCode != null and adCode != ''">
- AND pp.AD_CODE LIKE #{adCode} || '%'
- </if>
- <if test="preventionServiceUnit != null and preventionServiceUnit != ''">
- AND rr.PREVENTION_SERVICE_UNIT = #{preventionServiceUnit}
- </if>
- ),
- 0
- ) * 100,
- 1
- ), '999.0'
- )) || '%' AS insuranceRatio,
- -- 新增覆盖率:当前机构区县项目 / 该区县全部机构总项目
- LTRIM(TO_CHAR(
- ROUND(
- COUNT(DISTINCT r.PROJECT_ID)
- / NULLIF(
- (SELECT COUNT(DISTINCT rr2.PROJECT_ID)
- FROM GW_HUIYI.ATT_PROJECT_INSURANCE_RECORD rr2
- INNER JOIN GW_HUIYI.ATT_PROJECT_INSURANCE pp2 ON rr2.PROJECT_ID = pp2.ID
- WHERE rr2.YEAR = TO_CHAR(SYSDATE, 'yyyy')
- AND rr2.DATA_STAT = '0'
- AND pp2.DATA_STAT = '0'
- AND rr2.PREVENTION_SERVICE_UNIT IS NOT NULL
- AND pp2.BUSINESS_TYPE = '1'
- -- 关键:限定和外层同一区县,不限制服务单位
- AND pp2.AD_CODE = p.AD_CODE
- ),
- 0
- ) * 100,
- 1
- ), '999.0'
- )) || '%' AS coverage,
- ROUND(SUM(r.PREVENTION_SERVICE_FEE), 1) AS premiumSum
- FROM GW_HUIYI.ATT_PROJECT_INSURANCE_RECORD r
- JOIN GW_HUIYI.ATT_PROJECT_INSURANCE p
- ON r.PROJECT_ID = p.ID
- LEFT JOIN BIS_INSP_ORG distOrg
- ON p.AD_CODE = distOrg.AD_CODE
- WHERE 1=1
- AND r.YEAR = TO_CHAR(SYSDATE, 'yyyy')
- AND r.DATA_STAT = '0'
- AND p.DATA_STAT = '0'
- AND r.PREVENTION_SERVICE_UNIT IS NOT NULL
- -- 主查询增加业务类型过滤
- AND p.BUSINESS_TYPE = '1'
- <if test="adCode != null and adCode != ''">
- AND p.AD_CODE LIKE #{adCode} || '%'
- </if>
- <if test="preventionServiceUnit != null and preventionServiceUnit != ''">
- AND r.PREVENTION_SERVICE_UNIT = #{preventionServiceUnit}
- </if>
- GROUP BY p.AD_CODE, distOrg.ORG_NM
- ORDER BY insuredTotal DESC
- </select>
- <select id="serviceCountyDetailAll" resultType="cn.com.goldenwater.dcproj.dto.AttProjectInsuranceRecordViewDto">
- WITH
- -- CTE1:当前地市下每个区县全部基础工程(覆盖率分母),增加业务类型过滤
- county_all_project AS (
- SELECT
- t.AD_CODE AS districtAdCode,
- COUNT(DISTINCT t.ID) AS totalProjectCnt
- FROM GW_HUIYI.ATT_PROJECT_INSURANCE t
- WHERE t.DATA_STAT = '0'
- AND t.BUSINESS_TYPE = '1'
- <if test="adCode != null and adCode != ''">
- AND t.AD_CODE LIKE #{adCode} || '%'
- </if>
- GROUP BY t.AD_CODE
- ),
- -- CTE2:当前地市各区县投保数据(承保数、保费),增加业务类型过滤
- county_insured AS (
- SELECT
- p.AD_CODE AS districtAdCode,
- COUNT(DISTINCT r.PROJECT_ID) AS insuredCnt,
- ROUND(SUM(r.PREMIUM_AMOUNT), 1) AS premiumTotal
- FROM GW_HUIYI.ATT_PROJECT_INSURANCE_RECORD r
- JOIN GW_HUIYI.ATT_PROJECT_INSURANCE p ON r.PROJECT_ID = p.ID
- WHERE r.YEAR = TO_CHAR(SYSDATE, 'yyyy')
- AND r.DATA_STAT = '0'
- AND p.DATA_STAT = '0'
- AND r.INSURANCE_COMPANY IS NOT NULL
- AND p.BUSINESS_TYPE = '1'
- <if test="adCode != null and adCode != ''">
- AND p.AD_CODE LIKE #{adCode} || '%'
- </if>
- GROUP BY p.AD_CODE
- ),
- -- CTE3:全市所有区县总承保数(占比分母)
- city_total_insured AS (
- SELECT SUM(NVL(ci.insuredCnt, 0)) AS totalInsuredNum
- FROM county_insured ci
- )
- SELECT
- ci.districtAdCode AS adCode,
- org.ORG_NM AS county,
- NVL(ci.insuredCnt, 0) AS insuredTotal,
- -- 占比:区县承保 / 全市总承保
- LTRIM(TO_CHAR(
- ROUND(NVL(ci.insuredCnt,0) / NULLIF(ct.totalInsuredNum, 0) * 100, 1),
- '999.0'
- )) || '%' AS insuranceRatio,
- NVL(ci.premiumTotal, 0) AS premiumSum,
- -- 覆盖率:区县承保 / 该区县全部工程
- LTRIM(TO_CHAR(
- ROUND(NVL(ci.insuredCnt,0) / NULLIF(cap.totalProjectCnt, 0) * 100, 1),
- '999.0'
- )) || '%' AS coverage
- FROM county_insured ci
- LEFT JOIN county_all_project cap ON ci.districtAdCode = cap.districtAdCode
- LEFT JOIN BIS_INSP_ORG org ON ci.districtAdCode = org.AD_CODE
- CROSS JOIN city_total_insured ct
- ORDER BY insuredTotal DESC
- </select>
- </mapper>
|