From cd59cd93b4eceee7b5f948a19d4e78371348fcd0 Mon Sep 17 00:00:00 2001
From: KKSU <15274802129@163.com>
Date: Thu, 27 Jun 2024 10:29:27 +0800
Subject: [PATCH] 后台

---
 src/main/java/cc/mrbird/febs/mall/service/impl/GameServiceImpl.java |   66 ++++++++++++++++++++++++++++-----
 1 files changed, 56 insertions(+), 10 deletions(-)

diff --git a/src/main/java/cc/mrbird/febs/mall/service/impl/GameServiceImpl.java b/src/main/java/cc/mrbird/febs/mall/service/impl/GameServiceImpl.java
index 6218867..ad6c898 100644
--- a/src/main/java/cc/mrbird/febs/mall/service/impl/GameServiceImpl.java
+++ b/src/main/java/cc/mrbird/febs/mall/service/impl/GameServiceImpl.java
@@ -3,10 +3,7 @@
 import cc.mrbird.febs.common.entity.FebsResponse;
 import cc.mrbird.febs.common.enumerates.*;
 import cc.mrbird.febs.common.exception.FebsException;
-import cc.mrbird.febs.common.utils.AppContants;
-import cc.mrbird.febs.common.utils.LoginUserUtil;
-import cc.mrbird.febs.common.utils.MallUtils;
-import cc.mrbird.febs.common.utils.ShareCodeUtil;
+import cc.mrbird.febs.common.utils.*;
 import cc.mrbird.febs.mall.dto.*;
 import cc.mrbird.febs.mall.entity.*;
 import cc.mrbird.febs.mall.mapper.*;
@@ -14,10 +11,12 @@
 import cc.mrbird.febs.mall.service.IApiMallMemberWalletService;
 import cc.mrbird.febs.mall.service.IMallMoneyFlowService;
 import cc.mrbird.febs.mall.vo.*;
+import cc.mrbird.febs.websocket.WebSocketRes;
 import cn.hutool.core.collection.CollUtil;
 import cn.hutool.core.util.ObjectUtil;
 import cn.hutool.core.util.RandomUtil;
 import cn.hutool.core.util.StrUtil;
+import cn.hutool.json.JSONUtil;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import lombok.RequiredArgsConstructor;
@@ -100,6 +99,14 @@
         Integer partner = ObjectUtil.isEmpty(mallMember.getPartner()) ? 2 : mallMember.getPartner();
         if(AppContants.MEMBER_PARTNER_NO == partner){
             throw new FebsException("用户没有创建房间的权限!");
+        }
+
+        QueryWrapper<GameRoom> gameRoomQuery = new QueryWrapper<>();
+        gameRoomQuery.eq("owner_member_id",memberId);
+        gameRoomQuery.ne("state",GameRoom.STATE_DONE);
+        List<GameRoom> gameRoomsExists = gameRoomMapper.selectList(gameRoomQuery);
+        if(CollUtil.isNotEmpty(gameRoomsExists)){
+            throw new FebsException("房间已创建!房间码为:"+gameRoomsExists.get(0).getPassword());
         }
 
         Integer roomType = apiCreateRoomDto.getRoomType();
@@ -192,7 +199,10 @@
         /**
          * 给房间里面的所有人发送一个开始的信息
          */
-        this.sendMsgByRoomId(roomId,"START:"+gameGame.getId());
+        WebSocketRes webSocketRes = new WebSocketRes();
+        webSocketRes.setCode(200);
+        webSocketRes.setMsg(gameGame.getId().toString());
+        this.sendMsgByRoomId(roomId, JSONUtil.parse(webSocketRes).toString());
 
         ApiStartGameVo apiStartGameVo = new ApiStartGameVo();
         apiStartGameVo.setRoomType(gameRoom.getRoomType());
@@ -364,7 +374,13 @@
         /**
          * 给房间里面的所有人发送一个开始的信息
          */
-        this.sendMsgByRoomId(roomId,"TZ:"+gameGame.getId());
+
+
+        WebSocketRes webSocketRes = new WebSocketRes();
+        webSocketRes.setCode(200);
+        webSocketRes.setMsg(gameId.toString());
+        this.sendMsgByRoomId(roomId, JSONUtil.parse(webSocketRes).toString());
+//        this.sendMsgByRoomId(roomId,"TZ:"+gameGame.getId());
 
         return new FebsResponse().success().message("操作成功");
     }
@@ -391,6 +407,24 @@
         if(GameRoom.STATE_DONE == gameRoom.getState()){
             throw new FebsException("房间已失效");
         }
+
+        QueryWrapper<GameRoomChild> roomChildQueryWrapper = new QueryWrapper<>();
+        roomChildQueryWrapper.eq("member_id",memberId);
+        List<GameRoomChild> roomChildExists = gameRoomChildMapper.selectList(roomChildQueryWrapper);
+        if(CollUtil.isNotEmpty(roomChildExists)){
+            List<Long> roomIds = roomChildExists.stream().map(GameRoomChild::getRoomId).collect(Collectors.toList());
+
+            QueryWrapper<GameRoom> roomQuery = new QueryWrapper<>();
+            roomQuery.in("id",roomIds);
+            List<GameRoom> gameRooms = gameRoomMapper.selectList(roomQuery);
+            List<GameRoom> collect = gameRooms.stream().filter(room -> room.getState() != GameRoom.STATE_DONE).collect(Collectors.toList());
+            if(CollUtil.isNotEmpty(collect)){
+                if(collect.size() > 1){
+                    throw new FebsException("请回到房间,房间码:"+collect.get(0).getPassword());
+                }
+            }
+        }
+
 
         ApiGamePlayerVo apiGamePlayerVo = new ApiGamePlayerVo();
 
@@ -440,6 +474,10 @@
         apiGamePlayerVo.setPassword(gameRoom.getPassword());
         apiGamePlayerVo.setState(gameRoom.getState());
         apiGamePlayerVo.setGameTime(gameRoom.getGameTime());
+
+        Long ownerMemberId = gameRoom.getOwnerMemberId();
+        MallMember mallMember = mallMemberMapper.selectById(ownerMemberId);
+        apiGamePlayerVo.setRoomOwner(mallMember.getAccountLogin());
 
         QueryWrapper<GameGame> gameGameQueryWrapper = new QueryWrapper<>();
         gameGameQueryWrapper.eq("room_id",gameRoom.getId());
@@ -517,7 +555,11 @@
         //结算 todo 改成rabbitMq消息推送,注意游戏主表的状态变化
         this.perkGameGameChild(gameId,firstNum,secondNum);
 
-        this.sendMsgByRoomId(roomId,"DONE:"+gameId);
+        WebSocketRes webSocketRes = new WebSocketRes();
+        webSocketRes.setCode(200);
+        webSocketRes.setMsg(gameId.toString());
+        this.sendMsgByRoomId(roomId, JSONUtil.parse(webSocketRes).toString());
+//        this.sendMsgByRoomId(roomId,"DONE:"+gameId);
 
         ApiEndGameVo apiEndGameVo = new ApiEndGameVo();
         apiEndGameVo.setRoomId(roomId);
@@ -725,7 +767,7 @@
         Long memberId = LoginUserUtil.getLoginUser().getId();
         Long roomId = apiExistGameDto.getRoomId();
         /**
-         * 删除房间子表的数据
+         * 更新房间子表的数据
          */
         MallMember mallMember = mallMemberMapper.selectById(memberId);
         QueryWrapper<GameRoomChild> gameRoomChildQueryWrapper = new QueryWrapper<>();
@@ -743,11 +785,15 @@
                 gameRoom.setState(GameRoom.STATE_DONE);
                 gameRoomMapper.updateById(gameRoom);
 
-                this.sendMsgByRoomId(roomId,"OVER");
+                WebSocketRes webSocketRes = new WebSocketRes();
+                webSocketRes.setCode(200);
+                webSocketRes.setMsg("OVER");
+                this.sendMsgByRoomId(roomId, JSONUtil.parse(webSocketRes).toString());
+//                this.sendMsgByRoomId(roomId,"OVER");
             }
         }
         //断开websocket
-        WsSessionManager.remove(mallMember.getInviteId());
+        WsSessionManager.removeAndClose(mallMember.getInviteId());
 
         return new FebsResponse().success();
     }

--
Gitblit v1.9.1