From 626bb3aa189053a742cf04f66929f2a54fc9695c Mon Sep 17 00:00:00 2001 From: xiangpei <xiangpei@timesnew.cn> Date: 星期四, 04 七月 2024 15:38:21 +0800 Subject: [PATCH] Merge remote-tracking branch 'origin/dev' into dev --- 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