|
|
@ -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 游戏状态 准备中
|
|
|
|