from fastapi import FastAPI import uvicorn from fastapi import FastAPI, File, UploadFile, HTTPException from typing import List from service.file_service import check_and_create_directory, upload_and_save_file, fetch_files from service import excel_service from service.db_service import get_task_list from fastapi.responses import FileResponse import threading from logging_config import LOGGING_CONFIG import logging logger = logging.getLogger(__name__) app = FastAPI() import concurrent.futures executor = concurrent.futures.ThreadPoolExecutor(max_workers=10) @app.get("/api/v1/hw") def read_root(): return {"Hello": "World"} # 上传文件并解析,解析是异步错误 @app.post("/upload_files_and_parse") async def create_upload_files(files: List[UploadFile] = File(...)): dir_id = check_and_create_directory(files) if not dir_id: return {"result": False, "code": 500, "message": "create directory failed"} flag, message = await upload_and_save_file(dir_id, files) logger.info(f"flag is {flag}") if flag: #flag, message = await fetch_files(dir_id) executor.submit(fetch_files, dir_id) return {"result": flag, "message": message, "task_id": dir_id} @app.get("/export_task_data_to_excel") def export_task_data_to_excel(task_id: str): path_xx = excel_service.export_task_data_to_excel(task_id) if not path_xx: raise HTTPException(status_code=404, detail="file not found") return FileResponse( path=path_xx, media_type="application/octet-stream", # 通用二进制流 filename=f"{task_id}.xlsx" # 浏览器下载时使用的文件名 ) @app.get("/parse_task_list") def parse_task_list(): data = get_task_list() return {"data": data, "code": 200, } if __name__ == '__main__': logger.info("start server") uvicorn.run(app, host="0.0.0.0", port=3006)