statistics.py 2.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546
  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. class ActiveTaskGroupItem(BaseModel):
  23. routing_key: str = Field(..., description="任务队列/Routing Key")
  24. count: int = Field(..., description="活跃任务数量")
  25. # 4. 最新动态
  26. class ActivityItem(BaseModel):
  27. id: str = Field(..., description="唯一标识")
  28. text: str = Field(..., description="显示文本")
  29. time: str = Field(..., description="相对时间描述,如'10分钟前'")
  30. type: str = Field(..., description="类型: order, money, ticket, system")
  31. # === 主响应模型 ===
  32. class VasStatisticsOverviewOut(BaseModel):
  33. stats: StatsData
  34. revenue_trend: List[RevenueTrendItem]
  35. product_dist: List[ProductDistItem]
  36. recent_activities: List[ActivityItem]
  37. active_tasks_dist: List[ActiveTaskGroupItem]