|
|
@@ -1684,3 +1684,139 @@ func (c *EvaLogController) UploadTMS() {
|
|
|
c.ServeJSON()
|
|
|
|
|
|
}
|
|
|
+
|
|
|
+// /evalog/setscore 设置课程得分
|
|
|
+
|
|
|
+// /evalog/setscore 设置课程得分
|
|
|
+
|
|
|
+func (c *EvaLogController) SetScore() {
|
|
|
+ type Request struct {
|
|
|
+ RunLogID int `json:"runLogID"`
|
|
|
+ SeqNo int `json:"seqNo"`
|
|
|
+ EvaScore int `json:"evaScore"`
|
|
|
+ }
|
|
|
+
|
|
|
+ var req Request
|
|
|
+ requestBody := c.Ctx.Input.RequestBody
|
|
|
+ println("Request Body:", string(requestBody))
|
|
|
+
|
|
|
+ if err := json.Unmarshal(requestBody, &req); err != nil {
|
|
|
+ c.Ctx.Output.SetStatus(400)
|
|
|
+ c.Data["json"] = map[string]interface{}{
|
|
|
+ "code": 400,
|
|
|
+ "msg": "请求参数格式错误: " + err.Error(),
|
|
|
+ }
|
|
|
+ c.ServeJSON()
|
|
|
+ return
|
|
|
+ }
|
|
|
+
|
|
|
+ if req.RunLogID == 0 || req.SeqNo == 0 {
|
|
|
+ c.Ctx.Output.SetStatus(400)
|
|
|
+ c.Data["json"] = map[string]interface{}{
|
|
|
+ "code": 400,
|
|
|
+ "msg": "缺少必要参数",
|
|
|
+ }
|
|
|
+ c.ServeJSON()
|
|
|
+ return
|
|
|
+ }
|
|
|
+
|
|
|
+ o := orm.NewOrm()
|
|
|
+
|
|
|
+ // 查询对应的评价记录
|
|
|
+ var evaLog models.CourseEvaLog
|
|
|
+ err := o.Raw(`
|
|
|
+ SELECT *
|
|
|
+ FROM CourseEvaLog
|
|
|
+ WHERE 运行记录编号 = ? AND 序号 = ?
|
|
|
+ `, req.RunLogID, req.SeqNo).QueryRow(&evaLog)
|
|
|
+
|
|
|
+ if err != nil {
|
|
|
+ if err == orm.ErrNoRows {
|
|
|
+ c.Data["json"] = map[string]interface{}{
|
|
|
+ "code": 404,
|
|
|
+ "msg": "未找到对应的评价记录",
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ c.Data["json"] = map[string]interface{}{
|
|
|
+ "code": 500,
|
|
|
+ "msg": "查询评价记录失败: " + err.Error(),
|
|
|
+ }
|
|
|
+ }
|
|
|
+ c.ServeJSON()
|
|
|
+ return
|
|
|
+ }
|
|
|
+
|
|
|
+ // 验证分数范围应在0到评价赋分之间
|
|
|
+ if req.EvaScore < 0 || req.EvaScore > evaLog.EvaScore {
|
|
|
+ c.Data["json"] = map[string]interface{}{
|
|
|
+ "code": 400,
|
|
|
+ "msg": fmt.Sprintf("分数应在0到%d之间", evaLog.EvaScore),
|
|
|
+ }
|
|
|
+ c.ServeJSON()
|
|
|
+ return
|
|
|
+ }
|
|
|
+
|
|
|
+ operScore := req.EvaScore
|
|
|
+
|
|
|
+ // 更新CourseEvaLog表中的操作得分
|
|
|
+ _, err = o.Raw(`
|
|
|
+ UPDATE CourseEvaLog
|
|
|
+ SET 操作得分 = ?
|
|
|
+ WHERE 运行记录编号 = ? AND 序号 = ?
|
|
|
+ `, operScore, req.RunLogID, req.SeqNo).Exec()
|
|
|
+
|
|
|
+ if err != nil {
|
|
|
+ c.Data["json"] = map[string]interface{}{
|
|
|
+ "code": 500,
|
|
|
+ "msg": "更新评价分数失败: " + err.Error(),
|
|
|
+ }
|
|
|
+ c.ServeJSON()
|
|
|
+ return
|
|
|
+ }
|
|
|
+
|
|
|
+ // 重新计算整个课程的总得分
|
|
|
+ var totalScore float64
|
|
|
+ err = o.Raw(`
|
|
|
+ SELECT COALESCE(SUM(操作得分), 0)
|
|
|
+ FROM CourseEvaLog
|
|
|
+ WHERE 运行记录编号 = ?
|
|
|
+ `, req.RunLogID).QueryRow(&totalScore)
|
|
|
+
|
|
|
+ if err != nil {
|
|
|
+ c.Data["json"] = map[string]interface{}{
|
|
|
+ "code": 500,
|
|
|
+ "msg": "计算总得分失败: " + err.Error(),
|
|
|
+ }
|
|
|
+ c.ServeJSON()
|
|
|
+ return
|
|
|
+ }
|
|
|
+
|
|
|
+ // 更新课程运行日志中的总得分
|
|
|
+ _, err = o.Raw(`
|
|
|
+ UPDATE CourseRunLog
|
|
|
+ SET 课程得分 = ?
|
|
|
+ WHERE 运行记录编号 = ?
|
|
|
+ `, totalScore, req.RunLogID).Exec()
|
|
|
+
|
|
|
+ if err != nil {
|
|
|
+ c.Data["json"] = map[string]interface{}{
|
|
|
+ "code": 500,
|
|
|
+ "msg": "更新总得分失败: " + err.Error(),
|
|
|
+ }
|
|
|
+ c.ServeJSON()
|
|
|
+ return
|
|
|
+ }
|
|
|
+
|
|
|
+ c.Data["json"] = map[string]interface{}{
|
|
|
+ "code": 200,
|
|
|
+ "msg": "设置评价分数成功",
|
|
|
+ "data": map[string]interface{}{
|
|
|
+ "runLogID": req.RunLogID,
|
|
|
+ "seqNo": req.SeqNo,
|
|
|
+ "evaScore": req.EvaScore,
|
|
|
+ "operScore": operScore,
|
|
|
+ "totalScore": totalScore,
|
|
|
+ },
|
|
|
+ }
|
|
|
+ c.ServeJSON()
|
|
|
+}
|