Răsfoiți Sursa

fix: switch knowledge explanation ids to paper prefix

Generate assemble_type=22 ids with paper_ prefix while keeping backward compatibility for existing knowledge_ ids across validation, regenerate route checks, and display code extraction.

Co-authored-by: Cursor <cursoragent@cursor.com>
yemeishu 5 zile în urmă
părinte
comite
80f89b45fd

+ 1 - 1
app/Http/Controllers/ExamPdfController.php

@@ -1275,7 +1275,7 @@ class ExamPdfController extends Controller
     ) {
         Log::info('RegenerateKnowledgeExplanationPdf: 开始重新生成PDF', ['knowledge_id' => $knowledge_id]);
 
-        if (empty($knowledge_id) || ! preg_match('/^knowledge_[1-9]\d{14}$/', $knowledge_id)) {
+        if (empty($knowledge_id) || ! preg_match('/^(?:knowledge_|paper_)[1-9]\d{14}$/', $knowledge_id)) {
             return response()->json([
                 'success' => false,
                 'message' => '无效的知识点讲解ID格式',

+ 2 - 2
app/Services/ExamPdfExportService.php

@@ -336,7 +336,7 @@ class ExamPdfExportService
             $studentName = $this->resolveStudentNameForKnowledgeExplanation($record);
             $teacherName = $this->resolveTeacherNameForKnowledgeExplanation($record);
             $generateDateTime = now()->format('Y年m月d日 H:i:s');
-            $displayCode = (string) preg_replace('/^knowledge_/', '', (string) $record->knowledge_id);
+            $displayCode = (string) preg_replace('/^(knowledge_|paper_)/', '', (string) $record->knowledge_id);
             if ($displayCode === '') {
                 $displayCode = (string) $record->knowledge_id;
             }
@@ -4290,7 +4290,7 @@ class ExamPdfExportService
     {
         $studentName = $this->resolveStudentNameForKnowledgeExplanation($record);
         $rawKnowledgeId = (string) ($record->knowledge_id ?? '');
-        $examCode = (string) preg_replace('/^knowledge_/', '', $rawKnowledgeId);
+        $examCode = (string) preg_replace('/^(knowledge_|paper_)/', '', $rawKnowledgeId);
         if ($examCode === '') {
             $examCode = $rawKnowledgeId;
         }

+ 4 - 4
app/Services/KnowledgeExplanationService.php

@@ -23,7 +23,7 @@ class KnowledgeExplanationService
         // 对齐 paper_id 的数字段生成规则(PaperIdGenerator),并增加唯一性兜底
         for ($i = 0; $i < 5; $i++) {
             $numericId = PaperIdGenerator::generate();
-            $knowledgeId = 'knowledge_' . $numericId;
+            $knowledgeId = 'paper_' . $numericId;
             if (! $this->validateKnowledgeId($knowledgeId)) {
                 continue;
             }
@@ -42,7 +42,7 @@ class KnowledgeExplanationService
     {
         $knowledgeId = (string) ($payload['knowledge_id'] ?? $this->generateKnowledgeId());
         if (! $this->validateKnowledgeId($knowledgeId)) {
-            throw new \InvalidArgumentException('knowledge_id 格式非法,必须为 knowledge_ + 15位数字');
+            throw new \InvalidArgumentException('knowledge_id 格式非法,必须为 paper_ + 15位数字(兼容 knowledge_ 前缀)');
         }
         $studentId = (string) ($payload['student_id'] ?? '');
         $teacherId = (string) ($payload['teacher_id'] ?? '');
@@ -120,7 +120,7 @@ class KnowledgeExplanationService
     {
         $knowledgeId = (string) ($payload['knowledge_id'] ?? $this->generateKnowledgeId());
         if (! $this->validateKnowledgeId($knowledgeId)) {
-            throw new \InvalidArgumentException('knowledge_id 格式非法,必须为 knowledge_ + 15位数字');
+            throw new \InvalidArgumentException('knowledge_id 格式非法,必须为 paper_ + 15位数字(兼容 knowledge_ 前缀)');
         }
 
         $studentId = (string) ($payload['student_id'] ?? '');
@@ -222,7 +222,7 @@ class KnowledgeExplanationService
 
     private function validateKnowledgeId(string $knowledgeId): bool
     {
-        if (! preg_match('/^knowledge_([1-9]\d{14})$/', $knowledgeId, $matches)) {
+        if (! preg_match('/^(?:paper_|knowledge_)([1-9]\d{14})$/', $knowledgeId, $matches)) {
             return false;
         }
 

+ 1 - 1
routes/api.php

@@ -1203,7 +1203,7 @@ Route::post('/papers/{paper_id}/regenerate-grading', [\App\Http\Controllers\Exam
 // 重新生成知识点讲解 PDF(保持同一个 knowledge_id)
 Route::post('/knowledge-explanations/{knowledge_id}/regenerate', [\App\Http\Controllers\ExamPdfController::class, 'regenerateKnowledgeExplanationPdf'])
     ->withoutMiddleware([Authenticate::class, 'auth', 'auth:sanctum', 'auth:api'])
-    ->where('knowledge_id', '^knowledge_\d+$')
+    ->where('knowledge_id', '^(?:knowledge_|paper_)\d+$')
     ->name('api.knowledge-explanations.regenerate');
 
 /*

+ 1 - 1
routes/web.php

@@ -71,7 +71,7 @@ Route::get('/tools/knowledge-explanation-preview', function (Request $request, K
 
     $prepared = $knowledgeExplanationService->previewKnowledgeExplanation($payload);
     $knowledgeId = (string) ($prepared['knowledge_id'] ?? '');
-    $displayCode = (string) preg_replace('/^knowledge_/', '', $knowledgeId);
+    $displayCode = (string) preg_replace('/^(knowledge_|paper_)/', '', $knowledgeId);
 
     $html = view('pdf.knowledge-explanation-standalone', [
         'knowledgeId' => $knowledgeId,