Files
wucaixing-backend/docs/TrainingProgressLogic.md
2026-05-13 16:14:53 +08:00

4.8 KiB
Raw Permalink Blame History

培训计划学员进度计算逻辑说明

本文档说明了在生成“在线教育培训月度统计表”时,学员完成培训进度的计算逻辑及相关数据库表关联关系。

1. 总体进度计算逻辑

学员的培训进度取决于 hot_training_participant 表中的状态。

1.1 已完成学员

如果学员在 hot_training_participant 表中的 is_completed 字段为 1(或 complete_time 不为空),则该学员的进度直接记为 100%。 这意味着学员已经完成了所有的课程学习以及综合检测(如果有)。

1.2 未完成学员

如果学员尚未完成(is_completed = 0),则进度计算公式如下:


\text{总进度} = \frac{\sum \text{各课程进度} + \text{综合检测进度}}{\text{课程数量} + 1}
  • 课程数量:当前培训计划包含的课程总数(来自 hot_training_course_config)。
  • 综合检测进度:对于未完成学员,综合检测部分默认记为 0%
  • 各课程进度:见下文详细计算。

2. 单门课程进度计算逻辑

对于培训计划中的每一门课程,其进度计算取决于该课程是否包含随堂练习(题目)。

2.1 判断课程是否有随堂练习

  1. 通过 hot_training_course_config 表找到对应的 course_id
  2. 查询 hot_course_resource 表,条件为 course_idresource_type = 3(题目)。
  3. 如果存在记录,则认为该课程包含随堂练习;否则认为不包含。

2.2 课程进度计算公式

情况 A无随堂练习


\text{课程进度} = \text{视频播放进度}
  • 视频播放进度:取 hot_training_course_record 表中该用户该课程的 progress_rate百分比值最大100

情况 B有随堂练习


\text{课程进度} = (\text{视频播放进度} \times 90\%) + (\text{随堂练习得分} \times 10\%)
  • 视频播放进度:同上。
  • 随堂练习得分
    • 检查 hot_training_course_record 表中的 check_status 字段。
    • 如果 check_status = 1(已完成),则得分为 100
    • 否则,得分为 0

3. 课程时长计算逻辑(分钟)

“教育培训内容”区域除展示课程名称外,同时展示每门课程的视频总时长(分钟)。

3.1 计算步骤

  1. 通过 hot_training_course_config 获取当前培训计划的课程列表(按 sort_no 排序),得到每门课的 course_id
  2. 查询 hot_course_resource 表中该 course_id 下的视频资源:
    • 条件:course_id = ? AND resource_type = 1(视频)
    • 得到视频资源 ID 列表:resource_id(对应 hot_media_resource.id
  3. 查询 hot_media_resource 表,按资源 ID 集合汇总视频时长:
    • 汇总字段:SUM(duration_seconds)
  4. 将秒数转换为分钟并向上取整:
    • duration_min = ceil(duration_seconds / 60)

3.2 展示规则

  • 若课程无视频资源或汇总时长为空,则时长列显示空白。
  • 否则显示 X分钟

4. 学习记录表 - 学习时长计算逻辑

在“学习记录表”中,会显示“学习分钟数/计划分钟数”。

4.1 计划分钟数

逻辑同第3节“课程时长计算逻辑”为该培训计划下所有课程视频时长的总和分钟向上取整

4.2 学习分钟数

hot_training_course_record 表中的 learn_duration_min 字段。 注意:尽管字段名为 min,但在实际业务中存储的是。 因此计算逻辑为:

  1. 获取该用户在该培训计划下所有课程的学习记录。
  2. 若同一课程有多条记录,取 learn_duration_min 最大值。
  3. 对于每一门课程,将其学习时长与该课程的计划视频时长进行比较,取较小值(即学习时长不大于课程时长)。
  4. 累加所有课程的处理后时长(秒)。
  5. 将总秒数除以 60 并向上取整,得到最终的学习分钟数。

5. 数据库表关联关系

以下是涉及的关键数据库表及其关联方式:

  1. hot_training (培训计划主表)

    • id: 培训计划ID
  2. hot_training_participant (培训参与人员表)

    • training_id: 关联 hot_training.id
    • user_id: 学员ID
    • is_completed: 是否完成培训 (1=是, 0=否)
    • complete_time: 完成时间
  3. hot_training_course_config (培训课程配置表)

    • training_id: 关联 hot_training.id
    • course_id: 关联 hot_course.id (实际课程ID)
    • id: 培训课程配置ID (用于关联学习记录)
  4. hot_course_resource (课程资源关联表)

    • course_id: 关联 hot_course.id
    • resource_type: 资源类型 (1=视频 2=音频 3=题目)
    • 用于判断课程是否有随堂练习。
  5. hot_training_course_record (培训课程学习记录表)