Selaa lähdekoodia

codigo estable, aveces los jobs fallan o tardan mucho, hay que manejar eso para evitar una multicola de la misma tarea o que se quede truncado

EmilianoOrtiz 3 kuukautta sitten
vanhempi
commit
81c12e743c

+ 19 - 25
sistema-mantenimiento-back/app/Http/Controllers/AsyncValidateLoadArchivesController.php

@@ -4,8 +4,6 @@ namespace App\Http\Controllers;
 
 use Illuminate\Http\Request;
 use Illuminate\Support\Facades\Validator;
-use Illuminate\Support\Facades\DB;
-use Illuminate\Support\Facades\Log;
 use PhpOffice\PhpSpreadsheet\IOFactory;
 use ZipArchive;
 use App\Jobs\ValidateLoadArchives;
@@ -109,21 +107,21 @@ class AsyncValidateLoadArchivesController extends Controller
         if ($excelValidation['error']) {
             return $this->responseController->makeResponse(true, $excelValidation['message'], [], 400);
         }
-        Log::info('ValidateFiles: Headers Excel validados correctamente');
+
         
         // Validate ZIP file integrity
         $zipValidation = $this->validateZipFile($request->file('zip_file'));
         if ($zipValidation['error']) {
             return $this->responseController->makeResponse(true, $zipValidation['message'], [], 400);
         }
-        Log::info('ValidateFiles: Archivo ZIP validado correctamente');
+
 
         // Extract and validate file listings from Excel
         $filesValidation = $this->extractAndValidateFiles($request->file('excel_file'));
         if ($filesValidation['error']) {
             return $this->responseController->makeResponse(true, $filesValidation['message'], [], 400);
         }
-        Log::info('ValidateFiles: Archivos extraídos del Excel', ['count' => count($filesValidation['files'])]);
+
 
         
 
@@ -134,7 +132,7 @@ class AsyncValidateLoadArchivesController extends Controller
         if (isset($comparison['error'])) {
             return $this->responseController->makeResponse(true, $comparison['error'], [], 400);
         }
-        Log::info('ValidateFiles: Comparación Excel-ZIP completada', ['valid' => $comparison['valid']]);
+
         
         if (!$comparison['valid']) {
             return $this->responseController->makeResponse(
@@ -158,13 +156,13 @@ class AsyncValidateLoadArchivesController extends Controller
             'temp_files' => $tempFiles['files']
         ];
 
-        Log::info('ValidateFiles: Datos serializados para el job', $requestData);
+
         
         //make sync the call to the job
         
         // Ejecutar el job sincrónicamente en lugar de despacharlo a la cola
-        (new ValidateLoadArchives($requestData, $userId, $jobId))->handle();                
-        //ValidateLoadArchives::dispatch($requestData, $userId, $jobId);
+        //(new ValidateLoadArchives($requestData, $userId, $jobId))->handle();                
+        ValidateLoadArchives::dispatch($requestData, $userId, $jobId);
         
         return $this->responseController->makeResponse(
             false, 
@@ -194,7 +192,7 @@ class AsyncValidateLoadArchivesController extends Controller
                 }
             }
             
-            Log::info('ValidateExcelHeaders: Todos los headers validados correctamente');
+
             return ['error' => false];
         } catch (\Exception $e) {
             return ['error' => true, 'message' => 'Error al procesar el archivo Excel: ' . $e->getMessage()];
@@ -218,7 +216,7 @@ class AsyncValidateLoadArchivesController extends Controller
             return ['error' => true, 'message' => 'El archivo ZIP está vacío.'];
         }
         
-        Log::info('ValidateZipFile: ZIP válido', ['num_files' => $zip->numFiles]);
+
         $zip->close();
         return ['error' => false];
     }
@@ -236,7 +234,7 @@ class AsyncValidateLoadArchivesController extends Controller
             $highestRow = $worksheet->getHighestRow();
             $files = [];
             
-            Log::info('ExtractAndValidateFiles: Iniciando extracción', ['total_rows' => $highestRow]);
+
             
             // Process each row starting from row 8 (data rows)
             for ($row = 8; $row <= $highestRow; $row++) {
@@ -282,10 +280,10 @@ class AsyncValidateLoadArchivesController extends Controller
                 }
             }
             
-            Log::info('ExtractAndValidateFiles: Extracción completada', ['files_found' => count($files)]);
+
             return ['error' => false, 'files' => $files];
         } catch (\Exception $e) {
-            Log::error('ExtractAndValidateFiles: Excepción', ['error' => $e->getMessage()]);
+
             return ['error' => true, 'message' => 'Error al extraer archivos del Excel: ' . $e->getMessage()];
         }
     }
@@ -299,7 +297,7 @@ class AsyncValidateLoadArchivesController extends Controller
         $zip = new ZipArchive();
         $zip->open($zipFile->getPathname());
         
-        Log::info('CompareExcelWithZip: Iniciando comparación');
+
         
         // Extract all file names and sizes from ZIP
         $zipFiles = [];
@@ -341,11 +339,7 @@ class AsyncValidateLoadArchivesController extends Controller
         $extraInZip = array_diff($zipFiles, $excelFileNames);
         
         $isValid = empty($missingInZip) && empty($extraInZip);
-        Log::info('CompareExcelWithZip: Comparación completada', [
-            'valid' => $isValid,
-            'missing_count' => count($missingInZip),
-            'extra_count' => count($extraInZip)
-        ]);
+
         
         return [
             'valid' => $isValid,
@@ -360,7 +354,7 @@ class AsyncValidateLoadArchivesController extends Controller
     private function uploadTempFiles(Request $request)
     {
         try {
-            Log::info('UploadTempFiles: Iniciando subida de archivos temporales');
+
             $tempFiles = [];
             
             // Upload Excel file
@@ -376,7 +370,7 @@ class AsyncValidateLoadArchivesController extends Controller
             
             if ($excelData->error) {
                 $errorMsg = isset($excelData->message) ? $excelData->message : 'Error desconocido subiendo Excel';
-                Log::error('UploadTempFiles: Error subiendo Excel', ['message' => $errorMsg]);
+
                 return ['error' => true, 'message' => 'Error subiendo Excel: ' . $errorMsg];
             }
             
@@ -395,17 +389,17 @@ class AsyncValidateLoadArchivesController extends Controller
             
             if ($zipData->error) {
                 $errorMsg = isset($zipData->message) ? $zipData->message : 'Error desconocido subiendo ZIP';
-                Log::error('UploadTempFiles: Error subiendo ZIP', ['message' => $errorMsg]);
+
                 return ['error' => true, 'message' => 'Error subiendo ZIP: ' . $errorMsg];
             }
             
             $tempFiles['zip'] = $zipData->response->idArchivo;
             
-            Log::info('UploadTempFiles: Archivos temporales subidos exitosamente', $tempFiles);
+
             return ['error' => false, 'files' => $tempFiles];
             
         } catch (\Exception $e) {
-            Log::error('UploadTempFiles: Excepción', ['error' => $e->getMessage()]);
+
             return ['error' => true, 'message' => 'Error en uploadTempFiles: ' . $e->getMessage()];
         }
     }

+ 18 - 52
sistema-mantenimiento-back/app/Jobs/ValidateLoadArchives.php

@@ -7,13 +7,10 @@ use Illuminate\Foundation\Queue\Queueable;
 use Illuminate\Queue\InteractsWithQueue;
 use Illuminate\Queue\SerializesModels;
 use App\Services\WebSocketService;
-use Illuminate\Support\Facades\Log;
-use App\Http\Controllers\ValidateLoadArchivesController;
 use App\Http\Controllers\DocumentManagementController;
 use App\Http\Controllers\EncryptionController;
 use Illuminate\Http\Request;
 use Illuminate\Http\UploadedFile;
-use Illuminate\Support\Facades\Storage;
 use Illuminate\Support\Facades\DB;
 use ZipArchive;
 
@@ -21,6 +18,9 @@ class ValidateLoadArchives implements ShouldQueue
 {
     use Queueable, InteractsWithQueue, SerializesModels;
 
+    public $timeout = 300;
+    public $tries = 1;
+    
     protected $requestData;
     protected $userId;
     protected $jobId;
@@ -45,23 +45,25 @@ class ValidateLoadArchives implements ShouldQueue
             $this->broadcastProgress(100, 'completed', 'Archivos subidos exitosamente', $result);
             
         } catch (\Exception $e) {
-            Log::error('ValidateLoadArchives Job Error: ' . $e->getMessage());
             $this->broadcastProgress(0, 'failed', 'Error en la validación: ' . $e->getMessage());
         }
     }
 
     private function processFiles()
-    {
-        // Archivos ya están en temp (Excel y ZIP)
+    {        
+        if (!isset($this->requestData['temp_files'])) {
+            throw new \Exception('temp_files not found in request data');
+        }
+        
         $tempFiles = $this->requestData['temp_files'];
         
-        // Etapa 1: Extracción archivos individuales (50%)
+        if (!isset($tempFiles['zip'])) {
+            throw new \Exception('ZIP file not found in temp_files');
+        }
+        
         $this->broadcastProgress(50, 'processing', 'Extrayendo y subiendo archivos individuales...');
         
-        $individualFiles = [];
-        if (isset($tempFiles['zip'])) {
-            $individualFiles = $this->extractAndUploadIndividualFiles($tempFiles['zip']);
-        }
+        $individualFiles = $this->extractAndUploadIndividualFiles($tempFiles['zip']);
         
         return [
             'temp_files' => $tempFiles,
@@ -81,44 +83,9 @@ class ValidateLoadArchives implements ShouldQueue
         
         $webSocketService = new WebSocketService();
         $webSocketService->emitToUser($this->userId, 'file_validation_progress', $progressData);
-        Log::info("Job Progress: {$progress}% - {$message}");
-    }
-    
-    private function uploadFileToTemp($tempPath, $type)
-    {
-        try {
-            $filePath = Storage::path($tempPath);
-            $fileName = basename($tempPath);
-            
-            $uploadedFile = new UploadedFile(
-                $filePath,
-                $fileName,
-                mime_content_type($filePath),
-                null,
-                true
-            );
-            
-            $request = new Request();
-            $request->files->set('file', $uploadedFile);
-            $request->merge([
-                'id_user' => $this->requestData['id_user'],
-                'linea' => $this->requestData['linea'] ?? 1
-            ]);
-            
-            $documentController = new DocumentManagementController();
-            $response = $documentController->uploadTempFile($request);
-            $data = json_decode($response->getContent());
-            
-            // Limpiar archivo temporal
-            //Storage::delete($tempPath);
-            
-            return $data->error ? false : $data->response->idArchivo;
-        } catch (\Exception $e) {
-            Log::error("Error uploading {$type} to temp: " . $e->getMessage());
-            return false;
-        }
     }
     
+
     private function extractAndUploadIndividualFiles($zipTempId)
     {
         try {
@@ -127,21 +94,22 @@ class ValidateLoadArchives implements ShouldQueue
             $tempIdDec = $encryptionController->decrypt($zipTempId);
             
             if (!$tempIdDec) {
-                Log::error('Error decrypting ZIP temp ID');
                 return [];
             }
             
             $tempFile = DB::table('S002V01TARTE')->where('ARTE_IDAR', $tempIdDec)->first();
             if (!$tempFile) {
-                Log::error('Temp ZIP file not found in database');
                 return [];
             }
             
             $zipPath = $tempFile->ARTE_UBTE;
+            
+            if (!file_exists($zipPath)) {
+                return [];
+            }
             $zip = new ZipArchive();
             
             if ($zip->open($zipPath) !== TRUE) {
-                Log::error('Cannot open ZIP file: ' . $zipPath);
                 return [];
             }
             
@@ -180,7 +148,6 @@ class ValidateLoadArchives implements ShouldQueue
             
             return $tempFiles;
         } catch (\Exception $e) {
-            Log::error('Error extracting individual files: ' . $e->getMessage());
             return [];
         }
     }
@@ -213,7 +180,6 @@ class ValidateLoadArchives implements ShouldQueue
             
             return $data->error ? false : $data->response->idArchivo;
         } catch (\Exception $e) {
-            Log::error("Error uploading extracted file {$fileName}: " . $e->getMessage());
             return false;
         }
     }

+ 0 - 1
sistema-mantenimiento-back/app/Services/WebSocketService.php

@@ -24,7 +24,6 @@ class WebSocketService
             
             $socketClient->close();
             
-            Log::info('WebSocket emit successful', ['userId' => $userId, 'event' => $event]);
             return true;
         } catch (\Exception $e) {
             Log::error('WebSocket emit failed: ' . $e->getMessage());