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