|
|
<?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>
|