大盘领券和比价广告收益卡改读服务端全量场景小计,激励视频卡改读类型小计 (#37)

Co-authored-by: 陈世睿 <2839904623@qq.com>
Reviewed-on: #37
Co-authored-by: chenshirui <chenshirui@wonderable.ai>
Co-committed-by: chenshirui <chenshirui@wonderable.ai>
This commit was merged in pull request #37.
This commit is contained in:
chenshirui
2026-07-06 00:24:58 +08:00
committed by marco
parent dd84d771f9
commit c905e15ec9
3 changed files with 108 additions and 15 deletions
+19
View File
@@ -56,6 +56,8 @@ export interface UserListItem {
wechat_openid: string | null;
created_at: string;
last_login_at: string;
// 最近活跃 = max(最近登录, 最近发起比价, 最近发起领券);与大盘 DAU/留存活跃口径一致
last_active_at: string | null;
}
// 设备维度新手引导:一台设备(ANDROID_ID)聚合,走过引导的账号数 + 最近完成时间。
@@ -474,6 +476,10 @@ export interface AdRevenueReport {
daily: AdRevenueDaily[]; // 按日期汇总序列(全量,供按天趋势图)
hourly: AdRevenueHourly[]; // 按小时汇总序列(全量,供按小时趋势图;按天查询时为空)
type_stats: Record<string, AdRevenueTypeStat>; // 按广告类型小计;前端取 draw / reward_video
// 按信息流场景小计(comparison/coupon/welfare;全量,不受分页截断)。数据大盘「领券广告/比价广告」卡
// 优先读它:2026-07-02 后端起 items 不再含信息流逐条展示行(唯一带收益+场景的行),按 items 现算恒 0。
// 可选(`?.` 探测)以兼容未升级后端,缺失时回退 items 现算。
scene_stats?: Record<string, AdRevenueTypeStat>;
// 可选:后端预聚合的「按广告类型」富小计(含发放金币明细)。当前后端未下发 → 数据大盘页
// (dashboard adTypeSummary)用 `?.` 探测、缺失时按 items 现算兜底;后端补上即自动启用。
by_ad_type?: Record<
@@ -529,6 +535,8 @@ export interface DashboardOverview {
new: number;
active: number;
retained_new_users: number;
// 次日留存基数:窗口内逐日「前一日新增用户数」之和(retention_rate 的分母;旧后端无此字段)
retention_cohort?: number;
retention_rate: number | null;
retention_note: string;
};
@@ -540,6 +548,17 @@ export interface DashboardOverview {
average_duration_ms: number | null;
average_saved_cents: number | null;
};
// 领券核心数据(2026-07-05 新增;旧后端无此字段,前端 `?.` 探测)。
// 点位=一张券;成功口径 success+already_claimed;点位成功率分母=发起数×应领点位数(未跑到视为失败)。
coupon?: {
started: number;
all_success: number; // 全部点位领成功的完成场次数
success_rate: number | null;
point_success: number;
points_per_session: number | null; // 应领点位数(本期完成场点位数众数)
point_success_rate: number | null;
median_elapsed_ms: number | null; // 仅 completed,同「领券数据」页口径
};
coins: {
granted_total: number;
reward_video_coin_total: number;