|
@@ -121,24 +121,18 @@ class ExamAnalysisService
|
|
|
public function processReportGenerationTask(string $taskId, string $paperId, string $studentId, ?string $recordId): void
|
|
public function processReportGenerationTask(string $taskId, string $paperId, string $studentId, ?string $recordId): void
|
|
|
{
|
|
{
|
|
|
try {
|
|
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);
|
|
$pdfUrl = $this->pdfExportService->generateAnalysisReportPdf($paperId, $studentId, $recordId);
|
|
|
|
|
|
|
|
if (!$pdfUrl) {
|
|
if (!$pdfUrl) {
|
|
|
throw new \Exception('PDF生成失败');
|
|
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, [
|
|
$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(),
|
|
|
|
|
- ]);
|
|
|
|
|
- }
|
|
|
|
|
- }
|
|
|
|
|
-
|
|
|
|
|
/**
|
|
/**
|
|
|
* 使用步骤级分析算法分析考试答题数据
|
|
* 使用步骤级分析算法分析考试答题数据
|
|
|
*
|
|
*
|