feat:提交下载文件代码
This commit is contained in:
@@ -9,6 +9,7 @@ DB_PATH = config('DB_PATH', default='E://pyptoject//yj_resume//main.sqlite3')
|
|||||||
class DBTASK(Base):
|
class DBTASK(Base):
|
||||||
__tablename__ = 'db_task'
|
__tablename__ = 'db_task'
|
||||||
id = Column(String(100), primary_key=True)
|
id = Column(String(100), primary_key=True)
|
||||||
|
name = Column(String(100), nullable=False)
|
||||||
create_time = Column(DateTime, nullable=False, )
|
create_time = Column(DateTime, nullable=False, )
|
||||||
# 0 代表待执行,1 成功,2 失败
|
# 0 代表待执行,1 成功,2 失败
|
||||||
status = Column(Integer, nullable=False, default=0)
|
status = Column(Integer, nullable=False, default=0)
|
||||||
|
|||||||
19
main.py
19
main.py
@@ -4,7 +4,8 @@ from fastapi import FastAPI, File, UploadFile, HTTPException
|
|||||||
from typing import List
|
from typing import List
|
||||||
from service.file_service import check_and_create_directory, upload_and_save_file
|
from service.file_service import check_and_create_directory, upload_and_save_file
|
||||||
from service import excel_service
|
from service import excel_service
|
||||||
|
from service.db_service import get_task_list
|
||||||
|
from fastapi.responses import FileResponse
|
||||||
app = FastAPI()
|
app = FastAPI()
|
||||||
|
|
||||||
|
|
||||||
@@ -28,8 +29,20 @@ async def create_upload_files(files: List[UploadFile] = File(...)):
|
|||||||
|
|
||||||
@app.get("/export_task_data_to_excel")
|
@app.get("/export_task_data_to_excel")
|
||||||
def export_task_data_to_excel(task_id: str):
|
def export_task_data_to_excel(task_id: str):
|
||||||
message = excel_service.export_task_data_to_excel(task_id)
|
path_xx = excel_service.export_task_data_to_excel(task_id)
|
||||||
return {"message": message}
|
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__':
|
if __name__ == '__main__':
|
||||||
|
|||||||
18
service/db_service.py
Normal file
18
service/db_service.py
Normal file
@@ -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
|
||||||
@@ -22,9 +22,13 @@ def export_to_excel(task_id):
|
|||||||
|
|
||||||
|
|
||||||
def export_task_data_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
|
session = SqliteSqlalchemy().session
|
||||||
task = session.query(DBTASK).filter_by(id=task_id).first()
|
task = session.query(DBTASK).filter_by(id=task_id).first()
|
||||||
if not task or task.status == 0 or task.status == 2:
|
if not task or task.status == 0 or task.status == 2:
|
||||||
return "任务未完成或者失败"
|
return None
|
||||||
export_to_excel(task_id)
|
export_to_excel(task_id)
|
||||||
return "导出成功"
|
return pathxx
|
||||||
|
|||||||
@@ -15,8 +15,11 @@ def check_and_create_directory(files):
|
|||||||
if not files or len(files) == 0:
|
if not files or len(files) == 0:
|
||||||
return None
|
return None
|
||||||
id = str(uuid.uuid4())
|
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),
|
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
|
session = SqliteSqlalchemy().session
|
||||||
try:
|
try:
|
||||||
|
|||||||
Reference in New Issue
Block a user