From ae58bdb65b5c0f052801a291a7b48916bc2d5730 Mon Sep 17 00:00:00 2001
From: fuliqi <fuliqi@qq.com>
Date: 星期四, 04 七月 2024 13:57:09 +0800
Subject: [PATCH] 会议mq代码(待测试)

---
 src/main/java/com/ycl/jxkg/rabbitmq/msg/MeetStatusMsg.java      |   26 ++++++++
 src/main/java/com/ycl/jxkg/rabbitmq/product/Producer.java       |    9 ++
 src/main/java/com/ycl/jxkg/service/MeetService.java             |    2 
 src/main/java/com/ycl/jxkg/rabbitmq/consumer/Consumer.java      |   15 ++++
 src/main/java/com/ycl/jxkg/controller/admin/MeetController.java |    6 +
 src/main/java/com/ycl/jxkg/service/impl/MeetServiceImpl.java    |   67 +++++++++++++++++-----
 src/main/java/com/ycl/jxkg/domain/entity/Meet.java              |    3 +
 7 files changed, 108 insertions(+), 20 deletions(-)

diff --git a/src/main/java/com/ycl/jxkg/controller/admin/MeetController.java b/src/main/java/com/ycl/jxkg/controller/admin/MeetController.java
index 04bc5f7..2882416 100644
--- a/src/main/java/com/ycl/jxkg/controller/admin/MeetController.java
+++ b/src/main/java/com/ycl/jxkg/controller/admin/MeetController.java
@@ -43,7 +43,11 @@
     public Result update(@RequestBody @Validated(Update.class) MeetForm form) {
         return meetService.update(form);
     }
-
+    @PutMapping("/start")
+    @ApiOperation(value = "寮�濮嬩笂璇�", notes = "寮�濮嬩笂璇�")
+    public Result start(@RequestBody @Validated(Update.class) MeetForm form) {
+        return meetService.start(form);
+    }
     @DeleteMapping("/{id}")
     @ApiOperation(value = "ID鍒犻櫎", notes = "ID鍒犻櫎")
     public Result removeById(@PathVariable("id") String id) {
diff --git a/src/main/java/com/ycl/jxkg/domain/entity/Meet.java b/src/main/java/com/ycl/jxkg/domain/entity/Meet.java
index 04cdced..6140e79 100644
--- a/src/main/java/com/ycl/jxkg/domain/entity/Meet.java
+++ b/src/main/java/com/ycl/jxkg/domain/entity/Meet.java
@@ -2,6 +2,7 @@
 
 import com.baomidou.mybatisplus.annotation.TableField;
 import com.baomidou.mybatisplus.annotation.TableName;
+import com.baomidou.mybatisplus.annotation.Version;
 import com.ycl.jxkg.domain.base.AbsEntity;
 import lombok.Data;
 
@@ -47,4 +48,6 @@
     /** 鐘舵�� 0/1/2 鏈紑濮�/杩涜涓�/宸茬粨鏉� */
     private Integer status;
 
+    @Version
+    private Integer updateVersion;
 }
diff --git a/src/main/java/com/ycl/jxkg/rabbitmq/consumer/Consumer.java b/src/main/java/com/ycl/jxkg/rabbitmq/consumer/Consumer.java
index 7dee25c..8d05fb7 100644
--- a/src/main/java/com/ycl/jxkg/rabbitmq/consumer/Consumer.java
+++ b/src/main/java/com/ycl/jxkg/rabbitmq/consumer/Consumer.java
@@ -3,9 +3,12 @@
 import com.alibaba.fastjson2.JSON;
 import com.baomidou.mybatisplus.extension.conditions.update.LambdaUpdateChainWrapper;
 import com.ycl.jxkg.domain.entity.Exam;
+import com.ycl.jxkg.domain.entity.Meet;
 import com.ycl.jxkg.enums.general.ExamStatusEnum;
 import com.ycl.jxkg.mapper.ExamMapper;
+import com.ycl.jxkg.mapper.MeetMapper;
 import com.ycl.jxkg.rabbitmq.msg.ExamStatusMsg;
+import com.ycl.jxkg.rabbitmq.msg.MeetStatusMsg;
 import lombok.RequiredArgsConstructor;
 import org.springframework.amqp.core.Message;
 import org.springframework.amqp.rabbit.annotation.*;
@@ -22,7 +25,7 @@
 public class Consumer {
 
     private final ExamMapper examMapper;
-
+    private final MeetMapper meetMapper;
     /**
      * 鑰冭瘯鐘舵�佹洿鏂扮殑娑堣垂鑰�
      *
@@ -50,6 +53,14 @@
      */
     @RabbitListener(queues = "meetDlxQueue")
     public void meetConsumer(Message message){
-        System.out.println(message);
+        MeetStatusMsg meetStatusMsg = JSON.parseObject(message.getBody(), MeetStatusMsg.class);
+        Meet meet = meetMapper.selectById(meetStatusMsg.getMeetId());
+        if (Objects.nonNull(meet) && meetStatusMsg.getVersion().equals(meet.getUpdateVersion())) {
+            // 涓嶄娇鐢╱pdateById杩欑鏂瑰紡锛岄伩鍏嶄箰瑙傞攣鍔犱竴銆�
+            new LambdaUpdateChainWrapper<>(meetMapper)
+                    .eq(Meet::getId, meet.getId())
+                    .set(Meet::getStatus, meetStatusMsg.getMeetStatus())
+                    .update();
+        }
     }
 }
diff --git a/src/main/java/com/ycl/jxkg/rabbitmq/msg/MeetStatusMsg.java b/src/main/java/com/ycl/jxkg/rabbitmq/msg/MeetStatusMsg.java
new file mode 100644
index 0000000..c233893
--- /dev/null
+++ b/src/main/java/com/ycl/jxkg/rabbitmq/msg/MeetStatusMsg.java
@@ -0,0 +1,26 @@
+package com.ycl.jxkg.rabbitmq.msg;
+
+import com.ycl.jxkg.enums.MeetStatusEnum;
+import com.ycl.jxkg.enums.general.ExamStatusEnum;
+import lombok.Data;
+
+/**
+ * @author锛歺p
+ * @date锛�2024/7/1 14:15
+ */
+@Data
+public class MeetStatusMsg extends MqMsg {
+
+    /**
+     * 浼氳ID
+     *
+     */
+    private Integer meetId;
+
+    /**
+     * 杩欐潯娑堟伅甯屾湜灏嗕細璁姸鎬佷慨鏀逛负鍝釜
+     *
+     */
+    private Integer meetStatus;
+
+}
diff --git a/src/main/java/com/ycl/jxkg/rabbitmq/product/Producer.java b/src/main/java/com/ycl/jxkg/rabbitmq/product/Producer.java
index eb1420d..cbb528e 100644
--- a/src/main/java/com/ycl/jxkg/rabbitmq/product/Producer.java
+++ b/src/main/java/com/ycl/jxkg/rabbitmq/product/Producer.java
@@ -37,8 +37,13 @@
         rabbitTemplate.convertAndSend("examExchange", "exam", message, msgCorrelationData);
     }
 
-    public void meetMsg(Integer examId, String jsonMsg, Long delayTime) {
-        rabbitTemplate.convertAndSend("examExchange","meet", "浣犲ソ锛孯abbitMQ");
+    public void meetMsg(Integer meetId, String jsonMsg, Long delayTime) {
+        MessageProperties messageProperties = new MessageProperties();
+        messageProperties.setExpiration(delayTime + "");
+        Message message = MessageBuilder.withBody(jsonMsg.getBytes()).andProperties(messageProperties).build();
+        // 璁剧疆娑堟伅鐨勫叧鑱旀暟鎹紝浠ヤ究鍙戦�佺‘璁ゅ洖璋冦�佹湭璺敱鎴愬姛娑堟伅鐨勫鐞�
+        MyCorrelationData msgCorrelationData = new MyCorrelationData(meetId + "", RabbitMqMsgTypeEnum.MEET);
+        rabbitTemplate.convertAndSend("meetExchange", "meet", message, msgCorrelationData);
     }
 
 }
diff --git a/src/main/java/com/ycl/jxkg/service/MeetService.java b/src/main/java/com/ycl/jxkg/service/MeetService.java
index 82d4bbc..1087fe7 100644
--- a/src/main/java/com/ycl/jxkg/service/MeetService.java
+++ b/src/main/java/com/ycl/jxkg/service/MeetService.java
@@ -64,4 +64,6 @@
     Result all();
 
     Result studentPage(MeetQuery query);
+
+    Result start(MeetForm form);
 }
diff --git a/src/main/java/com/ycl/jxkg/service/impl/MeetServiceImpl.java b/src/main/java/com/ycl/jxkg/service/impl/MeetServiceImpl.java
index 77687d9..147057f 100644
--- a/src/main/java/com/ycl/jxkg/service/impl/MeetServiceImpl.java
+++ b/src/main/java/com/ycl/jxkg/service/impl/MeetServiceImpl.java
@@ -1,30 +1,31 @@
 package com.ycl.jxkg.service.impl;
 
-import com.alibaba.fastjson2.JSONArray;
+import com.alibaba.fastjson2.JSON;
 import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.conditions.update.LambdaUpdateChainWrapper;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.ycl.jxkg.base.Result;
 import com.ycl.jxkg.base.SystemCode;
 import com.ycl.jxkg.context.WebContext;
 import com.ycl.jxkg.domain.entity.Meet;
+import com.ycl.jxkg.domain.form.MeetForm;
+import com.ycl.jxkg.domain.query.MeetQuery;
+import com.ycl.jxkg.domain.vo.MeetVO;
 import com.ycl.jxkg.enums.MeetStatusEnum;
 import com.ycl.jxkg.mapper.ClassesUserMapper;
 import com.ycl.jxkg.mapper.MeetMapper;
+import com.ycl.jxkg.rabbitmq.msg.MeetStatusMsg;
+import com.ycl.jxkg.rabbitmq.product.Producer;
 import com.ycl.jxkg.service.MeetService;
-import com.ycl.jxkg.base.Result;
-import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
-import com.ycl.jxkg.domain.form.MeetForm;
-import com.ycl.jxkg.domain.vo.MeetVO;
-import com.ycl.jxkg.domain.query.MeetQuery;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.security.core.context.SecurityContextHolder;
-import org.springframework.security.core.userdetails.User;
-import org.springframework.stereotype.Service;
-import lombok.RequiredArgsConstructor;
+import com.ycl.jxkg.utils.DateTimeUtil;
 import com.ycl.jxkg.utils.PageUtil;
+import lombok.RequiredArgsConstructor;
 import org.springframework.beans.BeanUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
 import org.springframework.util.Assert;
 import org.springframework.util.CollectionUtils;
-
-import java.util.ArrayList;
+import java.util.Date;
 import java.util.List;
 import java.util.stream.Collectors;
 
@@ -44,6 +45,7 @@
     private WebContext webContext;
     @Autowired
     private ClassesUserMapper classesUserMapper;
+    private final Producer producer;
     /**
      * 娣诲姞
      * @param form
@@ -54,7 +56,11 @@
         Meet entity = MeetForm.getEntityByForm(form, null);
         entity.setStatus(MeetStatusEnum.Wait.getCode());
         entity.setCreateUser(webContext.getCurrentUser().getId());
-        baseMapper.insert(entity);
+        // 璁剧疆涔愯閿佺増鏈�
+        entity.setUpdateVersion(0);
+        if (baseMapper.insert(entity) > 0) {
+            this.sendMQ(entity, 0);
+        }
         return Result.ok("娣诲姞鎴愬姛");
     }
 
@@ -70,7 +76,10 @@
         // 涓虹┖鎶汭llegalArgumentException锛屽仛鍏ㄥ眬寮傚父澶勭悊
         Assert.notNull(entity, "璁板綍涓嶅瓨鍦�");
         BeanUtils.copyProperties(form, entity);
-        baseMapper.updateById(entity);
+        // 濡傛灉淇敼鎴愬姛鍙戦�乵q娑堟伅
+        if (baseMapper.updateById(entity) > 0) {
+            this.sendMQ(entity, entity.getUpdateVersion() + 1);
+        }
         return Result.ok("淇敼鎴愬姛");
     }
 
@@ -132,6 +141,19 @@
         return Result.ok().data(page.getRecords()).total(page.getTotal());
     }
 
+    @Override
+    public Result start(MeetForm form) {
+        Meet entity = baseMapper.selectById(form.getId());
+        // 涓虹┖鎶汭llegalArgumentException锛屽仛鍏ㄥ眬寮傚父澶勭悊
+        Assert.notNull(entity, "璁板綍涓嶅瓨鍦�");
+        BeanUtils.copyProperties(form, entity);
+        // 涓嶄娇鐢╱pdateById杩欑鏂瑰紡锛岄伩鍏嶄箰瑙傞攣鍔犱竴銆�
+        new LambdaUpdateChainWrapper<>(meetMapper)
+                .eq(Meet::getId, entity.getId())
+                .update();
+        return Result.ok();
+    }
+
     /**
      * 鏍规嵁id鏌ユ壘
      * @param id
@@ -160,4 +182,19 @@
                 .collect(Collectors.toList());
         return Result.ok().data(vos);
     }
+
+    /**
+     * 鍙戦�乵q娑堟伅
+     *
+     * @param entity 鑰冭瘯瀹炰綋绫�
+     * @param version 涔愯閿佺増鏈�
+     */
+    public void sendMQ(Meet entity, Integer version) {
+        MeetStatusMsg finishedMsg = new MeetStatusMsg();
+        finishedMsg.setVersion(version);
+        finishedMsg.setMeetId(entity.getId());
+        finishedMsg.setMeetStatus(MeetStatusEnum.End.getCode());
+        producer.meetMsg(entity.getId(), JSON.toJSONString(finishedMsg), DateTimeUtil.getTwoTimeDiffMS(entity.getEndTime(), new Date()));
+    }
+
 }

--
Gitblit v1.8.0