KKSU
2024-07-01 8b880876803980fb1e59f3b7ba8737307d2d117e
后台
9 files modified
2 files added
471 ■■■■ changed files
src/main/java/cc/mrbird/febs/mall/controller/ApiGamePlayerController.java 14 ●●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/mall/dto/ApiBindAddressDto.java 3 ●●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/mall/dto/ApiRoomInfoDto.java 16 ●●●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/mall/entity/GameRoom.java 1 ●●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/mall/entity/GameRoomChild.java 1 ●●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/mall/service/GameService.java 3 ●●●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/mall/service/impl/GameServiceImpl.java 376 ●●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/mall/vo/ApiCreateRoomVo.java 3 ●●●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/mall/vo/ApiNextGameVo.java 3 ●●●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/mall/vo/ApiRoomInfoVo.java 49 ●●●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/websocket/HttpAuthHandler.java 2 ●●● patch | view | raw | blame | history
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)
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;
}
src/main/java/cc/mrbird/febs/mall/dto/ApiRoomInfoDto.java
New file
@@ -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;
}
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;
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;
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);
}
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();
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-尊爵房
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-尊爵房
src/main/java/cc/mrbird/febs/mall/vo/ApiRoomInfoVo.java
New file
@@ -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;//房间密码(房间唯一编码,自动生成)
}
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");