""" 电商订单模型 """ from datetime import datetime from typing import Optional, TYPE_CHECKING from sqlalchemy import ( Column, DateTime, Integer, String, Float, Boolean, ) from sqlalchemy.orm import Mapped, mapped_column from app.models.base import BaseModel if TYPE_CHECKING: from .streamer import StreamerInfo, McnAgency class Order(BaseModel): """ 电商订单数据表 """ __tablename__ = "order" order_id: Mapped[str] = mapped_column( String(50), unique=True, nullable=False, comment="订单ID" ) platform_order_no: Mapped[str] = mapped_column( String(100), nullable=False, comment="平台订单号" ) ecommerce_platform: Mapped[str] = mapped_column( String(50), nullable=False, comment="电商平台:taobao-淘宝,tmall-天猫,jd-京东,douyin-抖音,kuaishou-快手", ) streamer_id: Mapped[str] = mapped_column( String(50), nullable=False, comment="主播ID" ) streamer_name: Mapped[str] = mapped_column( String(100), nullable=False, comment="主播姓名" ) product_id: Mapped[str] = mapped_column( String(100), nullable=False, comment="商品ID" ) product_name: Mapped[str] = mapped_column( String(500), nullable=False, comment="商品名称" ) quantity: Mapped[int] = mapped_column( nullable=False, comment="购买数量" ) original_price: Mapped[float] = mapped_column( nullable=False, comment="原价" ) sale_price: Mapped[float] = mapped_column( nullable=False, comment="售价" ) total_amount: Mapped[float] = mapped_column( nullable=False, comment="总金额" ) actual_payment: Mapped[float] = mapped_column( nullable=False, comment="实付金额" ) commission_ratio: Mapped[float] = mapped_column( nullable=False, comment="佣金比例" ) commission_amount: Mapped[float] = mapped_column( nullable=False, comment="佣金金额" ) streamer_commission: Mapped[float] = mapped_column( nullable=False, comment="主播佣金" ) buyer_id: Mapped[str] = mapped_column( String(100), nullable=False, comment="买家ID" ) order_time: Mapped[datetime] = mapped_column( DateTime(timezone=True), nullable=False, comment="下单时间" ) settlement_time: Mapped[Optional[datetime]] = mapped_column( DateTime(timezone=True), nullable=True, comment="结算时间" ) order_status: Mapped[str] = mapped_column( String(20), nullable=False, comment="订单状态:pending-待付款,paid-已付款,shipped-已发货,completed-已完成,cancelled-已取消", ) is_commission_settled: Mapped[bool] = mapped_column( default=False, comment="是否已结算佣金" ) province: Mapped[Optional[str]] = mapped_column( String(50), nullable=True, comment="省份" ) city: Mapped[Optional[str]] = mapped_column( String(50), nullable=True, comment="城市" )