e1bd0e3ef7
改了什么:新增新版大盘日期窗口聚合、广告收益拆分、比价耗时字段、美团 CPS 拉单入库与大盘展示,并同步反馈审核和邀请奖励下线口径。 验证:python -m pytest tests/test_admin_read.py tests/test_admin_write.py tests/test_compare_record.py tests/test_invite.py tests/test_feedback.py -q。
81 lines
2.0 KiB
Python
81 lines
2.0 KiB
Python
"""广告收益报表 schemas。"""
|
|
from __future__ import annotations
|
|
|
|
from datetime import datetime
|
|
|
|
from pydantic import BaseModel, Field
|
|
|
|
|
|
class AdRevenueImpression(BaseModel):
|
|
id: int = Field(..., description="ad_ecpm_record 主键")
|
|
created_at: datetime
|
|
ecpm: str
|
|
revenue_yuan: float
|
|
adn: str | None = None
|
|
slot_id: str | None = None
|
|
|
|
|
|
class AdRevenueRecord(BaseModel):
|
|
record_id: int
|
|
created_at: datetime
|
|
status: str
|
|
ecpm: str | None = None
|
|
ecpm_factor: float | None = None
|
|
units: int
|
|
lt_index_start: int | None = None
|
|
lt_index_end: int | None = None
|
|
lt_factor_start: float | None = None
|
|
lt_factor_end: float | None = None
|
|
expected_coin: int
|
|
actual_coin: int
|
|
matched: bool
|
|
|
|
|
|
class AdRevenueDaily(BaseModel):
|
|
date: str = Field(..., description="北京时间 YYYY-MM-DD")
|
|
impressions: int
|
|
revenue_yuan: float
|
|
expected_coin: int
|
|
actual_coin: int
|
|
|
|
|
|
class AdRevenueTypeSummary(BaseModel):
|
|
ad_type: str
|
|
impressions: int
|
|
revenue_yuan: float
|
|
expected_coin: int
|
|
actual_coin: int
|
|
|
|
|
|
class AdRevenueRow(BaseModel):
|
|
report_date: str
|
|
user_id: int
|
|
ad_type: str
|
|
feed_scene: str | None = None
|
|
app_env: str | None = None
|
|
our_code_id: str | None = None
|
|
hour: int | None = None
|
|
impressions: int
|
|
revenue_yuan: float
|
|
expected_coin: int
|
|
actual_coin: int
|
|
matched: bool
|
|
adns: list[str] = Field(default_factory=list)
|
|
impression_records: list[AdRevenueImpression] = Field(default_factory=list)
|
|
records: list[AdRevenueRecord] = Field(default_factory=list)
|
|
|
|
|
|
class AdRevenueReportOut(BaseModel):
|
|
date_from: str
|
|
date_to: str
|
|
daily: list[AdRevenueDaily]
|
|
total: int
|
|
truncated: bool
|
|
total_impressions: int
|
|
total_revenue_yuan: float
|
|
total_expected_coin: int
|
|
total_actual_coin: int
|
|
mismatch_count: int
|
|
by_ad_type: dict[str, AdRevenueTypeSummary] = Field(default_factory=dict)
|
|
items: list[AdRevenueRow]
|