monitoring.py 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120
  1. from pydantic import BaseModel
  2. from typing import Optional
  3. from datetime import datetime
  4. class ConsumptionRecord(BaseModel):
  5. """单条消费记录流水"""
  6. user_id: str
  7. username: str
  8. tenant_name: Optional[str] = None
  9. order_no: str
  10. model_name: str
  11. model_code: str
  12. amount: str
  13. created_at: str
  14. invoiced: bool
  15. user_discount: str
  16. user_actual_price: str
  17. tenant_discount: str
  18. tenant_actual_price: str
  19. super_admin_discount: str
  20. super_admin_actual_price: str
  21. class UserConsumption(BaseModel):
  22. """用户消费数据"""
  23. user_id: str
  24. username: str
  25. nickname: Optional[str] = None
  26. total_consumption: str
  27. tenant_actual_total: str
  28. tenant_name: Optional[str] = None
  29. consumption_records: list[ConsumptionRecord]
  30. class TenantData(BaseModel):
  31. """租户消费数据"""
  32. tenant_id: int
  33. company_name: Optional[str] = None
  34. subdomain: str
  35. total_consumption: str
  36. total_tenant_charged: str
  37. balance: str
  38. user_count: int
  39. users: list[UserConsumption]
  40. class SuperAdminData(BaseModel):
  41. """超级管理员消费数据"""
  42. super_admin_id: int
  43. username: str
  44. nickname: Optional[str] = None
  45. remark: Optional[str] = None
  46. tenant_count: int
  47. total_consumption: str
  48. total_tenant_charged: str
  49. tenants: list[TenantData]
  50. class Overview(BaseModel):
  51. """平台汇总数据"""
  52. total_super_admins: int
  53. total_tenants: int
  54. total_users: int
  55. total_consumption: str
  56. total_tenant_charged: str
  57. total_balance: str
  58. class ConsumptionDetailRecord(BaseModel):
  59. """单条消费明细记录(不聚合)"""
  60. user_id: str
  61. user_name: str
  62. tenant_name: str
  63. order_no: str
  64. model_code: str
  65. consumption_date: str # 消费时间
  66. tenant_consumed: str # 企业实际支付金额
  67. user_discount: str # 用户折扣率
  68. user_consumed: str # 用户实际支付金额
  69. tenant_discount: str # 企业折扣率
  70. tenant_actual_price: str # 企业实际被收取金额
  71. super_admin_discount: str # 超管折扣率
  72. super_admin_actual_price: str # 平台向超管收取金额
  73. class DailyTenantStat(BaseModel):
  74. """租户按日消费统计"""
  75. tenant_name: str
  76. date: str
  77. consumption: str
  78. charged: str
  79. class DailySAStat(BaseModel):
  80. """超级管理员按日消费统计"""
  81. sa_name: str
  82. date: str
  83. consumption: str
  84. charged: str
  85. tenants: list[DailyTenantStat]
  86. class DailyStatsResponse(BaseModel):
  87. """按日消费统计响应"""
  88. sa_stats: list[DailySAStat]
  89. class ConsumptionDetailResponse(BaseModel):
  90. """消费明细列表响应"""
  91. total: int
  92. records: list[ConsumptionDetailRecord]
  93. class DashboardResponse(BaseModel):
  94. """监控大屏响应"""
  95. overview: Overview
  96. super_admins: list[SuperAdminData]
  97. start_date: Optional[str] = None
  98. end_date: Optional[str] = None