|
|
@@ -2,6 +2,7 @@ package com.izouma.awesomeadmin.service.impl;
|
|
|
|
|
|
import java.math.BigDecimal;
|
|
|
import java.util.*;
|
|
|
+import java.util.stream.Collectors;
|
|
|
|
|
|
import com.izouma.awesomeadmin.dao.BonusRecordMapper;
|
|
|
import com.izouma.awesomeadmin.dao.CompetitionSeasonMapper;
|
|
|
@@ -231,158 +232,146 @@ public class HouseInfoServiceImpl implements HouseInfoService {
|
|
|
houseInfo.setId(record.getId());
|
|
|
houseInfo = houseInfoMapper.queryHouseInfo(houseInfo);
|
|
|
|
|
|
- if (houseInfo != null) {
|
|
|
-
|
|
|
- if (houseInfo.getStatusFlag() == AppConstant.HouseStatus.ANALYSIS) {//只有结束比赛的才能结算
|
|
|
+ if (houseInfo == null || !houseInfo.getStatusFlag().equals(AppConstant.HouseStatus.ANALYSIS)) {
|
|
|
+ //只有结束比赛的才能结算
|
|
|
+ return false;
|
|
|
+ }
|
|
|
|
|
|
|
|
|
// int winNum = 0;//吃鸡人数
|
|
|
|
|
|
|
|
|
- PlayerInfo param = new PlayerInfo();
|
|
|
- if (houseInfo.getScoreType() > 0) {
|
|
|
- param.setScoreType(1);
|
|
|
- }
|
|
|
- param.setHouseId(record.getId());
|
|
|
+ PlayerInfo p = new PlayerInfo();
|
|
|
+ p.setHouseId(record.getId());
|
|
|
+ List<PlayerInfo> playerInfoList = sortPlayerInfo(playerInfoService.getPlayerInfoList(p));
|
|
|
+ if (playerInfoList == null) {
|
|
|
+ return false;
|
|
|
+ }
|
|
|
|
|
|
- List<PlayerInfo> playerInfoList = playerInfoService.getSettlementPlayer(param);
|
|
|
|
|
|
- if (CollectionUtils.isNotEmpty(playerInfoList)) {
|
|
|
+ for (int i = 0; i < playerInfoList.size(); i++) {
|
|
|
+ PlayerInfo playerInfo = playerInfoList.get(i);
|
|
|
+ playerInfo.setHouseRank(i + 1);
|
|
|
|
|
|
-// if (houseInfo.getScoreType() > 0) {//如果是平分模式,获取吃鸡人数。
|
|
|
-// param.setRanking(1);
|
|
|
-// List<PlayerInfo> winList = playerInfoService.getSettlementPlayer(param);
|
|
|
-// winNum = winList.size();
|
|
|
-// }
|
|
|
+ BigDecimal bonus = BigDecimal.ZERO;
|
|
|
|
|
|
- for (int i = 0; i < playerInfoList.size(); i++) {
|
|
|
- PlayerInfo playerInfo = playerInfoList.get(i);
|
|
|
- playerInfo.setHouseRank(i + 1);
|
|
|
-
|
|
|
- BigDecimal bonus = BigDecimal.ZERO;
|
|
|
-
|
|
|
- String content = "";
|
|
|
- int typeFlag = AppConstant.NoticeType.RESULT;
|
|
|
-
|
|
|
- if (AppConstant.PlayerStatus.PROCESSED_FAIL == playerInfo.getStatusFlag()) {
|
|
|
-
|
|
|
- content = "很遗憾,你在" + DateTimeTool.dateTimeToTimeYYYYHHmmStr(houseInfo.getBeginTime())
|
|
|
- + "开始的游戏竞赛 [" + houseInfo.getHouseName()
|
|
|
- + "],[无有效结果],无法获得奖励,该局参赛人数[" + houseInfo.getPlayerNumber() + "]人。";
|
|
|
- typeFlag = AppConstant.NoticeType.FAIL;
|
|
|
- } else if (AppConstant.PlayerStatus.OVERTIME == playerInfo.getStatusFlag()) {
|
|
|
- content = "很遗憾,你在" + DateTimeTool.dateTimeToTimeYYYYHHmmStr(houseInfo.getBeginTime())
|
|
|
- + "开始的游戏竞赛 [" + houseInfo.getHouseName()
|
|
|
- + "],[比赛超时],无法获得奖励,该局参赛人数[" + houseInfo.getPlayerNumber() + "]人。";
|
|
|
- typeFlag = AppConstant.NoticeType.OVERTIME;
|
|
|
- } else {
|
|
|
- if (houseInfo.getScoreType() == 0) {//评分模式
|
|
|
- if (playerInfo.getRanking() != null && playerInfo.getRanking() > 0 && i < 3) {//只有成绩才能获得奖励
|
|
|
-
|
|
|
- if (i == 0) {//第一名 金牌
|
|
|
- playerInfo.setMedal(AppConstant.Medals.GOLD);
|
|
|
- bonus = BigDecimal.valueOf(AppConstant.Medals.GOLD_SCORE);
|
|
|
-
|
|
|
- content = "恭喜你,在" + DateTimeTool.dateTimeToTimeYYYYHHmmStr(houseInfo.getBeginTime())
|
|
|
- + "开始的游戏竞赛 [" + houseInfo.getHouseName() + "](评分模式)评分[第" + playerInfo.getHouseRank()
|
|
|
- + "名],获得一枚金牌,该局参赛人数[" + houseInfo.getPlayerNumber() + "]人。";
|
|
|
- }
|
|
|
- if (i == 1) {//第二名 银牌
|
|
|
- playerInfo.setMedal(AppConstant.Medals.SILVER);
|
|
|
- bonus = BigDecimal.valueOf(AppConstant.Medals.SILVER_SCORE);
|
|
|
-
|
|
|
- content = "恭喜你,在" + DateTimeTool.dateTimeToTimeYYYYHHmmStr(houseInfo.getBeginTime())
|
|
|
- + "开始的游戏竞赛 [" + houseInfo.getHouseName() + "](评分模式)评分[第" + playerInfo.getHouseRank()
|
|
|
- + "名],获得一枚银牌,该局参赛人数[" + houseInfo.getPlayerNumber() + "]人。";
|
|
|
- }
|
|
|
- if (i == 2) {//第三名 铜牌
|
|
|
- playerInfo.setMedal(AppConstant.Medals.BRONZE);
|
|
|
- bonus = BigDecimal.valueOf(AppConstant.Medals.BRONZE_SCORE);
|
|
|
-
|
|
|
- content = "恭喜你,在" + DateTimeTool.dateTimeToTimeYYYYHHmmStr(houseInfo.getBeginTime())
|
|
|
- + "开始的游戏竞赛 [" + houseInfo.getHouseName() + "](评分模式)评分[第" + playerInfo.getHouseRank()
|
|
|
- + "名],获得一枚铜牌,该局参赛人数[" + houseInfo.getPlayerNumber() + "]人。";
|
|
|
- }
|
|
|
-
|
|
|
-
|
|
|
- } else {
|
|
|
-
|
|
|
- content = "很遗憾,在" + DateTimeTool.dateTimeToTimeYYYYHHmmStr(houseInfo.getBeginTime())
|
|
|
- + "开始的游戏竞赛[ " + houseInfo.getHouseName() + "](评分模式)评分[第" + playerInfo.getHouseRank()
|
|
|
- + "名],无法获得奖励,该局参赛人数[" + houseInfo.getPlayerNumber() + "]人。";
|
|
|
- typeFlag = AppConstant.NoticeType.RESULT;
|
|
|
- }
|
|
|
- } else {
|
|
|
- if (playerInfo.getRanking() != null && 1 == playerInfo.getRanking()) {//只有吃鸡才能获得奖励
|
|
|
-
|
|
|
- playerInfo.setMedal(AppConstant.Medals.PLATINUM);
|
|
|
- bonus = BigDecimal.valueOf(AppConstant.Medals.PLATINUM_SCORE);
|
|
|
-
|
|
|
- content = "恭喜你,在" + DateTimeTool.dateTimeToTimeYYYYHHmmStr(houseInfo.getBeginTime())
|
|
|
- + "开始的游戏竞赛 [" + houseInfo.getHouseName() + "](吃鸡模式)[成功吃鸡],获得一枚铂金奖牌,该局参赛人数[" + houseInfo.getPlayerNumber() + "]人。";
|
|
|
- } else {
|
|
|
- content = "很遗憾,在" + DateTimeTool.dateTimeToTimeYYYYHHmmStr(houseInfo.getBeginTime())
|
|
|
- + "开始的游戏竞赛 [" + houseInfo.getHouseName() + "](吃鸡模式)[没有吃鸡],无法获得奖励,该局参赛人数[" + houseInfo.getPlayerNumber() + "]人。";
|
|
|
- typeFlag = AppConstant.NoticeType.RESULT;
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
+ String content = "";
|
|
|
+ int typeFlag = AppConstant.NoticeType.RESULT;
|
|
|
|
|
|
- playerInfo.setBonus(bonus);
|
|
|
+ if (AppConstant.PlayerStatus.PROCESSED_FAIL == playerInfo.getStatusFlag()) {
|
|
|
|
|
|
+ content = "很遗憾,你在" + DateTimeTool.dateTimeToTimeYYYYHHmmStr(houseInfo.getBeginTime())
|
|
|
+ + "开始的游戏竞赛 [" + houseInfo.getHouseName()
|
|
|
+ + "],[无有效结果],无法获得奖励,该局参赛人数[" + houseInfo.getPlayerNumber() + "]人。";
|
|
|
+ typeFlag = AppConstant.NoticeType.FAIL;
|
|
|
+ } else if (AppConstant.PlayerStatus.OVERTIME == playerInfo.getStatusFlag()) {
|
|
|
+ content = "很遗憾,你在" + DateTimeTool.dateTimeToTimeYYYYHHmmStr(houseInfo.getBeginTime())
|
|
|
+ + "开始的游戏竞赛 [" + houseInfo.getHouseName()
|
|
|
+ + "],[比赛超时],无法获得奖励,该局参赛人数[" + houseInfo.getPlayerNumber() + "]人。";
|
|
|
+ typeFlag = AppConstant.NoticeType.OVERTIME;
|
|
|
+ } else {
|
|
|
+ if (houseInfo.getScoreType() == 0) {//评分模式
|
|
|
+ if (playerInfo.getRanking() != null && playerInfo.getRanking() > 0 && i < 3) {//只有成绩才能获得奖励
|
|
|
|
|
|
- SystemNotice systemNotice = new SystemNotice();
|
|
|
- systemNotice.setGameId(playerInfo.getGameId());
|
|
|
- systemNotice.setHouseId(playerInfo.getHouseId());
|
|
|
- systemNotice.setUserId(playerInfo.getUserId());
|
|
|
- systemNotice.setSeasonId(playerInfo.getSeasonId());
|
|
|
- systemNotice.setPlayerId(playerInfo.getId());
|
|
|
- systemNotice.setRemark("定时任务");
|
|
|
+ if (i == 0) {//第一名 金牌
|
|
|
+ playerInfo.setMedal(AppConstant.Medals.GOLD);
|
|
|
+ bonus = BigDecimal.valueOf(AppConstant.Medals.GOLD_SCORE);
|
|
|
|
|
|
- systemNotice.setContent(content);
|
|
|
- systemNotice.setTypeFlag(typeFlag);
|
|
|
+ content = "恭喜你,在" + DateTimeTool.dateTimeToTimeYYYYHHmmStr(houseInfo.getBeginTime())
|
|
|
+ + "开始的游戏竞赛 [" + houseInfo.getHouseName() + "](评分模式)评分[第" + playerInfo.getHouseRank()
|
|
|
+ + "名],获得一枚金牌,该局参赛人数[" + houseInfo.getPlayerNumber() + "]人。";
|
|
|
+ }
|
|
|
+ if (i == 1) {//第二名 银牌
|
|
|
+ playerInfo.setMedal(AppConstant.Medals.SILVER);
|
|
|
+ bonus = BigDecimal.valueOf(AppConstant.Medals.SILVER_SCORE);
|
|
|
|
|
|
- systemNoticeService.createSystemNotice(systemNotice);
|
|
|
+ content = "恭喜你,在" + DateTimeTool.dateTimeToTimeYYYYHHmmStr(houseInfo.getBeginTime())
|
|
|
+ + "开始的游戏竞赛 [" + houseInfo.getHouseName() + "](评分模式)评分[第" + playerInfo.getHouseRank()
|
|
|
+ + "名],获得一枚银牌,该局参赛人数[" + houseInfo.getPlayerNumber() + "]人。";
|
|
|
+ }
|
|
|
+ if (i == 2) {//第三名 铜牌
|
|
|
+ playerInfo.setMedal(AppConstant.Medals.BRONZE);
|
|
|
+ bonus = BigDecimal.valueOf(AppConstant.Medals.BRONZE_SCORE);
|
|
|
|
|
|
- //推送
|
|
|
- try {
|
|
|
- UserInfo userInfo = new UserInfo();
|
|
|
- userInfo.setId(playerInfo.getUserId());
|
|
|
- userInfo = userInfoService.getSingleUserInfo(userInfo);
|
|
|
- if (userInfo != null) {
|
|
|
- if ("Y".equals(userInfo.getNoticeFlag())) {
|
|
|
- String[] ids = new String[]{userInfo.getId().toString()};
|
|
|
+ content = "恭喜你,在" + DateTimeTool.dateTimeToTimeYYYYHHmmStr(houseInfo.getBeginTime())
|
|
|
+ + "开始的游戏竞赛 [" + houseInfo.getHouseName() + "](评分模式)评分[第" + playerInfo.getHouseRank()
|
|
|
+ + "名],获得一枚铜牌,该局参赛人数[" + houseInfo.getPlayerNumber() + "]人。";
|
|
|
+ }
|
|
|
|
|
|
- PushUtil.pushMsg(ids, content);
|
|
|
- }
|
|
|
|
|
|
- }
|
|
|
+ } else {
|
|
|
|
|
|
+ content = "很遗憾,在" + DateTimeTool.dateTimeToTimeYYYYHHmmStr(houseInfo.getBeginTime())
|
|
|
+ + "开始的游戏竞赛[ " + houseInfo.getHouseName() + "](评分模式)评分[第" + playerInfo.getHouseRank()
|
|
|
+ + "名],无法获得奖励,该局参赛人数[" + houseInfo.getPlayerNumber() + "]人。";
|
|
|
+ typeFlag = AppConstant.NoticeType.RESULT;
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ if (playerInfo.getRanking() != null && 1 == playerInfo.getRanking()) {//只有吃鸡才能获得奖励
|
|
|
+
|
|
|
+ playerInfo.setMedal(AppConstant.Medals.PLATINUM);
|
|
|
+ bonus = BigDecimal.valueOf(AppConstant.Medals.PLATINUM_SCORE);
|
|
|
+
|
|
|
+ content = "恭喜你,在" + DateTimeTool.dateTimeToTimeYYYYHHmmStr(houseInfo.getBeginTime())
|
|
|
+ + "开始的游戏竞赛 [" + houseInfo.getHouseName() + "](吃鸡模式)[成功吃鸡],获得一枚铂金奖牌,该局参赛人数[" + houseInfo.getPlayerNumber() + "]人。";
|
|
|
+ } else {
|
|
|
+ content = "很遗憾,在" + DateTimeTool.dateTimeToTimeYYYYHHmmStr(houseInfo.getBeginTime())
|
|
|
+ + "开始的游戏竞赛 [" + houseInfo.getHouseName() + "](吃鸡模式)[没有吃鸡],无法获得奖励,该局参赛人数[" + houseInfo.getPlayerNumber() + "]人。";
|
|
|
+ typeFlag = AppConstant.NoticeType.RESULT;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
|
|
|
- } catch (Exception e) {
|
|
|
- logger.error("结算推送消息异常。", e);
|
|
|
- }
|
|
|
+ playerInfo.setBonus(bonus);
|
|
|
|
|
|
- if (AppConstant.PlayerStatus.PROCESSED == playerInfo.getStatusFlag()) {//如果正常结束的则更新状态
|
|
|
- playerInfo.setStatusFlag(AppConstant.PlayerStatus.SETTLEMENT);
|
|
|
|
|
|
- }
|
|
|
- playerInfoService.updatePlayerInfo(playerInfo);
|
|
|
+ SystemNotice systemNotice = new SystemNotice();
|
|
|
+ systemNotice.setGameId(playerInfo.getGameId());
|
|
|
+ systemNotice.setHouseId(playerInfo.getHouseId());
|
|
|
+ systemNotice.setUserId(playerInfo.getUserId());
|
|
|
+ systemNotice.setSeasonId(playerInfo.getSeasonId());
|
|
|
+ systemNotice.setPlayerId(playerInfo.getId());
|
|
|
+ systemNotice.setRemark("定时任务");
|
|
|
|
|
|
+ systemNotice.setContent(content);
|
|
|
+ systemNotice.setTypeFlag(typeFlag);
|
|
|
|
|
|
+ systemNoticeService.createSystemNotice(systemNotice);
|
|
|
+
|
|
|
+ //推送
|
|
|
+ try {
|
|
|
+ UserInfo userInfo = new UserInfo();
|
|
|
+ userInfo.setId(playerInfo.getUserId());
|
|
|
+ userInfo = userInfoService.getSingleUserInfo(userInfo);
|
|
|
+ if (userInfo != null) {
|
|
|
+ if ("Y".equals(userInfo.getNoticeFlag())) {
|
|
|
+ String[] ids = new String[]{userInfo.getId().toString()};
|
|
|
+
|
|
|
+ PushUtil.pushMsg(ids, content);
|
|
|
}
|
|
|
+
|
|
|
}
|
|
|
|
|
|
- //更新为结算完成状态。
|
|
|
- houseInfo.setStatusFlag(AppConstant.HouseStatus.SETTLEMENT);
|
|
|
- houseInfoMapper.updateByPrimaryKeySelective(houseInfo);
|
|
|
|
|
|
- return true;
|
|
|
+ } catch (Exception e) {
|
|
|
+ logger.error("结算推送消息异常。", e);
|
|
|
}
|
|
|
|
|
|
+ if (AppConstant.PlayerStatus.PROCESSED == playerInfo.getStatusFlag()) {//如果正常结束的则更新状态
|
|
|
+ playerInfo.setStatusFlag(AppConstant.PlayerStatus.SETTLEMENT);
|
|
|
+
|
|
|
+ }
|
|
|
+ playerInfoService.updatePlayerInfo(playerInfo);
|
|
|
+
|
|
|
|
|
|
}
|
|
|
|
|
|
+ //更新为结算完成状态。
|
|
|
+ houseInfo.setStatusFlag(AppConstant.HouseStatus.SETTLEMENT);
|
|
|
+ houseInfoMapper.updateByPrimaryKeySelective(houseInfo);
|
|
|
+
|
|
|
+ return true;
|
|
|
+
|
|
|
|
|
|
} catch (Exception e) {
|
|
|
logger.error("settlementHouse", e);
|
|
|
@@ -951,5 +940,55 @@ public class HouseInfoServiceImpl implements HouseInfoService {
|
|
|
|
|
|
return new Result(false, "开始失败");
|
|
|
}
|
|
|
+
|
|
|
+
|
|
|
+ private List<PlayerInfo> sortPlayerInfo(List<PlayerInfo> list) {
|
|
|
+ if (list == null) {
|
|
|
+ return null;
|
|
|
+ }
|
|
|
+ List<PlayerInfo> sorted = new ArrayList<>();
|
|
|
+ List<PlayerInfo> range1 = list.stream()
|
|
|
+ .filter(playerInfo -> {
|
|
|
+ try {
|
|
|
+ Objects.requireNonNull(playerInfo.getRanking());
|
|
|
+ Objects.requireNonNull(playerInfo.getScore());
|
|
|
+ Objects.requireNonNull(playerInfo.getLiveTime());
|
|
|
+ long minutes = getGameTime(playerInfo);
|
|
|
+ return minutes >= 20;
|
|
|
+ } catch (Exception e) {
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+ })
|
|
|
+ .sorted((o2, o1) -> (int) Math.ceil((o1.getScore() - o2.getScore()) * 1000 + (o1.getLiveTime() - o2.getLiveTime())))
|
|
|
+ .collect(Collectors.toList());
|
|
|
+ list.removeAll(range1);
|
|
|
+ sorted.addAll(range1);
|
|
|
+ List<PlayerInfo> range2 = list.stream()
|
|
|
+ .filter(playerInfo -> {
|
|
|
+ try {
|
|
|
+ long minutes = getGameTime(playerInfo);
|
|
|
+ return minutes >= 5 && minutes <= 35;
|
|
|
+ } catch (Exception e) {
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+ })
|
|
|
+ .sorted((o1, o2) -> {
|
|
|
+ long t1 = o1.getEndTime().getTime() - o1.getBeginTime().getTime();
|
|
|
+ long t2 = o2.getEndTime().getTime() - o2.getBeginTime().getTime();
|
|
|
+ return (int) Math.ceil(t2 - t1);
|
|
|
+ })
|
|
|
+ .collect(Collectors.toList());
|
|
|
+ list.removeAll(range2);
|
|
|
+ //list.forEach(playerInfo -> playerInfo.setPoints(new BigDecimal(-10)));
|
|
|
+ sorted.addAll(range2);
|
|
|
+ sorted.addAll(list);
|
|
|
+ return list;
|
|
|
+ }
|
|
|
+
|
|
|
+ private long getGameTime(PlayerInfo playerInfo) {
|
|
|
+ Objects.requireNonNull(playerInfo.getBeginTime());
|
|
|
+ Objects.requireNonNull(playerInfo.getEndTime());
|
|
|
+ return (playerInfo.getEndTime().getTime() - playerInfo.getBeginTime().getTime()) / 1000 / 60;
|
|
|
+ }
|
|
|
}
|
|
|
|