diff --git a/game/src/main/java/com/ccsens/game/bean/vo/ScreenVo.java b/game/src/main/java/com/ccsens/game/bean/vo/ScreenVo.java index 8373b4df..e22a0433 100644 --- a/game/src/main/java/com/ccsens/game/bean/vo/ScreenVo.java +++ b/game/src/main/java/com/ccsens/game/bean/vo/ScreenVo.java @@ -68,7 +68,7 @@ public class ScreenVo { @ApiModel("进行中") public static class ProcessingData{ @ApiModelProperty("前十名的信息") - private List topUsers; + private List topUsers; } @Data @@ -82,6 +82,8 @@ public class ScreenVo { private int averageTimes; @ApiModelProperty("平均次数超过百分之多少人") private int over; + @ApiModelProperty("前十名的信息") + private List members; } @Data diff --git a/game/src/main/java/com/ccsens/game/persist/dao/GameUserJoinDao.java b/game/src/main/java/com/ccsens/game/persist/dao/GameUserJoinDao.java index 2f23852b..fb5a2f2a 100644 --- a/game/src/main/java/com/ccsens/game/persist/dao/GameUserJoinDao.java +++ b/game/src/main/java/com/ccsens/game/persist/dao/GameUserJoinDao.java @@ -2,6 +2,7 @@ package com.ccsens.game.persist.dao; import com.ccsens.game.bean.dto.message.ChangeStatusMessageDto; import com.ccsens.game.bean.vo.ClientVo; +import com.ccsens.game.bean.vo.ScreenVo; import com.ccsens.game.persist.mapper.GameUserJoinMapper; import org.apache.ibatis.annotations.Param; import org.springframework.stereotype.Repository; @@ -43,4 +44,6 @@ public interface GameUserJoinDao extends GameUserJoinMapper { */ int overNum(@Param("recordId") Long recordId, @Param("score") Integer score); + List selectTopTen(@Param("recordId") Long recordId); + } diff --git a/game/src/main/java/com/ccsens/game/service/ClientService.java b/game/src/main/java/com/ccsens/game/service/ClientService.java index 598da392..aef0385b 100644 --- a/game/src/main/java/com/ccsens/game/service/ClientService.java +++ b/game/src/main/java/com/ccsens/game/service/ClientService.java @@ -31,7 +31,9 @@ import org.springframework.transaction.annotation.Transactional; import com.ccsens.util.bean.dto.QueryDto; import java.util.ArrayList; +import java.util.HashMap; import java.util.List; +import java.util.Map; import java.util.concurrent.Executors; import java.util.concurrent.ScheduledExecutorService; import java.util.concurrent.TimeUnit; @@ -58,10 +60,9 @@ public class ClientService implements IClientService { @Autowired private TallFeignClient tallFeignClient; @Autowired - private DelayProducer delaySender; - @Autowired private SendMsg sendMsg; + @Override public ClientVo.Join join(ClientDto.Join join, Long userId){ log.info("加入游戏:{}, userId:{}", join, userId); @@ -230,6 +231,14 @@ public class ClientService implements IClientService { PageHelper.startPage(gatRanking.getPageNum(), gatRanking.getPageSize()); List memberInfo = gameUserJoinDao.selectByRecordId(gatRanking.getRecordId()); + List rankingAllList = gameUserJoinDao.getAllRanking(gatRanking.getRecordId()); + Map map = new HashMap<>(); + rankingAllList.forEach(ranking -> { + map.put(String.valueOf(ranking.getUserId()), ranking.getRank()); + }); + memberInfo.forEach(member -> { + member.setSort(map.get(String.valueOf(member.getId()))); + }); log.info("查询成员信息"); PageInfo pageInfo =new PageInfo<>(memberInfo); @@ -253,7 +262,12 @@ public class ClientService implements IClientService { userJoin.setTimes(userJoin.getTimes() + 1); userJoin.setScore(userJoin.getScore() + 1); gameUserJoinDao.updateByPrimaryKeySelective(userJoin); - + //更新redis + ClientDto.RedisUser user = new ClientDto.RedisUser(); + user.setId(userJoin.getId()); + user.setAvatarurl(userJoin.getAvatarUrl()); + user.setNickname(userJoin.getNickname()); + redisUtil.zsSet(GameConstant.generateGameKey(Long.parseLong(recordId)), JSON.toJSONString(user), userJoin.getScore(), GameConstant.REDIS_TIME); gameMessageCountOut = new GameMessageCountOut(userJoin.getTimes(),userJoin.getScore()); } } 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 1d83362f..5d918847 100644 --- a/game/src/main/java/com/ccsens/game/service/IMessageService.java +++ b/game/src/main/java/com/ccsens/game/service/IMessageService.java @@ -4,6 +4,8 @@ import com.ccsens.game.bean.dto.message.*; import com.fasterxml.jackson.core.JsonProcessingException; import io.netty.channel.ChannelHandlerContext; +import java.util.List; + public interface IMessageService { //获取路径后给每个人发送游戏路径消息 void sendGameMessageWithGetUrl(ChromeMessageDto message) throws Exception; @@ -14,6 +16,6 @@ public interface IMessageService { void doChangeStatusMessageDto(GameMessageWithChangeStatusOut gameMessage); - void doChangeStatusMessage(GameMessageWithChangeStatusOut gameMessageWithChangeStatusOut); + void doChangeStatusMessage(List 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 5402cf70..fe533c07 100644 --- a/game/src/main/java/com/ccsens/game/service/MessageService.java +++ b/game/src/main/java/com/ccsens/game/service/MessageService.java @@ -96,15 +96,20 @@ public class MessageService implements IMessageService { /** * 发送状态改变的消息 - * @param gameMessage + * @param gameMessages */ @Override - public void doChangeStatusMessage(GameMessageWithChangeStatusOut gameMessage) { - List changeStatusMessageDtoList = gameMessage.getData().getChangeStatusMessageDto(); - if(CollectionUtil.isNotEmpty(changeStatusMessageDtoList)){ - for(ChangeStatusMessageDto changeStatus : changeStatusMessageDtoList){ - sendTo(changeStatus.getUserId().toString(),gameMessage); - } + public void doChangeStatusMessage(List gameMessages) { + if(CollectionUtil.isNotEmpty(gameMessages)){ + gameMessages.forEach(gameMessage ->{ + sendTo(gameMessage.getUserId().toString(),gameMessage.getData()); +// List changeStatusMessageDtoList = gameMessage.getData().getChangeStatusMessageDto(); +// if(CollectionUtil.isNotEmpty(changeStatusMessageDtoList)){ +// for(ChangeStatusMessageDto changeStatus : changeStatusMessageDtoList){ +// sendTo(changeStatus.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 index d6970649..a983c253 100644 --- a/game/src/main/java/com/ccsens/game/service/RabbitMQListener.java +++ b/game/src/main/java/com/ccsens/game/service/RabbitMQListener.java @@ -14,6 +14,8 @@ import org.springframework.amqp.rabbit.annotation.RabbitListener; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; +import java.util.List; + @Component @RabbitListener(queues = RabbitMQConfig.GAME_STATUS) @@ -23,23 +25,9 @@ public class RabbitMQListener { 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(); - } - } - + public void process(List messageJson) { + System.out.println("*************"+messageJson); - -} + messageService.doChangeStatusMessage(messageJson); + } +} \ No newline at end of file diff --git a/game/src/main/java/com/ccsens/game/service/ScreenService.java b/game/src/main/java/com/ccsens/game/service/ScreenService.java index f282163e..12e0d933 100644 --- a/game/src/main/java/com/ccsens/game/service/ScreenService.java +++ b/game/src/main/java/com/ccsens/game/service/ScreenService.java @@ -15,6 +15,7 @@ import com.ccsens.game.persist.dao.*; import com.ccsens.game.util.GameConstant; import com.ccsens.game.util.SendMsg; import com.ccsens.util.CodeEnum; +import com.ccsens.util.RedisUtil; import com.ccsens.util.WebConstant; import com.ccsens.util.bean.dto.QueryDto; import com.ccsens.util.exception.BaseException; @@ -60,6 +61,8 @@ public class ScreenService implements IScreenService{ private RabbitTemplate rabbitTemplate; @Autowired private SendMsg sendMsg; + @Autowired + private RedisUtil redisUtil; /** * 传入用户信息,返回游戏大屏路径 @@ -257,13 +260,22 @@ public class ScreenService implements IScreenService{ break; case 2: // TODO + List tops = gameUserJoinDao.selectTopTen(gameRecord.getId()); + ScreenVo.ProcessingData processingData = new ScreenVo.ProcessingData(); + processingData.setTopUsers(tops); + gameStatusVo.setProcessingData(processingData); + + break; case 3: ScreenVo.CompletedData completedData = new ScreenVo.CompletedData(); if(CollectionUtil.isNotEmpty(userJoinList)){ completedData = getCompletedData(userJoinList); } + List top2 = gameUserJoinDao.selectTopTen(gameRecord.getId()); + completedData.setMembers(top2); gameStatusVo.setCompletedData(completedData); + break; default: break; @@ -422,7 +434,6 @@ public class ScreenService implements IScreenService{ gameRecord.setTimeDifference((int)moreTime); gameRecordDao.updateByPrimaryKeySelective(gameRecord); - //TODO //延时通知 long startSend = gameRecord.getStartTime() - System.currentTimeMillis(); long endSend = gameRecord.getEndTime() - System.currentTimeMillis(); diff --git a/game/src/main/java/com/ccsens/game/util/SendMsg.java b/game/src/main/java/com/ccsens/game/util/SendMsg.java index 1c163540..950d16b0 100644 --- a/game/src/main/java/com/ccsens/game/util/SendMsg.java +++ b/game/src/main/java/com/ccsens/game/util/SendMsg.java @@ -39,20 +39,17 @@ public class SendMsg { outs.add(getMsg(gameRecord, join, status)); }); if (CollectionUtil.isNotEmpty(outs)) { - try { - rabbitTemplate.convertAndSend(RabbitMQConfig.RabbitMQ_QUEUE_NAME, - JacksonUtil.beanToJson(outs)); - } catch (JsonProcessingException e) { - e.printStackTrace(); - log.error("通知游戏状态变更mq异常"); + System.out.println("==================="+outs); + rabbitTemplate.convertAndSend(RabbitMQConfig.GAME_STATUS, + outs); - } } } public GameMessageWithChangeStatusOut getMsg(GameRecord gameRecord, GameUserJoin join, byte gameStatus) { GameMessageWithChangeStatusOut out = new GameMessageWithChangeStatusOut(); GameMessageWithChangeStatusOut.Data data = new GameMessageWithChangeStatusOut.Data(); + data.setRecordId(gameRecord.getId()); data.setGameStatus(gameStatus); out.setUserId(join.getUserId()); @@ -66,7 +63,7 @@ public class SendMsg { completedData.setOver(0); } else { int num = gameUserJoinDao.overNum(gameRecord.getId(), completedData.getAverageTimes()); - completedData.setOver(completedData.getTotalMembers() == null || completedData.getTotalMembers().longValue() == 0 ? 100 : num/completedData.getTotalMembers() * 100); + completedData.setOver(completedData.getTotalMembers() == null || completedData.getTotalMembers().longValue() == 0 ? 100 : num / completedData.getTotalMembers() * 100); } dtos.setCompletedData(completedData); } else { @@ -81,6 +78,7 @@ public class SendMsg { /** * 定时任务 + * * @param executor * @param delayTime * @param runnable diff --git a/game/src/main/resources/mapper_dao/GameUserJoinDao.xml b/game/src/main/resources/mapper_dao/GameUserJoinDao.xml index 0f80a5e2..291b591b 100644 --- a/game/src/main/resources/mapper_dao/GameUserJoinDao.xml +++ b/game/src/main/resources/mapper_dao/GameUserJoinDao.xml @@ -9,9 +9,17 @@ + +