From 1b49db8ed8b0ff2a3343380f55a73d197d4b83e8 Mon Sep 17 00:00:00 2001 From: zhangye <654600784@qq.com> Date: Sat, 28 Dec 2019 14:46:29 +0800 Subject: [PATCH 1/2] =?UTF-8?q?mq=E6=8E=A5=E5=8F=97=E6=B6=88=E6=81=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ccsens/game/service/IMessageService.java | 2 + .../ccsens/game/service/MessageService.java | 10 +++++ .../ccsens/game/service/RabbitMQListener.java | 45 +++++++++++++++++++ .../ccsens/util/config/RabbitMQConfig.java | 5 +++ 4 files changed, 62 insertions(+) create mode 100644 game/src/main/java/com/ccsens/game/service/RabbitMQListener.java diff --git a/game/src/main/java/com/ccsens/game/service/IMessageService.java b/game/src/main/java/com/ccsens/game/service/IMessageService.java index ff664027..1d83362f 100644 --- a/game/src/main/java/com/ccsens/game/service/IMessageService.java +++ b/game/src/main/java/com/ccsens/game/service/IMessageService.java @@ -13,5 +13,7 @@ public interface IMessageService { void doAuthMessageWithAuth(ChannelHandlerContext ctx, AuthMessageDto message); void doChangeStatusMessageDto(GameMessageWithChangeStatusOut gameMessage); + + void doChangeStatusMessage(GameMessageWithChangeStatusOut gameMessageWithChangeStatusOut); } diff --git a/game/src/main/java/com/ccsens/game/service/MessageService.java b/game/src/main/java/com/ccsens/game/service/MessageService.java index 15b86754..7016a3da 100644 --- a/game/src/main/java/com/ccsens/game/service/MessageService.java +++ b/game/src/main/java/com/ccsens/game/service/MessageService.java @@ -92,4 +92,14 @@ public class MessageService implements IMessageService { } } } + + @Override + public void doChangeStatusMessage(GameMessageWithChangeStatusOut gameMessage) { + List messageUserList = gameMessage.getReceivers(); + if(CollectionUtil.isNotEmpty(messageUserList)){ + for(BaseMessageDto.MessageUser messageUser : messageUserList){ + sendTo(messageUser.getUserId().toString(),gameMessage); + } + } + } } diff --git a/game/src/main/java/com/ccsens/game/service/RabbitMQListener.java b/game/src/main/java/com/ccsens/game/service/RabbitMQListener.java new file mode 100644 index 00000000..d6970649 --- /dev/null +++ b/game/src/main/java/com/ccsens/game/service/RabbitMQListener.java @@ -0,0 +1,45 @@ +package com.ccsens.game.service; + + +import com.ccsens.game.bean.dto.message.BaseMessageDto; +import com.ccsens.game.bean.dto.message.ChromeMessageDto; +import com.ccsens.game.bean.dto.message.GameMessageWithChangeStatusOut; +import com.ccsens.util.JacksonUtil; +import com.ccsens.util.WebConstant; +import com.ccsens.util.config.RabbitMQConfig; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.amqp.rabbit.annotation.RabbitHandler; +import org.springframework.amqp.rabbit.annotation.RabbitListener; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + + +@Component +@RabbitListener(queues = RabbitMQConfig.GAME_STATUS) +public class RabbitMQListener { + private Logger logger = LoggerFactory.getLogger(RabbitMQListener.class); + @Autowired + private IMessageService messageService; + + @RabbitHandler + public void process(String messageJson) { + try { + System.out.println("Rabbit Received: " + messageJson); + BaseMessageDto baseMessage = JacksonUtil.jsonToBean(messageJson,BaseMessageDto.class); + WebConstant.Message_Type type = WebConstant.Message_Type.phaseOf(baseMessage.getType()); + switch (type){ + case ChangeStatus: + messageService.doChangeStatusMessage(JacksonUtil.jsonToBean(messageJson, GameMessageWithChangeStatusOut.class)); + break; + default: + break; + } + }catch (Exception e){ + e.printStackTrace(); + } + } + + + +} diff --git a/util/src/main/java/com/ccsens/util/config/RabbitMQConfig.java b/util/src/main/java/com/ccsens/util/config/RabbitMQConfig.java index 7c9659c5..b956f8e1 100644 --- a/util/src/main/java/com/ccsens/util/config/RabbitMQConfig.java +++ b/util/src/main/java/com/ccsens/util/config/RabbitMQConfig.java @@ -12,10 +12,15 @@ public class RabbitMQConfig { public static final String RabbitMQ_QUEUE_NAME = "Queue_Anyring"; public static final String TALL_MESSAGE_1 = "tall_message_1"; public static final String TALL_MESSAGE_2 = "tall_message_2"; + public static final String GAME_STATUS = "game_status"; public static final String GAME_STATUS_DELAY_SEND_QUEUE = "gameStatusDelaySendQueue"; public static final String GAME_STATUS_DELAY_SEND_EXCHANGE = "gameStatusDelaySendExchange"; public static final String GAME_STATUS_DELAY_SEND_ROUTING_KEY = "gameStatusDelaySendRoutingKey"; + @Bean + public Queue queue_game (){ + return new Queue(GAME_STATUS); + } @Bean public Queue queue (){ return new Queue(RabbitMQ_QUEUE_NAME); From 26ea1b6013cc9f60df978bfe567b8cb11d26ef09 Mon Sep 17 00:00:00 2001 From: zhangye <654600784@qq.com> Date: Sat, 28 Dec 2019 15:53:10 +0800 Subject: [PATCH 2/2] =?UTF-8?q?=E5=BC=80=E5=A7=8B=E4=BB=BB=E5=8A=A1?= =?UTF-8?q?=E6=B7=BB=E5=8A=A0player?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../dto/message/ChangeStatusMessageDto.java | 3 + .../GameMessageWithChangeStatusOut.java | 6 +- .../ccsens/game/service/MessageService.java | 12 ++-- .../ccsens/tall/service/IMessageService.java | 3 + .../ccsens/tall/service/MessageService.java | 9 ++- .../tall/service/TaskSubTimeService.java | 62 +++++++++++++------ 6 files changed, 70 insertions(+), 25 deletions(-) diff --git a/game/src/main/java/com/ccsens/game/bean/dto/message/ChangeStatusMessageDto.java b/game/src/main/java/com/ccsens/game/bean/dto/message/ChangeStatusMessageDto.java index 22408e64..356e5c1f 100644 --- a/game/src/main/java/com/ccsens/game/bean/dto/message/ChangeStatusMessageDto.java +++ b/game/src/main/java/com/ccsens/game/bean/dto/message/ChangeStatusMessageDto.java @@ -8,6 +8,9 @@ import java.util.List; @Data public class ChangeStatusMessageDto { + private Long userId; + private PendingData pendingData; + private CompletedData completedData; @Data @ApiModel("开始") diff --git a/game/src/main/java/com/ccsens/game/bean/dto/message/GameMessageWithChangeStatusOut.java b/game/src/main/java/com/ccsens/game/bean/dto/message/GameMessageWithChangeStatusOut.java index 834a2648..0c459b72 100644 --- a/game/src/main/java/com/ccsens/game/bean/dto/message/GameMessageWithChangeStatusOut.java +++ b/game/src/main/java/com/ccsens/game/bean/dto/message/GameMessageWithChangeStatusOut.java @@ -5,6 +5,8 @@ import lombok.Data; import lombok.Getter; import lombok.Setter; +import java.util.List; + @Data public class GameMessageWithChangeStatusOut extends BaseMessageDto{ @Setter @@ -12,7 +14,7 @@ public class GameMessageWithChangeStatusOut extends BaseMessageDto{ public static class Data{ private Long recordId; private int gameStatus; - private ChangeStatusMessageDto changeStatusMessageDto; + private List changeStatusMessageDto; } private Data data; @@ -22,7 +24,7 @@ public class GameMessageWithChangeStatusOut extends BaseMessageDto{ setTime(System.currentTimeMillis()); } - public GameMessageWithChangeStatusOut(Long recordId,int gameStatus,ChangeStatusMessageDto changeStatusMessageDto){ + public GameMessageWithChangeStatusOut(Long recordId,int gameStatus,List changeStatusMessageDto){ this(); Data d = new Data(); d.setRecordId(recordId); diff --git a/game/src/main/java/com/ccsens/game/service/MessageService.java b/game/src/main/java/com/ccsens/game/service/MessageService.java index 7016a3da..969e2f5a 100644 --- a/game/src/main/java/com/ccsens/game/service/MessageService.java +++ b/game/src/main/java/com/ccsens/game/service/MessageService.java @@ -93,12 +93,16 @@ public class MessageService implements IMessageService { } } + /** + * 发送状态改变的消息 + * @param gameMessage + */ @Override public void doChangeStatusMessage(GameMessageWithChangeStatusOut gameMessage) { - List messageUserList = gameMessage.getReceivers(); - if(CollectionUtil.isNotEmpty(messageUserList)){ - for(BaseMessageDto.MessageUser messageUser : messageUserList){ - sendTo(messageUser.getUserId().toString(),gameMessage); + List changeStatusMessageDtoList = gameMessage.getData().getChangeStatusMessageDto(); + if(CollectionUtil.isNotEmpty(changeStatusMessageDtoList)){ + for(ChangeStatusMessageDto changeStatus : changeStatusMessageDtoList){ + sendTo(changeStatus.getUserId().toString(),gameMessage); } } } diff --git a/tall/src/main/java/com/ccsens/tall/service/IMessageService.java b/tall/src/main/java/com/ccsens/tall/service/IMessageService.java index 9cba185e..0e2f3230 100644 --- a/tall/src/main/java/com/ccsens/tall/service/IMessageService.java +++ b/tall/src/main/java/com/ccsens/tall/service/IMessageService.java @@ -3,6 +3,7 @@ package com.ccsens.tall.service; import com.ccsens.tall.bean.dto.message.DeliverMessageWithCheckerDto; import com.ccsens.tall.bean.dto.message.DeliverMessageWithDeleteDto; import com.ccsens.tall.bean.dto.message.DeliverMessageWithUploadDto; +import com.ccsens.tall.bean.dto.message.SyncMessageWithStartDto; import com.ccsens.util.bean.message.common.InMessage; public interface IMessageService { @@ -13,4 +14,6 @@ public interface IMessageService { void sendDeliverMessageWithChecker(InMessage inMessage)throws Exception; void sendDeliverMessageWithDelete(InMessage inMessage)throws Exception; + + void sendStartTaskMessage(SyncMessageWithStartDto syncMessage)throws Exception; } diff --git a/tall/src/main/java/com/ccsens/tall/service/MessageService.java b/tall/src/main/java/com/ccsens/tall/service/MessageService.java index 52233b12..c2dc10f2 100644 --- a/tall/src/main/java/com/ccsens/tall/service/MessageService.java +++ b/tall/src/main/java/com/ccsens/tall/service/MessageService.java @@ -60,7 +60,7 @@ public class MessageService implements IMessageService{ SyncMessageWithStartDto message = new SyncMessageWithStartDto(projectId, sender, receivers, roleId, taskId, null, time, duration,player); //FixMe 发送到消息队列 - System.out.println(message); + System.out.println("+++++++++++++"+JacksonUtil.beanToJson(message)); rabbitTemplate.convertAndSend(RabbitMQConfig.RabbitMQ_QUEUE_NAME, JacksonUtil.beanToJson(message)); } @@ -89,4 +89,11 @@ public class MessageService implements IMessageService{ JacksonUtil.beanToJson(inMessage)); } + @Override + public void sendStartTaskMessage(SyncMessageWithStartDto syncMessage) throws Exception { + System.out.println(JacksonUtil.beanToJson(syncMessage)); + //FixMe 发送到消息队列 + rabbitTemplate.convertAndSend(RabbitMQConfig.TALL_MESSAGE_1 , + JacksonUtil.beanToJson(syncMessage)); + } } diff --git a/tall/src/main/java/com/ccsens/tall/service/TaskSubTimeService.java b/tall/src/main/java/com/ccsens/tall/service/TaskSubTimeService.java index 32eb4a90..022790a9 100644 --- a/tall/src/main/java/com/ccsens/tall/service/TaskSubTimeService.java +++ b/tall/src/main/java/com/ccsens/tall/service/TaskSubTimeService.java @@ -6,6 +6,8 @@ import cn.hutool.core.lang.Snowflake; import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.StrUtil; import com.ccsens.tall.bean.dto.TaskDto; +import com.ccsens.tall.bean.dto.message.BaseMessageDto; +import com.ccsens.tall.bean.dto.message.SyncMessageWithStartDto; import com.ccsens.tall.bean.po.*; import com.ccsens.tall.bean.vo.TaskVo; import com.ccsens.tall.persist.dao.*; @@ -21,6 +23,7 @@ import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Propagation; import org.springframework.transaction.annotation.Transactional; +import java.util.ArrayList; import java.util.Date; import java.util.List; @@ -196,25 +199,48 @@ public class TaskSubTimeService implements ITaskSubTimeService { player = taskDetail.getDescription(); } -// if(ObjectUtil.isNotNull(taskDetail)){ -// if(taskDetail.getAllMember() == 0){ -// ProTaskMemberExample taskMemberExample = new ProTaskMemberExample(); -// taskMemberExample.createCriteria().andTaskDetailIdEqualTo(taskDetail.getId()); -// List taskMemberList = taskMemberDao.selectByExample(taskMemberExample); -// if(CollectionUtil.isNotEmpty(taskMemberList)){ -// ProMember member = proMemberDao.selectByPrimaryKey(taskMemberList.get(0).getMemberId()); -// player = member.getNickname(); -// } -// } -// } - - //发送同步消息 - SysProject project = sysProjectDao.selectByPrimaryKey(startTaskDto.getProjectId()); - //已发布的项目才同步 - if (ObjectUtil.isNotNull(project.getPublished()) && project.getPublished() == 1) { - messageService.sendSyncMessageWithStart(currentUserId, startTaskDto.getProjectId(), startTaskDto.getRoleId(), taskSubTime.getTaskDetailId(), now, - taskSubTime.getEndTime() - taskSubTime.getBeginTime(),player); + //发送消息 + SyncMessageWithStartDto syncMessage = new SyncMessageWithStartDto(); + SyncMessageWithStartDto.Data syncMessageData = new SyncMessageWithStartDto.Data(); + syncMessageData.setPlayer(player); + syncMessageData.setBeginTaskId(taskSubTime.getTaskDetailId()); + syncMessageData.setDuration(taskSubTime.getEndTime() - taskSubTime.getBeginTime()); + syncMessageData.setTime(now); + //接收者 + List messageUserList = new ArrayList<>(); + ProMemberExample memberExample = new ProMemberExample(); + memberExample.createCriteria().andProjectIdEqualTo(startTaskDto.getProjectId()); + List memberList = proMemberDao.selectByExample(memberExample); + if(CollectionUtil.isNotEmpty(memberList)){ + for(ProMember member:memberList){ + if(ObjectUtil.isNotNull(member.getUserId())){ + BaseMessageDto.MessageUser messageUser = new BaseMessageDto.MessageUser(); + messageUser.setUserId(member.getUserId()); + messageUserList.add(messageUser); + } + } } + BaseMessageDto.MessageUser messageUser1990 = new BaseMessageDto.MessageUser(); + messageUser1990.setUserId(1990L); + messageUserList.add(messageUser1990); + BaseMessageDto.MessageUser messageUser1991 = new BaseMessageDto.MessageUser(); + messageUser1991.setUserId(1991L); + messageUserList.add(messageUser1991); + BaseMessageDto.MessageUser messageUser1996 = new BaseMessageDto.MessageUser(); + messageUser1996.setUserId(1996L); + messageUserList.add(messageUser1996); + + syncMessage.setData(syncMessageData); + syncMessage.setReceivers(messageUserList); + messageService.sendStartTaskMessage(syncMessage); + +// //发送同步消息 +// SysProject project = sysProjectDao.selectByPrimaryKey(startTaskDto.getProjectId()); +// //已发布的项目才同步 +// if (ObjectUtil.isNotNull(project.getPublished()) && project.getPublished() == 1) { +// messageService.sendSyncMessageWithStart(currentUserId, startTaskDto.getProjectId(), startTaskDto.getRoleId(), taskSubTime.getTaskDetailId(), now, +// taskSubTime.getEndTime() - taskSubTime.getBeginTime(),player); +// } //3.添加记录 proLogService.addNewProLog(now, taskSubTime.getId(), WebConstant.TASK_Execute_Type.Start.value,