ReportMeetDataMapper.xml 9.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162
  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.mapper.ReportMeetDataMapper">
  4. <!-- 应付统计结果映射 -->
  5. <resultMap id="PayableStatisticsResultMap" type="com.jzg.commons.entity.report.dto.ReportMeetDataDto">
  6. <result column="year_and_month_time" property="yearAndMonthTime"/>
  7. <result column="sum_premium" property="sumPremium"/>
  8. <result column="payable_commission_money" property="payableCommissionMoney"/>
  9. <result column="unwithdrawn_money" property="unwithdrawnMoney"/>
  10. <result column="withdrawing_money" property="withdrawingMoney"/>
  11. <result column="paid_money" property="paidMoney"/>
  12. </resultMap>
  13. <!-- 应付统计明细结果映射 -->
  14. <resultMap id="PayableStatisticsDetailResultMap" type="com.jzg.commons.entity.report.dto.ReportMeetDataDetailDto">
  15. <result column="salesman_name" property="salesmanName"/>
  16. <result column="salesman_phone" property="salesmanPhone"/>
  17. <result column="bank_card_number" property="bankCardNumber"/>
  18. <result column="bank_name" property="bankName"/>
  19. <result column="status_name" property="statusName"/>
  20. <result column="withdrawal_money" property="withdrawalMoney"/>
  21. <result column="paid_person_name" property="paidPersonName"/>
  22. <result column="pay_account_name" property="payAccountName"/>
  23. <result column="paid_time" property="paidTime"/>
  24. <result column="reject_person" property="rejectPerson"/>
  25. <result column="reject_time" property="rejectTime"/>
  26. </resultMap>
  27. <!--
  28. 按月份汇总应付统计数据
  29. 说明:
  30. 1. 保费:ins_fee_orders.total_premium 按签单时间(signing_time)月份汇总(含补录订单)
  31. 2. 应付佣金/未提现/已付款:sys_user_account_change_log 按创建时间(create_time)月份汇总
  32. - amount 字段带符号,正数=新增(应付佣金),负数=提现(已付款)
  33. - amount 等价于 amount_after - amount_before,且更可靠(amount_after 可能因并发不准)
  34. - 应付佣金 = 所有新增(正数)求和
  35. - 未提现 = 新增 - 提现 = 所有 amount 求和
  36. - 已付款 = 所有提现(负数)取绝对值求和
  37. 3. 提现中:sys_amount_auditing 中 auditing_status=0(待付款)的提现金额按创建时间月份汇总
  38. 4. sys_amount_auditing 与 sys_user_account_change_log 可通过
  39. sys_amount_auditing.id = sys_user_account_change_log.related_amount_auditing_id 关联
  40. -->
  41. <select id="getPayableStatisticsByMonth" resultMap="PayableStatisticsResultMap">
  42. SELECT
  43. m.year_and_month_time,
  44. COALESCE(p.sum_premium, 0) AS sum_premium,
  45. COALESCE(c.payable_commission, 0) AS payable_commission_money,
  46. COALESCE(c.unwithdrawn, 0) AS unwithdrawn_money,
  47. COALESCE(w.withdrawing, 0) AS withdrawing_money,
  48. COALESCE(c.paid, 0) AS paid_money
  49. FROM (
  50. <!-- 汇总所有涉及到的年月集合:保费按签单时间,佣金/提现按创建时间 -->
  51. SELECT CONCAT(YEAR(ifo.signing_time), '-', LPAD(MONTH(ifo.signing_time), 2, '0')) AS year_and_month_time
  52. FROM ins_fee_orders ifo
  53. WHERE ifo.is_delete = 0
  54. AND ifo.system_code = #{systemCode}
  55. AND YEAR(ifo.signing_time) IN
  56. <foreach collection="param.year" item="y" open="(" separator="," close=")">#{y}</foreach>
  57. GROUP BY CONCAT(YEAR(ifo.signing_time), '-', LPAD(MONTH(ifo.signing_time), 2, '0'))
  58. UNION
  59. SELECT CONCAT(YEAR(suacl.create_time), '-', LPAD(MONTH(suacl.create_time), 2, '0')) AS year_and_month_time
  60. FROM sys_user_account_change_log suacl
  61. WHERE suacl.is_delete = 0
  62. AND suacl.status = 10
  63. AND suacl.system_code = #{systemCode}
  64. AND YEAR(suacl.create_time) IN
  65. <foreach collection="param.year" item="y" open="(" separator="," close=")">#{y}</foreach>
  66. GROUP BY CONCAT(YEAR(suacl.create_time), '-', LPAD(MONTH(suacl.create_time), 2, '0'))
  67. UNION
  68. SELECT CONCAT(YEAR(saa.create_time), '-', LPAD(MONTH(saa.create_time), 2, '0')) AS year_and_month_time
  69. FROM sys_amount_auditing saa
  70. WHERE saa.is_delete = 0
  71. AND saa.system_code = #{systemCode}
  72. AND saa.auditing_status = 0
  73. AND YEAR(saa.create_time) IN
  74. <foreach collection="param.year" item="y" open="(" separator="," close=")">#{y}</foreach>
  75. GROUP BY CONCAT(YEAR(saa.create_time), '-', LPAD(MONTH(saa.create_time), 2, '0'))
  76. ) m
  77. LEFT JOIN (
  78. <!-- 保费:按签单时间月份汇总订单总保费(含补录订单) -->
  79. SELECT
  80. CONCAT(YEAR(ifo.signing_time), '-', LPAD(MONTH(ifo.signing_time), 2, '0')) AS year_and_month_time,
  81. SUM(COALESCE(ifo.total_premium, 0)) AS sum_premium
  82. FROM ins_fee_orders ifo
  83. WHERE ifo.is_delete = 0
  84. AND ifo.system_code = #{systemCode}
  85. AND YEAR(ifo.signing_time) IN
  86. <foreach collection="param.year" item="y" open="(" separator="," close=")">#{y}</foreach>
  87. GROUP BY CONCAT(YEAR(ifo.signing_time), '-', LPAD(MONTH(ifo.signing_time), 2, '0'))
  88. ) p ON m.year_and_month_time = p.year_and_month_time
  89. LEFT JOIN (
  90. <!-- 应付佣金/未提现/已付款:按账户变更记录创建时间月份汇总 -->
  91. SELECT
  92. CONCAT(YEAR(suacl.create_time), '-', LPAD(MONTH(suacl.create_time), 2, '0')) AS year_and_month_time,
  93. SUM(CASE WHEN suacl.amount &gt; 0 THEN suacl.amount ELSE 0 END) AS payable_commission,
  94. SUM(suacl.amount) AS unwithdrawn,
  95. SUM(CASE WHEN suacl.amount &lt; 0 THEN ABS(suacl.amount) ELSE 0 END) AS paid
  96. FROM sys_user_account_change_log suacl
  97. WHERE suacl.is_delete = 0
  98. AND suacl.status = 10
  99. AND suacl.system_code = #{systemCode}
  100. AND YEAR(suacl.create_time) IN
  101. <foreach collection="param.year" item="y" open="(" separator="," close=")">#{y}</foreach>
  102. GROUP BY CONCAT(YEAR(suacl.create_time), '-', LPAD(MONTH(suacl.create_time), 2, '0'))
  103. ) c ON m.year_and_month_time = c.year_and_month_time
  104. LEFT JOIN (
  105. <!-- 提现中:按提现申请创建时间月份汇总未付款(auditing_status=0)的提现金额 -->
  106. SELECT
  107. CONCAT(YEAR(saa.create_time), '-', LPAD(MONTH(saa.create_time), 2, '0')) AS year_and_month_time,
  108. SUM(COALESCE(saa.amount, 0)) AS withdrawing
  109. FROM sys_amount_auditing saa
  110. WHERE saa.is_delete = 0
  111. AND saa.system_code = #{systemCode}
  112. AND saa.auditing_status = 0
  113. AND YEAR(saa.create_time) IN
  114. <foreach collection="param.year" item="y" open="(" separator="," close=")">#{y}</foreach>
  115. GROUP BY CONCAT(YEAR(saa.create_time), '-', LPAD(MONTH(saa.create_time), 2, '0'))
  116. ) w ON m.year_and_month_time = w.year_and_month_time
  117. ORDER BY m.year_and_month_time ASC
  118. </select>
  119. <!--
  120. 查询指定年月的应付统计明细
  121. 说明:
  122. 1. 以 sys_amount_auditing.create_time 作为年月筛选条件
  123. 2. 业务员名称/手机号:通过 user_id 关联 sys_user_jzg_info 获取 name,关联 sys_user 获取 mobile
  124. 3. 状态:auditing_status 转换为中文(0-待付款、1-已付款、2-拒绝付款)
  125. 4. 付款账户:关联 inv_account_card 根据 account_id 获取 card_name
  126. -->
  127. <select id="getPayableStatisticsDetail" resultMap="PayableStatisticsDetailResultMap">
  128. SELECT
  129. suji.name AS salesman_name,
  130. su.mobile AS salesman_phone,
  131. saa.bank_card_num AS bank_card_number,
  132. saa.bank_name,
  133. CASE saa.auditing_status
  134. WHEN 0 THEN '待付款'
  135. WHEN 1 THEN '已付款'
  136. WHEN 2 THEN '拒绝付款'
  137. ELSE CAST(saa.auditing_status AS CHAR)
  138. END AS status_name,
  139. saa.amount AS withdrawal_money,
  140. saa.receive_user AS paid_person_name,
  141. iac.card_name AS pay_account_name,
  142. saa.payment_time AS paid_time,
  143. saa.reject_person,
  144. saa.reject_time
  145. FROM sys_amount_auditing saa
  146. LEFT JOIN sys_user_jzg_info suji ON suji.user_id = saa.user_id AND suji.is_delete = 0
  147. LEFT JOIN sys_user su ON su.id = saa.user_id AND su.is_delete = 0
  148. LEFT JOIN inv_account_card iac ON iac.id = saa.account_id AND iac.is_delete = 0
  149. <where>
  150. saa.is_delete = 0
  151. AND saa.system_code = #{systemCode}
  152. <if test="param.yearMonth != null and param.yearMonth != ''">
  153. AND DATE_FORMAT(saa.create_time, '%Y-%m') = #{param.yearMonth}
  154. </if>
  155. </where>
  156. ORDER BY saa.create_time DESC
  157. </select>
  158. </mapper>