monitoring.py 2.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374
  1. from fastapi import APIRouter, Depends, Query
  2. from sqlalchemy.ext.asyncio import AsyncSession
  3. from app.database import get_db
  4. from app.services.monitoring import get_dashboard, get_consumption_details, get_daily_stats
  5. router = APIRouter(prefix="/api/public/monitoring", tags=["监控大屏"])
  6. @router.get("/dashboard")
  7. async def get_monitoring_dashboard(
  8. db: AsyncSession = Depends(get_db),
  9. start_date: str | None = Query(None, description="查询开始日期,格式 YYYY-MM-DD,不传则查全部"),
  10. end_date: str | None = Query(None, description="查询结束日期,格式 YYYY-MM-DD,不传则查全部"),
  11. super_admin_id: int | None = Query(None, description="指定某个超级管理员ID,不传则查全部"),
  12. super_admin_name: str | None = Query(None, description="按超级管理员名称模糊匹配,不传则查全部"),
  13. ):
  14. """
  15. 获取监控大屏数据
  16. 层级结构:平台 → 超级管理员 → 租户 → 用户
  17. """
  18. return await get_dashboard(
  19. db,
  20. start_date=start_date,
  21. end_date=end_date,
  22. super_admin_id=super_admin_id,
  23. super_admin_name=super_admin_name,
  24. )
  25. @router.get("/consumption-details")
  26. async def list_consumption_details(
  27. db: AsyncSession = Depends(get_db),
  28. start_date: str | None = Query(None, description="查询开始日期,格式 YYYY-MM-DD"),
  29. end_date: str | None = Query(None, description="查询结束日期,格式 YYYY-MM-DD"),
  30. super_admin_name: str | None = Query(None, description="按超级管理员名称筛选"),
  31. tenant_name: str | None = Query(None, description="按租户名称筛选"),
  32. page: int = Query(1, ge=1, description="页码"),
  33. page_size: int = Query(20, ge=1, le=100, description="每页数量"),
  34. ):
  35. """
  36. 获取原始消费明细列表(每条记录一行,不聚合)
  37. 用于对账场景
  38. """
  39. return await get_consumption_details(
  40. db,
  41. start_date=start_date,
  42. end_date=end_date,
  43. super_admin_name=super_admin_name,
  44. tenant_name=tenant_name,
  45. page=page,
  46. page_size=page_size,
  47. )
  48. @router.get("/daily-stats")
  49. async def get_daily_consumption_stats(
  50. db: AsyncSession = Depends(get_db),
  51. start_date: str = Query(..., description="开始日期,格式 YYYY-MM-DD"),
  52. end_date: str = Query(..., description="结束日期,格式 YYYY-MM-DD"),
  53. super_admin_name: str | None = Query(None, description="按超级管理员名称筛选"),
  54. tenant_name: str | None = Query(None, description="按租户名称筛选"),
  55. ):
  56. """
  57. 获取按日聚合的消费统计
  58. 当筛选了日期范围时,展示每日的消费汇总(超级管理员 → 租户 → 每日金额)
  59. """
  60. return await get_daily_stats(
  61. db,
  62. start_date=start_date,
  63. end_date=end_date,
  64. super_admin_name=super_admin_name,
  65. tenant_name=tenant_name,
  66. )