rowActive()->first(); if ($processing) { return; } $process = ActivityProdusenCalculate::where('status', SigdStatus::PENDING) ->rowActive()->orderBy('created_at', 'asc')->first(); if (!$process) { return; } $process->update([ 'executed_time' => now(), 'status' => SigdStatus::PROSES, ]); $this->createLogFile($process); $this->logMessage('info', 'Hitung Data dari Produsen untuk Tahun: ' . $process->inventory_year . ', id: ' . $process->id); try { $isLocked = ActivityLock::isLocked($process->inventory_year); if ($isLocked) { $this->logMessage('warning', 'Hitung Data dari Produsen untuk Tahun: ' . $process->inventory_year . ', id: ' . $process->id . ' sedang dikunci dan tidak dapat melakukan Hitung Data dari Produsen.'); $process->update([ 'finished_time' => now(), 'status' => SigdStatus::GAGAL, ]); return; } $this->executeService($process); $process->update([ 'finished_time' => now(), 'status' => SigdStatus::SELESAI, ]); $this->logMessage('info', 'Hitung Data dari Produsen untuk Tahun: ' . $process->inventory_year . ', id: ' . $process->id . ' berhasil diselesaikan.'); } catch (\Exception $e) { $this->logMessage('error', 'Terjadi kesalahan saat proses Hitung Data dari Produsen, id: ' . $process->id . '. Error: ' . $e->getMessage()); throw $e; } } private function createLogFile(ActivityProdusenCalculate $process) { $logDirectory = storage_path('logs/produsen_calculate/'); if (!File::exists($logDirectory)) { File::makeDirectory($logDirectory, 0755, true); } $logFileName = $logDirectory . $process->to_year . '_' . $process->from_year . '_' . $process->id . '.log'; file_put_contents($logFileName, ''); $this->logFilePath = $logFileName; } private function executeService($process) { $service = "\\App\\Services\\Tool\\ProdusenCalculateService"; try { $serviceClass = app($service); if (method_exists($serviceClass, 'calculateAndSave')) { $serviceClass->calculateAndSave($process->inventory_year); } else { $this->logMessage('error', get_class($serviceClass) . " tidak memiliki method calculateAndSave."); } } catch (\Exception $e) { $this->logMessage('error', "Error saat menjalankan " . get_class($serviceClass) . ": " . $e->getMessage()); $process->update([ 'executed_time' => null, 'finished_time' => null, 'status' => SigdStatus::PENDING, ]); throw $e; } } private function logMessage($level, $message) { $this->line($message); // Output to console // Log to the file $formattedMessage = '[' . now() . '] ' . strtoupper($level) . ': ' . $message . PHP_EOL; if ($this->logFilePath) { file_put_contents($this->logFilePath, $formattedMessage, FILE_APPEND); } } }