""" 导入任务管理 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()