From 8b880876803980fb1e59f3b7ba8737307d2d117e Mon Sep 17 00:00:00 2001
From: KKSU <15274802129@163.com>
Date: Mon, 01 Jul 2024 09:49:30 +0800
Subject: [PATCH] 后台

---
 src/main/java/cc/mrbird/febs/mall/vo/ApiNextGameVo.java                   |    3 
 src/main/java/cc/mrbird/febs/mall/entity/GameRoomChild.java               |    1 
 src/main/java/cc/mrbird/febs/mall/service/GameService.java                |    3 
 src/main/java/cc/mrbird/febs/mall/service/impl/GameServiceImpl.java       |  376 ++++++++++++++++++++++++++++++++++++++--------
 src/main/java/cc/mrbird/febs/mall/vo/ApiCreateRoomVo.java                 |    3 
 src/main/java/cc/mrbird/febs/websocket/HttpAuthHandler.java               |    2 
 src/main/java/cc/mrbird/febs/mall/vo/ApiRoomInfoVo.java                   |   49 ++++++
 src/main/java/cc/mrbird/febs/mall/dto/ApiBindAddressDto.java              |    3 
 src/main/java/cc/mrbird/febs/mall/dto/ApiRoomInfoDto.java                 |   16 ++
 src/main/java/cc/mrbird/febs/mall/controller/ApiGamePlayerController.java |   14 +
 src/main/java/cc/mrbird/febs/mall/entity/GameRoom.java                    |    1 
 11 files changed, 400 insertions(+), 71 deletions(-)

diff --git a/src/main/java/cc/mrbird/febs/mall/controller/ApiGamePlayerController.java b/src/main/java/cc/mrbird/febs/mall/controller/ApiGamePlayerController.java
index cadbef9..c45e368 100644
--- a/src/main/java/cc/mrbird/febs/mall/controller/ApiGamePlayerController.java
+++ b/src/main/java/cc/mrbird/febs/mall/controller/ApiGamePlayerController.java
@@ -3,10 +3,7 @@
 import cc.mrbird.febs.common.entity.FebsResponse;
 import cc.mrbird.febs.mall.dto.*;
 import cc.mrbird.febs.mall.service.GameService;
-import cc.mrbird.febs.mall.vo.ApiCreateRoomVo;
-import cc.mrbird.febs.mall.vo.ApiFlashGameVo;
-import cc.mrbird.febs.mall.vo.ApiGamePlayerVo;
-import cc.mrbird.febs.mall.vo.ApiNextGameVo;
+import cc.mrbird.febs.mall.vo.*;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import io.swagger.annotations.ApiResponse;
@@ -46,6 +43,15 @@
         return gameService.chooseNum(apiChooseNumDto);
     }
 
+    @ApiOperation(value = "GUESSROOMID获取房间信息", notes = "GUESSROOMID获取房间信息")
+    @ApiResponses({
+            @ApiResponse(code = 200, message = "success", response = ApiRoomInfoVo.class)
+    })
+    @PostMapping(value = "/roomInfo")
+    public FebsResponse roomInfo(@RequestBody @Valid ApiRoomInfoDto apiRoomInfoDto) {
+        return gameService.roomInfo(apiRoomInfoDto);
+    }
+
     @ApiOperation(value = "GUESS刷新当前一局", notes = "GUESS刷新当前一局")
     @ApiResponses({
             @ApiResponse(code = 200, message = "success", response = ApiNextGameVo.class)
diff --git a/src/main/java/cc/mrbird/febs/mall/dto/ApiBindAddressDto.java b/src/main/java/cc/mrbird/febs/mall/dto/ApiBindAddressDto.java
index 0ec38f0..bc2570b 100644
--- a/src/main/java/cc/mrbird/febs/mall/dto/ApiBindAddressDto.java
+++ b/src/main/java/cc/mrbird/febs/mall/dto/ApiBindAddressDto.java
@@ -4,13 +4,14 @@
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
 
+import javax.validation.constraints.NotBlank;
 import javax.validation.constraints.NotNull;
 
 @Data
 @ApiModel(value = "ApiBindAddressDto", description = "参数接收类")
 public class ApiBindAddressDto {
 
-    @NotNull(message = "地址不能为空")
+    @NotBlank(message = "地址不能为空")
     @ApiModelProperty(value = "地址", example = "1")
     private String address;
 }
diff --git a/src/main/java/cc/mrbird/febs/mall/dto/ApiRoomInfoDto.java b/src/main/java/cc/mrbird/febs/mall/dto/ApiRoomInfoDto.java
new file mode 100644
index 0000000..03975e3
--- /dev/null
+++ b/src/main/java/cc/mrbird/febs/mall/dto/ApiRoomInfoDto.java
@@ -0,0 +1,16 @@
+package cc.mrbird.febs.mall.dto;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import javax.validation.constraints.NotNull;
+
+@Data
+@ApiModel(value = "ApiRoomInfoDto", description = "请求类")
+public class ApiRoomInfoDto {
+
+    @NotNull(message = "参数不能为空")
+    @ApiModelProperty(value = "房间ID")
+    private Long roomId;
+}
diff --git a/src/main/java/cc/mrbird/febs/mall/entity/GameRoom.java b/src/main/java/cc/mrbird/febs/mall/entity/GameRoom.java
index 6355859..c635199 100644
--- a/src/main/java/cc/mrbird/febs/mall/entity/GameRoom.java
+++ b/src/main/java/cc/mrbird/febs/mall/entity/GameRoom.java
@@ -11,6 +11,7 @@
     private Integer roomType;//房间类型 1-初级房2-土豪房3-尊爵房
     private String password;//房间密码(房间唯一编码,自动生成)
     private Long ownerMemberId;//房主用户表ID
+    private String roomOwner;//房主用户表ID
 
     private Integer state;//房间状态0-未开始1-正常2-结束
     public static final Integer STATE_READY = 0;
diff --git a/src/main/java/cc/mrbird/febs/mall/entity/GameRoomChild.java b/src/main/java/cc/mrbird/febs/mall/entity/GameRoomChild.java
index f7b8414..3d110c6 100644
--- a/src/main/java/cc/mrbird/febs/mall/entity/GameRoomChild.java
+++ b/src/main/java/cc/mrbird/febs/mall/entity/GameRoomChild.java
@@ -11,6 +11,7 @@
     private Long roomId;//
     private Long memberId;//用户表ID
     private Integer ownerState;//1-房主 2-玩家
+    private Integer state;//1-进入 2-退出
     public static final Integer OWNER_TRUE = 1;
     public static final Integer OWNER_FALSE = 2;
 
diff --git a/src/main/java/cc/mrbird/febs/mall/service/GameService.java b/src/main/java/cc/mrbird/febs/mall/service/GameService.java
index e873ac6..33e1e1e 100644
--- a/src/main/java/cc/mrbird/febs/mall/service/GameService.java
+++ b/src/main/java/cc/mrbird/febs/mall/service/GameService.java
@@ -45,4 +45,7 @@
     FebsResponse existGame(ApiExistGameDto apiExistGameDto);
 
     FebsResponse flashGame(ApiFlashGameDto apiFlashGameDto);
+
+    FebsResponse roomInfo(ApiRoomInfoDto apiRoomInfoDto);
+
 }
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 ad6c898..889092b 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
@@ -101,6 +101,24 @@
             throw new FebsException("用户没有创建房间的权限!");
         }
 
+        QueryWrapper<GameRoomChild> roomChildQueryWrapper = new QueryWrapper<>();
+        roomChildQueryWrapper.eq("member_id",memberId);
+        roomChildQueryWrapper.eq("state",GameRoomChild.OWNER_TRUE);
+        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() > 0){
+                    throw new FebsException("请退出房间,房间码:"+collect.get(0).getPassword());
+                }
+            }
+        }
+
         QueryWrapper<GameRoom> gameRoomQuery = new QueryWrapper<>();
         gameRoomQuery.eq("owner_member_id",memberId);
         gameRoomQuery.ne("state",GameRoom.STATE_DONE);
@@ -125,6 +143,7 @@
         gameRoom.setRoomType(roomType);
         gameRoom.setState(GameRoom.STATE_READY);
         gameRoom.setOwnerMemberId(memberId);
+        gameRoom.setRoomOwner(mallMember.getAccountLogin());
         gameRoom.setGameTime(gameTime);
         gameRoomMapper.insert(gameRoom);
 
@@ -147,6 +166,7 @@
         gameRoomChild.setRoomId(gameRoom.getId());
         gameRoomChild.setOwnerState(GameRoomChild.OWNER_TRUE);
         gameRoomChild.setMemberId(memberId);
+        gameRoomChild.setState(GameRoomChild.OWNER_TRUE);
         gameRoomChildMapper.insert(gameRoomChild);
 
         ApiCreateRoomVo apiCreateRoomVo = new ApiCreateRoomVo();
@@ -218,6 +238,7 @@
     public void sendMsgByRoomId(Long roomId,String msg) {
         QueryWrapper<GameRoomChild> gameRoomChildQueryWrapper = new QueryWrapper<>();
         gameRoomChildQueryWrapper.eq("room_id",roomId);
+        gameRoomChildQueryWrapper.eq("state",GameRoomChild.OWNER_TRUE);
         List<GameRoomChild> gameRoomChildrens = gameRoomChildMapper.selectList(gameRoomChildQueryWrapper);
         if(CollUtil.isEmpty(gameRoomChildrens)){
             return;
@@ -279,6 +300,7 @@
         QueryWrapper<GameRoomChild> gameRoomChildQueryWrapper = new QueryWrapper<>();
         gameRoomChildQueryWrapper.eq("room_id",gameRoom.getId());
         gameRoomChildQueryWrapper.eq("member_id",memberId);
+        gameRoomChildQueryWrapper.eq("state",GameRoomChild.OWNER_TRUE);
         GameRoomChild gameRoomChildExist = gameRoomChildMapper.selectOne(gameRoomChildQueryWrapper);
         if(ObjectUtil.isEmpty(gameRoomChildExist)){
             throw new FebsException("请重新进入房间");
@@ -290,7 +312,7 @@
             throw new FebsException("余额不足");
         }
         if(amount.compareTo(balance) > 0){
-            throw new FebsException("请减小金额");
+            throw new FebsException("余额不足");
         }
 
         GameRoomTypeEnum room = GameRoomTypeEnum.ROOM_ONE.getRoom(gameRoom.getRoomType());
@@ -346,28 +368,82 @@
         gameGameChildMapper.insert(gameGameChild);
 
         if(1 == chooseNum){
-            BigDecimal add = gameGame.getPickOne().add(amount).setScale(2,BigDecimal.ROUND_DOWN);
-            gameGame.setPickOne(add);
+            QueryWrapper<GameGameChild> objectQueryWrapper = new QueryWrapper<>();
+            objectQueryWrapper.eq("game_id",gameId);
+            objectQueryWrapper.eq("pick_num",chooseNum);
+            List<GameGameChild> gameGameChildren = gameGameChildMapper.selectList(objectQueryWrapper);
+            BigDecimal tzAmount = BigDecimal.ZERO;
+            if(CollUtil.isNotEmpty(gameGameChildren)){
+                tzAmount = gameGameChildren.stream()
+                        .map(GameGameChild::getAmount) // 映射amount到流中
+                        .reduce(BigDecimal.ZERO, BigDecimal::add);
+            }
+            gameGame.setPickOne(tzAmount);
         }
         if(2 == chooseNum){
-            BigDecimal add = gameGame.getPickTwo().add(amount).setScale(2,BigDecimal.ROUND_DOWN);
-            gameGame.setPickTwo(add);
+            QueryWrapper<GameGameChild> objectQueryWrapper = new QueryWrapper<>();
+            objectQueryWrapper.eq("game_id",gameId);
+            objectQueryWrapper.eq("pick_num",chooseNum);
+            List<GameGameChild> gameGameChildren = gameGameChildMapper.selectList(objectQueryWrapper);
+            BigDecimal tzAmount = BigDecimal.ZERO;
+            if(CollUtil.isNotEmpty(gameGameChildren)){
+                tzAmount = gameGameChildren.stream()
+                        .map(GameGameChild::getAmount) // 映射amount到流中
+                        .reduce(BigDecimal.ZERO, BigDecimal::add);
+            }
+            gameGame.setPickTwo(tzAmount);
         }
         if(3 == chooseNum){
-            BigDecimal add = gameGame.getPickThree().add(amount).setScale(2,BigDecimal.ROUND_DOWN);
-            gameGame.setPickThree(add);
+            QueryWrapper<GameGameChild> objectQueryWrapper = new QueryWrapper<>();
+            objectQueryWrapper.eq("game_id",gameId);
+            objectQueryWrapper.eq("pick_num",chooseNum);
+            List<GameGameChild> gameGameChildren = gameGameChildMapper.selectList(objectQueryWrapper);
+            BigDecimal tzAmount = BigDecimal.ZERO;
+            if(CollUtil.isNotEmpty(gameGameChildren)){
+                tzAmount = gameGameChildren.stream()
+                        .map(GameGameChild::getAmount) // 映射amount到流中
+                        .reduce(BigDecimal.ZERO, BigDecimal::add);
+            }
+            gameGame.setPickThree(tzAmount);
         }
         if(4 == chooseNum){
-            BigDecimal add = gameGame.getPickFour().add(amount).setScale(2,BigDecimal.ROUND_DOWN);
-            gameGame.setPickFour(add);
+            QueryWrapper<GameGameChild> objectQueryWrapper = new QueryWrapper<>();
+            objectQueryWrapper.eq("game_id",gameId);
+            objectQueryWrapper.eq("pick_num",chooseNum);
+            List<GameGameChild> gameGameChildren = gameGameChildMapper.selectList(objectQueryWrapper);
+            BigDecimal tzAmount = BigDecimal.ZERO;
+            if(CollUtil.isNotEmpty(gameGameChildren)){
+                tzAmount = gameGameChildren.stream()
+                        .map(GameGameChild::getAmount) // 映射amount到流中
+                        .reduce(BigDecimal.ZERO, BigDecimal::add);
+            }
+            gameGame.setPickFour(tzAmount);
         }
         if(5 == chooseNum){
-            BigDecimal add = gameGame.getPickFive().add(amount).setScale(2,BigDecimal.ROUND_DOWN);
-            gameGame.setPickFive(add);
+            QueryWrapper<GameGameChild> objectQueryWrapper = new QueryWrapper<>();
+            objectQueryWrapper.eq("game_id",gameId);
+            objectQueryWrapper.eq("pick_num",chooseNum);
+            List<GameGameChild> gameGameChildren = gameGameChildMapper.selectList(objectQueryWrapper);
+            BigDecimal tzAmount = BigDecimal.ZERO;
+            if(CollUtil.isNotEmpty(gameGameChildren)){
+                tzAmount = gameGameChildren.stream()
+                        .map(GameGameChild::getAmount) // 映射amount到流中
+                        .reduce(BigDecimal.ZERO, BigDecimal::add);
+            }
+            gameGame.setPickFive(tzAmount);
         }
         if(6 == chooseNum){
-            BigDecimal add = gameGame.getPickSix().add(amount).setScale(2,BigDecimal.ROUND_DOWN);
-            gameGame.setPickSix(add);
+            QueryWrapper<GameGameChild> objectQueryWrapper = new QueryWrapper<>();
+            objectQueryWrapper.eq("game_id",gameId);
+            objectQueryWrapper.eq("pick_num",chooseNum);
+            List<GameGameChild> gameGameChildren = gameGameChildMapper.selectList(objectQueryWrapper);
+            BigDecimal tzAmount = BigDecimal.ZERO;
+            if(CollUtil.isNotEmpty(gameGameChildren)){
+                tzAmount = gameGameChildren.stream()
+                        .map(GameGameChild::getAmount) // 映射amount到流中
+                        .reduce(BigDecimal.ZERO, BigDecimal::add);
+            }
+            gameGame.setPickSix(tzAmount);
         }
         gameGameMapper.updateById(gameGame);
 
@@ -388,7 +464,9 @@
     @Override
     @Transactional(rollbackFor = Exception.class)
     public FebsResponse gameIn(ApiGameDto apiGameDto) {
+
         Long memberId = LoginUserUtil.getLoginUser().getId();
+        log.info("加入房间:"+memberId);
         /**
          *  验证唯一房间编码是否存在
          *  验证当前是否已经加入过该房间
@@ -410,62 +488,66 @@
 
         QueryWrapper<GameRoomChild> roomChildQueryWrapper = new QueryWrapper<>();
         roomChildQueryWrapper.eq("member_id",memberId);
+        roomChildQueryWrapper.eq("state",GameRoomChild.OWNER_TRUE);
         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());
+            roomIds.remove(gameRoom.getId());
+            if(CollUtil.isNotEmpty(roomIds)){
+                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() > 0){
+                        throw new FebsException("请退出房间,房间码:"+collect.get(0).getPassword());
+                    }
                 }
             }
         }
-
 
         ApiGamePlayerVo apiGamePlayerVo = new ApiGamePlayerVo();
 
         QueryWrapper<GameRoomChild> gameRoomChildQueryWrapper = new QueryWrapper<>();
         gameRoomChildQueryWrapper.eq("room_id",gameRoom.getId());
         gameRoomChildQueryWrapper.eq("member_id",memberId);
+        gameRoomChildQueryWrapper.eq("owner_state",GameRoomChild.OWNER_TRUE);
         GameRoomChild gameRoomChildExist = gameRoomChildMapper.selectOne(gameRoomChildQueryWrapper);
 
         MallMemberWallet mallMemberWallet = mallMemberWalletMapper.selectWalletByMemberId(memberId);
         BigDecimal balance = mallMemberWallet.getBalance();
         GameRoomTypeEnum room = GameRoomTypeEnum.ROOM_ONE.getRoom(gameRoom.getRoomType());
         if(ObjectUtil.isNotEmpty(gameRoomChildExist)){
-            Integer ownerState = gameRoomChildExist.getOwnerState();
-            if(GameRoomChild.OWNER_TRUE == ownerState){
-                BigDecimal roomAmount = new BigDecimal(room.getRoomAmount()).setScale(2,BigDecimal.ROUND_DOWN);
-                if(roomAmount.compareTo(balance) > 0){
-                    throw new FebsException("进入房间,需要"+roomAmount+",请先充值");
-                }
-            }else{
-                BigDecimal minAmount = new BigDecimal(room.getMinAmount()).setScale(2,BigDecimal.ROUND_DOWN);
-                if(minAmount.compareTo(balance) > 0){
-                    throw new FebsException("继续游戏需要"+minAmount+",请先充值");
-                }
+            BigDecimal roomAmount = new BigDecimal(room.getRoomAmount()).setScale(2,BigDecimal.ROUND_DOWN);
+            if(roomAmount.compareTo(balance) > 0){
+                throw new FebsException("进入房间,需要"+roomAmount+",请先充值");
             }
+            apiGamePlayerVo.setPlayerType(GameRoomChild.OWNER_TRUE);
         }else{
             BigDecimal minAmount = new BigDecimal(room.getMinAmount()).setScale(2,BigDecimal.ROUND_DOWN);
             if(minAmount.compareTo(balance) > 0){
                 throw new FebsException("继续游戏需要"+minAmount+",请先充值");
             }
+            apiGamePlayerVo.setPlayerType(GameRoomChild.OWNER_FALSE);
         }
 
-        if(ObjectUtil.isNotEmpty(gameRoomChildExist)){
-            apiGamePlayerVo.setPlayerType(gameRoomChildExist.getOwnerState());
-        }else{
 
+
+        QueryWrapper<GameRoomChild> childQueryWrapper = new QueryWrapper<>();
+        childQueryWrapper.eq("room_id",gameRoom.getId());
+        childQueryWrapper.eq("member_id",memberId);
+        GameRoomChild childQueryWrapperExist = gameRoomChildMapper.selectOne(childQueryWrapper);
+
+        if(ObjectUtil.isNotEmpty(childQueryWrapperExist)){
+            childQueryWrapperExist.setState(GameRoomChild.OWNER_TRUE);
+            gameRoomChildMapper.updateById(childQueryWrapperExist);
+        }else{
             GameRoomChild gameRoomChild = new GameRoomChild();
             gameRoomChild.setRoomId(gameRoom.getId());
             gameRoomChild.setMemberId(memberId);
             gameRoomChild.setOwnerState(GameRoomChild.OWNER_FALSE);
+            gameRoomChild.setState(GameRoomChild.OWNER_TRUE);
             gameRoomChildMapper.insert(gameRoomChild);
-            apiGamePlayerVo.setPlayerType(gameRoomChild.getOwnerState());
         }
         apiGamePlayerVo.setBalance(balance);
 
@@ -526,6 +608,7 @@
         gameRoomChildQueryWrapper.eq("room_id",roomId);
         gameRoomChildQueryWrapper.eq("member_id",memberId);
         gameRoomChildQueryWrapper.eq("owner_state",GameRoomChild.OWNER_TRUE);
+        gameRoomChildQueryWrapper.eq("state",GameRoomChild.OWNER_TRUE);
         GameRoomChild gameRoomChildExist = gameRoomChildMapper.selectOne(gameRoomChildQueryWrapper);
         if(ObjectUtil.isEmpty(gameRoomChildExist)){
             throw new FebsException("房间不存在");
@@ -695,23 +778,16 @@
         QueryWrapper<GameRoomChild> gameRoomChildQueryWrapper = new QueryWrapper<>();
         gameRoomChildQueryWrapper.eq("room_id",gameRoom.getId());
         gameRoomChildQueryWrapper.eq("member_id",memberId);
+        gameRoomChildQueryWrapper.eq("owner_state",GameRoomChild.OWNER_TRUE);
         GameRoomChild gameRoomChildExist = gameRoomChildMapper.selectOne(gameRoomChildQueryWrapper);
 
         MallMemberWallet mallMemberWallet = mallMemberWalletMapper.selectWalletByMemberId(memberId);
         BigDecimal balance = mallMemberWallet.getBalance();
         GameRoomTypeEnum room = GameRoomTypeEnum.ROOM_ONE.getRoom(gameRoom.getRoomType());
         if(ObjectUtil.isNotEmpty(gameRoomChildExist)){
-            Integer ownerState = gameRoomChildExist.getOwnerState();
-            if(GameRoomChild.OWNER_TRUE == ownerState){
-                BigDecimal roomAmount = new BigDecimal(room.getRoomAmount()).setScale(2,BigDecimal.ROUND_DOWN);
-                if(roomAmount.compareTo(balance) > 0){
-                    throw new FebsException("进入房间,需要"+roomAmount+",请先充值");
-                }
-            }else{
-                BigDecimal minAmount = new BigDecimal(room.getMinAmount()).setScale(2,BigDecimal.ROUND_DOWN);
-                if(minAmount.compareTo(balance) > 0){
-                    throw new FebsException("继续游戏需要"+minAmount+",请先充值");
-                }
+            BigDecimal roomAmount = new BigDecimal(room.getRoomAmount()).setScale(2,BigDecimal.ROUND_DOWN);
+            if(roomAmount.compareTo(balance) > 0){
+                throw new FebsException("进入房间,需要"+roomAmount+",请先充值");
             }
         }else{
             BigDecimal minAmount = new BigDecimal(room.getMinAmount()).setScale(2,BigDecimal.ROUND_DOWN);
@@ -720,19 +796,11 @@
             }
         }
 
-        if(ObjectUtil.isNotEmpty(gameRoomChildExist)){
-            apiGamePlayerVo.setPlayerType(gameRoomChildExist.getOwnerState());
-        }else{
-            GameRoomChild gameRoomChild = new GameRoomChild();
-            gameRoomChild.setRoomId(gameRoom.getId());
-            gameRoomChild.setMemberId(memberId);
-            gameRoomChild.setOwnerState(GameRoomChild.OWNER_FALSE);
-            gameRoomChildMapper.insert(gameRoomChild);
-            apiGamePlayerVo.setPlayerType(gameRoomChild.getOwnerState());
-        }
+        apiGamePlayerVo.setPlayerType(ObjectUtil.isNotEmpty(gameRoomChildExist) ? GameRoomChild.OWNER_TRUE : GameRoomChild.OWNER_FALSE);
         apiGamePlayerVo.setBalance(balance);
         apiGamePlayerVo.setRoomType(gameRoom.getRoomType());
         apiGamePlayerVo.setRoomId(gameRoom.getId());
+        apiGamePlayerVo.setRoomOwner(gameRoom.getRoomOwner());
         apiGamePlayerVo.setPassword(gameRoom.getPassword());
         apiGamePlayerVo.setState(gameRoom.getState());
         apiGamePlayerVo.setGameTime(gameRoom.getGameTime());
@@ -763,6 +831,7 @@
     }
 
     @Override
+    @Transactional(rollbackFor = Exception.class)
     public FebsResponse existGame(ApiExistGameDto apiExistGameDto) {
         Long memberId = LoginUserUtil.getLoginUser().getId();
         Long roomId = apiExistGameDto.getRoomId();
@@ -777,6 +846,9 @@
         if(ObjectUtil.isEmpty(gameRoomChildExist)){
             throw new FebsException("房间不存在");
         }
+        gameRoomChildExist.setState(GameRoomChild.OWNER_FALSE);
+        gameRoomChildMapper.updateById(gameRoomChildExist);
+
         Integer ownerState = gameRoomChildExist.getOwnerState();
         //如果退出的是房主,那么游戏结束
         if(GameRoomChild.OWNER_TRUE == ownerState){
@@ -789,7 +861,29 @@
                 webSocketRes.setCode(200);
                 webSocketRes.setMsg("OVER");
                 this.sendMsgByRoomId(roomId, JSONUtil.parse(webSocketRes).toString());
-//                this.sendMsgByRoomId(roomId,"OVER");
+            }
+
+            QueryWrapper<GameGame> objectQueryWrapper = new QueryWrapper<>();
+            objectQueryWrapper.eq("room_id",roomId);
+            objectQueryWrapper.eq("state",GameGame.STATE_READY);
+            List<GameGame> gameGames = gameGameMapper.selectList(objectQueryWrapper);
+            if(ObjectUtil.isNotEmpty(gameGames)){
+                for(GameGame game :gameGames){
+                    ApiEndGameDto apiEndGameDto = new ApiEndGameDto();
+                    apiEndGameDto.setRoomId(roomId);
+                    apiEndGameDto.setGameId(game.getId());
+                    this.endGame(apiEndGameDto);
+                }
+            }
+
+            QueryWrapper<GameRoomChild> roomChildQueryWrapper = new QueryWrapper<>();
+            roomChildQueryWrapper.eq("room_id",roomId);
+            List<GameRoomChild> gameRoomChildren = gameRoomChildMapper.selectList(roomChildQueryWrapper);
+            if(ObjectUtil.isNotEmpty(gameRoomChildren)){
+                for(GameRoomChild child : gameRoomChildren){
+                    child.setState(GameRoomChild.OWNER_FALSE);
+                    gameRoomChildMapper.updateById(child);
+                }
             }
         }
         //断开websocket
@@ -812,16 +906,168 @@
         apiFlashGameVo.setFirstNum(gameGame.getFirstNum());
         apiFlashGameVo.setSecondNum(gameGame.getSecondNum());
         apiFlashGameVo.setState(gameGame.getState());
-        apiFlashGameVo.setPickOne(gameGame.getPickOne());
-        apiFlashGameVo.setPickTwo(gameGame.getPickTwo());
-        apiFlashGameVo.setPickThree(gameGame.getPickThree());
-        apiFlashGameVo.setPickFour(gameGame.getPickFour());
-        apiFlashGameVo.setPickFive(gameGame.getPickFive());
-        apiFlashGameVo.setPickSix(gameGame.getPickSix());
+
+        QueryWrapper<GameGameChild> objectQueryWrapper1 = new QueryWrapper<>();
+        objectQueryWrapper1.eq("game_id",gameId);
+        objectQueryWrapper1.eq("pick_num",1);
+        List<GameGameChild> gameGameChildren1 = gameGameChildMapper.selectList(objectQueryWrapper1);
+        BigDecimal tzAmount1 = BigDecimal.ZERO;
+        if(CollUtil.isNotEmpty(gameGameChildren1)){
+            tzAmount1 = gameGameChildren1.stream()
+                    .map(GameGameChild::getAmount) // 映射amount到流中
+                    .reduce(BigDecimal.ZERO, BigDecimal::add);
+        }
+        apiFlashGameVo.setPickOne(tzAmount1);
+
+        QueryWrapper<GameGameChild> objectQueryWrapper2 = new QueryWrapper<>();
+        objectQueryWrapper2.eq("game_id",gameId);
+        objectQueryWrapper2.eq("pick_num",2);
+        List<GameGameChild> gameGameChildren2 = gameGameChildMapper.selectList(objectQueryWrapper2);
+        BigDecimal tzAmount2 = BigDecimal.ZERO;
+        if(CollUtil.isNotEmpty(gameGameChildren2)){
+            tzAmount2 = gameGameChildren2.stream()
+                    .map(GameGameChild::getAmount) // 映射amount到流中
+                    .reduce(BigDecimal.ZERO, BigDecimal::add);
+        }
+        apiFlashGameVo.setPickTwo(tzAmount2);
+
+        QueryWrapper<GameGameChild> objectQueryWrapper3 = new QueryWrapper<>();
+        objectQueryWrapper3.eq("game_id",gameId);
+        objectQueryWrapper3.eq("pick_num",3);
+        List<GameGameChild> gameGameChildren3 = gameGameChildMapper.selectList(objectQueryWrapper3);
+        BigDecimal tzAmount3 = BigDecimal.ZERO;
+        if(CollUtil.isNotEmpty(gameGameChildren3)){
+            tzAmount3 = gameGameChildren3.stream()
+                    .map(GameGameChild::getAmount) // 映射amount到流中
+                    .reduce(BigDecimal.ZERO, BigDecimal::add);
+        }
+        apiFlashGameVo.setPickThree(tzAmount3);
+
+        QueryWrapper<GameGameChild> objectQueryWrapper4 = new QueryWrapper<>();
+        objectQueryWrapper4.eq("game_id",gameId);
+        objectQueryWrapper4.eq("pick_num",4);
+        List<GameGameChild> gameGameChildren4 = gameGameChildMapper.selectList(objectQueryWrapper4);
+        BigDecimal tzAmount4 = BigDecimal.ZERO;
+        if(CollUtil.isNotEmpty(gameGameChildren4)){
+            tzAmount4 = gameGameChildren4.stream()
+                    .map(GameGameChild::getAmount) // 映射amount到流中
+                    .reduce(BigDecimal.ZERO, BigDecimal::add);
+        }
+        apiFlashGameVo.setPickFour(tzAmount4);
+
+        QueryWrapper<GameGameChild> objectQueryWrapper5 = new QueryWrapper<>();
+        objectQueryWrapper5.eq("game_id",gameId);
+        objectQueryWrapper5.eq("pick_num",5);
+        List<GameGameChild> gameGameChildren5 = gameGameChildMapper.selectList(objectQueryWrapper5);
+        BigDecimal tzAmount5 = BigDecimal.ZERO;
+        if(CollUtil.isNotEmpty(gameGameChildren5)){
+            tzAmount5 = gameGameChildren5.stream()
+                    .map(GameGameChild::getAmount) // 映射amount到流中
+                    .reduce(BigDecimal.ZERO, BigDecimal::add);
+        }
+        apiFlashGameVo.setPickFive(tzAmount5);
+
+        QueryWrapper<GameGameChild> objectQueryWrapper6 = new QueryWrapper<>();
+        objectQueryWrapper6.eq("game_id",gameId);
+        objectQueryWrapper6.eq("pick_num",6);
+        List<GameGameChild> gameGameChildren6 = gameGameChildMapper.selectList(objectQueryWrapper6);
+        BigDecimal tzAmount6 = BigDecimal.ZERO;
+        if(CollUtil.isNotEmpty(gameGameChildren6)){
+            tzAmount6 = gameGameChildren6.stream()
+                    .map(GameGameChild::getAmount) // 映射amount到流中
+                    .reduce(BigDecimal.ZERO, BigDecimal::add);
+        }
+        apiFlashGameVo.setPickSix(tzAmount6);
 
         return new FebsResponse().success().data(apiFlashGameVo);
     }
 
+    @Override
+    public FebsResponse roomInfo(ApiRoomInfoDto apiRoomInfoDto) {
+        Long memberId = LoginUserUtil.getLoginUser().getId();
+        Long roomId = apiRoomInfoDto.getRoomId();
+        GameRoom gameRoom = gameRoomMapper.selectById(roomId);
+        if(ObjectUtil.isEmpty(gameRoom)){
+            throw new FebsException("房间不存在");
+        }
+
+        if(GameRoom.STATE_DONE == gameRoom.getState()){
+            throw new FebsException("房间已失效");
+        }
+
+        ApiRoomInfoVo apiRoomInfoVo = new ApiRoomInfoVo();
+
+        QueryWrapper<GameRoomChild> gameRoomChildQueryWrapper = new QueryWrapper<>();
+        gameRoomChildQueryWrapper.eq("room_id",gameRoom.getId());
+        gameRoomChildQueryWrapper.eq("member_id",memberId);
+        gameRoomChildQueryWrapper.eq("owner_state",GameRoomChild.OWNER_TRUE);
+        GameRoomChild gameRoomChildExist = gameRoomChildMapper.selectOne(gameRoomChildQueryWrapper);
+
+        MallMemberWallet mallMemberWallet = mallMemberWalletMapper.selectWalletByMemberId(memberId);
+        BigDecimal balance = mallMemberWallet.getBalance();
+        GameRoomTypeEnum room = GameRoomTypeEnum.ROOM_ONE.getRoom(gameRoom.getRoomType());
+        if(ObjectUtil.isNotEmpty(gameRoomChildExist)){
+            BigDecimal roomAmount = new BigDecimal(room.getRoomAmount()).setScale(2,BigDecimal.ROUND_DOWN);
+            if(roomAmount.compareTo(balance) > 0){
+                throw new FebsException("进入房间,需要"+roomAmount+",请先充值");
+            }
+            apiRoomInfoVo.setPlayerType(GameRoomChild.OWNER_TRUE);
+        }else{
+            BigDecimal minAmount = new BigDecimal(room.getMinAmount()).setScale(2,BigDecimal.ROUND_DOWN);
+            if(minAmount.compareTo(balance) > 0){
+                throw new FebsException("继续游戏需要"+minAmount+",请先充值");
+            }
+            apiRoomInfoVo.setPlayerType(GameRoomChild.OWNER_FALSE);
+        }
+
+
+
+        QueryWrapper<GameRoomChild> childQueryWrapper = new QueryWrapper<>();
+        childQueryWrapper.eq("room_id",gameRoom.getId());
+        childQueryWrapper.eq("member_id",memberId);
+        GameRoomChild childQueryWrapperExist = gameRoomChildMapper.selectOne(childQueryWrapper);
+
+        if(ObjectUtil.isNotEmpty(childQueryWrapperExist)){
+            childQueryWrapperExist.setState(GameRoomChild.OWNER_TRUE);
+            gameRoomChildMapper.updateById(childQueryWrapperExist);
+        }
+        apiRoomInfoVo.setBalance(balance);
+
+        apiRoomInfoVo.setRoomType(gameRoom.getRoomType());
+        apiRoomInfoVo.setRoomId(gameRoom.getId());
+        apiRoomInfoVo.setPassword(gameRoom.getPassword());
+        apiRoomInfoVo.setState(gameRoom.getState());
+        apiRoomInfoVo.setGameTime(gameRoom.getGameTime());
+
+        Long ownerMemberId = gameRoom.getOwnerMemberId();
+        MallMember mallMember = mallMemberMapper.selectById(ownerMemberId);
+        apiRoomInfoVo.setRoomOwner(mallMember.getAccountLogin());
+
+        QueryWrapper<GameGame> gameGameQueryWrapper = new QueryWrapper<>();
+        gameGameQueryWrapper.eq("room_id",gameRoom.getId());
+        gameGameQueryWrapper.orderByDesc("CREATED_TIME");
+        gameGameQueryWrapper.last("limit 5");
+        List<GameGame> gameGames = gameGameMapper.selectList(gameGameQueryWrapper);
+        List<ApiGameGameVo> apiGameGameVos = new ArrayList<>();
+        if(CollUtil.isNotEmpty(gameGames)){
+            for(GameGame gameGame : gameGames){
+                ApiGameGameVo apiGameGameVo = new ApiGameGameVo();
+                apiGameGameVo.setFirstNum(ObjectUtil.isEmpty(gameGame.getFirstNum()) ? 0 : gameGame.getFirstNum());
+                apiGameGameVo.setSecondNum(ObjectUtil.isEmpty(gameGame.getSecondNum()) ? 0 : gameGame.getSecondNum());
+                apiGameGameVo.setState(gameGame.getState());
+                apiGameGameVo.setPerkTime(gameGame.getPerkTime());
+                if(GameGame.STATE_READY == gameGame.getState()){
+                    apiRoomInfoVo.setGameId(gameGame.getId());
+                    apiRoomInfoVo.setCreatedTime(gameGame.getCreatedTime());
+                }
+                apiGameGameVos.add(apiGameGameVo);
+            }
+        }
+        apiRoomInfoVo.setApiGameGameVos(apiGameGameVos);
+
+        return new FebsResponse().success().data(apiRoomInfoVo);
+    }
+
     public static void main(String[] args) {
         System.out.println(ShareCodeUtil.toSerialNumberCodeTwo(1L));
         List<GameRoomTypeEnum> roomLists = GameRoomTypeEnum.ROOM_ONE.getRoomList();
diff --git a/src/main/java/cc/mrbird/febs/mall/vo/ApiCreateRoomVo.java b/src/main/java/cc/mrbird/febs/mall/vo/ApiCreateRoomVo.java
index 1968b3c..84d40c8 100644
--- a/src/main/java/cc/mrbird/febs/mall/vo/ApiCreateRoomVo.java
+++ b/src/main/java/cc/mrbird/febs/mall/vo/ApiCreateRoomVo.java
@@ -11,6 +11,9 @@
     @ApiModelProperty(value = "房间ID")
     private Long roomId;
 
+    @ApiModelProperty(value = "游戏ID")
+    private Long gameId;
+
     @ApiModelProperty(value = "房间类型 1-初级房2-土豪房3-尊爵房")
     private Integer roomType;//房间类型 1-初级房2-土豪房3-尊爵房
 
diff --git a/src/main/java/cc/mrbird/febs/mall/vo/ApiNextGameVo.java b/src/main/java/cc/mrbird/febs/mall/vo/ApiNextGameVo.java
index e411fb9..6c1f08c 100644
--- a/src/main/java/cc/mrbird/febs/mall/vo/ApiNextGameVo.java
+++ b/src/main/java/cc/mrbird/febs/mall/vo/ApiNextGameVo.java
@@ -32,6 +32,9 @@
     @ApiModelProperty(value = "一局游戏时长")
     private Integer gameTime;
 
+    @ApiModelProperty(value = "房主昵称")
+    private String roomOwner;//房间类型 1-初级房2-土豪房3-尊爵房
+
     @ApiModelProperty(value = "房间类型 1-初级房2-土豪房3-尊爵房")
     private Integer roomType;//房间类型 1-初级房2-土豪房3-尊爵房
 
diff --git a/src/main/java/cc/mrbird/febs/mall/vo/ApiRoomInfoVo.java b/src/main/java/cc/mrbird/febs/mall/vo/ApiRoomInfoVo.java
new file mode 100644
index 0000000..4c80038
--- /dev/null
+++ b/src/main/java/cc/mrbird/febs/mall/vo/ApiRoomInfoVo.java
@@ -0,0 +1,49 @@
+package cc.mrbird.febs.mall.vo;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.math.BigDecimal;
+import java.util.Date;
+import java.util.List;
+
+@Data
+@ApiModel(value = "ApiRoomInfoVo", description = "信息返回类")
+public class ApiRoomInfoVo {
+
+    @ApiModelProperty(value = "房间ID")
+    private Long roomId;
+
+    @ApiModelProperty(value = "当前局游戏ID")
+    private Long gameId;
+
+    @ApiModelProperty(value = "身份类型 1-房主 2-玩家")
+    private Integer playerType;//房间类型 1-初级房2-土豪房3-尊爵房
+
+    @ApiModelProperty(value = "余额")
+    private BigDecimal balance;
+
+    @ApiModelProperty(value = "时间")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+    private Date createdTime;
+
+    @ApiModelProperty(value = "一局游戏时长")
+    private Integer gameTime;
+
+    @ApiModelProperty(value = "房间类型 1-初级房2-土豪房3-尊爵房")
+    private Integer roomType;//房间类型 1-初级房2-土豪房3-尊爵房
+
+    @ApiModelProperty(value = "房主昵称")
+    private String roomOwner;//房间类型 1-初级房2-土豪房3-尊爵房
+
+    @ApiModelProperty(value = "房间状态0-未开始1-正常2-结束")
+    private Integer state;//房间状态0-未开始1-正常2-结束
+
+    @ApiModelProperty(value = "房间唯一编码,自动生成")
+    private String password;//房间密码(房间唯一编码,自动生成)
+
+    @ApiModelProperty(value = "历史开奖记录目前是5局")
+    private List<ApiGameGameVo> apiGameGameVos;//房间密码(房间唯一编码,自动生成)
+}
diff --git a/src/main/java/cc/mrbird/febs/websocket/HttpAuthHandler.java b/src/main/java/cc/mrbird/febs/websocket/HttpAuthHandler.java
index 240eae1..e544531 100644
--- a/src/main/java/cc/mrbird/febs/websocket/HttpAuthHandler.java
+++ b/src/main/java/cc/mrbird/febs/websocket/HttpAuthHandler.java
@@ -32,7 +32,7 @@
 
     @Override
     protected void handleTextMessage(WebSocketSession session, TextMessage message) throws Exception {
-        log.info("收到消息--{}", message.getPayload());
+//        log.info("收到消息--{}", message.getPayload());
         WebSocketRes webSocketRes = new WebSocketRes();
         webSocketRes.setCode(200);
         webSocketRes.setMsg("PONG");

--
Gitblit v1.9.1