cms.py 1.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152
  1. import json
  2. import traceback
  3. from fastapi import APIRouter, HTTPException
  4. from app.logger import logger
  5. from app.models.CmsAnalysisInput import CmsAnalysisInput
  6. from app.services.CMSAnalyst import CMSAnalyst
  7. router = APIRouter()
  8. @router.post("/analysis/{analysisType}")
  9. async def analyze(analysisType: str, input_data:CmsAnalysisInput):
  10. analysis_map = {
  11. #包络谱分析
  12. "envelope": "envelope_spectrum",
  13. #频域分析
  14. "frequency": "frequency_domain",
  15. #时域分析
  16. "time": "time_domain",
  17. #趋势分析
  18. "trend": "trend_analysis"
  19. }
  20. if analysisType not in analysis_map:
  21. raise HTTPException(status_code=400, detail="非可用的分析类型")
  22. try:
  23. cms = CMSAnalyst(input_data.fmin, input_data.fmax, input_data.windCode, input_data.ids)
  24. func = getattr(cms, analysis_map[analysisType])
  25. # 用于判断一个对象是否可以被调用,是的话返回true
  26. if callable(func):
  27. func_res = func()
  28. if isinstance(func_res, str):
  29. # 字符串转化为字典形式
  30. func_res = json.loads(func_res)
  31. if isinstance(func_res, dict):
  32. func_res['type'] = analysisType
  33. elif isinstance(func_res, list):
  34. func_res = {'type': analysisType, 'data': func_res}
  35. else:
  36. # 处理其他情况,例如其他数据类型
  37. func_res = {'type': analysisType, 'data': str(func_res)}
  38. #对象转化为字符串形式
  39. return json.dumps(func_res,ensure_ascii=False)
  40. # return JSONResponse(content=func_res)#返回json格式
  41. except Exception as e:
  42. logger.error(f"analyze is bad {traceback.format_exc()}")
  43. return {"message": "error", "detail": str(e)}