f7d86011c1
- 新增 GET /admin/api/ad-revenue-report:展示条数/收益 + 复用金币审计逐条复算做发奖对账 - ad_ecpm/ad_reward/ad_feed_reward 各加 app_env + our_code_id 两列(alembic 迁移) - ecpm-report / feed-reward 接收并落库 app_env/our_code_id;激励发奖按 ad_session_id 回填 - ad_audit 抽出 audit_rows,报表与逐条审计复用同一复算口径 - 组级 matched 改「组内逐条全一致」,避免应发和==实发和的互相抵消掩盖错误 - list_feedbacks 改 offset 分页并返回 total(配合 admin 页码分页) - 反馈正文上限 _CONTENT_MAX 2000→200 - 文档:新增 admin-ad-revenue-report,更新 ecpm/feed-reward/feedback 及对应 db docs Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> --------- Co-authored-by: OuYingJun1024 <1034284404@qq.com> Reviewed-on: #54 Co-authored-by: ouzhou <ouzhou@wonderable.ai> Co-committed-by: ouzhou <ouzhou@wonderable.ai>
2.9 KiB
2.9 KiB
ad_ecpm_record — 广告展示 eCPM 上报(收益对账)
模型
app/models/ad_ecpm.py· 仓库app/repositories/ad_ecpm.py· 接口 ad-ecpm-report · ← 索引 · 总览
每条 = 客户端一次广告展示(onAdShow)后读到的 eCPM。ad_session_id 可与 S2S 回调 extra.ad_session_id 对齐:当普通激励视频回调没有 ecpm 时,后端会用它匹配本表作为发奖 eCPM 依据。
用在哪 / 增删改查
- C(插入):
POST /ad/ecpm-report(create_ecpm_record)。每次广告展示上报一条;best-effort,丢一两条不影响业务。鉴权接口已确保 user 存在。 - U / D:无。
- R:内部收益统计/对账(按
(user_id, report_date)聚合);count_today排查辅助;广告收益报表 admin-ad-revenue-report 的展示条数/收益数据源(按app_env/our_code_id聚合)。当前无面向 C 端用户的读接口。
字段
| 列 | 类型 | 约束 / 默认 | 说明(取值 / join) |
|---|---|---|---|
id |
Integer | PK, autoincrement | |
user_id |
Integer | FK→user.id, index, NOT NULL | 归属用户 |
ad_type |
String(32) | NOT NULL | 广告类型,取值如 reward_video(激励视频)/ feed(信息流)/ draw(历史 Draw 信息流);各类型各自上报,不强行统一代码位 |
ad_session_id |
String(64) | UNIQUE, index, nullable | 客户端广告会话 ID;激励视频用于 S2S 缺 ecpm 时匹配发奖。信息流轮播每条展示用各自独立 id(不复用比价会话 id,否则 UNIQUE 去重只留一条) |
adn |
String(32) | nullable | 实际投放 ADN(getShowEcpm().getSdkName(),如 pangle/gdt;聚合后实际填充的子渠道) |
slot_id |
String(64) | nullable | 实际展示用代码位(底层 mediation rit,非客户端配置位) |
app_env |
String(16) | nullable | 我们的穿山甲应用环境:prod(傻瓜比价正式)/test(测试应用);旧数据 NULL。广告收益报表按它聚合「来源应用」 |
our_code_id |
String(64) | nullable | 我们后台配置的代码位 ID(AdConfig 的 104xxx,非 slot_id 底层 rit);旧数据 NULL |
ecpm_raw |
String(32) | NOT NULL | 客户端上报的 eCPM 原始串(穿山甲 getEcpm 原值,单位分/千次展示);后端 ÷100 转元参与金币公式 |
report_date |
String(10) | index, NOT NULL | 北京时间日期串 YYYY-MM-DD,按它做按天聚合 |
created_at |
DateTime(tz) | server_default now(), index | 时间 |
关系 / Join Key
user_id→user.id(多对一)。ad_session_id→ 可关联ad_reward_record.ad_session_id。
索引与约束
- PK
id;indexuser_id、report_date、created_at、ad_session_id;UNIQUEad_session_id。
注意
- S2S 回调自带
ecpm优先;缺失时才使用同ad_session_id的客户端上报值。两者都没有时普通激励视频不发币,ad_reward_record.status=ecpm_missing。