paperIds)))); if (empty($paperIds)) { $taskManager->markTaskFailed($this->taskId, '未选择任何卷子'); return; } $papers = SourcePaper::query()->whereIn('id', $paperIds)->get(); if ($papers->isEmpty()) { $taskManager->markTaskFailed($this->taskId, '未找到可入库的卷子'); return; } $summary = [ 'processed' => 0, 'skipped' => 0, 'errors' => 0, ]; $total = $papers->count(); $taskManager->updateTaskProgress($this->taskId, 5, '开始入库'); foreach ($papers as $index => $paper) { $taskManager->updateTaskProgress( $this->taskId, (int) (5 + (($index / max(1, $total)) * 80)), '正在处理:' . ($paper->title ?: ('卷子 #' . $paper->id)) ); $result = $service->promoteFromSourcePapers(collect([$paper])); $summary['processed'] += $result['processed']; $summary['skipped'] += $result['skipped']; $summary['errors'] += $result['errors']; } $taskManager->markTaskCompleted($this->taskId, [ 'processed' => $summary['processed'], 'skipped' => $summary['skipped'], 'errors' => $summary['errors'], ]); Log::info('PromoteSourcePapersJob completed', [ 'task_id' => $this->taskId, 'paper_ids' => $paperIds, 'summary' => $summary, ]); } }