自动评价流程图.md 2.7 KB

自动评价流程图

flowchart TD
    A[开始] --> B[查找正在运行的课程]
    B --> C{找到正在运行的课程?}
    C -->|否| D[返回错误: 没有找到正在运行的课程]
    C -->|是| E[获取评价数据]
    E --> F{是否有评价数据?}
    F -->|否| G[返回提示: 当前课程没有评价数据]
    F -->|是| H[查找第一个未操作的记录]
    H --> I{是否有未操作的记录?}
    I -->|否| J[返回提示: 所有评价项已完成]
    I -->|是| K[比较参数1和参数2]
    K --> L{参数是否匹配?}
    L -->|否| M[返回错误: 操作参数不匹配]
    L -->|是| N[计算操作时间和得分]
    N --> O[更新CourseEvaLog表]
    O --> P[重新计算课程总得分]
    P --> Q[更新CourseRunLog表]
    Q --> R[创建SSE通知数据]
    R --> S[通过SSE广播评价更新]
    S --> T[返回评价结果]
    D --> U[结束]
    G --> U
    J --> U
    M --> U
    T --> U

详细流程说明

  1. 查找正在运行的课程

    • 查询CourseTime=0的课程记录
    • 按RunLogID降序排列获取最新记录
  2. 获取评价数据

    • 使用自定义SQL查询获取自动评价所需数据
    • 关联CourseEvaLog和CourseOperationNode表
    • 筛选评价类型为1(客观评价)的记录
    • 按序号排序
  3. 查找第一个未操作的记录

    • 遍历评价数据,找到IsOperated=0的第一个记录
    • 确保按序号顺序处理
  4. 参数匹配检查

    • 比较请求参数Param1和TextParam1
    • 比较请求参数Param2和TextParam2
    • 只有当两个参数都匹配时才继续
  5. 计算操作时间和得分

    • 计算从课程开始到现在的操作时间(扣除暂停时间)
    • 计算操作得分:得分 = 评价赋分 - 评价失分
  6. 更新评价记录

    • 更新CourseEvaLog表中的是否操作字段为1
    • 更新操作得分和操作时间
  7. 重新计算课程总得分

    • 汇总所有已操作项的得分
    • 计算整个课程的总得分
  8. 更新课程总分

    • 更新CourseRunLog表中的课程得分
  9. 创建SSE通知数据

    • 构造包含评价更新信息的通知数据
    • 包括运行记录ID、序号、评价名称、操作状态、得分等信息
  10. 通过SSE广播评价更新

    • 使用GlobalSSEManager向所有连接的客户端广播消息
    • 事件类型为"evaluation_update"
  11. 返回评价结果

    • 返回包含操作状态、得分等信息的评价结果

SSE通知数据结构

{
    "type": "evaluation_update",
    "runLogID": 运行记录ID,
    "seqNo": 序号,
    "evaName": "评价名称",
    "isOperated": 1,
    "operScore": 操作得分,
    "courseScore": 课程总分,
    "timestamp": "时间戳"
}