init
This commit is contained in:
+19
-88
@@ -218,111 +218,33 @@ async def debug_tasks():
|
||||
@router.get("/history")
|
||||
@router.post("/history")
|
||||
async def get_file_history(db_session: AsyncSession = Depends(get_db_session)):
|
||||
"""获取按文件名分组的文件历史记录"""
|
||||
from sqlalchemy import select
|
||||
from models.database import ProcessingTask, STPFile
|
||||
"""获取按文件名分组的文件历史记录(支持多上传)"""
|
||||
storage_service = StorageIntegrationService()
|
||||
|
||||
# 从数据库查询所有处理任务
|
||||
result = await db_session.execute(
|
||||
select(ProcessingTask, STPFile)
|
||||
.join(STPFile, ProcessingTask.stp_file_id == STPFile.id)
|
||||
.order_by(ProcessingTask.created_time.desc())
|
||||
)
|
||||
|
||||
tasks = result.all()
|
||||
|
||||
# 按文件名分组
|
||||
file_groups = {}
|
||||
for task, stp_file in tasks:
|
||||
filename = stp_file.original_filename
|
||||
if filename not in file_groups:
|
||||
file_groups[filename] = []
|
||||
|
||||
file_groups[filename].append({
|
||||
"task_id": task.task_id,
|
||||
"filename": filename,
|
||||
"upload_time": task.created_time.isoformat() if task.created_time else "",
|
||||
"status": task.status,
|
||||
"file_size": stp_file.file_size
|
||||
})
|
||||
|
||||
# 构建返回数据
|
||||
files = []
|
||||
for filename, file_tasks in file_groups.items():
|
||||
# 按上传时间排序
|
||||
file_tasks.sort(key=lambda x: x.get("upload_time", ""), reverse=True)
|
||||
|
||||
files.append({
|
||||
"filename": filename,
|
||||
"record_count": len(file_tasks),
|
||||
"last_upload": file_tasks[0].get("upload_time", ""),
|
||||
"first_upload": file_tasks[-1].get("upload_time", "") if len(file_tasks) > 1 else ""
|
||||
})
|
||||
|
||||
# 按最后上传时间排序
|
||||
files.sort(key=lambda x: x["last_upload"], reverse=True)
|
||||
file_groups = await storage_service.get_all_file_groups(db_session)
|
||||
|
||||
return {
|
||||
"total_files": len(files),
|
||||
"files": files
|
||||
"total_files": len(file_groups),
|
||||
"files": file_groups
|
||||
}
|
||||
|
||||
|
||||
@router.get("/history/{filename}")
|
||||
@router.post("/history/{filename}")
|
||||
async def get_file_records(filename: str, db_session: AsyncSession = Depends(get_db_session)):
|
||||
"""获取指定文件名的所有记录"""
|
||||
# URL解码文件名
|
||||
"""获取指定文件名的所有上传记录(支持多上传历史)"""
|
||||
import urllib.parse
|
||||
decoded_filename = urllib.parse.unquote(filename)
|
||||
|
||||
# 从数据库查询指定文件名的所有处理任务
|
||||
from sqlalchemy import select
|
||||
from models.database import ProcessingTask, STPFile
|
||||
|
||||
result = await db_session.execute(
|
||||
select(ProcessingTask, STPFile)
|
||||
.join(STPFile, ProcessingTask.stp_file_id == STPFile.id)
|
||||
.where(STPFile.original_filename == decoded_filename)
|
||||
.order_by(ProcessingTask.created_time.desc())
|
||||
storage_service = StorageIntegrationService()
|
||||
file_records = await storage_service.get_file_history_by_filename(
|
||||
db_session,
|
||||
decoded_filename
|
||||
)
|
||||
|
||||
tasks = result.all()
|
||||
|
||||
# 构建返回数据
|
||||
file_records = []
|
||||
for task, stp_file in tasks:
|
||||
file_records.append({
|
||||
"task_id": task.task_id,
|
||||
"filename": stp_file.original_filename,
|
||||
"file_size": stp_file.file_size,
|
||||
"upload_time": task.created_time.isoformat() if task.created_time else "",
|
||||
"status": task.status,
|
||||
"completed_at": task.completed_time.isoformat() if task.completed_time else ""
|
||||
})
|
||||
|
||||
# 按上传时间排序(最新的在前)
|
||||
file_records.sort(key=lambda x: x.get("upload_time", ""), reverse=True)
|
||||
|
||||
return file_records
|
||||
|
||||
|
||||
@router.get("/history")
|
||||
@router.post("/history")
|
||||
async def history_page(request: Request):
|
||||
"""历史记录页面"""
|
||||
from fastapi.templating import Jinja2Templates
|
||||
import os
|
||||
# 简化路径配置,直接使用当前工作目录下的templates文件夹
|
||||
templates_dir = os.path.join(os.getcwd(), "templates")
|
||||
templates = Jinja2Templates(directory=templates_dir)
|
||||
return templates.TemplateResponse("history.html", {
|
||||
"request": request,
|
||||
"pythonocc_available": True,
|
||||
"version": "3.0.0"
|
||||
})
|
||||
|
||||
|
||||
@router.get("/result/{task_id}")
|
||||
@router.post("/result/{task_id}")
|
||||
async def result_page(request: Request, task_id: str, db_session: AsyncSession = Depends(get_db_session)):
|
||||
@@ -698,6 +620,15 @@ async def process_file_core(
|
||||
# 保存质量指标和分析摘要到数据库
|
||||
await _save_analysis_metrics(db_session, stp_file_id, analysis_result)
|
||||
|
||||
# 9.6 更新STP文件的分析摘要字段(用于快速查询)
|
||||
await storage_service.update_stp_file_analysis_summary(
|
||||
db_session,
|
||||
stp_file_id,
|
||||
volume=volume_mm3,
|
||||
surface_area=surface_area_mm2,
|
||||
product_weight=product_weight_g
|
||||
)
|
||||
|
||||
# 10. 完成处理
|
||||
await storage_service.update_stp_file_status(db_session, stp_file_id, "completed")
|
||||
await storage_service.update_task_status(
|
||||
|
||||
Reference in New Issue
Block a user