Files
nanocode/fumamxCRM/backend/routers/import_tasks.py
T
Ubuntu 32b43f85bd a
2026-07-03 16:58:28 +08:00

104 lines
2.7 KiB
Python

"""
导入任务管理 API
"""
from typing import Optional
from fastapi import APIRouter, Depends, HTTPException, Query
from sqlalchemy.orm import Session
from pydantic import BaseModel
from database import get_db
from auth import get_current_user
from models import ImportTask, PotentialCustomer, PotentialContact
from import_service import import_service
router = APIRouter(prefix="/import-tasks", tags=["import-tasks"])
class ImportRequest(BaseModel):
keyword: str
page_size: int = 10
@router.post("/start")
def start_import(
request: ImportRequest,
db: Session = Depends(get_db),
current_user: dict = Depends(get_current_user)
):
"""启动导入任务"""
result = import_service.start_import(request.keyword, request.page_size)
return result
@router.post("/cancel")
def cancel_import(
request: Optional[dict] = None,
db: Session = Depends(get_db),
current_user: dict = Depends(get_current_user)
):
"""取消当前导入任务"""
print(f"[DEBUG] Cancel request received, user: {current_user.username if current_user else 'None'}")
result = import_service.cancel_import()
return result
@router.get("/status")
def get_import_status(
db: Session = Depends(get_db),
current_user: dict = Depends(get_current_user)
):
"""
获取导入任务状态
返回当前运行的任务或最后一次任务
"""
# 先检查是否有运行中的任务
running = import_service.get_running_task()
if running:
return {
"has_running_task": True,
"task": running
}
# 返回最后一次任务
latest = import_service.get_latest_task()
return {
"has_running_task": False,
"task": latest
}
@router.get("/history")
def get_import_history(
page: int = Query(1, ge=1),
page_size: int = Query(10, ge=1, le=100),
db: Session = Depends(get_db),
current_user: dict = Depends(get_current_user)
):
"""获取导入任务历史列表"""
total = db.query(ImportTask).count()
tasks = db.query(ImportTask).order_by(
ImportTask.created_at.desc()
).offset((page - 1) * page_size).limit(page_size).all()
return {
"total": total,
"page": page,
"page_size": page_size,
"tasks": [t.to_dict() for t in tasks]
}
@router.get("/{task_id}")
def get_task_detail(
task_id: int,
db: Session = Depends(get_db),
current_user: dict = Depends(get_current_user)
):
"""获取任务详情"""
task = db.query(ImportTask).filter(ImportTask.id == task_id).first()
if not task:
raise HTTPException(status_code=404, detail="任务不存在")
return task.to_dict()