From cf6d388155cc03f315c4b75df221eab3f96fc96a Mon Sep 17 00:00:00 2001 From: JIANG Date: Mon, 3 Nov 2025 16:25:06 +0800 Subject: [PATCH] =?UTF-8?q?=E6=96=B0=E5=A2=9E=E7=9B=91=E6=B5=8B=E7=82=B9?= =?UTF-8?q?=E4=BC=98=E5=8C=96=E6=96=B9=E6=A1=88=E5=88=9B=E5=BB=BAAPI?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- main.py | 64 +++++++++++++++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 62 insertions(+), 2 deletions(-) diff --git a/main.py b/main.py index b658bdc..32cb50a 100644 --- a/main.py +++ b/main.py @@ -3993,7 +3993,7 @@ async def fastapi_pump_failure(data: PumpFailureState) -> str: # pressure_sensor_placement_sensitivity api 50 ############################################################ # 2025/05/17 -class Pressure_Sensor_Placement_Sensitivity(BaseModel): +class Pressure_Sensor_Placement(BaseModel): name: str scheme_name: str sensor_number: int @@ -4003,7 +4003,7 @@ class Pressure_Sensor_Placement_Sensitivity(BaseModel): @app.post("/pressure_sensor_placement_sensitivity/") async def fastapi_pressure_sensor_placement_sensitivity( - data: Pressure_Sensor_Placement_Sensitivity, + data: Pressure_Sensor_Placement, ) -> None: item = data.dict() pressure_sensor_placement_sensitivity( @@ -4015,6 +4015,66 @@ async def fastapi_pressure_sensor_placement_sensitivity( ) +@app.post("/pressure_sensor_placement_kmeans/") +async def fastapi_pressure_sensor_placement_kmeans( + data: Pressure_Sensor_Placement, +) -> None: + item = data.dict() + pressure_sensor_placement_kmeans( + name=item["name"], + scheme_name=item["scheme_name"], + sensor_number=item["sensor_number"], + min_diameter=item["min_diameter"], + username=item["username"], + ) + +# 后续改进:合并两个接口为一个,增加method、sensor_type参数选择方法 +class Pressure_Sensor_Placement_Request(BaseModel): + network: str + scheme_name: str + sensor_type: str + method: str # "sensitivity" 或 "kmeans" + sensor_count: int + min_diameter: int = 0 + username: str + + +@app.post("/sensorplacementscheme/create") +async def fastapi_pressure_sensor_placement( + data: Pressure_Sensor_Placement_Request, +) -> dict[str, str]: + item = data.dict() + + # 验证方法参数 + if item["method"] not in ["sensitivity", "kmeans"]: + raise HTTPException( + status_code=400, detail="Invalid method. Must be 'sensitivity' or 'kmeans'" + ) + + try: + if item["method"] == "sensitivity": + pressure_sensor_placement_sensitivity( + name=item["network"], + scheme_name=item["scheme_name"], + sensor_number=item["sensor_count"], + min_diameter=item["min_diameter"], + username=item["username"], + ) + elif item["method"] == "kmeans": + pressure_sensor_placement_kmeans( + name=item["network"], + scheme_name=item["scheme_name"], + sensor_number=item["sensor_count"], + min_diameter=item["min_diameter"], + username=item["username"], + ) + + return {"status": "success", "method": item["method"]} + + except Exception as e: + raise HTTPException(status_code=500, detail=f"执行失败: {str(e)}") + + class Item(BaseModel): str_info: str dict_info: Optional[dict] = None