|
|
@@ -1702,6 +1702,18 @@ class LearningAnalyticsService
|
|
|
Log::info('应用知识点筛选', ['kp_codes' => $kpCodes]);
|
|
|
}
|
|
|
|
|
|
+ // 按学段筛选(题库 grade: 2=初中, 3=高中)
|
|
|
+ if ($grade !== null) {
|
|
|
+ $stageGrade = $this->normalizeQuestionStageGrade((int) $grade);
|
|
|
+ if ($stageGrade !== null) {
|
|
|
+ $query->where('grade', $stageGrade);
|
|
|
+ Log::info('应用学段筛选', [
|
|
|
+ 'input_grade' => $grade,
|
|
|
+ 'stage_grade' => $stageGrade
|
|
|
+ ]);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
// 按技能筛选(这里使用 tags 字段模拟技能筛选)
|
|
|
if (!empty($skills)) {
|
|
|
$query->where(function ($q) use ($skills) {
|
|
|
@@ -2966,6 +2978,15 @@ class LearningAnalyticsService
|
|
|
// 查询同年级其他知识点的题目
|
|
|
$query = \App\Models\Question::query();
|
|
|
|
|
|
+ $stageGrade = $this->normalizeQuestionStageGrade($grade);
|
|
|
+ if ($stageGrade !== null) {
|
|
|
+ $query->where('grade', $stageGrade);
|
|
|
+ Log::info('getSupplementaryQuestionsForGrade: 应用学段筛选', [
|
|
|
+ 'input_grade' => $grade,
|
|
|
+ 'stage_grade' => $stageGrade
|
|
|
+ ]);
|
|
|
+ }
|
|
|
+
|
|
|
// 排除已选知识点
|
|
|
if (!empty($existingKpCodes)) {
|
|
|
$query->whereNotIn('kp_code', $existingKpCodes);
|
|
|
@@ -3140,6 +3161,16 @@ class LearningAnalyticsService
|
|
|
};
|
|
|
}
|
|
|
|
|
|
+ private function normalizeQuestionStageGrade(int $grade): ?int
|
|
|
+ {
|
|
|
+ if ($grade <= 0) {
|
|
|
+ return null;
|
|
|
+ }
|
|
|
+
|
|
|
+ // 年级转学段 todo:下一步需要视频小学
|
|
|
+ return $grade <= 9 ? 2 : 3;
|
|
|
+ }
|
|
|
+
|
|
|
/**
|
|
|
* 【新增】获取难度标签(重载版本)
|
|
|
*/
|