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.

374 lines
17 KiB

1 month ago
  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.StatisticsMapper">
  4. <!--新增part2统计数据-->
  5. <insert id="insertPart2">
  6. INSERT INTO statistics (
  7. market, current_datetime,
  8. recharge, money,
  9. consume_permanent, consume_free_june,
  10. consume_free_december, consume_task,
  11. refund_permanent, refund_free_june,
  12. refund_free_december,refund_task,
  13. recharge_num, first_recharge
  14. ) VALUES (
  15. #{market}, #{currentDatetime},
  16. #{recharge}, #{money},
  17. #{consumePermanent}, #{consumeFreeJune},
  18. #{consumeFreeDecember}, #{consumeTask},
  19. #{refundPermanent}, #{refundFreeJune},
  20. #{refundFreeDecember}, #{refundTask},
  21. #{rechargeNum}, #{firstRecharge}
  22. )
  23. </insert>
  24. <!--新增part1统计数据-->
  25. <insert id="insertPart1">
  26. INSERT INTO statistics (
  27. market, current_datetime,
  28. current_gold, daily_change,
  29. current_permanent, current_free_june,
  30. current_free_december, current_task
  31. ) VALUES (
  32. #{market}, #{currentDatetime},
  33. #{currentGold}, #{dailyChange},
  34. #{currentPermanent}, #{currentFreeJune},
  35. #{currentFreeDecember}, #{currentTask}
  36. )
  37. </insert>
  38. <!--新增年度统计-->
  39. <insert id="insertYear">
  40. INSERT INTO statistics (
  41. market, current_datetime,
  42. yearly_recharge,
  43. yearly_money,
  44. yearly_consume,
  45. yearly_refund,
  46. yearly_recharge_num
  47. ) VALUES (
  48. #{market}, #{currentDatetime},
  49. #{yearlyRecharge},#{yearlyMoney},
  50. #{yearlyConsume},#{yearlyRefund},
  51. #{yearlyRechargeNum}
  52. )
  53. </insert>
  54. <insert id="batchInsertPart1">
  55. <foreach collection="list" item="s" separator=";">
  56. INSERT INTO statistics (
  57. market, current_datetime,
  58. current_gold, daily_change,
  59. current_permanent, current_free_june,
  60. current_free_december, current_task
  61. ) VALUES (
  62. #{s.market}, #{s.currentDatetime},
  63. #{s.currentGold}, #{s.dailyChange},
  64. #{s.currentPermanent}, #{s.currentFreeJune},
  65. #{s.currentFreeDecember}, #{s.currentTask}
  66. )
  67. ON DUPLICATE KEY UPDATE
  68. current_gold = VALUES(current_gold),
  69. daily_change = VALUES(daily_change),
  70. current_permanent = VALUES(current_permanent),
  71. current_free_june = VALUES(current_free_june),
  72. current_free_december = VALUES(current_free_december),
  73. current_task = VALUES(current_task)
  74. </foreach>
  75. </insert>
  76. <insert id="batchInsertPart2">
  77. <foreach collection="list" item="s" separator=";">
  78. INSERT INTO statistics (
  79. market, current_datetime,
  80. recharge, money,
  81. consume_permanent, consume_free_june,
  82. consume_free_december, consume_task,
  83. refund_permanent, refund_free_june,
  84. refund_free_december, refund_task,
  85. recharge_num, first_recharge
  86. ) VALUES (
  87. #{s.market}, #{s.currentDatetime},
  88. #{s.recharge}, #{s.money},
  89. #{s.consumePermanent}, #{s.consumeFreeJune},
  90. #{s.consumeFreeDecember}, #{s.consumeTask},
  91. #{s.refundPermanent}, #{s.refundFreeJune},
  92. #{s.refundFreeDecember}, #{s.refundTask},
  93. #{s.rechargeNum}, #{s.firstRecharge}
  94. )
  95. ON DUPLICATE KEY UPDATE
  96. recharge = VALUES(recharge),
  97. money = VALUES(money),
  98. consume_permanent = VALUES(consume_permanent),
  99. consume_free_june = VALUES(consume_free_june),
  100. consume_free_december = VALUES(consume_free_december),
  101. consume_task = VALUES(consume_task),
  102. refund_permanent = VALUES(refund_permanent),
  103. refund_free_june = VALUES(refund_free_june),
  104. refund_free_december = VALUES(refund_free_december),
  105. refund_task = VALUES(refund_task),
  106. recharge_num = VALUES(recharge_num),
  107. first_recharge = VALUES(first_recharge)
  108. </foreach>
  109. </insert>
  110. <insert id="batchInsertYear">
  111. <foreach collection="list" item="s" separator=";">
  112. INSERT INTO statistics (
  113. market, current_datetime,
  114. yearly_recharge,
  115. yearly_money,
  116. yearly_consume,
  117. yearly_refund,
  118. yearly_recharge_num
  119. ) VALUES (
  120. #{s.market}, #{s.currentDatetime},
  121. #{s.yearlyRecharge},
  122. #{s.yearlyMoney},
  123. #{s.yearlyConsume},
  124. #{s.yearlyRefund},
  125. #{s.yearlyRechargeNum}
  126. )
  127. ON DUPLICATE KEY UPDATE
  128. yearly_recharge = VALUES(yearly_recharge),
  129. yearly_money = VALUES(yearly_money),
  130. yearly_consume = VALUES(yearly_consume),
  131. yearly_refund = VALUES(yearly_refund),
  132. yearly_recharge_num = VALUES(yearly_recharge_num)
  133. </foreach>
  134. </insert>
  135. <!--更新part2统计数据-->
  136. <update id="updatePart2" parameterType="map">
  137. UPDATE statistics
  138. SET
  139. recharge = #{recharge},
  140. money = #{money},
  141. consume_permanent = #{consumePermanent},
  142. consume_free_june = #{consumeFreeJune},
  143. consume_free_december = #{consumeFreeDecember},
  144. consume_task = #{consumeTask},
  145. refund_permanent = #{refundPermanent},
  146. refund_free_june = #{refundFreeJune},
  147. refund_free_december = #{refundFreeDecember},
  148. refund_task = #{refundTask},
  149. recharge_num = #{rechargeNum},
  150. first_recharge = #{firstRecharge}
  151. <if test="updateTime != null">
  152. ,update_time = #{updateTime}
  153. </if>
  154. WHERE market = #{market} and current_datetime = #{currentDatetime}
  155. </update>
  156. <!--更新part1统计数据-->
  157. <update id="updatePart1" parameterType="map">
  158. update statistics
  159. SET
  160. current_gold = #{currentGold},
  161. daily_change = #{dailyChange},
  162. current_permanent = #{currentPermanent},
  163. current_free_june = #{currentFreeJune},
  164. current_free_december = #{currentFreeDecember},
  165. current_task = #{currentTask}
  166. WHERE market = #{market} and current_datetime = #{currentDatetime}
  167. </update>
  168. <!--更新年度统计数据-->
  169. <update id="updateYear" parameterType="map">
  170. update statistics
  171. SET
  172. yearly_recharge=#{yearlyRecharge},
  173. yearly_money=#{yearlyMoney},
  174. yearly_consume=#{yearlyConsume},
  175. yearly_refund=#{yearlyRefund},
  176. yearly_recharge_num=#{yearlyRechargeNum}
  177. WHERE market = #{market} and current_datetime = #{currentDatetime}
  178. </update>
  179. <!--根据地区、审核状态、起止时间查询订单表数据-->
  180. <select id="findByMarketAndAuditStatus"
  181. resultType="com.example.demo.domain.entity.UserGoldRecord">
  182. SELECT u.market, ugr.*
  183. FROM user_gold_record ugr
  184. INNER JOIN user u ON ugr.jwcode = u.jwcode
  185. WHERE u.market = #{market}
  186. AND ugr.audit_status IN
  187. <foreach item="status" collection="auditStatusList" open="(" separator="," close=")">
  188. #{status}
  189. </foreach>
  190. and ugr.flag=1
  191. AND ugr.create_time BETWEEN #{startTime} AND #{endTime}
  192. </select>
  193. <!-- 计算该天充值人数-->
  194. <select id="countRechargeNum" resultType="java.lang.Integer">
  195. SELECT COUNT(DISTINCT ugr.jwcode)
  196. FROM user_gold_record ugr
  197. INNER JOIN user u ON ugr.jwcode = u.jwcode
  198. WHERE u.market = #{market}
  199. AND ugr.type=0
  200. AND ugr.audit_status IN (1,3)
  201. AND ugr.audit_time BETWEEN #{startTime} AND #{endTime}
  202. </select>
  203. <!--计算该天首充人数-->
  204. <select id="countFirstRecharge" resultType="java.lang.Integer">
  205. SELECT COUNT(DISTINCT ugr.jwcode)
  206. FROM user_gold_record ugr
  207. INNER JOIN user u ON ugr.jwcode = u.jwcode
  208. WHERE u.market = #{market}
  209. AND ugr.type=0
  210. AND ugr.audit_status IN (1,3)
  211. AND ugr.audit_time BETWEEN #{startTime} AND #{endTime}
  212. AND u.first_recharge = #{startTime}
  213. </select>
  214. <!--获取某地区某时间所在日期的数据(仅一条)-->
  215. <select id="selectByMarketAndDate" resultType="com.example.demo.domain.entity.Statistics">
  216. SELECT *
  217. FROM statistics
  218. WHERE market = #{market}
  219. AND current_datetime BETWEEN #{startDate} AND #{endDate}
  220. </select>
  221. <select id="sumCurrentPermanentGold" resultType="java.lang.Integer">
  222. SELECT COALESCE(SUM(current_permanent_gold), 0)
  223. FROM user
  224. WHERE user.market = #{market}
  225. </select>
  226. <select id="sumCurrentFreeJune" resultType="java.lang.Integer">
  227. SELECT COALESCE(SUM(u.current_free_june),0)
  228. FROM user as u
  229. WHERE u.market = #{market}
  230. </select>
  231. <select id="sumCurrentFreeDecember" resultType="java.lang.Integer">
  232. SELECT COALESCE(SUM(u.current_free_december),0)
  233. FROM user as u
  234. WHERE u.market = #{market}
  235. </select>
  236. <select id="sumCurrentTaskGold" resultType="java.lang.Integer">
  237. SELECT COALESCE(SUM(u.current_task_gold),0)
  238. FROM user as u
  239. WHERE u.market = #{market}
  240. </select>
  241. <select id="selectSumByMarketAndDate" resultType="com.example.demo.domain.entity.Statistics">
  242. select sum(s.recharge) as recharge,
  243. sum(s.money) as money,
  244. sum(s.consume_permanent) as consume_permanent,
  245. sum(s.consume_free_june) as consume_free_june,
  246. sum(s.consume_free_december) as consume_free_december,
  247. sum(s.consume_task) as consume_task,
  248. sum(s.recharge_num) as recharge_num
  249. from statistics as s
  250. WHERE market = #{market}
  251. AND current_datetime >= #{startDate}
  252. AND current_datetime &lt;= #{endDate}
  253. </select>
  254. <select id="selectByMarketsAndDate" resultType="com.example.demo.domain.entity.Statistics">
  255. SELECT * FROM statistics
  256. WHERE market IN
  257. <foreach item="market" collection="markets" open="(" separator="," close=")">
  258. #{market}
  259. </foreach>
  260. AND current_datetime BETWEEN #{startDate} AND #{endDate}
  261. </select>
  262. <select id="listPart1All" resultType="com.example.demo.domain.entity.Statistics">
  263. SELECT
  264. market,
  265. #{today} AS current_datetime,
  266. COALESCE(SUM(current_permanent_gold),0) +
  267. COALESCE(SUM(current_free_june),0) +
  268. COALESCE(SUM(current_free_december),0) +
  269. COALESCE(SUM(current_task_gold),0) AS current_gold,
  270. COALESCE(SUM(current_permanent_gold),0) AS current_permanent,
  271. COALESCE(SUM(current_free_june),0) AS current_free_june,
  272. COALESCE(SUM(current_free_december),0) AS current_free_december,
  273. COALESCE(SUM(current_task_gold),0) AS current_task,
  274. -- 与昨天差值(从 statistics 表取)
  275. (
  276. COALESCE(SUM(u.current_permanent_gold),0) +
  277. COALESCE(SUM(u.current_free_june),0) +
  278. COALESCE(SUM(u.current_free_december),0) +
  279. COALESCE(SUM(u.current_task_gold),0)
  280. ) - COALESCE(
  281. (
  282. SELECT s.current_gold
  283. FROM statistics s
  284. WHERE s.market = u.market
  285. AND s.current_datetime = DATE_SUB(#{today}, INTERVAL 1 DAY)
  286. LIMIT 1
  287. ), 0
  288. ) AS daily_change
  289. FROM user u
  290. GROUP BY market
  291. </select>
  292. <select id="listPart2All" resultType="com.example.demo.domain.entity.Statistics">
  293. SELECT
  294. u.market,
  295. #{today} AS current_datetime,
  296. COALESCE(SUM(CASE WHEN ugr.type=0 THEN ugr.permanent_gold+ugr.free_june+ugr.free_december+ugr.task_gold END),0) AS recharge,
  297. COALESCE(SUM(CASE WHEN ugr.type=0 THEN ugr.permanent_gold END),0) AS money,
  298. COALESCE(SUM(CASE WHEN ugr.type=1 THEN ugr.permanent_gold END),0) AS consume_permanent,
  299. COALESCE(SUM(CASE WHEN ugr.type=1 THEN ugr.free_june END),0) AS consume_free_june,
  300. COALESCE(SUM(CASE WHEN ugr.type=1 THEN ugr.free_december END),0) AS consume_free_december,
  301. COALESCE(SUM(CASE WHEN ugr.type=1 THEN ugr.task_gold END),0) AS consume_task,
  302. COALESCE(SUM(CASE WHEN ugr.type=2 THEN ugr.permanent_gold END),0) AS refund_permanent,
  303. COALESCE(SUM(CASE WHEN ugr.type=2 THEN ugr.free_june END),0) AS refund_free_june,
  304. COALESCE(SUM(CASE WHEN ugr.type=2 THEN ugr.free_december END),0) AS refund_free_december,
  305. COALESCE(SUM(CASE WHEN ugr.type=2 THEN ugr.task_gold END),0) AS refund_task,
  306. COUNT(DISTINCT CASE WHEN ugr.type=0 THEN ugr.jwcode END) AS recharge_num,
  307. COUNT(DISTINCT CASE WHEN ugr.type=0
  308. AND u.first_recharge BETWEEN #{start} AND #{end} THEN ugr.jwcode END) AS first_recharge
  309. FROM user_gold_record ugr
  310. JOIN user u ON ugr.jwcode = u.jwcode
  311. WHERE ugr.audit_status IN (1,3)
  312. AND ugr.flag = 1
  313. AND ugr.create_time BETWEEN #{start} AND #{end}
  314. GROUP BY u.market
  315. </select>
  316. <select id="listYearAll" resultType="com.example.demo.domain.entity.Statistics">
  317. SELECT market,
  318. COALESCE(SUM(recharge),0) AS yearly_recharge,
  319. #{today} AS current_datetime,
  320. COALESCE(SUM(money),0) AS yearly_money,
  321. COALESCE(SUM(consume_permanent+consume_free_june+consume_free_december+consume_task),0) AS yearly_consume,
  322. COALESCE(SUM(refund_permanent+refund_free_june+refund_free_december+refund_task),0) AS yearly_refund,
  323. COALESCE(SUM(recharge_num),0) AS yearly_recharge_num
  324. FROM statistics
  325. WHERE current_datetime BETWEEN #{yearStart} AND #{end}
  326. GROUP BY market
  327. </select>
  328. <select id="listPart2RangeAll" resultType="com.example.demo.domain.entity.Statistics">
  329. SELECT
  330. u.market,
  331. DATE(ugr.create_time) AS current_datetime, -- 只保留日期
  332. COALESCE(SUM(CASE WHEN ugr.type=0 THEN ugr.permanent_gold+ugr.free_june+ugr.free_december+ugr.task_gold END),0) AS recharge,
  333. COALESCE(SUM(CASE WHEN ugr.type=0 THEN ugr.permanent_gold END),0) AS money,
  334. COALESCE(SUM(CASE WHEN ugr.type=1 THEN ugr.permanent_gold END),0) AS consume_permanent,
  335. COALESCE(SUM(CASE WHEN ugr.type=1 THEN ugr.free_june END),0) AS consume_free_june,
  336. COALESCE(SUM(CASE WHEN ugr.type=1 THEN ugr.free_december END),0) AS consume_free_december,
  337. COALESCE(SUM(CASE WHEN ugr.type=1 THEN ugr.task_gold END),0) AS consume_task,
  338. COALESCE(SUM(CASE WHEN ugr.type=2 THEN ugr.permanent_gold END),0) AS refund_permanent,
  339. COALESCE(SUM(CASE WHEN ugr.type=2 THEN ugr.free_june END),0) AS refund_free_june,
  340. COALESCE(SUM(CASE WHEN ugr.type=2 THEN ugr.free_december END),0) AS refund_free_december,
  341. COALESCE(SUM(CASE WHEN ugr.type=2 THEN ugr.task_gold END),0) AS refund_task,
  342. COUNT(DISTINCT CASE WHEN ugr.type=0 THEN ugr.jwcode END) AS recharge_num,
  343. COUNT(DISTINCT CASE WHEN ugr.type=0
  344. AND u.first_recharge BETWEEN d.date_start AND d.date_end THEN ugr.jwcode END) AS first_recharge
  345. FROM
  346. -- 生成 7 天日期序列
  347. (
  348. SELECT DATE_SUB(CURDATE(), INTERVAL seq DAY) AS create_date,
  349. DATE_SUB(CURDATE(), INTERVAL seq DAY) AS date_start,
  350. DATE_ADD(DATE_SUB(CURDATE(), INTERVAL seq DAY), INTERVAL 1 DAY) AS date_end
  351. FROM (
  352. SELECT 0 AS seq UNION ALL SELECT 1 UNION ALL SELECT 2 UNION ALL
  353. SELECT 3 UNION ALL SELECT 4 UNION ALL SELECT 5 UNION ALL SELECT 6
  354. ) AS days
  355. ) d
  356. JOIN user_gold_record ugr
  357. ON ugr.create_time between d.date_start AND d.date_end
  358. JOIN user u
  359. ON ugr.jwcode = u.jwcode
  360. WHERE ugr.audit_status IN (1,3)
  361. AND ugr.flag = 1
  362. GROUP BY u.market, d.create_date
  363. </select>
  364. </mapper>