Se agregaron estados y update a cada una de las tareas

This commit is contained in:
2025-10-12 07:53:05 -06:00
parent 770e0a4d13
commit 62a7f67b23
17 changed files with 640 additions and 229 deletions

View File

@@ -17,14 +17,8 @@ async def download_remesa(remesa_request: RemesaBaseSchema):
# Ejecuta la tarea de Celery de forma asíncrona
task = process_remesa_request.delay(remesa_dict)
# Registrar la tarea en el servicio de seguimiento
await register_task(
task_id=task.id,
message=f"Procesando descarga de remesa {remesa_dict.get('remesa', 'N/A')}",
status="submitted",
pedimento_id=remesa_dict.get('pedimento', {}).get('id'),
organizacion_id=remesa_dict.get('pedimento', {}).get('organizacion'),
servicio=5 # 5 corresponde a "Pedimento Remesas"
)
# Puedes devolver el ID de la tarea para consultar el estado después
return {"status": "submitted", "detail": "La solicitud de descarga de la remesa ha sido enviada.", "task_id": task.id}
return {
"status": "submitted",
"detail": "La solicitud de descarga de la remesa ha sido enviada.",
"task_id": task.id
}

View File

@@ -90,7 +90,7 @@ async def obtener_remesa(**kwargs) -> Dict[str, Any]:
organizacion=pedimento_data.get('organizacion'),
pedimento=pedimento_data.get('id'),
file_name=file_name,
document_type=3,
document_type=5,
)
except Exception as e:

View File

@@ -1,27 +1,79 @@
from celery import Celery
from celery_app import celery_app
from .services import post_remesa_data
import asyncio
import logging
from typing import Dict, Any
from contextlib import asynccontextmanager
from ..tasks.services import register_task, update_task
from .services import post_remesa_data
from api.api_v2.modules.tasks.tasks import run_async_task
logger = logging.getLogger(__name__)
@celery_app.task
def process_remesa_request(remesa_request: Dict[str, Any]) -> Dict[str, Any]:
@celery_app.task(bind=True)
def process_remesa_request(self, remesa_request: dict) -> dict:
"""
Tarea de Celery para procesar la solicitud de acuse.
Tarea de Celery para procesar la solicitud de remesa.
Args:
acuse_request: Diccionario con los datos de la solicitud de acuse.
remesa_request (dict): Datos de la remesa a procesar
Returns:
Diccionario con la respuesta del acuse.
dict: Resultado del procesamiento con estado y detalles
"""
loop = asyncio.get_event_loop()
remesa_response = loop.run_until_complete(post_remesa_data(**remesa_request))
task_id = self.request.id
servicio = 5 # Código para Pedimento Remesas
pedimento_id = remesa_request.get('pedimento', {}).get('id')
organizacion_id = remesa_request.get('pedimento', {}).get('organizacion')
remesa_num = remesa_request.get('remesa', 'N/A')
return {"status": "processed", "data": remesa_response}
try:
# Actualizar estado a processing
loop.run_until_complete(
update_task(
task_id=task_id,
message=f"Iniciando procesamiento de la remesa {remesa_num}",
status="processing",
pedimento_id=pedimento_id,
organizacion_id=organizacion_id,
servicio=servicio
)
)
# Procesar remesa
result = loop.run_until_complete(post_remesa_data(**remesa_request))
# Actualizar estado a completed
loop.run_until_complete(
update_task(
task_id=task_id,
message=f"Remesa {remesa_num} procesada exitosamente",
status="completed",
pedimento_id=pedimento_id,
organizacion_id=organizacion_id,
servicio=servicio,
result=result
)
)
return {"status": "success", "result": result}
except Exception as e:
logger.error(f"Error procesando remesa {remesa_num}: {str(e)}", exc_info=True)
# Actualizar estado a failed
try:
loop.run_until_complete(
update_task(
task_id=task_id,
message=f"Error al procesar remesa {remesa_num}: {str(e)}",
status="failed",
pedimento_id=pedimento_id,
organizacion_id=organizacion_id,
servicio=servicio,
error=str(e)
)
)
except Exception as update_error:
logger.error(f"Error actualizando estado de tarea: {update_error}")
# Re-lanzar la excepción para que Celery la marque como fallida
raise