monitoring.py 3.7 KB

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