diff --git a/safety-cedu-service/src/main/java/org/qinan/cedu/model/dto/ClassStudentExamRecordDTO.java b/safety-cedu-service/src/main/java/org/qinan/cedu/model/dto/ClassStudentExamRecordDTO.java index 3e78cd59..e061906f 100644 --- a/safety-cedu-service/src/main/java/org/qinan/cedu/model/dto/ClassStudentExamRecordDTO.java +++ b/safety-cedu-service/src/main/java/org/qinan/cedu/model/dto/ClassStudentExamRecordDTO.java @@ -30,8 +30,8 @@ public class ClassStudentExamRecordDTO { @ApiModelProperty("试卷名称") private String paperName; - @ApiModelProperty("试卷id") - private Long paperId; + @ApiModelProperty("考试试卷id") + private Long paperExamId; @ApiModelProperty("得分") private BigDecimal score; diff --git a/safety-cedu-service/src/main/java/org/qinan/cedu/model/dto/StartExamDTO.java b/safety-cedu-service/src/main/java/org/qinan/cedu/model/dto/StartExamDTO.java index 7d0702b4..99e3865c 100644 --- a/safety-cedu-service/src/main/java/org/qinan/cedu/model/dto/StartExamDTO.java +++ b/safety-cedu-service/src/main/java/org/qinan/cedu/model/dto/StartExamDTO.java @@ -17,6 +17,9 @@ public class StartExamDTO { @NotNull(message = "试卷id不能为空") private Long paperId; + @ApiModelProperty("班级id(非空时生成班级学员考试记录)") + private Long classId; + @ApiModelProperty("用户id") private Long userId; } diff --git a/safety-cedu-service/src/main/java/org/qinan/cedu/model/entity/ClassStudentExamRecordDO.java b/safety-cedu-service/src/main/java/org/qinan/cedu/model/entity/ClassStudentExamRecordDO.java index 3e44a984..fc917ada 100644 --- a/safety-cedu-service/src/main/java/org/qinan/cedu/model/entity/ClassStudentExamRecordDO.java +++ b/safety-cedu-service/src/main/java/org/qinan/cedu/model/entity/ClassStudentExamRecordDO.java @@ -34,8 +34,8 @@ public class ClassStudentExamRecordDO extends BaseEntity { @TableField("paper_name") private String paperName; - @TableField("paper_id") - private Long paperId; + @TableField("paper_exam_id") + private Long paperExamId; @TableField("score") private BigDecimal score; diff --git a/safety-cedu-service/src/main/java/org/qinan/cedu/model/query/ClassStudentExamRecordPageQuery.java b/safety-cedu-service/src/main/java/org/qinan/cedu/model/query/ClassStudentExamRecordPageQuery.java index f696f5a1..a5447917 100644 --- a/safety-cedu-service/src/main/java/org/qinan/cedu/model/query/ClassStudentExamRecordPageQuery.java +++ b/safety-cedu-service/src/main/java/org/qinan/cedu/model/query/ClassStudentExamRecordPageQuery.java @@ -17,8 +17,8 @@ public class ClassStudentExamRecordPageQuery extends BasePageQuery { @ApiModelProperty("学员ID") private Long studentId; - @ApiModelProperty("试卷id") - private Long paperId; + @ApiModelProperty("考试试卷id") + private Long paperExamId; @ApiModelProperty("是否通过(0-未通过,1-通过)") private Integer passed; diff --git a/safety-cedu-service/src/main/java/org/qinan/cedu/model/vo/ClassStudentExamRecordVO.java b/safety-cedu-service/src/main/java/org/qinan/cedu/model/vo/ClassStudentExamRecordVO.java index e12a9c8b..f9dea5c6 100644 --- a/safety-cedu-service/src/main/java/org/qinan/cedu/model/vo/ClassStudentExamRecordVO.java +++ b/safety-cedu-service/src/main/java/org/qinan/cedu/model/vo/ClassStudentExamRecordVO.java @@ -29,8 +29,8 @@ public class ClassStudentExamRecordVO extends BaseVO { @ApiModelProperty("试卷名称") private String paperName; - @ApiModelProperty("试卷id") - private String paperId; + @ApiModelProperty("考试试卷id") + private String paperExamId; @ApiModelProperty("得分") private BigDecimal score; diff --git a/safety-cedu-service/src/main/java/org/qinan/cedu/service/PaperExamService.java b/safety-cedu-service/src/main/java/org/qinan/cedu/service/PaperExamService.java index 0f975574..7856223a 100644 --- a/safety-cedu-service/src/main/java/org/qinan/cedu/service/PaperExamService.java +++ b/safety-cedu-service/src/main/java/org/qinan/cedu/service/PaperExamService.java @@ -57,7 +57,7 @@ public interface PaperExamService extends IService { boolean deleteById(Long id); /** - * 去考试:根据试卷生成考试记录及用户试题作答记录 + * 去考试:根据试卷生成考试记录及用户试题作答记录(携带班级id时同时生成班级学员考试记录) * * @param dto 去考试入参(试卷id必填,用户id由Controller填充) * @return 考试信息(含试题列表及参考答案) diff --git a/safety-cedu-service/src/main/java/org/qinan/cedu/service/impl/ClassStudentExamRecordServiceImpl.java b/safety-cedu-service/src/main/java/org/qinan/cedu/service/impl/ClassStudentExamRecordServiceImpl.java index a08966de..b14172df 100644 --- a/safety-cedu-service/src/main/java/org/qinan/cedu/service/impl/ClassStudentExamRecordServiceImpl.java +++ b/safety-cedu-service/src/main/java/org/qinan/cedu/service/impl/ClassStudentExamRecordServiceImpl.java @@ -33,7 +33,7 @@ public class ClassStudentExamRecordServiceImpl extends ServiceImpl(query.getCurrent(), query.getSize())) 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 272bf186..2d1d08ca 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 @@ -10,6 +10,7 @@ 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.ClassStudentExamRecordMapper; import org.qinan.cedu.mapper.PaperExamMapper; import org.qinan.cedu.mapper.PaperExamQuestionUserMapper; import org.qinan.cedu.mapper.PaperMapper; @@ -19,6 +20,7 @@ import org.qinan.cedu.model.dto.PaperExamDTO; import org.qinan.cedu.model.dto.PaperExamPageQueryDTO; import org.qinan.cedu.model.dto.StartExamDTO; import org.qinan.cedu.model.dto.SubmitExamDTO; +import org.qinan.cedu.model.entity.ClassStudentExamRecordDO; import org.qinan.cedu.model.entity.PaperDO; import org.qinan.cedu.model.entity.PaperExamDO; import org.qinan.cedu.model.entity.PaperExamQuestionUserDO; @@ -29,12 +31,14 @@ import org.qinan.cedu.model.vo.StartExamVO; import org.qinan.cedu.service.PaperExamQuestionUserService; import org.qinan.cedu.service.PaperExamService; import org.qinan.safetyeval.domain.constant.BooleanQAEnum; +import org.qinan.safetyeval.infrastructure.adapter.auth.AuthUserContextAdapter; import org.qinan.safetyeval.infrastructure.support.InsertFieldDefaults; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import org.springframework.util.StringUtils; import java.math.BigDecimal; +import java.math.RoundingMode; import java.time.LocalDateTime; import java.util.ArrayList; import java.util.Arrays; @@ -61,6 +65,8 @@ public class PaperExamServiceImpl extends ServiceImpl pageQuery(PaperExamPageQueryDTO query) { return this.lambdaQuery() @@ -132,6 +138,8 @@ 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; + } + // 统计总题数与答对题数,错误题数=总题数-答对题数(未作答按错误计),正确率=答对/总数*100 + long total = paperExamQuestionUserService.count(new LambdaQueryWrapper() + .eq(PaperExamQuestionUserDO::getPaperExamId, paperExam.getId()) + .eq(PaperExamQuestionUserDO::getDeleteEnum, DeleteEnum.FALSE.getCode())); + long correct = paperExamQuestionUserService.count(new LambdaQueryWrapper() + .eq(PaperExamQuestionUserDO::getPaperExamId, paperExam.getId()) + .eq(PaperExamQuestionUserDO::getDeleteEnum, DeleteEnum.FALSE.getCode()) + .eq(PaperExamQuestionUserDO::getRightStatus, BooleanQAEnum.TRUE.getValue())); + examRecord.setScore(examScore); + examRecord.setPassed(paperExam.getPassed()); + examRecord.setWrongCount((int) (total - correct)); + examRecord.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); } /** diff --git a/safety-cedu-service/src/班级管理.sql b/safety-cedu-service/src/班级管理.sql index bea6796a..a984b6e7 100644 --- a/safety-cedu-service/src/班级管理.sql +++ b/safety-cedu-service/src/班级管理.sql @@ -106,7 +106,7 @@ create table class_student_exam_record student_name varchar(20) not null comment '学员名称', class_id bigint not null comment '所属班级ID(关联training_class.id)', paper_name varchar(200) not null comment '试卷名称', - paper_id bigint not null comment '试卷id', + paper_exam_id bigint not null comment '考试试卷id(关联paper_exam.id)', score decimal(10, 2) null comment '得分', passed tinyint(1) default 0 null comment '是否通过(0-未通过,1-通过)', wrong_count int default 0 null comment '错误题数',