From c496419943f93f364b0b949314abb2be46447440 Mon Sep 17 00:00:00 2001 From: zhizhi wu <2377881365@qq.com> Date: Fri, 21 Aug 2020 00:26:19 +0800 Subject: [PATCH] =?UTF-8?q?=E6=97=B6=E9=95=BF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/ccsens/game/bean/vo/ScreenVo.java | 8 +- .../ccsens/game/service/ScreenService.java | 98 +++++++++++++------ .../config/ControllerExceptionHandler.java | 8 +- 3 files changed, 78 insertions(+), 36 deletions(-) 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 a602200f..974a6ba0 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 @@ -24,6 +24,8 @@ public class ScreenVo { public static class GameInfoVo{ @ApiModelProperty("二维码路径") private String QRCodeUrl; + @ApiModelProperty("游戏时长") + private int time; @ApiModelProperty("游戏状态 0未开始 1准备中 2进行中 3已结束") private Byte gameStatus; @ApiModelProperty("可玩总次数") @@ -92,8 +94,10 @@ public class ScreenVo { private int totalTimes; @ApiModelProperty("总分数") private int totalScore; - @ApiModelProperty("平均每人多少分") + @ApiModelProperty("平均每人多少次") private int averageTimes; + @ApiModelProperty("平均多少分") + private int averageScore; @ApiModelProperty("平均次数超过百分之多少人") private int over; @ApiModelProperty("总人数") @@ -163,7 +167,7 @@ public class ScreenVo { @ApiModelProperty("该组的总次数/均次数") private Integer times; @ApiModelProperty("该组总人数") - private int totalMembers; + private Integer totalMembers; @ApiModelProperty("code") private String code; } 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 6b4f20d7..6c1c2aee 100644 --- a/game/src/main/java/com/ccsens/game/service/ScreenService.java +++ b/game/src/main/java/com/ccsens/game/service/ScreenService.java @@ -39,6 +39,7 @@ import java.io.*; import java.util.*; import java.util.concurrent.Executors; import java.util.concurrent.ScheduledExecutorService; +import java.util.concurrent.atomic.AtomicInteger; /** * @author zy @@ -463,6 +464,7 @@ public class ScreenService implements IScreenService { gameInfoVo.setTotalCount(gameUserPay.getTotalCount()); gameInfoVo.setUsedCount(gameUserPay.getUsedCount()); gameInfoVo.setGameStatus(gameRecord.getGameStatus()); + gameInfoVo.setTime(gameRecord.getDuration()); //查询参加这个游戏的总用户 Long totalUsers = redisUtil.zsGetSize(GameConstant.generateGameKey(memberRecord.getMemberRecord())); if (totalUsers == null) { @@ -510,7 +512,7 @@ public class ScreenService implements IScreenService { if (gameRecord.getGameGroup() == GameConstant.GAME_SINGLE) { completedData = getCompletedData(memberRecord.getMemberRecord()); } else { - completedData = getCompletedDataByWin(memberRecord.getMemberRecord()); + completedData = getCompletedDataByWin(gameRecord, gameInfoVo.getTotalMembers()); } gameInfoVo.setCompletedData(completedData); break; @@ -582,10 +584,10 @@ public class ScreenService implements IScreenService { break; case GameConstant.GAME_COMPLETED: ScreenVo.CompletedData completedData; - if (gameType.getIsGroup() == 0) { + if (gameRecord.getGameGroup() == GameConstant.GAME_SINGLE) { completedData = getCompletedData(memberRecord.getMemberRecord()); } else { - completedData = getCompletedDataByWin(memberRecord.getMemberRecord()); + completedData = getCompletedDataByWin(gameRecord, gameStatusVo.getTotalMembers()); } gameStatusVo.setCompletedData(completedData); break; @@ -681,39 +683,74 @@ public class ScreenService implements IScreenService { - private ScreenVo.CompletedData getCompletedDataByWin(Long gameRecordId) { - ScreenVo.CompletedData completedData = new ScreenVo.CompletedData(); - String groupKey = gameRecordId + "_group"; + private ScreenVo.CompletedData getCompletedDataByWin(GameRecord gameRecord, int totalMember) { + String groupKey = gameRecord.getId() + "_group"; Set> typedTuples = redisUtil.zsRevGetWithScore(groupKey, 0, -1); - log.info("查询成绩:{}", typedTuples); + log.info("查询成绩redis:{}", typedTuples); + + List list = new ArrayList<>(); if (CollectionUtil.isNotEmpty(typedTuples)) { - Iterator> iterator = typedTuples.iterator(); - if (!iterator.hasNext()) { - log.info("没有成绩"); - return completedData; - } - ZSetOperations.TypedTuple next = iterator.next(); - GameGroup gameGroup = JSON.parseObject((String) next.getValue(), GameGroup.class); - int score = next.getScore().intValue(); - completedData.setTotalScore(score); - completedData.setTotalTimes(score/100); - Object o = redisUtil.get(gameGroup.getId() + GameConstant.GAME_GROUP_NUM); - if (o==null) { - o = 0; - } - completedData.setTotalMember((int)o); - completedData.setAverageTimes((int)o == 0 ? 0 : completedData.getTotalTimes()/(int)o); - completedData.setWinGroup(gameGroup.getName()); + typedTuples.forEach(type -> { + ScreenVo.CompletedData completedData = new ScreenVo.CompletedData(); + GameGroup gameGroup = JSON.parseObject((String) type.getValue(), GameGroup.class); + int score = type.getScore().intValue(); + Object o = redisUtil.get(gameGroup.getId() + GameConstant.GAME_GROUP_NUM); + if (o==null) { + o = 0; + } + completedData.setTotalMember((int)o); + completedData.setTotalScore(score); + completedData.setAverageScore((int)o == 0 ? 0 : completedData.getTotalScore()/(int)o); + completedData.setTotalTimes(score/100); + completedData.setAverageTimes((int)o == 0 ? 0 : completedData.getTotalTimes()/(int)o); + completedData.setWinGroup(gameGroup.getName()); + GameUserJoinExample joinExample = new GameUserJoinExample(); + joinExample.createCriteria().andRecordIdEqualTo(gameRecord.getId()).andScoreGreaterThan(completedData.getAverageTimes()); + long l = gameUserJoinDao.countByExample(joinExample); + completedData.setOver(totalMember == 0 ? 0 : (int) (l * 100 / totalMember)); + list.add(completedData); + }); - GameUserJoinExample joinExample = new GameUserJoinExample(); - joinExample.createCriteria().andRecordIdEqualTo(gameRecordId).andScoreGreaterThan(completedData.getAverageTimes()); - long l = gameUserJoinDao.countByExample(joinExample); - completedData.setOver((int)o == 0 ? 0 : (int) (l * 100 / (int) o)); } else { + List groupVos = gameGroupDao.queryGroups(gameRecord.getId()); + log.info("查询分组:{}", groupVos); + if (CollectionUtil.isEmpty(groupVos)) { + return new ScreenVo.CompletedData(); + } + groupVos.forEach(groupVo -> { + groupVo.setScore(groupVo.getTotalMembers() == null || groupVo.getTotalMembers() == 0 ? 0 : groupVo.getScore()/groupVo.getTotalMembers()); + ScreenVo.CompletedData completedData = new ScreenVo.CompletedData(); + + int members = groupVo.getTotalMembers() == null ? 0 : groupVo.getTotalMembers(); + completedData.setTotalMember(members); + completedData.setTotalScore(groupVo.getScore()); + completedData.setAverageScore(members == 0 ? 0 : completedData.getTotalScore()/members); + completedData.setTotalTimes(groupVo.getScore() == null ? 0 : groupVo.getScore()/100); + completedData.setAverageTimes(members == 0 ? 0 : completedData.getTotalTimes()/members); + completedData.setWinGroup(groupVo.getGroupName()); + GameUserJoinExample joinExample = new GameUserJoinExample(); + joinExample.createCriteria().andRecordIdEqualTo(gameRecord.getId()).andScoreGreaterThan(completedData.getAverageTimes()); + long l = gameUserJoinDao.countByExample(joinExample); + completedData.setOver(totalMember == 0 ? 0 : (int) (l * 100 /totalMember)); + list.add(completedData); + }); + + + + + + + + + } + + if (gameRecord.getRankRule() == GameConstant.RANK_RULE_AVA) { + CollectionUtil.sort(list, (t1,t2)-> t2.getAverageScore() - t1.getAverageScore()); } + //TODO 1、分别查询redis内每个队伍的总分, //2、查询获胜队伍的信息 @@ -744,7 +781,8 @@ public class ScreenService implements IScreenService { // completedData = getCompletedData(userJoinList); // } //前十名 - List top2 = getTopUsers(gameRecordId); + ScreenVo.CompletedData completedData = list.get(0); + List top2 = getTopUsers(gameRecord.getId()); completedData.setMembers(top2); return completedData; } @@ -1116,7 +1154,7 @@ public class ScreenService implements IScreenService { //更新状态和时间 gameRecord.setGameStatus(GameConstant.GAME_PREPARATION); gameRecord.setStartTime(current + GameConstant.COUNT_DOWN_TIME); - gameRecord.setEndTime(gameRecord.getStartTime() + GameConstant.GAME_TIME); + gameRecord.setEndTime(gameRecord.getStartTime() + gameRecord.getDuration()*1000); gameRecord.setTimeDifference((int) moreTime); gameRecordDao.updateByPrimaryKeySelective(gameRecord); //设置redis 游戏状态 准备中 diff --git a/util/src/main/java/com/ccsens/util/config/ControllerExceptionHandler.java b/util/src/main/java/com/ccsens/util/config/ControllerExceptionHandler.java index ff736783..2874beec 100644 --- a/util/src/main/java/com/ccsens/util/config/ControllerExceptionHandler.java +++ b/util/src/main/java/com/ccsens/util/config/ControllerExceptionHandler.java @@ -56,7 +56,7 @@ public class ControllerExceptionHandler { sb.append(fieldError.getField()).append("=[").append(fieldError.getRejectedValue()).append("]") .append(fieldError.getDefaultMessage()); e.printStackTrace(); - log.info("BindException", e); + log.error("BindException", e); return JsonResponse.newInstance().fail(-11,sb.toString()); } @@ -64,7 +64,7 @@ public class ControllerExceptionHandler { @ResponseBody public JsonResponse handleHttpMessageNotReadableException(HttpMessageNotReadableException e) { e.printStackTrace(); - log.info("HttpMessageNotReadableException", e); + log.error("HttpMessageNotReadableException", e); return JsonResponse.newInstance().fail(-12,e.getMessage()); } @@ -72,7 +72,7 @@ public class ControllerExceptionHandler { @ResponseBody public JsonResponse jsonBaseExceptionHandler(HttpServletRequest req, BaseException e) { e.printStackTrace(); - log.info("BaseException",e); + log.error("BaseException",e); if (e.getCodeEnum() != null) { return JsonResponse.newInstance().ok(e.getCodeEnum()); } @@ -83,7 +83,7 @@ public class ControllerExceptionHandler { @ResponseBody public JsonResponse jsonExceptionHandler(HttpServletRequest req, Exception e) { e.printStackTrace(); - log.info("Exception",e); + log.error("Exception",e); return JsonResponse.newInstance().fail(-1,e.getMessage()); } } \ No newline at end of file