|
|
@@ -1244,81 +1244,20 @@ class LearningAnalyticsService
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- // 如果仍然没有知识点(例如新学生无薄弱点),根据年级从知识图谱获取知识点
|
|
|
- if (empty($kpCodes)) {
|
|
|
- $filters = [];
|
|
|
-
|
|
|
- // 优先使用用户选择的年级,其次使用学生的年级
|
|
|
- $effectiveGrade = $grade;
|
|
|
- if (!$effectiveGrade && $studentId) {
|
|
|
- $student = \App\Models\Student::find($studentId);
|
|
|
- if ($student && $student->grade) {
|
|
|
- $effectiveGrade = $student->grade;
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- if ($effectiveGrade) {
|
|
|
- $standardizedGrade = $effectiveGrade;
|
|
|
-
|
|
|
- // 标准化年级名称(不更新数据库)
|
|
|
- if ($standardizedGrade === '初一') {
|
|
|
- $standardizedGrade = '七年级';
|
|
|
- } elseif ($standardizedGrade === '初二') {
|
|
|
- $standardizedGrade = '八年级';
|
|
|
- } elseif ($standardizedGrade === '初三') {
|
|
|
- $standardizedGrade = '九年级';
|
|
|
- }
|
|
|
-
|
|
|
- // 映射年级到学段 (phase)
|
|
|
- if ($standardizedGrade === '初中' || str_contains($standardizedGrade, '七年级') || str_contains($standardizedGrade, '八年级') || str_contains($standardizedGrade, '九年级')) {
|
|
|
- $filters['phase'] = '初中';
|
|
|
- } elseif (str_contains($standardizedGrade, '高')) {
|
|
|
- $filters['phase'] = '高中';
|
|
|
- }
|
|
|
-
|
|
|
- Log::info('Using grade for knowledge points filter', [
|
|
|
- 'original_grade' => $effectiveGrade,
|
|
|
- 'standardized_grade' => $standardizedGrade,
|
|
|
- 'filters' => $filters
|
|
|
- ]);
|
|
|
- }
|
|
|
-
|
|
|
- // 调用API获取过滤后的知识点
|
|
|
- $filteredKps = $this->getKnowledgePoints($filters);
|
|
|
-
|
|
|
- if (!empty($filteredKps)) {
|
|
|
- // 随机选择 5 个知识点
|
|
|
- $kpKeys = array_column($filteredKps, 'kp_code');
|
|
|
- if (empty($kpKeys)) {
|
|
|
- $kpKeys = array_column($filteredKps, 'code');
|
|
|
- }
|
|
|
-
|
|
|
- if (!empty($kpKeys)) {
|
|
|
- $randomKeys = array_rand(array_flip($kpKeys), min(5, count($kpKeys)));
|
|
|
- $kpCodes = is_array($randomKeys) ? $randomKeys : [$randomKeys];
|
|
|
-
|
|
|
- Log::info('Randomly selected KPs for student based on grade (API)', [
|
|
|
- 'student_id' => $studentId,
|
|
|
- 'grade' => $student->grade ?? 'unknown',
|
|
|
- 'filters' => $filters,
|
|
|
- 'kps' => $kpCodes
|
|
|
- ]);
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
+ // 如果没有指定知识点,直接从题库随机选择题目(不限制知识点)
|
|
|
+ // 这样可以确保总能找到题目,而不是依赖知识图谱中的知识点
|
|
|
|
|
|
// 2. 调用题库API获取符合条件的所有题目
|
|
|
$allQuestions = $this->getQuestionsFromBank($kpCodes, $skills, $studentId, $questionTypeRatio, $difficultyRatio, 200);
|
|
|
|
|
|
if (empty($allQuestions)) {
|
|
|
- // 只有在选择了知识点但题库为空时才报错
|
|
|
- // 如果没有选择知识点,系统会从所有题目中选择,不应该报错
|
|
|
+ // 如果指定了知识点但题库为空,给出明确提示
|
|
|
if (!empty($kpCodes)) {
|
|
|
$message = '题库中暂无可用题目。您可以选择其他知识点,或点击"生成练习题"按钮先补充题库。';
|
|
|
} else {
|
|
|
- // 没有选择知识点时,从所有题目中选择,这里不应该出现空的情况
|
|
|
- // 如果出现,说明API调用失败,返回通用错误
|
|
|
- $message = '题库服务异常,请稍后重试。';
|
|
|
+ // 没有选择知识点时,从所有题目中选择
|
|
|
+ // 如果仍然没有题目,说明题库为空,提示补充题库
|
|
|
+ $message = '题库为空,请先添加题目到题库。您可以点击"生成练习题"按钮或手动上传题目。';
|
|
|
}
|
|
|
|
|
|
Log::warning('智能出卷失败 - 未找到题目', [
|