From 8cc9559b0a1509e655acf8f939318368a1fe95d6 Mon Sep 17 00:00:00 2001 From: 龚焕茏 <2842157468@qq.com> Date: 星期二, 02 七月 2024 10:58:34 +0800 Subject: [PATCH] feat:新增考试记录题目查看 --- src/main/java/com/ycl/jxkg/service/impl/ExamServiceImpl.java | 98 ++++++++++++++++++++++++++++++++++++++++--------- 1 files changed, 80 insertions(+), 18 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 e4f46d6..b5cec94 100644 --- a/src/main/java/com/ycl/jxkg/service/impl/ExamServiceImpl.java +++ b/src/main/java/com/ycl/jxkg/service/impl/ExamServiceImpl.java @@ -29,10 +29,13 @@ import com.ycl.jxkg.enums.general.ExamStatusEnum; import com.ycl.jxkg.enums.general.ExamSubmitTempStatusEnum; import com.ycl.jxkg.mapper.*; +import com.ycl.jxkg.rabbitmq.msg.ExamStatusMsg; +import com.ycl.jxkg.rabbitmq.product.Producer; import com.ycl.jxkg.server.WebsocketServer; import com.ycl.jxkg.service.ExamPaperScoreService; import com.ycl.jxkg.service.ExamPaperService; import com.ycl.jxkg.service.ExamService; +import com.ycl.jxkg.utils.DateTimeUtil; import com.ycl.jxkg.utils.PageUtil; import lombok.RequiredArgsConstructor; import org.springframework.beans.BeanUtils; @@ -56,6 +59,8 @@ @RequiredArgsConstructor public class ExamServiceImpl extends ServiceImpl<ExamMapper, Exam> implements ExamService { + private static final String ANSWER_SPLIT = ","; + private final ExamMapper examMapper; private final WebContext webContext; private final QuestionMapper questionMapper; @@ -67,7 +72,9 @@ private final UserMapper userMapper; private final ExamPaperScoreMapper examPaperScoreMapper; private final ExamPaperScoreService examPaperScoreService; - private static final String ANSWER_SPLIT = ","; + + private final Producer producer; + /** * 娣诲姞 * @@ -79,7 +86,11 @@ Exam entity = ExamForm.getEntityByForm(form, null); entity.setStatus(ExamStatusEnum.getStatusByTime(form.getStartTime(), form.getEndTime(), null)); entity.setTeacherId(webContext.getCurrentUser().getId()); - baseMapper.insert(entity); + // 璁剧疆涔愯閿佺増鏈� + entity.setUpdateVersion(0); + if (baseMapper.insert(entity) > 0) { + this.sendMQ(entity, 0); + } return Result.ok("娣诲姞鎴愬姛"); } @@ -100,8 +111,56 @@ } BeanUtils.copyProperties(form, entity); entity.setStatus(ExamStatusEnum.getStatusByTime(form.getStartTime(), form.getEndTime(), null)); - baseMapper.updateById(entity); + // 濡傛灉淇敼鎴愬姛鍙戦�乵q娑堟伅 + if (baseMapper.updateById(entity) > 0) { + this.sendMQ(entity, entity.getUpdateVersion() + 1); + } return Result.ok("淇敼鎴愬姛"); + } + + /** + * 鍙戦�乵q娑堟伅 + * + * @param entity 鑰冭瘯瀹炰綋绫� + * @param version 涔愯閿佺増鏈� + */ + public void sendMQ(Exam entity, Integer version) { + // 濡傛灉褰撳墠鐘舵�佷负鏈紑濮嬶紝鍒欏彂閫佷袱鏉q娑堟伅锛屼竴鏉¤缃姸鎬佷负杩涜涓紝涓�鏉¤缃姸鎬佷负宸茬粨鏉� + if (ExamStatusEnum.NOT_START.equals(entity.getStatus())) { + // 杩涜鐘舵�佹秷鎭� + ExamStatusMsg ingMsg = new ExamStatusMsg(); + ingMsg.setVersion(version); + ingMsg.setExamId(entity.getId()); + ingMsg.setTargetStatus(ExamStatusEnum.ING); + producer.examMsg(entity.getId(), JSON.toJSONString(ingMsg), DateTimeUtil.getTwoTimeDiffMS(entity.getStartTime(), new Date())); + // 缁撴潫鐘舵�佹秷鎭� + ExamStatusMsg finishedMsg = new ExamStatusMsg(); + finishedMsg.setVersion(version); + finishedMsg.setExamId(entity.getId()); + finishedMsg.setTargetStatus(ExamStatusEnum.FINISHED); + producer.examMsg(entity.getId(), JSON.toJSONString(finishedMsg), DateTimeUtil.getTwoTimeDiffMS(entity.getEndTime(), new Date())); + } else if (ExamStatusEnum.ING.equals(entity.getStatus())) { // 褰撳墠鏄繘琛屼腑鐘舵�佸垯鍙渶鍙戦�佺粨鏉熸秷鎭� + // 缁撴潫鐘舵�佹秷鎭� + ExamStatusMsg finishedMsg = new ExamStatusMsg(); + finishedMsg.setVersion(0); + finishedMsg.setExamId(entity.getId()); + finishedMsg.setTargetStatus(ExamStatusEnum.FINISHED); + producer.examMsg(entity.getId(), JSON.toJSONString(finishedMsg), DateTimeUtil.getTwoTimeDiffMS(entity.getEndTime(), new Date())); + } + } + + /** + * 鏍规嵁鑰冭瘯鐨勫綋鍓嶇姸鎬侊紝寰楀埌涓嬩竴涓姸鎬� + * + * @param currentStatus + * @return + */ + public ExamStatusEnum getNextStatus(ExamStatusEnum currentStatus) { + if (ExamStatusEnum.NOT_START.equals(currentStatus)) { + return ExamStatusEnum.ING; + } else { + return ExamStatusEnum.FINISHED; + } } /** @@ -449,9 +508,8 @@ Date now = new Date(); one.setExamSubmit(JSON.toJSONString(submitData.getTitleList())); one.setUpdateTime(now); - long doTimeL = now.getTime() - one.getCreateTime().getTime(); - Integer doTime = (int) doTimeL; - one.setDoTime(doTime); + int doTimeInSeconds = (int) (now.getTime() - one.getCreateTime().getTime()) / 1000; + one.setDoTime(doTimeInSeconds); one.setStatus(status); examSubmitTempMapper.updateById(one); } else { @@ -485,7 +543,7 @@ // 鍙傝�冧絾鏈畬鎴愭彁浜や汉鏁� Integer joinButNotFinishedNum = Math.toIntExact(examSubmitTempList.stream().filter(item -> ExamSubmitTempStatusEnum.temp.equals(item.getStatus())).count()); - List<StudentExamInfoVO> studentExamList = classesUserMapper.getClassesUserList(exam.getClassesId()); + List<StudentExamInfoVO> studentExamList = classesUserMapper.getClassesUserList(exam.getId(), exam.getClassesId()); // 搴旇�冧汉鏁� Integer shouldUserNum = studentExamList.size(); @@ -600,7 +658,7 @@ if (StringUtils.isEmpty(doQuestionVO.getQuestionAnswer())) { return Result.fail(SystemCode.InnerError.getCode(), "棰樼洰id涓猴細" + doQuestionVO.getId() + "鐨勯鐩己灏戠瓟妗堬紝璇峰厛瀹屽杽"); } - trueOrFalse(score,doQuestionVO, navbarVO, doQuestionVO.getQuestionAnswer().equals(doQuestionVO.getAnswer())); + score = trueOrFalse(score, doQuestionVO, navbarVO, doQuestionVO.getQuestionAnswer().equals(doQuestionVO.getAnswer())); } /* 濡傛灉鏄閫� */ else if (QuestionTypeEnum.MultipleChoice.getCode().equals(questionType)) { @@ -616,7 +674,7 @@ List<String> questionAnswerList = Arrays.asList(questionAnswer.split(",")); //瀛︾敓绛旀涓虹┖锛屽垽鏂负閿� if (CollectionUtils.isEmpty(answerList)) { - trueOrFalse(score,doQuestionVO, navbarVO, false); + score = trueOrFalse(score, doQuestionVO, navbarVO, false); num++; navbar.add(navbarVO); continue; @@ -627,7 +685,7 @@ Set<String> set2 = new HashSet<>(questionAnswerList); //绛旀瀹屽叏涓�鑷达紝婊″垎 if (set1.equals(set2)) { - trueOrFalse(score,doQuestionVO, navbarVO, true); + score = trueOrFalse(score, doQuestionVO, navbarVO, true); num++; navbar.add(navbarVO); continue; @@ -637,20 +695,20 @@ } //濡傛灉澶氶�夊緱鍒嗙被鍨嬩负 绛旈敊涓嶅緱鍒� if (Integer.valueOf(DeductTypeEnum.AllCorrect.getCode()).equals(paperMarkVO.getDeductType())) { - trueOrFalse(score,doQuestionVO, navbarVO, false); + score = trueOrFalse(score, doQuestionVO, navbarVO, false); } //濡傛灉澶氶�夊緱鍒嗙被鍨嬩负 婕忛�夊緱鍥哄畾鍒嗗��,鍖呭惈閿欒閫夐」涓嶅緱鍒� else if (Integer.valueOf(DeductTypeEnum.PartCorrect.getCode()).equals(paperMarkVO.getDeductType())) { //瀛︾敓绛旀绉婚櫎鎵�鏈夋纭瓟妗堬紝濡傛灉杩樻湁鍏冪礌璇存槑鍖呭惈閿欒閫夐」 answerList.removeAll(questionAnswerList); if (!CollectionUtils.isEmpty(answerList)) { - trueOrFalse(score,doQuestionVO, navbarVO, false); + score = trueOrFalse(score, doQuestionVO, navbarVO, false); } else { navbarVO.setRight(false); doQuestionVO.setRight(false); //婕忛�夊緱鍥哄畾鍒� - score = score.add(paperMarkVO.getDeductScore()); doQuestionVO.setScore(paperMarkVO.getDeductScore()); + score = score.add(doQuestionVO.getScore()); } } //濡傛灉澶氶�夊緱鍒嗙被鍨嬩负 姣忓涓�棰樺緱鐩稿簲鍒嗗��,鍖呭惈閿欒閫夐」涓嶅緱鍒� @@ -658,12 +716,13 @@ //瀛︾敓绛旀绉婚櫎鎵�鏈夋纭瓟妗堬紝濡傛灉杩樻湁鍏冪礌璇存槑鍖呭惈閿欒閫夐」 answerList.removeAll(questionAnswerList); if (!CollectionUtils.isEmpty(answerList)) { - trueOrFalse(score,doQuestionVO, navbarVO, false); + score = trueOrFalse(score, doQuestionVO, navbarVO, false); } else { navbarVO.setRight(false); doQuestionVO.setRight(false); //婕忛�夊緱鍒� doQuestionVO.setScore(paperMarkVO.getDeductScore().multiply(new BigDecimal(answerCount))); + score = score.add(doQuestionVO.getScore()); } } } @@ -681,7 +740,7 @@ List<String> questionAnswerList = Arrays.asList(questionAnswer.split(",")); //瀛︾敓绛旀涓虹┖锛屽垽鏂负閿� if (CollectionUtils.isEmpty(answerList)) { - trueOrFalse(score,doQuestionVO, navbarVO, false); + score = trueOrFalse(score, doQuestionVO, navbarVO, false); num++; navbar.add(navbarVO); continue; @@ -690,7 +749,7 @@ int questionAnswerCount = questionAnswerList.size(); //绛旀瀹屽叏涓�鑷达紝婊″垎 if (answerList.equals(questionAnswerList)) { - trueOrFalse(score,doQuestionVO, navbarVO, true); + score = trueOrFalse(score, doQuestionVO, navbarVO, true); } else { navbarVO.setRight(false); doQuestionVO.setRight(false); @@ -708,6 +767,7 @@ //濉┖寰楀垎 BigDecimal gapScore = scoreEach.multiply(new BigDecimal(count)); doQuestionVO.setScore(gapScore); + score = score.add(doQuestionVO.getScore()); } } @@ -717,11 +777,12 @@ } paperMarkVO.setTitleItems(titleItems); paperMarkVO.setNavbar(navbar); + paperMarkVO.setScore(score + ""); return null; } //璁剧疆鍏ㄥ鎴栧叏閿� - private void trueOrFalse(BigDecimal score,DoQuestionVO doQuestionVO, ExamPaperMarkNavbarVO orderVO, Boolean isCorrect) { + private BigDecimal trueOrFalse(BigDecimal score, DoQuestionVO doQuestionVO, ExamPaperMarkNavbarVO orderVO, Boolean isCorrect) { if (isCorrect) { //姝g‘ orderVO.setRight(isCorrect); @@ -734,6 +795,7 @@ doQuestionVO.setRight(isCorrect); doQuestionVO.setScore(BigDecimal.ZERO); } + return score; } //灏佽闃呭嵎杩斿洖鏁版嵁 @@ -771,7 +833,7 @@ long questionCorrect = 0; long questionCount = 0; if (!CollectionUtils.isEmpty(examPaperMark.getNavbar())) { - questionCorrect = examPaperMark.getNavbar().stream().filter(ExamPaperMarkNavbarVO::getRight).count(); + questionCorrect = examPaperMark.getNavbar().stream().filter(vo -> vo.getRight()!=null && vo.getRight()).count(); questionCount = examPaperMark.getNavbar().size(); } examPaperScore.setQuestionCorrect(Integer.valueOf(questionCorrect + "")); -- Gitblit v1.8.0