You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

256 lines
12 KiB

  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.example.demo.mapper.coin.StatisticsMapper">
  4. <insert id="batchInsertPart1">
  5. <foreach collection="list" item="s" separator=";">
  6. INSERT INTO statistics (
  7. market, current_datetime,
  8. current_gold, daily_change,
  9. current_permanent, current_free_june,
  10. current_free_december, current_task
  11. ) VALUES (
  12. #{s.market}, #{s.currentDatetime},
  13. #{s.currentGold}, #{s.dailyChange},
  14. #{s.currentPermanent}, #{s.currentFreeJune},
  15. #{s.currentFreeDecember}, #{s.currentTask}
  16. )
  17. ON DUPLICATE KEY UPDATE
  18. current_gold = VALUES(current_gold),
  19. daily_change = VALUES(daily_change),
  20. current_permanent = VALUES(current_permanent),
  21. current_free_june = VALUES(current_free_june),
  22. current_free_december = VALUES(current_free_december),
  23. current_task = VALUES(current_task)
  24. </foreach>
  25. </insert>
  26. <insert id="batchInsertPart2">
  27. <foreach collection="list" item="s" separator=";">
  28. INSERT INTO statistics (
  29. market, current_datetime,
  30. recharge, money,
  31. consume_permanent, consume_free_june,
  32. consume_free_december, consume_task,
  33. refund_permanent, refund_free_june,
  34. refund_free_december, refund_task,
  35. recharge_num, first_recharge
  36. ) VALUES (
  37. #{s.market}, #{s.currentDatetime},
  38. #{s.recharge}, #{s.money},
  39. #{s.consumePermanent}, #{s.consumeFreeJune},
  40. #{s.consumeFreeDecember}, #{s.consumeTask},
  41. #{s.refundPermanent}, #{s.refundFreeJune},
  42. #{s.refundFreeDecember}, #{s.refundTask},
  43. #{s.rechargeNum}, #{s.firstRecharge}
  44. )
  45. ON DUPLICATE KEY UPDATE
  46. recharge = VALUES(recharge),
  47. money = VALUES(money),
  48. consume_permanent = VALUES(consume_permanent),
  49. consume_free_june = VALUES(consume_free_june),
  50. consume_free_december = VALUES(consume_free_december),
  51. consume_task = VALUES(consume_task),
  52. refund_permanent = VALUES(refund_permanent),
  53. refund_free_june = VALUES(refund_free_june),
  54. refund_free_december = VALUES(refund_free_december),
  55. refund_task = VALUES(refund_task),
  56. recharge_num = VALUES(recharge_num),
  57. first_recharge = VALUES(first_recharge)
  58. </foreach>
  59. </insert>
  60. <insert id="batchInsertYear">
  61. <foreach collection="list" item="s" separator=";">
  62. INSERT INTO statistics (
  63. market, current_datetime,
  64. yearly_recharge,
  65. yearly_money,
  66. yearly_consume,
  67. yearly_refund,
  68. yearly_recharge_num
  69. ) VALUES (
  70. #{s.market}, #{s.currentDatetime},
  71. #{s.yearlyRecharge},
  72. #{s.yearlyMoney},
  73. #{s.yearlyConsume},
  74. #{s.yearlyRefund},
  75. #{s.yearlyRechargeNum}
  76. )
  77. ON DUPLICATE KEY UPDATE
  78. yearly_recharge = VALUES(yearly_recharge),
  79. yearly_money = VALUES(yearly_money),
  80. yearly_consume = VALUES(yearly_consume),
  81. yearly_refund = VALUES(yearly_refund),
  82. yearly_recharge_num = VALUES(yearly_recharge_num)
  83. </foreach>
  84. </insert>
  85. <!-- 计算该天充值人数-->
  86. <select id="countRechargeNum" resultType="java.lang.Integer">
  87. SELECT COUNT(DISTINCT ugr.jwcode)
  88. FROM user_gold_record ugr
  89. INNER JOIN user u ON ugr.jwcode = u.jwcode
  90. left join market m ON u.market = m.id
  91. WHERE m.name = #{market}
  92. AND ugr.type=0
  93. AND ugr.audit_status IN (1,3)
  94. AND ugr.audit_time BETWEEN #{startTime} AND #{endTime}
  95. AND u.flag = 1
  96. </select>
  97. <!--获取某地区某时间所在日期的数据(仅一条)-->
  98. <select id="selectByMarketAndDate" resultType="com.example.demo.domain.entity.Statistics">
  99. SELECT recharge_num
  100. FROM statistics
  101. WHERE market = #{market}
  102. AND current_datetime BETWEEN #{startDate} AND #{endDate}
  103. </select>
  104. <select id="selectByMarketsAndDate" resultType="com.example.demo.domain.entity.Statistics">
  105. SELECT market, current_gold,daily_change,
  106. current_permanent, current_free_june,
  107. current_free_december, current_task,
  108. recharge, money,
  109. consume_permanent, consume_free_june,
  110. consume_free_december, consume_task,
  111. refund_permanent, refund_free_june,
  112. refund_free_december, refund_task,
  113. recharge_num, first_recharge,
  114. yearly_recharge, yearly_money,
  115. yearly_consume, yearly_refund,
  116. yearly_recharge_num,update_time
  117. FROM statistics
  118. WHERE market IN
  119. <foreach item="market" collection="markets" open="(" separator="," close=")">
  120. #{market}
  121. </foreach>
  122. AND current_datetime BETWEEN #{startDate} AND #{endDate}
  123. </select>
  124. <!--批量查询-->
  125. <select id="listPart1All" resultType="com.example.demo.domain.entity.Statistics">
  126. SELECT
  127. m.name as market,
  128. #{today} AS current_datetime,
  129. COALESCE(SUM(current_permanent_gold),0) +
  130. COALESCE(SUM(current_free_june),0) +
  131. COALESCE(SUM(current_free_december),0) +
  132. COALESCE(SUM(current_task_gold),0) AS current_gold,
  133. COALESCE(SUM(current_permanent_gold),0) AS current_permanent,
  134. COALESCE(SUM(current_free_june),0) AS current_free_june,
  135. COALESCE(SUM(current_free_december),0) AS current_free_december,
  136. COALESCE(SUM(current_task_gold),0) AS current_task,
  137. -- 与昨天差值(从 statistics 表取)
  138. (
  139. COALESCE(SUM(u.current_permanent_gold),0) +
  140. COALESCE(SUM(u.current_free_june),0) +
  141. COALESCE(SUM(u.current_free_december),0) +
  142. COALESCE(SUM(u.current_task_gold),0)
  143. ) - COALESCE(
  144. (
  145. SELECT s.current_gold
  146. FROM statistics s
  147. WHERE s.market = m.name
  148. AND s.current_datetime = DATE_SUB(#{today}, INTERVAL 1 DAY)
  149. LIMIT 1
  150. ), 0
  151. ) AS daily_change
  152. FROM user u
  153. left join market m on u.market=m.id
  154. where m.name IS NOT NULL
  155. and u.flag = 1
  156. GROUP BY market
  157. </select>
  158. <select id="listPart2All" resultType="com.example.demo.domain.entity.Statistics">
  159. SELECT
  160. m.name as market,
  161. #{today} AS current_datetime,
  162. COALESCE(SUM(CASE WHEN ugr.type=0 THEN ugr.permanent_gold+ugr.free_june+ugr.free_december+ugr.task_gold END),0) AS recharge,
  163. COALESCE(SUM(CASE WHEN ugr.type=0 THEN ugr.permanent_gold END),0) AS money,
  164. COALESCE(SUM(CASE WHEN ugr.type=1 THEN -ugr.permanent_gold END),0) AS consume_permanent,
  165. COALESCE(SUM(CASE WHEN ugr.type=1 THEN -ugr.free_june END),0) AS consume_free_june,
  166. COALESCE(SUM(CASE WHEN ugr.type=1 THEN -ugr.free_december END),0) AS consume_free_december,
  167. COALESCE(SUM(CASE WHEN ugr.type=1 THEN -ugr.task_gold END),0) AS consume_task,
  168. COALESCE(SUM(CASE WHEN ugr.type=2 THEN ugr.permanent_gold END),0) AS refund_permanent,
  169. COALESCE(SUM(CASE WHEN ugr.type=2 THEN ugr.free_june END),0) AS refund_free_june,
  170. COALESCE(SUM(CASE WHEN ugr.type=2 THEN ugr.free_december END),0) AS refund_free_december,
  171. COALESCE(SUM(CASE WHEN ugr.type=2 THEN ugr.task_gold END),0) AS refund_task,
  172. COUNT(DISTINCT CASE WHEN ugr.type=0 THEN ugr.jwcode END) AS recharge_num,
  173. COUNT(DISTINCT CASE WHEN ugr.type=0
  174. AND u.first_recharge BETWEEN #{start} AND #{end} THEN ugr.jwcode END) AS first_recharge
  175. FROM user_gold_record ugr
  176. JOIN user u ON ugr.jwcode = u.jwcode
  177. left join market m on u.market=m.id
  178. WHERE ugr.audit_status IN (1,3)
  179. AND ugr.flag = 1
  180. AND ugr.create_time BETWEEN #{start} AND #{end}
  181. AND m.name IS NOT NULL
  182. AND u.flag = 1
  183. GROUP BY u.market
  184. </select>
  185. <select id="listYearAll" resultType="com.example.demo.domain.entity.Statistics">
  186. SELECT m.name as market,
  187. COALESCE(SUM(s.recharge),0) AS yearly_recharge,
  188. #{today} AS current_datetime,
  189. COALESCE(SUM(s.money),0) AS yearly_money,
  190. COALESCE(SUM(s.consume_permanent+s.consume_free_june+s.consume_free_december+s.consume_task),0) AS yearly_consume,
  191. COALESCE(SUM(s.refund_permanent+s.refund_free_june+s.refund_free_december+s.refund_task),0) AS yearly_refund,
  192. (
  193. SELECT COUNT(DISTINCT ugr.jwcode)
  194. FROM user_gold_record ugr
  195. INNER JOIN user u ON ugr.jwcode = u.jwcode
  196. LEFT JOIN market m2 ON u.market = m2.id
  197. WHERE m2.name = m.name
  198. AND ugr.type = 0
  199. AND ugr.audit_status IN (1,3)
  200. AND ugr.flag = 1
  201. AND ugr.create_time BETWEEN #{yearStart} AND #{end}
  202. AND u.flag = 1
  203. ) AS yearly_recharge_num
  204. FROM statistics s
  205. LEFT JOIN market m ON s.market = m.name
  206. WHERE current_datetime BETWEEN #{yearStart} AND #{end}
  207. AND m.name IS NOT NULL
  208. GROUP BY market
  209. </select>
  210. <select id="listPart2RangeAll" resultType="com.example.demo.domain.entity.Statistics">
  211. SELECT
  212. m.name as market,
  213. DATE(ugr.create_time) AS current_datetime, -- 只保留日期
  214. COALESCE(SUM(CASE WHEN ugr.type=0 THEN ugr.permanent_gold+ugr.free_june+ugr.free_december+ugr.task_gold END),0) AS recharge,
  215. COALESCE(SUM(CASE WHEN ugr.type=0 THEN ugr.permanent_gold END),0) AS money,
  216. COALESCE(SUM(CASE WHEN ugr.type=1 THEN -ugr.permanent_gold END),0) AS consume_permanent,
  217. COALESCE(SUM(CASE WHEN ugr.type=1 THEN -ugr.free_june END),0) AS consume_free_june,
  218. COALESCE(SUM(CASE WHEN ugr.type=1 THEN -ugr.free_december END),0) AS consume_free_december,
  219. COALESCE(SUM(CASE WHEN ugr.type=1 THEN -ugr.task_gold END),0) AS consume_task,
  220. COALESCE(SUM(CASE WHEN ugr.type=2 THEN ugr.permanent_gold END),0) AS refund_permanent,
  221. COALESCE(SUM(CASE WHEN ugr.type=2 THEN ugr.free_june END),0) AS refund_free_june,
  222. COALESCE(SUM(CASE WHEN ugr.type=2 THEN ugr.free_december END),0) AS refund_free_december,
  223. COALESCE(SUM(CASE WHEN ugr.type=2 THEN ugr.task_gold END),0) AS refund_task,
  224. COUNT(DISTINCT CASE WHEN ugr.type=0 THEN ugr.jwcode END) AS recharge_num,
  225. COUNT(DISTINCT CASE WHEN ugr.type=0
  226. AND u.first_recharge BETWEEN d.date_start AND d.date_end THEN ugr.jwcode END) AS first_recharge
  227. FROM
  228. -- 生成 7 天日期序列
  229. (
  230. SELECT DATE_SUB(CURDATE(), INTERVAL seq DAY) AS create_date,
  231. DATE_SUB(CURDATE(), INTERVAL seq DAY) AS date_start,
  232. TIMESTAMP(DATE_SUB(CURDATE(), INTERVAL seq DAY), '23:59:59') AS date_end
  233. FROM (
  234. SELECT 0 AS seq UNION ALL SELECT 1 UNION ALL SELECT 2 UNION ALL
  235. SELECT 3 UNION ALL SELECT 4 UNION ALL SELECT 5 UNION ALL SELECT 6
  236. ) AS days
  237. ) d
  238. JOIN user_gold_record ugr
  239. ON ugr.create_time between d.date_start AND d.date_end
  240. JOIN user u ON ugr.jwcode = u.jwcode
  241. left join market m on u.market=m.id
  242. WHERE ugr.audit_status IN (1,3)
  243. AND ugr.flag = 1
  244. AND m.name IS NOT NULL
  245. AND u.flag = 1
  246. GROUP BY m.name, d.create_date
  247. </select>
  248. </mapper>