|
|
@@ -1007,36 +1007,40 @@ class ExamPdfController extends Controller
|
|
|
// 生成时间(格式:2026年01月30日 15:04:05)
|
|
|
$generateDateTime = now()->format('Y年m月d日 H:i:s');
|
|
|
|
|
|
- // 提取并去重知识点代码(优先 paper_questions.knowledge_point,缺失时回退到题库 kp_code)
|
|
|
- $paperQuestions = \App\Models\PaperQuestion::where('paper_id', $paper_id)->get();
|
|
|
- $kpCodes = [];
|
|
|
- $seen = [];
|
|
|
-
|
|
|
- $questionBankIds = $paperQuestions
|
|
|
- ->pluck('question_bank_id')
|
|
|
- ->filter()
|
|
|
- ->unique()
|
|
|
- ->values();
|
|
|
- $questionKpMap = [];
|
|
|
- if ($questionBankIds->isNotEmpty()) {
|
|
|
- $questionKpMap = \App\Models\Question::whereIn('id', $questionBankIds)
|
|
|
- ->pluck('kp_code', 'id')
|
|
|
- ->toArray();
|
|
|
- }
|
|
|
-
|
|
|
- foreach ($paperQuestions as $pq) {
|
|
|
- $kpCode = trim((string) ($pq->knowledge_point ?? ''));
|
|
|
- if ($kpCode === '' && ! empty($pq->question_bank_id)) {
|
|
|
- $kpCode = trim((string) ($questionKpMap[$pq->question_bank_id] ?? ''));
|
|
|
+ // 优先使用 paper 中保存的 explanation_kp_codes(组卷时指定的知识点,最多2个)
|
|
|
+ $kpCodes = $paper->explanation_kp_codes ?? [];
|
|
|
+
|
|
|
+ // 如果没有保存 explanation_kp_codes,回退到从题目中提取(兼容旧数据)
|
|
|
+ if (empty($kpCodes)) {
|
|
|
+ $paperQuestions = \App\Models\PaperQuestion::where('paper_id', $paper_id)->get();
|
|
|
+ $seen = [];
|
|
|
+
|
|
|
+ $questionBankIds = $paperQuestions
|
|
|
+ ->pluck('question_bank_id')
|
|
|
+ ->filter()
|
|
|
+ ->unique()
|
|
|
+ ->values();
|
|
|
+ $questionKpMap = [];
|
|
|
+ if ($questionBankIds->isNotEmpty()) {
|
|
|
+ $questionKpMap = \App\Models\Question::whereIn('id', $questionBankIds)
|
|
|
+ ->pluck('kp_code', 'id')
|
|
|
+ ->toArray();
|
|
|
}
|
|
|
- if ($kpCode === '') {
|
|
|
- continue;
|
|
|
- }
|
|
|
- if (isset($seen[$kpCode])) {
|
|
|
- continue;
|
|
|
+
|
|
|
+ foreach ($paperQuestions as $pq) {
|
|
|
+ $kpCode = trim((string) ($pq->knowledge_point ?? ''));
|
|
|
+ if ($kpCode === '' && ! empty($pq->question_bank_id)) {
|
|
|
+ $kpCode = trim((string) ($questionKpMap[$pq->question_bank_id] ?? ''));
|
|
|
+ }
|
|
|
+ if ($kpCode === '') {
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+ if (isset($seen[$kpCode])) {
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+ $seen[$kpCode] = true;
|
|
|
+ $kpCodes[] = $kpCode;
|
|
|
}
|
|
|
- $seen[$kpCode] = true;
|
|
|
- $kpCodes[] = $kpCode;
|
|
|
}
|
|
|
|
|
|
// 使用 ExamPdfExportService 构建知识点数据
|