onQueue('logic'); $this->afterCommit(); } public int $tries = 2; public int $timeout = 180; public function handle( KnowledgeExplanationService $knowledgeExplanationService, TaskManager $taskManager ): void { $task = $taskManager->getTaskStatus($this->taskId); if (! is_array($task) || ! isset($task['data']) || ! is_array($task['data'])) { $taskManager->markTaskFailed($this->taskId, '任务数据不存在'); return; } $payload = $task['data']; try { $taskManager->updateTaskProgress($this->taskId, 15, '开始生成知识点讲解与案例...'); $prepared = $knowledgeExplanationService->prepareKnowledgeExplanation($payload); $knowledgeId = (string) $prepared['knowledge_id']; $knowledgePoints = (array) $prepared['knowledge_points']; $taskManager->updateTaskStatus($this->taskId, [ 'paper_id' => $knowledgeId, 'knowledge_id' => $knowledgeId, 'kp_codes' => array_map(static fn (array $kp) => $kp['kp_code'] ?? '', $knowledgePoints), ]); $taskManager->updateTaskProgress($this->taskId, 55, '案例筛选完成,开始生成PDF...'); dispatch(new GenerateKnowledgeExplanationPdfJob($this->taskId, $knowledgeId, $knowledgePoints)); } catch (\Throwable $e) { Log::error('GenerateKnowledgeExplanationTaskJob 失败', [ 'task_id' => $this->taskId, 'error' => $e->getMessage(), ]); $knowledgeId = (string) ($payload['knowledge_id'] ?? ''); if ($knowledgeId !== '') { KnowledgeExplanation::query() ->where('knowledge_id', $knowledgeId) ->update(['status' => 'failed']); } $taskManager->markTaskFailed($this->taskId, $e->getMessage()); } } public function failed(Throwable $exception): void { $taskManager = app(TaskManager::class); $task = $taskManager->getTaskStatus($this->taskId); $knowledgeId = is_array($task) ? (string) ($task['data']['knowledge_id'] ?? '') : ''; if ($knowledgeId !== '') { KnowledgeExplanation::query() ->where('knowledge_id', $knowledgeId) ->update(['status' => 'failed']); } $taskManager->markTaskFailed($this->taskId, $exception->getMessage()); } }