monitoring.py 3.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889
  1. from sqlalchemy import Column, Integer, String, Boolean, DateTime, Numeric, func
  2. from app.models import Base
  3. class SuperAdmin(Base):
  4. """超级管理员表"""
  5. __tablename__ = "super_admin"
  6. __table_args__ = {"schema": "domain_monitor"}
  7. id = Column(Integer, primary_key=True, autoincrement=True)
  8. username = Column(String, nullable=False)
  9. nickname = Column(String)
  10. remark = Column(String) # 域名备注,作为超管显示名称
  11. created_at = Column(DateTime(timezone=True), server_default=func.now())
  12. class SuperAdminTenant(Base):
  13. """超级管理员-租户关联表"""
  14. __tablename__ = "super_admin_tenant"
  15. __table_args__ = {"schema": "domain_monitor"}
  16. id = Column(Integer, primary_key=True, autoincrement=True)
  17. super_admin_id = Column(Integer, nullable=False, index=True)
  18. tenant_id = Column(Integer, nullable=False, index=True)
  19. class Tenant(Base):
  20. """租户(企业)表"""
  21. __tablename__ = "tenant"
  22. __table_args__ = {"schema": "domain_monitor"}
  23. id = Column(Integer, primary_key=True, autoincrement=True)
  24. company_name = Column(String)
  25. subdomain = Column(String, unique=True, nullable=False, index=True)
  26. balance = Column(Numeric(20, 4), server_default="0")
  27. created_at = Column(DateTime(timezone=True), server_default=func.now())
  28. updated_at = Column(DateTime(timezone=True), onupdate=func.now())
  29. class Model(Base):
  30. """模型信息参考表"""
  31. __tablename__ = "models"
  32. __table_args__ = {"schema": "domain_monitor"}
  33. id = Column(Integer, primary_key=True, autoincrement=True)
  34. model_code = Column(String, unique=True, nullable=False, index=True)
  35. model_name = Column(String, nullable=False)
  36. original_price = Column(Numeric(20, 4))
  37. class SuperAdminModelDiscount(Base):
  38. """超级管理员模型折扣表(从 crawler 同步)"""
  39. __tablename__ = "super_admin_model_discount"
  40. __table_args__ = {"schema": "domain_monitor"}
  41. id = Column(Integer, primary_key=True, autoincrement=True)
  42. model_code = Column(String, unique=True, nullable=False, index=True)
  43. discount_rate = Column(Numeric(10, 4), server_default="1.0000", nullable=False)
  44. created_at = Column(DateTime(timezone=True), server_default=func.now())
  45. updated_at = Column(DateTime(timezone=True), onupdate=func.now())
  46. class UserConsumptionDetail(Base):
  47. """用户模型消费明细表(每次调用的记录)"""
  48. __tablename__ = "user_consumption_detail"
  49. __table_args__ = {"schema": "domain_monitor"}
  50. id = Column(Integer, primary_key=True, autoincrement=True)
  51. user_id = Column(String, nullable=False, index=True)
  52. username = Column(String)
  53. tenant_id = Column(Integer, nullable=False, index=True)
  54. model_code = Column(String, nullable=False, index=True)
  55. call_count = Column(Integer, server_default="0")
  56. # 用户侧:用户实际支付
  57. user_actual_total = Column(Numeric(20, 4), server_default="0")
  58. user_discount = Column(Numeric(10, 4), server_default="1.0000")
  59. user_actual_price = Column(Numeric(20, 4))
  60. # 租户侧:平台向企业收取
  61. tenant_actual_total = Column(Numeric(20, 4), server_default="0")
  62. tenant_discount = Column(Numeric(10, 4), server_default="1.0000")
  63. tenant_actual_price = Column(Numeric(20, 4))
  64. # 超管侧:平台向超管收取
  65. super_admin_discount = Column(Numeric(10, 4), server_default="1.0000")
  66. super_admin_actual_price = Column(Numeric(20, 4))
  67. original_price = Column(Numeric(20, 4))
  68. consumption_date = Column(DateTime(timezone=True), nullable=False, index=True)
  69. order_no = Column(String)
  70. invoiced = Column(Boolean, server_default="false")
  71. created_at = Column(DateTime(timezone=True), server_default=func.now())