Переглянути джерело

fix(exam-analysis): dedupe pdf-queue report task workload

Remove unused getAnalysisData() before generateAnalysisReportPdf and drop
redundant savePdfUrl; ExamPdfExportService already persists URLs. Cuts memory
and DB load in ProcessAnalysisReportTaskJob workers.

Made-with: Cursor
yemeishu 2 тижнів тому
батько
коміт
b300fbb616
1 змінених файлів з 5 додано та 55 видалено
  1. 5 55
      app/Services/ExamAnalysisService.php

+ 5 - 55
app/Services/ExamAnalysisService.php

@@ -121,24 +121,18 @@ class ExamAnalysisService
     public function processReportGenerationTask(string $taskId, string $paperId, string $studentId, ?string $recordId): void
     {
         try {
-            $this->taskManager->updateTaskProgress($taskId, 10, '正在获取分析数据...');
+            // 分析数据组装、渲染与 exam_analysis_results / student_reports 落库均在
+            // ExamPdfExportService::generateAnalysisReportPdf 内完成;此处不再重复 getAnalysisData,
+            // 避免 pdf worker 内双倍内存与 DB 压力(与 GenerateAnalysisPdfJob 路径一致)。
+            $this->taskManager->updateTaskProgress($taskId, 10, '正在生成学情分析PDF...');
 
-            // 获取分析数据
-            $analysisData = $this->getAnalysisData($paperId, $studentId, $recordId);
-
-            $this->taskManager->updateTaskProgress($taskId, 50, '正在生成PDF报告...');
-
-            // 生成PDF
             $pdfUrl = $this->pdfExportService->generateAnalysisReportPdf($paperId, $studentId, $recordId);
 
             if (!$pdfUrl) {
                 throw new \Exception('PDF生成失败');
             }
 
-            $this->taskManager->updateTaskProgress($taskId, 90, '正在保存报告...');
-
-            // 保存PDF URL到数据库
-            $this->savePdfUrl($paperId, $studentId, $recordId, $pdfUrl);
+            $this->taskManager->updateTaskProgress($taskId, 90, '正在完成任务...');
 
             // 标记任务完成
             $this->taskManager->markTaskCompleted($taskId, [
@@ -427,50 +421,6 @@ class ExamAnalysisService
         };
     }
 
-    /**
-     * 保存PDF URL到数据库
-     */
-    private function savePdfUrl(string $paperId, string $studentId, ?string $recordId, string $pdfUrl): void
-    {
-        try {
-            if ($recordId) {
-                // OCR记录
-                $ocrRecord = \App\Models\OCRRecord::find($recordId);
-                if ($ocrRecord) {
-                    $ocrRecord->update(['analysis_pdf_url' => $pdfUrl]);
-                }
-            } else {
-                // 学生记录 - 使用新的 student_reports 表
-                \App\Models\StudentReport::updateOrCreate(
-                    [
-                        'student_id' => $studentId,
-                        'report_type' => 'exam_analysis',
-                        'paper_id' => $paperId,
-                    ],
-                    [
-                        'pdf_url' => $pdfUrl,
-                        'generation_status' => 'completed',
-                        'generated_at' => now(),
-                        'updated_at' => now(),
-                    ]
-                );
-
-                Log::info('ExamAnalysisService: PDF URL已保存到student_reports表', [
-                    'paper_id' => $paperId,
-                    'student_id' => $studentId,
-                    'pdf_url' => $pdfUrl,
-                ]);
-            }
-        } catch (\Throwable $e) {
-            Log::error('ExamAnalysisService: 保存PDF URL失败', [
-                'paper_id' => $paperId,
-                'student_id' => $studentId,
-                'record_id' => $recordId,
-                'error' => $e->getMessage(),
-            ]);
-        }
-    }
-
     /**
      * 使用步骤级分析算法分析考试答题数据
      *