import json import traceback from fastapi import APIRouter, HTTPException from app.logger import logger from app.models.CmsAnalysisInput import CmsAnalysisInput from app.services.CMSAnalyst import CMSAnalyst router = APIRouter() @router.post("/analysis/{analysisType}") async def analyze(analysisType: str, input_data: CmsAnalysisInput): analysis_map = { # 包络谱分析 "envelope": "envelope_spectrum", # 频域分析 "frequency": "frequency_domain", # 时域分析 "time": "time_domain", # 趋势分析 "trend": "trend_analysis" } if analysisType not in analysis_map: raise HTTPException(status_code=400, detail="非可用的分析类型") try: cms = CMSAnalyst(input_data.fmin, input_data.fmax, input_data.windCode, input_data.ids) func = getattr(cms, analysis_map[analysisType]) # 用于判断一个对象是否可以被调用,是的话返回true if callable(func): func_res = func() if isinstance(func_res, str): # 字符串转化为字典形式 func_res = json.loads(func_res) if isinstance(func_res, dict): func_res['type'] = analysisType elif isinstance(func_res, list): func_res = {'type': analysisType, 'data': func_res} else: # 处理其他情况,例如其他数据类型 func_res = {'type': analysisType, 'data': str(func_res)} # 对象转化为字符串形式 return json.dumps(func_res, ensure_ascii=False) # return JSONResponse(content=func_res)#返回json格式 except Exception as e: logger.error(f"analyze is bad {traceback.format_exc()}") return {"message": "error", "detail": str(e)}