fix(stats): 修复景点人脸识别统计数据查询逻辑

- 修正了人脸上传统计查询中景点ID的过滤方式,从子查询改为直接解析params字段
- 移除了应用统计服务中的过期缓存逻辑
- 修复了任务完成用户统计的表关联错误,从task表改为member_video表进行统计
This commit is contained in:
2026-01-04 14:37:40 +08:00
parent cc62fb4c18
commit 24f72091b3
2 changed files with 9 additions and 16 deletions

View File

@@ -86,11 +86,9 @@ public class ClickHouseStatsQueryServiceImpl implements StatsQueryService {
sql.append("SELECT toInt32(uniqExact(s.member_id)) AS count "); sql.append("SELECT toInt32(uniqExact(s.member_id)) AS count ");
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.trace_id IN ("); sql.append("WHERE r.action = 'LOAD' ");
appendEnterScenicTraceIdSubQuery(sql, query.getScenicId(), query.getStartTime(), query.getEndTime());
sql.append(") ");
sql.append("AND 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 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(" ");
@@ -150,10 +148,8 @@ public class ClickHouseStatsQueryServiceImpl implements StatsQueryService {
sql.append("SELECT toInt32(uniqExact(s.member_id)) AS count "); sql.append("SELECT toInt32(uniqExact(s.member_id)) AS count ");
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.trace_id IN ("); sql.append("WHERE r.action = 'FACE_UPLOAD' ");
appendEnterScenicTraceIdSubQuery(sql, query.getScenicId(), query.getStartTime(), query.getEndTime()); sql.append("AND JSONExtractString(r.params, 'scenicId') = '").append(query.getScenicId()).append("' ");
sql.append(") ");
sql.append("AND r.action = 'FACE_UPLOAD' ");
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(" ");
} }
@@ -168,10 +164,8 @@ public class ClickHouseStatsQueryServiceImpl implements StatsQueryService {
StringBuilder sql = new StringBuilder(); StringBuilder sql = new StringBuilder();
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.trace_id IN ("); sql.append("WHERE r.action = 'FACE_UPLOAD' ");
appendEnterScenicTraceIdSubQuery(sql, query.getScenicId(), query.getStartTime(), query.getEndTime()); sql.append("AND JSONExtractString(r.params, 'scenicId') = '").append(query.getScenicId()).append("' ");
sql.append(") ");
sql.append("AND r.action = 'FACE_UPLOAD' ");
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(" ");
} }

View File

@@ -154,10 +154,9 @@
<!-- 根据 face_id 列表统计已完成任务的用户数 --> <!-- 根据 face_id 列表统计已完成任务的用户数 -->
<select id="countCompletedTaskMembersByFaceIds" resultType="java.lang.Integer"> <select id="countCompletedTaskMembersByFaceIds" resultType="java.lang.Integer">
SELECT COUNT(DISTINCT member_id) AS count SELECT COUNT(DISTINCT mv.member_id) AS count
FROM task FROM member_video mv
WHERE status = 1 WHERE mv.face_id IN
AND face_id IN
<foreach collection="faceIds" item="faceId" open="(" separator="," close=")"> <foreach collection="faceIds" item="faceId" open="(" separator="," close=")">
#{faceId} #{faceId}
</foreach> </foreach>