perf: 优化商务统计的渠道权限子查询
This commit is contained in:
@@ -24,6 +24,7 @@
|
||||
|
||||
- 使用聚合查询和批量资料查询代替逐行查询,不改变业务口径。日期非法或倒置返回明确错误。
|
||||
- 数字指标先按全部统计行计算汇总、排序和分页,再补当前页的渠道/游戏名称及商务资料;按渠道名称或渠道类型排序时仍先补全体资料。空页不读取资料,官方及未知渠道标签保持原规则。
|
||||
- 需要渠道权限或渠道筛选时,报表通过平台+渠道 ID 的 IN 子查询匹配可见渠道,保留原绑定、层级、名称和类型条件,使 MySQL 5.7 能使用半连接处理。
|
||||
- 隔离 TCP HTTP 和仓储测试覆盖全量汇总与分页、跨平台同号、官方/孤立渠道、根渠道树去重、类型交集、历史游戏名过滤、当前资料展示、偏好切换及空范围。
|
||||
- 领域测试覆盖大金额精确排序、分母和人数上限。前端检查筛选回第一页、30 天默认值、汇总不随分页变化、缺数据提示、没有额外导出入口。
|
||||
|
||||
|
||||
@@ -64,7 +64,9 @@ func analyticsQuery(db *gorm.DB, scope business.AnalyticsScope, f business.Analy
|
||||
if scope.Viewer.All && scope.IncludeSub && f.PromoteType == nil && f.PromoteName == "" {
|
||||
return q
|
||||
}
|
||||
return q.Where("EXISTS (?)", analyticsPromotes(db, scope, f, "p").Select("1").Where("p.source_db=r.source_db AND p.id=r.promote_id"))
|
||||
// 保留完整的可见渠道筛选,用成对 IN 让 MySQL 5.7 将报表与权限
|
||||
// 查询转换为半连接,避免为每条身份记录重新执行相关渠道子查询。
|
||||
return q.Where("(r.source_db,r.promote_id) IN (?)", analyticsPromotes(db, scope, f, "p").Select("p.source_db,p.id"))
|
||||
}
|
||||
|
||||
type analyticsAggPO struct {
|
||||
|
||||
Reference in New Issue
Block a user