12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152 |
- 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)}
|