瀏覽代碼

Merge remote-tracking branch 'origin/master'

johnclot69 4 月之前
父節點
當前提交
d2cbc7dae7

+ 5 - 0
incubator-game/src/main/java/com/incubator/game/constant/RedisKeyConstant.java

@@ -61,4 +61,9 @@ public class RedisKeyConstant {
      * 赛事信息
      * 赛事信息
      */
      */
     public static final String COMPETE_LIST = "compete:list";
     public static final String COMPETE_LIST = "compete:list";
+
+    /**
+     * 游戏记录
+     */
+    public static final String ZJ_USER_GAME_KEY = "zj:user:game:";
 }
 }

+ 11 - 17
incubator-game/src/main/java/com/incubator/game/contest/Contest.java

@@ -332,18 +332,15 @@ public class Contest {
      * 根据玩家实时人数,动态分配比赛桌子
      * 根据玩家实时人数,动态分配比赛桌子
      */
      */
     public synchronized void allocateRooms() {
     public synchronized void allocateRooms() {
+        // 房间最大局数 分为预赛和决赛
+        if (this.waitingPlayers.size() <= 4) {//决赛
+            this.prop.maxRound = this.prop.finalNum;
+        } else {
+            this.prop.maxRound = this.prop.readyNum;
+        }
         while (this.waitingPlayers.size() >= roomCapacity) {
         while (this.waitingPlayers.size() >= roomCapacity) {
             // 玩家匹配,分配房间
             // 玩家匹配,分配房间
             JSONObject jsonData = new JSONObject();
             JSONObject jsonData = new JSONObject();
-//            jsonData.put("playingTypeOne", 2);
-//            jsonData.put("playingTypeTwo", 1);
-//            jsonData.put("upgradeType", 1);
-//            jsonData.put("flippingType", 2);
-//            jsonData.put("advanceType", 2);
-//            jsonData.put("timeoutType", 1);
-//            jsonData.put("voiceType", 2);
-//            jsonData.put("recordType", 2);
-//            jsonData.put("watchType", 4);
             cn.hutool.json.JSONObject rule = this.prop.rule;
             cn.hutool.json.JSONObject rule = this.prop.rule;
             jsonData.put("upgradeType", rule.get("upgradeType"));
             jsonData.put("upgradeType", rule.get("upgradeType"));
             jsonData.put("flippingType", rule.get("flippingType"));
             jsonData.put("flippingType", rule.get("flippingType"));
@@ -357,7 +354,8 @@ public class Contest {
             Integer doublingType =(Integer) (rule.get("doublingType") == null ? 0 : rule.get("doublingType"));
             Integer doublingType =(Integer) (rule.get("doublingType") == null ? 0 : rule.get("doublingType"));
             doublingType = setDoublingType(doublingType);
             doublingType = setDoublingType(doublingType);
             jsonData.put("dv", doublingType);
             jsonData.put("dv", doublingType);
-            jsonData.put("team", rule.get("teamType")==null?0:rule.get("teamType"));
+//            jsonData.put("team", rule.get("teamType")==null?0:rule.get("teamType"));
+            jsonData.put("team",0);
             // 房间id
             // 房间id
             jsonData.put("roomId", RoomService.getInstance().randomRoomIdByContest());
             jsonData.put("roomId", RoomService.getInstance().randomRoomIdByContest());
             // 人数模式 2:2人 4:4人
             // 人数模式 2:2人 4:4人
@@ -368,12 +366,6 @@ public class Contest {
             // 玩法1 1:连续打,2:按局数,3:按时间
             // 玩法1 1:连续打,2:按局数,3:按时间
             jsonData.put("mode", playingTypeOne);
             jsonData.put("mode", playingTypeOne);
             if (playingTypeOne==2){ //按局数
             if (playingTypeOne==2){ //按局数
-                // 房间最大局数 分为预赛和决赛
-                if (this.waitingPlayers.size() <= 4) {//决赛
-                    this.prop.maxRound = this.prop.finalNum;
-                } else {
-                    this.prop.maxRound = this.prop.readyNum;
-                }
                 jsonData.put("modev", this.prop.maxRound);
                 jsonData.put("modev", this.prop.maxRound);
             }else {//按时间
             }else {//按时间
                 //	 * 4:4局 6:6局 8:8局 10:10局
                 //	 * 4:4局 6:6局 8:8局 10:10局
@@ -611,6 +603,8 @@ public class Contest {
                         Player tmPlayer = this.actors.getOrDefault(settlementData.playerId, null);
                         Player tmPlayer = this.actors.getOrDefault(settlementData.playerId, null);
                         if (tmPlayer != null) {
                         if (tmPlayer != null) {
                             list.add(new Struct.PromotionData(tmPlayer.getId(), tmPlayer.data.avatarUrl,tmPlayer.data.name , settlementData.score,i,this.rooms.size() == 1));
                             list.add(new Struct.PromotionData(tmPlayer.getId(), tmPlayer.data.avatarUrl,tmPlayer.data.name , settlementData.score,i,this.rooms.size() == 1));
+                            tmPlayer.data.matchPoints = settlementData.score;
+                            tmPlayer.data.accumulatedPoints = 10000;
                             objects.add(tmPlayer);
                             objects.add(tmPlayer);
                         }
                         }
                     }
                     }
@@ -619,7 +613,7 @@ public class Contest {
             roomMap.put(room.data.roomId, list);
             roomMap.put(room.data.roomId, list);
         }
         }
         //排序
         //排序
-        objects.sort((o1, o2) -> Long.compare(o2.data.accumulatedPoints, o1.data.accumulatedPoints));
+        objects.sort((o1, o2) -> Long.compare(o2.data.matchPoints, o1.data.matchPoints));
         //结算
         //结算
         for (int i = 1; i <= objects.size(); i++) {
         for (int i = 1; i <= objects.size(); i++) {
             Player player = objects.get(i - 1);
             Player player = objects.get(i - 1);

+ 113 - 0
incubator-game/src/main/java/com/incubator/game/data/entity/ZjFeedback.java

@@ -0,0 +1,113 @@
+package com.incubator.game.data.entity;
+
+
+import java.util.Date;
+
+
+public class ZjFeedback{
+
+    /**
+     * 反馈id
+     */
+    private String feedbackId;
+
+    /**
+     * 用户id
+     */
+    private String userId;
+
+    /**
+     * 反馈类型(1.优化  2.问题    3.其他)
+     */
+    private String feedbackType;
+
+    /**
+     * 反馈内容
+     */
+    private String feedbackContent;
+
+    /**
+     * 反馈图片
+     */
+    private String feedbackImage;
+
+    /**
+     * 反馈时间
+     */
+    private Date feedbackTime;
+
+    /**
+     * 反馈状态(N.未解决   Y.已解决)
+     */
+    private String feedbackStatus;
+
+    /**
+     * 电话号码
+     */
+    private String rewardPh;
+
+
+    public String getFeedbackId() {
+        return feedbackId;
+    }
+
+    public void setFeedbackId(String feedbackId) {
+        this.feedbackId = feedbackId;
+    }
+
+    public String getUserId() {
+        return userId;
+    }
+
+    public void setUserId(String userId) {
+        this.userId = userId;
+    }
+
+    public String getFeedbackType() {
+        return feedbackType;
+    }
+
+    public void setFeedbackType(String feedbackType) {
+        this.feedbackType = feedbackType;
+    }
+
+    public String getFeedbackContent() {
+        return feedbackContent;
+    }
+
+    public void setFeedbackContent(String feedbackContent) {
+        this.feedbackContent = feedbackContent;
+    }
+
+    public String getFeedbackImage() {
+        return feedbackImage;
+    }
+
+    public void setFeedbackImage(String feedbackImage) {
+        this.feedbackImage = feedbackImage;
+    }
+
+    public Date getFeedbackTime() {
+        return feedbackTime;
+    }
+
+    public void setFeedbackTime(Date feedbackTime) {
+        this.feedbackTime = feedbackTime;
+    }
+
+    public String getFeedbackStatus() {
+        return feedbackStatus;
+    }
+
+    public void setFeedbackStatus(String feedbackStatus) {
+        this.feedbackStatus = feedbackStatus;
+    }
+
+    public String getRewardPh() {
+        return rewardPh;
+    }
+
+    public void setRewardPh(String rewardPh) {
+        this.rewardPh = rewardPh;
+    }
+}

+ 52 - 0
incubator-game/src/main/java/com/incubator/game/data/entity/ZjUserInfolog.java

@@ -94,6 +94,58 @@ public class ZjUserInfolog {
     /**数据详情*/
     /**数据详情*/
     private String gameInfo;
     private String gameInfo;
 
 
+    /**
+     * 牌桌状态 1未开始2进行中3已结束
+     */
+    private String tableStatus;
+
+    /**
+     * 牌局规则
+     */
+    private String ruleInfo;
+
+    /**
+     * 牌局时间
+     */
+    private int gameTime;
+
+    /**
+     * 排名
+     */
+    private int competeRank;
+
+    public int getCompeteRank() {
+        return competeRank;
+    }
+
+    public void setCompeteRank(int competeRank) {
+        this.competeRank = competeRank;
+    }
+
+    public String getRuleInfo() {
+        return ruleInfo;
+    }
+
+    public void setRuleInfo(String ruleInfo) {
+        this.ruleInfo = ruleInfo;
+    }
+
+    public int getGameTime() {
+        return gameTime;
+    }
+
+    public void setGameTime(int gameTime) {
+        this.gameTime = gameTime;
+    }
+
+    public String getTableStatus() {
+        return tableStatus;
+    }
+
+    public void setTableStatus(String tableStatus) {
+        this.tableStatus = tableStatus;
+    }
+
     public String getGameInfo() {
     public String getGameInfo() {
         return gameInfo;
         return gameInfo;
     }
     }

+ 5 - 5
incubator-game/src/main/java/com/incubator/game/handler/contest/GetContestRoomListHandler.java

@@ -75,14 +75,13 @@ public class GetContestRoomListHandler extends NetHandler {
         if (promotionMap != null && !promotionMap.isEmpty()){
         if (promotionMap != null && !promotionMap.isEmpty()){
             promotionMap.forEach((curRound, promotionDataMap) -> {
             promotionMap.forEach((curRound, promotionDataMap) -> {
                 HashMap<String, Object> curRoundMap = new HashMap<>();
                 HashMap<String, Object> curRoundMap = new HashMap<>();
-                int total = contest.actors.size();
+                long total = promotionDataMap.values().stream().mapToLong(List::size).sum();
                 curRoundMap.put("particiNum", total);// 参赛人数
                 curRoundMap.put("particiNum", total);// 参赛人数
-                curRoundMap.put("ADVNum", contest.propPromotionLv.num);// 晋级人数
+                curRoundMap.put("ADVNum",total==4?0:total/2);// 晋级人数
                 long count = contest.rooms.values().stream()
                 long count = contest.rooms.values().stream()
                         .filter(room -> room.state == 3)
                         .filter(room -> room.state == 3)
                         .count();//未完成的桌数
                         .count();//未完成的桌数
                 curRoundMap.put("ITNum", count);
                 curRoundMap.put("ITNum", count);
-                curRoundMap.put("pRank", 0);
                 curRoundMap.put("pAdv", false);
                 curRoundMap.put("pAdv", false);
                 ArrayList<Map<String, Object>> roomList = new ArrayList<>();
                 ArrayList<Map<String, Object>> roomList = new ArrayList<>();
                 promotionDataMap.forEach((roomId, promotionDataList) -> {
                 promotionDataMap.forEach((roomId, promotionDataList) -> {
@@ -99,8 +98,9 @@ public class GetContestRoomListHandler extends NetHandler {
                         playerMap.put("source",promotionData.score);
                         playerMap.put("source",promotionData.score);
                         playerMap.put("isAdv",promotionData.isPromotion);
                         playerMap.put("isAdv",promotionData.isPromotion);
                         playerList.add(playerMap);
                         playerList.add(playerMap);
-                        if (promotionData.playerId.equals(session.getPlayerId())&&promotionData.isPromotion){
-                            curRoundMap.put("pAdv", true);
+                        if (promotionData.playerId.equals(session.getPlayerId())){
+                            curRoundMap.put("pAdv", promotionData.isPromotion);
+                            curRoundMap.put("pRank", promotionData.rank);
                         }
                         }
                     }
                     }
                     roomMap.put("pList",playerList);
                     roomMap.put("pList",playerList);

+ 49 - 0
incubator-game/src/main/java/com/incubator/game/handler/feedback/FeedbackHandler.java

@@ -0,0 +1,49 @@
+package com.incubator.game.handler.feedback;
+
+import cn.hutool.json.JSONObject;
+import cn.hutool.json.JSONUtil;
+import com.incubator.common.MessageHandler;
+import com.incubator.common.net.Connection;
+import com.incubator.core.net.ws.NetHandler;
+import com.incubator.core.net.ws.WSRequest;
+import com.incubator.core.net.ws.WSResponse;
+import com.incubator.game.constant.RedisKeyConstant;
+import com.incubator.game.data.entity.ZjFeedback;
+import com.incubator.game.data.jedis.RedisUtil;
+import com.incubator.game.data.mq.RabbitMQUtil;
+import com.incubator.message.proto.CommonProto;
+
+import java.util.HashMap;
+
+/**
+ * Author:  xhb
+ * Date:  2025-01-13 16:16
+ * Description: 反馈处理类
+ */
+@MessageHandler(id = CommonProto.Cmd.FeedbackReq_VALUE)
+public class FeedbackHandler extends NetHandler {
+
+    @Override
+    public void onDate(Connection session, WSRequest request, WSResponse response) {
+        response.setCmd(CommonProto.Cmd.FeedbackRes_VALUE);
+        String userId = session.getPlayerId();
+        String feedbackType = request.getDataValue("feedbackType", String.class, "");//反馈类型(1.优化  2.问题    3.其他)
+        String feedbackContent = request.getDataValue("feedbackContent", String.class, "");//反馈内容
+        String phone = request.getDataValue("phone", String.class, "");//反馈手机号
+        ZjFeedback zjFeedback = new ZjFeedback();
+        zjFeedback.setUserId(userId);
+        zjFeedback.setFeedbackContent(feedbackContent);
+        zjFeedback.setFeedbackType(feedbackType);
+        zjFeedback.setRewardPh(phone);
+        JSONObject object = new JSONObject();
+        object.put("type","Feedback");
+        object.put("data",zjFeedback);
+        try {
+            RabbitMQUtil.sendMessage(object.toString());
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        response.setMessage("反馈成功");
+    }
+}

+ 2 - 0
incubator-game/src/main/java/com/incubator/game/handler/http/UpdatePlayer.java

@@ -30,12 +30,14 @@ public class UpdatePlayer extends HttpHandler {
         long foca = Long.parseLong(params.get("foca"));
         long foca = Long.parseLong(params.get("foca"));
         long masterScore = Long.parseLong(params.get("masterScore"));
         long masterScore = Long.parseLong(params.get("masterScore"));
         int masterScoreLevel = Integer.parseInt(params.get("masterScoreLevel"));
         int masterScoreLevel = Integer.parseInt(params.get("masterScoreLevel"));
+        String nikeName = params.get("nikeName");
         Player player = (Player) PlayerUtil.getOnlinePlayer(userId);
         Player player = (Player) PlayerUtil.getOnlinePlayer(userId);
         player.data.foca = foca;
         player.data.foca = foca;
         player.data.gold = gold;
         player.data.gold = gold;
         player.data.diamond = diamond;
         player.data.diamond = diamond;
         player.data.masterScore = masterScore;
         player.data.masterScore = masterScore;
         player.data.masterScoreLevel = masterScoreLevel;
         player.data.masterScoreLevel = masterScoreLevel;
+        player.data.name = nikeName;
         // 正常返回
         // 正常返回
         Map<String, Object> map = new HashMap<>();
         Map<String, Object> map = new HashMap<>();
         map.put("playerInfo", ProtoUtil.playerInfoToMessage(player));
         map.put("playerInfo", ProtoUtil.playerInfoToMessage(player));

+ 30 - 0
incubator-game/src/main/java/com/incubator/game/handler/master/MasterRankHandler.java

@@ -0,0 +1,30 @@
+package com.incubator.game.handler.master;
+
+import cn.hutool.json.JSONObject;
+import cn.hutool.json.JSONUtil;
+import com.incubator.common.MessageHandler;
+import com.incubator.common.net.Connection;
+import com.incubator.core.net.ws.NetHandler;
+import com.incubator.core.net.ws.WSRequest;
+import com.incubator.core.net.ws.WSResponse;
+import com.incubator.game.constant.RedisKeyConstant;
+import com.incubator.game.data.jedis.RedisUtil;
+import com.incubator.message.proto.CommonProto;
+
+import java.util.HashMap;
+
+/**
+ * Author:  xhb
+ * Date:  2025-01-13 16:16
+ * 大师分排名
+ */
+@MessageHandler(id = CommonProto.Cmd.MasterRankReq_VALUE)
+public class MasterRankHandler extends NetHandler {
+
+    @Override
+    public void onDate(Connection session, WSRequest request, WSResponse response) {
+        response.setCmd(CommonProto.Cmd.MasterRankRes_VALUE);
+        String userId = session.getPlayerId();
+
+    }
+}

+ 41 - 0
incubator-game/src/main/java/com/incubator/game/handler/user/GetGameInfoHandler.java

@@ -0,0 +1,41 @@
+package com.incubator.game.handler.user;
+
+import cn.hutool.json.JSONArray;
+import cn.hutool.json.JSONObject;
+import cn.hutool.json.JSONUtil;
+import com.incubator.common.MessageHandler;
+import com.incubator.common.net.Connection;
+import com.incubator.core.net.ws.NetHandler;
+import com.incubator.core.net.ws.WSRequest;
+import com.incubator.core.net.ws.WSResponse;
+import com.incubator.game.constant.RedisKeyConstant;
+import com.incubator.game.data.jedis.RedisUtil;
+import com.incubator.game.util.JsonToMapUtil;
+import com.incubator.message.proto.CommonProto;
+
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * Author:  xhb
+ * Date:  2025-01-13 15:55
+ */
+@MessageHandler(id = CommonProto.Cmd.GetGameInfoReq_VALUE)
+public class GetGameInfoHandler extends NetHandler {
+    @Override
+    public void onDate(Connection session, WSRequest request, WSResponse response) {
+        response.setCmd(CommonProto.Cmd.GetGameInfoRes_VALUE);
+        String userId = session.getPlayerId();
+        String userInfo = RedisUtil.get(RedisKeyConstant.ZJ_USER_GAME_KEY + userId);
+        if (userInfo == null) {
+            response.setData(new HashMap<>());
+            return;
+        }
+        JSONArray objects = new JSONArray(userInfo);
+        List<Map<String, Object>> mapList = JsonToMapUtil.parseJsonArrayToMapList(objects);
+        Map<String, Object> map = new HashMap<>();
+        map.put("gameRecData", mapList);
+        response.setData(map);
+    }
+}

+ 5 - 0
incubator-game/src/main/java/com/incubator/game/room/GDRoom.java

@@ -1269,6 +1269,7 @@ public class GDRoom extends Room {
                     zjUserInfolog.setMasterScore(new BigDecimal(tmPlayer.data.masterScore));//大师分
                     zjUserInfolog.setMasterScore(new BigDecimal(tmPlayer.data.masterScore));//大师分
                     int type = this.data.type;//房间类型
                     int type = this.data.type;//房间类型
                     zjUserInfolog.setCompeteType(String.valueOf(type));
                     zjUserInfolog.setCompeteType(String.valueOf(type));
+                    zjUserInfolog.setTurnNum(1);//轮次
                     if (type==1||type==2){
                     if (type==1||type==2){
                         Contest contest = ContestService.getInstance().contestMap.getOrDefault(tmPlayer.data.contestId, null);
                         Contest contest = ContestService.getInstance().contestMap.getOrDefault(tmPlayer.data.contestId, null);
                         if(contest!=null){
                         if(contest!=null){
@@ -1281,6 +1282,10 @@ public class GDRoom extends Room {
                     zjUserInfolog.setCreateTime(new Date());
                     zjUserInfolog.setCreateTime(new Date());
                     zjUserInfolog.setCompeteResult(tmPlayer.data.playerId.equals(winPlayerData.playerId)?"1":"2");//胜负
                     zjUserInfolog.setCompeteResult(tmPlayer.data.playerId.equals(winPlayerData.playerId)?"1":"2");//胜负
                     zjUserInfolog.setGameInfo(this.playBack.toString());
                     zjUserInfolog.setGameInfo(this.playBack.toString());
+                    zjUserInfolog.setTableStatus(String.valueOf(this.state));
+                    zjUserInfolog.setRuleInfo(this.jsonData.toString());
+                    zjUserInfolog.setGameTime(this.time);
+                    zjUserInfolog.setCompeteRank(key);
                     object.put("type","gameInfo");
                     object.put("type","gameInfo");
                     object.put("data",zjUserInfolog);
                     object.put("data",zjUserInfolog);
                     SendGameInfoUtil.sendGameInfo(object);
                     SendGameInfoUtil.sendGameInfo(object);

+ 7 - 1
incubator-game/src/main/java/com/incubator/game/room/ZDRoom.java

@@ -1330,6 +1330,7 @@ public class ZDRoom extends Room {
                         zjUserInfolog.setPoints(value.score);//分数
                         zjUserInfolog.setPoints(value.score);//分数
                         int type = this.data.type;//房间类型
                         int type = this.data.type;//房间类型
                         zjUserInfolog.setCompeteType(String.valueOf(type));
                         zjUserInfolog.setCompeteType(String.valueOf(type));
+                        zjUserInfolog.setTurnNum(1);//轮次
                         if (type==1){
                         if (type==1){
                             Contest contest = ContestService.getInstance().contestMap.getOrDefault(tmPlayer.data.contestId, null);
                             Contest contest = ContestService.getInstance().contestMap.getOrDefault(tmPlayer.data.contestId, null);
                             if(contest!=null){
                             if(contest!=null){
@@ -1342,6 +1343,9 @@ public class ZDRoom extends Room {
                         zjUserInfolog.setCreateTime(new Date());
                         zjUserInfolog.setCreateTime(new Date());
                         zjUserInfolog.setCompeteResult(tmPlayer.data.playerId.equals(winPlayerData.playerId)?"1":"2");
                         zjUserInfolog.setCompeteResult(tmPlayer.data.playerId.equals(winPlayerData.playerId)?"1":"2");
                         zjUserInfolog.setGameInfo(this.playBack.toString());
                         zjUserInfolog.setGameInfo(this.playBack.toString());
+                        zjUserInfolog.setTableStatus(String.valueOf(this.state));
+                        zjUserInfolog.setRuleInfo(this.jsonData.toString());
+                        zjUserInfolog.setGameTime(this.time);
                         object.put("type","gameInfo");
                         object.put("type","gameInfo");
                         object.put("data",zjUserInfolog);
                         object.put("data",zjUserInfolog);
                         SendGameInfoUtil.sendGameInfo(object);
                         SendGameInfoUtil.sendGameInfo(object);
@@ -1421,7 +1425,9 @@ public class ZDRoom extends Room {
         this.data.cardList.clear();
         this.data.cardList.clear();
         // 根据配置清理参数
         // 根据配置清理参数
         if (!this.data.isTribute) {
         if (!this.data.isTribute) {
-            this.data.result.clear();
+            if (this.data.type !=1){
+                this.data.result.clear();
+            }
             this.data.tributeList.clear();
             this.data.tributeList.clear();
             this.data.towKingList.clear();
             this.data.towKingList.clear();
         }
         }

+ 11 - 0
incubator-message/src/main/proto/CommonProto.proto

@@ -172,6 +172,17 @@ enum Cmd {
     ClassicGuanDanReq = 201001;     // 经典掼蛋请求
     ClassicGuanDanReq = 201001;     // 经典掼蛋请求
     ClassicGuanDanRes = 201002;     // 经典掼蛋响应
     ClassicGuanDanRes = 201002;     // 经典掼蛋响应
 
 
+    //游戏记录
+    GetGameInfoReq = 201101;     // 游戏记录请求
+    GetGameInfoRes = 201102;     // 游戏记录响应
+    //大师分排名
+    MasterRankReq = 201103;     // 大师分排名请求
+    MasterRankRes = 201104;     // 大师分排名响应
+
+    //客户反馈
+    FeedbackReq = 201201;     // 客户反馈请求
+    FeedbackRes = 201202;     // 客户反馈响应
+
 
 
 
 
     // 服务器推送消息 900000-999999 (全部以偶数结尾)
     // 服务器推送消息 900000-999999 (全部以偶数结尾)