You've already forked FrameTour-BE
refactor(statistics): 切换数据查询服务并优化扫码统计功能
- 将 BrokerBiz 和 OrderBiz 中的数据查询从 StatisticsMapper 切换到 StatsQueryService - 更新 StatisticsServiceImpl 使用 StatsQueryService 进行数据查询 - 添加订单数据合并功能到扫码统计图表中 - 重构扫码统计查询逻辑以支持统计数据和订单数据的合并显示 - 新增按小时和按日期统计订单数据的查询方法 - 优化 SQL 查询以分离统计数据和订单数据的查询逻辑
This commit is contained in:
@@ -386,11 +386,11 @@
|
||||
</insert>
|
||||
<select id="scanCodeMemberChartByHour" resultType="java.util.HashMap">
|
||||
WITH RECURSIVE hour_series AS (
|
||||
SELECT
|
||||
SELECT
|
||||
#{startTime} AS hour_time,
|
||||
DATE_FORMAT(#{startTime}, '%m-%d %H') AS HOUR
|
||||
UNION ALL
|
||||
SELECT
|
||||
SELECT
|
||||
DATE_ADD(hour_time, INTERVAL 1 HOUR) AS hour_time,
|
||||
DATE_FORMAT(DATE_ADD(hour_time, INTERVAL 1 HOUR), '%m-%d %H') AS HOUR
|
||||
FROM hour_series
|
||||
@@ -398,18 +398,16 @@
|
||||
)
|
||||
SELECT
|
||||
hour_series.HOUR as t,
|
||||
COALESCE(scan_data.member_count, 0) AS count,
|
||||
COALESCE(order_data.order_count, 0) AS orderCount,
|
||||
COALESCE(order_data.order_amount, 0) AS orderAmount
|
||||
COALESCE(scan_data.member_count, 0) AS count
|
||||
FROM hour_series
|
||||
LEFT JOIN (
|
||||
SELECT
|
||||
SELECT
|
||||
DATE_FORMAT(s.create_time, '%m-%d %H') AS hour_key,
|
||||
COUNT(DISTINCT s.member_id) AS member_count
|
||||
FROM `t_stats_record` r
|
||||
LEFT JOIN `t_stats` s ON r.trace_id = s.trace_id
|
||||
WHERE r.trace_id IN (
|
||||
SELECT trace_id FROM `t_stats_record`
|
||||
SELECT trace_id FROM `t_stats_record`
|
||||
WHERE action = 'ENTER_SCENIC'
|
||||
<if test="scenicId != null">
|
||||
AND `identifier` = #{scenicId}
|
||||
@@ -420,8 +418,63 @@
|
||||
AND s.create_time BETWEEN #{startTime} AND #{endTime}
|
||||
GROUP BY DATE_FORMAT(s.create_time, '%m-%d %H')
|
||||
) scan_data ON scan_data.hour_key = hour_series.HOUR
|
||||
ORDER BY hour_series.hour_time
|
||||
</select>
|
||||
<select id="scanCodeMemberChartByDate" resultType="java.util.HashMap">
|
||||
WITH RECURSIVE date_series AS (
|
||||
SELECT
|
||||
DATE(#{startTime}) AS date_value,
|
||||
DATE_FORMAT(#{startTime}, '%m-%d') AS DATE_KEY
|
||||
UNION ALL
|
||||
SELECT
|
||||
DATE_ADD(date_value, INTERVAL 1 DAY) AS date_value,
|
||||
DATE_FORMAT(DATE_ADD(date_value, INTERVAL 1 DAY), '%m-%d') AS DATE_KEY
|
||||
FROM date_series
|
||||
WHERE DATE_ADD(date_value, INTERVAL 1 DAY) <= DATE(#{endTime})
|
||||
)
|
||||
SELECT
|
||||
date_series.DATE_KEY as t,
|
||||
COALESCE(scan_data.member_count, 0) AS count
|
||||
FROM date_series
|
||||
LEFT JOIN (
|
||||
SELECT
|
||||
SELECT
|
||||
DATE_FORMAT(s.create_time, '%m-%d') AS date_key,
|
||||
COUNT(DISTINCT s.member_id) AS member_count
|
||||
FROM `t_stats_record` r
|
||||
LEFT JOIN `t_stats` s ON r.trace_id = s.trace_id
|
||||
WHERE r.trace_id IN (
|
||||
SELECT trace_id FROM `t_stats_record`
|
||||
WHERE action = 'ENTER_SCENIC'
|
||||
<if test="scenicId != null">
|
||||
AND `identifier` = #{scenicId}
|
||||
</if>
|
||||
)
|
||||
AND r.action = 'LAUNCH'
|
||||
AND JSON_EXTRACT(`params`, '$.scene') IN (1047, 1048, 1049)
|
||||
AND s.create_time BETWEEN #{startTime} AND #{endTime}
|
||||
GROUP BY DATE_FORMAT(s.create_time, '%m-%d')
|
||||
) scan_data ON scan_data.date_key = date_series.DATE_KEY
|
||||
ORDER BY date_series.date_value
|
||||
</select>
|
||||
<select id="orderChartByHourForMerge" resultType="java.util.HashMap">
|
||||
WITH RECURSIVE hour_series AS (
|
||||
SELECT
|
||||
#{startTime} AS hour_time,
|
||||
DATE_FORMAT(#{startTime}, '%m-%d %H') AS HOUR
|
||||
UNION ALL
|
||||
SELECT
|
||||
DATE_ADD(hour_time, INTERVAL 1 HOUR) AS hour_time,
|
||||
DATE_FORMAT(DATE_ADD(hour_time, INTERVAL 1 HOUR), '%m-%d %H') AS HOUR
|
||||
FROM hour_series
|
||||
WHERE DATE_ADD(hour_time, INTERVAL 1 HOUR) <= #{endTime}
|
||||
)
|
||||
SELECT
|
||||
hour_series.HOUR as t,
|
||||
COALESCE(order_data.order_count, 0) AS orderCount,
|
||||
COALESCE(order_data.order_amount, 0) AS orderAmount
|
||||
FROM hour_series
|
||||
LEFT JOIN (
|
||||
SELECT
|
||||
DATE_FORMAT(create_at, '%m-%d %H') AS hour_key,
|
||||
COUNT(id) AS order_count,
|
||||
SUM(pay_price) AS order_amount
|
||||
@@ -435,13 +488,13 @@
|
||||
) order_data ON order_data.hour_key = hour_series.HOUR
|
||||
ORDER BY hour_series.hour_time
|
||||
</select>
|
||||
<select id="scanCodeMemberChartByDate" resultType="java.util.HashMap">
|
||||
<select id="orderChartByDateForMerge" resultType="java.util.HashMap">
|
||||
WITH RECURSIVE date_series AS (
|
||||
SELECT
|
||||
SELECT
|
||||
DATE(#{startTime}) AS date_value,
|
||||
DATE_FORMAT(#{startTime}, '%m-%d') AS DATE_KEY
|
||||
UNION ALL
|
||||
SELECT
|
||||
SELECT
|
||||
DATE_ADD(date_value, INTERVAL 1 DAY) AS date_value,
|
||||
DATE_FORMAT(DATE_ADD(date_value, INTERVAL 1 DAY), '%m-%d') AS DATE_KEY
|
||||
FROM date_series
|
||||
@@ -449,30 +502,11 @@
|
||||
)
|
||||
SELECT
|
||||
date_series.DATE_KEY as t,
|
||||
COALESCE(scan_data.member_count, 0) AS count,
|
||||
COALESCE(order_data.order_count, 0) AS orderCount,
|
||||
COALESCE(order_data.order_amount, 0) AS orderAmount
|
||||
FROM date_series
|
||||
LEFT JOIN (
|
||||
SELECT
|
||||
DATE_FORMAT(s.create_time, '%m-%d') AS date_key,
|
||||
COUNT(DISTINCT s.member_id) AS member_count
|
||||
FROM `t_stats_record` r
|
||||
LEFT JOIN `t_stats` s ON r.trace_id = s.trace_id
|
||||
WHERE r.trace_id IN (
|
||||
SELECT trace_id FROM `t_stats_record`
|
||||
WHERE action = 'ENTER_SCENIC'
|
||||
<if test="scenicId != null">
|
||||
AND `identifier` = #{scenicId}
|
||||
</if>
|
||||
)
|
||||
AND r.action = 'LAUNCH'
|
||||
AND JSON_EXTRACT(`params`, '$.scene') IN (1047, 1048, 1049)
|
||||
AND s.create_time BETWEEN #{startTime} AND #{endTime}
|
||||
GROUP BY DATE_FORMAT(s.create_time, '%m-%d')
|
||||
) scan_data ON scan_data.date_key = date_series.DATE_KEY
|
||||
LEFT JOIN (
|
||||
SELECT
|
||||
SELECT
|
||||
DATE_FORMAT(create_at, '%m-%d') AS date_key,
|
||||
COUNT(id) AS order_count,
|
||||
SUM(pay_price) AS order_amount
|
||||
|
||||
Reference in New Issue
Block a user