diff --git a/src/main/java/com/sztzjy/financial_bigdata/controller/common/CourseController.java b/src/main/java/com/sztzjy/financial_bigdata/controller/common/CourseController.java
index 1ed9a3d..3e561d2 100644
--- a/src/main/java/com/sztzjy/financial_bigdata/controller/common/CourseController.java
+++ b/src/main/java/com/sztzjy/financial_bigdata/controller/common/CourseController.java
@@ -1,6 +1,7 @@
 package com.sztzjy.financial_bigdata.controller.common;
 
 import com.github.pagehelper.PageInfo;
+import com.sztzjy.financial_bigdata.annotation.AnonymousAccess;
 import com.sztzjy.financial_bigdata.entity.SysCourse;
 import com.sztzjy.financial_bigdata.service.common.ICourseService;
 import com.sztzjy.financial_bigdata.util.ResultEntity;
@@ -21,6 +22,7 @@ public class CourseController {
     //查看课程
     @GetMapping("selectCourse")
     @ApiOperation("查看课程")
+    @AnonymousAccess
     public ResultEntity<PageInfo<SysCourse>> selectCourse(@RequestParam String schoolId,
                                                           @RequestParam Integer index,
                                                           @RequestParam Integer size) {
@@ -31,6 +33,7 @@ public class CourseController {
     //增加课程
     @PostMapping("insertCourse")
     @ApiOperation("增加课程")
+    @AnonymousAccess
     public ResultEntity insertCourse(@ApiParam("新增课程对象") @RequestBody SysCourse course) {
         Boolean flag = courseService.insertCourse(course);
         if (flag){
@@ -43,6 +46,7 @@ public class CourseController {
     //删除课程
     @GetMapping("deleteCourse")
     @ApiOperation("删除课程")
+    @AnonymousAccess
     public ResultEntity deleteCourse(@ApiParam("删除课程Id") @RequestParam String courseId,
                                      @RequestParam String schoolId){
         Boolean flag = courseService.deleteCourse(courseId,schoolId);
diff --git a/src/main/java/com/sztzjy/financial_bigdata/controller/stu/ExamController.java b/src/main/java/com/sztzjy/financial_bigdata/controller/stu/ExamController.java
index 65c335f..73a148b 100644
--- a/src/main/java/com/sztzjy/financial_bigdata/controller/stu/ExamController.java
+++ b/src/main/java/com/sztzjy/financial_bigdata/controller/stu/ExamController.java
@@ -2,13 +2,16 @@ package com.sztzjy.financial_bigdata.controller.stu;
 
 import com.sztzjy.financial_bigdata.annotation.AnonymousAccess;
 import com.sztzjy.financial_bigdata.entity.SysObjectiveQuestion;
+import com.sztzjy.financial_bigdata.entity.stu_dto.StuTheoryTestDto;
+import com.sztzjy.financial_bigdata.mapper.SysObjectiveQuestionMapper;
+import com.sztzjy.financial_bigdata.service.stu.IExamService;
 import com.sztzjy.financial_bigdata.util.ResultEntity;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
-import org.springframework.web.bind.annotation.GetMapping;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RequestParam;
-import org.springframework.web.bind.annotation.RestController;
+import io.swagger.annotations.ApiParam;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.http.HttpStatus;
+import org.springframework.web.bind.annotation.*;
 
 import java.util.List;
 
@@ -16,16 +19,35 @@ import java.util.List;
 @Api(tags = "实战考核")
 @RequestMapping("api/stu/examController")
 public class ExamController {
+    @Autowired
+    IExamService examService;
 
-    //基础知识题目展示
-//    @GetMapping("basicKnowledge")
-//    @ApiOperation("基础知识")
-//    @AnonymousAccess
-//    public ResultEntity<List<SysObjectiveQuestion>> basicKnowledge(@RequestParam String userId) {
-//
-//    }
+
+    //实战考核基础知识题目展示(开始考试)
+    @GetMapping("basicKnowledge")
+    @ApiOperation("基础知识(开始考试)")
+    @AnonymousAccess
+    public ResultEntity<List<SysObjectiveQuestion>> basicKnowledge(@ApiParam("考试管理id") @RequestParam String examManageId,
+                                                                   @RequestParam String userId) {
+        List<SysObjectiveQuestion> list=examService.basicKnowledge(examManageId,userId);
+        for (int i = 0; i < list.size(); i++) {
+            list.get(i).setSchoolId(String.valueOf(i+1));
+        }
+        return new ResultEntity<>(HttpStatus.OK, "基础知识(开始考试)、客观题列表查询成功",list);
+    }
 
     //交卷
+    @GetMapping("commitExam")
+    @ApiOperation("考试交卷")
+    @AnonymousAccess
+    public ResultEntity commitExam(@RequestBody StuTheoryTestDto theoryTestDto){
+        int flag=examService.commitExam(theoryTestDto);
+        if(flag==1){
+            return new ResultEntity<>(HttpStatus.OK, "提交试卷成功");
+        }else {
+            return new ResultEntity<>(HttpStatus.BAD_REQUEST, "提交试卷失败");
+        }
+    }
 
     //案例考核
 }
diff --git a/src/main/java/com/sztzjy/financial_bigdata/controller/stu/ExerciseExperimentalTraining.java b/src/main/java/com/sztzjy/financial_bigdata/controller/stu/ExerciseExperimentalTraining.java
index 2a0d58b..c6a1b3e 100644
--- a/src/main/java/com/sztzjy/financial_bigdata/controller/stu/ExerciseExperimentalTraining.java
+++ b/src/main/java/com/sztzjy/financial_bigdata/controller/stu/ExerciseExperimentalTraining.java
@@ -2,19 +2,17 @@ package com.sztzjy.financial_bigdata.controller.stu;
 
 import com.sztzjy.financial_bigdata.annotation.AnonymousAccess;
 import com.sztzjy.financial_bigdata.entity.*;
+import com.sztzjy.financial_bigdata.entity.stu_dto.StuCommitCaseDto;
 import com.sztzjy.financial_bigdata.entity.sys_dto.SysCourseChapterDto;
 import com.sztzjy.financial_bigdata.entity.sys_dto.SysCourseDto;
-import com.sztzjy.financial_bigdata.mapper.StuTrainingMapper;
-import com.sztzjy.financial_bigdata.mapper.SysCourseChapterMapper;
-import com.sztzjy.financial_bigdata.mapper.SysCourseMapper;
+import com.sztzjy.financial_bigdata.mapper.*;
+import com.sztzjy.financial_bigdata.service.tea.ITeaResourceDataService;
 import com.sztzjy.financial_bigdata.util.ResultEntity;
 import com.sztzjy.financial_bigdata.annotation.AnonymousAccess;
 import com.sztzjy.financial_bigdata.entity.SysCaseQuestion;
 import com.sztzjy.financial_bigdata.entity.SysCaseQuestionExample;
 import com.sztzjy.financial_bigdata.entity.SysCaseQuestionStep;
 import com.sztzjy.financial_bigdata.entity.SysCaseQuestionStepExample;
-import com.sztzjy.financial_bigdata.mapper.SysCaseQuestionMapper;
-import com.sztzjy.financial_bigdata.mapper.SysCaseQuestionStepMapper;
 import com.sztzjy.financial_bigdata.service.tea.ITeaCaseStepService;
 import com.sztzjy.financial_bigdata.util.ResultEntity;
 import io.swagger.annotations.Api;
@@ -31,6 +29,7 @@ import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.http.HttpStatus;
 import org.springframework.web.bind.annotation.*;
 
+import javax.servlet.http.HttpServletResponse;
 import java.util.List;
 
 import java.util.ArrayList;
@@ -54,6 +53,10 @@ public class ExerciseExperimentalTraining {
     SysCaseQuestionStepMapper caseQuestionStepMapper;
     @Autowired
     ITeaCaseStepService stepService;
+    @Autowired
+    ITeaResourceDataService resourceDataService;
+    @Autowired
+    SysResourceDataMapper resourceDataMapper;
 
     //获取案例题基础信息
     @GetMapping("getCaseInfo")
@@ -86,17 +89,17 @@ public class ExerciseExperimentalTraining {
     @PostMapping("commitCase")
     @ApiOperation("提交案例题")
     @AnonymousAccess
-    public ResultEntity getCaseStepInfo(@ApiParam("将学生答案传递到answer中") @RequestParam SysCaseQuestionStep caseQuestionStep) {
+    public ResultEntity getCaseStepInfo(@RequestParam StuCommitCaseDto commitCaseDto) {
 
         //执行记录操作
-        Boolean flag = stepService.commitCase(caseQuestionStep);
-        return new ResultEntity<>(HttpStatus.OK, "回答正确、该步骤提交成功");
-
+        Boolean flag = stepService.commitCase(commitCaseDto);
+        if (flag){
+            return new ResultEntity<>(HttpStatus.OK, "该步骤提交成功");
+        }else {
+            return new ResultEntity<>(HttpStatus.BAD_REQUEST, "该步骤重复提交");
+        }
     }
 
-    //python在线运行
-
-
     @AnonymousAccess
     @ApiOperation("实训演练页面查询")
     @PostMapping("getCourseChapter")
@@ -130,11 +133,27 @@ public class ExerciseExperimentalTraining {
         return new ResultEntity<List<SysCourseDto>>(dtoList);
     }
 
+    //数据集下载
+    @GetMapping("downloadResourceDataByCaseId")
+    @ApiOperation("数据集下载")
     @AnonymousAccess
-    @ApiOperation("点击某个章节跳转到知识测评")
-    @PostMapping("/skipKnowledge")
-    public ResultEntity<List<SysCourseDto>> skipKnowledge(@RequestParam String schoolId, @RequestParam String userId) {
-        return null;
+    public void downloadResourceDataByCaseId(@ApiParam("案例题id") @RequestParam String caseId, HttpServletResponse response) {
+        resourceDataService.downloadResourceDataByCaseId(caseId, response);
+    }
 
+    //判断案例是否有数据集
+    @GetMapping("haveResourceData")
+    @ApiOperation("判断案例是否有数据集")
+    @AnonymousAccess
+    public Boolean haveResourceData(@ApiParam("案例题id") @RequestParam String caseId){
+        SysResourceDataExample example = new SysResourceDataExample();
+        example.createCriteria().andCaseIdEqualTo(caseId);
+        List<SysResourceData> resourceDataList = resourceDataMapper.selectByExample(example);
+        if(resourceDataList!=null){
+            return true;
+        }else {
+            return false;
+        }
     }
+
 }
\ No newline at end of file
diff --git a/src/main/java/com/sztzjy/financial_bigdata/controller/stu/PythonController.java b/src/main/java/com/sztzjy/financial_bigdata/controller/stu/PythonController.java
index 5b03195..3f640ae 100644
--- a/src/main/java/com/sztzjy/financial_bigdata/controller/stu/PythonController.java
+++ b/src/main/java/com/sztzjy/financial_bigdata/controller/stu/PythonController.java
@@ -1,6 +1,9 @@
 package com.sztzjy.financial_bigdata.controller.stu;// 后端代码
 
+import com.sztzjy.financial_bigdata.annotation.AnonymousAccess;
 import com.sztzjy.financial_bigdata.util.ResultEntity;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
 import org.python.core.CompileMode;
 import org.python.core.Py;
 import org.python.core.PyCode;
@@ -12,10 +15,13 @@ import java.io.ByteArrayInputStream;
 import java.io.InputStream;
 
 @RestController
+@Api(tags = "python接口")
 @RequestMapping("/api/python")
 public class PythonController {
 
     @PostMapping("/validate")
+    @ApiOperation("代码检验")
+    @AnonymousAccess
     public ResultEntity validatePythonCode(@RequestBody String code) {
         // 对 Python 代码进行检验
         PythonInterpreter interpreter = new PythonInterpreter();
diff --git a/src/main/java/com/sztzjy/financial_bigdata/controller/stu/TheoryTestController.java b/src/main/java/com/sztzjy/financial_bigdata/controller/stu/TheoryTestController.java
index bd98c4f..2c7acf9 100644
--- a/src/main/java/com/sztzjy/financial_bigdata/controller/stu/TheoryTestController.java
+++ b/src/main/java/com/sztzjy/financial_bigdata/controller/stu/TheoryTestController.java
@@ -60,9 +60,6 @@ public class TheoryTestController {
     @AnonymousAccess
     public ResultEntity endTheoryTest(@RequestBody StuTheoryTestDto theoryTestDto) {
         int flag=theoryTestService.endTheoryTest(theoryTestDto);
-        if(theoryTestDto.getExamDuration()>120){
-            return new ResultEntity<>(HttpStatus.BAD_REQUEST, "提交试卷超时");
-        }
         if(flag==1){
             return new ResultEntity<>(HttpStatus.OK, "提交试卷成功");
         }else {
diff --git a/src/main/java/com/sztzjy/financial_bigdata/entity/StuStudentExam.java b/src/main/java/com/sztzjy/financial_bigdata/entity/StuStudentExam.java
index ee022a0..a4000ae 100644
--- a/src/main/java/com/sztzjy/financial_bigdata/entity/StuStudentExam.java
+++ b/src/main/java/com/sztzjy/financial_bigdata/entity/StuStudentExam.java
@@ -1,6 +1,7 @@
 package com.sztzjy.financial_bigdata.entity;
 
 import java.math.BigDecimal;
+import java.util.Date;
 
 import io.swagger.annotations.ApiModelProperty;
 /**
@@ -31,6 +32,12 @@ public class StuStudentExam {
     @ApiModelProperty("班级id")
     private String classId;
 
+    @ApiModelProperty("考试结束状态 true为已经交卷")
+    private String examEndStatus;
+
+    @ApiModelProperty("开始考试时间")
+    private Date startTime;
+
     public String getStudentExamId() {
         return studentExamId;
     }
@@ -86,4 +93,20 @@ public class StuStudentExam {
     public void setClassId(String classId) {
         this.classId = classId == null ? null : classId.trim();
     }
+
+    public String getExamEndStatus() {
+        return examEndStatus;
+    }
+
+    public void setExamEndStatus(String examEndStatus) {
+        this.examEndStatus = examEndStatus == null ? null : examEndStatus.trim();
+    }
+
+    public Date getStartTime() {
+        return startTime;
+    }
+
+    public void setStartTime(Date startTime) {
+        this.startTime = startTime;
+    }
 }
\ No newline at end of file
diff --git a/src/main/java/com/sztzjy/financial_bigdata/entity/StuStudentExamExample.java b/src/main/java/com/sztzjy/financial_bigdata/entity/StuStudentExamExample.java
index 0c4dbf1..97f101b 100644
--- a/src/main/java/com/sztzjy/financial_bigdata/entity/StuStudentExamExample.java
+++ b/src/main/java/com/sztzjy/financial_bigdata/entity/StuStudentExamExample.java
@@ -2,6 +2,7 @@ package com.sztzjy.financial_bigdata.entity;
 
 import java.math.BigDecimal;
 import java.util.ArrayList;
+import java.util.Date;
 import java.util.List;
 
 public class StuStudentExamExample {
@@ -564,6 +565,136 @@ public class StuStudentExamExample {
             addCriterion("class_id not between", value1, value2, "classId");
             return (Criteria) this;
         }
+
+        public Criteria andExamEndStatusIsNull() {
+            addCriterion("exam_end_status is null");
+            return (Criteria) this;
+        }
+
+        public Criteria andExamEndStatusIsNotNull() {
+            addCriterion("exam_end_status is not null");
+            return (Criteria) this;
+        }
+
+        public Criteria andExamEndStatusEqualTo(String value) {
+            addCriterion("exam_end_status =", value, "examEndStatus");
+            return (Criteria) this;
+        }
+
+        public Criteria andExamEndStatusNotEqualTo(String value) {
+            addCriterion("exam_end_status <>", value, "examEndStatus");
+            return (Criteria) this;
+        }
+
+        public Criteria andExamEndStatusGreaterThan(String value) {
+            addCriterion("exam_end_status >", value, "examEndStatus");
+            return (Criteria) this;
+        }
+
+        public Criteria andExamEndStatusGreaterThanOrEqualTo(String value) {
+            addCriterion("exam_end_status >=", value, "examEndStatus");
+            return (Criteria) this;
+        }
+
+        public Criteria andExamEndStatusLessThan(String value) {
+            addCriterion("exam_end_status <", value, "examEndStatus");
+            return (Criteria) this;
+        }
+
+        public Criteria andExamEndStatusLessThanOrEqualTo(String value) {
+            addCriterion("exam_end_status <=", value, "examEndStatus");
+            return (Criteria) this;
+        }
+
+        public Criteria andExamEndStatusLike(String value) {
+            addCriterion("exam_end_status like", value, "examEndStatus");
+            return (Criteria) this;
+        }
+
+        public Criteria andExamEndStatusNotLike(String value) {
+            addCriterion("exam_end_status not like", value, "examEndStatus");
+            return (Criteria) this;
+        }
+
+        public Criteria andExamEndStatusIn(List<String> values) {
+            addCriterion("exam_end_status in", values, "examEndStatus");
+            return (Criteria) this;
+        }
+
+        public Criteria andExamEndStatusNotIn(List<String> values) {
+            addCriterion("exam_end_status not in", values, "examEndStatus");
+            return (Criteria) this;
+        }
+
+        public Criteria andExamEndStatusBetween(String value1, String value2) {
+            addCriterion("exam_end_status between", value1, value2, "examEndStatus");
+            return (Criteria) this;
+        }
+
+        public Criteria andExamEndStatusNotBetween(String value1, String value2) {
+            addCriterion("exam_end_status not between", value1, value2, "examEndStatus");
+            return (Criteria) this;
+        }
+
+        public Criteria andStartTimeIsNull() {
+            addCriterion("start_time is null");
+            return (Criteria) this;
+        }
+
+        public Criteria andStartTimeIsNotNull() {
+            addCriterion("start_time is not null");
+            return (Criteria) this;
+        }
+
+        public Criteria andStartTimeEqualTo(Date value) {
+            addCriterion("start_time =", value, "startTime");
+            return (Criteria) this;
+        }
+
+        public Criteria andStartTimeNotEqualTo(Date value) {
+            addCriterion("start_time <>", value, "startTime");
+            return (Criteria) this;
+        }
+
+        public Criteria andStartTimeGreaterThan(Date value) {
+            addCriterion("start_time >", value, "startTime");
+            return (Criteria) this;
+        }
+
+        public Criteria andStartTimeGreaterThanOrEqualTo(Date value) {
+            addCriterion("start_time >=", value, "startTime");
+            return (Criteria) this;
+        }
+
+        public Criteria andStartTimeLessThan(Date value) {
+            addCriterion("start_time <", value, "startTime");
+            return (Criteria) this;
+        }
+
+        public Criteria andStartTimeLessThanOrEqualTo(Date value) {
+            addCriterion("start_time <=", value, "startTime");
+            return (Criteria) this;
+        }
+
+        public Criteria andStartTimeIn(List<Date> values) {
+            addCriterion("start_time in", values, "startTime");
+            return (Criteria) this;
+        }
+
+        public Criteria andStartTimeNotIn(List<Date> values) {
+            addCriterion("start_time not in", values, "startTime");
+            return (Criteria) this;
+        }
+
+        public Criteria andStartTimeBetween(Date value1, Date value2) {
+            addCriterion("start_time between", value1, value2, "startTime");
+            return (Criteria) this;
+        }
+
+        public Criteria andStartTimeNotBetween(Date value1, Date value2) {
+            addCriterion("start_time not between", value1, value2, "startTime");
+            return (Criteria) this;
+        }
     }
 
     public static class Criteria extends GeneratedCriteria {
diff --git a/src/main/java/com/sztzjy/financial_bigdata/entity/StuTrainingStepRecord.java b/src/main/java/com/sztzjy/financial_bigdata/entity/StuTrainingStepRecord.java
index 3504c54..02a57b1 100644
--- a/src/main/java/com/sztzjy/financial_bigdata/entity/StuTrainingStepRecord.java
+++ b/src/main/java/com/sztzjy/financial_bigdata/entity/StuTrainingStepRecord.java
@@ -19,6 +19,9 @@ public class StuTrainingStepRecord {
     @ApiModelProperty("案例题步骤id")
     private String caseStepId;
 
+    @ApiModelProperty("获得分数")
+    private String score;
+
     @ApiModelProperty("学生答案")
     private String stuAnswer;
 
@@ -54,6 +57,14 @@ public class StuTrainingStepRecord {
         this.caseStepId = caseStepId == null ? null : caseStepId.trim();
     }
 
+    public String getScore() {
+        return score;
+    }
+
+    public void setScore(String score) {
+        this.score = score == null ? null : score.trim();
+    }
+
     public String getStuAnswer() {
         return stuAnswer;
     }
diff --git a/src/main/java/com/sztzjy/financial_bigdata/entity/StuTrainingStepRecordExample.java b/src/main/java/com/sztzjy/financial_bigdata/entity/StuTrainingStepRecordExample.java
index 821ee14..22e9083 100644
--- a/src/main/java/com/sztzjy/financial_bigdata/entity/StuTrainingStepRecordExample.java
+++ b/src/main/java/com/sztzjy/financial_bigdata/entity/StuTrainingStepRecordExample.java
@@ -383,6 +383,76 @@ public class StuTrainingStepRecordExample {
             addCriterion("case_step_id not between", value1, value2, "caseStepId");
             return (Criteria) this;
         }
+
+        public Criteria andScoreIsNull() {
+            addCriterion("score is null");
+            return (Criteria) this;
+        }
+
+        public Criteria andScoreIsNotNull() {
+            addCriterion("score is not null");
+            return (Criteria) this;
+        }
+
+        public Criteria andScoreEqualTo(String value) {
+            addCriterion("score =", value, "score");
+            return (Criteria) this;
+        }
+
+        public Criteria andScoreNotEqualTo(String value) {
+            addCriterion("score <>", value, "score");
+            return (Criteria) this;
+        }
+
+        public Criteria andScoreGreaterThan(String value) {
+            addCriterion("score >", value, "score");
+            return (Criteria) this;
+        }
+
+        public Criteria andScoreGreaterThanOrEqualTo(String value) {
+            addCriterion("score >=", value, "score");
+            return (Criteria) this;
+        }
+
+        public Criteria andScoreLessThan(String value) {
+            addCriterion("score <", value, "score");
+            return (Criteria) this;
+        }
+
+        public Criteria andScoreLessThanOrEqualTo(String value) {
+            addCriterion("score <=", value, "score");
+            return (Criteria) this;
+        }
+
+        public Criteria andScoreLike(String value) {
+            addCriterion("score like", value, "score");
+            return (Criteria) this;
+        }
+
+        public Criteria andScoreNotLike(String value) {
+            addCriterion("score not like", value, "score");
+            return (Criteria) this;
+        }
+
+        public Criteria andScoreIn(List<String> values) {
+            addCriterion("score in", values, "score");
+            return (Criteria) this;
+        }
+
+        public Criteria andScoreNotIn(List<String> values) {
+            addCriterion("score not in", values, "score");
+            return (Criteria) this;
+        }
+
+        public Criteria andScoreBetween(String value1, String value2) {
+            addCriterion("score between", value1, value2, "score");
+            return (Criteria) this;
+        }
+
+        public Criteria andScoreNotBetween(String value1, String value2) {
+            addCriterion("score not between", value1, value2, "score");
+            return (Criteria) this;
+        }
     }
 
     public static class Criteria extends GeneratedCriteria {
diff --git a/src/main/java/com/sztzjy/financial_bigdata/service/stu/impl/ExamServiceImpl.java b/src/main/java/com/sztzjy/financial_bigdata/service/stu/impl/ExamServiceImpl.java
new file mode 100644
index 0000000..4fe56b5
--- /dev/null
+++ b/src/main/java/com/sztzjy/financial_bigdata/service/stu/impl/ExamServiceImpl.java
@@ -0,0 +1,57 @@
+package com.sztzjy.financial_bigdata.service.stu.impl;
+
+import com.sztzjy.financial_bigdata.entity.SysObjectiveQuestion;
+import com.sztzjy.financial_bigdata.entity.TeaExamManageWithBLOBs;
+import com.sztzjy.financial_bigdata.entity.stu_dto.StuTheoryTestDto;
+import com.sztzjy.financial_bigdata.mapper.SysObjectiveQuestionMapper;
+import com.sztzjy.financial_bigdata.mapper.TeaExamManageMapper;
+import com.sztzjy.financial_bigdata.service.stu.IExamService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+
+@Service
+public class ExamServiceImpl implements IExamService {
+    @Autowired
+    TeaExamManageMapper examManageMapper;
+    @Autowired
+    SysObjectiveQuestionMapper objectiveQuestionMapper;
+    //如果学生考试表查询不到 则新增一条数据
+    //根据examManageId 查询该考试的题目idlist 再通过idlist查询题目信息进行返回
+    //先判断是否考试过 如果结束考试状态不为true 判断考试时间是否超过答题时间  超过时间则不允许答题、并回显考试内容\没超过时间 则重新答题
+    //              如果结束考试状态为true,则直接回显题目和考生的答题记录
+    @Override
+    public List<SysObjectiveQuestion> basicKnowledge(String examManageId, String userId) {
+        //查询
+
+        TeaExamManageWithBLOBs teaExamManageWithBLOBs = examManageMapper.selectByPrimaryKey(examManageId);
+        String singleIds = teaExamManageWithBLOBs.getSingleIdlist();
+        String manyIds = teaExamManageWithBLOBs.getManyIdlist();
+        String judgeIds = teaExamManageWithBLOBs.getJudgeIdlist();
+        List<String> singleIdList = Arrays.asList(singleIds.substring(1, singleIds.length() - 1).split(", "));
+        List<String> manyIdList = Arrays.asList(manyIds.substring(1, manyIds.length() - 1).split(", "));
+        List<String> judgeIdList = Arrays.asList(judgeIds.substring(1, judgeIds.length() - 1).split(", "));
+        List<SysObjectiveQuestion> objectiveQuestionList=new ArrayList<>();
+        for (int i = 0; i < singleIdList.size(); i++) {
+            SysObjectiveQuestion objectiveQuestion = objectiveQuestionMapper.selectByPrimaryKey(singleIdList.get(i));
+            objectiveQuestionList.add(objectiveQuestion);
+        }
+        for (int i = 0; i < manyIdList.size(); i++) {
+            SysObjectiveQuestion objectiveQuestion = objectiveQuestionMapper.selectByPrimaryKey(manyIdList.get(i));
+            objectiveQuestionList.add(objectiveQuestion);
+        }
+        for (int i = 0; i < judgeIdList.size(); i++) {
+            SysObjectiveQuestion objectiveQuestion = objectiveQuestionMapper.selectByPrimaryKey(judgeIdList.get(i));
+            objectiveQuestionList.add(objectiveQuestion);
+        }
+        return objectiveQuestionList;
+    }
+
+    @Override
+    public int commitExam(StuTheoryTestDto theoryTestDto) {
+        return 0;
+    }
+}
diff --git a/src/main/java/com/sztzjy/financial_bigdata/service/tea/ITeaCaseStepService.java b/src/main/java/com/sztzjy/financial_bigdata/service/tea/ITeaCaseStepService.java
index 6775b9b..e1fa648 100644
--- a/src/main/java/com/sztzjy/financial_bigdata/service/tea/ITeaCaseStepService.java
+++ b/src/main/java/com/sztzjy/financial_bigdata/service/tea/ITeaCaseStepService.java
@@ -1,6 +1,7 @@
 package com.sztzjy.financial_bigdata.service.tea;
 
 import com.sztzjy.financial_bigdata.entity.SysCaseQuestionStep;
+import com.sztzjy.financial_bigdata.entity.stu_dto.StuCommitCaseDto;
 
 import java.util.List;
 
@@ -15,5 +16,5 @@ public interface ITeaCaseStepService {
 
     SysCaseQuestionStep selectCaseStepDetails(String caseStepId);
 
-    Boolean commitCase(SysCaseQuestionStep caseQuestionStep);
+    Boolean commitCase(StuCommitCaseDto commitCaseDto);
 }
diff --git a/src/main/java/com/sztzjy/financial_bigdata/service/tea/ITeaResourceDataService.java b/src/main/java/com/sztzjy/financial_bigdata/service/tea/ITeaResourceDataService.java
index 68163d7..57925c9 100644
--- a/src/main/java/com/sztzjy/financial_bigdata/service/tea/ITeaResourceDataService.java
+++ b/src/main/java/com/sztzjy/financial_bigdata/service/tea/ITeaResourceDataService.java
@@ -14,4 +14,6 @@ public interface ITeaResourceDataService {
     Boolean deleteResourceData(String schoolId, String resourceDataId);
 
     void downloadResourceData(String resourceDataId, HttpServletResponse response);
+
+    void downloadResourceDataByCaseId(String caseId, HttpServletResponse response);
 }
diff --git a/src/main/java/com/sztzjy/financial_bigdata/service/tea/impl/TeaCaseStepServiceImpl.java b/src/main/java/com/sztzjy/financial_bigdata/service/tea/impl/TeaCaseStepServiceImpl.java
index e5afcd3..7f40683 100644
--- a/src/main/java/com/sztzjy/financial_bigdata/service/tea/impl/TeaCaseStepServiceImpl.java
+++ b/src/main/java/com/sztzjy/financial_bigdata/service/tea/impl/TeaCaseStepServiceImpl.java
@@ -1,15 +1,18 @@
 package com.sztzjy.financial_bigdata.service.tea.impl;
 
 import com.sztzjy.financial_bigdata.config.Constant;
-import com.sztzjy.financial_bigdata.entity.SysCaseQuestion;
-import com.sztzjy.financial_bigdata.entity.SysCaseQuestionStep;
-import com.sztzjy.financial_bigdata.entity.SysCaseQuestionStepExample;
+import com.sztzjy.financial_bigdata.entity.*;
+import com.sztzjy.financial_bigdata.entity.stu_dto.StuCommitCaseDto;
+import com.sztzjy.financial_bigdata.mapper.StuTrainingMapper;
+import com.sztzjy.financial_bigdata.mapper.StuTrainingStepRecordMapper;
 import com.sztzjy.financial_bigdata.mapper.SysCaseQuestionMapper;
 import com.sztzjy.financial_bigdata.mapper.SysCaseQuestionStepMapper;
 import com.sztzjy.financial_bigdata.service.tea.ITeaCaseStepService;
+import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
+import java.math.BigDecimal;
 import java.util.List;
 import java.util.UUID;
 
@@ -19,6 +22,10 @@ public class TeaCaseStepServiceImpl implements ITeaCaseStepService {
     SysCaseQuestionStepMapper caseQuestionStepMapper;
     @Autowired
     SysCaseQuestionMapper caseQuestionMapper;
+    @Autowired
+    StuTrainingStepRecordMapper trainingStepRecordMapper;
+    @Autowired
+    StuTrainingMapper trainingMapper;
 
     @Override
     public Boolean insertCase(SysCaseQuestionStep caseQuestionStep,String schoolId) {
@@ -77,18 +84,70 @@ public class TeaCaseStepServiceImpl implements ITeaCaseStepService {
         return sysCaseQuestionStep;
     }
 
-    //************
     @Override
-    public Boolean commitCase(SysCaseQuestionStep caseQuestionStep) {
-//        SysCaseQuestionStep dbCaseQuestionStep = selectCaseStepDetails(caseQuestionStep.getCaseStepId());
-//        if(dbCaseQuestionStep.getAnswer().equals(caseQuestionStep.getAnswer())){
-//            //答案正确  将答案存储到学生实训表中,并设置得分,更新实验实训得分 如果所有步骤的案例题分数都已存在、修改实验实训完成状态并修改进度
-//            Integer sort = caseQuestionStep.getSort();
-//            caseQuestionStep.getAnswer()
-//        }else {
-//
-//        }
-        return null;
+    public Boolean commitCase(StuCommitCaseDto commitCaseDto) {
+        //先判断该步骤是否上传过
+        StuTrainingStepRecordExample example = new StuTrainingStepRecordExample();
+        example.createCriteria().andUserIdEqualTo(commitCaseDto.getUserId()).andCaseStepIdEqualTo(commitCaseDto.getCaseStepId());
+        List<StuTrainingStepRecord> stuTrainingStepRecords = trainingStepRecordMapper.selectByExample(example);
+        if(stuTrainingStepRecords==null){  //未答过该步骤题目 新增数据到stepRecord表中
+            SysCaseQuestionStep dbCaseQuestionStep = selectCaseStepDetails(commitCaseDto.getCaseStepId());
+            StuTrainingStepRecord stepRecord = new StuTrainingStepRecord();
+            stepRecord.setRecordId(String.valueOf(UUID.randomUUID()));
+            stepRecord.setUserId(commitCaseDto.getUserId());
+            stepRecord.setCaseId(commitCaseDto.getCaseId());
+            stepRecord.setCaseStepId(commitCaseDto.getCaseStepId());
+            stepRecord.setStuAnswer(commitCaseDto.getStuAnswer());
+            SysCaseQuestionStep sysCaseQuestionStep = caseQuestionStepMapper.selectByPrimaryKey(commitCaseDto.getCaseStepId());
+            if(dbCaseQuestionStep.getAnswer().equals(commitCaseDto.getStuAnswer())){
+                //答案正确  记录到案例步骤记录表中
+                stepRecord.setScore(String.valueOf(sysCaseQuestionStep.getScore()));
+
+                //再修改学生实训表中的部分参数  先获取学生实训表中的数据
+                StuTrainingWithBLOBs training = trainingMapper.selectByPrimaryKey(commitCaseDto.getStuTrainingId());
+                //如果案例题学生的实验实训完成情况=0 则实训进度+1否则 实训进度不加 并累加案例题学生得分 修改实验实训完成状态
+                if(training.getExpTrainingCompleteStatus()==null){
+                    if(training.getProgress()==null){
+                        training.setProgress(BigDecimal.ONE);
+                    }else {
+                        training.setProgress(training.getProgress().add(BigDecimal.valueOf(1)));
+                    }
 
+                    training.setExpTrainingCompleteStatus(1);
+                }
+                if(training.getCaseStuScore()==null){
+                    training.setCaseStuScore(sysCaseQuestionStep.getScore());
+                }else {
+                    training.setCaseStuScore(training.getCaseStuScore().add(sysCaseQuestionStep.getScore()));
+                }
+                trainingMapper.updateByPrimaryKeyWithBLOBs(training);
+            }else { //回答错误 记录到案例步骤记录表中
+                stepRecord.setScore("0");
+                //再修改学生实训表中的部分参数  先获取学生实训表中的数据
+                StuTrainingWithBLOBs training = trainingMapper.selectByPrimaryKey(commitCaseDto.getStuTrainingId());
+                //如果案例题学生的实验实训完成情况=0 则实训进度+1否则 实训进度不加 并累加案例题学生得分 修改实验实训完成状态
+                if(training.getExpTrainingCompleteStatus()==null){
+                    if(training.getProgress()==null){
+                        training.setProgress(BigDecimal.ONE);
+                    }else {
+                        training.setProgress(training.getProgress().add(BigDecimal.valueOf(1)));
+                    }
+                    training.setExpTrainingCompleteStatus(1);
+                }
+                if(training.getCaseStuScore()==null){
+                    training.setCaseStuScore(sysCaseQuestionStep.getScore());
+                }else {
+                    training.setCaseStuScore(training.getCaseStuScore().add(sysCaseQuestionStep.getScore()));
+                }
+                trainingMapper.updateByPrimaryKeyWithBLOBs(training);
+            }
+            trainingStepRecordMapper.insert(stepRecord);
+            return true;
+        }else {  //回答过该题
+            StuTrainingStepRecord stepRecord = stuTrainingStepRecords.get(0);
+            stepRecord.setStuAnswer(commitCaseDto.getStuAnswer());
+            trainingStepRecordMapper.updateByPrimaryKeyWithBLOBs(stepRecord);
+            return false;
+        }
     }
 }
diff --git a/src/main/java/com/sztzjy/financial_bigdata/service/tea/impl/TeaResourceDataServiceImpl.java b/src/main/java/com/sztzjy/financial_bigdata/service/tea/impl/TeaResourceDataServiceImpl.java
index a4c657a..9d0f845 100644
--- a/src/main/java/com/sztzjy/financial_bigdata/service/tea/impl/TeaResourceDataServiceImpl.java
+++ b/src/main/java/com/sztzjy/financial_bigdata/service/tea/impl/TeaResourceDataServiceImpl.java
@@ -73,4 +73,17 @@ public class TeaResourceDataServiceImpl implements ITeaResourceDataService {
         SysResourceData sysResourceData = resourceDataMapper.selectByPrimaryKey(resourceDataId);
         fileUtil.download(response, sysResourceData.getResourceName(), sysResourceData.getUrl());
     }
+
+    @Override
+    public void downloadResourceDataByCaseId(String caseId, HttpServletResponse response) {
+        SysResourceDataExample example = new SysResourceDataExample();
+        example.createCriteria().andCaseIdEqualTo(caseId);
+        List<SysResourceData> resourceDataList = resourceDataMapper.selectByExample(example);
+        if(resourceDataList!=null){
+            for (int i = 0; i < resourceDataList.size(); i++) {
+                SysResourceData sysResourceData = resourceDataList.get(i);
+                fileUtil.download(response,sysResourceData.getResourceName(), sysResourceData.getUrl());
+            }
+        }
+    }
 }
diff --git a/src/main/resources/mapper/StuStudentExamMapper.xml b/src/main/resources/mapper/StuStudentExamMapper.xml
index c165448..b01b577 100644
--- a/src/main/resources/mapper/StuStudentExamMapper.xml
+++ b/src/main/resources/mapper/StuStudentExamMapper.xml
@@ -9,6 +9,8 @@
     <result column="case_score" jdbcType="DECIMAL" property="caseScore" />
     <result column="total_score" jdbcType="DECIMAL" property="totalScore" />
     <result column="class_id" jdbcType="VARCHAR" property="classId" />
+    <result column="exam_end_status" jdbcType="VARCHAR" property="examEndStatus" />
+    <result column="start_time" jdbcType="TIMESTAMP" property="startTime" />
   </resultMap>
   <resultMap extends="BaseResultMap" id="ResultMapWithBLOBs" type="com.sztzjy.financial_bigdata.entity.StuStudentExamWithBLOBs">
     <result column="single_stu_answer_ids" jdbcType="LONGVARCHAR" property="singleStuAnswerIds" />
@@ -75,7 +77,7 @@
   </sql>
   <sql id="Base_Column_List">
     student_exam_id, exam_manage_id, userid, Objective_score, case_score, total_score, 
-    class_id
+    class_id, exam_end_status, start_time
   </sql>
   <sql id="Blob_Column_List">
     single_stu_answer_ids, many_stu_answer_ids, judge_stu_answer_ids
@@ -131,11 +133,13 @@
   <insert id="insert" parameterType="com.sztzjy.financial_bigdata.entity.StuStudentExamWithBLOBs">
     insert into stu_student_exam (student_exam_id, exam_manage_id, userid, 
       Objective_score, case_score, total_score, 
-      class_id, single_stu_answer_ids, many_stu_answer_ids, 
+      class_id, exam_end_status, start_time, 
+      single_stu_answer_ids, many_stu_answer_ids, 
       judge_stu_answer_ids)
     values (#{studentExamId,jdbcType=VARCHAR}, #{examManageId,jdbcType=VARCHAR}, #{userid,jdbcType=VARCHAR}, 
       #{objectiveScore,jdbcType=DECIMAL}, #{caseScore,jdbcType=DECIMAL}, #{totalScore,jdbcType=DECIMAL}, 
-      #{classId,jdbcType=VARCHAR}, #{singleStuAnswerIds,jdbcType=LONGVARCHAR}, #{manyStuAnswerIds,jdbcType=LONGVARCHAR}, 
+      #{classId,jdbcType=VARCHAR}, #{examEndStatus,jdbcType=VARCHAR}, #{startTime,jdbcType=TIMESTAMP}, 
+      #{singleStuAnswerIds,jdbcType=LONGVARCHAR}, #{manyStuAnswerIds,jdbcType=LONGVARCHAR}, 
       #{judgeStuAnswerIds,jdbcType=LONGVARCHAR})
   </insert>
   <insert id="insertSelective" parameterType="com.sztzjy.financial_bigdata.entity.StuStudentExamWithBLOBs">
@@ -162,6 +166,12 @@
       <if test="classId != null">
         class_id,
       </if>
+      <if test="examEndStatus != null">
+        exam_end_status,
+      </if>
+      <if test="startTime != null">
+        start_time,
+      </if>
       <if test="singleStuAnswerIds != null">
         single_stu_answer_ids,
       </if>
@@ -194,6 +204,12 @@
       <if test="classId != null">
         #{classId,jdbcType=VARCHAR},
       </if>
+      <if test="examEndStatus != null">
+        #{examEndStatus,jdbcType=VARCHAR},
+      </if>
+      <if test="startTime != null">
+        #{startTime,jdbcType=TIMESTAMP},
+      </if>
       <if test="singleStuAnswerIds != null">
         #{singleStuAnswerIds,jdbcType=LONGVARCHAR},
       </if>
@@ -235,6 +251,12 @@
       <if test="record.classId != null">
         class_id = #{record.classId,jdbcType=VARCHAR},
       </if>
+      <if test="record.examEndStatus != null">
+        exam_end_status = #{record.examEndStatus,jdbcType=VARCHAR},
+      </if>
+      <if test="record.startTime != null">
+        start_time = #{record.startTime,jdbcType=TIMESTAMP},
+      </if>
       <if test="record.singleStuAnswerIds != null">
         single_stu_answer_ids = #{record.singleStuAnswerIds,jdbcType=LONGVARCHAR},
       </if>
@@ -258,6 +280,8 @@
       case_score = #{record.caseScore,jdbcType=DECIMAL},
       total_score = #{record.totalScore,jdbcType=DECIMAL},
       class_id = #{record.classId,jdbcType=VARCHAR},
+      exam_end_status = #{record.examEndStatus,jdbcType=VARCHAR},
+      start_time = #{record.startTime,jdbcType=TIMESTAMP},
       single_stu_answer_ids = #{record.singleStuAnswerIds,jdbcType=LONGVARCHAR},
       many_stu_answer_ids = #{record.manyStuAnswerIds,jdbcType=LONGVARCHAR},
       judge_stu_answer_ids = #{record.judgeStuAnswerIds,jdbcType=LONGVARCHAR}
@@ -273,7 +297,9 @@
       Objective_score = #{record.objectiveScore,jdbcType=DECIMAL},
       case_score = #{record.caseScore,jdbcType=DECIMAL},
       total_score = #{record.totalScore,jdbcType=DECIMAL},
-      class_id = #{record.classId,jdbcType=VARCHAR}
+      class_id = #{record.classId,jdbcType=VARCHAR},
+      exam_end_status = #{record.examEndStatus,jdbcType=VARCHAR},
+      start_time = #{record.startTime,jdbcType=TIMESTAMP}
     <if test="_parameter != null">
       <include refid="Update_By_Example_Where_Clause" />
     </if>
@@ -299,6 +325,12 @@
       <if test="classId != null">
         class_id = #{classId,jdbcType=VARCHAR},
       </if>
+      <if test="examEndStatus != null">
+        exam_end_status = #{examEndStatus,jdbcType=VARCHAR},
+      </if>
+      <if test="startTime != null">
+        start_time = #{startTime,jdbcType=TIMESTAMP},
+      </if>
       <if test="singleStuAnswerIds != null">
         single_stu_answer_ids = #{singleStuAnswerIds,jdbcType=LONGVARCHAR},
       </if>
@@ -319,6 +351,8 @@
       case_score = #{caseScore,jdbcType=DECIMAL},
       total_score = #{totalScore,jdbcType=DECIMAL},
       class_id = #{classId,jdbcType=VARCHAR},
+      exam_end_status = #{examEndStatus,jdbcType=VARCHAR},
+      start_time = #{startTime,jdbcType=TIMESTAMP},
       single_stu_answer_ids = #{singleStuAnswerIds,jdbcType=LONGVARCHAR},
       many_stu_answer_ids = #{manyStuAnswerIds,jdbcType=LONGVARCHAR},
       judge_stu_answer_ids = #{judgeStuAnswerIds,jdbcType=LONGVARCHAR}
@@ -331,7 +365,9 @@
       Objective_score = #{objectiveScore,jdbcType=DECIMAL},
       case_score = #{caseScore,jdbcType=DECIMAL},
       total_score = #{totalScore,jdbcType=DECIMAL},
-      class_id = #{classId,jdbcType=VARCHAR}
+      class_id = #{classId,jdbcType=VARCHAR},
+      exam_end_status = #{examEndStatus,jdbcType=VARCHAR},
+      start_time = #{startTime,jdbcType=TIMESTAMP}
     where student_exam_id = #{studentExamId,jdbcType=VARCHAR}
   </update>
 </mapper>
\ No newline at end of file
diff --git a/src/main/resources/mapper/StuTrainingStepRecordMapper.xml b/src/main/resources/mapper/StuTrainingStepRecordMapper.xml
index f282450..a3be83f 100644
--- a/src/main/resources/mapper/StuTrainingStepRecordMapper.xml
+++ b/src/main/resources/mapper/StuTrainingStepRecordMapper.xml
@@ -6,6 +6,7 @@
     <result column="user_id" jdbcType="VARCHAR" property="userId" />
     <result column="case_id" jdbcType="VARCHAR" property="caseId" />
     <result column="case_step_id" jdbcType="VARCHAR" property="caseStepId" />
+    <result column="score" jdbcType="VARCHAR" property="score" />
   </resultMap>
   <resultMap extends="BaseResultMap" id="ResultMapWithBLOBs" type="com.sztzjy.financial_bigdata.entity.StuTrainingStepRecord">
     <result column="stu_answer" jdbcType="LONGVARCHAR" property="stuAnswer" />
@@ -69,7 +70,7 @@
     </where>
   </sql>
   <sql id="Base_Column_List">
-    record_id, user_id, case_id, case_step_id
+    record_id, user_id, case_id, case_step_id, score
   </sql>
   <sql id="Blob_Column_List">
     stu_answer
@@ -124,9 +125,11 @@
   </delete>
   <insert id="insert" parameterType="com.sztzjy.financial_bigdata.entity.StuTrainingStepRecord">
     insert into stu_training_step_record (record_id, user_id, case_id, 
-      case_step_id, stu_answer)
+      case_step_id, score, stu_answer
+      )
     values (#{recordId,jdbcType=VARCHAR}, #{userId,jdbcType=VARCHAR}, #{caseId,jdbcType=VARCHAR}, 
-      #{caseStepId,jdbcType=VARCHAR}, #{stuAnswer,jdbcType=LONGVARCHAR})
+      #{caseStepId,jdbcType=VARCHAR}, #{score,jdbcType=VARCHAR}, #{stuAnswer,jdbcType=LONGVARCHAR}
+      )
   </insert>
   <insert id="insertSelective" parameterType="com.sztzjy.financial_bigdata.entity.StuTrainingStepRecord">
     insert into stu_training_step_record
@@ -143,6 +146,9 @@
       <if test="caseStepId != null">
         case_step_id,
       </if>
+      <if test="score != null">
+        score,
+      </if>
       <if test="stuAnswer != null">
         stu_answer,
       </if>
@@ -160,6 +166,9 @@
       <if test="caseStepId != null">
         #{caseStepId,jdbcType=VARCHAR},
       </if>
+      <if test="score != null">
+        #{score,jdbcType=VARCHAR},
+      </if>
       <if test="stuAnswer != null">
         #{stuAnswer,jdbcType=LONGVARCHAR},
       </if>
@@ -186,6 +195,9 @@
       <if test="record.caseStepId != null">
         case_step_id = #{record.caseStepId,jdbcType=VARCHAR},
       </if>
+      <if test="record.score != null">
+        score = #{record.score,jdbcType=VARCHAR},
+      </if>
       <if test="record.stuAnswer != null">
         stu_answer = #{record.stuAnswer,jdbcType=LONGVARCHAR},
       </if>
@@ -200,6 +212,7 @@
       user_id = #{record.userId,jdbcType=VARCHAR},
       case_id = #{record.caseId,jdbcType=VARCHAR},
       case_step_id = #{record.caseStepId,jdbcType=VARCHAR},
+      score = #{record.score,jdbcType=VARCHAR},
       stu_answer = #{record.stuAnswer,jdbcType=LONGVARCHAR}
     <if test="_parameter != null">
       <include refid="Update_By_Example_Where_Clause" />
@@ -210,7 +223,8 @@
     set record_id = #{record.recordId,jdbcType=VARCHAR},
       user_id = #{record.userId,jdbcType=VARCHAR},
       case_id = #{record.caseId,jdbcType=VARCHAR},
-      case_step_id = #{record.caseStepId,jdbcType=VARCHAR}
+      case_step_id = #{record.caseStepId,jdbcType=VARCHAR},
+      score = #{record.score,jdbcType=VARCHAR}
     <if test="_parameter != null">
       <include refid="Update_By_Example_Where_Clause" />
     </if>
@@ -227,6 +241,9 @@
       <if test="caseStepId != null">
         case_step_id = #{caseStepId,jdbcType=VARCHAR},
       </if>
+      <if test="score != null">
+        score = #{score,jdbcType=VARCHAR},
+      </if>
       <if test="stuAnswer != null">
         stu_answer = #{stuAnswer,jdbcType=LONGVARCHAR},
       </if>
@@ -238,6 +255,7 @@
     set user_id = #{userId,jdbcType=VARCHAR},
       case_id = #{caseId,jdbcType=VARCHAR},
       case_step_id = #{caseStepId,jdbcType=VARCHAR},
+      score = #{score,jdbcType=VARCHAR},
       stu_answer = #{stuAnswer,jdbcType=LONGVARCHAR}
     where record_id = #{recordId,jdbcType=VARCHAR}
   </update>
@@ -245,7 +263,8 @@
     update stu_training_step_record
     set user_id = #{userId,jdbcType=VARCHAR},
       case_id = #{caseId,jdbcType=VARCHAR},
-      case_step_id = #{caseStepId,jdbcType=VARCHAR}
+      case_step_id = #{caseStepId,jdbcType=VARCHAR},
+      score = #{score,jdbcType=VARCHAR}
     where record_id = #{recordId,jdbcType=VARCHAR}
   </update>
 </mapper>
\ No newline at end of file