From adee5d271a70cbcb9ab45cec00795c9a7b34f6bf Mon Sep 17 00:00:00 2001
From: KKSU <15274802129@163.com>
Date: Thu, 25 Jul 2024 10:47:17 +0800
Subject: [PATCH] 后台
---
src/main/java/cc/mrbird/febs/mall/service/impl/GameServiceImpl.java | 426 ++++++++++++++++++++++++++++++++++++++++++++--------
1 files changed, 359 insertions(+), 67 deletions(-)
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 6218867..2d11339 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
@@ -3,10 +3,7 @@
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.*;
@@ -14,10 +11,12 @@
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;
@@ -93,13 +92,39 @@
//每局时间倒计时
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();
@@ -118,6 +143,7 @@
gameRoom.setRoomType(roomType);
gameRoom.setState(GameRoom.STATE_READY);
gameRoom.setOwnerMemberId(memberId);
+ gameRoom.setRoomOwner(mallMember.getAccountLogin());
gameRoom.setGameTime(gameTime);
gameRoomMapper.insert(gameRoom);
@@ -140,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();
@@ -192,7 +219,10 @@
/**
* 给房间里面的所有人发送一个开始的信息
*/
- 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());
@@ -208,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;
@@ -269,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("请重新进入房间");
@@ -280,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());
@@ -336,35 +368,95 @@
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("操作成功");
}
@@ -372,7 +464,9 @@
@Override
@Transactional(rollbackFor = Exception.class)
public FebsResponse gameIn(ApiGameDto apiGameDto) {
+
Long memberId = LoginUserUtil.getLoginUser().getId();
+ log.info("加入房间:"+memberId);
/**
* 验证唯一房间编码是否存在
* 验证当前是否已经加入过该房间
@@ -392,46 +486,68 @@
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);
@@ -440,6 +556,10 @@
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());
@@ -488,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("房间不存在");
@@ -517,7 +638,11 @@
//结算 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);
@@ -566,7 +691,7 @@
mallMoneyFlowService.addMoneyFlow(
gameChild.getMemberId(),
- BigDecimal.ZERO,
+ amount.negate(),
GameFlowTypeEnum.PLAYER_PERK.getValue(),
MallUtils.getOrderNum("ZJ"),
StrUtil.format(
@@ -653,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);
@@ -678,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());
@@ -721,11 +831,12 @@
}
@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<>();
@@ -735,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){
@@ -743,11 +857,37 @@
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();
}
@@ -766,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();
--
Gitblit v1.9.1