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