Browse Source

时长

master
zhizhi wu 5 years ago
parent
commit
c496419943
  1. 8
      game/src/main/java/com/ccsens/game/bean/vo/ScreenVo.java
  2. 98
      game/src/main/java/com/ccsens/game/service/ScreenService.java
  3. 8
      util/src/main/java/com/ccsens/util/config/ControllerExceptionHandler.java

8
game/src/main/java/com/ccsens/game/bean/vo/ScreenVo.java

@ -24,6 +24,8 @@ public class ScreenVo {
public static class GameInfoVo{ public static class GameInfoVo{
@ApiModelProperty("二维码路径") @ApiModelProperty("二维码路径")
private String QRCodeUrl; private String QRCodeUrl;
@ApiModelProperty("游戏时长")
private int time;
@ApiModelProperty("游戏状态 0未开始 1准备中 2进行中 3已结束") @ApiModelProperty("游戏状态 0未开始 1准备中 2进行中 3已结束")
private Byte gameStatus; private Byte gameStatus;
@ApiModelProperty("可玩总次数") @ApiModelProperty("可玩总次数")
@ -92,8 +94,10 @@ public class ScreenVo {
private int totalTimes; private int totalTimes;
@ApiModelProperty("总分数") @ApiModelProperty("总分数")
private int totalScore; private int totalScore;
@ApiModelProperty("平均每人多少") @ApiModelProperty("平均每人多少")
private int averageTimes; private int averageTimes;
@ApiModelProperty("平均多少分")
private int averageScore;
@ApiModelProperty("平均次数超过百分之多少人") @ApiModelProperty("平均次数超过百分之多少人")
private int over; private int over;
@ApiModelProperty("总人数") @ApiModelProperty("总人数")
@ -163,7 +167,7 @@ public class ScreenVo {
@ApiModelProperty("该组的总次数/均次数") @ApiModelProperty("该组的总次数/均次数")
private Integer times; private Integer times;
@ApiModelProperty("该组总人数") @ApiModelProperty("该组总人数")
private int totalMembers; private Integer totalMembers;
@ApiModelProperty("code") @ApiModelProperty("code")
private String code; private String code;
} }

98
game/src/main/java/com/ccsens/game/service/ScreenService.java

@ -39,6 +39,7 @@ import java.io.*;
import java.util.*; import java.util.*;
import java.util.concurrent.Executors; import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService; import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.atomic.AtomicInteger;
/** /**
* @author zy * @author zy
@ -463,6 +464,7 @@ public class ScreenService implements IScreenService {
gameInfoVo.setTotalCount(gameUserPay.getTotalCount()); gameInfoVo.setTotalCount(gameUserPay.getTotalCount());
gameInfoVo.setUsedCount(gameUserPay.getUsedCount()); gameInfoVo.setUsedCount(gameUserPay.getUsedCount());
gameInfoVo.setGameStatus(gameRecord.getGameStatus()); gameInfoVo.setGameStatus(gameRecord.getGameStatus());
gameInfoVo.setTime(gameRecord.getDuration());
//查询参加这个游戏的总用户 //查询参加这个游戏的总用户
Long totalUsers = redisUtil.zsGetSize(GameConstant.generateGameKey(memberRecord.getMemberRecord())); Long totalUsers = redisUtil.zsGetSize(GameConstant.generateGameKey(memberRecord.getMemberRecord()));
if (totalUsers == null) { if (totalUsers == null) {
@ -510,7 +512,7 @@ public class ScreenService implements IScreenService {
if (gameRecord.getGameGroup() == GameConstant.GAME_SINGLE) { if (gameRecord.getGameGroup() == GameConstant.GAME_SINGLE) {
completedData = getCompletedData(memberRecord.getMemberRecord()); completedData = getCompletedData(memberRecord.getMemberRecord());
} else { } else {
completedData = getCompletedDataByWin(memberRecord.getMemberRecord()); completedData = getCompletedDataByWin(gameRecord, gameInfoVo.getTotalMembers());
} }
gameInfoVo.setCompletedData(completedData); gameInfoVo.setCompletedData(completedData);
break; break;
@ -582,10 +584,10 @@ public class ScreenService implements IScreenService {
break; break;
case GameConstant.GAME_COMPLETED: case GameConstant.GAME_COMPLETED:
ScreenVo.CompletedData completedData; ScreenVo.CompletedData completedData;
if (gameType.getIsGroup() == 0) { if (gameRecord.getGameGroup() == GameConstant.GAME_SINGLE) {
completedData = getCompletedData(memberRecord.getMemberRecord()); completedData = getCompletedData(memberRecord.getMemberRecord());
} else { } else {
completedData = getCompletedDataByWin(memberRecord.getMemberRecord()); completedData = getCompletedDataByWin(gameRecord, gameStatusVo.getTotalMembers());
} }
gameStatusVo.setCompletedData(completedData); gameStatusVo.setCompletedData(completedData);
break; break;
@ -681,39 +683,74 @@ public class ScreenService implements IScreenService {
private ScreenVo.CompletedData getCompletedDataByWin(Long gameRecordId) { private ScreenVo.CompletedData getCompletedDataByWin(GameRecord gameRecord, int totalMember) {
ScreenVo.CompletedData completedData = new ScreenVo.CompletedData(); String groupKey = gameRecord.getId() + "_group";
String groupKey = gameRecordId + "_group";
Set<ZSetOperations.TypedTuple<Object>> typedTuples = redisUtil.zsRevGetWithScore(groupKey, 0, -1); Set<ZSetOperations.TypedTuple<Object>> typedTuples = redisUtil.zsRevGetWithScore(groupKey, 0, -1);
log.info("查询成绩:{}", typedTuples); log.info("查询成绩redis:{}", typedTuples);
List<ScreenVo.CompletedData> list = new ArrayList<>();
if (CollectionUtil.isNotEmpty(typedTuples)) { if (CollectionUtil.isNotEmpty(typedTuples)) {
Iterator<ZSetOperations.TypedTuple<Object>> iterator = typedTuples.iterator();
if (!iterator.hasNext()) {
log.info("没有成绩");
return completedData;
}
ZSetOperations.TypedTuple<Object> 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 { } else {
List<ScreenVo.GroupVo> 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内每个队伍的总分, //TODO 1、分别查询redis内每个队伍的总分,
//2、查询获胜队伍的信息 //2、查询获胜队伍的信息
@ -744,7 +781,8 @@ public class ScreenService implements IScreenService {
// completedData = getCompletedData(userJoinList); // completedData = getCompletedData(userJoinList);
// } // }
//前十名 //前十名
List<ScreenVo.TopUsers> top2 = getTopUsers(gameRecordId); ScreenVo.CompletedData completedData = list.get(0);
List<ScreenVo.TopUsers> top2 = getTopUsers(gameRecord.getId());
completedData.setMembers(top2); completedData.setMembers(top2);
return completedData; return completedData;
} }
@ -1116,7 +1154,7 @@ public class ScreenService implements IScreenService {
//更新状态和时间 //更新状态和时间
gameRecord.setGameStatus(GameConstant.GAME_PREPARATION); gameRecord.setGameStatus(GameConstant.GAME_PREPARATION);
gameRecord.setStartTime(current + GameConstant.COUNT_DOWN_TIME); 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); gameRecord.setTimeDifference((int) moreTime);
gameRecordDao.updateByPrimaryKeySelective(gameRecord); gameRecordDao.updateByPrimaryKeySelective(gameRecord);
//设置redis 游戏状态 准备中 //设置redis 游戏状态 准备中

8
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("]") sb.append(fieldError.getField()).append("=[").append(fieldError.getRejectedValue()).append("]")
.append(fieldError.getDefaultMessage()); .append(fieldError.getDefaultMessage());
e.printStackTrace(); e.printStackTrace();
log.info("BindException", e); log.error("BindException", e);
return JsonResponse.newInstance().fail(-11,sb.toString()); return JsonResponse.newInstance().fail(-11,sb.toString());
} }
@ -64,7 +64,7 @@ public class ControllerExceptionHandler {
@ResponseBody @ResponseBody
public JsonResponse handleHttpMessageNotReadableException(HttpMessageNotReadableException e) { public JsonResponse handleHttpMessageNotReadableException(HttpMessageNotReadableException e) {
e.printStackTrace(); e.printStackTrace();
log.info("HttpMessageNotReadableException", e); log.error("HttpMessageNotReadableException", e);
return JsonResponse.newInstance().fail(-12,e.getMessage()); return JsonResponse.newInstance().fail(-12,e.getMessage());
} }
@ -72,7 +72,7 @@ public class ControllerExceptionHandler {
@ResponseBody @ResponseBody
public JsonResponse jsonBaseExceptionHandler(HttpServletRequest req, BaseException e) { public JsonResponse jsonBaseExceptionHandler(HttpServletRequest req, BaseException e) {
e.printStackTrace(); e.printStackTrace();
log.info("BaseException",e); log.error("BaseException",e);
if (e.getCodeEnum() != null) { if (e.getCodeEnum() != null) {
return JsonResponse.newInstance().ok(e.getCodeEnum()); return JsonResponse.newInstance().ok(e.getCodeEnum());
} }
@ -83,7 +83,7 @@ public class ControllerExceptionHandler {
@ResponseBody @ResponseBody
public JsonResponse jsonExceptionHandler(HttpServletRequest req, Exception e) { public JsonResponse jsonExceptionHandler(HttpServletRequest req, Exception e) {
e.printStackTrace(); e.printStackTrace();
log.info("Exception",e); log.error("Exception",e);
return JsonResponse.newInstance().fail(-1,e.getMessage()); return JsonResponse.newInstance().fail(-1,e.getMessage());
} }
} }
Loading…
Cancel
Save