from fastapi import APIRouter from starlette.responses import JSONResponse from app.models.TemperatureInput import TemperatureInput from app.models.TemperatureThresholdInput import TemperatureThresholdInput from app.services.MSET_Temp import MSET_Temp router = APIRouter() @router.post("/temperature/threshold") async def route_threshold(input_data: TemperatureThresholdInput): """ 阈值分析接口(带分页) - 输入: { "windCode": "WOF046400029", "windTurbineNumberList": ["WOG01312"], "startTime": "2023-11-01 00:00", "endTime": "2023-11-05 12:00", "pageNo": 2, "pageSize": 20 } - 返回: { "data": { "type": "temperature_threshold", "records": [ { "time_stamp": "2024-06-08 00:05:00", "temp_channel": "主轴承温度", "SPRT_score": 0.123, "status": "正常" }, ... ] "totalSize": 741 }, "code": 200, "message": "success" } """ try: analyzer = MSET_Temp( windCode=input_data.windCode, windTurbineNumberList=input_data.windTurbineNumberList, startTime=input_data.startTime, endTime=input_data.endTime ) records = analyzer.check_threshold().to_dict(orient="records") total = len(records) start = (input_data.pageNo - 1) * input_data.pageSize end = start + input_data.pageSize paginated = records[start:end] return { "data": { "type": "temperature_threshold", "records": paginated, "totalSize": total }, "code": 200, "message": "success" } except Exception as e: return JSONResponse( status_code=500, content={ "code": 500, "message": "analysis failed", "detail": str(e) } ) # SPRT趋势分析 @router.post("/SPRT/trend") async def route_trend(input_data: TemperatureInput): """ 趋势分析接口: - 输入: { "windCode": "WOF091200030", "windTurbineNumberList": ["WOG01351"], "startTime": "2023-11-01 00:00", "endTime": "2023-11-05 12:00" } - 返回: { "data": { "type": "SPRT_trend", "main_bearing": {"timestamps": [...], "values": [...]}, # 主轴承温度 "gearbox_oil": {"timestamps": [...], "values": [...]}, # 齿轮箱油温 "generator_drive_end": {"timestamps": [...], "values": [...]}, # 发电机驱动端轴承温度 "generator_nondrive_end": {"timestamps": [...], "values": [...]} # 发电机非驱动端轴承温度 }, "code": 200, "message": "success" } """ try: analyzer = MSET_Temp( windCode=input_data.windCode, windTurbineNumberList=input_data.windTurbineNumberList, startTime=input_data.startTime, endTime=input_data.endTime ) # get_trend() 已经返回形如 {"data": { … 四个 key … }} 的字典 result = analyzer.get_trend() # 组装最终响应 return { "data": { "type": "SPRT_trend", **result.get("data", {}) # 四个通道的数据或空对象 }, "code": 200, "message": "success" } except Exception as e: return JSONResponse( status_code=500, content={ "code": 500, "message": "analysis failed", "detail": str(e) } )