88 lines
2.9 KiB
Python
88 lines
2.9 KiB
Python
from celery import Celery, current_task
|
|
from celery_app import celery_app
|
|
import asyncio
|
|
import logging
|
|
from typing import Dict, Any
|
|
from contextlib import asynccontextmanager
|
|
|
|
from .services import obtener_acuse
|
|
from api.api_v2.modules.tasks.services import register_task, update_task
|
|
|
|
|
|
@celery_app.task(bind=True)
|
|
def process_acuse_request(self, acuse_request: Dict[str, Any]) -> Dict[str, Any]:
|
|
"""
|
|
Tarea para procesar solicitudes de acuse.
|
|
"""
|
|
task_id = self.request.id
|
|
pedimento_info = acuse_request.get('pedimento', {})
|
|
pedimento_id = pedimento_info.get('id')
|
|
organizacion_id = pedimento_info.get('organizacion')
|
|
pedimento_app = pedimento_info.get('pedimento_app', 'N/A')
|
|
|
|
try:
|
|
# Registrar el inicio de la tarea
|
|
loop = asyncio.get_event_loop()
|
|
logging.info(f"[ACUSE] Registrando inicio de tarea {task_id}")
|
|
loop.run_until_complete(
|
|
register_task(
|
|
task_id=task_id,
|
|
status="submitted",
|
|
message=f"Iniciando proceso de acuse para pedimento {pedimento_app}",
|
|
pedimento_id=pedimento_id,
|
|
organizacion_id=organizacion_id,
|
|
servicio=6 # 6 corresponde a "Acuse"
|
|
)
|
|
)
|
|
|
|
# Esperar un momento breve para asegurar que el registro se complete
|
|
import time
|
|
time.sleep(1)
|
|
|
|
# Actualizar estado: procesando
|
|
logging.info(f"[ACUSE] Actualizando estado a processing para tarea {task_id}")
|
|
loop.run_until_complete(
|
|
update_task(
|
|
task_id=task_id,
|
|
status="processing",
|
|
message=f"Procesando acuse para pedimento {pedimento_app}",
|
|
pedimento_id=pedimento_id,
|
|
organizacion_id=organizacion_id,
|
|
servicio=6
|
|
)
|
|
)
|
|
|
|
# Obtener el acuse
|
|
acuse_response = loop.run_until_complete(obtener_acuse(**acuse_request))
|
|
|
|
# Actualizar estado: completado
|
|
loop.run_until_complete(
|
|
update_task(
|
|
task_id=task_id,
|
|
status="completed",
|
|
message=f"Acuse obtenido exitosamente para pedimento {pedimento_app}",
|
|
pedimento_id=pedimento_id,
|
|
organizacion_id=organizacion_id,
|
|
servicio=6
|
|
)
|
|
)
|
|
|
|
return {"status": "processed", "data": acuse_response}
|
|
|
|
except Exception as e:
|
|
# En caso de error, actualizar estado
|
|
error_message = f"Error al procesar acuse para pedimento {pedimento_app}: {str(e)}"
|
|
logging.error(error_message)
|
|
loop.run_until_complete(
|
|
update_task(
|
|
task_id=task_id,
|
|
status="failed",
|
|
message=error_message,
|
|
pedimento_id=pedimento_id,
|
|
organizacion_id=organizacion_id,
|
|
servicio=6
|
|
)
|
|
)
|
|
raise
|
|
|