Compare commits

...

3 Commits

  1. 77
      src/main/resources/mapper/StatisticsMapper.xml

77
src/main/resources/mapper/StatisticsMapper.xml

@ -3,18 +3,20 @@
<mapper namespace="com.example.demo.mapper.coin.StatisticsMapper"> <mapper namespace="com.example.demo.mapper.coin.StatisticsMapper">
<insert id="batchInsertPart1"> <insert id="batchInsertPart1">
<foreach collection="list" item="s" separator=";">
INSERT INTO statistics ( INSERT INTO statistics (
market, current_datetime, market, current_datetime,
current_gold, daily_change, current_gold, daily_change,
current_permanent, current_free_june, current_permanent, current_free_june,
current_free_december, current_task current_free_december, current_task
) VALUES (
) VALUES
<foreach collection="list" item="s" separator=",">
(
#{s.market}, #{s.currentDatetime}, #{s.market}, #{s.currentDatetime},
#{s.currentGold}, #{s.dailyChange}, #{s.currentGold}, #{s.dailyChange},
#{s.currentPermanent}, #{s.currentFreeJune}, #{s.currentPermanent}, #{s.currentFreeJune},
#{s.currentFreeDecember}, #{s.currentTask} #{s.currentFreeDecember}, #{s.currentTask}
) )
</foreach>
ON DUPLICATE KEY UPDATE ON DUPLICATE KEY UPDATE
current_gold = VALUES(current_gold), current_gold = VALUES(current_gold),
daily_change = VALUES(daily_change), daily_change = VALUES(daily_change),
@ -22,10 +24,8 @@
current_free_june = VALUES(current_free_june), current_free_june = VALUES(current_free_june),
current_free_december = VALUES(current_free_december), current_free_december = VALUES(current_free_december),
current_task = VALUES(current_task) current_task = VALUES(current_task)
</foreach>
</insert> </insert>
<insert id="batchInsertPart2"> <insert id="batchInsertPart2">
<foreach collection="list" item="s" separator=";">
INSERT INTO statistics ( INSERT INTO statistics (
market, current_datetime, market, current_datetime,
recharge, money, recharge, money,
@ -34,7 +34,9 @@
refund_permanent, refund_free_june, refund_permanent, refund_free_june,
refund_free_december, refund_task, refund_free_december, refund_task,
recharge_num, first_recharge recharge_num, first_recharge
) VALUES (
) VALUES
<foreach collection="list" item="s" separator=",">
(
#{s.market}, #{s.currentDatetime}, #{s.market}, #{s.currentDatetime},
#{s.recharge}, #{s.money}, #{s.recharge}, #{s.money},
#{s.consumePermanent}, #{s.consumeFreeJune}, #{s.consumePermanent}, #{s.consumeFreeJune},
@ -43,6 +45,7 @@
#{s.refundFreeDecember}, #{s.refundTask}, #{s.refundFreeDecember}, #{s.refundTask},
#{s.rechargeNum}, #{s.firstRecharge} #{s.rechargeNum}, #{s.firstRecharge}
) )
</foreach>
ON DUPLICATE KEY UPDATE ON DUPLICATE KEY UPDATE
recharge = VALUES(recharge), recharge = VALUES(recharge),
money = VALUES(money), money = VALUES(money),
@ -56,10 +59,8 @@
refund_task = VALUES(refund_task), refund_task = VALUES(refund_task),
recharge_num = VALUES(recharge_num), recharge_num = VALUES(recharge_num),
first_recharge = VALUES(first_recharge) first_recharge = VALUES(first_recharge)
</foreach>
</insert> </insert>
<insert id="batchInsertYear"> <insert id="batchInsertYear">
<foreach collection="list" item="s" separator=";">
INSERT INTO statistics ( INSERT INTO statistics (
market, current_datetime, market, current_datetime,
yearly_recharge, yearly_recharge,
@ -67,7 +68,9 @@
yearly_consume, yearly_consume,
yearly_refund, yearly_refund,
yearly_recharge_num yearly_recharge_num
) VALUES (
) VALUES
<foreach collection="list" item="s" separator=",">
(
#{s.market}, #{s.currentDatetime}, #{s.market}, #{s.currentDatetime},
#{s.yearlyRecharge}, #{s.yearlyRecharge},
#{s.yearlyMoney}, #{s.yearlyMoney},
@ -75,13 +78,13 @@
#{s.yearlyRefund}, #{s.yearlyRefund},
#{s.yearlyRechargeNum} #{s.yearlyRechargeNum}
) )
</foreach>
ON DUPLICATE KEY UPDATE ON DUPLICATE KEY UPDATE
yearly_recharge = VALUES(yearly_recharge), yearly_recharge = VALUES(yearly_recharge),
yearly_money = VALUES(yearly_money), yearly_money = VALUES(yearly_money),
yearly_consume = VALUES(yearly_consume), yearly_consume = VALUES(yearly_consume),
yearly_refund = VALUES(yearly_refund), yearly_refund = VALUES(yearly_refund),
yearly_recharge_num = VALUES(yearly_recharge_num) yearly_recharge_num = VALUES(yearly_recharge_num)
</foreach>
</insert> </insert>
<!-- 计算该天充值人数--> <!-- 计算该天充值人数-->
@ -111,43 +114,30 @@
</foreach> </foreach>
AND current_datetime BETWEEN #{startDate} AND #{endDate} AND current_datetime BETWEEN #{startDate} AND #{endDate}
</select> </select>
<select id="listPart1All" resultType="com.example.demo.domain.entity.Statistics"> <select id="listPart1All" resultType="com.example.demo.domain.entity.Statistics">
SELECT SELECT
m.name as market, m.name as market,
#{today} AS current_datetime, #{today} AS current_datetime,
COALESCE(SUM(current_permanent_gold),0) +
COALESCE(SUM(current_free_june),0) +
COALESCE(SUM(current_free_december),0) +
COALESCE(SUM(current_task_gold),0) AS current_gold,
COALESCE(SUM(current_permanent_gold),0) AS current_permanent,
COALESCE(SUM(current_free_june),0) AS current_free_june,
COALESCE(SUM(current_free_december),0) AS current_free_december,
COALESCE(SUM(current_task_gold),0) AS current_task,
-- 与昨天差值(从 statistics 表取)
(
COALESCE(SUM(u.current_permanent_gold),0) +
COALESCE(SUM(u.current_free_june),0) +
COALESCE(SUM(u.current_free_december),0) +
COALESCE(SUM(u.current_task_gold),0)
) - COALESCE(
(
SELECT s.current_gold
FROM statistics s
WHERE s.market = m.name
AND s.current_datetime = DATE_SUB(#{today}, INTERVAL 1 DAY)
LIMIT 1
), 0
) AS daily_change
COALESCE(SUM(u.current_permanent_gold + u.current_free_june + u.current_free_december + u.current_task_gold), 0)
AS current_gold,
COALESCE(SUM(u.current_permanent_gold), 0) AS current_permanent,
COALESCE(SUM(u.current_free_june), 0) AS current_free_june,
COALESCE(SUM(u.current_free_december), 0) AS current_free_december,
COALESCE(SUM(u.current_task_gold), 0) AS current_task,
COALESCE(SUM(u.current_permanent_gold + u.current_free_june + u.current_free_december + u.current_task_gold), 0)
- COALESCE(s.current_gold, 0) AS daily_change
FROM user u FROM user u
left join market m on u.market=m.id
where m.name IS NOT NULL
GROUP BY market
INNER JOIN market m ON u.market = m.id
INNER JOIN statistics s ON s.market = m.name
AND s.current_datetime = DATE_SUB(#{today}, INTERVAL 1 DAY)
WHERE m.name IS NOT NULL
GROUP BY m.name
</select> </select>
<select id="listPart2All" resultType="com.example.demo.domain.entity.Statistics"> <select id="listPart2All" resultType="com.example.demo.domain.entity.Statistics">
SELECT SELECT
m.name as market, m.name as market,
'2025-08-04' AS current_datetime,
#{today} AS current_datetime,
COALESCE(SUM(CASE WHEN ugr.type=0 THEN ugr.permanent_gold+ugr.free_june+ugr.free_december+ugr.task_gold END),0) AS recharge, COALESCE(SUM(CASE WHEN ugr.type=0 THEN ugr.permanent_gold+ugr.free_june+ugr.free_december+ugr.task_gold END),0) AS recharge,
COALESCE(SUM(CASE WHEN ugr.type=0 THEN ugr.permanent_gold END),0) AS money, COALESCE(SUM(CASE WHEN ugr.type=0 THEN ugr.permanent_gold END),0) AS money,
COALESCE(SUM(CASE WHEN ugr.type=1 THEN -ugr.permanent_gold END),0) AS consume_permanent, COALESCE(SUM(CASE WHEN ugr.type=1 THEN -ugr.permanent_gold END),0) AS consume_permanent,
@ -163,7 +153,7 @@
AND u.first_recharge BETWEEN #{start} AND #{end} THEN ugr.jwcode END) AS first_recharge AND u.first_recharge BETWEEN #{start} AND #{end} THEN ugr.jwcode END) AS first_recharge
FROM user_gold_record ugr FROM user_gold_record ugr
JOIN user u ON ugr.jwcode = u.jwcode JOIN user u ON ugr.jwcode = u.jwcode
left join market m on u.market=m.id
inner join market m on u.market=m.id
WHERE ugr.audit_status IN (1,3) WHERE ugr.audit_status IN (1,3)
AND ugr.flag = 1 AND ugr.flag = 1
AND ugr.create_time BETWEEN #{start} AND #{end} AND ugr.create_time BETWEEN #{start} AND #{end}
@ -180,7 +170,7 @@
COALESCE(SUM(s.refund_permanent+s.refund_free_june+s.refund_free_december+s.refund_task),0) AS yearly_refund, COALESCE(SUM(s.refund_permanent+s.refund_free_june+s.refund_free_december+s.refund_task),0) AS yearly_refund,
COALESCE(SUM(s.recharge_num),0) AS yearly_recharge_num COALESCE(SUM(s.recharge_num),0) AS yearly_recharge_num
FROM statistics s FROM statistics s
left join market m on s.market=m.id
inner join market m on s.market=m.id
WHERE current_datetime BETWEEN #{yearStart} AND #{end} AND m.name IS NOT NULL WHERE current_datetime BETWEEN #{yearStart} AND #{end} AND m.name IS NOT NULL
GROUP BY market GROUP BY market
</select> </select>
@ -188,7 +178,8 @@
SELECT SELECT
m.name as market, m.name as market,
DATE(ugr.create_time) AS current_datetime, -- 只保留日期 DATE(ugr.create_time) AS current_datetime, -- 只保留日期
COALESCE(SUM(CASE WHEN ugr.type=0 THEN ugr.permanent_gold+ugr.free_june+ugr.free_december+ugr.task_gold END),0) AS recharge,
COALESCE(SUM(CASE WHEN ugr.type=0 THEN ugr.permanent_gold+ugr.free_june+ugr.free_december+ugr.task_gold END),0)
AS recharge,
COALESCE(SUM(CASE WHEN ugr.type=0 THEN ugr.permanent_gold END),0) AS money, COALESCE(SUM(CASE WHEN ugr.type=0 THEN ugr.permanent_gold END),0) AS money,
COALESCE(SUM(CASE WHEN ugr.type=1 THEN -ugr.permanent_gold END),0) AS consume_permanent, COALESCE(SUM(CASE WHEN ugr.type=1 THEN -ugr.permanent_gold END),0) AS consume_permanent,
COALESCE(SUM(CASE WHEN ugr.type=1 THEN -ugr.free_june END),0) AS consume_free_june, COALESCE(SUM(CASE WHEN ugr.type=1 THEN -ugr.free_june END),0) AS consume_free_june,
@ -212,10 +203,10 @@
SELECT 3 UNION ALL SELECT 4 UNION ALL SELECT 5 UNION ALL SELECT 6 SELECT 3 UNION ALL SELECT 4 UNION ALL SELECT 5 UNION ALL SELECT 6
) AS days ) AS days
) d ) d
JOIN user_gold_record ugr
ON ugr.create_time between d.date_start AND d.date_end
JOIN user_gold_record ugr ON ugr.create_time &gt;= DATE_SUB(CURDATE(), INTERVAL 6 DAY)
AND ugr.create_time &lt;= TIMESTAMP(CURDATE(), '23:59:59')
JOIN user u ON ugr.jwcode = u.jwcode JOIN user u ON ugr.jwcode = u.jwcode
left join market m on u.market=m.id
inner join market m on u.market=m.id
WHERE ugr.audit_status IN (1,3) WHERE ugr.audit_status IN (1,3)
AND ugr.flag = 1 AND ugr.flag = 1
AND m.name IS NOT NULL AND m.name IS NOT NULL

Loading…
Cancel
Save