Files
TJWaterServerBinary/app/api/v1/endpoints/network/reservoirs.py
T

423 lines
13 KiB
Python

from fastapi import APIRouter, Request, Query, Path, Body
from typing import Any, List, Dict, Union
from app.services.tjnetwork import (
Any,
ChangeSet,
add_reservoir,
delete_reservoir,
get_all_reservoirs,
get_reservoir,
get_reservoir_schema,
set_reservoir,
)
router = APIRouter()
@router.get(
"/getreservoirschema",
summary="获取水库模式",
description="获取指定供水网络中所有水库的模式/属性字段定义"
)
async def fast_get_reservoir_schema(
network: str = Query(..., description="管网名称(或数据库名称)")
) -> dict[str, dict[str, Any]]:
"""
获取水库模式定义。
该端点返回指定网络中水库对象的模式定义,包括所有可用的属性字段。
Args:
network: 管网名称(或数据库名称)
Returns:
水库属性的模式定义字典
"""
return get_reservoir_schema(network)
@router.post(
"/addreservoir/",
response_model=None,
summary="添加水库",
description="在指定供水网络中添加新的水库/水源节点"
)
async def fastapi_add_reservoir(
network: str = Query(..., description="管网名称(或数据库名称)"),
reservoir: str = Query(..., description="水库的唯一标识符"),
x: float = Query(..., description="水库的X坐标"),
y: float = Query(..., description="水库的Y坐标"),
head: float = Query(..., description="水库的水头/总水头(米)")
) -> ChangeSet:
"""
添加新的水库/水源节点。
在指定的供水网络中创建一个新的水库,并设置其坐标和水头参数。
Args:
network: 管网名称(或数据库名称)
reservoir: 水库的唯一标识符
x: 水库的X坐标位置
y: 水库的Y坐标位置
head: 水库的供水水头(以米为单位)
Returns:
包含操作变更集的ChangeSet对象
"""
ps = {"id": reservoir, "x": x, "y": y, "head": head}
return add_reservoir(network, ChangeSet(ps))
@router.post(
"/deletereservoir/",
response_model=None,
summary="删除水库",
description="从指定供水网络中删除指定的水库/水源节点"
)
async def fastapi_delete_reservoir(
network: str = Query(..., description="管网名称(或数据库名称)"),
reservoir: str = Query(..., description="要删除的水库的唯一标识符")
) -> ChangeSet:
"""
删除指定的水库节点。
从指定的供水网络中删除一个水库及其相关的所有连接关系。
Args:
network: 管网名称(或数据库名称)
reservoir: 水库的唯一标识符
Returns:
包含操作变更集的ChangeSet对象
"""
ps = {"id": reservoir}
return delete_reservoir(network, ChangeSet(ps))
@router.get(
"/getreservoirhead/",
summary="获取水库水头",
description="获取指定水库的供水水头/总水头值"
)
async def fastapi_get_reservoir_head(
network: str = Query(..., description="管网名称(或数据库名称)"),
reservoir: str = Query(..., description="水库的唯一标识符")
) -> float | None:
"""
获取水库的水头参数。
返回指定水库的供水水头(总水头),单位为米。
Args:
network: 管网名称(或数据库名称)
reservoir: 水库的唯一标识符
Returns:
水库的水头值(米),如果水库不存在则返回None
"""
ps = get_reservoir(network, reservoir)
return ps["head"]
@router.get(
"/getreservoirpattern/",
summary="获取水库模式",
description="获取指定水库的运行模式/供水模式"
)
async def fastapi_get_reservoir_pattern(
network: str = Query(..., description="管网名称(或数据库名称)"),
reservoir: str = Query(..., description="水库的唯一标识符")
) -> str | None:
"""
获取水库的运行模式。
返回指定水库的供水模式,如固定水头模式、时间序列模式等。
Args:
network: 管网名称(或数据库名称)
reservoir: 水库的唯一标识符
Returns:
水库的运行模式字符串,如果水库不存在则返回None
"""
ps = get_reservoir(network, reservoir)
return ps["pattern"]
@router.get(
"/getreservoirx/",
summary="获取水库X坐标",
description="获取指定水库的X坐标位置"
)
async def fastapi_get_reservoir_x(
network: str = Query(..., description="管网名称(或数据库名称)"),
reservoir: str = Query(..., description="水库的唯一标识符")
) -> dict[str, float] | None:
"""
获取水库的X坐标。
返回指定水库的X轴坐标值。
Args:
network: 管网名称(或数据库名称)
reservoir: 水库的唯一标识符
Returns:
水库的X坐标值,如果水库不存在则返回None
"""
ps = get_reservoir(network, reservoir)
return ps["x"]
@router.get(
"/getreservoiry/",
summary="获取水库Y坐标",
description="获取指定水库的Y坐标位置"
)
async def fastapi_get_reservoir_y(
network: str = Query(..., description="管网名称(或数据库名称)"),
reservoir: str = Query(..., description="水库的唯一标识符")
) -> dict[str, float] | None:
"""
获取水库的Y坐标。
返回指定水库的Y轴坐标值。
Args:
network: 管网名称(或数据库名称)
reservoir: 水库的唯一标识符
Returns:
水库的Y坐标值,如果水库不存在则返回None
"""
ps = get_reservoir(network, reservoir)
return ps["y"]
@router.get(
"/getreservoircoord/",
summary="获取水库坐标",
description="获取指定水库的平面坐标(X和Y坐标)"
)
async def fastapi_get_reservoir_coord(
network: str = Query(..., description="管网名称(或数据库名称)"),
reservoir: str = Query(..., description="水库的唯一标识符")
) -> dict[str, float] | None:
"""
获取水库的坐标。
返回指定水库的平面坐标,包含水库ID、X坐标和Y坐标。
Args:
network: 管网名称(或数据库名称)
reservoir: 水库的唯一标识符
Returns:
包含water库ID和X、Y坐标的字典,如果水库不存在则返回None
"""
ps = get_reservoir(network, reservoir)
coord = {"id": reservoir, "x": ps["x"], "y": ps["y"]}
return coord
@router.post(
"/setreservoirhead/",
response_model=None,
summary="设置水库水头",
description="更新指定水库的供水水头/总水头值"
)
async def fastapi_set_reservoir_head(
network: str = Query(..., description="管网名称(或数据库名称)"),
reservoir: str = Query(..., description="水库的唯一标识符"),
head: float = Query(..., description="新的水头值(米)")
) -> ChangeSet:
"""
设置水库的水头参数。
更新指定水库的供水水头(总水头)值。
Args:
network: 管网名称(或数据库名称)
reservoir: 水库的唯一标识符
head: 新的水头值(以米为单位)
Returns:
包含操作变更集的ChangeSet对象
"""
ps = {"id": reservoir, "head": head}
return set_reservoir(network, ChangeSet(ps))
@router.post(
"/setreservoirpattern/",
response_model=None,
summary="设置水库模式",
description="更新指定水库的运行模式/供水模式"
)
async def fastapi_set_reservoir_pattern(
network: str = Query(..., description="管网名称(或数据库名称)"),
reservoir: str = Query(..., description="水库的唯一标识符"),
pattern: str = Query(..., description="新的运行模式")
) -> ChangeSet:
"""
设置水库的运行模式。
更新指定水库的供水模式,如固定水头模式、时间序列模式等。
Args:
network: 管网名称(或数据库名称)
reservoir: 水库的唯一标识符
pattern: 新的运行模式字符串
Returns:
包含操作变更集的ChangeSet对象
"""
ps = {"id": reservoir, "pattern": pattern}
return set_reservoir(network, ChangeSet(ps))
@router.post(
"/setreservoirx/",
response_model=None,
summary="设置水库X坐标",
description="更新指定水库的X坐标位置"
)
async def fastapi_set_reservoir_x(
network: str = Query(..., description="管网名称(或数据库名称)"),
reservoir: str = Query(..., description="水库的唯一标识符"),
x: float = Query(..., description="新的X坐标值")
) -> ChangeSet:
"""
设置水库的X坐标。
更新指定水库的X轴坐标值。
Args:
network: 管网名称(或数据库名称)
reservoir: 水库的唯一标识符
x: 新的X坐标值
Returns:
包含操作变更集的ChangeSet对象
"""
ps = {"id": reservoir, "x": x}
return set_reservoir(network, ChangeSet(ps))
@router.post(
"/setreservoiry/",
response_model=None,
summary="设置水库Y坐标",
description="更新指定水库的Y坐标位置"
)
async def fastapi_set_reservoir_y(
network: str = Query(..., description="管网名称(或数据库名称)"),
reservoir: str = Query(..., description="水库的唯一标识符"),
y: float = Query(..., description="新的Y坐标值")
) -> ChangeSet:
"""
设置水库的Y坐标。
更新指定水库的Y轴坐标值。
Args:
network: 管网名称(或数据库名称)
reservoir: 水库的唯一标识符
y: 新的Y坐标值
Returns:
包含操作变更集的ChangeSet对象
"""
ps = {"id": reservoir, "y": y}
return set_reservoir(network, ChangeSet(ps))
@router.post(
"/setreservoircoord/",
response_model=None,
summary="设置水库坐标",
description="更新指定水库的平面坐标(X和Y坐标)"
)
async def fastapi_set_reservoir_coord(
network: str = Query(..., description="管网名称(或数据库名称)"),
reservoir: str = Query(..., description="水库的唯一标识符"),
x: float = Query(..., description="新的X坐标值"),
y: float = Query(..., description="新的Y坐标值")
) -> ChangeSet:
"""
设置水库的坐标。
更新指定水库的平面坐标,包括X和Y坐标。
Args:
network: 管网名称(或数据库名称)
reservoir: 水库的唯一标识符
x: 新的X坐标值
y: 新的Y坐标值
Returns:
包含操作变更集的ChangeSet对象
"""
ps = {"id": reservoir, "x": x, "y": y}
return set_reservoir(network, ChangeSet(ps))
@router.get(
"/getreservoirproperties/",
summary="获取水库属性",
description="获取指定水库的所有属性"
)
async def fastapi_get_reservoir_properties(
network: str = Query(..., description="管网名称(或数据库名称)"),
reservoir: str = Query(..., description="水库的唯一标识符")
) -> dict[str, Any]:
"""
获取水库的所有属性。
返回指定水库的完整属性信息,包括ID、坐标、水头、模式等所有属性。
Args:
network: 管网名称(或数据库名称)
reservoir: 水库的唯一标识符
Returns:
包含水库所有属性的字典
"""
return get_reservoir(network, reservoir)
@router.get(
"/getallreservoirproperties/",
summary="获取所有水库属性",
description="获取指定供水网络中所有水库的属性"
)
async def fastapi_get_all_reservoir_properties(
network: str = Query(..., description="管网名称(或数据库名称)")
) -> list[dict[str, Any]]:
"""
获取所有水库的属性。
返回指定供水网络中所有水库的完整属性信息列表。
Args:
network: 管网名称(或数据库名称)
Returns:
包含所有水库属性的字典列表
"""
results = get_all_reservoirs(network)
return results
@router.post(
"/setreservoirproperties/",
response_model=None,
summary="设置水库属性",
description="批量更新指定水库的多个属性"
)
async def fastapi_set_reservoir_properties(
network: str = Query(..., description="管网名称(或数据库名称)"),
reservoir: str = Query(..., description="水库的唯一标识符"),
req: Request = None
) -> ChangeSet:
"""
设置水库的多个属性。
批量更新指定水库的属性。属性通过JSON请求体传递。
Args:
network: 管网名称(或数据库名称)
reservoir: 水库的唯一标识符
req: HTTP请求对象,包含JSON格式的属性数据
Returns:
包含操作变更集的ChangeSet对象
"""
props = await req.json()
ps = {"id": reservoir} | props
return set_reservoir(network, ChangeSet(ps))