From 3303fef314b45020d8ea62a908d887060d695b3f Mon Sep 17 00:00:00 2001 From: fuliqi <fuliqi@qq.com> Date: 星期三, 03 七月 2024 09:39:32 +0800 Subject: [PATCH] 教学资源增加班级 --- src/main/java/com/ycl/jxkg/service/impl/ExamServiceImpl.java | 58 ++++++++++++++++++++++++++++++++++------------------------ 1 files changed, 34 insertions(+), 24 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 0809c9e..fe1d8e5 100644 --- a/src/main/java/com/ycl/jxkg/service/impl/ExamServiceImpl.java +++ b/src/main/java/com/ycl/jxkg/service/impl/ExamServiceImpl.java @@ -2,6 +2,7 @@ import com.alibaba.fastjson2.JSON; import com.alibaba.fastjson2.JSONArray; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; import com.baomidou.mybatisplus.extension.conditions.query.LambdaQueryChainWrapper; @@ -30,7 +31,7 @@ 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.Product; +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; @@ -59,6 +60,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; @@ -70,8 +73,8 @@ private final UserMapper userMapper; private final ExamPaperScoreMapper examPaperScoreMapper; private final ExamPaperScoreService examPaperScoreService; - private static final String ANSWER_SPLIT = ","; - private final Product product; + + private final Producer producer; /** * 娣诲姞 @@ -130,20 +133,20 @@ ingMsg.setVersion(version); ingMsg.setExamId(entity.getId()); ingMsg.setTargetStatus(ExamStatusEnum.ING); - product.examMsg(entity.getId(), JSON.toJSONString(ingMsg), DateTimeUtil.getTwoTimeDiffMS(entity.getStartTime(), new Date())); + 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); - product.examMsg(entity.getId(), JSON.toJSONString(finishedMsg), DateTimeUtil.getTwoTimeDiffMS(entity.getEndTime(), new Date())); + 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); - product.examMsg(entity.getId(), JSON.toJSONString(finishedMsg), DateTimeUtil.getTwoTimeDiffMS(entity.getEndTime(), new Date())); + producer.examMsg(entity.getId(), JSON.toJSONString(finishedMsg), DateTimeUtil.getTwoTimeDiffMS(entity.getEndTime(), new Date())); } } @@ -468,9 +471,6 @@ // 鐜板湪鍙渶瑕佷繚瀛樺埌涓�寮犱复鏃惰〃 // 璇ユ帴鍙f槸涓诲姩鎻愪氦锛屾墍浠ョ姸鎬侀兘璁剧疆涓哄畬鎴愶紝浠ヤ究鍚庣画鑰佸笀闃呭嵎 saveTempExam(submitData, ExamSubmitTempStatusEnum.finish); - - //TODO:鑰冭瘯鐘舵�佽瀹氫负缁撴潫 - return Result.ok(); } @@ -506,9 +506,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 { @@ -542,7 +541,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(); @@ -657,7 +656,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)) { @@ -673,7 +672,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; @@ -684,7 +683,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; @@ -694,20 +693,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()); } } //濡傛灉澶氶�夊緱鍒嗙被鍨嬩负 姣忓涓�棰樺緱鐩稿簲鍒嗗��,鍖呭惈閿欒閫夐」涓嶅緱鍒� @@ -715,12 +714,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()); } } } @@ -738,7 +738,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; @@ -747,7 +747,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); @@ -765,6 +765,7 @@ //濉┖寰楀垎 BigDecimal gapScore = scoreEach.multiply(new BigDecimal(count)); doQuestionVO.setScore(gapScore); + score = score.add(doQuestionVO.getScore()); } } @@ -774,11 +775,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); @@ -791,6 +793,7 @@ doQuestionVO.setRight(isCorrect); doQuestionVO.setScore(BigDecimal.ZERO); } + return score; } //灏佽闃呭嵎杩斿洖鏁版嵁 @@ -828,7 +831,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 + "")); @@ -840,6 +843,13 @@ examPaperScoreMapper.updateById(examPaperScore); } else { examPaperScoreMapper.insert(examPaperScore); + //淇敼鑰冭瘯閲岃瘯鍗风姸鎬佷负宸查槄鍗� + ExamSubmitTemp userExam = new LambdaQueryChainWrapper<>(examSubmitTempMapper) + .eq(ExamSubmitTemp::getExamId, examPaperMark.getExamId()) + .eq(ExamSubmitTemp::getUserId, examPaperMark.getUserId()) + .one(); + userExam.setMarkPaperStatus(ExamSubmitTempStatusEnum.finish); + examSubmitTempMapper.updateById(userExam); } return Result.ok(); } -- Gitblit v1.8.0