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。
51 lines
2.3 KiB
Python
51 lines
2.3 KiB
Python
"""CPS 对账订单(cps_order)。
|
|
|
|
从美团联盟 query_order 按时间窗拉回的订单明细。大盘只读本表做美团 CPS
|
|
收入汇总,不在页面加载时实时请求第三方接口。
|
|
"""
|
|
from __future__ import annotations
|
|
|
|
from datetime import datetime
|
|
|
|
from sqlalchemy import JSON, DateTime, Integer, String, func
|
|
from sqlalchemy.dialects.postgresql import JSONB
|
|
from sqlalchemy.orm import Mapped, mapped_column
|
|
|
|
from app.db.base import Base
|
|
|
|
|
|
class CpsOrder(Base):
|
|
__tablename__ = "cps_order"
|
|
|
|
id: Mapped[int] = mapped_column(Integer, primary_key=True, autoincrement=True)
|
|
order_id: Mapped[str] = mapped_column(String(64), unique=True, index=True, nullable=False)
|
|
sid: Mapped[str | None] = mapped_column(String(64), index=True, nullable=True)
|
|
act_id: Mapped[str | None] = mapped_column(String(64), index=True, nullable=True)
|
|
biz_line: Mapped[int | None] = mapped_column(Integer, nullable=True)
|
|
trade_type: Mapped[int | None] = mapped_column(Integer, nullable=True)
|
|
|
|
pay_price_cents: Mapped[int | None] = mapped_column(Integer, nullable=True)
|
|
commission_cents: Mapped[int | None] = mapped_column(Integer, nullable=True)
|
|
commission_rate: Mapped[str | None] = mapped_column(String(16), nullable=True)
|
|
refund_price_cents: Mapped[int | None] = mapped_column(Integer, nullable=True)
|
|
refund_profit_cents: Mapped[int | None] = mapped_column(Integer, nullable=True)
|
|
|
|
# 美团订单状态:2 付款 / 3 完成 / 4 取消 / 5 风控 / 6 结算。
|
|
mt_status: Mapped[str | None] = mapped_column(String(8), index=True, nullable=True)
|
|
invalid_reason: Mapped[str | None] = mapped_column(String(128), nullable=True)
|
|
product_name: Mapped[str | None] = mapped_column(String(512), nullable=True)
|
|
|
|
pay_time: Mapped[datetime | None] = mapped_column(
|
|
DateTime(timezone=True), index=True, nullable=True
|
|
)
|
|
mt_update_time: Mapped[datetime | None] = mapped_column(DateTime(timezone=True), nullable=True)
|
|
raw: Mapped[dict] = mapped_column(
|
|
JSON().with_variant(JSONB(), "postgresql"), nullable=False, default=dict
|
|
)
|
|
first_seen: Mapped[datetime] = mapped_column(
|
|
DateTime(timezone=True), server_default=func.now(), nullable=False
|
|
)
|
|
updated_at: Mapped[datetime] = mapped_column(
|
|
DateTime(timezone=True), server_default=func.now(), onupdate=func.now(), nullable=False
|
|
)
|