user paper exam
parent
b040539746
commit
502c83667a
|
|
@ -4,6 +4,7 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper;
|
|||
import org.apache.ibatis.annotations.Mapper;
|
||||
import org.apache.ibatis.annotations.Param;
|
||||
import org.qinan.cedu.model.entity.PaperExamQuestionUserDO;
|
||||
import org.qinan.cedu.model.vo.PaperExamQuestionStatVO;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
|
||||
|
|
@ -20,4 +21,12 @@ public interface PaperExamQuestionUserMapper extends BaseMapper<PaperExamQuestio
|
|||
* @return 作答总得分(无记录时返回0)
|
||||
*/
|
||||
BigDecimal sumAnswerScore(@Param("paperExamId") Long paperExamId);
|
||||
|
||||
/**
|
||||
* 一条SQL统计一次考试的总题数与答对题数(未作答按错误计)
|
||||
*
|
||||
* @param paperExamId 考试记录id
|
||||
* @return 总题数与答对题数(聚合查询恒返回一条记录)
|
||||
*/
|
||||
PaperExamQuestionStatVO countTotalAndCorrect(@Param("paperExamId") Long paperExamId);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -0,0 +1,17 @@
|
|||
package org.qinan.cedu.model.vo;
|
||||
|
||||
import io.swagger.annotations.ApiModelProperty;
|
||||
import lombok.Data;
|
||||
|
||||
/**
|
||||
* 考试试题作答统计结果
|
||||
*/
|
||||
@Data
|
||||
public class PaperExamQuestionStatVO {
|
||||
|
||||
@ApiModelProperty("总题数")
|
||||
private Long total;
|
||||
|
||||
@ApiModelProperty("答对题数")
|
||||
private Long correct;
|
||||
}
|
||||
|
|
@ -25,6 +25,7 @@ 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.PaperExamQuestionStatVO;
|
||||
import org.qinan.cedu.model.vo.PaperExamVO;
|
||||
import org.qinan.cedu.model.vo.StartExamQuestionVO;
|
||||
import org.qinan.cedu.model.vo.StartExamVO;
|
||||
|
|
@ -239,14 +240,10 @@ public class PaperExamServiceImpl extends ServiceImpl<PaperExamMapper, PaperExam
|
|||
if (examRecord == null) {
|
||||
return;
|
||||
}
|
||||
// 统计总题数与答对题数,错误题数=总题数-答对题数(未作答按错误计),正确率=答对/总数*100
|
||||
long total = paperExamQuestionUserService.count(new LambdaQueryWrapper<PaperExamQuestionUserDO>()
|
||||
.eq(PaperExamQuestionUserDO::getPaperExamId, paperExam.getId())
|
||||
.eq(PaperExamQuestionUserDO::getDeleteEnum, DeleteEnum.FALSE.getCode()));
|
||||
long correct = paperExamQuestionUserService.count(new LambdaQueryWrapper<PaperExamQuestionUserDO>()
|
||||
.eq(PaperExamQuestionUserDO::getPaperExamId, paperExam.getId())
|
||||
.eq(PaperExamQuestionUserDO::getDeleteEnum, DeleteEnum.FALSE.getCode())
|
||||
.eq(PaperExamQuestionUserDO::getRightStatus, BooleanQAEnum.TRUE.getValue()));
|
||||
// 一条统计SQL取总题数与答对题数,错误题数=总题数-答对题数(未作答按错误计),正确率=答对/总数*100
|
||||
PaperExamQuestionStatVO stat = paperExamQuestionUserMapper.countTotalAndCorrect(paperExam.getId());
|
||||
long total = stat.getTotal();
|
||||
long correct = stat.getCorrect();
|
||||
examRecord.setScore(examScore);
|
||||
examRecord.setPassed(paperExam.getPassed());
|
||||
examRecord.setWrongCount((int) (total - correct));
|
||||
|
|
|
|||
|
|
@ -8,4 +8,12 @@
|
|||
WHERE paper_exam_id = #{paperExamId}
|
||||
AND delete_enum = 'false'
|
||||
</select>
|
||||
|
||||
<select id="countTotalAndCorrect" resultType="org.qinan.cedu.model.vo.PaperExamQuestionStatVO">
|
||||
SELECT COUNT(*) AS total,
|
||||
IFNULL(SUM(CASE WHEN right_status = 'true' THEN 1 ELSE 0 END), 0) AS correct
|
||||
FROM paper_exam_question_user
|
||||
WHERE paper_exam_id = #{paperExamId}
|
||||
AND delete_enum = 'false'
|
||||
</select>
|
||||
</mapper>
|
||||
|
|
|
|||
Loading…
Reference in New Issue