Răsfoiți Sursa

fix:学情分析快照knowledge_points填入完整的知识点掌握度数据

yemeishu 1 săptămână în urmă
părinte
comite
8fd379433e
1 a modificat fișierele cu 13 adăugiri și 4 ștergeri
  1. 13 4
      app/Services/KnowledgeMasteryService.php

+ 13 - 4
app/Services/KnowledgeMasteryService.php

@@ -402,19 +402,28 @@ class KnowledgeMasteryService
             $snapshotList = $snapshots->map(function ($snapshot) {
                 // 解析掌握度数据
                 $masteryData = json_decode($snapshot->mastery_data, true) ?: [];
+                $currentMastery = json_decode($snapshot->current_mastery, true) ?: [];
+
+                // 以 current_mastery 为主,mastery_data 作为补充(用于 is_parent / change / weight)
+                $allKpCodes = array_values(array_unique(array_merge(
+                    array_keys($currentMastery),
+                    array_keys($masteryData)
+                )));
 
                 // 提取知识点信息 - 修复字段名
                 $knowledgePoints = [];
                 $parentKnowledgePoints = []; // 存储父知识点信息
-                $kpCodes = array_keys($masteryData); // 收集所有kp_code用于批量获取名称
 
                 // 批量获取知识点名称
-                $kpNamesMap = $this->getKnowledgePointNamesMap($kpCodes);
+                $kpNamesMap = $this->getKnowledgePointNamesMap($allKpCodes);
 
                 // 第一步:分类父知识点和子知识点
-                foreach ($masteryData as $kpCode => $kpData) {
+                foreach ($allKpCodes as $kpCode) {
+                    $kpData = $masteryData[$kpCode] ?? [];
                     $isParent = (bool) ($kpData['is_parent'] ?? false);
-                    $masteryLevel = floatval($kpData['current_mastery'] ?? 0);
+                    $masteryLevel = isset($currentMastery[$kpCode])
+                        ? floatval($currentMastery[$kpCode])
+                        : floatval($kpData['current_mastery'] ?? 0);
                     $change = floatval($kpData['change'] ?? 0);
                     $weight = intval($kpData['weight'] ?? 1);