xiangpei
2024-06-14 9e3d47a16aa7b4ed4edbcc1a09ac5949aa8f8ff6
定时保存临时试卷
2个文件已修改
1 文件已重命名
54 ■■■■■ 已修改文件
src/main/java/com/ycl/jxkg/controller/student/StudentExamController.java 19 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ycl/jxkg/service/ExamService.java 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ycl/jxkg/service/impl/ExamServiceImpl.java 25 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ycl/jxkg/controller/student/StudentExamController.java
File was renamed from src/main/java/com/ycl/jxkg/controller/student/ExamController.java
@@ -17,13 +17,30 @@
@RestController
@RequiredArgsConstructor
@RequestMapping(value = "/api/student/exampaper/answer")
public class ExamController {
public class StudentExamController {
    private final ExamService examService;
    /**
     * 主动提交试卷
     *
     * @param submitData
     * @return
     */
    @PostMapping("/exam/submit")
    public Result examSubmit(@RequestBody @Validated ExamSubmitVO submitData) {
        return examService.examSubmit(submitData);
    }
    /**
     * 定时临时保存试卷
     *
     * @param submitData
     * @return
     */
    @PostMapping("/exam/timing")
    public Result timingExamSubmit(@RequestBody @Validated ExamSubmitVO submitData) {
        return examService.timingSubmit(submitData);
    }
}
src/main/java/com/ycl/jxkg/service/ExamService.java
@@ -66,10 +66,18 @@
    Result all();
    /**
     * 考试提交
     * 主动提交试卷
     *
     * @param submitData
     * @return
     */
    Result examSubmit(ExamSubmitVO submitData);
    /**
     * 定时保存试卷,防止考试崩溃
     *
     * @param submitData
     * @return
     */
    Result timingSubmit(ExamSubmitVO submitData);
}
src/main/java/com/ycl/jxkg/service/impl/ExamServiceImpl.java
@@ -174,24 +174,45 @@
        });
        // 阅卷后才往exam_paper_answer保存考试成绩、以及保存到exam_paper_customer_answer
        // 现在只需要保存到一张临时表
        // 该接口是主动提交,所以状态都设置为完成,以便后续老师阅卷
        saveTempExam(submitData, ExamSubmitTempStatusEnum.FINISH);
        return Result.ok();
    }
    @Override
    public Result timingSubmit(ExamSubmitVO submitData) {
        saveTempExam(submitData, ExamSubmitTempStatusEnum.TEMP);
        return Result.ok();
    }
    /**
     * 保存临时试卷
     *
     * @param submitData  前端传递的试卷数据
     * @param status  试卷的状态
     */
    public void saveTempExam(ExamSubmitVO submitData, ExamSubmitTempStatusEnum status) {
        ExamSubmitTemp one = new LambdaQueryChainWrapper<>(examSubmitTempMapper)
                .eq(ExamSubmitTemp::getExamId, submitData.getExamId())
                .eq(ExamSubmitTemp::getUserId, webContext.getCurrentUser().getId())
                .one();
        if (Objects.nonNull(one)) {
            if (ExamSubmitTempStatusEnum.FINISH.equals(one.getStatus())) {
                return;
            }
            one.setDoTime(submitData.getDoTime());
            one.setExamSubmit(JSON.toJSONString(submitData.getQuestionList()));
            one.setCreateTime(new Date());
            one.setStatus(status);
            examSubmitTempMapper.updateById(one);
        } else {
            ExamSubmitTemp examSubmitTemp = new ExamSubmitTemp();
            examSubmitTemp.setExamId(submitData.getExamId());
            examSubmitTemp.setDoTime(submitData.getDoTime());
            examSubmitTemp.setStatus(ExamSubmitTempStatusEnum.FINISH);
            examSubmitTemp.setStatus(status);
            examSubmitTemp.setUserId(webContext.getCurrentUser().getId());
            examSubmitTemp.setExamSubmit(JSON.toJSONString(submitData.getQuestionList()));
            examSubmitTempMapper.insert(examSubmitTemp);
        }
        return Result.ok();
    }
}