KKSU
2024-07-01 8b880876803980fb1e59f3b7ba8737307d2d117e
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();