From 4398937fdc9ee8db0cd6a1dfc022c129f4632826 Mon Sep 17 00:00:00 2001 From: xiangpei <xiangpei@timesnew.cn> Date: 星期一, 01 七月 2024 17:17:20 +0800 Subject: [PATCH] 合并、调整 --- src/main/java/com/ycl/jxkg/service/impl/ExamServiceImpl.java | 70 ++++++++++++++++++++++++++++++++-- 1 files changed, 65 insertions(+), 5 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 70dc960..635e59f 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,12 @@ 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 +58,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; @@ -66,8 +70,8 @@ private final WebsocketServer websocketServer; private final UserMapper userMapper; private final ExamPaperScoreMapper examPaperScoreMapper; - private final ExamPaperScoreService examPaperScoreService; - private static final String ANSWER_SPLIT = ","; + private final Producer producer; + /** * 娣诲姞 * @@ -79,7 +83,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("娣诲姞鎴愬姛"); } @@ -94,13 +102,65 @@ Exam entity = baseMapper.selectById(form.getId()); // 涓虹┖鎶汭llegalArgumentException锛屽仛鍏ㄥ眬寮傚父澶勭悊 Assert.notNull(entity, "璁板綍涓嶅瓨鍦�"); + // 鍒ゆ柇鑰冭瘯鐘舵�� + if (! ExamStatusEnum.NOT_START.equals(entity.getStatus())) { + throw new RuntimeException("鍙兘淇敼杩樻湭寮�濮嬬殑鑰冭瘯"); + } 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; + } + } + + /** * 鎵归噺鍒犻櫎 * * @param ids -- Gitblit v1.8.0