feat(clickhouse): 添加打印样片页面访问统计功能

- 实现按小时统计访问打印样片页面人数的功能
- 实现按日期统计访问打印样片页面人数的功能
- 在ClickHouse查询服务中添加相应的SQL查询方法
- 在MySQL查询服务中添加接口实现
- 更新统计图表合并逻辑,支持打印样片访问数据展示
- 修改mergeChartData方法以支持三组数据合并
- 在MyBatis映射文件中添加对应的SQL查询语句
- 完善相关接口定义和文档注释
This commit is contained in:
2026-01-16 20:15:41 +08:00
parent 4fac129c3a
commit 6a8f679540
6 changed files with 188 additions and 8 deletions

View File

@@ -456,6 +456,70 @@
) scan_data ON scan_data.date_key = date_series.DATE_KEY
ORDER BY date_series.date_value
</select>
<select id="printerFromSampleChartByHour" 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) &lt;= #{endTime}
)
SELECT
hour_series.HOUR as t,
COALESCE(scan_data.member_count, 0) AS count
FROM hour_series
LEFT JOIN (
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.action = 'LOAD'
AND r.identifier = 'pages/printer/hello'
<if test="scenicId != null">
AND JSON_EXTRACT(r.params, '$.scenicId') = #{scenicId}
</if>
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="printerFromSampleChartByDate" 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) &lt;= DATE(#{endTime})
)
SELECT
date_series.DATE_KEY as t,
COALESCE(scan_data.member_count, 0) AS count
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.action = 'LOAD'
AND r.identifier = 'pages/printer/hello'
<if test="scenicId != null">
AND JSON_EXTRACT(r.params, '$.scenicId') = #{scenicId}
</if>
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