104 lines
2.7 KiB
Python
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()
|