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) # 获取推荐列表 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.limit_cycle_name, 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('投放验证报告')) @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_util.generate_eval_data(request.start_time, request.end_time) # 其次上传验证报告到阿里云 base_url = cfgs["aliyun"]["upload_url"] headers = { "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36", "Accept": "*/*", } cookies = { "expires_in": "10800000", "ecp_token": "ZXlKamIyUmxJam9pT1dZNFltRTNOVGhrTW1WbVpUYzRaR05oWkRZME5ERTRPREU1TkRObU9EY2lMQ0p6WTI5d1pTSTZJbkJ5YjNSbFkzUmxaQ0lzSW1Oc2FXVnVkQ0k2SW1Oc2FXVnVkRjlzYjI1bmFta2lmUT09", "acw_tc": "0a067c4317466919842786603e2653311180a2a4fa0fd05acb99cf0458b890", "isg": "BDAwNyXyI9cQD__-0PkIodjTAfiCeRTD-vUtYyqmIw3d5bGP0Y0nUayWOe2F3syb", "dd-ztna-token": "eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VySWQiOiIwNTAwMzQzMDM4MjYxNDMwOTQiLCJjb3JwSWQiOiJkaW5nYzc2YTJhMzdiMjRhODYwYTRhYzVkNjk4MDg2NGQzMzUiLCJkZXB0SWRzIjoiW1s4Mzk0NzIxNjAsODM2MjQ1MTUzLDFdXSIsInJvbGVJZHMiOiJbMjEwNDk3MDY1OF0iLCJ1bmlvbklkIjoiVXFyYTB4U0VQcWNxdFNhQTFqSzRzZ2lFaUUiLCJleHAiOjE3NDcxODQ3MjksImlhdCI6MTc0NjU3OTkyOX0.dfv612-LwnIdoKL2G73gg7LYy8SBmvr3Zaan97Q5wGUbEFdWw0JUqOQQ1jdeom_Nd9FNCHlkZM32DvwyUrNnvbg1QQy2JeYEpAgysG4h0MT_OghE6-xGVQBIkg72GPTo_cvdMYG9SMfaCo5H-73zFfwMFASFoXCDoIPha6NioIskOJMmvQVsDkHtRXYh_gv0XaJxSWirDWhKC9vxPGaIwDff8doHwPdi9uO-tO9LFy9RXdyIsBXWem31rBSD3D6FmqZLZjOOZhCKMym1VenfIKC10Oa1zm8-Y8bGyMHG0LO_68AJstKYT4alJoBVDHXpMp3zvSXXQB6da_fIthQD4A" } eval_file_path = os.path.join(reports_dir, "投放验证报告.xlsx") try: with open(eval_file_path, 'rb') as f: files = {'file': (os.path.basename(eval_file_path), f)} response = requests.post( base_url, headers=headers, files=files, verify=True ) if response.json()["success"]: file_id = response.json()["data"]["file_info"]["fileid"] return {"code": 200, "msg": "success", "data": {"reportInfo": {"id": 1, "filename": "投放验证报告", "file_id": file_id}}} else: raise HTTPException( status_code=status.HTTP_422_UNPROCESSABLE_ENTITY, detail="reports upload failed" ) except requests.exceptions.RequestException as e: print("请求出错:", e) except Exception as e: print("发生错误:", e) # 最后将file_id返回给前端