"""费用计算相关模型""" from datetime import datetime from decimal import Decimal from sqlalchemy import Column, Integer, String, Text, DECIMAL, SmallInteger, JSON, TIMESTAMP from ..database import Base class ModelPricing(Base): """模型价格配置表""" __tablename__ = "platform_model_pricing" id = Column(Integer, primary_key=True, autoincrement=True) # 模型标识 model_name = Column(String(100), nullable=False, unique=True) # 模型名称,如 gpt-4, claude-3-opus provider = Column(String(50)) # 提供商,如 openai, anthropic, 4sapi display_name = Column(String(100)) # 显示名称 # 价格配置(单位:元/1K tokens) input_price_per_1k = Column(DECIMAL(10, 6), default=0) # 输入价格 output_price_per_1k = Column(DECIMAL(10, 6), default=0) # 输出价格 # 或固定价格(每次调用) fixed_price_per_call = Column(DECIMAL(10, 6), default=0) # 计费方式 pricing_type = Column(String(20), default='token') # token / call / hybrid # 备注 description = Column(Text) status = Column(SmallInteger, default=1) # 0-禁用 1-启用 created_at = Column(TIMESTAMP, default=datetime.now) updated_at = Column(TIMESTAMP, default=datetime.now, onupdate=datetime.now) class TenantBilling(Base): """租户账单表(月度汇总)""" __tablename__ = "platform_tenant_billing" id = Column(Integer, primary_key=True, autoincrement=True) tenant_id = Column(String(50), nullable=False, index=True) billing_month = Column(String(7), nullable=False) # 格式: YYYY-MM # 使用量统计 total_calls = Column(Integer, default=0) # 总调用次数 total_input_tokens = Column(Integer, default=0) # 总输入token total_output_tokens = Column(Integer, default=0) # 总输出token # 费用统计 total_cost = Column(DECIMAL(12, 4), default=0) # 总费用 # 按模型分类的费用明细 cost_by_model = Column(JSON) # {"gpt-4": 10.5, "claude-3": 5.2} # 按应用分类的费用明细 cost_by_app = Column(JSON) # {"tools": 8.0, "interview": 7.7} # 状态 status = Column(String(20), default='pending') # pending / confirmed / paid created_at = Column(TIMESTAMP, default=datetime.now) updated_at = Column(TIMESTAMP, default=datetime.now, onupdate=datetime.now) class Config: # 联合唯一索引 __table_args__ = ( {'mysql_charset': 'utf8mb4'} )