|
@@ -1380,72 +1380,26 @@ class LearningAnalyticsService
|
|
|
$allQuestions = $priorityQuestions;
|
|
$allQuestions = $priorityQuestions;
|
|
|
$isMistakeBook = ($assembleType === 5); // 错题本类型
|
|
$isMistakeBook = ($assembleType === 5); // 错题本类型
|
|
|
|
|
|
|
|
- // 如果是错题本类型,且有错题但数量不足,获取原卷子的所有题目
|
|
|
|
|
- if ($isMistakeBook && !empty($priorityQuestions) && count($priorityQuestions) < 5 && !empty($params['paper_ids'])) {
|
|
|
|
|
- Log::info('LearningAnalyticsService: 错题本错题不足,获取原卷子题目补充', [
|
|
|
|
|
|
|
+ // 【修改】错题本类型严格按错题组卷,不补充题目
|
|
|
|
|
+ if ($isMistakeBook) {
|
|
|
|
|
+ // 记录错题本组卷信息
|
|
|
|
|
+ Log::info('LearningAnalyticsService: 错题本严格按错题组卷,不补充题目', [
|
|
|
'mistake_count' => count($priorityQuestions),
|
|
'mistake_count' => count($priorityQuestions),
|
|
|
- 'paper_ids' => $params['paper_ids']
|
|
|
|
|
|
|
+ 'assemble_type' => $assembleType,
|
|
|
|
|
+ 'action' => '只使用学生错题,不从原卷子补充'
|
|
|
]);
|
|
]);
|
|
|
|
|
|
|
|
- // 获取原卷子的所有题目
|
|
|
|
|
- $paperQuestionIds = $this->getPaperAllQuestions($params['paper_ids']);
|
|
|
|
|
- if (!empty($paperQuestionIds)) {
|
|
|
|
|
- Log::info('LearningAnalyticsService: 获取原卷子题目', [
|
|
|
|
|
- 'paper_question_count' => count($paperQuestionIds)
|
|
|
|
|
|
|
+ // 如果完全没有错题,抛出异常
|
|
|
|
|
+ if (empty($priorityQuestions)) {
|
|
|
|
|
+ Log::warning('LearningAnalyticsService: 错题本无错题', [
|
|
|
|
|
+ 'student_id' => $studentId,
|
|
|
|
|
+ 'paper_ids' => $params['paper_ids'] ?? []
|
|
|
]);
|
|
]);
|
|
|
|
|
|
|
|
- // 使用原卷子题目补充到目标数量
|
|
|
|
|
- $additionalNeeded = max(5, count($priorityQuestions)) - count($priorityQuestions);
|
|
|
|
|
- $paperQuestionIds = array_diff($paperQuestionIds, array_column($priorityQuestions, 'id'));
|
|
|
|
|
- $additionalPaperQuestions = $this->getQuestionsFromBank([], [], $studentId, $questionTypeRatio, $additionalNeeded, $paperQuestionIds, [], null, null);
|
|
|
|
|
-
|
|
|
|
|
- $allQuestions = array_merge($priorityQuestions, $additionalPaperQuestions);
|
|
|
|
|
- Log::info('LearningAnalyticsService: 错题本题目补充完成', [
|
|
|
|
|
- 'final_count' => count($allQuestions)
|
|
|
|
|
- ]);
|
|
|
|
|
|
|
+ throw new \Exception('抱歉,您在这个卷子中没有错题记录,无法生成错题本。请确认卷子ID是否正确或联系管理员。');
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
- // 如果是错题本类型,但完全没有错题,使用原卷子的所有题目
|
|
|
|
|
- if ($isMistakeBook && empty($priorityQuestions) && !empty($params['paper_ids'])) {
|
|
|
|
|
- Log::info('LearningAnalyticsService: 错题本无错题,使用原卷子题目', [
|
|
|
|
|
- 'paper_ids' => $params['paper_ids']
|
|
|
|
|
- ]);
|
|
|
|
|
-
|
|
|
|
|
- // 获取原卷子的所有题目
|
|
|
|
|
- $paperQuestionIds = $this->getPaperAllQuestions($params['paper_ids']);
|
|
|
|
|
- if (!empty($paperQuestionIds)) {
|
|
|
|
|
- $allQuestions = $this->getQuestionsFromBank([], [], $studentId, $questionTypeRatio, $maxQuestions, $paperQuestionIds, [], null, null);
|
|
|
|
|
-
|
|
|
|
|
- // 检查是否获取到题目
|
|
|
|
|
- if (empty($allQuestions)) {
|
|
|
|
|
- Log::warning('LearningAnalyticsService: 错题本无法获取任何题目', [
|
|
|
|
|
- 'paper_ids' => $params['paper_ids'],
|
|
|
|
|
- 'paper_question_ids' => $paperQuestionIds,
|
|
|
|
|
- 'reason' => '原卷子题目在题库中不存在或已删除'
|
|
|
|
|
- ]);
|
|
|
|
|
-
|
|
|
|
|
- throw new \Exception('抱歉,您选择的卷子中的题目在题库中不存在或已被删除,无法生成错题本。请选择其他卷子或联系管理员更新题库。');
|
|
|
|
|
- }
|
|
|
|
|
-
|
|
|
|
|
- Log::info('LearningAnalyticsService: 错题本使用原卷子题目', [
|
|
|
|
|
- 'question_count' => count($allQuestions)
|
|
|
|
|
- ]);
|
|
|
|
|
- } else {
|
|
|
|
|
- throw new \Exception('抱歉,指定的卷子中没有找到题目,无法生成错题本。');
|
|
|
|
|
- }
|
|
|
|
|
- }
|
|
|
|
|
-
|
|
|
|
|
- // 错题本类型但既无错题又无卷子题目
|
|
|
|
|
- if ($isMistakeBook && empty($priorityQuestions) && empty($allQuestions)) {
|
|
|
|
|
- Log::warning('LearningAnalyticsService: 错题本既无错题又无卷子题目', [
|
|
|
|
|
- 'student_id' => $studentId,
|
|
|
|
|
- 'paper_ids' => $params['paper_ids'] ?? []
|
|
|
|
|
- ]);
|
|
|
|
|
-
|
|
|
|
|
- throw new \Exception('抱歉,您在这个卷子中没有错题记录,且卷子题目无法获取,无法生成错题本。请确认卷子ID是否正确或联系管理员。');
|
|
|
|
|
- }
|
|
|
|
|
-
|
|
|
|
|
if (!$isMistakeBook && count($priorityQuestions) < $totalQuestions) {
|
|
if (!$isMistakeBook && count($priorityQuestions) < $totalQuestions) {
|
|
|
try {
|
|
try {
|
|
|
// 【优化】教材出卷(assemble_type=3)保留知识点筛选,但额外使用章节筛选
|
|
// 【优化】教材出卷(assemble_type=3)保留知识点筛选,但额外使用章节筛选
|