From b55933dc08b27a1e051115f8c58ce46291637f8c Mon Sep 17 00:00:00 2001 From: xiangpei <xiangpei@timesnew.cn> Date: 星期四, 13 六月 2024 17:53:50 +0800 Subject: [PATCH] 手动、临时提交考试 --- src/main/java/com/ycl/jxkg/service/impl/ExamServiceImpl.java | 73 ++++++++++++++++++++++++++++++++++++ 1 files changed, 73 insertions(+), 0 deletions(-) diff --git a/src/main/java/com/ycl/jxkg/service/impl/ExamServiceImpl.java b/src/main/java/com/ycl/jxkg/service/impl/ExamServiceImpl.java index afbca10..2d6b213 100644 --- a/src/main/java/com/ycl/jxkg/service/impl/ExamServiceImpl.java +++ b/src/main/java/com/ycl/jxkg/service/impl/ExamServiceImpl.java @@ -1,10 +1,20 @@ package com.ycl.jxkg.service.impl; +import com.alibaba.fastjson2.JSON; import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.extension.conditions.query.LambdaQueryChainWrapper; import com.ycl.jxkg.context.WebContext; import com.ycl.jxkg.domain.entity.Exam; +import com.ycl.jxkg.domain.entity.ExamSubmitTemp; +import com.ycl.jxkg.domain.entity.Question; +import com.ycl.jxkg.domain.vo.DoQuestionVO; +import com.ycl.jxkg.domain.vo.ExamSubmitVO; +import com.ycl.jxkg.enums.QuestionTypeEnum; import com.ycl.jxkg.enums.general.ExamStatusEnum; +import com.ycl.jxkg.enums.general.ExamSubmitTempStatusEnum; import com.ycl.jxkg.mapper.ExamMapper; +import com.ycl.jxkg.mapper.ExamSubmitTempMapper; +import com.ycl.jxkg.mapper.QuestionMapper; import com.ycl.jxkg.service.ExamService; import com.ycl.jxkg.base.Result; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; @@ -17,7 +27,10 @@ import org.springframework.beans.BeanUtils; import org.springframework.util.Assert; +import java.util.Date; import java.util.List; +import java.util.Map; +import java.util.Objects; import java.util.stream.Collectors; /** @@ -32,9 +45,12 @@ private final ExamMapper examMapper; private final WebContext webContext; + private final QuestionMapper questionMapper; + private final ExamSubmitTempMapper examSubmitTempMapper; /** * 娣诲姞 + * * @param form * @return */ @@ -49,6 +65,7 @@ /** * 淇敼 + * * @param form * @return */ @@ -65,6 +82,7 @@ /** * 鎵归噺鍒犻櫎 + * * @param ids * @return */ @@ -76,6 +94,7 @@ /** * id鍒犻櫎 + * * @param id * @return */ @@ -87,6 +106,7 @@ /** * 鍒嗛〉鏌ヨ + * * @param query * @return */ @@ -99,6 +119,7 @@ /** * 鏍规嵁id鏌ユ壘 + * * @param id * @return */ @@ -111,6 +132,7 @@ /** * 鍒楄〃 + * * @return */ @Override @@ -121,4 +143,55 @@ .collect(Collectors.toList()); return Result.ok().data(vos); } + + @Override + public Result examSubmit(ExamSubmitVO submitData) { + // 鏍¢獙 + Exam exam = examMapper.selectById(submitData.getExamId()); + if (Objects.isNull(exam)) { + throw new RuntimeException("璇ヨ�冭瘯涓嶅瓨鍦�"); + } + // 鍒ゆ柇鍗曢�夈�佸閫夈�佸垽鏂瀵归敊 + List<Integer> questionIds = submitData.getQuestionList().stream().map(DoQuestionVO::getId).collect(Collectors.toList()); + List<Question> questionList = questionMapper.getAnswerInfo(questionIds); + Map<Integer, Question> answerMap = questionList.stream().collect(Collectors.toMap(Question::getId, entity -> entity)); + submitData.getQuestionList().stream().forEach(item -> { + Question question = answerMap.get(item.getId()); + if (Objects.nonNull(question) + && (QuestionTypeEnum.SingleChoice.getCode().equals(question.getQuestionType()) + || QuestionTypeEnum.MultipleChoice.getCode().equals(question.getQuestionType()) + || QuestionTypeEnum.TrueFalse.getCode().equals(question.getQuestionType()) + )) { + String correct = question.getCorrect(); + if (QuestionTypeEnum.MultipleChoice.getCode().equals(question.getQuestionType())) { + // 濡傛灉鏄�夋嫨棰橈紝閭d箞灏嗙瓟妗堣浆涓簂ist + List<String> answerList = JSON.parseArray(correct, String.class); + item.setRight(answerList.containsAll(item.getAnswerList())); + } else { + item.setRight(question.getCorrect().equals(item.getAnswer())); + } + } + }); + // 闃呭嵎鍚庢墠寰�exam_paper_answer淇濆瓨鑰冭瘯鎴愮哗銆佷互鍙婁繚瀛樺埌exam_paper_customer_answer + // 鐜板湪鍙渶瑕佷繚瀛樺埌涓�寮犱复鏃惰〃 + ExamSubmitTemp one = new LambdaQueryChainWrapper<>(examSubmitTempMapper) + .eq(ExamSubmitTemp::getExamId, submitData.getExamId()) + .eq(ExamSubmitTemp::getUserId, webContext.getCurrentUser().getId()) + .one(); + if (Objects.nonNull(one)) { + one.setDoTime(submitData.getDoTime()); + one.setExamSubmit(JSON.toJSONString(submitData.getQuestionList())); + one.setCreateTime(new Date()); + examSubmitTempMapper.updateById(one); + } else { + ExamSubmitTemp examSubmitTemp = new ExamSubmitTemp(); + examSubmitTemp.setExamId(submitData.getExamId()); + examSubmitTemp.setDoTime(submitData.getDoTime()); + examSubmitTemp.setStatus(ExamSubmitTempStatusEnum.FINISH); + examSubmitTemp.setUserId(webContext.getCurrentUser().getId()); + examSubmitTemp.setExamSubmit(JSON.toJSONString(submitData.getQuestionList())); + examSubmitTempMapper.insert(examSubmitTemp); + } + return Result.ok(); + } } -- Gitblit v1.8.0