from config import load_service_config from database import MySqlDao from fastapi import APIRouter, status, HTTPException import os from .request_body import EvalReportRequest import requests from utils import ReportUtils, FileStreamUtils cfgs = load_service_config() dao = MySqlDao() router = APIRouter() @router.post('/eval_report') async def eval_report(request: EvalReportRequest): """生成并上传验证报告到阿里云文件数据库""" reports_dir = os.path.join('./data/reports', request.city_uuid, request.product_code) report_util = ReportUtils(request.city_uuid, request.product_code) # 获取report数据表中eval_table的file_id,如果不为空,直接返回结果,如果为空则先创建验证数据 eval_file_id = dao.get_report_file_id(request.cultivacation_id)['val_table'].item() if eval_file_id: content = [ { "id": 1, "filename": "投放验证报告", "file_id": eval_file_id } ] return {"code": 200, "msg": "success", "data": {"evalReportInfo": content}} # 获取推荐列表 file_id = dao.get_report_file_id(request.cultivacation_id)['recommend_table'].item() if file_id is None: return {"code": 405, "msg": "推荐表丢失,生成验证报告失败!", "data": {"reportInfo": "推荐表丢失,生成验证报告失败!"}} recommend_data = FileStreamUtils.download_file(file_id) if recommend_data is None: return {"code": 405, "msg": "下载推荐数据出错,生成验证报告失败!", "data": {"reportInfo": "下载推荐数据出错,生成验证报告失败!"}} # 生成验证报告 report_util.generate_eval_data(request.start_time, request.end_time, recommend_data) # 上传报告 eval_report = ['投放验证报告'] file_id_map = FileStreamUtils.upload_files(reports_dir, eval_report) dao.update_eval_report_data(request.cultivacation_id, file_id_map.get('投放验证报告')) content = [ { "id": 1, "filename": "投放验证报告", "file_id": file_id_map.get('投放验证报告') } ] return {"code": 200, "msg": "success", "data": {"evalReportInfo": content}}