Browse Source

牌桌记录

xhb 2 months ago
parent
commit
bfee80b64f

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

@@ -405,8 +405,8 @@ public class Contest {
                         //判断替补队列是否有替补玩家
                         ArrayList<String> objects = new ArrayList<>(this.SubstitutePlayers);
                         if (objects.size() > 0) {
-                            for (int i1 = 0; i1 < objects.size(); i1++) {
-                                tmPlayer = (Player) PlayerUtil.getOnlinePlayer(objects.get(i1));
+                            for (String object : objects) {
+                                tmPlayer = (Player) PlayerUtil.getOnlinePlayer(object);
                                 if (tmPlayer != null) {
                                     break;
                                 }

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

@@ -0,0 +1,229 @@
+package com.incubator.game.data.entity;
+
+import java.math.BigDecimal;
+import java.time.LocalDateTime;
+import java.util.Date;
+
+public class ZjUserInfolog {
+
+    /**
+     * 主键id
+     */
+    private String competelogId;
+
+    /**
+     * 玩家id
+     */
+    private String userId;
+
+    /**
+     * 赛事id
+     */
+    private String competeId;
+
+    /**
+     * 牌桌id
+     */
+    private String cardTableId;
+
+    /**
+     * 牌级
+     */
+    private String cardLevel;
+
+    /**
+     * 升级
+     */
+    private Integer levelUp;
+
+    /**
+     * 积分
+     */
+    private Integer points;
+
+    /**
+     * 大师分
+     */
+    private BigDecimal masterScore;
+
+    /**
+     * 奖励币种
+     */
+    private String goodsType;
+
+    /**
+     * 奖励币种数量
+     */
+    private BigDecimal goodsNum;
+
+    /**
+     * 创建时间
+     */
+    private Date createTime;
+
+    /**
+     * 其他奖励(Json字符串格式)
+     */
+    private String otherReward;
+
+    /**
+     * 轮次
+     */
+    private Integer turnNum;
+
+    /**
+     * 局次
+     */
+    private Integer inningNum;
+
+    /**
+     * 方位 1东 2南 3西 4北
+     */
+    private String position;
+
+    /**
+     * 比赛结果(输赢)1赢2输
+     */
+    private String competeResult;
+
+    /**
+     * 赛事类型 0官方比赛1自建比赛2俱乐部赛3好友约局4经典掼蛋5经典过A6不洗牌7积分赛
+     */
+    private String competeType;
+
+    public String getCompetelogId() {
+        return competelogId;
+    }
+
+    public void setCompetelogId(String competelogId) {
+        this.competelogId = competelogId;
+    }
+
+    public String getUserId() {
+        return userId;
+    }
+
+    public void setUserId(String userId) {
+        this.userId = userId;
+    }
+
+    public String getCompeteId() {
+        return competeId;
+    }
+
+    public void setCompeteId(String competeId) {
+        this.competeId = competeId;
+    }
+
+    public String getCardTableId() {
+        return cardTableId;
+    }
+
+    public void setCardTableId(String cardTableId) {
+        this.cardTableId = cardTableId;
+    }
+
+    public String getCardLevel() {
+        return cardLevel;
+    }
+
+    public void setCardLevel(String cardLevel) {
+        this.cardLevel = cardLevel;
+    }
+
+    public Integer getLevelUp() {
+        return levelUp;
+    }
+
+    public void setLevelUp(Integer levelUp) {
+        this.levelUp = levelUp;
+    }
+
+    public Integer getPoints() {
+        return points;
+    }
+
+    public void setPoints(Integer points) {
+        this.points = points;
+    }
+
+    public BigDecimal getMasterScore() {
+        return masterScore;
+    }
+
+    public void setMasterScore(BigDecimal masterScore) {
+        this.masterScore = masterScore;
+    }
+
+    public String getGoodsType() {
+        return goodsType;
+    }
+
+    public void setGoodsType(String goodsType) {
+        this.goodsType = goodsType;
+    }
+
+    public BigDecimal getGoodsNum() {
+        return goodsNum;
+    }
+
+    public void setGoodsNum(BigDecimal goodsNum) {
+        this.goodsNum = goodsNum;
+    }
+
+    public Date getCreateTime() {
+        return createTime;
+    }
+
+    public void setCreateTime(Date createTime) {
+        this.createTime = createTime;
+    }
+
+    public String getOtherReward() {
+        return otherReward;
+    }
+
+    public void setOtherReward(String otherReward) {
+        this.otherReward = otherReward;
+    }
+
+    public Integer getTurnNum() {
+        return turnNum;
+    }
+
+    public void setTurnNum(Integer turnNum) {
+        this.turnNum = turnNum;
+    }
+
+    public Integer getInningNum() {
+        return inningNum;
+    }
+
+    public void setInningNum(Integer inningNum) {
+        this.inningNum = inningNum;
+    }
+
+    public String getPosition() {
+        return position;
+    }
+
+    public void setPosition(String position) {
+        this.position = position;
+    }
+
+    public String getCompeteResult() {
+        return competeResult;
+    }
+
+    public void setCompeteResult(String competeResult) {
+        this.competeResult = competeResult;
+    }
+
+    public String getCompeteType() {
+        return competeType;
+    }
+
+    public void setCompeteType(String competeType) {
+        this.competeType = competeType;
+    }
+}

+ 41 - 0
incubator-game/src/main/java/com/incubator/game/handler/http/FreezePlayer.java

@@ -0,0 +1,41 @@
+package com.incubator.game.handler.http;
+
+import com.incubator.common.MessageHandler;
+import com.incubator.core.net.http.HttpHandler;
+import com.incubator.core.net.http.HttpRequest;
+import com.incubator.core.net.http.HttpResponse;
+import com.incubator.game.player.GPlayer;
+import com.incubator.game.player.Player;
+import com.incubator.game.util.PlayerUtil;
+import com.incubator.message.proto.CommonProto;
+
+import java.util.HashMap;
+import java.util.Map;
+
+/**
+ * Author:  xhb
+ * Date:  2025-01-08 15:53
+ * 冻结玩家
+ */
+@MessageHandler(httpPath = "/freezePlayer")
+public class FreezePlayer extends HttpHandler {
+    /**
+     * 设置消息内容
+     **/
+    @Override
+    public HttpResponse onDate(HttpRequest request, Map<String, String> params) throws Exception {
+        HttpResponse httpResponse = new HttpResponse();
+        httpResponse.setCode(200);
+        httpResponse.setMessage("成功!");
+        String userId = params.get("userId");
+        String thawTime = params.get("thawTime");
+        Player onlinePlayer = (Player)PlayerUtil.getOnlinePlayer(userId);
+        if (onlinePlayer == null) {
+            return httpResponse;
+        }
+        HashMap<String, Object> map = new HashMap<>();
+        map.put("message", "当前账号已被冻结,解冻时间为"+thawTime+",如有问题请联系客服");
+        onlinePlayer.receive(CommonProto.Cmd.FreezePlayer_VALUE,map);
+        return httpResponse;
+    }
+}

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

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

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

@@ -3,14 +3,19 @@ package com.incubator.game.room;
 import com.alibaba.fastjson2.JSONObject;
 import com.incubator.common.log4j.Log;
 import com.incubator.common.util.RandomUtil;
+import com.incubator.game.contest.Contest;
+import com.incubator.game.contest.ContestService;
+import com.incubator.game.data.entity.ZjUserInfolog;
 import com.incubator.game.data.po.RoomPO;
 import com.incubator.game.player.Player;
 import com.incubator.game.util.CardUtils;
 import com.incubator.game.util.GDUtils;
+import com.incubator.game.util.SendGameInfoUtil;
 import com.incubator.game.util.Struct;
 import com.incubator.message.proto.CommonProto;
 import org.apache.commons.lang3.StringUtils;
 
+import java.math.BigDecimal;
 import java.util.*;
 
 /**
@@ -1105,6 +1110,35 @@ public class GDRoom extends Room {
 
         // 4人房
         if (this.data.maxNum == 4) {
+            this.data.result.forEach((key,value)->{
+                Player tmPlayer = this.actors.getOrDefault(value.playerId, null);
+                if (tmPlayer != null) {
+                    //向后台发送结算信息
+                    cn.hutool.json.JSONObject object = new cn.hutool.json.JSONObject();
+                    ZjUserInfolog zjUserInfolog = new ZjUserInfolog();
+                    zjUserInfolog.setUserId(tmPlayer.data.userId);//用户ID
+                    zjUserInfolog.setCardTableId(String.valueOf(this.data.roomId));//房间id
+                    zjUserInfolog.setCardLevel(String.valueOf(this.data.curLevelPoint));//牌级
+                    zjUserInfolog.setMasterScore(new BigDecimal(tmPlayer.data.masterScore));//大师分
+                    int type = this.data.type;//房间类型
+                    zjUserInfolog.setCompeteType(String.valueOf(type));
+                    if (type==1||type==2){
+                        Contest contest = ContestService.getInstance().contestMap.getOrDefault(tmPlayer.data.contestId, null);
+                        if(contest!=null){
+                            zjUserInfolog.setCompeteId(String.valueOf(contest.data.contestId));//赛事id
+                            zjUserInfolog.setTurnNum(contest.data.curRound);//轮次
+                        }
+                    }
+                    zjUserInfolog.setInningNum(this.data.curRound);//局数
+                    zjUserInfolog.setPosition(pos(tmPlayer.data.pos));//方位
+                    zjUserInfolog.setCreateTime(new Date());
+                    zjUserInfolog.setCompeteResult(tmPlayer.data.playerId.equals(winPlayerData.playerId)?"1":"2");//胜负
+                    object.put("type","gameInfo");
+                    object.put("data",zjUserInfolog);
+                    SendGameInfoUtil.sendGameInfo(object);
+                }
+            });
+
             // 级牌下标
             int index = 0;
             // 头游搭档数据
@@ -1154,6 +1188,20 @@ public class GDRoom extends Room {
         Log.info("升级...{}, 原级牌点数: {}, 当前级牌点数: {}", builder.toString(), oldLevelPoint, this.data.curLevelPoint);
     }
 
+    public static String pos(int pos) {
+        switch (pos) {
+            case 0:
+                return "1";
+            case 1:
+                return "2";
+            case 2:
+                return "3";
+            case 3:
+                return "4";
+        }
+        return "";
+    }
+
     /**
      * 牌局结算
      */

+ 43 - 0
incubator-game/src/main/java/com/incubator/game/room/ZDRoom.java

@@ -3,14 +3,19 @@ package com.incubator.game.room;
 import com.alibaba.fastjson2.JSONObject;
 import com.incubator.common.log4j.Log;
 import com.incubator.common.util.RandomUtil;
+import com.incubator.game.contest.Contest;
+import com.incubator.game.contest.ContestService;
+import com.incubator.game.data.entity.ZjUserInfolog;
 import com.incubator.game.data.po.RoomPO;
 import com.incubator.game.player.Player;
 import com.incubator.game.util.CardUtils;
 import com.incubator.game.util.GDUtils;
+import com.incubator.game.util.SendGameInfoUtil;
 import com.incubator.game.util.Struct;
 import com.incubator.message.proto.CommonProto;
 import org.apache.commons.lang3.StringUtils;
 
+import java.math.BigDecimal;
 import java.util.*;
 
 /**
@@ -1173,6 +1178,30 @@ public class ZDRoom extends Room {
                             settlementData.score = -scores;
                             tmPlayer.data.accumulatedPoints -= scores;
                         }
+                        //向后台发送结算信息
+                        cn.hutool.json.JSONObject object = new cn.hutool.json.JSONObject();
+                        ZjUserInfolog zjUserInfolog = new ZjUserInfolog();
+                        zjUserInfolog.setUserId(tmPlayer.data.playerId);//用户ID
+                        zjUserInfolog.setCardTableId(String.valueOf(this.data.roomId));//房间id
+                        zjUserInfolog.setCardLevel(String.valueOf(this.data.curLevelPoint));//牌级
+                        zjUserInfolog.setMasterScore(new BigDecimal(tmPlayer.data.masterScore));//大师分
+                        zjUserInfolog.setPoints(settlementData.score);//分数
+                        int type = this.data.type;//房间类型
+                        zjUserInfolog.setCompeteType(String.valueOf(type));
+                        if (type==1){
+                            Contest contest = ContestService.getInstance().contestMap.getOrDefault(tmPlayer.data.contestId, null);
+                            if(contest!=null){
+                                zjUserInfolog.setCompeteId(String.valueOf(contest.data.contestId));//赛事id
+                                zjUserInfolog.setTurnNum(contest.data.curRound);//轮次
+                            }
+                        }
+                        zjUserInfolog.setInningNum(this.data.curRound);
+                        zjUserInfolog.setPosition(pos(tmPlayer.data.pos));
+                        zjUserInfolog.setCreateTime(new Date());
+                        zjUserInfolog.setCompeteResult(tmPlayer.data.playerId.equals(winPlayerData.playerId)?"1":"2");
+                        object.put("type","gameInfo");
+                        object.put("data",zjUserInfolog);
+                        SendGameInfoUtil.sendGameInfo(object);
                     }
                 }
             }
@@ -1181,6 +1210,20 @@ public class ZDRoom extends Room {
         Log.info("牌局结算...roomId={}, {}", this.data.roomId, builder.toString());
     }
 
+    public static String pos(int pos) {
+        switch (pos) {
+            case 0:
+                return "1";
+            case 1:
+                return "2";
+            case 2:
+                return "3";
+            case 3:
+                return "4";
+        }
+        return "";
+    }
+
     /**
      * 游戏结束
      */

+ 19 - 0
incubator-game/src/main/java/com/incubator/game/util/SendGameInfoUtil.java

@@ -0,0 +1,19 @@
+package com.incubator.game.util;
+
+import cn.hutool.json.JSONObject;
+import com.incubator.game.data.mq.RabbitMQUtil;
+
+/**
+ * Author:  xhb
+ * Date:  2025-01-06 17:54
+ */
+public class SendGameInfoUtil {
+
+    public static void sendGameInfo(JSONObject object) {
+        try {
+            RabbitMQUtil.sendMessage(object.toString());
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+    }
+}

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

@@ -96,6 +96,7 @@ enum Cmd {
     AuthenticationReq = 200321; //绑定个人实名认证请求
     AuthenticationRes = 200322; //绑定个人实名认证响应
     PersonalDataChanges = 200324; //个人信息变化数据
+    FreezePlayer = 200326; //冻结用户消息
 
 
     //排行榜