|
|
@@ -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);
|
|
|
|