From 43af9249200a7422367e34ecd0d0c36754b4c7e0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=9B=B7=E9=9B=A8?= Date: Sat, 6 Dec 2025 16:23:21 +0800 Subject: [PATCH] =?UTF-8?q?feat:=E6=8F=90=E4=BA=A4=E4=B8=8B=E8=BD=BD?= =?UTF-8?q?=E6=96=87=E4=BB=B6=E4=BB=A3=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- db/sql_db.py | 1 + main.py | 19 ++++++++++++++++--- service/db_service.py | 18 ++++++++++++++++++ service/excel_service.py | 8 ++++++-- service/file_service.py | 5 ++++- 5 files changed, 45 insertions(+), 6 deletions(-) create mode 100644 service/db_service.py diff --git a/db/sql_db.py b/db/sql_db.py index c95daf9..f3c67c1 100644 --- a/db/sql_db.py +++ b/db/sql_db.py @@ -9,6 +9,7 @@ DB_PATH = config('DB_PATH', default='E://pyptoject//yj_resume//main.sqlite3') class DBTASK(Base): __tablename__ = 'db_task' id = Column(String(100), primary_key=True) + name = Column(String(100), nullable=False) create_time = Column(DateTime, nullable=False, ) # 0 代表待执行,1 成功,2 失败 status = Column(Integer, nullable=False, default=0) diff --git a/main.py b/main.py index 365622a..4e06229 100644 --- a/main.py +++ b/main.py @@ -4,7 +4,8 @@ from fastapi import FastAPI, File, UploadFile, HTTPException from typing import List from service.file_service import check_and_create_directory, upload_and_save_file from service import excel_service - +from service.db_service import get_task_list +from fastapi.responses import FileResponse app = FastAPI() @@ -28,8 +29,20 @@ async def create_upload_files(files: List[UploadFile] = File(...)): @app.get("/export_task_data_to_excel") def export_task_data_to_excel(task_id: str): - message = excel_service.export_task_data_to_excel(task_id) - return {"message": message} + 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__': diff --git a/service/db_service.py b/service/db_service.py new file mode 100644 index 0000000..eab0923 --- /dev/null +++ b/service/db_service.py @@ -0,0 +1,18 @@ +from db.sql_db import DBTASK, DBRESUME, SqliteSqlalchemy + + +def get_task_list(): + task_list = SqliteSqlalchemy().session.query(DBTASK).order_by(DBTASK.create_time.desc()).all() + result=[] + for task in task_list: + result.append({ + "id": task.id, + "name": task.name, + "success_num": task.success_num, + "fail_num": task.fail_num, + "status": task.status, + "total_num": task.total_num, + "message": task.message, + "create_time": task.create_time.strftime("%Y-%m-%d %H:%M:%S") if task.create_time else None, + }) + return result diff --git a/service/excel_service.py b/service/excel_service.py index 3920057..99ba9c5 100644 --- a/service/excel_service.py +++ b/service/excel_service.py @@ -22,9 +22,13 @@ def export_to_excel(task_id): def export_task_data_to_excel(task_id): + pathxx = pathlib.Path(BASE_PATH).joinpath(task_id) + pathxx = pathxx.joinpath(f"{task_id}.xlsx") + if pathxx.exists(): + return pathxx session = SqliteSqlalchemy().session task = session.query(DBTASK).filter_by(id=task_id).first() if not task or task.status == 0 or task.status == 2: - return "任务未完成或者失败" + return None export_to_excel(task_id) - return "导出成功" + return pathxx diff --git a/service/file_service.py b/service/file_service.py index 38bdc94..9c36a05 100644 --- a/service/file_service.py +++ b/service/file_service.py @@ -15,8 +15,11 @@ def check_and_create_directory(files): if not files or len(files) == 0: return None id = str(uuid.uuid4()) + current_time = datetime.now() + # 格式化时间为字符串 + formatted_time = current_time.strftime("%Y-%m-%d-%H-%M-%S") task = DBTASK(id=id, create_time=datetime.now(), status=0, success_num=0, total_num=len(files), - fail_num=0) + fail_num=0,name=f"解析任务({formatted_time})") session = SqliteSqlalchemy().session try: