60 lines
1.7 KiB
Python
60 lines
1.7 KiB
Python
"""业务下发 API"""
|
|
from fastapi import APIRouter, Depends, HTTPException
|
|
from sqlalchemy.orm import Session
|
|
from pydantic import BaseModel
|
|
from typing import List, Optional
|
|
from app.core.database import get_db
|
|
from app.services.provision_service import ProvisionService
|
|
|
|
router = APIRouter(prefix="/api/provision", tags=["业务下发"])
|
|
|
|
|
|
class ProvisionRequest(BaseModel):
|
|
device_id: int
|
|
|
|
|
|
class BatchProvisionRequest(BaseModel):
|
|
device_ids: List[int]
|
|
|
|
|
|
class ProvisionResponse(BaseModel):
|
|
success: bool
|
|
message: str
|
|
device_id: Optional[int] = None
|
|
mac_address: Optional[str] = None
|
|
olt_ip: Optional[str] = None
|
|
port: Optional[str] = None
|
|
|
|
|
|
@router.post("/service", response_model=ProvisionResponse)
|
|
def provision_single_device(
|
|
request: ProvisionRequest,
|
|
db: Session = Depends(get_db)
|
|
):
|
|
"""下发业务到单个设备"""
|
|
service = ProvisionService(db)
|
|
result = service.provision_device(request.device_id)
|
|
|
|
if result.get("success"):
|
|
return ProvisionResponse(
|
|
success=True,
|
|
message=f"业务下发成功,MAC: {result['mac_address']}, 端口: {result['port']}",
|
|
device_id=result["device_id"],
|
|
mac_address=result["mac_address"],
|
|
olt_ip=result.get("olt_ip"),
|
|
port=result.get("port")
|
|
)
|
|
else:
|
|
raise HTTPException(status_code=400, detail=result.get("error", "业务下发失败"))
|
|
|
|
|
|
@router.post("/batch", response_model=dict)
|
|
def provision_batch_devices(
|
|
request: BatchProvisionRequest,
|
|
db: Session = Depends(get_db)
|
|
):
|
|
"""批量下发业务"""
|
|
service = ProvisionService(db)
|
|
result = service.batch_provision(request.device_ids)
|
|
return result
|