Bläddra i källkod

俱乐部新增,设置主俱乐部,退出,获取我的俱乐部列表等消息逻辑,新增id生成工具类,新增redis键值 ttl方法

xhb 3 månader sedan
förälder
incheckning
83c038b6ca

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

@@ -0,0 +1,26 @@
+package com.incubator.game.constant;
+
+
+public class RedisKeyConstant {
+
+    /**
+     * 用户基础信息
+     */
+    public static final String USER_BASE = "zj:user:base:";
+    /**
+     * 俱乐部基础信息
+     */
+    public static final String CLUB_BASE = "common:base:club";
+    /**
+     * 商城基础信息
+     */
+    public static final String MALL_BASE = "common:base:mall";
+    /**
+     * 俱乐部成员
+     */
+    public static final String CLUB_MEMBER = "zj:club:member:";
+    /**
+     * 设置主俱乐部
+     */
+    public static final String SET_MAIN_CLUB = "zj:user:set:";
+}

+ 17 - 0
incubator-game/src/main/java/com/incubator/game/data/jedis/RedisUtil.java

@@ -16,6 +16,23 @@ public final class RedisUtil {
 
 	private static final int DEFAULT_SETEX_TIMEOUT = 60 * 60;// setex的默认时间
 
+	/**
+	 * 判断key值是否到期
+	 * @return
+	 */
+	public static long ttl(String key) {
+		if (isValueNull(key)) {
+			return -2;
+		}
+		Jedis jedis = null;
+		try {
+			jedis = JedisPoolUtil.getJedis();
+			return jedis.ttl(key);
+		} finally {
+			JedisPoolUtil.closeJedis(jedis);
+		}
+	}
+
 	/**
 	 * 检查给定key是否存在
 	 * 

+ 282 - 0
incubator-game/src/main/java/com/incubator/game/data/po/ZjClubPo.java

@@ -0,0 +1,282 @@
+package com.incubator.game.data.po;
+
+import java.util.Date;
+
+/**
+ * Author:  xhb
+ * Date:  2024-12-09 13:32
+ */
+public class ZjClubPo extends ZjUserPo{
+    /**
+     * 主键id
+     */
+    private String clubId;
+
+    /**
+     * 俱乐部名称
+     */
+    private String clubName;
+
+    /**
+     * 俱乐部宣传图
+     */
+    private String clubImg;
+
+    /**
+     * 俱乐部人数
+     */
+    private Integer clubMemberNum;
+
+    /**
+     * 俱乐部描述
+     */
+    private String clubDescription;
+
+    /**
+     * 俱乐部掌门人
+     */
+    private String clubCreator;
+
+    /**
+     * 俱乐部状态 0 删除  1 正常 2 封禁
+     */
+    private String clubStatus;
+
+    /**
+     * 创建时间
+     */
+    private Date createTime;
+
+    /**
+     * 俱乐部地域
+     */
+    private String clubAddress;
+
+    /**
+     * 俱乐部联赛冠军club_championship
+     */
+    private Integer clubChampionship;
+
+    /**
+     * 俱乐部等级
+     */
+    private Integer clubLevel;
+
+    /**
+     * 上线人数
+     */
+    private Integer onlineCount;
+
+    /**
+     * 是否为主俱乐部
+     */
+    private String isMain;
+
+    /**
+     * 是否为好友
+     */
+    private String isFriend;
+
+    /**
+     * 是否为掌门人
+     */
+    private String isMaster;
+
+    /**
+     * 近7日大师分
+     */
+    private String sevenDayMasterScore;
+
+    /**
+     * 俱乐部成员状态
+     */
+    private String memberStatus;
+
+    /**
+     * 加入时间
+     */
+    private Date joinTime;
+
+    /**
+     * 退出时间
+     */
+    private Date quitTime;
+
+    /**
+     * 申请理由
+     */
+    private String requestExplain;
+
+    /**
+     * 申请渠道
+     */
+    private String requestChannel;
+
+    public String getMemberStatus() {
+        return memberStatus;
+    }
+
+    public void setMemberStatus(String memberStatus) {
+        this.memberStatus = memberStatus;
+    }
+
+    public Date getJoinTime() {
+        return joinTime;
+    }
+
+    public void setJoinTime(Date joinTime) {
+        this.joinTime = joinTime;
+    }
+
+    public Date getQuitTime() {
+        return quitTime;
+    }
+
+    public void setQuitTime(Date quitTime) {
+        this.quitTime = quitTime;
+    }
+
+    public String getRequestExplain() {
+        return requestExplain;
+    }
+
+    public void setRequestExplain(String requestExplain) {
+        this.requestExplain = requestExplain;
+    }
+
+    public String getRequestChannel() {
+        return requestChannel;
+    }
+
+    public void setRequestChannel(String requestChannel) {
+        this.requestChannel = requestChannel;
+    }
+
+    public String getClubId() {
+        return clubId;
+    }
+
+    public void setClubId(String clubId) {
+        this.clubId = clubId;
+    }
+
+    public String getClubName() {
+        return clubName;
+    }
+
+    public void setClubName(String clubName) {
+        this.clubName = clubName;
+    }
+
+    public String getClubImg() {
+        return clubImg;
+    }
+
+    public void setClubImg(String clubImg) {
+        this.clubImg = clubImg;
+    }
+
+    public Integer getClubMemberNum() {
+        return clubMemberNum;
+    }
+
+    public void setClubMemberNum(Integer clubMemberNum) {
+        this.clubMemberNum = clubMemberNum;
+    }
+
+    public String getClubDescription() {
+        return clubDescription;
+    }
+
+    public void setClubDescription(String clubDescription) {
+        this.clubDescription = clubDescription;
+    }
+
+    public String getClubCreator() {
+        return clubCreator;
+    }
+
+    public void setClubCreator(String clubCreator) {
+        this.clubCreator = clubCreator;
+    }
+
+    public String getClubStatus() {
+        return clubStatus;
+    }
+
+    public void setClubStatus(String clubStatus) {
+        this.clubStatus = clubStatus;
+    }
+
+    public Date getCreateTime() {
+        return createTime;
+    }
+
+    public void setCreateTime(Date createTime) {
+        this.createTime = createTime;
+    }
+
+    public String getClubAddress() {
+        return clubAddress;
+    }
+
+    public void setClubAddress(String clubAddress) {
+        this.clubAddress = clubAddress;
+    }
+
+    public Integer getClubChampionship() {
+        return clubChampionship;
+    }
+
+    public void setClubChampionship(Integer clubChampionship) {
+        this.clubChampionship = clubChampionship;
+    }
+
+    public Integer getClubLevel() {
+        return clubLevel;
+    }
+
+    public void setClubLevel(Integer clubLevel) {
+        this.clubLevel = clubLevel;
+    }
+
+    public Integer getOnlineCount() {
+        return onlineCount;
+    }
+
+    public void setOnlineCount(Integer onlineCount) {
+        this.onlineCount = onlineCount;
+    }
+
+    public String getIsMain() {
+        return isMain;
+    }
+
+    public void setIsMain(String isMain) {
+        this.isMain = isMain;
+    }
+
+    public String getIsFriend() {
+        return isFriend;
+    }
+
+    public void setIsFriend(String isFriend) {
+        this.isFriend = isFriend;
+    }
+
+    public String getIsMaster() {
+        return isMaster;
+    }
+
+    public void setIsMaster(String isMaster) {
+        this.isMaster = isMaster;
+    }
+
+    public String getSevenDayMasterScore() {
+        return sevenDayMasterScore;
+    }
+
+    public void setSevenDayMasterScore(String sevenDayMasterScore) {
+        this.sevenDayMasterScore = sevenDayMasterScore;
+    }
+}

+ 110 - 0
incubator-game/src/main/java/com/incubator/game/data/po/ZjProductPo.java

@@ -0,0 +1,110 @@
+package com.incubator.game.data.po;
+
+import java.math.BigDecimal;
+import java.util.Date;
+
+/**
+ * Author:  xhb
+ * Date:  2024-12-09 14:07
+ */
+public class ZjProductPo {
+
+    /**
+     * 主键id
+     */
+    private String productId;
+
+    /**
+     * 商品编号
+     */
+    private String productNo;
+
+    /**
+     * 商品名称
+     */
+    private String productName;
+
+    /**
+     * 商品图片
+     */
+    private String productImg;
+
+    /**
+     * 商品描述
+     */
+    private String productDescription;
+
+    /**
+     * 商品类型关联类型表id
+     */
+    private String productType;
+
+    /**
+     * 商品单价
+     */
+    private BigDecimal productPrice;
+
+    /**
+     * 商品状态 Y:N:D
+     */
+    private String productStatus;
+
+    /**
+     * 商品数量
+     */
+    private Integer productCount;
+
+    /**
+     * 商品交易数量
+     */
+    private Integer productTrade;
+
+    /**
+     * 兑换开始时间
+     */
+    private Date productBeginTime;
+
+    /**
+     * 兑换结束时间
+     */
+    private Date productEndTime;
+
+    /**
+     * 兑换列表
+     */
+    private String productList;
+
+    /**
+     * 商品单位(1人民币 2钻石 3福卡)
+     */
+    private String productUnit;
+    /**
+     * 商品对应的物品id
+     */
+    private String productGoods;
+
+    /**
+     * 限购
+     */
+    private String purchaseLimitation;
+
+    /**
+     * 创建时间
+     */
+    private Date createTime;
+
+    /**
+     * 创建人
+     */
+    private Integer createPeople;
+
+    /**
+     * 修改时间
+     */
+    private Date updateTime;
+
+    /**
+     * 修改人
+     */
+    private Integer updatePeople;
+}

+ 163 - 0
incubator-game/src/main/java/com/incubator/game/data/po/ZjUserPo.java

@@ -0,0 +1,163 @@
+package com.incubator.game.data.po;
+
+import java.math.BigDecimal;
+import java.util.Date;
+
+/**
+ * Author:  xhb
+ * Date:  2024-12-09 14:00
+ */
+public class ZjUserPo {
+
+
+    private String userId;
+
+    /**
+     * 昵称
+     */
+    private String nickName;
+
+    /**
+     * 头像
+     */
+    private String avatarUrl;
+
+    /**
+     * 大师等级
+     */
+    private Integer honorLevel;
+    /**
+     * 等级最大分
+     */
+    private Integer masterScoreLevel;
+
+    /**
+     * 大师分
+     */
+    private Integer masterScore;
+
+    /**
+     * 系统排名
+     */
+    private Integer ranking;
+
+    /**
+     * 性别
+     */
+    private String sex;
+
+
+
+    private Date createTime;
+
+    /**
+     * 充值金钱
+     */
+    private BigDecimal rmb;
+
+    /**
+     * 主俱乐部
+     */
+    private String userClub;
+
+    /**
+     * 魅力
+     */
+    private Integer charm;
+
+    public String getUserId() {
+        return userId;
+    }
+
+    public void setUserId(String userId) {
+        this.userId = userId;
+    }
+
+    public String getNickName() {
+        return nickName;
+    }
+
+    public void setNickName(String nickName) {
+        this.nickName = nickName;
+    }
+
+    public String getAvatarUrl() {
+        return avatarUrl;
+    }
+
+    public void setAvatarUrl(String avatarUrl) {
+        this.avatarUrl = avatarUrl;
+    }
+
+    public Integer getHonorLevel() {
+        return honorLevel;
+    }
+
+    public void setHonorLevel(Integer honorLevel) {
+        this.honorLevel = honorLevel;
+    }
+
+    public Integer getMasterScoreLevel() {
+        return masterScoreLevel;
+    }
+
+    public void setMasterScoreLevel(Integer masterScoreLevel) {
+        this.masterScoreLevel = masterScoreLevel;
+    }
+
+    public Integer getMasterScore() {
+        return masterScore;
+    }
+
+    public void setMasterScore(Integer masterScore) {
+        this.masterScore = masterScore;
+    }
+
+    public Integer getRanking() {
+        return ranking;
+    }
+
+    public void setRanking(Integer ranking) {
+        this.ranking = ranking;
+    }
+
+    public String getSex() {
+        return sex;
+    }
+
+    public void setSex(String sex) {
+        this.sex = sex;
+    }
+
+    public Date getCreateTime() {
+        return createTime;
+    }
+
+    public void setCreateTime(Date createTime) {
+        this.createTime = createTime;
+    }
+
+    public BigDecimal getRmb() {
+        return rmb;
+    }
+
+    public void setRmb(BigDecimal rmb) {
+        this.rmb = rmb;
+    }
+
+    public String getUserClub() {
+        return userClub;
+    }
+
+    public void setUserClub(String userClub) {
+        this.userClub = userClub;
+    }
+
+    public Integer getCharm() {
+        return charm;
+    }
+
+    public void setCharm(Integer charm) {
+        this.charm = charm;
+    }
+}

+ 91 - 0
incubator-game/src/main/java/com/incubator/game/handler/club/CreateClub.java

@@ -0,0 +1,91 @@
+package com.incubator.game.handler.club;
+
+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.data.po.ZjClubPo;
+import com.incubator.game.data.po.ZjUserLobbyPo;
+import com.incubator.game.util.UtilCore;
+import com.incubator.message.proto.CommonProto;
+
+import java.util.List;
+
+/**
+ * Author:  xhb
+ * Date:  2024-12-09 14:27
+ * 创建俱乐部
+ */
+@MessageHandler(id = CommonProto.Cmd.CreateClubReq_VALUE)
+public class CreateClub extends NetHandler {
+
+    @Override
+    public void onDate(Connection session, WSRequest request, WSResponse response) {
+        response.setCmd(CommonProto.Cmd.CreateClubRes_VALUE);
+
+        String userId = request.getDataValue("userId", String.class, "");
+        String clubInfo = request.getDataValue("clubInfo", String.class, "");
+
+        try {
+            JSONObject jsonObject = getClubListFromRedis();
+            JSONArray clubArray = jsonObject.getJSONArray("clubList");
+            List<ZjClubPo> clubList = clubArray.toList(ZjClubPo.class);
+
+            if (isUserAlreadyCreatedClub(clubList, userId)) {
+                response.setCode(CommonProto.Code.PARAMETER_ERR_VALUE);
+                response.setMessage("您已创建过俱乐部");
+                return;
+            }
+
+            ZjClubPo newClub = createNewClub(clubInfo, userId);
+            addClubToRedis(jsonObject, clubArray, newClub);
+
+            updateUserLobbyClub(jsonObject, userId, newClub);
+        } catch (Exception e) {
+            // 处理异常,例如记录日志或返回错误响应
+            response.setCode(CommonProto.Code.SYSTEM_ERR_VALUE);
+            response.setMessage("创建俱乐部时发生错误");
+            e.printStackTrace();
+        }
+    }
+    private JSONObject getClubListFromRedis() {
+        String clubListStr = RedisUtil.get(RedisKeyConstant.CLUB_BASE);
+        return JSONUtil.parseObj(clubListStr);
+    }
+
+    private boolean isUserAlreadyCreatedClub(List<ZjClubPo> clubList, String userId) {
+        return clubList.stream().anyMatch(club -> club.getClubCreator().equals(userId));
+    }
+
+    private ZjClubPo createNewClub(String clubInfo, String userId) {
+        ZjClubPo newClub = JSONUtil.parseObj(clubInfo).toBean(ZjClubPo.class);
+        newClub.setClubId(UtilCore.getDateRandomId());
+        newClub.setClubCreator(userId);
+        newClub.setOnlineCount(1);
+        newClub.setClubStatus("1");
+        newClub.setClubLevel(1);
+        return newClub;
+    }
+
+    private void addClubToRedis(JSONObject jsonObject, JSONArray clubArray, ZjClubPo newClub) {
+        clubArray.add(newClub);
+        jsonObject.set("clubList", clubArray);
+        RedisUtil.set(RedisKeyConstant.CLUB_BASE, jsonObject.toString());
+    }
+
+    private void updateUserLobbyClub(JSONObject userObject, String userId, ZjClubPo newClub) {
+        String userInfo = RedisUtil.get(RedisKeyConstant.USER_BASE + userId);
+        userObject = JSONUtil.parseObj(userInfo);
+        Object lobbyUserObj = userObject.get("lobbyUser");
+        ZjUserLobbyPo lobbyUser = JSONUtil.toBean((JSONObject) lobbyUserObj, ZjUserLobbyPo.class);
+        lobbyUser.setUserClub(newClub.getClubId());
+        userObject.put("lobbyUser", lobbyUser);
+        RedisUtil.set(RedisKeyConstant.USER_BASE + userId, userObject.toString());
+    }
+}

+ 53 - 0
incubator-game/src/main/java/com/incubator/game/handler/club/GetClubListHandler.java

@@ -0,0 +1,53 @@
+package com.incubator.game.handler.club;
+
+import cn.hutool.json.JSONArray;
+import cn.hutool.json.JSONObject;
+import cn.hutool.json.JSONUtil;
+import cn.hutool.jwt.JWT;
+import cn.hutool.jwt.JWTUtil;
+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.data.po.ZjClubPo;
+import com.incubator.message.proto.CommonProto;
+
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * Author:  xhb
+ * Date:  2024-12-09 13:19
+ * 获取俱乐部列表信息
+ */
+@MessageHandler(id = CommonProto.Cmd.ClubInfoReq_VALUE)
+public class GetClubListHandler extends NetHandler {
+
+
+    @Override
+    public void onDate(Connection session, WSRequest request, WSResponse response) {
+        response.setCmd(CommonProto.Cmd.ClubInfoRes_VALUE);
+
+        //校验token
+        String token = request.getDataValue("token", String.class, "");
+        if (token == null) {
+            response.setCode(CommonProto.Code.SYSTEM_ERR_VALUE);
+            response.setMessage("非法请求/token不存在/token为空");
+            return;
+        }
+        //取出俱乐部列表
+        String clubs = RedisUtil.get(RedisKeyConstant.CLUB_BASE);
+        JSONObject jsonObject = JSONUtil.parseObj(clubs);
+        // 从JSONObject中获取包含俱乐部列表的数组
+        JSONArray clubArray = jsonObject.getJSONArray("clubList");
+        // 将JSONArray转换为List<ClubDto>
+        List<ZjClubPo> clubList = clubArray.toList(ZjClubPo.class);
+        Map<String, Object> map = new HashMap<>();
+        map.put("clubList", clubList);
+        response.setData(map);
+    }
+}

+ 64 - 0
incubator-game/src/main/java/com/incubator/game/handler/club/GetMyClub.java

@@ -0,0 +1,64 @@
+package com.incubator.game.handler.club;
+
+import cn.hutool.json.JSONArray;
+import cn.hutool.json.JSONObject;
+import cn.hutool.json.JSONUtil;
+import cn.hutool.jwt.JWT;
+import cn.hutool.jwt.JWTUtil;
+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.data.po.ZjClubPo;
+import com.incubator.game.data.po.ZjUserLobbyPo;
+import com.incubator.message.proto.CommonProto;
+
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * Author:  xhb
+ * Date:  2024-12-09 13:38
+ * 获取我的俱乐部信息
+ */
+@MessageHandler(id = CommonProto.Cmd.MyClubReq_VALUE)
+public class GetMyClub extends NetHandler {
+
+
+    @Override
+    public void onDate(Connection session, WSRequest request, WSResponse response) {
+        response.setCmd(CommonProto.Cmd.MyClubRes_VALUE);
+
+        //校验token
+        String token = request.getDataValue("token", String.class, "");
+        if (token == null) {
+            response.setCode(CommonProto.Code.SYSTEM_ERR_VALUE);
+            response.setMessage("非法请求/token不存在/token为空");
+            return;
+        }
+        String userId = request.getDataValue("userId", String.class, "");
+        String userInfo = RedisUtil.get(RedisKeyConstant.USER_BASE + userId);
+        JSONObject userObject = JSONUtil.parseObj(userInfo);
+        Object lobbyUserObj = userObject.get("lobbyUser");
+        ZjUserLobbyPo lobbyUser = JSONUtil.toBean((JSONObject) lobbyUserObj, ZjUserLobbyPo.class);
+        if (lobbyUser.getUserClub() == null||lobbyUser.getUserClub().equals("")) {
+            response.setCode(CommonProto.Code.SYSTEM_ERR_VALUE);
+            response.setMessage("您当前未加入俱乐部");
+            return;
+        }
+        // 根据token获取用户信息
+        String club = RedisUtil.get(RedisKeyConstant.CLUB_MEMBER + lobbyUser.getUserClub());
+        JSONObject clubObject = JSONUtil.parseObj(club);
+        // 从JSONObject中获取包含俱乐部列表的数组
+        JSONArray clubArray = clubObject.getJSONArray("clubMember");
+        // 将JSONArray转换为List<ClubDto>
+        List<ZjClubPo> clubMemberList = clubArray.toList(ZjClubPo.class);
+        Map<String, Object> map = new HashMap<>();
+        map.put("clubMemberList", clubMemberList);
+        response.setData(map);
+    }
+}

+ 91 - 0
incubator-game/src/main/java/com/incubator/game/handler/club/QuitClub.java

@@ -0,0 +1,91 @@
+package com.incubator.game.handler.club;
+
+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.data.po.ZjClubPo;
+import com.incubator.game.data.po.ZjUserLobbyPo;
+import com.incubator.message.proto.CommonProto;
+
+import java.util.Date;
+import java.util.List;
+import java.util.Random;
+
+/**
+ * Author:  xhb
+ * Date:  2024-12-09 14:27
+ */
+@MessageHandler(id = CommonProto.Cmd.QuitClubReq_VALUE)
+public class QuitClub extends NetHandler {
+
+    @Override
+    public void onDate(Connection session, WSRequest request, WSResponse response) {
+        response.setCmd(CommonProto.Cmd.QuitClubRes_VALUE);
+
+        String userId = request.getDataValue("userId", String.class, "");
+        String clubId = request.getDataValue("clubId", String.class, "");
+
+        try {
+            // 更新用户在俱乐部的状态
+            updateClubMemberStatus(clubId, userId);
+
+            // 更新用户的主俱乐部信息
+            updateUserMainClub(userId, clubId);
+        } catch (Exception e) {
+            // 异常处理
+            logger.error("系统异常 " + userId, e);
+            response.setCmd(CommonProto.Code.SYSTEM_ERR_VALUE);
+        }
+    }
+
+    private void updateClubMemberStatus(String clubId, String userId) {
+        String zjClubMember = RedisUtil.get(RedisKeyConstant.CLUB_MEMBER + clubId);
+        JSONArray clubArray = JSONUtil.parseObj(zjClubMember).getJSONArray("clubMember");
+        List<ZjClubPo> clubMemberList = clubArray.toList(ZjClubPo.class);
+
+        for (ZjClubPo clubPo : clubMemberList) {
+            if (clubPo.getUserId().equals(userId)) {
+                clubPo.setMemberStatus("3");
+                clubPo.setQuitTime(new Date());
+                break;
+            }
+        }
+
+        JSONObject object = new JSONObject();
+        object.put("clubMember", clubMemberList);
+        RedisUtil.set(RedisKeyConstant.CLUB_MEMBER + clubId, object.toString());
+    }
+
+    private void updateUserMainClub(String userId, String clubId) {
+        String userInfo = RedisUtil.get(RedisKeyConstant.USER_BASE + userId);
+        JSONObject jsonObject = JSONUtil.parseObj(userInfo);
+        ZjUserLobbyPo lobbyUser = JSONUtil.toBean(jsonObject.getJSONObject("lobbyUser"), ZjUserLobbyPo.class);
+
+        String userClub = lobbyUser.getUserClub();
+        if (userClub != null && userClub.equals(clubId)) {
+            String clubListStr = RedisUtil.get(RedisKeyConstant.CLUB_BASE);
+            JSONArray clubListArray = JSONUtil.parseObj(clubListStr).getJSONArray("clubList");
+            List<ZjClubPo> clubList = clubListArray.toList(ZjClubPo.class);
+
+            if (clubList.isEmpty()) {
+                lobbyUser.setUserClub(null);
+            } else {
+                Random random = new Random();
+                int randomIndex = random.nextInt(clubList.size());
+                String newClubId = clubList.get(randomIndex).getClubId();
+                lobbyUser.setUserClub(newClubId);
+            }
+        }
+
+        JSONObject object = new JSONObject();
+        object.put("lobbyUser", lobbyUser);
+        RedisUtil.set(RedisKeyConstant.USER_BASE + userId, object.toString());
+    }
+}

+ 50 - 0
incubator-game/src/main/java/com/incubator/game/handler/club/SetMainClub.java

@@ -0,0 +1,50 @@
+package com.incubator.game.handler.club;
+
+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.data.po.ZjUserLobbyPo;
+import com.incubator.message.proto.CommonProto;
+
+
+/**
+ * Author:  xhb
+ * Date:  2024-12-09 14:27
+ * 设置我的主社团
+ */
+@MessageHandler(id = CommonProto.Cmd.SetMainClubReq_VALUE)
+public class SetMainClub extends NetHandler {
+
+    @Override
+    public void onDate(Connection session, WSRequest request, WSResponse response) {
+        response.setCmd(CommonProto.Cmd.SetMainClubRes_VALUE);
+
+        String userId = request.getDataValue("userId", String.class, "");
+        String clubId = request.getDataValue("clubId", String.class, "");
+
+        // 根据token获取用户信息
+        String userInfo = RedisUtil.get(RedisKeyConstant.USER_BASE + userId);
+        JSONObject jsonObject = JSONUtil.parseObj(userInfo);
+        Object lobbyUserObj = jsonObject.get("lobbyUser");
+        ZjUserLobbyPo lobbyUser = JSONUtil.toBean((JSONObject) lobbyUserObj, ZjUserLobbyPo.class);
+
+        //查询上次设置主俱乐部的时间是否到期
+        long ttl = RedisUtil.ttl(RedisKeyConstant.SET_MAIN_CLUB);
+        if (ttl>0) {
+            response.setCode(CommonProto.Code.SYSTEM_ERR_VALUE);
+            response.setMessage("您已设置过主俱乐部,请在"+(int) Math.ceil((double) ttl / (24 * 60 * 60))+"天后再次设置!");
+            return ;
+        }
+        //查询我的主俱乐部
+        lobbyUser.setUserClub(clubId);
+        RedisUtil.setEx(RedisKeyConstant.SET_MAIN_CLUB+userId, clubId, Math.toIntExact(30 * 24 * 60 * 60));//设置用户的主俱乐部为30天
+        response.setCode(CommonProto.Code.OK_VALUE);
+        response.setMessage("设置成功!");
+    }
+}

+ 3 - 4
incubator-game/src/main/java/com/incubator/game/handler/login/LoginGameHandler.java

@@ -9,6 +9,7 @@ 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.data.po.PlayerInfoPO;
 import com.incubator.game.data.po.ZjUserLobbyPo;
@@ -28,15 +29,13 @@ import java.util.Map;
 @MessageHandler(id = CommonProto.Cmd.LoginReq_VALUE)
 public class LoginGameHandler extends NetHandler {
 
-	private static final String USER_BASE = "zj:user:base:";
 
 	@Override
 	public void onDate(Connection session, WSRequest request, WSResponse response) {
 		response.setCmd(CommonProto.Cmd.LoginRes_VALUE);
 
 		// 判断参数
-//		String token = request.getDataValue("token", String.class, "");
-		String token = "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJ1c2VySWQiOiIyNDEyMDYxMDAzNDc3MzE4NjEifQ.8ajDaACxDE-JF8-ZTMUhPH2DsQMeoRS3SOhR7_ZKGGw";
+		String token = request.getDataValue("token", String.class, "");
 		if (token==null) {
 			//如果token为空则重新登录
 			logger.info("登录token为空");
@@ -48,7 +47,7 @@ public class LoginGameHandler extends NetHandler {
 		System.out.println("payloads.get(\"userId\") = " + payloads.get("userId"));
 		String userId = (String) payloads.get("userId");
 		// 根据token获取用户信息
-		String userInfo = RedisUtil.get(USER_BASE + userId);
+		String userInfo = RedisUtil.get(RedisKeyConstant.USER_BASE + userId);
 		JSONObject jsonObject = JSONUtil.parseObj(userInfo);
 		Object lobbyUserObj = jsonObject.get("lobbyUser");
 		ZjUserLobbyPo lobbyUser = JSONUtil.toBean((JSONObject) lobbyUserObj, ZjUserLobbyPo.class);

+ 50 - 0
incubator-game/src/main/java/com/incubator/game/handler/mall/GetMallListInfoHandler.java

@@ -0,0 +1,50 @@
+package com.incubator.game.handler.mall;
+
+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.data.po.ZjClubPo;
+import com.incubator.game.data.po.ZjProductPo;
+import com.incubator.message.proto.CommonProto;
+
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * Author:  xhb
+ * Date:  2024-12-09 14:05
+ * 获取商城列表信息
+ */
+@MessageHandler(id = CommonProto.Cmd.ShopInfoReq_VALUE)
+public class GetMallListInfoHandler extends NetHandler {
+    @Override
+    public void onDate(Connection session, WSRequest request, WSResponse response) {
+        response.setCmd(CommonProto.Cmd.ShopInfoRes_VALUE);
+
+        //校验token
+        String token = request.getDataValue("token", String.class, "");
+        if (token == null) {
+            response.setCode(CommonProto.Code.SYSTEM_ERR_VALUE);
+            response.setMessage("非法请求/token不存在/token为空");
+            return;
+        }
+        //取出俱乐部列表
+        String malls = RedisUtil.get(RedisKeyConstant.MALL_BASE);
+        JSONObject jsonObject = JSONUtil.parseObj(malls);
+        // 从JSONObject中获取包含俱乐部列表的数组
+        JSONArray mallArray = jsonObject.getJSONArray("mallList");
+        // 将JSONArray转换为List<ClubDto>
+        List<ZjProductPo> mallList = mallArray.toList(ZjProductPo.class);
+        Map<String, Object> map = new HashMap<>();
+        map.put("mallList", mallList);
+        response.setData(map);
+    }
+}

+ 66 - 0
incubator-game/src/main/java/com/incubator/game/util/UtilCore.java

@@ -0,0 +1,66 @@
+package com.incubator.game.util;
+
+
+import java.text.SimpleDateFormat;
+import java.util.Date;
+import java.util.Random;
+
+public class UtilCore {
+
+	public static String getUserDate(String sformat) {
+		Date currentTime = new Date();
+		SimpleDateFormat formatter = new SimpleDateFormat(sformat);
+		String dateString = formatter.format(currentTime);
+		return dateString;
+	}
+
+	public static String getDateRandomId(){
+		String dateRandom = getUserDate("yyMMddHHmmss");
+		dateRandom+=""+UtilCore.getRandom(6);
+		return dateRandom;
+	}
+	public static String getDateRandomId(int k){
+		String dateRandom = getUserDate("yyMMddHHmmss");
+		dateRandom+=""+UtilCore.getRandom(k);
+		return dateRandom;
+	}
+	public static String getNo(int k) {
+        return getUserDate("yyMMdd") + getRandom(k);
+	}
+	public static String getOrderNo(int k) {
+        return getUserDate("yyMMdd") + getRandom(k);
+	}
+	
+	
+	public static String getRowId(){
+		return getNo(6);
+	}
+
+	/**
+	 * 返回一个随机数
+	 * 
+	 * @param i
+	 * @return
+	 */
+	public static String getRandom(int i) {
+		try {
+			Thread.sleep(30);
+		} catch (InterruptedException e) {
+
+		}
+		Random jjj = new Random();
+
+		if (i == 0)
+			return "";
+		String jj = "";
+		for (int k = 0; k < i; k++) {
+			jj = jj + jjj.nextInt(9);
+		}
+		return jj;
+	}
+	
+	public static void main(String[] args) {
+		String aaa = UtilCore.getDateRandomId();
+		System.out.println(aaa);
+	}	
+}

+ 20 - 2
incubator-message/src/main/proto/CommonProto.proto

@@ -77,8 +77,26 @@ enum Cmd {
     FriendInfoRes = 200502;     //好友信息响应
 
     //俱乐部
-    ClubInfoReq = 200601;       //俱乐部信息请求
-    ClubInfoRes = 200602;       //俱乐部信息响应
+    ClubInfoReq = 200601;       //俱乐部集合信息请求
+    ClubInfoRes = 200602;       //俱乐部集合信息响应
+    MyClubReq = 200603;       //我的俱乐部信息响应
+    MyClubRes = 200604;       //我的俱乐部信息响应
+    SetMainClubReq = 200605;    //设置主俱乐部的请求
+    SetMainClubRes = 200606;    //设置主俱乐部的响应
+    QuitClubReq = 200607;    //退出俱乐部的请求
+    QuitClubRes = 200608;    //退出俱乐部的响应
+    CreateClubReq = 200609;    //创建/修改俱乐部请求
+    CreateClubRes = 200610;    //创建/修改俱乐部响应
+    ApplyJoinClubReq = 200611;    //请求加入俱乐部请求
+    ApplyJoinClubRes = 200612;    //请求加入俱乐部响应
+    GetApplyListReq = 200613;    //获取申请列表请求
+    GetApplyListRes = 200614;    //获取申请列表响应
+    AgreeOrRefuseJoinReq = 200615;    //同意/拒绝加入俱乐部请求
+    AgreeOrRefuseJoinRes = 200616;    //同意/拒绝加入俱乐部响应
+    DeleteMemberReq = 200617;    //踢出俱乐部成员请求
+    DeleteMemberRes = 200618;    //踢出俱乐部成员响应
+    DissolveClubReq = 200619;    //解散俱乐部的请求
+    DissolveClubRes = 200620;    //解散俱乐部的响应
 
     //官方比赛
     MatchSignUpReq = 200701;     // 赛事报名请求