|
|
@@ -125,6 +125,11 @@ class IntelligentExamController extends Controller
|
|
|
]);
|
|
|
|
|
|
if ($validator->fails()) {
|
|
|
+ Log::warning('IntelligentExamController: 组卷API参数校验失败', [
|
|
|
+ 'trace_id' => $requestTraceId,
|
|
|
+ 'normalized' => $normalized,
|
|
|
+ 'errors' => $validator->errors()->toArray(),
|
|
|
+ ]);
|
|
|
return response()->json([
|
|
|
'success' => false,
|
|
|
'message' => '参数错误',
|
|
|
@@ -133,6 +138,21 @@ class IntelligentExamController extends Controller
|
|
|
}
|
|
|
|
|
|
$data = $validator->validated();
|
|
|
+
|
|
|
+ // 追练:未显式传 assemble_type 时,exam_type 为 mistake/practice 且带 paper_ids(且无直指定错题)视为 assemble_type=5,
|
|
|
+ // 避免中间层/旧客户端只传 exam_type 时仍走通用组卷(4)。
|
|
|
+ if (
|
|
|
+ ! isset($data['assemble_type'])
|
|
|
+ && ! empty($data['paper_ids'])
|
|
|
+ && empty($data['mistake_ids'] ?? [])
|
|
|
+ && empty($data['mistake_question_ids'] ?? [])
|
|
|
+ ) {
|
|
|
+ $examType = $data['exam_type'] ?? 'general';
|
|
|
+ if (in_array($examType, ['mistake', 'practice'], true)) {
|
|
|
+ $data['assemble_type'] = 5;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
$assembleType = (int) ($data['assemble_type'] ?? 4);
|
|
|
// API 固定题量:含追练(assemble_type=5),一律 default_total_questions,不使用请求题量参数
|
|
|
$data['total_questions'] = (int) config('question_bank.default_total_questions');
|
|
|
@@ -152,13 +172,21 @@ class IntelligentExamController extends Controller
|
|
|
$data['kp_codes'] = [];
|
|
|
}
|
|
|
|
|
|
+ $taskPayload = array_merge($data, [
|
|
|
+ 'paper_id' => $reservedPaperId,
|
|
|
+ 'request_trace_id' => $requestTraceId,
|
|
|
+ 'request_started_at' => now()->toISOString(),
|
|
|
+ ]);
|
|
|
+
|
|
|
+ Log::info('IntelligentExamController: 组卷API请求参数(校验并补全后,即将入队)', [
|
|
|
+ 'trace_id' => $requestTraceId,
|
|
|
+ 'assemble_type_resolved' => $assembleType,
|
|
|
+ 'params' => $taskPayload,
|
|
|
+ ]);
|
|
|
+
|
|
|
try {
|
|
|
// 异步优化:同步仅返回 task_id/paper_id,重型组卷逻辑下沉到队列
|
|
|
- $taskId = $this->taskManager->createTask(TaskManager::TASK_TYPE_EXAM, array_merge($data, [
|
|
|
- 'paper_id' => $reservedPaperId,
|
|
|
- 'request_trace_id' => $requestTraceId,
|
|
|
- 'request_started_at' => now()->toISOString(),
|
|
|
- ]));
|
|
|
+ $taskId = $this->taskManager->createTask(TaskManager::TASK_TYPE_EXAM, $taskPayload);
|
|
|
|
|
|
dispatch(new AssembleExamTaskJob($taskId));
|
|
|
|
|
|
@@ -383,7 +411,7 @@ class IntelligentExamController extends Controller
|
|
|
$payload['skills'] = array_values(array_filter(array_map('trim', explode(',', $payload['skills']))));
|
|
|
}
|
|
|
|
|
|
- foreach (['mistake_ids', 'mistake_question_ids'] as $key) {
|
|
|
+ foreach (['mistake_ids', 'mistake_question_ids', 'paper_ids'] as $key) {
|
|
|
if (isset($payload[$key])) {
|
|
|
if (is_string($payload[$key])) {
|
|
|
$raw = trim($payload[$key]);
|