| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182 |
- <?xml version="1.0" encoding="UTF-8" ?>
- <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
- <mapper namespace="com.jzg.console.businessReport.mapper.RiskBusinessReportMapper">
- <!-- 订单先过滤、费用按订单聚合,避免费用一对多放大订单数和金额。筛选列不套函数以便使用索引。 -->
- <sql id="base">
- WITH orders AS (
- SELECT o.id,o.quote_no,o.agreement_id,o.company_id,o.company_name,o.product_id,o.product_name,
- o.order_status,o.entry_status,o.audit_status,o.real_quote_user_id,o.order_source,
- o.docking_person,o.docking_person_phone,o.create_time,o.signing_time,o.parent_id,o.system_code,ioci.license_no,
- COALESCE(ifo.total_premium, 0) total_premium,quoteCountNum
- COALESCE(ifo.jq_premium, 0) jq_premium,
- COALESCE(ifo.sy_premium, 0) sy_premium,
- COALESCE(ifo.jy_premium, 0) jy_premium
- FROM ins_orders o LEFT JOIN ins_orders_car_info ioci ON o.id = ioci.order_no
- left join ins_fee_orders ifo on o.id = ifo.order_no
- WHERE o.is_delete = 0
- <if test="q != null and q.companyId != null and q.companyId != ''">AND o.company_id = #{q.companyId}</if>
- <if test="q != null and q.createTimeBegin != null and q.createTimeBegin != ''">AND o.create_time >= #{q.createTimeBegin}</if>
- <if test="q != null and q.createTimeEnd != null and q.createTimeEnd != ''">AND o.create_time < #{q.createTimeEnd}</if>
- <if test="q != null and q.signTimeBegin != null and q.signTimeBegin != ''">AND o.signing_time >= #{q.signTimeBegin}</if>
- <if test="q != null and q.signTimeEnd != null and q.signTimeEnd != ''">AND o.signing_time < #{q.signTimeEnd}</if>
- <if test="q != null and q.orderStatus != null and q.orderStatus.size() > 0">
- AND o.order_status IN <foreach collection="q.orderStatus" item="v" open="(" separator="," close=")">#{v}</foreach>
- </if>
- <if test="q != null and q.orderSource != null and q.orderSource.size() > 0">
- AND o.order_source IN <foreach collection="q.orderSource" item="v" open="(" separator="," close=")">#{v}</foreach>
- </if>
- <if test="q != null and q.productType != null and q.productType.size() > 0">
- AND o.product_id IN <foreach collection="q.productType" item="v" open="(" separator="," close=")">#{v}</foreach>
- </if>
- <if test="q != null and q.riskTypes != null and q.riskTypes.size() > 0">
- AND o.product_id IN <foreach collection="q.riskTypes" item="v" open="(" separator="," close=")">#{v}</foreach>
- </if>
- <if test="q != null and q.salesmanName != null and q.salesmanName != ''">AND o.real_quote_user_id LIKE CONCAT('%',#{q.salesmanName},'%')</if>
- <if test="q != null and q.salesmanPhone != null and q.salesmanPhone != ''">AND o.real_quote_user_id = #{q.salesmanPhone}</if>
- <if test="q != null and q.manageName != null and q.manageName != ''">AND o.docking_person LIKE CONCAT('%',#{q.manageName},'%')</if>
- <if test="q != null and q.managePhone != null and q.managePhone != ''">AND o.docking_person_phone = #{q.managePhone}</if>
- <if test="q != null and q.orderTypes != null and q.orderTypes.size() > 0">
- AND o.entry_status IN <foreach collection="q.orderTypes" item="v" open="(" separator="," close=")">#{v}</foreach>
- </if>
- <if test="q != null and q.systemCode != null and q.systemCode != ''">AND o.system_code =
- #{q.systemCode}
- </if>
- ),
- order_with_partner AS (
- SELECT
- o.*,
- a.partner_company_id,
- pc.name_simple partnerCompanyName
- FROM orders o
- LEFT JOIN ptl_agreement a
- ON a.id = o.agreement_id AND a.is_delete = 0
- LEFT JOIN esm_ins_company pc
- ON pc.id = a.partner_company_id AND pc.is_delete = 0
- ),
- group_base AS (
- SELECT
- system_code,
- company_id,
- company_name,
- COALESCE(partner_company_id, '') AS partner_company_id,
- COALESCE(partnerCompanyName, '') AS partnerCompanyName,
- product_id,
- product_name,
- COUNT(id) quoteCountNum,
- COUNT(DISTINCT COALESCE(quote_no, id)) quoteOrderNum,
- SUM(CASE WHEN order_status = 5 THEN 1 ELSE 0 END) underwriteOrderNum,
- SUM(CASE WHEN order_status = 5 THEN total_premium ELSE 0 END) underwritePremium
- FROM order_with_partner
- GROUP BY
- company_id,
- company_name,
- partner_company_id,
- partnerCompanyName,
- product_id,
- product_name
- )
- </sql>
- <sql id="orderBy">
- <choose>
- <when test="q != null and q.orderType == 'sumOrderNum desc'">ORDER BY sum_order_num DESC</when>
- <when test="q != null and q.orderType == 'sumPremium asc'">ORDER BY sum_premium ASC</when>
- <when test="q != null and q.orderType == 'sumPremium desc'">ORDER BY sum_premium DESC</when>
- <otherwise>ORDER BY o.company_id, o.id</otherwise>
- </choose>
- </sql>
- <select id="page" resultType="com.jzg.commons.entity.report.dto.ReportRiskDataManageDto"><include refid="base"/>
- SELECT
- company_id AS companyId,
- company_name AS companyName,
- partner_company_id AS partnerCompanyId,
- partnerCompanyName,
- product_name AS riskName,
- quoteCountNum,
- quoteOrderNum,
- underwriteOrderNum,
- underwritePremium,
- CASE
- WHEN channel_total_order = 0 THEN 0
- ELSE ROUND(underwriteOrderNum * 100.0 / channel_total_order, 2)
- END penetrationRate,
- ROUND(underwriteOrderNum * 100.0 / quoteCountNum, 2) underwriteRate
- FROM (
- SELECT
- *,
- SUM(quoteCountNum) OVER (PARTITION BY company_id, partner_company_id) AS channel_total_order
- FROM group_base
- ) t
- where 1=1
- <if test="q != null and q.partnerCompanyIds != null and q.partnerCompanyIds.size() > 0">
- AND partner_company_id IN
- <foreach collection="q.partnerCompanyIds" item="v" open="(" separator="," close=")">#{v}</foreach>
- </if>
- ORDER BY
- companyId,
- product_id
- </select>
- <select id="export" resultType="com.jzg.commons.entity.report.dto.ReportRiskDataManageDto"><include refid="base"/>
- SELECT
- company_id AS companyId,
- company_name AS companyName,
- partner_company_id AS partnerCompanyId,
- partnerCompanyName,
- product_name AS riskName,
- quoteCountNum,
- quoteOrderNum,
- underwriteOrderNum,
- underwritePremium,
- CASE
- WHEN channel_total_order = 0 THEN 0
- ELSE ROUND(underwriteOrderNum * 100.0 / channel_total_order, 2)
- END penetrationRate,
- ROUND(underwriteOrderNum * 100.0 / quoteCountNum, 2) underwriteRate
- FROM (
- SELECT
- *,
- SUM(quoteCountNum) OVER (PARTITION BY company_id, partner_company_id) AS channel_total_order
- FROM group_base
- ) t
- where 1=1
- <if test="q != null and q.partnerCompanyIds != null and q.partnerCompanyIds.size() > 0">
- AND partner_company_id IN
- <foreach collection="q.partnerCompanyIds" item="v" open="(" separator="," close=")">#{v}</foreach>
- </if>
- ORDER BY
- companyId,
- product_id
- </select>
- <sql id="detailSelect"><![CDATA[
- SELECT o.license_no AS licenseNo,o.company_id companyId,o.company_name companyName,COALESCE(a.partner_company_id,'') partnerCompanyId,
- COALESCE(pc.name_simple,'') partnerCompanyName,o.id orderNo,o.product_name riskName,
- CASE WHEN o.entry_status = 1 THEN '车险录入' WHEN o.entry_status = 2 THEN '代客录单' ELSE '外部订单' END orderTypeName,COALESCE(o.total_premium,0) sumPremium,o.create_time createTime,o.signing_time recordTime,
- CASE o.order_status
- WHEN 0 THEN '订单已提交'
- WHEN 1 THEN '待核保'
- WHEN 2 THEN '核保中'
- WHEN 3 THEN '人工处理'
- WHEN 4 THEN '待缴费'
- WHEN 5 THEN '已承保'
- WHEN 6 THEN '报价失败'
- WHEN 7 THEN '核保失败'
- WHEN 8 THEN '订单关闭'
- ELSE '未知状态'
- END AS orderStatusName
- FROM orders o LEFT JOIN ptl_agreement a ON a.id=o.agreement_id AND a.is_delete=0
- LEFT JOIN esm_ins_company pc ON pc.id=a.partner_company_id AND pc.is_delete=0
- ]]>
- where 1=1
- <if test="q != null and q.partnerCompanyIds != null and q.partnerCompanyIds.size() > 0">
- AND a.partner_company_id IN
- <foreach collection="q.partnerCompanyIds" item="v" open="(" separator="," close=")">#{v}</foreach>
- </if>
- </sql>
- <select id="detailPage" resultType="com.jzg.commons.entity.report.dto.ReportRiskDataManageDetailDto"><include refid="base"/><include refid="detailSelect"/> ORDER BY o.create_time DESC,o.id</select>
- <select id="detailExport" resultType="com.jzg.commons.entity.report.dto.ReportRiskDataManageDetailDto"><include refid="base"/><include refid="detailSelect"/> ORDER BY o.create_time DESC,o.id</select>
- </mapper>
|