suochencheng 7 лет назад
Родитель
Сommit
228f188525

+ 2 - 0
src/main/java/com/izouma/awesomeadmin/service/HouseInfoService.java

@@ -35,6 +35,8 @@ public interface HouseInfoService {
 
     Result autoEnd(HouseInfo record);
 
+    Result handEnd(HouseInfo record);
+
     Result autoNoStartPlay(HouseInfo record);
 
     boolean settlementHouse(HouseInfo houseInfo);

+ 101 - 15
src/main/java/com/izouma/awesomeadmin/service/impl/HouseInfoServiceImpl.java

@@ -6,6 +6,7 @@ import java.util.*;
 import com.izouma.awesomeadmin.dto.Result;
 import com.izouma.awesomeadmin.model.*;
 import com.izouma.awesomeadmin.service.*;
+import com.izouma.awesomeadmin.util.DateTimeTool;
 import com.izouma.awesomeadmin.util.MbappUtil;
 import org.apache.commons.collections.CollectionUtils;
 import org.apache.log4j.Logger;
@@ -187,30 +188,76 @@ public class HouseInfoServiceImpl implements HouseInfoService {
 
             if (houseInfo != null) {
 
-                HouseLevel houseLevel = houseInfo.getHouseLevelInfo();
+                if (houseInfo.getStatusFlag() == AppConstant.HouseStatus.END) {//只有结束比赛的才能结束
 
-                BigDecimal firstRatio = houseLevel.getFirstRatio();
-                BigDecimal secondRatio = houseLevel.getSecondRatio();
-                BigDecimal thirdRatio = houseLevel.getThirdRatio();
-                BigDecimal feeRatio = houseLevel.getFeeRatio();
-                BigDecimal poolRatio = houseLevel.getPoolRatio();
+                    HouseLevel houseLevel = houseInfo.getHouseLevelInfo();
 
+                    BigDecimal firstRatio = houseLevel.getFirstRatio();
+                    BigDecimal secondRatio = houseLevel.getSecondRatio();
+                    BigDecimal thirdRatio = houseLevel.getThirdRatio();
+                    BigDecimal poolRatio = houseLevel.getPoolRatio();
 
-                PlayerInfo param = new PlayerInfo();
-                param.setHouseId(record.getId());
-                List<PlayerInfo> playerInfoList = playerInfoService.getSettlementPlayer(param);
 
-                if (CollectionUtils.isNotEmpty(playerInfoList)) {
-                    for (int i = 0; i < playerInfoList.size(); i++) {
+                    PlayerInfo param = new PlayerInfo();
+                    param.setHouseId(record.getId());
+                    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);
+                            BigDecimal bonus = BigDecimal.ZERO;
+                            if (1 == playerInfo.getRanking()) {//只有吃鸡才能获得奖励
+
+                                if (i == 0) {//第一名
+                                    bonus = BigDecimal.valueOf((firstRatio.doubleValue() / 100) * houseInfo.getBonus().doubleValue());
+
+
+                                }
+                                if (i == 1) {//第二名
+                                    bonus = BigDecimal.valueOf((secondRatio.doubleValue() / 100) * houseInfo.getBonus().doubleValue());
+                                }
+                                if (i == 2) {//第三名
+                                    bonus = BigDecimal.valueOf((thirdRatio.doubleValue() / 100) * houseInfo.getBonus().doubleValue());
+                                }
+                            }
+                            playerInfo.setBonus(bonus);
+
+                            if (AppConstant.PlayerStatus.END == playerInfo.getStatusFlag()) {//如果是正常结束的则更新为结束完成
+                                playerInfo.setStatusFlag(AppConstant.PlayerStatus.SETTLEMENT);
+
+                                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("定时任务");
+                                String content = "恭喜你,在" + DateTimeTool.dateTimeToTimeYYYYHHmmStr(houseInfo.getBeginTime())
+                                        + "开始的游戏竞赛 " + houseInfo.getHouseName() + "获得了第" + playerInfo.getHouseRank()
+                                        + "名,赶快领取你的奖励吧。";
+                                systemNotice.setContent(content);
+                                systemNotice.setTypeFlag(AppConstant.NoticeType.RESULT);
+
+                                systemNoticeService.createSystemNotice(systemNotice);
+                            }
+
+                            playerInfoService.updatePlayerInfo(playerInfo);
+
+
+                        }
                     }
-                }
 
-                int updates = houseInfoMapper.updateByPrimaryKeySelective(record);
+                    if (poolRatio.doubleValue() > 0) {
+                        BigDecimal pool = BigDecimal.valueOf((poolRatio.doubleValue() / 100) * houseInfo.getBonus().doubleValue());
+
+                        //TODO 加入到赛季奖金池中
+                    }
 
-                if (updates > 0) {
                     return true;
                 }
+
+
             }
 
 
@@ -221,6 +268,12 @@ public class HouseInfoServiceImpl implements HouseInfoService {
         return false;
     }
 
+    /**
+     * 加入房间
+     *
+     * @param record
+     * @return
+     */
     @Override
     public Result joinHouseInfo(PlayerInfo record) {
 
@@ -383,7 +436,40 @@ public class HouseInfoServiceImpl implements HouseInfoService {
             logger.error("autoEnd", e);
         }
 
-        return new Result(false, "开始失败");
+        return new Result(false, "结束失败");
+    }
+
+    @Override
+    public Result handEnd(HouseInfo record) {
+
+        logger.info("handEnd");
+        try {
+
+            HouseInfo houseInfo = houseInfoMapper.queryHouseInfo(record);
+            if (houseInfo != null) {
+                if (AppConstant.HouseStatus.START == houseInfo.getStatusFlag()) {//房间为开始状态
+
+                    houseInfo.setStatusFlag(AppConstant.HouseStatus.END);
+                    houseInfo.setEndTime(new Date());
+                    houseInfoMapper.updateByPrimaryKeySelective(houseInfo);
+
+                    //更新比赛超时的
+                    PlayerInfo playerInfo = new PlayerInfo();
+                    playerInfo.setHouseId(houseInfo.getId());
+                    playerInfoService.overTimePlayer(playerInfo);
+
+                    settlementHouse(houseInfo);//比赛结果结算。
+
+                    return new Result(true, "结束成功");
+                }
+            }
+
+
+        } catch (Exception e) {
+            logger.error("handEnd", e);
+        }
+
+        return new Result(false, "结束失败");
     }
 
 

+ 35 - 0
src/main/java/com/izouma/awesomeadmin/web/HouseInfoController.java

@@ -210,6 +210,7 @@ public class HouseInfoController {
 
     /**
      * 自动处理未按时加入比赛的玩家。
+     *
      * @return
      */
     @RequestMapping(value = "/autoNoStartPlay", method = RequestMethod.POST)
@@ -219,12 +220,46 @@ public class HouseInfoController {
     }
 
 
+    /**
+     * 自动结束
+     *
+     * @return
+     */
     @RequestMapping(value = "/autoEnd", method = RequestMethod.POST)
     @ResponseBody
     public Result autoEnd() {
         return houseInfoService.autoEnd(null);
     }
 
+    /**
+     * 手动结束
+     *
+     * @param record
+     * @return
+     */
+    @RequestMapping(value = "/handEnd", method = RequestMethod.POST)
+    @ResponseBody
+    public Result handEnd(HouseInfo record) {
+        return houseInfoService.handEnd(record);
+    }
+
+    /**
+     * 手动结算
+     *
+     * @param record
+     * @return
+     */
+    @RequestMapping(value = "/handSettlementHouse", method = RequestMethod.POST)
+    @ResponseBody
+    public Result handSettlementHouse(HouseInfo record) {
+
+        boolean num = houseInfoService.settlementHouse(record);
+        if (num) {
+            return new Result(true, "结算成功");
+        }
+        return new Result(false, "结算异常");
+    }
+
 
 }