Ver código fonte

a版本同步

suochencheng 6 anos atrás
pai
commit
c84f0c11a8

+ 1 - 7
src/main/java/com/izouma/awesomeadmin/dao/PlayerInfoMapper.xml

@@ -738,13 +738,7 @@
 
         </where>
         order by
-
-        IFNULL(ranking,999) ,
-        <if test="record.scoreType != null and !&quot;&quot;.equals(record.scoreType)">
-            IFNULL(score,0) desc,
-        </if>
-        IFNULL(live_time,999) ,
-        id desc
+        IFNULL(house_rank, 999), id
     </select>
     <select id="queryPlayerInfoSeasonRankPageByPage" parameterType="java.util.Map"
             resultMap="PagePlayerInfoResult">

+ 4 - 4
src/main/java/com/izouma/awesomeadmin/model/PlayerInfo.java

@@ -33,7 +33,7 @@ public class PlayerInfo {
     private Date examineTime;
     private Integer examineType;
     private String video;
-    private String liveTime;
+    private Float liveTime;
     private String gameType;
     private Integer seasonId;
     private Integer houseRank;
@@ -268,11 +268,11 @@ public class PlayerInfo {
         this.video = video;
     }
 
-    public String getLiveTime() {
-        return this.liveTime;
+    public Float getLiveTime() {
+        return liveTime;
     }
 
-    public void setLiveTime(String liveTime) {
+    public void setLiveTime(Float liveTime) {
         this.liveTime = liveTime;
     }
 

+ 159 - 120
src/main/java/com/izouma/awesomeadmin/service/impl/HouseInfoServiceImpl.java

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

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

@@ -14,6 +14,7 @@ import org.springframework.stereotype.Service;
 
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
+import java.util.Date;
 
 @Service
 public class VideoNotifyServiceImpl implements VideoNotifyService {
@@ -80,6 +81,7 @@ public class VideoNotifyServiceImpl implements VideoNotifyService {
     public void onRecordDone(VideoNotifyParam param, HttpServletRequest request, HttpServletResponse response) {
         if (param.getPlayerInfoId() != null) {
             PlayerInfo playerInfo = playerInfoService.getPlayerInfoById(param.getPlayerInfoId().toString());
+            playerInfo.setEndTime(new Date());
             playerInfo.setVideo(param.getPath());
             videoRecognitionService.start(playerInfo);
         }

+ 2 - 1
src/main/java/com/izouma/awesomeadmin/service/impl/VideoRecognitionServiceImpl.java

@@ -64,12 +64,13 @@ public class VideoRecognitionServiceImpl implements VideoRecognitionService {
                 if (result != null && result.isValid()) {
                     playerInfo.setImage(result.getImage());
                     playerInfo.setScore(Float.parseFloat(result.getScore().toString()));
-                    playerInfo.setLiveTime(result.getLiveTime().toString());
+                    playerInfo.setLiveTime(Float.parseFloat(result.getLiveTime().toString()));
                     playerInfo.setRanking(result.getRank());
                     // playerInfo.setKillNumber(result.getKillNum());
                     playerInfo.setStatusFlag(AppConstant.PlayerStatus.PROCESSED);
                 } else {
                     playerInfo.setStatusFlag(AppConstant.PlayerStatus.PROCESSED_FAIL);
+                    playerInfo.setResultError(true);
                 }
             } catch (FrameGrabber.Exception e) {
                 e.printStackTrace();

+ 1 - 1
src/main/java/com/izouma/awesomeadmin/web/PlayerInfoController.java

@@ -312,7 +312,7 @@ public class PlayerInfoController {
             }
             if (rank != null && time != null && !"null".equals(rank) && !"null".equals(time)) {
                 playerInfo.setRanking(Integer.valueOf(rank));
-                playerInfo.setLiveTime(time);
+                playerInfo.setLiveTime(Float.parseFloat(time));
                 playerInfo.setStatusFlag(AppConstant.PlayerStatus.PROCESSED);
             } else {
                 playerInfo.setStatusFlag(AppConstant.PlayerStatus.PROCESSED_FAIL);

+ 10 - 10
src/main/resources/spring/appWebService.xml

@@ -28,17 +28,17 @@
 	<task:annotation-driven/> <!-- 定时器开关-->
 
 	<!--自动开始房间定时任务-->
-<!--	<bean id="houseInfoTask" class="com.izouma.awesomeadmin.web.HouseInfoController"></bean>-->
-<!--	<bean id="lyfTask" class="com.izouma.weixin.web.LeYunFuController"></bean>-->
+	<bean id="houseInfoTask" class="com.izouma.awesomeadmin.web.HouseInfoController"></bean>
+	<bean id="lyfTask" class="com.izouma.weixin.web.LeYunFuController"></bean>
 
-<!--	<task:scheduled-tasks>-->
-<!--		<task:scheduled ref="houseInfoTask" method="autoBegin" cron="0 0/1 * * * ? "/>-->
-<!--		<task:scheduled ref="houseInfoTask" method="autoNoStartPlay" cron="0 0/2 * * * ? "/>-->
-<!--		<task:scheduled ref="houseInfoTask" method="autoEnd" cron="0 0/5 * * * ? "/>-->
-<!--		<task:scheduled ref="houseInfoTask" method="updateToAnalysis" cron="0 0/3 * * * ? "/>-->
-<!--		<task:scheduled ref="houseInfoTask" method="autoSettlement" cron="0 0/5 * * * ? "/>-->
-<!--		<task:scheduled ref="lyfTask" method="autoCheckPayResult" cron="0/5 * * * * ? "/>-->
-<!--	</task:scheduled-tasks>-->
+	<task:scheduled-tasks>
+		<task:scheduled ref="houseInfoTask" method="autoBegin" cron="0 0/1 * * * ? "/>
+		<task:scheduled ref="houseInfoTask" method="autoNoStartPlay" cron="0 0/2 * * * ? "/>
+		<task:scheduled ref="houseInfoTask" method="autoEnd" cron="0 0/5 * * * ? "/>
+		<task:scheduled ref="houseInfoTask" method="updateToAnalysis" cron="0 0/3 * * * ? "/>
+		<task:scheduled ref="houseInfoTask" method="autoSettlement" cron="0 0/5 * * * ? "/>
+		<task:scheduled ref="lyfTask" method="autoCheckPayResult" cron="0/5 * * * * ? "/>
+	</task:scheduled-tasks>
 
 
 </beans>