Browse Source

前十名

master
zhangye 6 years ago
parent
commit
2cdd1ba058
  1. 4
      game/src/main/java/com/ccsens/game/bean/vo/ScreenVo.java
  2. 3
      game/src/main/java/com/ccsens/game/persist/dao/GameUserJoinDao.java
  3. 20
      game/src/main/java/com/ccsens/game/service/ClientService.java
  4. 4
      game/src/main/java/com/ccsens/game/service/IMessageService.java
  5. 19
      game/src/main/java/com/ccsens/game/service/MessageService.java
  6. 26
      game/src/main/java/com/ccsens/game/service/RabbitMQListener.java
  7. 13
      game/src/main/java/com/ccsens/game/service/ScreenService.java
  8. 14
      game/src/main/java/com/ccsens/game/util/SendMsg.java
  9. 10
      game/src/main/resources/mapper_dao/GameUserJoinDao.xml

4
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<GameUserJoin> topUsers;
private List<TopUsers> topUsers;
}
@Data
@ -82,6 +82,8 @@ public class ScreenVo {
private int averageTimes;
@ApiModelProperty("平均次数超过百分之多少人")
private int over;
@ApiModelProperty("前十名的信息")
private List<TopUsers> members;
}
@Data

3
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<ScreenVo.TopUsers> selectTopTen(@Param("recordId") Long recordId);
}

20
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<ClientVo.MemberInfo> memberInfo = gameUserJoinDao.selectByRecordId(gatRanking.getRecordId());
List<ClientVo.Ranking> rankingAllList = gameUserJoinDao.getAllRanking(gatRanking.getRecordId());
Map<String, Integer> 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());
}
}

4
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> gameMessageWithChangeStatusOut);
}

19
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<ChangeStatusMessageDto> changeStatusMessageDtoList = gameMessage.getData().getChangeStatusMessageDto();
if(CollectionUtil.isNotEmpty(changeStatusMessageDtoList)){
for(ChangeStatusMessageDto changeStatus : changeStatusMessageDtoList){
sendTo(changeStatus.getUserId().toString(),gameMessage);
}
public void doChangeStatusMessage(List<GameMessageWithChangeStatusOut> gameMessages) {
if(CollectionUtil.isNotEmpty(gameMessages)){
gameMessages.forEach(gameMessage ->{
sendTo(gameMessage.getUserId().toString(),gameMessage.getData());
// List<ChangeStatusMessageDto> changeStatusMessageDtoList = gameMessage.getData().getChangeStatusMessageDto();
// if(CollectionUtil.isNotEmpty(changeStatusMessageDtoList)){
// for(ChangeStatusMessageDto changeStatus : changeStatusMessageDtoList){
// sendTo(changeStatus.getUserId().toString(),gameMessage);
// }
// }
});
}
}
}

26
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<GameMessageWithChangeStatusOut> messageJson) {
System.out.println("*************"+messageJson);
}
messageService.doChangeStatusMessage(messageJson);
}
}

13
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<ScreenVo.TopUsers> 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<ScreenVo.TopUsers> 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();

14
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

10
game/src/main/resources/mapper_dao/GameUserJoinDao.xml

@ -9,9 +9,17 @@
<result column="uScore" property="score"/>
</resultMap>
<select id="selectTopTen" resultType="com.ccsens.game.bean.vo.ScreenVo$TopUsers">
select user_id, avatar_url as headImgUrl, nickname, score, score as times
from t_game_user_join
where record_id = #{recordId,jdbcType=BIGINT}
ORDER BY score DESC
limit 10
</select>
<select id="selectByRecordId" parameterType="java.util.Map" resultMap="resultMap_memberInfo">
SELECT
id as uId,
user_id as uId,
avatar_url as uHeadImgUrl,
nickname as uNickname,
times as uTimes,

Loading…
Cancel
Save