-- 修复课件时长问题
-- 问题：课件duration字段为0或NULL，导致学习进度计算不准确
-- 解决：根据实际视频文件更新时长，或手动设置合理的时长

-- 1. 查看当前课件时长情况
SELECT 
    id,
    courseware_name AS 课件名称,
    type AS 类型,
    duration AS 当前时长秒,
    CASE 
        WHEN duration IS NULL OR duration = 0 THEN '❌ 需要修复'
        ELSE '✅ 正常'
    END AS 状态,
    file_path AS 文件路径
FROM study_courseware
WHERE course_id = 1  -- 修改为你要检查的课程ID
ORDER BY courseware_order;

-- 2. 手动更新课件时长（根据实际视频时长）
-- 示例：假设你的视频实际时长如下

-- 更新课件ID=883的时长为60秒（请根据实际情况修改）
UPDATE study_courseware SET duration = 60 WHERE id = 883;

-- 更新课件ID=884的时长为120秒
UPDATE study_courseware SET duration = 120 WHERE id = 884;

-- 更新课件ID=885的时长为90秒
UPDATE study_courseware SET duration = 90 WHERE id = 885;

-- 更新课件ID=886的时长为150秒
UPDATE study_courseware SET duration = 150 WHERE id = 886;

-- 更新课件ID=887的时长为180秒
UPDATE study_courseware SET duration = 180 WHERE id = 887;

-- 3. 批量更新：为所有duration为0或NULL的视频课件设置默认时长（60秒）
-- ⚠️ 慎用！建议先查看具体视频再设置准确时长
-- UPDATE study_courseware 
-- SET duration = 60 
-- WHERE type = 'video' 
--   AND (duration IS NULL OR duration = 0);

-- 4. 验证更新结果
SELECT 
    id,
    courseware_name AS 课件名称,
    duration AS 时长秒,
    ROUND(duration / 60, 2) AS 时长分钟,
    file_path AS 文件路径
FROM study_courseware
WHERE course_id = 1  -- 修改为你的课程ID
  AND type = 'video'
ORDER BY courseware_order;

-- 5. 重新计算学习进度（更新课件时长后，需要触发进度重算）
-- 方法A: 删除学习记录，让用户重新学习时自动计算
-- DELETE FROM study_learning_record WHERE student_id = 452 AND course_id = 1;

-- 方法B: 保留学习记录，手动更新进度为0，下次学习时会重新计算
-- UPDATE study_learning_record 
-- SET progress = 0 
-- WHERE student_id = 452 AND course_id = 1;

-- 6. 查看学习详情，检查是否有异常数据
SELECT 
    sld.id,
    sld.courseware_id AS 课件ID,
    sc.courseware_name AS 课件名称,
    sc.duration AS 课件时长秒,
    sld.video_position AS 播放位置秒,
    CASE 
        WHEN sc.duration > 0 THEN ROUND(sld.video_position * 100.0 / sc.duration, 2)
        ELSE NULL
    END AS 播放进度百分比,
    CASE 
        WHEN sld.video_position >= sc.duration * 0.9 THEN '✅ 已完成'
        WHEN sld.video_position == (
            SELECT MAX(video_position) 
            FROM study_learning_detail 
            WHERE courseware_id = sld.courseware_id 
              AND student_id = sld.student_id
        ) AND sld.video_position >= 3 THEN '✅ 已完成（到达最远位置）'
        ELSE '⏸️ 未完成'
    END AS 完成状态
FROM study_learning_detail sld
LEFT JOIN study_courseware sc ON sld.courseware_id = sc.id
WHERE sld.student_id = 452  -- 修改为你的学生ID
  AND sld.course_id = 1     -- 修改为你的课程ID
ORDER BY sld.courseware_id, sld.video_position DESC;

-- 注意事项：
-- 1. 执行UPDATE语句前，请务必先备份数据库
-- 2. 根据实际视频时长设置duration值（单位：秒）
-- 3. 更新后，下次学习时系统会自动重新计算进度
-- 4. 可以在APP中重新进入课程，触发进度重新计算
