RiskBusinessReportMapper.xml 9.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182
  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="com.jzg.console.businessReport.mapper.RiskBusinessReportMapper">
  4. <!-- 订单先过滤、费用按订单聚合,避免费用一对多放大订单数和金额。筛选列不套函数以便使用索引。 -->
  5. <sql id="base">
  6. WITH orders AS (
  7. SELECT o.id,o.quote_no,o.agreement_id,o.company_id,o.company_name,o.product_id,o.product_name,
  8. o.order_status,o.entry_status,o.audit_status,o.real_quote_user_id,o.order_source,
  9. o.docking_person,o.docking_person_phone,o.create_time,o.signing_time,o.parent_id,o.system_code,ioci.license_no,
  10. COALESCE(ifo.total_premium, 0) total_premium,quoteCountNum
  11. COALESCE(ifo.jq_premium, 0) jq_premium,
  12. COALESCE(ifo.sy_premium, 0) sy_premium,
  13. COALESCE(ifo.jy_premium, 0) jy_premium
  14. FROM ins_orders o LEFT JOIN ins_orders_car_info ioci ON o.id = ioci.order_no
  15. left join ins_fee_orders ifo on o.id = ifo.order_no
  16. WHERE o.is_delete = 0
  17. <if test="q != null and q.companyId != null and q.companyId != ''">AND o.company_id = #{q.companyId}</if>
  18. <if test="q != null and q.createTimeBegin != null and q.createTimeBegin != ''">AND o.create_time &gt;= #{q.createTimeBegin}</if>
  19. <if test="q != null and q.createTimeEnd != null and q.createTimeEnd != ''">AND o.create_time &lt; #{q.createTimeEnd}</if>
  20. <if test="q != null and q.signTimeBegin != null and q.signTimeBegin != ''">AND o.signing_time &gt;= #{q.signTimeBegin}</if>
  21. <if test="q != null and q.signTimeEnd != null and q.signTimeEnd != ''">AND o.signing_time &lt; #{q.signTimeEnd}</if>
  22. <if test="q != null and q.orderStatus != null and q.orderStatus.size() &gt; 0">
  23. AND o.order_status IN <foreach collection="q.orderStatus" item="v" open="(" separator="," close=")">#{v}</foreach>
  24. </if>
  25. <if test="q != null and q.orderSource != null and q.orderSource.size() &gt; 0">
  26. AND o.order_source IN <foreach collection="q.orderSource" item="v" open="(" separator="," close=")">#{v}</foreach>
  27. </if>
  28. <if test="q != null and q.productType != null and q.productType.size() &gt; 0">
  29. AND o.product_id IN <foreach collection="q.productType" item="v" open="(" separator="," close=")">#{v}</foreach>
  30. </if>
  31. <if test="q != null and q.riskTypes != null and q.riskTypes.size() &gt; 0">
  32. AND o.product_id IN <foreach collection="q.riskTypes" item="v" open="(" separator="," close=")">#{v}</foreach>
  33. </if>
  34. <if test="q != null and q.salesmanName != null and q.salesmanName != ''">AND o.real_quote_user_id LIKE CONCAT('%',#{q.salesmanName},'%')</if>
  35. <if test="q != null and q.salesmanPhone != null and q.salesmanPhone != ''">AND o.real_quote_user_id = #{q.salesmanPhone}</if>
  36. <if test="q != null and q.manageName != null and q.manageName != ''">AND o.docking_person LIKE CONCAT('%',#{q.manageName},'%')</if>
  37. <if test="q != null and q.managePhone != null and q.managePhone != ''">AND o.docking_person_phone = #{q.managePhone}</if>
  38. <if test="q != null and q.orderTypes != null and q.orderTypes.size() &gt; 0">
  39. AND o.entry_status IN <foreach collection="q.orderTypes" item="v" open="(" separator="," close=")">#{v}</foreach>
  40. </if>
  41. <if test="q != null and q.systemCode != null and q.systemCode != ''">AND o.system_code =
  42. #{q.systemCode}
  43. </if>
  44. ),
  45. order_with_partner AS (
  46. SELECT
  47. o.*,
  48. a.partner_company_id,
  49. pc.name_simple partnerCompanyName
  50. FROM orders o
  51. LEFT JOIN ptl_agreement a
  52. ON a.id = o.agreement_id AND a.is_delete = 0
  53. LEFT JOIN esm_ins_company pc
  54. ON pc.id = a.partner_company_id AND pc.is_delete = 0
  55. ),
  56. group_base AS (
  57. SELECT
  58. system_code,
  59. company_id,
  60. company_name,
  61. COALESCE(partner_company_id, '') AS partner_company_id,
  62. COALESCE(partnerCompanyName, '') AS partnerCompanyName,
  63. product_id,
  64. product_name,
  65. COUNT(id) quoteCountNum,
  66. COUNT(DISTINCT COALESCE(quote_no, id)) quoteOrderNum,
  67. SUM(CASE WHEN order_status = 5 THEN 1 ELSE 0 END) underwriteOrderNum,
  68. SUM(CASE WHEN order_status = 5 THEN total_premium ELSE 0 END) underwritePremium
  69. FROM order_with_partner
  70. GROUP BY
  71. company_id,
  72. company_name,
  73. partner_company_id,
  74. partnerCompanyName,
  75. product_id,
  76. product_name
  77. )
  78. </sql>
  79. <sql id="orderBy">
  80. <choose>
  81. <when test="q != null and q.orderType == 'sumOrderNum desc'">ORDER BY sum_order_num DESC</when>
  82. <when test="q != null and q.orderType == 'sumPremium asc'">ORDER BY sum_premium ASC</when>
  83. <when test="q != null and q.orderType == 'sumPremium desc'">ORDER BY sum_premium DESC</when>
  84. <otherwise>ORDER BY o.company_id, o.id</otherwise>
  85. </choose>
  86. </sql>
  87. <select id="page" resultType="com.jzg.commons.entity.report.dto.ReportRiskDataManageDto"><include refid="base"/>
  88. SELECT
  89. company_id AS companyId,
  90. company_name AS companyName,
  91. partner_company_id AS partnerCompanyId,
  92. partnerCompanyName,
  93. product_name AS riskName,
  94. quoteCountNum,
  95. quoteOrderNum,
  96. underwriteOrderNum,
  97. underwritePremium,
  98. CASE
  99. WHEN channel_total_order = 0 THEN 0
  100. ELSE ROUND(underwriteOrderNum * 100.0 / channel_total_order, 2)
  101. END penetrationRate,
  102. ROUND(underwriteOrderNum * 100.0 / quoteCountNum, 2) underwriteRate
  103. FROM (
  104. SELECT
  105. *,
  106. SUM(quoteCountNum) OVER (PARTITION BY company_id, partner_company_id) AS channel_total_order
  107. FROM group_base
  108. ) t
  109. where 1=1
  110. <if test="q != null and q.partnerCompanyIds != null and q.partnerCompanyIds.size() &gt; 0">
  111. AND partner_company_id IN
  112. <foreach collection="q.partnerCompanyIds" item="v" open="(" separator="," close=")">#{v}</foreach>
  113. </if>
  114. ORDER BY
  115. companyId,
  116. product_id
  117. </select>
  118. <select id="export" resultType="com.jzg.commons.entity.report.dto.ReportRiskDataManageDto"><include refid="base"/>
  119. SELECT
  120. company_id AS companyId,
  121. company_name AS companyName,
  122. partner_company_id AS partnerCompanyId,
  123. partnerCompanyName,
  124. product_name AS riskName,
  125. quoteCountNum,
  126. quoteOrderNum,
  127. underwriteOrderNum,
  128. underwritePremium,
  129. CASE
  130. WHEN channel_total_order = 0 THEN 0
  131. ELSE ROUND(underwriteOrderNum * 100.0 / channel_total_order, 2)
  132. END penetrationRate,
  133. ROUND(underwriteOrderNum * 100.0 / quoteCountNum, 2) underwriteRate
  134. FROM (
  135. SELECT
  136. *,
  137. SUM(quoteCountNum) OVER (PARTITION BY company_id, partner_company_id) AS channel_total_order
  138. FROM group_base
  139. ) t
  140. where 1=1
  141. <if test="q != null and q.partnerCompanyIds != null and q.partnerCompanyIds.size() &gt; 0">
  142. AND partner_company_id IN
  143. <foreach collection="q.partnerCompanyIds" item="v" open="(" separator="," close=")">#{v}</foreach>
  144. </if>
  145. ORDER BY
  146. companyId,
  147. product_id
  148. </select>
  149. <sql id="detailSelect"><![CDATA[
  150. SELECT o.license_no AS licenseNo,o.company_id companyId,o.company_name companyName,COALESCE(a.partner_company_id,'') partnerCompanyId,
  151. COALESCE(pc.name_simple,'') partnerCompanyName,o.id orderNo,o.product_name riskName,
  152. 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,
  153. CASE o.order_status
  154. WHEN 0 THEN '订单已提交'
  155. WHEN 1 THEN '待核保'
  156. WHEN 2 THEN '核保中'
  157. WHEN 3 THEN '人工处理'
  158. WHEN 4 THEN '待缴费'
  159. WHEN 5 THEN '已承保'
  160. WHEN 6 THEN '报价失败'
  161. WHEN 7 THEN '核保失败'
  162. WHEN 8 THEN '订单关闭'
  163. ELSE '未知状态'
  164. END AS orderStatusName
  165. FROM orders o LEFT JOIN ptl_agreement a ON a.id=o.agreement_id AND a.is_delete=0
  166. LEFT JOIN esm_ins_company pc ON pc.id=a.partner_company_id AND pc.is_delete=0
  167. ]]>
  168. where 1=1
  169. <if test="q != null and q.partnerCompanyIds != null and q.partnerCompanyIds.size() &gt; 0">
  170. AND a.partner_company_id IN
  171. <foreach collection="q.partnerCompanyIds" item="v" open="(" separator="," close=")">#{v}</foreach>
  172. </if>
  173. </sql>
  174. <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>
  175. <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>
  176. </mapper>