cliente = $cliente; $this->exportacaoId = $exportacaoId; } public function handle() { set_time_limit(0); $currentConnection = config('database.default'); try { $this->setConnection(); $exportacao = Exportacao::find($this->exportacaoId); if (is_null($exportacao)) { Log::channel('bpa-exportacao')->error('Registro de exportação não encontrado', [ 'cliente' => $this->cliente, 'origem' => 'ExportacaoJob', 'exportacao_id' => $this->exportacaoId, ]); return; } $exportacao->status_id = ExportacaoStatus::EM_PROCESSAMENTO; $exportacao->data_hora_inicio = Carbon::now(); $exportacao->save(); DB::transaction(function () use ($exportacao) { $path = self::BASE_PATH . $this->cliente . DIRECTORY_SEPARATOR; $params = [ 'exportacao_id' => $exportacao->id, 'competencia_id' => $exportacao->competencia_id, 'unidades' => $exportacao->unidades->pluck('id'), 'financiamentos' => $exportacao->financiamentos->pluck('id'), ]; $file = ExportacaoService::generate($this->cliente, $params); $exportacao->status_id = ExportacaoStatus::PROCESSADO; $exportacao->quantidade_consistencia = $file['consistencias']; $exportacao->quantidade_inconsistencia = $file['inconsistencias']; if (Storage::exists($path . $file['nome'])) { $exportacao->arquivo = $file['nome']; chmod(Storage::path($path . $file['nome']), 0775); } $exportacao->data_hora_fim = Carbon::now(); $exportacao->save(); ExportacaoFinalizadaEvent::dispatch($exportacao->createdLotacao->usuario_id, $exportacao->id, $exportacao->arquivo); }); } finally { $this->clearConnection(); Config::set('database.default', $currentConnection); } } public function failed(Throwable $exception) { $currentConnection = config('database.default'); try { $this->setConnection(); $exportacao = Exportacao::find($this->exportacaoId); if ($exportacao) { $exportacao->status_id = ExportacaoStatus::ERRO_NO_PROCESSAMENTO; $exportacao->data_hora_fim = Carbon::now(); $exportacao->save(); $path = self::BASE_PATH . $this->cliente . DIRECTORY_SEPARATOR; $fileName = $exportacao->arquivo; if (!is_null($fileName) && Storage::exists($path . $fileName)) { Storage::delete($path . $fileName); } } Log::channel('atencao-basica-exportacao')->error('Erro ao executar a exportação', [ 'cliente' => $this->cliente, 'origem' => 'ExportacaoJob', 'erro' => $exception->getMessage(), ]); } finally { $this->clearConnection(); Config::set('database.default', $currentConnection); } } private function setConnection() { Config::set("database.connections.job-{$this->cliente}", [ 'driver' => 'mysql', 'host' => env('QUEUE_DB_HOST'), 'port' => env('QUEUE_DB_PORT'), 'database' => "conectasus_{$this->cliente}", 'username' => env('QUEUE_DB_USERNAME'), 'password' => env('QUEUE_DB_PASSWORD'), 'charset' => 'utf8mb4', 'collation' => 'utf8mb4_unicode_ci', ]); Config::set('database.default', "job-{$this->cliente}"); $this->clearConnection(); } private function clearConnection() { DB::disconnect("job-{$this->cliente}"); DB::purge("job-{$this->cliente}"); } }