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