statistics.py 1.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041
  1. # app/schemas/statistics.py (或者定义在你的 schemas 文件中)
  2. from pydantic import BaseModel, Field
  3. from typing import List
  4. # 1. 核心指标统计
  5. class StatsData(BaseModel):
  6. totalOrders: int = Field(..., description="本月订单总数")
  7. totalOrdersTrend: float = Field(..., description="订单环比增长率,例如 12.5 代表 +12.5%") # 新增字段
  8. totalRevenue: int = Field(..., description="本月总营收 (单位:分)")
  9. totalRevenueTrend: float = Field(..., description="营收环比增长率,例如 -5.0 代表 -5.0%") # 新增字段
  10. activeUsers: int = Field(..., description="总活跃用户数")
  11. pendingTickets: int = Field(..., description="待处理工单数")
  12. successRate: str = Field(..., description="机器人任务成功率")
  13. # 2. 营收趋势 (最近7天)
  14. class RevenueTrendItem(BaseModel):
  15. date: str = Field(..., description="日期,格式 MM-DD")
  16. amount: float = Field(..., description="营收金额 (单位:元)") # 注意:Service层已除以100
  17. orders: int = Field(..., description="订单数")
  18. # 3. 商品销量分布
  19. class ProductDistItem(BaseModel):
  20. name: str = Field(..., description="商品名称")
  21. value: int = Field(..., description="销量")
  22. # 4. 最新动态
  23. class ActivityItem(BaseModel):
  24. id: str = Field(..., description="唯一标识")
  25. text: str = Field(..., description="显示文本")
  26. time: str = Field(..., description="相对时间描述,如'10分钟前'")
  27. type: str = Field(..., description="类型: order, money, ticket, system")
  28. # === 主响应模型 ===
  29. class VasStatisticsOverviewOut(BaseModel):
  30. stats: StatsData
  31. revenue_trend: List[RevenueTrendItem]
  32. product_dist: List[ProductDistItem]
  33. recent_activities: List[ActivityItem]