"""预警 API""" from fastapi import APIRouter, Depends, Query from sqlalchemy.orm import Session from app.database import get_db from app.auth_middleware import require_auth, require_role from app.models import KPIAlert, OperationLog router = APIRouter(prefix="/api/cma/alerts", tags=["预警"], dependencies=[Depends(require_role("ceo", "finance", "business", "it"))], ) @router.get("") def list_alerts(status: str = None, page: int = Query(1, ge=1), db: Session = Depends(get_db)): query = db.query(KPIAlert) if status: query = query.filter(KPIAlert.status == status) total = query.count() alerts = query.order_by(KPIAlert.created_at.desc()).offset((page-1)*20).limit(20).all() return {"total": total, "data": [{c.name: getattr(a, c.name) for c in KPIAlert.__table__.columns} for a in alerts]} @router.post("/{alert_id}/resolve") def resolve_alert(alert_id: int, data: dict, db: Session = Depends(get_db)): alert = db.query(KPIAlert).filter(KPIAlert.id == alert_id).first() if alert: alert.status = "resolved" alert.resolution = data.get("resolution", "") alert.assignee = data.get("assignee", alert.assignee) from datetime import datetime; alert.resolved_at = datetime.now() db.commit() return {"message": "已处理", "assignee": alert.assignee}