Browse Source

Merge remote-tracking branch 'origin/master_saas' into master_saas

zouxuan 3 years ago
parent
commit
4f495a1aed

+ 37 - 14
mec-biz/src/main/java/com/ym/mec/biz/service/impl/ImLiveBroadcastRoomServiceImpl.java

@@ -101,6 +101,8 @@ public class ImLiveBroadcastRoomServiceImpl extends ServiceImpl<ImLiveBroadcastR
     public static final String LIVE_USER_ROOM = "IM:LIVE_ROOM_USER:" + USER_ID;
     //记录人员最后变更的状态消息时间
     public static final String LIVE_USER_STATE_TIME = "IM:LIVE_USER_STATE_TIME:" + USER_ID;
+    //当前房间主讲人心跳
+    public static final String LIVE_ROOM_SPEAKER_HEART_BEAT = "IM:LIVE_ROOM_SPEAKER_HEART_BEAT:" + ROOM_UID;
     //房间点赞数
     public static final String LIVE_ROOM_LIKE = "IM:LIVE_ROOM_LIKE:" + ROOM_UID;
     //计算人员观看时长锁
@@ -438,6 +440,18 @@ public class ImLiveBroadcastRoomServiceImpl extends ServiceImpl<ImLiveBroadcastR
         RBucket<RoomSpeakerInfo> speakerCache = redissonClient.getBucket(LIVE_SPEAKER_INFO.replace(USER_ID, room.getSpeakerId().toString()));
         if (speakerCache.isExists()) {
             RoomSpeakerInfo speakerInfo = speakerCache.get();
+            //校验房间心跳是否过期没续租
+            RBucket<Date> lastRoomHeartbeatCache = redissonClient.getBucket(LIVE_ROOM_SPEAKER_HEART_BEAT.replace(ROOM_UID, room.getRoomUid()));
+            if (lastRoomHeartbeatCache.isExists()) {
+                //获取最后一次房间心跳时间
+                Date lastDate = lastRoomHeartbeatCache.get();
+                //房间心跳过期时间 = 将房间心跳时间+过期分钟
+                Date lastRoomDateExpired = DateUtil.addMinutes(lastDate, expiredMinute);
+                //当前时间 小于 房间心跳过期时间 则不销毁
+                if (now.getTime() <= lastRoomDateExpired.getTime()) {
+                    return;
+                }
+            }
             //1.主播没有进入房间,则直接销毁房间
             if (Objects.isNull(speakerInfo.getJoinRoomTime())) {
                 log.info("roomDestroy not joinRoom >>>> cache : {}", JSONObject.toJSONString(test(room.getRoomUid())));
@@ -613,6 +627,9 @@ public class ImLiveBroadcastRoomServiceImpl extends ServiceImpl<ImLiveBroadcastR
     @Override
     public void syncLike(String roomUid, Integer likeNum) {
         redissonClient.getBucket(LIVE_ROOM_LIKE.replace(ROOM_UID, roomUid)).set(likeNum);
+        //增加房间心跳
+        redissonClient.getBucket(LIVE_ROOM_SPEAKER_HEART_BEAT.replace(ROOM_UID, roomUid))
+                .set(new Date());
     }
 
     /**
@@ -1097,6 +1114,26 @@ public class ImLiveBroadcastRoomServiceImpl extends ServiceImpl<ImLiveBroadcastR
     public Map<String, Object> test(String roomUid) {
         //test
         Map<String, Object> result = new HashMap<>();
+        //校验房间心跳是否过期没续租
+        RBucket<Date> lastRoomHeartbeatCache = redissonClient.getBucket(LIVE_ROOM_SPEAKER_HEART_BEAT.replace(ROOM_UID, roomUid));
+        if (lastRoomHeartbeatCache.isExists()) {
+            result.put("房间心跳", DateUtil.dateToString(lastRoomHeartbeatCache.get(), DateUtil.EXPANDED_DATE_TIME_FORMAT));
+        } else {
+            result.put("房间心跳", "房间心跳不存在");
+        }
+        String userId = "";
+        try {
+            String[] split = roomUid.split("-");
+            userId = split[1];
+        } catch (Exception ignored) {
+        }
+        //获取主讲人信息
+        RBucket<RoomSpeakerInfo> speakerCache = redissonClient.getBucket(LIVE_SPEAKER_INFO.replace(USER_ID, userId));
+        if (speakerCache.isExists()) {
+            result.put("主讲人信息", speakerCache.get());
+        } else {
+            result.put("主讲人信息", "主讲人信息不存在");
+        }
         //点赞数
         Object like = redissonClient.getBucket(LIVE_ROOM_LIKE.replace(ROOM_UID, roomUid)).get();
         if (Objects.isNull(like)) {
@@ -1122,20 +1159,6 @@ public class ImLiveBroadcastRoomServiceImpl extends ServiceImpl<ImLiveBroadcastR
         } else {
             result.put("总人员数据", "没有人员数据");
         }
-        String userId = "";
-        try {
-            String[] split = roomUid.split("-");
-            userId = split[1];
-        } catch (Exception ignored) {
-        }
-
-        //获取主讲人信息
-        RBucket<RoomSpeakerInfo> speakerCache = redissonClient.getBucket(LIVE_SPEAKER_INFO.replace(USER_ID, userId));
-        if (speakerCache.isExists()) {
-            result.put("主讲人信息", speakerCache.get());
-        } else {
-            result.put("主讲人信息", "主讲人信息不存在");
-        }
         result.put("总观看人数", totalLook);
         result.put("实时观看数", look);
         return result;