fc / apps /pdf_splitting /tasks.py
jun2024's picture
Upload 2241 files
b4f2238 verified
Raw History Blame Contribute Delete
2.61 kB
from __future__ import annotations
import logging
from uuid import UUID
from apps.core.services.storage_service import normalize_to_media_rel
from apps.pdf_splitting.models import PdfSplitJob, PdfSplitJobStatus, PdfSplitMode
from apps.pdf_splitting.services import PdfSplitJobService, PdfSplitService
from apps.pdf_splitting.services.storage import PdfSplitStorage
logger = logging.getLogger("apps.pdf_splitting")
def execute_pdf_split_job(job_id: str) -> None:
job_service = PdfSplitJobService()
split_service = PdfSplitService()
job_uuid = UUID(job_id)
try:
job = job_service.get_job(job_uuid)
job.refresh_from_db(fields=["split_mode"])
# 手动拆分模式跳过后台分析,直接进入待复核状态
if job.split_mode == PdfSplitMode.MANUAL_SPLIT:
PdfSplitJob.objects.filter(id=job.id).update(
status=PdfSplitJobStatus.REVIEW_REQUIRED,
progress=100,
)
return
split_service.analyze_job(job)
job.refresh_from_db(fields=["split_mode", "status", "cancel_requested"])
if (
job.split_mode == PdfSplitMode.PAGE_SPLIT
and job.status == PdfSplitJobStatus.REVIEW_REQUIRED
and not job.cancel_requested
):
split_service.export_job(job)
storage = PdfSplitStorage(job.id)
job.refresh_from_db(fields=["status", "cancel_requested"])
if job.cancel_requested:
return
job_service.mark_completed(
job_id=job_uuid,
export_zip_relpath=normalize_to_media_rel(storage.export_zip_path.as_posix()),
)
except Exception as exc:
logger.exception("pdf_split_job_failed", extra={"job_id": job_id})
job_service.mark_failed(job_id=job_uuid, error_message=str(exc))
def export_pdf_split_job(job_id: str) -> None:
job_service = PdfSplitJobService()
split_service = PdfSplitService()
job_uuid = UUID(job_id)
try:
job = job_service.get_job(job_uuid)
split_service.export_job(job)
storage = PdfSplitStorage(job.id)
job.refresh_from_db(fields=["status", "cancel_requested"])
if job.cancel_requested:
return
job_service.mark_completed(
job_id=job_uuid, export_zip_relpath=normalize_to_media_rel(storage.export_zip_path.as_posix())
)
except Exception as exc:
logger.exception("pdf_split_export_failed", extra={"job_id": job_id})
job_service.mark_failed(job_id=job_uuid, error_message=str(exc))