| | |
| | | import cc.mrbird.febs.common.entity.FebsResponse; |
| | | import cc.mrbird.febs.common.enumerates.*; |
| | | import cc.mrbird.febs.common.exception.FebsException; |
| | | import cc.mrbird.febs.common.utils.AppContants; |
| | | import cc.mrbird.febs.common.utils.LoginUserUtil; |
| | | import cc.mrbird.febs.common.utils.MallUtils; |
| | | import cc.mrbird.febs.common.utils.ShareCodeUtil; |
| | | import cc.mrbird.febs.common.utils.*; |
| | | import cc.mrbird.febs.mall.dto.*; |
| | | import cc.mrbird.febs.mall.entity.*; |
| | | import cc.mrbird.febs.mall.mapper.*; |
| | |
| | | import cc.mrbird.febs.mall.service.IApiMallMemberWalletService; |
| | | import cc.mrbird.febs.mall.service.IMallMoneyFlowService; |
| | | import cc.mrbird.febs.mall.vo.*; |
| | | import cc.mrbird.febs.websocket.WebSocketRes; |
| | | import cn.hutool.core.collection.CollUtil; |
| | | import cn.hutool.core.util.ObjectUtil; |
| | | import cn.hutool.core.util.RandomUtil; |
| | | import cn.hutool.core.util.StrUtil; |
| | | import cn.hutool.json.JSONUtil; |
| | | import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; |
| | | import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; |
| | | import lombok.RequiredArgsConstructor; |
| | |
| | | //每局时间倒计时 |
| | | Integer gameTime = apiCreateRoomDto.getGameTime(); |
| | | if(1 > gameTime || 60 < gameTime){ |
| | | throw new FebsException("请输入合适的数字"); |
| | | throw new FebsException("请输入合适的数字:1~60"); |
| | | } |
| | | //代理身份才能创建房间 |
| | | MallMember mallMember = mallMemberMapper.selectById(memberId); |
| | | Integer partner = ObjectUtil.isEmpty(mallMember.getPartner()) ? 2 : mallMember.getPartner(); |
| | | if(AppContants.MEMBER_PARTNER_NO == partner){ |
| | | 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); |
| | | List<GameRoom> gameRoomsExists = gameRoomMapper.selectList(gameRoomQuery); |
| | | if(CollUtil.isNotEmpty(gameRoomsExists)){ |
| | | throw new FebsException("房间已创建!房间码为:"+gameRoomsExists.get(0).getPassword()); |
| | | } |
| | | |
| | | Integer roomType = apiCreateRoomDto.getRoomType(); |
| | |
| | | gameRoom.setRoomType(roomType); |
| | | gameRoom.setState(GameRoom.STATE_READY); |
| | | gameRoom.setOwnerMemberId(memberId); |
| | | gameRoom.setRoomOwner(mallMember.getAccountLogin()); |
| | | gameRoom.setGameTime(gameTime); |
| | | gameRoomMapper.insert(gameRoom); |
| | | |
| | |
| | | gameRoomChild.setRoomId(gameRoom.getId()); |
| | | gameRoomChild.setOwnerState(GameRoomChild.OWNER_TRUE); |
| | | gameRoomChild.setMemberId(memberId); |
| | | gameRoomChild.setState(GameRoomChild.OWNER_TRUE); |
| | | gameRoomChildMapper.insert(gameRoomChild); |
| | | |
| | | ApiCreateRoomVo apiCreateRoomVo = new ApiCreateRoomVo(); |
| | |
| | | /** |
| | | * 给房间里面的所有人发送一个开始的信息 |
| | | */ |
| | | this.sendMsgByRoomId(roomId,"START:"+gameGame.getId()); |
| | | WebSocketRes webSocketRes = new WebSocketRes(); |
| | | webSocketRes.setCode(200); |
| | | webSocketRes.setMsg(gameGame.getId().toString()); |
| | | this.sendMsgByRoomId(roomId, JSONUtil.parse(webSocketRes).toString()); |
| | | |
| | | ApiStartGameVo apiStartGameVo = new ApiStartGameVo(); |
| | | apiStartGameVo.setRoomType(gameRoom.getRoomType()); |
| | |
| | | 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; |
| | |
| | | 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("请重新进入房间"); |
| | |
| | | throw new FebsException("余额不足"); |
| | | } |
| | | if(amount.compareTo(balance) > 0){ |
| | | throw new FebsException("请减小金额"); |
| | | throw new FebsException("余额不足"); |
| | | } |
| | | |
| | | GameRoomTypeEnum room = GameRoomTypeEnum.ROOM_ONE.getRoom(gameRoom.getRoomType()); |
| | |
| | | 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); |
| | | |
| | | /** |
| | | * 给房间里面的所有人发送一个开始的信息 |
| | | */ |
| | | this.sendMsgByRoomId(roomId,"TZ:"+gameGame.getId()); |
| | | |
| | | |
| | | WebSocketRes webSocketRes = new WebSocketRes(); |
| | | webSocketRes.setCode(200); |
| | | webSocketRes.setMsg(gameId.toString()); |
| | | this.sendMsgByRoomId(roomId, JSONUtil.parse(webSocketRes).toString()); |
| | | // this.sendMsgByRoomId(roomId,"TZ:"+gameGame.getId()); |
| | | |
| | | return new FebsResponse().success().message("操作成功"); |
| | | } |
| | |
| | | @Override |
| | | @Transactional(rollbackFor = Exception.class) |
| | | public FebsResponse gameIn(ApiGameDto apiGameDto) { |
| | | |
| | | Long memberId = LoginUserUtil.getLoginUser().getId(); |
| | | log.info("加入房间:"+memberId); |
| | | /** |
| | | * 验证唯一房间编码是否存在 |
| | | * 验证当前是否已经加入过该房间 |
| | |
| | | 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()); |
| | | 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); |
| | | |
| | |
| | | apiGamePlayerVo.setPassword(gameRoom.getPassword()); |
| | | apiGamePlayerVo.setState(gameRoom.getState()); |
| | | apiGamePlayerVo.setGameTime(gameRoom.getGameTime()); |
| | | |
| | | Long ownerMemberId = gameRoom.getOwnerMemberId(); |
| | | MallMember mallMember = mallMemberMapper.selectById(ownerMemberId); |
| | | apiGamePlayerVo.setRoomOwner(mallMember.getAccountLogin()); |
| | | |
| | | QueryWrapper<GameGame> gameGameQueryWrapper = new QueryWrapper<>(); |
| | | gameGameQueryWrapper.eq("room_id",gameRoom.getId()); |
| | |
| | | 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("房间不存在"); |
| | |
| | | //结算 todo 改成rabbitMq消息推送,注意游戏主表的状态变化 |
| | | this.perkGameGameChild(gameId,firstNum,secondNum); |
| | | |
| | | this.sendMsgByRoomId(roomId,"DONE:"+gameId); |
| | | WebSocketRes webSocketRes = new WebSocketRes(); |
| | | webSocketRes.setCode(200); |
| | | webSocketRes.setMsg(gameId.toString()); |
| | | this.sendMsgByRoomId(roomId, JSONUtil.parse(webSocketRes).toString()); |
| | | // this.sendMsgByRoomId(roomId,"DONE:"+gameId); |
| | | |
| | | ApiEndGameVo apiEndGameVo = new ApiEndGameVo(); |
| | | apiEndGameVo.setRoomId(roomId); |
| | |
| | | |
| | | mallMoneyFlowService.addMoneyFlow( |
| | | gameChild.getMemberId(), |
| | | BigDecimal.ZERO, |
| | | amount.negate(), |
| | | GameFlowTypeEnum.PLAYER_PERK.getValue(), |
| | | MallUtils.getOrderNum("ZJ"), |
| | | StrUtil.format( |
| | |
| | | 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); |
| | |
| | | } |
| | | } |
| | | |
| | | 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()); |
| | |
| | | } |
| | | |
| | | @Override |
| | | @Transactional(rollbackFor = Exception.class) |
| | | public FebsResponse existGame(ApiExistGameDto apiExistGameDto) { |
| | | Long memberId = LoginUserUtil.getLoginUser().getId(); |
| | | Long roomId = apiExistGameDto.getRoomId(); |
| | | /** |
| | | * 删除房间子表的数据 |
| | | * 更新房间子表的数据 |
| | | */ |
| | | MallMember mallMember = mallMemberMapper.selectById(memberId); |
| | | QueryWrapper<GameRoomChild> gameRoomChildQueryWrapper = new QueryWrapper<>(); |
| | |
| | | if(ObjectUtil.isEmpty(gameRoomChildExist)){ |
| | | throw new FebsException("房间不存在"); |
| | | } |
| | | gameRoomChildExist.setState(GameRoomChild.OWNER_FALSE); |
| | | gameRoomChildMapper.updateById(gameRoomChildExist); |
| | | |
| | | Integer ownerState = gameRoomChildExist.getOwnerState(); |
| | | //如果退出的是房主,那么游戏结束 |
| | | if(GameRoomChild.OWNER_TRUE == ownerState){ |
| | |
| | | gameRoom.setState(GameRoom.STATE_DONE); |
| | | gameRoomMapper.updateById(gameRoom); |
| | | |
| | | this.sendMsgByRoomId(roomId,"OVER"); |
| | | WebSocketRes webSocketRes = new WebSocketRes(); |
| | | webSocketRes.setCode(200); |
| | | webSocketRes.setMsg("OVER"); |
| | | this.sendMsgByRoomId(roomId, JSONUtil.parse(webSocketRes).toString()); |
| | | } |
| | | |
| | | 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 |
| | | WsSessionManager.remove(mallMember.getInviteId()); |
| | | WsSessionManager.removeAndClose(mallMember.getInviteId()); |
| | | |
| | | return new FebsResponse().success(); |
| | | } |
| | |
| | | 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(); |