Przeglądaj źródła

fix: limit analysis backfill by pending targets

yemeishu 2 tygodni temu
rodzic
commit
b66264ff39

+ 13 - 14
app/Console/Commands/BackfillExamAnalysisResultsCommand.php

@@ -23,7 +23,7 @@ class BackfillExamAnalysisResultsCommand extends Command
                             {--since= : papers.completed_at >= 该时间(默认今天 00:00:00)}
                             {--paper= : 仅处理指定 paper_id}
                             {--student= : 仅处理指定 student_id}
-                            {--limit=100 : 最多处理多少条候选试卷}
+                            {--limit=100 : 最多处理多少条待回填目标}
                             {--force-analysis : 允许重算已有但无效的分析数据(默认不覆盖)}
                             {--stats-only : 只统计缺失情况,不投递队列、不修改数据、不受 limit 限制}
                             {--dry-run : 只打印待回填列表,不执行回填}';
@@ -58,10 +58,6 @@ class BackfillExamAnalysisResultsCommand extends Command
             ->when($studentFilter, fn ($q) => $q->where('student_id', $studentFilter))
             ->orderBy('completed_at');
 
-        if (! $statsOnly) {
-            $paperQuery->limit($limit);
-        }
-
         $paperRows = $paperQuery->get(['paper_id', 'student_id', 'completed_at']);
 
         $targets = [];
@@ -113,14 +109,16 @@ class BackfillExamAnalysisResultsCommand extends Command
                 continue;
             }
 
-            $targets[] = (object) [
-                'paper_id' => (string) $paper->paper_id,
-                'student_id' => (string) $paper->student_id,
-                'completed_at' => (string) $paper->completed_at,
-                'action' => $action,
-                'analysis_id' => $latest->id ?? null,
-                'student_report_pdf_url' => $studentReportPdfUrl,
-            ];
+            if ($statsOnly || count($targets) < $limit) {
+                $targets[] = (object) [
+                    'paper_id' => (string) $paper->paper_id,
+                    'student_id' => (string) $paper->student_id,
+                    'completed_at' => (string) $paper->completed_at,
+                    'action' => $action,
+                    'analysis_id' => $latest->id ?? null,
+                    'student_report_pdf_url' => $studentReportPdfUrl,
+                ];
+            }
         }
 
         $pendingCount = $counts[self::ACTION_ANALYSIS]
@@ -129,9 +127,10 @@ class BackfillExamAnalysisResultsCommand extends Command
             + $counts[self::ACTION_NEEDS_REVIEW];
 
         $this->info(sprintf(
-            '扫描完成:试卷 %d 条,待处理 %d 条;需补分析 %d 条,仅补PDF %d 条,同步PDF URL %d 条,需人工确认 %d 条,已完成跳过 %d 条(since=%s%s)',
+            '扫描完成:试卷 %d 条,待处理 %d 条,本次目标 %d 条;需补分析 %d 条,仅补PDF %d 条,同步PDF URL %d 条,需人工确认 %d 条,已完成跳过 %d 条(since=%s%s)',
             $paperRows->count(),
             $pendingCount,
+            count($targets),
             $counts[self::ACTION_ANALYSIS],
             $counts[self::ACTION_PDF_ONLY],
             $counts[self::ACTION_SYNC_PDF_URL],