refactor(clickhouse): 优化景点统计数据查询逻辑

- 将原有的 scenicId 参数匹配条件替换为子查询方式
- 统一使用 enterScenicTraceIdSubQuery 方法处理景点访问轨迹ID筛选
- 移除重复的时间范围过滤条件以提高查询效率
- 保持 LOAD 和 FACE_UPLOAD 操作的数据统计一致性
- 简化 LAUNCH 操作的时间范围过滤逻辑
- 提高代码可维护性和查询性能
This commit is contained in:
2026-01-12 14:15:16 +08:00
parent 7b417aa4f1
commit 3bd658cc1f

View File

@@ -106,7 +106,9 @@ public class ClickHouseStatsQueryServiceImpl implements StatsQueryService {
sql.append("INNER JOIN t_stats s ON r.trace_id = s.trace_id "); sql.append("INNER JOIN t_stats s ON r.trace_id = s.trace_id ");
sql.append("WHERE r.action = 'LOAD' "); sql.append("WHERE r.action = 'LOAD' ");
sql.append("AND r.identifier = 'pages/videoSynthesis/buy' "); sql.append("AND r.identifier = 'pages/videoSynthesis/buy' ");
sql.append("AND JSONExtractString(r.params, 'scenicId') = '").append(query.getScenicId()).append("' "); sql.append("AND r.trace_id IN (");
appendEnterScenicTraceIdSubQuery(sql, query.getScenicId(), query.getStartTime(), query.getEndTime());
sql.append(") ");
sql.append("AND JSONExtractString(r.params, 'share') = '' "); sql.append("AND JSONExtractString(r.params, 'share') = '' ");
if (query.getStartTime() != null) { if (query.getStartTime() != null) {
sql.append("AND r.create_time >= ").append(formatDateTime(query.getStartTime())).append(" "); sql.append("AND r.create_time >= ").append(formatDateTime(query.getStartTime())).append(" ");
@@ -167,7 +169,9 @@ public class ClickHouseStatsQueryServiceImpl implements StatsQueryService {
sql.append("FROM t_stats_record r "); sql.append("FROM t_stats_record r ");
sql.append("INNER JOIN t_stats s ON r.trace_id = s.trace_id "); sql.append("INNER JOIN t_stats s ON r.trace_id = s.trace_id ");
sql.append("WHERE r.action = 'FACE_UPLOAD' "); sql.append("WHERE r.action = 'FACE_UPLOAD' ");
sql.append("AND JSONExtractString(r.params, 'scenicId') = '").append(query.getScenicId()).append("' "); sql.append("AND r.trace_id IN (");
appendEnterScenicTraceIdSubQuery(sql, query.getScenicId(), query.getStartTime(), query.getEndTime());
sql.append(") ");
if (query.getStartTime() != null) { if (query.getStartTime() != null) {
sql.append("AND s.create_time >= ").append(formatDateTime(query.getStartTime())).append(" "); sql.append("AND s.create_time >= ").append(formatDateTime(query.getStartTime())).append(" ");
} }
@@ -183,7 +187,9 @@ public class ClickHouseStatsQueryServiceImpl implements StatsQueryService {
sql.append("SELECT DISTINCT r.identifier FROM t_stats_record r "); sql.append("SELECT DISTINCT r.identifier FROM t_stats_record r ");
sql.append("INNER JOIN t_stats s ON r.trace_id = s.trace_id "); sql.append("INNER JOIN t_stats s ON r.trace_id = s.trace_id ");
sql.append("WHERE r.action = 'FACE_UPLOAD' "); sql.append("WHERE r.action = 'FACE_UPLOAD' ");
sql.append("AND JSONExtractString(r.params, 'scenicId') = '").append(query.getScenicId()).append("' "); sql.append("AND r.trace_id IN (");
appendEnterScenicTraceIdSubQuery(sql, query.getScenicId(), query.getStartTime(), query.getEndTime());
sql.append(") ");
if (query.getStartTime() != null) { if (query.getStartTime() != null) {
sql.append("AND s.create_time >= ").append(formatDateTime(query.getStartTime())).append(" "); sql.append("AND s.create_time >= ").append(formatDateTime(query.getStartTime())).append(" ");
} }
@@ -357,12 +363,6 @@ public class ClickHouseStatsQueryServiceImpl implements StatsQueryService {
sql.append(") "); sql.append(") ");
sql.append("AND r.action = 'LAUNCH' "); sql.append("AND r.action = 'LAUNCH' ");
sql.append("AND JSONExtractInt(r.params, 'scene') IN (1047, 1048, 1049) "); sql.append("AND JSONExtractInt(r.params, 'scene') IN (1047, 1048, 1049) ");
if (query.getStartTime() != null) {
sql.append("AND s.create_time >= ").append(formatDateTime(query.getStartTime())).append(" ");
}
if (query.getEndTime() != null) {
sql.append("AND s.create_time <= ").append(formatDateTime(query.getEndTime())).append(" ");
}
sql.append("GROUP BY toStartOfHour(s.create_time) "); sql.append("GROUP BY toStartOfHour(s.create_time) ");
sql.append("ORDER BY toStartOfHour(s.create_time)"); sql.append("ORDER BY toStartOfHour(s.create_time)");
@@ -386,12 +386,6 @@ public class ClickHouseStatsQueryServiceImpl implements StatsQueryService {
sql.append(") "); sql.append(") ");
sql.append("AND r.action = 'LAUNCH' "); sql.append("AND r.action = 'LAUNCH' ");
sql.append("AND JSONExtractInt(r.params, 'scene') IN (1047, 1048, 1049) "); sql.append("AND JSONExtractInt(r.params, 'scene') IN (1047, 1048, 1049) ");
if (query.getStartTime() != null) {
sql.append("AND s.create_time >= ").append(formatDateTime(query.getStartTime())).append(" ");
}
if (query.getEndTime() != null) {
sql.append("AND s.create_time <= ").append(formatDateTime(query.getEndTime())).append(" ");
}
sql.append("GROUP BY toStartOfDay(s.create_time) "); sql.append("GROUP BY toStartOfDay(s.create_time) ");
sql.append("ORDER BY toStartOfDay(s.create_time)"); sql.append("ORDER BY toStartOfDay(s.create_time)");