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
374 lines
17 KiB
<?xml version="1.0" encoding="UTF-8"?>
|
|
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
|
|
<mapper namespace="com.example.demo.mapper.StatisticsMapper">
|
|
<!--新增part2统计数据-->
|
|
<insert id="insertPart2">
|
|
INSERT INTO statistics (
|
|
market, current_datetime,
|
|
recharge, money,
|
|
consume_permanent, consume_free_june,
|
|
consume_free_december, consume_task,
|
|
refund_permanent, refund_free_june,
|
|
refund_free_december,refund_task,
|
|
recharge_num, first_recharge
|
|
) VALUES (
|
|
#{market}, #{currentDatetime},
|
|
#{recharge}, #{money},
|
|
#{consumePermanent}, #{consumeFreeJune},
|
|
#{consumeFreeDecember}, #{consumeTask},
|
|
#{refundPermanent}, #{refundFreeJune},
|
|
#{refundFreeDecember}, #{refundTask},
|
|
#{rechargeNum}, #{firstRecharge}
|
|
)
|
|
</insert>
|
|
<!--新增part1统计数据-->
|
|
<insert id="insertPart1">
|
|
INSERT INTO statistics (
|
|
market, current_datetime,
|
|
current_gold, daily_change,
|
|
current_permanent, current_free_june,
|
|
current_free_december, current_task
|
|
|
|
) VALUES (
|
|
#{market}, #{currentDatetime},
|
|
#{currentGold}, #{dailyChange},
|
|
#{currentPermanent}, #{currentFreeJune},
|
|
#{currentFreeDecember}, #{currentTask}
|
|
|
|
)
|
|
</insert>
|
|
<!--新增年度统计-->
|
|
<insert id="insertYear">
|
|
INSERT INTO statistics (
|
|
market, current_datetime,
|
|
yearly_recharge,
|
|
yearly_money,
|
|
yearly_consume,
|
|
yearly_refund,
|
|
yearly_recharge_num
|
|
|
|
) VALUES (
|
|
#{market}, #{currentDatetime},
|
|
#{yearlyRecharge},#{yearlyMoney},
|
|
#{yearlyConsume},#{yearlyRefund},
|
|
#{yearlyRechargeNum}
|
|
|
|
)
|
|
</insert>
|
|
<insert id="batchInsertPart1">
|
|
<foreach collection="list" item="s" separator=";">
|
|
INSERT INTO statistics (
|
|
market, current_datetime,
|
|
current_gold, daily_change,
|
|
current_permanent, current_free_june,
|
|
current_free_december, current_task
|
|
) VALUES (
|
|
#{s.market}, #{s.currentDatetime},
|
|
#{s.currentGold}, #{s.dailyChange},
|
|
#{s.currentPermanent}, #{s.currentFreeJune},
|
|
#{s.currentFreeDecember}, #{s.currentTask}
|
|
)
|
|
ON DUPLICATE KEY UPDATE
|
|
current_gold = VALUES(current_gold),
|
|
daily_change = VALUES(daily_change),
|
|
current_permanent = VALUES(current_permanent),
|
|
current_free_june = VALUES(current_free_june),
|
|
current_free_december = VALUES(current_free_december),
|
|
current_task = VALUES(current_task)
|
|
</foreach>
|
|
</insert>
|
|
<insert id="batchInsertPart2">
|
|
<foreach collection="list" item="s" separator=";">
|
|
INSERT INTO statistics (
|
|
market, current_datetime,
|
|
recharge, money,
|
|
consume_permanent, consume_free_june,
|
|
consume_free_december, consume_task,
|
|
refund_permanent, refund_free_june,
|
|
refund_free_december, refund_task,
|
|
recharge_num, first_recharge
|
|
) VALUES (
|
|
#{s.market}, #{s.currentDatetime},
|
|
#{s.recharge}, #{s.money},
|
|
#{s.consumePermanent}, #{s.consumeFreeJune},
|
|
#{s.consumeFreeDecember}, #{s.consumeTask},
|
|
#{s.refundPermanent}, #{s.refundFreeJune},
|
|
#{s.refundFreeDecember}, #{s.refundTask},
|
|
#{s.rechargeNum}, #{s.firstRecharge}
|
|
)
|
|
ON DUPLICATE KEY UPDATE
|
|
recharge = VALUES(recharge),
|
|
money = VALUES(money),
|
|
consume_permanent = VALUES(consume_permanent),
|
|
consume_free_june = VALUES(consume_free_june),
|
|
consume_free_december = VALUES(consume_free_december),
|
|
consume_task = VALUES(consume_task),
|
|
refund_permanent = VALUES(refund_permanent),
|
|
refund_free_june = VALUES(refund_free_june),
|
|
refund_free_december = VALUES(refund_free_december),
|
|
refund_task = VALUES(refund_task),
|
|
recharge_num = VALUES(recharge_num),
|
|
first_recharge = VALUES(first_recharge)
|
|
</foreach>
|
|
</insert>
|
|
<insert id="batchInsertYear">
|
|
<foreach collection="list" item="s" separator=";">
|
|
INSERT INTO statistics (
|
|
market, current_datetime,
|
|
yearly_recharge,
|
|
yearly_money,
|
|
yearly_consume,
|
|
yearly_refund,
|
|
yearly_recharge_num
|
|
) VALUES (
|
|
#{s.market}, #{s.currentDatetime},
|
|
#{s.yearlyRecharge},
|
|
#{s.yearlyMoney},
|
|
#{s.yearlyConsume},
|
|
#{s.yearlyRefund},
|
|
#{s.yearlyRechargeNum}
|
|
)
|
|
ON DUPLICATE KEY UPDATE
|
|
yearly_recharge = VALUES(yearly_recharge),
|
|
yearly_money = VALUES(yearly_money),
|
|
yearly_consume = VALUES(yearly_consume),
|
|
yearly_refund = VALUES(yearly_refund),
|
|
yearly_recharge_num = VALUES(yearly_recharge_num)
|
|
</foreach>
|
|
</insert>
|
|
<!--更新part2统计数据-->
|
|
<update id="updatePart2" parameterType="map">
|
|
UPDATE statistics
|
|
SET
|
|
|
|
recharge = #{recharge},
|
|
money = #{money},
|
|
consume_permanent = #{consumePermanent},
|
|
consume_free_june = #{consumeFreeJune},
|
|
consume_free_december = #{consumeFreeDecember},
|
|
consume_task = #{consumeTask},
|
|
refund_permanent = #{refundPermanent},
|
|
refund_free_june = #{refundFreeJune},
|
|
refund_free_december = #{refundFreeDecember},
|
|
refund_task = #{refundTask},
|
|
recharge_num = #{rechargeNum},
|
|
first_recharge = #{firstRecharge}
|
|
<if test="updateTime != null">
|
|
,update_time = #{updateTime}
|
|
</if>
|
|
WHERE market = #{market} and current_datetime = #{currentDatetime}
|
|
</update>
|
|
<!--更新part1统计数据-->
|
|
<update id="updatePart1" parameterType="map">
|
|
update statistics
|
|
SET
|
|
current_gold = #{currentGold},
|
|
daily_change = #{dailyChange},
|
|
current_permanent = #{currentPermanent},
|
|
current_free_june = #{currentFreeJune},
|
|
current_free_december = #{currentFreeDecember},
|
|
current_task = #{currentTask}
|
|
WHERE market = #{market} and current_datetime = #{currentDatetime}
|
|
</update>
|
|
<!--更新年度统计数据-->
|
|
<update id="updateYear" parameterType="map">
|
|
update statistics
|
|
SET
|
|
yearly_recharge=#{yearlyRecharge},
|
|
yearly_money=#{yearlyMoney},
|
|
yearly_consume=#{yearlyConsume},
|
|
yearly_refund=#{yearlyRefund},
|
|
yearly_recharge_num=#{yearlyRechargeNum}
|
|
WHERE market = #{market} and current_datetime = #{currentDatetime}
|
|
</update>
|
|
|
|
<!--根据地区、审核状态、起止时间查询订单表数据-->
|
|
<select id="findByMarketAndAuditStatus"
|
|
resultType="com.example.demo.domain.entity.UserGoldRecord">
|
|
SELECT u.market, ugr.*
|
|
FROM user_gold_record ugr
|
|
INNER JOIN user u ON ugr.jwcode = u.jwcode
|
|
WHERE u.market = #{market}
|
|
AND ugr.audit_status IN
|
|
<foreach item="status" collection="auditStatusList" open="(" separator="," close=")">
|
|
#{status}
|
|
</foreach>
|
|
and ugr.flag=1
|
|
AND ugr.create_time BETWEEN #{startTime} AND #{endTime}
|
|
</select>
|
|
<!-- 计算该天充值人数-->
|
|
<select id="countRechargeNum" resultType="java.lang.Integer">
|
|
SELECT COUNT(DISTINCT ugr.jwcode)
|
|
FROM user_gold_record ugr
|
|
INNER JOIN user u ON ugr.jwcode = u.jwcode
|
|
WHERE u.market = #{market}
|
|
AND ugr.type=0
|
|
AND ugr.audit_status IN (1,3)
|
|
AND ugr.audit_time BETWEEN #{startTime} AND #{endTime}
|
|
</select>
|
|
<!--计算该天首充人数-->
|
|
<select id="countFirstRecharge" resultType="java.lang.Integer">
|
|
SELECT COUNT(DISTINCT ugr.jwcode)
|
|
FROM user_gold_record ugr
|
|
INNER JOIN user u ON ugr.jwcode = u.jwcode
|
|
WHERE u.market = #{market}
|
|
AND ugr.type=0
|
|
AND ugr.audit_status IN (1,3)
|
|
AND ugr.audit_time BETWEEN #{startTime} AND #{endTime}
|
|
AND u.first_recharge = #{startTime}
|
|
</select>
|
|
<!--获取某地区某时间所在日期的数据(仅一条)-->
|
|
<select id="selectByMarketAndDate" resultType="com.example.demo.domain.entity.Statistics">
|
|
SELECT *
|
|
FROM statistics
|
|
WHERE market = #{market}
|
|
AND current_datetime BETWEEN #{startDate} AND #{endDate}
|
|
|
|
</select>
|
|
<select id="sumCurrentPermanentGold" resultType="java.lang.Integer">
|
|
SELECT COALESCE(SUM(current_permanent_gold), 0)
|
|
FROM user
|
|
WHERE user.market = #{market}
|
|
</select>
|
|
<select id="sumCurrentFreeJune" resultType="java.lang.Integer">
|
|
SELECT COALESCE(SUM(u.current_free_june),0)
|
|
FROM user as u
|
|
WHERE u.market = #{market}
|
|
</select>
|
|
<select id="sumCurrentFreeDecember" resultType="java.lang.Integer">
|
|
SELECT COALESCE(SUM(u.current_free_december),0)
|
|
FROM user as u
|
|
WHERE u.market = #{market}
|
|
</select>
|
|
<select id="sumCurrentTaskGold" resultType="java.lang.Integer">
|
|
SELECT COALESCE(SUM(u.current_task_gold),0)
|
|
FROM user as u
|
|
WHERE u.market = #{market}
|
|
</select>
|
|
<select id="selectSumByMarketAndDate" resultType="com.example.demo.domain.entity.Statistics">
|
|
select sum(s.recharge) as recharge,
|
|
sum(s.money) as money,
|
|
sum(s.consume_permanent) as consume_permanent,
|
|
sum(s.consume_free_june) as consume_free_june,
|
|
sum(s.consume_free_december) as consume_free_december,
|
|
sum(s.consume_task) as consume_task,
|
|
sum(s.recharge_num) as recharge_num
|
|
from statistics as s
|
|
WHERE market = #{market}
|
|
AND current_datetime >= #{startDate}
|
|
AND current_datetime <= #{endDate}
|
|
</select>
|
|
<select id="selectByMarketsAndDate" resultType="com.example.demo.domain.entity.Statistics">
|
|
SELECT * FROM statistics
|
|
WHERE market IN
|
|
<foreach item="market" collection="markets" open="(" separator="," close=")">
|
|
#{market}
|
|
</foreach>
|
|
AND current_datetime BETWEEN #{startDate} AND #{endDate}
|
|
</select>
|
|
<select id="listPart1All" resultType="com.example.demo.domain.entity.Statistics">
|
|
SELECT
|
|
market,
|
|
#{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 = u.market
|
|
AND s.current_datetime = DATE_SUB(#{today}, INTERVAL 1 DAY)
|
|
LIMIT 1
|
|
), 0
|
|
) AS daily_change
|
|
FROM user u
|
|
GROUP BY market
|
|
</select>
|
|
<select id="listPart2All" resultType="com.example.demo.domain.entity.Statistics">
|
|
SELECT
|
|
u.market,
|
|
#{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 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.free_june END),0) AS consume_free_june,
|
|
COALESCE(SUM(CASE WHEN ugr.type=1 THEN ugr.free_december END),0) AS consume_free_december,
|
|
COALESCE(SUM(CASE WHEN ugr.type=1 THEN ugr.task_gold END),0) AS consume_task,
|
|
COALESCE(SUM(CASE WHEN ugr.type=2 THEN ugr.permanent_gold END),0) AS refund_permanent,
|
|
COALESCE(SUM(CASE WHEN ugr.type=2 THEN ugr.free_june END),0) AS refund_free_june,
|
|
COALESCE(SUM(CASE WHEN ugr.type=2 THEN ugr.free_december END),0) AS refund_free_december,
|
|
COALESCE(SUM(CASE WHEN ugr.type=2 THEN ugr.task_gold END),0) AS refund_task,
|
|
COUNT(DISTINCT CASE WHEN ugr.type=0 THEN ugr.jwcode END) AS recharge_num,
|
|
COUNT(DISTINCT CASE WHEN ugr.type=0
|
|
AND u.first_recharge BETWEEN #{start} AND #{end} THEN ugr.jwcode END) AS first_recharge
|
|
FROM user_gold_record ugr
|
|
JOIN user u ON ugr.jwcode = u.jwcode
|
|
WHERE ugr.audit_status IN (1,3)
|
|
AND ugr.flag = 1
|
|
AND ugr.create_time BETWEEN #{start} AND #{end}
|
|
GROUP BY u.market
|
|
</select>
|
|
<select id="listYearAll" resultType="com.example.demo.domain.entity.Statistics">
|
|
SELECT market,
|
|
COALESCE(SUM(recharge),0) AS yearly_recharge,
|
|
#{today} AS current_datetime,
|
|
COALESCE(SUM(money),0) AS yearly_money,
|
|
COALESCE(SUM(consume_permanent+consume_free_june+consume_free_december+consume_task),0) AS yearly_consume,
|
|
COALESCE(SUM(refund_permanent+refund_free_june+refund_free_december+refund_task),0) AS yearly_refund,
|
|
COALESCE(SUM(recharge_num),0) AS yearly_recharge_num
|
|
FROM statistics
|
|
WHERE current_datetime BETWEEN #{yearStart} AND #{end}
|
|
GROUP BY market
|
|
</select>
|
|
<select id="listPart2RangeAll" resultType="com.example.demo.domain.entity.Statistics">
|
|
SELECT
|
|
u.market,
|
|
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 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.free_june END),0) AS consume_free_june,
|
|
COALESCE(SUM(CASE WHEN ugr.type=1 THEN ugr.free_december END),0) AS consume_free_december,
|
|
COALESCE(SUM(CASE WHEN ugr.type=1 THEN ugr.task_gold END),0) AS consume_task,
|
|
COALESCE(SUM(CASE WHEN ugr.type=2 THEN ugr.permanent_gold END),0) AS refund_permanent,
|
|
COALESCE(SUM(CASE WHEN ugr.type=2 THEN ugr.free_june END),0) AS refund_free_june,
|
|
COALESCE(SUM(CASE WHEN ugr.type=2 THEN ugr.free_december END),0) AS refund_free_december,
|
|
COALESCE(SUM(CASE WHEN ugr.type=2 THEN ugr.task_gold END),0) AS refund_task,
|
|
COUNT(DISTINCT CASE WHEN ugr.type=0 THEN ugr.jwcode END) AS recharge_num,
|
|
COUNT(DISTINCT CASE WHEN ugr.type=0
|
|
AND u.first_recharge BETWEEN d.date_start AND d.date_end THEN ugr.jwcode END) AS first_recharge
|
|
FROM
|
|
-- 生成 7 天日期序列
|
|
(
|
|
SELECT DATE_SUB(CURDATE(), INTERVAL seq DAY) AS create_date,
|
|
DATE_SUB(CURDATE(), INTERVAL seq DAY) AS date_start,
|
|
DATE_ADD(DATE_SUB(CURDATE(), INTERVAL seq DAY), INTERVAL 1 DAY) AS date_end
|
|
FROM (
|
|
SELECT 0 AS seq UNION ALL SELECT 1 UNION ALL SELECT 2 UNION ALL
|
|
SELECT 3 UNION ALL SELECT 4 UNION ALL SELECT 5 UNION ALL SELECT 6
|
|
) AS days
|
|
) d
|
|
JOIN user_gold_record ugr
|
|
ON ugr.create_time between d.date_start AND d.date_end
|
|
JOIN user u
|
|
ON ugr.jwcode = u.jwcode
|
|
WHERE ugr.audit_status IN (1,3)
|
|
AND ugr.flag = 1
|
|
GROUP BY u.market, d.create_date
|
|
</select>
|
|
|
|
|
|
</mapper>
|