| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111 |
- from sqlalchemy import Column, Integer, String, Boolean, DateTime, Numeric, func, Text
- from app.models import Base
- class FetchLog(Base):
- """域名爬取日志表(每次尝试记录一条)"""
- __tablename__ = "fetch_logs"
- __table_args__ = {"schema": "domain_monitor"}
- id = Column(Integer, primary_key=True, autoincrement=True)
- domain = Column(String, nullable=False, index=True)
- status = Column(String, nullable=False) # success / failed / skipped
- message = Column(Text) # 成功/失败详情
- created_at = Column(DateTime(timezone=True), server_default=func.now())
- class FetchScheduleConfig(Base):
- """定时爬取配置表"""
- __tablename__ = "fetch_schedule_config"
- __table_args__ = {"schema": "domain_monitor"}
- id = Column(Integer, primary_key=True, autoincrement=True)
- enabled = Column(Boolean, server_default="false", default=False)
- schedule_time = Column(String(5), server_default="02:00") # HH:MM
- class SuperAdmin(Base):
- """超级管理员表"""
- __tablename__ = "super_admin"
- __table_args__ = {"schema": "domain_monitor"}
- id = Column(Integer, primary_key=True, autoincrement=True)
- username = Column(String, nullable=False)
- nickname = Column(String)
- remark = Column(String) # 域名备注,作为超管显示名称
- created_at = Column(DateTime(timezone=True), server_default=func.now())
- class SuperAdminTenant(Base):
- """超级管理员-租户关联表"""
- __tablename__ = "super_admin_tenant"
- __table_args__ = {"schema": "domain_monitor"}
- id = Column(Integer, primary_key=True, autoincrement=True)
- super_admin_id = Column(Integer, nullable=False, index=True)
- tenant_id = Column(Integer, nullable=False, index=True)
- class Tenant(Base):
- """租户(企业)表"""
- __tablename__ = "tenant"
- __table_args__ = {"schema": "domain_monitor"}
- id = Column(Integer, primary_key=True, autoincrement=True)
- company_name = Column(String)
- subdomain = Column(String, unique=True, nullable=False, index=True)
- balance = Column(Numeric(20, 4), server_default="0")
- created_at = Column(DateTime(timezone=True), server_default=func.now())
- updated_at = Column(DateTime(timezone=True), onupdate=func.now())
- class Model(Base):
- """模型信息参考表"""
- __tablename__ = "models"
- __table_args__ = {"schema": "domain_monitor"}
- id = Column(Integer, primary_key=True, autoincrement=True)
- model_code = Column(String, unique=True, nullable=False, index=True)
- model_name = Column(String, nullable=False)
- original_price = Column(Numeric(20, 4))
- class SuperAdminModelDiscount(Base):
- """超级管理员模型折扣表(从 crawler 同步)"""
- __tablename__ = "super_admin_model_discount"
- __table_args__ = {"schema": "domain_monitor"}
- id = Column(Integer, primary_key=True, autoincrement=True)
- model_code = Column(String, unique=True, nullable=False, index=True)
- discount_rate = Column(Numeric(10, 4), server_default="1.0000", nullable=False)
- created_at = Column(DateTime(timezone=True), server_default=func.now())
- updated_at = Column(DateTime(timezone=True), onupdate=func.now())
- class UserConsumptionDetail(Base):
- """用户模型消费明细表(每次调用的记录)"""
- __tablename__ = "user_consumption_detail"
- __table_args__ = {"schema": "domain_monitor"}
- id = Column(Integer, primary_key=True, autoincrement=True)
- user_id = Column(String, nullable=False, index=True)
- username = Column(String)
- tenant_id = Column(Integer, nullable=False, index=True)
- model_code = Column(String, nullable=False, index=True)
- call_count = Column(Integer, server_default="0")
- # 用户侧:用户实际支付
- user_actual_total = Column(Numeric(20, 4), server_default="0")
- user_discount = Column(Numeric(10, 4), server_default="1.0000")
- user_actual_price = Column(Numeric(20, 4))
- # 租户侧:平台向企业收取
- tenant_actual_total = Column(Numeric(20, 4), server_default="0")
- tenant_discount = Column(Numeric(10, 4), server_default="1.0000")
- tenant_actual_price = Column(Numeric(20, 4))
- # 超管侧:平台向超管收取
- super_admin_discount = Column(Numeric(10, 4), server_default="1.0000")
- super_admin_actual_price = Column(Numeric(20, 4))
- original_price = Column(Numeric(20, 4))
- consumption_date = Column(DateTime(timezone=True), nullable=False, index=True)
- order_no = Column(String)
- invoiced = Column(Boolean, server_default="false")
- created_at = Column(DateTime(timezone=True), server_default=func.now())
|