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{
@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;
}

98
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<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)) {
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 {
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内每个队伍的总分,
//2、查询获胜队伍的信息
@ -744,7 +781,8 @@ public class ScreenService implements IScreenService {
// 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);
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 游戏状态 准备中

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("]")
.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());
}
}
Loading…
Cancel
Save