peixue-dev/peidu/docs/fixes/2026-01-23-我的课程与学习记录关联/📋问题分析与解决方案.md

5.1 KiB

我的课程与学习记录关联 - 问题分析与解决方案

📊 现状分析

1. 现有功能

课程购买功能已实现

  • ParentAcademyCourseController - 课程列表、详情、购买
  • ParentAcademyPurchase - 购买记录表
  • 支持课程浏览、购买、支付

学习记录功能已实现

  • LearningRecordController - 陪伴员填写的学习记录
  • LearningRecord - 学习记录表
  • 用于陪伴员记录每日陪伴情况

2. 存在的问题

两个功能完全独立,没有关联

  • 家长购买课程后,无法记录学习进度
  • 课程学习完成后,没有生成学习记录
  • 学习完成后,没有积分奖励
  • 无法查看课程的学习历史

数据孤岛

  • parent_academy_purchase 表只记录购买信息
  • learning_record 表只记录陪伴员的服务记录
  • 缺少课程学习记录的数据模型

🎯 解决方案

方案概述

创建一个新的数据表 course_learning_record,专门记录家长学院课程的学习情况,并与积分系统关联。

核心设计

1. 数据表设计

CREATE TABLE `course_learning_record` (
  `id` bigint NOT NULL AUTO_INCREMENT COMMENT '主键ID',
  `tenant_id` bigint DEFAULT NULL COMMENT '租户ID',
  `user_id` bigint NOT NULL COMMENT '用户ID',
  `course_id` bigint NOT NULL COMMENT '课程ID',
  `purchase_id` bigint NOT NULL COMMENT '购买记录ID',
  `learning_duration` int DEFAULT 0 COMMENT '学习时长(秒)',
  `learning_progress` int DEFAULT 0 COMMENT '学习进度(0-100)',
  `last_position` int DEFAULT 0 COMMENT '最后学习位置(秒)',
  `is_completed` tinyint DEFAULT 0 COMMENT '是否完成(0-未完成,1-已完成)',
  `completed_time` datetime DEFAULT NULL COMMENT '完成时间',
  `points_awarded` int DEFAULT 0 COMMENT '已奖励积分',
  `notes` text COMMENT '学习笔记',
  `create_time` datetime DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  `update_time` datetime DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
  `deleted` tinyint DEFAULT 0 COMMENT '逻辑删除(0-未删除,1-已删除)',
  PRIMARY KEY (`id`),
  KEY `idx_user_id` (`user_id`),
  KEY `idx_course_id` (`course_id`),
  KEY `idx_purchase_id` (`purchase_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='课程学习记录表';

2. 功能流程

学习流程:

1. 家长购买课程
   ↓
2. 开始学习课程
   ↓
3. 记录学习进度(每30秒自动保存)
   ↓
4. 学习完成(进度达到90%以上)
   ↓
5. 自动生成学习记录
   ↓
6. 奖励积分(首次完成)

积分奖励规则:

  • 完成课程: +50积分
  • 学习笔记: +10积分
  • 连续学习7天: +100积分
  • 完成必修课程: +200积分

3. API接口设计

新增接口:

// 1. 开始学习课程
POST /api/parent-academy/start-learning
参数: { courseId, purchaseId }
返回: { learningRecordId, lastPosition }

// 2. 更新学习进度
POST /api/parent-academy/update-progress
参数: { learningRecordId, position, duration }
返回: { success, progress }

// 3. 完成课程学习
POST /api/parent-academy/complete-learning
参数: { learningRecordId, notes }
返回: { success, pointsAwarded }

// 4. 获取学习历史
GET /api/parent-academy/learning-history
参数: { courseId }
返回: { records: [...] }

4. 前端页面改造

我的课程页面增强:

  • 显示学习进度条
  • 显示最后学习时间
  • 显示已获得积分
  • 添加"继续学习"按钮

课程学习页面:

  • 视频播放器(支持断点续播)
  • 学习进度自动保存
  • 学习笔记功能
  • 完成后积分提示

📋 实施步骤

第一阶段: 数据库准备

  1. 创建 course_learning_record
  2. 创建测试数据

第二阶段: 后端开发

  1. 创建 CourseLearningRecord 实体类
  2. 创建 CourseLearningRecordMapper
  3. 创建 CourseLearningRecordService
  4. ParentAcademyCourseController 中添加学习相关接口
  5. 集成积分奖励逻辑

第三阶段: 前端开发

  1. 改造 my-courses.vue 页面
  2. 创建课程学习页面 course-player.vue
  3. 添加学习进度组件
  4. 添加学习笔记功能

第四阶段: 测试验证

  1. 单元测试
  2. 集成测试
  3. 用户体验测试

🎁 预期效果

用户体验提升

  • 学习进度可视化
  • 断点续播功能
  • 学习激励(积分奖励)
  • 学习历史记录

数据价值

  • 课程完成率统计
  • 用户学习行为分析
  • 课程质量评估依据
  • 个性化推荐基础

商业价值

  • 提高课程完成率
  • 增强用户粘性
  • 促进课程复购
  • 提升用户满意度

⚠️ 注意事项

  1. 性能优化

    • 学习进度更新采用防抖策略(30秒一次)
    • 使用Redis缓存学习状态
    • 批量更新数据库
  2. 数据一致性

    • 购买记录与学习记录保持同步
    • 积分奖励防止重复发放
    • 事务处理确保数据完整性
  3. 用户体验

    • 学习进度自动保存,无需手动操作
    • 网络异常时本地缓存进度
    • 完成课程时给予明确反馈
  4. 扩展性

    • 预留课程评价字段
    • 预留学习证书字段
    • 支持未来的学习路径功能