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