rowActive() ->first(); if ($processing) { return; } $process = ActivityCopy::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', 'Salin data aktivitas untuk Tahun: ' . $process->to_year . ', dari sumber Tahun: ' . $process->from_year . ', id: ' . $process->id); try { $isLocked = ActivityLock::isLocked($process->to_year); if ($isLocked) { $this->logMessage('warning', 'Salin data aktivitas untuk Tahun: ' . $process->to_year . ', dari sumber Tahun: ' . $process->from_year . ', id: ' . $process->id . ' sedang dikunci dan tidak dapat melakukan salin data.'); $process->update([ 'finished_time' => now(), 'status' => SigdStatus::GAGAL, ]); return; } $this->executeService($process); $process->update([ 'finished_time' => now(), 'status' => SigdStatus::SELESAI, ]); $this->logMessage('info', 'Salin data aktivitas untuk Tahun: ' . $process->to_year . ', dari sumber Tahun: ' . $process->from_year . ', id: ' . $process->id . ' berhasil diselesaikan.'); } catch (\Exception $e) { $this->logMessage('error', 'Terjadi kesalahan saat proses salin data aktivitas, id: ' . $process->id . '. Error: ' . $e->getMessage()); throw $e; } } private function createLogFile(ActivityCopy $process) { $logDirectory = storage_path('logs/copy/'); 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\\CopyActivityService"; try { $serviceClass = app($service); if (method_exists($serviceClass, 'copyAllData')) { $serviceClass->copyAllData($process->from_year, $process->to_year); } else { $this->logMessage('error', get_class($serviceClass) . " tidak memiliki method copyAllData."); } } 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); } } }