from fastapi import APIRouter, Depends, Query from sqlalchemy.ext.asyncio import AsyncSession from app.database import get_db from app.services.monitoring import get_dashboard, get_consumption_details, get_daily_stats router = APIRouter(prefix="/api/public/monitoring", tags=["监控大屏"]) @router.get("/dashboard") async def get_monitoring_dashboard( db: AsyncSession = Depends(get_db), start_date: str | None = Query(None, description="查询开始日期,格式 YYYY-MM-DD,不传则查全部"), end_date: str | None = Query(None, description="查询结束日期,格式 YYYY-MM-DD,不传则查全部"), super_admin_id: int | None = Query(None, description="指定某个超级管理员ID,不传则查全部"), super_admin_name: str | None = Query(None, description="按超级管理员名称模糊匹配,不传则查全部"), ): """ 获取监控大屏数据 层级结构:平台 → 超级管理员 → 租户 → 用户 """ return await get_dashboard( db, start_date=start_date, end_date=end_date, super_admin_id=super_admin_id, super_admin_name=super_admin_name, ) @router.get("/consumption-details") async def list_consumption_details( db: AsyncSession = Depends(get_db), start_date: str | None = Query(None, description="查询开始日期,格式 YYYY-MM-DD"), end_date: str | None = Query(None, description="查询结束日期,格式 YYYY-MM-DD"), super_admin_name: str | None = Query(None, description="按超级管理员名称筛选"), tenant_name: str | None = Query(None, description="按租户名称筛选"), page: int = Query(1, ge=1, description="页码"), page_size: int = Query(20, ge=1, le=100, description="每页数量"), ): """ 获取原始消费明细列表(每条记录一行,不聚合) 用于对账场景 """ return await get_consumption_details( db, start_date=start_date, end_date=end_date, super_admin_name=super_admin_name, tenant_name=tenant_name, page=page, page_size=page_size, ) @router.get("/daily-stats") async def get_daily_consumption_stats( db: AsyncSession = Depends(get_db), start_date: str = Query(..., description="开始日期,格式 YYYY-MM-DD"), end_date: str = Query(..., description="结束日期,格式 YYYY-MM-DD"), super_admin_name: str | None = Query(None, description="按超级管理员名称筛选"), tenant_name: str | None = Query(None, description="按租户名称筛选"), ): """ 获取按日聚合的消费统计 当筛选了日期范围时,展示每日的消费汇总(超级管理员 → 租户 → 每日金额) """ return await get_daily_stats( db, start_date=start_date, end_date=end_date, super_admin_name=super_admin_name, tenant_name=tenant_name, )