|
|
@@ -16,6 +16,7 @@ class StudentKnowledgeMastery extends Model
|
|
|
'student_id',
|
|
|
'kp_code',
|
|
|
'mastery_level',
|
|
|
+ 'direct_mastery_level', // 直接学习掌握度(答题计算),判断达标时优先使用
|
|
|
'confidence_level',
|
|
|
'total_attempts',
|
|
|
'correct_attempts',
|
|
|
@@ -41,6 +42,7 @@ class StudentKnowledgeMastery extends Model
|
|
|
|
|
|
protected $casts = [
|
|
|
'mastery_level' => 'decimal:4',
|
|
|
+ 'direct_mastery_level' => 'decimal:4',
|
|
|
'confidence_level' => 'decimal:4',
|
|
|
'mastery_change' => 'decimal:4',
|
|
|
'avg_time_seconds' => 'decimal:2',
|
|
|
@@ -119,14 +121,23 @@ class StudentKnowledgeMastery extends Model
|
|
|
}
|
|
|
|
|
|
// 使用 DB::table 避免 Eloquent accessor 把数字转成文字标签
|
|
|
- $levels = \Illuminate\Support\Facades\DB::table('student_knowledge_mastery')
|
|
|
+ // 【新增】同时获取 direct_mastery_level,判断时优先使用
|
|
|
+ $records = \Illuminate\Support\Facades\DB::table('student_knowledge_mastery')
|
|
|
->where('student_id', $studentId)
|
|
|
->whereIn('kp_code', $kpCodes)
|
|
|
- ->pluck('mastery_level', 'kp_code')
|
|
|
- ->toArray();
|
|
|
+ ->get(['kp_code', 'mastery_level', 'direct_mastery_level'])
|
|
|
+ ->keyBy('kp_code');
|
|
|
|
|
|
foreach ($kpCodes as $kpCode) {
|
|
|
- $level = isset($levels[$kpCode]) ? (float) $levels[$kpCode] : 0.0;
|
|
|
+ $record = $records->get($kpCode);
|
|
|
+ // 优先使用 direct_mastery_level(直接学习掌握度)
|
|
|
+ if ($record) {
|
|
|
+ $level = $record->direct_mastery_level !== null
|
|
|
+ ? (float) $record->direct_mastery_level
|
|
|
+ : (float) $record->mastery_level;
|
|
|
+ } else {
|
|
|
+ $level = 0.0;
|
|
|
+ }
|
|
|
if ($level < $threshold) {
|
|
|
return false;
|
|
|
}
|
|
|
@@ -151,11 +162,12 @@ class StudentKnowledgeMastery extends Model
|
|
|
}
|
|
|
|
|
|
// 获取掌握度(使用 DB::table 避免 Eloquent accessor 把数字转成文字标签)
|
|
|
- $levels = \Illuminate\Support\Facades\DB::table('student_knowledge_mastery')
|
|
|
+ // 【新增】同时获取 direct_mastery_level,判断时优先使用
|
|
|
+ $records = \Illuminate\Support\Facades\DB::table('student_knowledge_mastery')
|
|
|
->where('student_id', $studentId)
|
|
|
->whereIn('kp_code', $kpCodes)
|
|
|
- ->pluck('mastery_level', 'kp_code')
|
|
|
- ->toArray();
|
|
|
+ ->get(['kp_code', 'mastery_level', 'direct_mastery_level'])
|
|
|
+ ->keyBy('kp_code');
|
|
|
|
|
|
// 获取有题目的知识点
|
|
|
$kpCodesWithQuestions = \App\Models\Question::query()
|
|
|
@@ -174,7 +186,15 @@ class StudentKnowledgeMastery extends Model
|
|
|
|
|
|
$hasAnyKpWithQuestions = true;
|
|
|
|
|
|
- $level = isset($levels[$kpCode]) ? (float) $levels[$kpCode] : 0.0;
|
|
|
+ // 优先使用 direct_mastery_level(直接学习掌握度)
|
|
|
+ $record = $records->get($kpCode);
|
|
|
+ if ($record) {
|
|
|
+ $level = $record->direct_mastery_level !== null
|
|
|
+ ? (float) $record->direct_mastery_level
|
|
|
+ : (float) $record->mastery_level;
|
|
|
+ } else {
|
|
|
+ $level = 0.0;
|
|
|
+ }
|
|
|
if ($level < $threshold) {
|
|
|
return false;
|
|
|
}
|
|
|
@@ -199,11 +219,12 @@ class StudentKnowledgeMastery extends Model
|
|
|
}
|
|
|
|
|
|
// 获取掌握度(使用 DB::table 避免 Eloquent accessor 把数字转成文字标签)
|
|
|
- $levels = \Illuminate\Support\Facades\DB::table('student_knowledge_mastery')
|
|
|
+ // 【新增】同时获取 direct_mastery_level,判断时优先使用
|
|
|
+ $records = \Illuminate\Support\Facades\DB::table('student_knowledge_mastery')
|
|
|
->where('student_id', $studentId)
|
|
|
->whereIn('kp_code', $kpCodes)
|
|
|
- ->pluck('mastery_level', 'kp_code')
|
|
|
- ->toArray();
|
|
|
+ ->get(['kp_code', 'mastery_level', 'direct_mastery_level'])
|
|
|
+ ->keyBy('kp_code');
|
|
|
|
|
|
// 获取有题目的知识点
|
|
|
$kpCodesWithQuestions = \App\Models\Question::query()
|
|
|
@@ -218,7 +239,15 @@ class StudentKnowledgeMastery extends Model
|
|
|
continue;
|
|
|
}
|
|
|
|
|
|
- $level = isset($levels[$kpCode]) ? (float) $levels[$kpCode] : 0.0;
|
|
|
+ // 优先使用 direct_mastery_level(直接学习掌握度)
|
|
|
+ $record = $records->get($kpCode);
|
|
|
+ if ($record) {
|
|
|
+ $level = $record->direct_mastery_level !== null
|
|
|
+ ? (float) $record->direct_mastery_level
|
|
|
+ : (float) $record->mastery_level;
|
|
|
+ } else {
|
|
|
+ $level = 0.0;
|
|
|
+ }
|
|
|
if ($level < $threshold) {
|
|
|
return $kpCode;
|
|
|
}
|