From ca2092bd82963aa773882193477ef2a4cf723a53 Mon Sep 17 00:00:00 2001 From: luotaiqian <1147642922@qq.com> Date: Tue, 25 Aug 2026 11:48:48 +0800 Subject: [PATCH] user paper exam --- .../cedu/controller/PaperExamController.java | 2 +- .../qinan/cedu/model/dto/SubmitExamDTO.java | 9 +- .../service/impl/PaperExamServiceImpl.java | 85 +++++++------------ 3 files changed, 39 insertions(+), 57 deletions(-) diff --git a/safety-cedu-service/src/main/java/org/qinan/cedu/controller/PaperExamController.java b/safety-cedu-service/src/main/java/org/qinan/cedu/controller/PaperExamController.java index f51f2aff..0fac3fc7 100644 --- a/safety-cedu-service/src/main/java/org/qinan/cedu/controller/PaperExamController.java +++ b/safety-cedu-service/src/main/java/org/qinan/cedu/controller/PaperExamController.java @@ -52,7 +52,7 @@ public class PaperExamController { } /** - * 交卷:汇总各试题作答得分,更新考试成绩、是否通过并结束考试 + * 交卷:汇总各试题作答得分,更新考试成绩、是否通过并结束考试(携带班级id时保存班级学员考试记录) */ @ApiOperation("交卷") @PostMapping("/submitExam") diff --git a/safety-cedu-service/src/main/java/org/qinan/cedu/model/dto/SubmitExamDTO.java b/safety-cedu-service/src/main/java/org/qinan/cedu/model/dto/SubmitExamDTO.java index bb5a63f8..b8ce227e 100644 --- a/safety-cedu-service/src/main/java/org/qinan/cedu/model/dto/SubmitExamDTO.java +++ b/safety-cedu-service/src/main/java/org/qinan/cedu/model/dto/SubmitExamDTO.java @@ -13,7 +13,10 @@ import javax.validation.constraints.NotNull; @ApiModel(value = "SubmitExamDTO", description = "考试交卷入参") public class SubmitExamDTO { - @ApiModelProperty(value = "试卷id", required = true) - @NotNull(message = "试卷id不能为空") - private Long paperId; + @ApiModelProperty(value = "考试试卷id", required = true) + @NotNull(message = "考试试卷id不能为空") + private Long paperExamId; + + @ApiModelProperty("班级id(非空时保存班级学员考试记录)") + private Long classId; } diff --git a/safety-cedu-service/src/main/java/org/qinan/cedu/service/impl/PaperExamServiceImpl.java b/safety-cedu-service/src/main/java/org/qinan/cedu/service/impl/PaperExamServiceImpl.java index de2a25c9..bf8e4720 100644 --- a/safety-cedu-service/src/main/java/org/qinan/cedu/service/impl/PaperExamServiceImpl.java +++ b/safety-cedu-service/src/main/java/org/qinan/cedu/service/impl/PaperExamServiceImpl.java @@ -1,5 +1,6 @@ package org.qinan.cedu.service.impl; +import cn.hutool.extra.spring.SpringUtil; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; @@ -10,14 +11,17 @@ import org.qinan.cedu.convertor.PaperExamQuestionUserConvertor; import org.qinan.cedu.enums.AnswerStatusEnum; import org.qinan.cedu.enums.DeleteEnum; import org.qinan.cedu.enums.PaperExamStatusEnum; -import org.qinan.cedu.mapper.*; +import org.qinan.cedu.mapper.PaperExamMapper; +import org.qinan.cedu.mapper.PaperExamQuestionUserMapper; +import org.qinan.cedu.mapper.PaperMapper; +import org.qinan.cedu.mapper.QuestionMapper; import org.qinan.cedu.model.dto.*; -import org.qinan.cedu.model.entity.*; -import org.qinan.cedu.model.vo.PaperExamInfoVO; -import org.qinan.cedu.model.vo.PaperExamQuestionStatVO; -import org.qinan.cedu.model.vo.PaperExamVO; -import org.qinan.cedu.model.vo.StartExamQuestionVO; -import org.qinan.cedu.model.vo.StartExamVO; +import org.qinan.cedu.model.entity.PaperDO; +import org.qinan.cedu.model.entity.PaperExamDO; +import org.qinan.cedu.model.entity.PaperExamQuestionUserDO; +import org.qinan.cedu.model.entity.QuestionDO; +import org.qinan.cedu.model.vo.*; +import org.qinan.cedu.service.ClassStudentExamRecordService; import org.qinan.cedu.service.PaperExamQuestionUserService; import org.qinan.cedu.service.PaperExamService; import org.qinan.cedu.service.PaperService; @@ -56,7 +60,7 @@ public class PaperExamServiceImpl extends ServiceImpl() - .eq(ClassStudentExamRecordDO::getPaperExamId, paperExam.getId()) - .eq(ClassStudentExamRecordDO::getDeleteEnum, DeleteEnum.FALSE.getCode()) - .orderByDesc(ClassStudentExamRecordDO::getId) - .last("limit 1")); - if (examRecord == null) { - return; - } // 一条统计SQL取总题数与答对题数,错误题数=总题数-答对题数(未作答按错误计),正确率=答对/总数*100 PaperExamQuestionStatVO stat = paperExamQuestionUserMapper.countTotalAndCorrect(paperExam.getId()); long total = stat.getTotal(); long correct = stat.getCorrect(); - examRecord.setScore(examScore); - examRecord.setCorrectCount((int) correct); - examRecord.setPassed(paperExam.getPassed()); - examRecord.setWrongCount((int) (total - correct)); - examRecord.setAccuracy(total == 0 ? BigDecimal.ZERO + ClassStudentExamRecordDTO recordDTO = new ClassStudentExamRecordDTO(); + recordDTO.setStudentId(paperExam.getUserId()); + String studentName = AuthUserContextAdapter.getCurrentUserName(); + recordDTO.setStudentName(studentName == null ? "系统" : studentName); + recordDTO.setClassId(classId); + recordDTO.setPaperName(paperExam.getPaperName()); + recordDTO.setPaperExamId(paperExam.getId()); + recordDTO.setScore(examScore); + recordDTO.setCorrectCount((int) correct); + recordDTO.setPassed(paperExam.getPassed()); + recordDTO.setWrongCount((int) (total - correct)); + recordDTO.setAccuracy(total == 0 ? BigDecimal.ZERO : BigDecimal.valueOf(correct * 100).divide(BigDecimal.valueOf(total), 2, RoundingMode.HALF_UP)); - examRecord.setEndTime(LocalDateTime.now()); - InsertFieldDefaults.applyForUpdate(examRecord); - classStudentExamRecordMapper.updateById(examRecord); + recordDTO.setStartTime(paperExam.getCreateTime()); + recordDTO.setEndTime(LocalDateTime.now()); + SpringUtil.getBean(ClassStudentExamRecordService.class).saveRecord(recordDTO); } /**