Prechádzať zdrojové kódy

修改销毁直播间关闭房间规则

hgw 3 rokov pred
rodič
commit
fc98b4bb47

+ 35 - 7
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/LiveRoomServiceImpl.java

@@ -130,7 +130,7 @@ public class LiveRoomServiceImpl extends ServiceImpl<LiveRoomDao, LiveRoom> impl
     public RoomInfoCache speakerCheckRoomInfo(String roomUid) {
         Long userId = getSysUser().getId();
         //校验房间是否存在
-        RBucket<RoomInfoCache> roomInfoCache = redissonClient.getBucket(LIVE_ROOM_INFO.replace(ROOM_UID, roomUid));
+        RBucket<RoomInfoCache> roomInfoCache = getLiveRoomInfo(roomUid);
         if (!roomInfoCache.isExists()) {
             log.error("teacherCheckRoomInfo>>>live not start  roomUid: {} userId:{}", roomUid, userId);
             throw new BizException("直播还未开始!");
@@ -295,8 +295,7 @@ public class LiveRoomServiceImpl extends ServiceImpl<LiveRoomDao, LiveRoom> impl
         roomCache.setCourseGroupId(room.getCourseGroupId());
 
         //写入房间信息
-        redissonClient.getBucket(LIVE_ROOM_INFO.replace(ROOM_UID, room.getRoomUid()))
-                .set(roomCache, 2L, TimeUnit.DAYS);
+        getLiveRoomInfo(room.getRoomUid()).set(roomCache, 2L, TimeUnit.DAYS);
         //生成0点赞
         redissonClient.getBucket(LIVE_ROOM_LIKE.replace(ROOM_UID, room.getRoomUid()))
                 .set(0, 2L, TimeUnit.DAYS);
@@ -396,11 +395,31 @@ public class LiveRoomServiceImpl extends ServiceImpl<LiveRoomDao, LiveRoom> impl
         //修改房间状态
         room.setLiveState(2);
         this.updateById(room);
+
         String speakerIdStr = room.getSpeakerId().toString();
+        String roomUid = room.getRoomUid();
+
+        //删除房间全部人员缓存
+        getTotalUserCache(roomUid).deleteAsync();
+        //获取在线人员信息
+        RMap<Long, String> onlineUserCache = getOnlineUserCache(roomUid);
+        //删除人员对应直播间编号信息
+        onlineUserCache.forEach((id, s) -> redissonClient.getBucket(LIVE_USER_ROOM.replace(USER_ID, id.toString())).deleteAsync());
+        //删除房间在线人员缓存
+        onlineUserCache.deleteAsync();
+        //删除房间信息
+        getLiveRoomInfo(room.getRoomUid()).deleteAsync();
+        //删除点赞数
+        redissonClient.getBucket(LIVE_ROOM_LIKE.replace(ROOM_UID, room.getRoomUid())).deleteAsync();
+        //删除当前主讲人最后一次进入房间的ip
+        redissonClient.getBucket(LIVE_USER_LAST_CLIENT_IP.replace(ROOM_UID, roomUid).replace(USER_ID, speakerIdStr)).deleteAsync();
+        //删除当前主讲人最后一次心跳
+        redissonClient.getBucket(LIVE_ROOM_HEART_BEAT.replace(ROOM_UID, roomUid)).deleteAsync();
+
         //关闭直播间发送消息
         ImRoomMessage message = new ImRoomMessage();
         message.setFromUserId(speakerIdStr);
-        message.setToChatroomId(room.getRoomUid());
+        message.setToChatroomId(roomUid);
         message.setObjectName(ImRoomMessage.FORCED_OFFLINE);
         message.setContent(speakerIdStr);
         try {
@@ -468,7 +487,7 @@ public class LiveRoomServiceImpl extends ServiceImpl<LiveRoomDao, LiveRoom> impl
             }
             String roomUid = userRoom.get();
             //根据房间号获取房间信息
-            RBucket<RoomInfoCache> roomInfoCache = redissonClient.getBucket(LIVE_ROOM_INFO.replace(ROOM_UID, roomUid));
+            RBucket<RoomInfoCache> roomInfoCache = getLiveRoomInfo(roomUid);
             if (!roomInfoCache.isExists()) {
                 return;
             }
@@ -689,7 +708,7 @@ public class LiveRoomServiceImpl extends ServiceImpl<LiveRoomDao, LiveRoom> impl
     //校验学生与房间的关系
     private RoomInfoCache checkStudentRoom(String roomUid, SysUser sysUser) {
         //校验房间是否存在
-        RBucket<RoomInfoCache> roomInfoCache = redissonClient.getBucket(LIVE_ROOM_INFO.replace(ROOM_UID, roomUid));
+        RBucket<RoomInfoCache> roomInfoCache = getLiveRoomInfo(roomUid);
         if (!roomInfoCache.isExists()) {
             throw new BizException("直播还未开始!");
         }
@@ -908,13 +927,22 @@ public class LiveRoomServiceImpl extends ServiceImpl<LiveRoomDao, LiveRoom> impl
             .orElse(0);
 
     /**
+     * 获取房间信息
+     *
+     * @param roomUid 房间编号
+     */
+    private RBucket<RoomInfoCache> getLiveRoomInfo(String roomUid) {
+        return redissonClient.getBucket(LIVE_ROOM_INFO.replace(ROOM_UID, roomUid));
+    }
+
+    /**
      * 方便测试观察房间数据的方法
      */
     public Map<String, Object> test(String roomUid) {
         //result
         Map<String, Object> result = new HashMap<>();
         //获取房间信息
-        RBucket<RoomInfoCache> speakerCache = redissonClient.getBucket(LIVE_ROOM_INFO.replace(ROOM_UID, roomUid));
+        RBucket<RoomInfoCache> speakerCache = getLiveRoomInfo(roomUid);
         if (speakerCache.isExists()) {
             result.put("房间信息信息", speakerCache.get());
         } else {