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.

269 lines
14 KiB

  1. package com.example.demo.mapper;
  2. import com.example.demo.domain.vo.Statistics;
  3. import com.example.demo.domain.vo.SumCoin;
  4. import org.apache.ibatis.annotations.Mapper;
  5. import org.apache.ibatis.annotations.Select;
  6. import java.util.List;
  7. @Mapper
  8. public interface StatisticsMapper {
  9. //全年累计金币数
  10. @Select("SELECT SUM(recharge_coin) AS rechargeSumCoin, " +
  11. " SUM(free_coin) AS freeSumCoin, " +
  12. " SUM(task_coin) AS taskSumCoin, " +
  13. " (SUM(recharge_coin) + SUM(free_coin) + SUM(task_coin)) AS totalSumCoin " +
  14. "FROM `detail` " +
  15. "WHERE update_type = '充值' " +
  16. " AND create_time >= '2024-01-01' " +
  17. " AND create_time < NOW()")
  18. Statistics getTotalYearCoin();
  19. //昨日新增
  20. @Select("SELECT SUM(recharge_coin) AS rechargeYesterdaySumCoin, " +
  21. " SUM(free_coin) AS freeYesterdaySumCoin, " +
  22. " SUM(task_coin) AS taskYesterdaySumCoin, " +
  23. " (SUM(recharge_coin) + SUM(free_coin) + SUM(task_coin)) AS totalYesterdaySumCoin " +
  24. "FROM `detail` " +
  25. "WHERE update_type = '充值' " +
  26. " AND create_time >= CURDATE() - INTERVAL 1 DAY " +
  27. " AND create_time < CURDATE()")
  28. Statistics getYesterdayNewCoin();
  29. //全年累计充值人数
  30. @Select("SELECT COUNT(jwcode) AS rechargeCount " +
  31. "FROM `detail` " +
  32. "WHERE update_type = '充值' " +
  33. " AND create_time >= '2024-01-01' " +
  34. " AND create_time < NOW()")
  35. int getYearRechargeCount();
  36. //这周充值数量
  37. @Select("SELECT COUNT(jwcode) AS rechargeCountThisWeek " +
  38. "FROM `detail` WHERE update_type = '充值' AND YEARWEEK(create_time, 1) = YEARWEEK(CURDATE(), 1)")
  39. int getRechargeCountThisWeek();
  40. //上周充值数量
  41. @Select("SELECT COUNT(jwcode) AS rechargeCountLastWeek " +
  42. "FROM `detail` WHERE update_type = '充值' AND YEARWEEK(create_time, 1) = YEARWEEK(CURDATE() - INTERVAL 1 WEEK, 1)")
  43. int getRechargeCountLastWeek();
  44. //今天的充值数量
  45. @Select("SELECT COUNT(jwcode) AS rechargeCountToday " +
  46. "FROM `detail` WHERE update_type = '充值' AND create_time >= CURDATE()")
  47. int getRechargeCountToday();
  48. //昨天的充值数量
  49. @Select("SELECT COUNT(jwcode) AS rechargeCountYesterday " +
  50. "FROM `detail` WHERE update_type = '充值' AND create_time >=CURDATE() - INTERVAL 1 DAY AND create_time < CURDATE();")
  51. int getRechargeCountYesterday();
  52. //昨日新增首充
  53. @Select("SELECT COUNT(jwcode) AS firstRechargeCountYesterday "+
  54. "FROM `detail` WHERE update_type = '充值' AND create_time >=CURDATE() - INTERVAL 1 DAY AND create_time < CURDATE() AND first_recharge = 1")
  55. int getFirstRechargeCountYesterday();
  56. //金币系统消费
  57. @Select("SELECT p.subjects AS subject, " +
  58. " d.consume_platform,"+
  59. " SUM(d.recharge_coin) AS rechargeCoinSystemSum, " +
  60. " SUM(d.free_coin) AS freeCoinSystemSum, " +
  61. " SUM(d.task_coin) AS taskCoinSystemSum, " +
  62. " (SUM(d.recharge_coin) + SUM(d.free_coin) + SUM(d.task_coin)) AS totalCoinSystemSum " +
  63. "FROM detail d " +
  64. "JOIN product p ON d.product_id = p.product_id " +
  65. "WHERE d.update_type = '消费' AND " +
  66. " d.consume_platform = '金币系统' " +
  67. "GROUP BY p.subjects ")
  68. List<Statistics> getCoinSystemSum();
  69. //ERP消费
  70. @Select("SELECT p.subjects AS subject, " +
  71. " d.consume_platform,"+
  72. " SUM(d.recharge_coin) AS rechargeERPSum, " +
  73. " SUM(d.free_coin) AS freeERPSum, " +
  74. " SUM(d.task_coin) AS taskERPSum, " +
  75. " (SUM(d.recharge_coin) + SUM(d.free_coin) + SUM(d.task_coin)) AS totalERPSum " +
  76. "FROM detail d " +
  77. "JOIN product p ON d.product_id = p.product_id " +
  78. "WHERE d.update_type = '消费' AND " +
  79. " d.consume_platform = 'ERP系统' " +
  80. "GROUP BY p.subjects ")
  81. List<Statistics> getERPSum();
  82. // //HomilyChart消费
  83. @Select("SELECT p.subjects AS subject, " +
  84. " d.consume_platform,"+
  85. " SUM(d.recharge_coin) AS rechargeHomilyChartSum, " +
  86. " SUM(d.free_coin) AS freeHomilyChartSum, " +
  87. " SUM(d.task_coin) AS taskHomilyChartSum, " +
  88. " (SUM(d.recharge_coin) + SUM(d.free_coin) + SUM(d.task_coin)) AS totalHomilyChartSum " +
  89. "FROM detail d " +
  90. "JOIN product p ON d.product_id = p.product_id " +
  91. "WHERE d.update_type = '消费' AND " +
  92. " d.consume_platform = 'HomilyChart' " +
  93. "GROUP BY p.subjects ")
  94. List<Statistics> getHomilyChartSum();
  95. // //HomilyLink消费
  96. @Select("SELECT p.subjects AS subject, " +
  97. " d.consume_platform,"+
  98. " SUM(d.recharge_coin) AS rechargeHomilyLinkSum, " +
  99. " SUM(d.free_coin) AS freeHomilyLinkSum, " +
  100. " SUM(d.task_coin) AS taskHomilyLinkSum, " +
  101. " (SUM(d.recharge_coin) + SUM(d.free_coin) + SUM(d.task_coin)) AS totalHomilyLinkSum " +
  102. "FROM detail d " +
  103. "JOIN product p ON d.product_id = p.product_id " +
  104. "WHERE d.update_type = '消费' AND " +
  105. " d.consume_platform = 'HomilyChart' " +
  106. "GROUP BY p.subjects ")
  107. List<Statistics> getHomilyLinkSum();
  108. //--------------------------------------------------------------------------------------------//
  109. @Select({"SELECT today.rechargeSumCoin AS todayRecharge," ,
  110. "yesterday.rechargeSumCoin AS yesterdayRecharge," ,
  111. "today.freeSumCoin AS todayFree,",
  112. "yesterday.freeSumCoin AS yesterdayFree," ,
  113. "today.taskSumCoin AS todayTask," ,
  114. "yesterday.taskSumCoin AS yesterdayTask," ,
  115. "(today.rechargeSumCoin + today.freeSumCoin + today.taskSumCoin) AS todayTotalCoin," ,
  116. "(yesterday.rechargeSumCoin + yesterday.freeSumCoin + yesterday.taskSumCoin) AS yesterdayTotalCoin," ,
  117. "((today.rechargeSumCoin + today.freeSumCoin + today.taskSumCoin) -(yesterday.rechargeSumCoin + yesterday.freeSumCoin + yesterday.taskSumCoin)) AS coinDifference" ,
  118. "FROM (SELECT SUM(recharge_coin) AS rechargeSumCoin, SUM(free_coin) AS freeSumCoin, SUM(task_coin) AS taskSumCoin FROM detail WHERE create_time <= CURRENT_TIMESTAMP) AS today" ,
  119. "JOIN ( SELECT SUM(recharge_coin) AS rechargeSumCoin,SUM(free_coin) AS freeSumCoin, SUM(task_coin) AS taskSumCoin FROM detail WHERE DATE(create_time) <= CURDATE() - INTERVAL 1 DAY) AS yesterday"})
  120. SumCoin getSumCoin();
  121. @Select({"SELECT SUM(CASE WHEN update_type = '消费' THEN recharge_coin ELSE 0 END) AS yearRecharge," ,
  122. "SUM(CASE WHEN update_type = '消费' THEN free_coin ELSE 0 END) AS yearFree," +
  123. " SUM(CASE WHEN update_type = '消费' THEN task_coin ELSE 0 END) AS yearTask," +
  124. " SUM(CASE WHEN update_type = '消费' THEN recharge_coin + free_coin + task_coin ELSE 0 END) AS yearConsumeCoin,",
  125. " SUM(CASE WHEN update_type = '退款' THEN recharge_coin ELSE 0 END) AS totalRechargeRefund," ,
  126. " SUM(CASE WHEN update_type = '退款' THEN free_coin ELSE 0 END) AS totalFreeRefund," ,
  127. " SUM(CASE WHEN update_type = '退款' THEN task_coin ELSE 0 END) AS totalTaskRefund," ,
  128. " SUM(CASE WHEN update_type = '退款' THEN recharge_coin + free_coin + task_coin ELSE 0 END) AS yearRefundCoin," ,
  129. " SUM(CASE WHEN update_type = '消费' THEN recharge_coin + free_coin + task_coin ELSE 0 END)+SUM(CASE WHEN update_type = '退款' THEN recharge_coin + free_coin + task_coin ELSE 0 END) AS yearsumCoin,",
  130. " SUM(CASE WHEN update_type IN ('消费', '退款') THEN recharge_coin ELSE 0 END) AS yearSumRechargeCoin,",
  131. " SUM(CASE WHEN update_type IN ('消费', '退款') THEN free_coin ELSE 0 END) AS yearSumFreeCoin,",
  132. " SUM(CASE WHEN update_type IN ('消费', '退款') THEN task_coin ELSE 0 END) AS yearSumTaskCoin",
  133. "FROM `detail`WHERE YEAR(create_time) = YEAR(CURRENT_DATE)" ,
  134. " AND create_time <= NOW()"})
  135. SumCoin getYearConsumeCoin();
  136. @Select({"SELECT SUM(CASE WHEN update_type = '消费' THEN recharge_coin ELSE 0 END) AS todayRecharge," ,
  137. "SUM(CASE WHEN update_type = '消费' THEN free_coin ELSE 0 END) AS todayFree," +
  138. " SUM(CASE WHEN update_type = '消费' THEN task_coin ELSE 0 END) AS todayTask," +
  139. " SUM(CASE WHEN update_type = '消费' THEN recharge_coin + free_coin + task_coin ELSE 0 END) AS dayConsumeCoin,",
  140. " SUM(CASE WHEN update_type = '退款' THEN recharge_coin ELSE 0 END) AS total_recharge_refund," ,
  141. " SUM(CASE WHEN update_type = '退款' THEN free_coin ELSE 0 END) AS total_free_refund," ,
  142. " SUM(CASE WHEN update_type = '退款' THEN task_coin ELSE 0 END) AS total_task_refund," ,
  143. " SUM(CASE WHEN update_type = '退款' THEN recharge_coin + free_coin + task_coin ELSE 0 END) AS dayRefundCoin," ,
  144. " SUM(CASE WHEN update_type = '消费' THEN recharge_coin + free_coin + task_coin ELSE 0 END)+SUM(CASE WHEN update_type = '退款' THEN recharge_coin + free_coin + task_coin ELSE 0 END) AS daysumCoin",
  145. "FROM `detail` WHERE DATE(create_time) = CURDATE() - INTERVAL 1 DAY"})
  146. SumCoin getDayConsumeCoin();
  147. // @Select({"SELECT DATE_FORMAT(create_time, '%Y-%m') AS month," ,
  148. // " SUM(recharge_coin) AS rechargeSumCoin," ,
  149. // " SUM(free_coin) AS freeSumCoin,",
  150. // " SUM(task_coin) AS taskSumCoin" ,
  151. // "FROM `detail`" ,
  152. // "WHERE create_time BETWEEN DATE_SUB(CURDATE(), INTERVAL 10 MONTH) AND CURDATE() AND update_type='充值'" ,
  153. // "GROUP BY DATE_FORMAT(create_time, '%Y-%m')" ,
  154. // "ORDER BY DATE_FORMAT(create_time, '%Y-%m') DESC "})
  155. // List<SumCoin> getMediuPayCoin();
  156. @Select({
  157. "SELECT m.month,",
  158. " COALESCE(SUM(d.recharge_coin), 0) AS rechargeSumCoin,",
  159. " COALESCE(SUM(d.free_coin), 0) AS freeSumCoin,",
  160. " COALESCE(SUM(d.task_coin), 0) AS taskSumCoin",
  161. "FROM (",
  162. " SELECT DATE_FORMAT(DATE_SUB(CURDATE(), INTERVAL n MONTH), '%Y-%m') AS month",
  163. " FROM (",
  164. " SELECT 0 AS n UNION ALL SELECT 1 UNION ALL SELECT 2 UNION ALL SELECT 3",
  165. " UNION ALL SELECT 4 UNION ALL SELECT 5 UNION ALL SELECT 6 UNION ALL SELECT 7",
  166. " UNION ALL SELECT 8 UNION ALL SELECT 9 UNION ALL SELECT 10",
  167. " ) AS numbers",
  168. ") AS m",
  169. "LEFT JOIN detail d ON DATE_FORMAT(d.create_time, '%Y-%m') = m.month AND d.update_type = '充值'",
  170. "GROUP BY m.month",
  171. "ORDER BY m.month DESC"
  172. })
  173. List<SumCoin> getMediuPayCoin();
  174. // @Select({"SELECT DATE_FORMAT(create_time, '%Y-%m') AS month," ,
  175. // " SUM(recharge_coin) AS rechargeSumCoin," ,
  176. // " SUM(free_coin) AS freeSumCoin,",
  177. // " SUM(task_coin) AS taskSumCoin" ,
  178. // "FROM `detail`" ,
  179. // "WHERE create_time BETWEEN DATE_SUB(CURDATE(), INTERVAL 10 MONTH) AND CURDATE() AND update_type='消费'" ,
  180. // "GROUP BY DATE_FORMAT(create_time, '%Y-%m')" ,
  181. // "ORDER BY DATE_FORMAT(create_time, '%Y-%m') DESC "})
  182. // List<SumCoin> getMediuConsumeCoin();
  183. @Select({
  184. "SELECT m.month,",
  185. " COALESCE(SUM(d.recharge_coin), 0) AS rechargeSumCoin,",
  186. " COALESCE(SUM(d.free_coin), 0) AS freeSumCoin,",
  187. " COALESCE(SUM(d.task_coin), 0) AS taskSumCoin",
  188. "FROM (",
  189. " SELECT DATE_FORMAT(DATE_SUB(CURDATE(), INTERVAL n MONTH), '%Y-%m') AS month",
  190. " FROM (",
  191. " SELECT 0 AS n UNION ALL SELECT 1 UNION ALL SELECT 2 UNION ALL SELECT 3",
  192. " UNION ALL SELECT 4 UNION ALL SELECT 5 UNION ALL SELECT 6 UNION ALL SELECT 7",
  193. " UNION ALL SELECT 8 UNION ALL SELECT 9 UNION ALL SELECT 10",
  194. " ) AS numbers",
  195. ") AS m",
  196. "LEFT JOIN detail d ON DATE_FORMAT(d.create_time, '%Y-%m') = m.month AND d.update_type = '消费'",
  197. "GROUP BY m.month",
  198. "ORDER BY m.month DESC"
  199. })
  200. List<SumCoin> getMediuConsumeCoin();
  201. @Select({"SELECT today.jwcode," ,
  202. "today.rechargeSumCoin AS todayRecharge," ,
  203. "today.freeSumCoin AS todayFree,",
  204. "today.taskSumCoin AS todayTask," ,
  205. "(today.rechargeSumCoin + today.freeSumCoin + today.taskSumCoin) AS todayTotalCoin" ,
  206. "FROM (SELECT jwcode, SUM(recharge_coin) AS rechargeSumCoin, SUM(free_coin) AS freeSumCoin, SUM(task_coin) AS taskSumCoin FROM detail WHERE create_time <= CURRENT_TIMESTAMP) AS today" ,
  207. "where jwcode=#{jwcode}"})
  208. SumCoin getMess(Integer jwcode);
  209. @Select({"SELECT ad.area," ,
  210. " SUM(d.recharge_coin) AS totalRecharge," ,
  211. " SUM(d.free_coin) AS totalFree," ,
  212. " SUM(d.task_coin) AS totalTask," ,
  213. " (SUM(d.recharge_coin) + SUM(d.free_coin) + SUM(d.task_coin)) AS todayTotalCoin" ,
  214. "FROM detail d" ,
  215. "INNER JOIN activity a ON d.activity_id = a.activity_id" ,
  216. "INNER JOIN admin ad ON a.admin_id = ad.admin_id" ,
  217. "where d.update_type='充值'",
  218. "GROUP BY ad.area" ,
  219. "ORDER BY ad.area ASC "
  220. })
  221. List<SumCoin> getMediumAreaPay();
  222. @Select({"SELECT ad.area," ,
  223. " SUM(d.recharge_coin) AS totalRecharge," ,
  224. " SUM(d.free_coin) AS totalFree," ,
  225. " SUM(d.task_coin) AS totalTask," ,
  226. " (SUM(d.recharge_coin) + SUM(d.free_coin) + SUM(d.task_coin)) AS todayTotalCoin" ,
  227. "FROM detail d" ,
  228. "INNER JOIN admin ad ON ad.admin_id = d.admin_id",
  229. "WHERE d.update_type = '消费'",
  230. "GROUP BY ad.area",
  231. "ORDER BY ad.area ASC"
  232. })
  233. List<SumCoin> getMediumAreaConsume();
  234. }