88 lines
2.7 KiB
Python
88 lines
2.7 KiB
Python
"""
|
||
主播分成协议模型
|
||
"""
|
||
from datetime import date
|
||
from typing import Optional, TYPE_CHECKING
|
||
|
||
from sqlalchemy import (
|
||
Column,
|
||
Date,
|
||
String,
|
||
Text,
|
||
Float,
|
||
)
|
||
from sqlalchemy.orm import Mapped, mapped_column
|
||
|
||
from app.models.base import BaseModel
|
||
|
||
if TYPE_CHECKING:
|
||
from .streamer import StreamerInfo, McnAgency
|
||
|
||
|
||
class RevenueSharingContract(BaseModel):
|
||
"""
|
||
主播分成协议表(收入分成协议)
|
||
"""
|
||
__tablename__ = "contract"
|
||
|
||
contract_id: Mapped[str] = mapped_column(
|
||
String(50), unique=True, nullable=False, comment="协议ID"
|
||
)
|
||
contract_no: Mapped[str] = mapped_column(
|
||
String(100), nullable=False, comment="协议编号"
|
||
)
|
||
contract_type: Mapped[str] = mapped_column(
|
||
String(50),
|
||
nullable=False,
|
||
comment="协议类型:tip_sharing-打赏分成,ecommerce_cooperation-电商合作,brand_ambassador-品牌代言",
|
||
)
|
||
streamer_id: Mapped[str] = mapped_column(
|
||
String(50), nullable=False, comment="主播ID"
|
||
)
|
||
streamer_name: Mapped[str] = mapped_column(
|
||
String(100), nullable=False, comment="主播姓名"
|
||
)
|
||
streamer_entity_type: Mapped[str] = mapped_column(
|
||
String(20), nullable=False, comment="主播主体类型"
|
||
)
|
||
platform_party: Mapped[str] = mapped_column(
|
||
String(200), nullable=False, comment="平台方名称"
|
||
)
|
||
platform_credit_code: Mapped[str] = mapped_column(
|
||
String(18), nullable=False, comment="平台方统一社会信用代码"
|
||
)
|
||
revenue_type: Mapped[str] = mapped_column(
|
||
String(50),
|
||
nullable=False,
|
||
comment="收入类型:tip-打赏,product_sales-商品销售,advertising-广告",
|
||
)
|
||
platform_ratio: Mapped[float] = mapped_column(
|
||
nullable=False, comment="平台分成比例"
|
||
)
|
||
streamer_ratio: Mapped[float] = mapped_column(
|
||
nullable=False, comment="主播分成比例"
|
||
)
|
||
settlement_cycle: Mapped[str] = mapped_column(
|
||
String(20),
|
||
nullable=False,
|
||
comment="结算周期:weekly-周结,monthly-月结,quarterly-季结",
|
||
)
|
||
contract_start_date: Mapped[date] = mapped_column(
|
||
Date, nullable=False, comment="协议开始日期"
|
||
)
|
||
contract_end_date: Mapped[date] = mapped_column(
|
||
Date, nullable=False, comment="协议结束日期"
|
||
)
|
||
contract_status: Mapped[str] = mapped_column(
|
||
String(20),
|
||
default="active",
|
||
comment="协议状态:active-生效,suspended-暂停,terminated-终止,expired-过期",
|
||
)
|
||
remark: Mapped[Optional[str]] = mapped_column(
|
||
Text, nullable=True, comment="备注"
|
||
)
|
||
|
||
|
||
# 向后兼容的别名
|
||
Contract = RevenueSharingContract
|