From cd59cd93b4eceee7b5f948a19d4e78371348fcd0 Mon Sep 17 00:00:00 2001
From: KKSU <15274802129@163.com>
Date: Thu, 27 Jun 2024 10:29:27 +0800
Subject: [PATCH] 后台
---
src/main/java/cc/mrbird/febs/mall/vo/ApiGamePlayerVo.java | 3 +
src/main/java/cc/mrbird/febs/mall/service/impl/GameServiceImpl.java | 66 ++++++++++++++++++++++++++++-----
src/main/java/cc/mrbird/febs/websocket/HttpAuthHandler.java | 7 +++
src/main/java/cc/mrbird/febs/mall/quartz/RedisLinkHoldJob.java | 25 ++++++++++++
src/main/java/cc/mrbird/febs/websocket/WebSocketRes.java | 9 ++++
src/main/java/cc/mrbird/febs/websocket/WsAuthInterceptor.java | 2
6 files changed, 100 insertions(+), 12 deletions(-)
diff --git a/src/main/java/cc/mrbird/febs/mall/quartz/RedisLinkHoldJob.java b/src/main/java/cc/mrbird/febs/mall/quartz/RedisLinkHoldJob.java
new file mode 100644
index 0000000..9d13ed5
--- /dev/null
+++ b/src/main/java/cc/mrbird/febs/mall/quartz/RedisLinkHoldJob.java
@@ -0,0 +1,25 @@
+package cc.mrbird.febs.mall.quartz;
+
+import cc.mrbird.febs.common.utils.RedisUtils;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.scheduling.annotation.Scheduled;
+import org.springframework.stereotype.Component;
+
+/**
+ * @author wzy
+ * @date 2022-06-07
+ **/
+@Slf4j
+@Component
+public class RedisLinkHoldJob {
+
+ @Autowired
+ private RedisUtils redisUtils;
+
+
+ @Scheduled(cron = "0/5 * * * * ?")
+ public void redisLinkHold() {
+ redisUtils.set("redis_link_hold", 1);
+ }
+}
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..ad6c898 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;
@@ -100,6 +99,14 @@
Integer partner = ObjectUtil.isEmpty(mallMember.getPartner()) ? 2 : mallMember.getPartner();
if(AppContants.MEMBER_PARTNER_NO == partner){
throw new FebsException("用户没有创建房间的权限!");
+ }
+
+ 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();
@@ -192,7 +199,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());
@@ -364,7 +374,13 @@
/**
* 给房间里面的所有人发送一个开始的信息
*/
- 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("操作成功");
}
@@ -391,6 +407,24 @@
if(GameRoom.STATE_DONE == gameRoom.getState()){
throw new FebsException("房间已失效");
}
+
+ QueryWrapper<GameRoomChild> roomChildQueryWrapper = new QueryWrapper<>();
+ roomChildQueryWrapper.eq("member_id",memberId);
+ 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());
+ }
+ }
+ }
+
ApiGamePlayerVo apiGamePlayerVo = new ApiGamePlayerVo();
@@ -440,6 +474,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());
@@ -517,7 +555,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);
@@ -725,7 +767,7 @@
Long memberId = LoginUserUtil.getLoginUser().getId();
Long roomId = apiExistGameDto.getRoomId();
/**
- * 删除房间子表的数据
+ * 更新房间子表的数据
*/
MallMember mallMember = mallMemberMapper.selectById(memberId);
QueryWrapper<GameRoomChild> gameRoomChildQueryWrapper = new QueryWrapper<>();
@@ -743,11 +785,15 @@
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());
+// this.sendMsgByRoomId(roomId,"OVER");
}
}
//断开websocket
- WsSessionManager.remove(mallMember.getInviteId());
+ WsSessionManager.removeAndClose(mallMember.getInviteId());
return new FebsResponse().success();
}
diff --git a/src/main/java/cc/mrbird/febs/mall/vo/ApiGamePlayerVo.java b/src/main/java/cc/mrbird/febs/mall/vo/ApiGamePlayerVo.java
index 7faa634..ad91a82 100644
--- a/src/main/java/cc/mrbird/febs/mall/vo/ApiGamePlayerVo.java
+++ b/src/main/java/cc/mrbird/febs/mall/vo/ApiGamePlayerVo.java
@@ -35,6 +35,9 @@
@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-结束
diff --git a/src/main/java/cc/mrbird/febs/websocket/HttpAuthHandler.java b/src/main/java/cc/mrbird/febs/websocket/HttpAuthHandler.java
index f4b6696..240eae1 100644
--- a/src/main/java/cc/mrbird/febs/websocket/HttpAuthHandler.java
+++ b/src/main/java/cc/mrbird/febs/websocket/HttpAuthHandler.java
@@ -1,5 +1,6 @@
package cc.mrbird.febs.websocket;
+import cn.hutool.json.JSONUtil;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component;
import org.springframework.web.socket.CloseStatus;
@@ -32,7 +33,11 @@
@Override
protected void handleTextMessage(WebSocketSession session, TextMessage message) throws Exception {
log.info("收到消息--{}", message.getPayload());
- session.sendMessage(message);
+ WebSocketRes webSocketRes = new WebSocketRes();
+ webSocketRes.setCode(200);
+ webSocketRes.setMsg("PONG");
+ TextMessage textMessage = new TextMessage(JSONUtil.parse(webSocketRes).toString());
+ session.sendMessage(textMessage);
}
@Override
diff --git a/src/main/java/cc/mrbird/febs/websocket/WebSocketRes.java b/src/main/java/cc/mrbird/febs/websocket/WebSocketRes.java
new file mode 100644
index 0000000..519d619
--- /dev/null
+++ b/src/main/java/cc/mrbird/febs/websocket/WebSocketRes.java
@@ -0,0 +1,9 @@
+package cc.mrbird.febs.websocket;
+
+import lombok.Data;
+
+@Data
+public class WebSocketRes {
+ private Integer code;
+ private String msg;
+}
diff --git a/src/main/java/cc/mrbird/febs/websocket/WsAuthInterceptor.java b/src/main/java/cc/mrbird/febs/websocket/WsAuthInterceptor.java
index 131b79a..f62a686 100644
--- a/src/main/java/cc/mrbird/febs/websocket/WsAuthInterceptor.java
+++ b/src/main/java/cc/mrbird/febs/websocket/WsAuthInterceptor.java
@@ -26,7 +26,7 @@
public boolean beforeHandshake(ServerHttpRequest request, ServerHttpResponse response, WebSocketHandler webSocketHandler, Map<String, Object> map) throws Exception {
// log.info("拦截器,握手前");
Map<String, String> params = parseParameterMap(request.getURI().getQuery());
-
+ //invite_id_时间戳 例如:45656161_4554848489的加密
String token = params.get("token");
if (StrUtil.isNotBlank(token)) {
String inviteId = token;
--
Gitblit v1.9.1