feat(ad-revenue): 广告数据报表页(替换金币审计页) (#11)
- 新增 /ad-revenue:聚合表 + 派生指标(平均 eCPM/毛利/发奖占比)+ 零依赖 SVG 趋势图 + 行展开下钻展示明细/发奖复算明细 - 删除旧 /ad-audit 页;侧栏「金币审计」→「广告数据」 - feedbacks 由「加载更多」改 antd 页码分页(usePagedList),内容列 3 行省略可展开 - types 用 AdRevenue* 替换 AdCoinAudit*;providers 统一主题圆角/页面底色 Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> --------- Co-authored-by: OuYingJun1024 <1034284404@qq.com> Reviewed-on: #11 Co-authored-by: ouzhou <ouzhou@wonderable.ai> Co-committed-by: ouzhou <ouzhou@wonderable.ai>
This commit was merged in pull request #11.
This commit is contained in:
+54
-22
@@ -188,40 +188,72 @@ export interface AuditLog {
|
||||
created_at: string;
|
||||
}
|
||||
|
||||
export interface AdCoinAuditRow {
|
||||
scene: string; // reward_video / feed
|
||||
record_id: number;
|
||||
user_id: number;
|
||||
// 广告收益报表聚合行下钻的单条展示明细
|
||||
export interface AdRevenueImpression {
|
||||
id: number;
|
||||
created_at: string;
|
||||
status: string; // granted / capped / ecpm_missing
|
||||
ecpm: string; // 分/千次展示
|
||||
revenue_yuan: number; // 本次展示预估收益(元)
|
||||
adn: string | null;
|
||||
slot_id: string | null; // 底层 mediation rit
|
||||
}
|
||||
|
||||
// 广告收益报表聚合行下钻的单条发奖复算明细
|
||||
export interface AdRevenueRecord {
|
||||
record_id: number;
|
||||
created_at: string;
|
||||
status: string; // granted / capped / ecpm_missing / too_short / closed_early
|
||||
ecpm: string | null;
|
||||
ecpm_factor: number | null;
|
||||
units: number;
|
||||
ecpm_factor: number | null; // 因子1
|
||||
units: number; // 份数
|
||||
lt_index_start: number | null;
|
||||
lt_index_end: number | null;
|
||||
lt_factor_start: number | null;
|
||||
lt_factor_start: number | null; // 因子2
|
||||
lt_factor_end: number | null;
|
||||
expected_coin: number;
|
||||
actual_coin: number;
|
||||
matched: boolean;
|
||||
}
|
||||
|
||||
export interface AdCoinFormula {
|
||||
description: string;
|
||||
coin_per_yuan: number;
|
||||
ecpm_unit: string;
|
||||
feed_unit_seconds: number;
|
||||
ecpm_factor_tiers: [number, number, number | null][];
|
||||
lt_factor_tiers: [number, number, number | null][];
|
||||
// 广告收益报表:按日期汇总的一天(按天趋势图用;全量,不受 limit 影响)
|
||||
export interface AdRevenueDaily {
|
||||
date: string; // 北京时间 YYYY-MM-DD
|
||||
impressions: number;
|
||||
revenue_yuan: number;
|
||||
expected_coin: number;
|
||||
actual_coin: number;
|
||||
}
|
||||
|
||||
export interface AdCoinAudit {
|
||||
date: string;
|
||||
formula: AdCoinFormula;
|
||||
total: number; // 全量条数(不受 limit/only_mismatch 影响)
|
||||
mismatch_count: number; // 全量不一致条数
|
||||
truncated: boolean; // 展示集是否被 limit 截断
|
||||
items: AdCoinAuditRow[];
|
||||
// 广告收益报表:按 日期 × 用户 × 广告类型 × 应用 × 代码位 聚合
|
||||
export interface AdRevenueRow {
|
||||
report_date: string; // 该组所属日期 北京时间 YYYY-MM-DD
|
||||
user_id: number;
|
||||
ad_type: string; // reward_video / feed / draw
|
||||
app_env: string | null; // prod(傻瓜比价) / test(测试);旧数据为空
|
||||
our_code_id: string | null; // 我们配置的代码位 104xxx;旧数据为空
|
||||
hour: number | null; // 北京时间小时 0–23(按小时粒度时有值;按天为 null)
|
||||
impressions: number; // 展示条数(轮播每条各计一次)
|
||||
revenue_yuan: number; // 收益(元),预估口径
|
||||
expected_coin: number; // 应发金币(公式复算,与金币审计同源)
|
||||
actual_coin: number; // 实发金币(实际入账)
|
||||
matched: boolean; // 该组应发==实发
|
||||
adns: string[]; // 底层填充 ADN 子渠道集合
|
||||
impression_records: AdRevenueImpression[]; // 该组逐条展示明细(展开下钻)
|
||||
records: AdRevenueRecord[]; // 该组逐条发奖复算明细(展开下钻)
|
||||
}
|
||||
|
||||
export interface AdRevenueReport {
|
||||
date_from: string; // 起始日 北京时间 YYYY-MM-DD
|
||||
date_to: string; // 结束日 北京时间 YYYY-MM-DD(闭区间;单日时与 date_from 相同)
|
||||
daily: AdRevenueDaily[]; // 按日期汇总序列(全量,供按天趋势图)
|
||||
total: number; // 聚合组总数(全量,不受 limit 影响)
|
||||
truncated: boolean;
|
||||
total_impressions: number;
|
||||
total_revenue_yuan: number;
|
||||
total_expected_coin: number;
|
||||
total_actual_coin: number;
|
||||
mismatch_count: number; // 应发≠实发的组数
|
||||
items: AdRevenueRow[];
|
||||
}
|
||||
|
||||
export interface DashboardOverview {
|
||||
|
||||
Reference in New Issue
Block a user