完善区域漏损识别

This commit is contained in:
2026-03-04 15:21:31 +08:00
parent d0abad3c65
commit 61f6975296
5 changed files with 732 additions and 34 deletions
+33 -2
View File
@@ -1,16 +1,21 @@
from typing import Any
from datetime import datetime
from fastapi import APIRouter, HTTPException
from pydantic import BaseModel
from app.services.leakage_identifier import run_leakage_identification
from app.services.leakage_identifier import (
get_leakage_identify_scheme_detail,
list_leakage_identify_schemes,
run_leakage_identification,
)
router = APIRouter()
class LeakageIdentifyRequest(BaseModel):
network: str
observed_pressure_data: str | dict[str, list[Any]] | list[dict[str, Any]]
observed_pressure_data: str | dict[str, list[Any]] | list[dict[str, Any]] | None = None
start_time: float = 0
duration: float = 24
timestep: float = 5
@@ -20,6 +25,12 @@ class LeakageIdentifyRequest(BaseModel):
pop_size: int = 50
max_gen: int = 100
output_flow_unit: str = "m3/s"
dma_count: int | None = None
scada_start: datetime | None = None
scada_end: datetime | None = None
sensor_nodes: list[str] | None = None
scheme_name: str | None = None
username: str = "admin"
@router.post("/identify/")
@@ -28,3 +39,23 @@ async def identify_leakage(data: LeakageIdentifyRequest) -> dict[str, Any]:
return run_leakage_identification(**data.dict())
except Exception as exc:
raise HTTPException(status_code=400, detail=str(exc))
@router.get("/schemes/")
async def query_leakage_schemes(
network: str, query_date: datetime | None = None
) -> list[dict[str, Any]]:
try:
return list_leakage_identify_schemes(network=network, query_date=query_date)
except Exception as exc:
raise HTTPException(status_code=400, detail=str(exc))
@router.get("/schemes/{scheme_name}")
async def query_leakage_scheme_detail(
network: str, scheme_name: str
) -> dict[str, Any]:
try:
return get_leakage_identify_scheme_detail(network=network, scheme_name=scheme_name)
except Exception as exc:
raise HTTPException(status_code=400, detail=str(exc))