|
|
@@ -1,47 +1,91 @@
|
|
|
-# 自动评价流程图(简化版)
|
|
|
+# 自动评价流程图
|
|
|
|
|
|
```mermaid
|
|
|
flowchart TD
|
|
|
A[开始] --> B[查找正在运行的课程]
|
|
|
- B --> C[获取评价数据]
|
|
|
- C --> D[查找第一个未操作的记录]
|
|
|
- D --> E{参数是否匹配?}
|
|
|
- E -->|否| F[返回参数不匹配]
|
|
|
- E -->|是| G[计算操作时间和得分]
|
|
|
- G --> H[更新评价记录]
|
|
|
- H --> I[更新课程总分]
|
|
|
- I --> J[返回评价结果]
|
|
|
- F --> K[结束]
|
|
|
- J --> K
|
|
|
+ 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的课程
|
|
|
+ - 查询CourseTime=0的课程记录
|
|
|
+ - 按RunLogID降序排列获取最新记录
|
|
|
|
|
|
2. **获取评价数据**
|
|
|
- - 查询该课程的客观评价数据(EvaType=1)
|
|
|
+ - 使用自定义SQL查询获取自动评价所需数据
|
|
|
+ - 关联CourseEvaLog和CourseOperationNode表
|
|
|
+ - 筛选评价类型为1(客观评价)的记录
|
|
|
- 按序号排序
|
|
|
|
|
|
3. **查找第一个未操作的记录**
|
|
|
- - 找到IsOperated=0的第一个记录
|
|
|
+ - 遍历评价数据,找到IsOperated=0的第一个记录
|
|
|
+ - 确保按序号顺序处理
|
|
|
|
|
|
4. **参数匹配检查**
|
|
|
- 比较请求参数Param1和TextParam1
|
|
|
- 比较请求参数Param2和TextParam2
|
|
|
+ - 只有当两个参数都匹配时才继续
|
|
|
|
|
|
5. **计算操作时间和得分**
|
|
|
- - 计算从课程开始到现在的操作时间
|
|
|
+ - 计算从课程开始到现在的操作时间(扣除暂停时间)
|
|
|
- 计算操作得分:得分 = 评价赋分 - 评价失分
|
|
|
|
|
|
6. **更新评价记录**
|
|
|
- - 标记为已操作(IsOperated=1)
|
|
|
- - 更新操作得分和时间
|
|
|
+ - 更新CourseEvaLog表中的是否操作字段为1
|
|
|
+ - 更新操作得分和操作时间
|
|
|
|
|
|
-7. **更新课程总分**
|
|
|
- - 重新计算所有已操作项的总分
|
|
|
- - 更新课程的总得分
|
|
|
+7. **重新计算课程总得分**
|
|
|
+ - 汇总所有已操作项的得分
|
|
|
+ - 计算整个课程的总得分
|
|
|
|
|
|
-8. **返回评价结果**
|
|
|
- - 包含操作状态、得分等信息
|
|
|
+8. **更新课程总分**
|
|
|
+ - 更新CourseRunLog表中的课程得分
|
|
|
+
|
|
|
+9. **创建SSE通知数据**
|
|
|
+ - 构造包含评价更新信息的通知数据
|
|
|
+ - 包括运行记录ID、序号、评价名称、操作状态、得分等信息
|
|
|
+
|
|
|
+10. **通过SSE广播评价更新**
|
|
|
+ - 使用GlobalSSEManager向所有连接的客户端广播消息
|
|
|
+ - 事件类型为"evaluation_update"
|
|
|
+
|
|
|
+11. **返回评价结果**
|
|
|
+ - 返回包含操作状态、得分等信息的评价结果
|
|
|
+
|
|
|
+## SSE通知数据结构
|
|
|
+
|
|
|
+```json
|
|
|
+{
|
|
|
+ "type": "evaluation_update",
|
|
|
+ "runLogID": 运行记录ID,
|
|
|
+ "seqNo": 序号,
|
|
|
+ "evaName": "评价名称",
|
|
|
+ "isOperated": 1,
|
|
|
+ "operScore": 操作得分,
|
|
|
+ "courseScore": 课程总分,
|
|
|
+ "timestamp": "时间戳"
|
|
|
+}
|
|
|
+```
|