| 
														
															@@ -92,23 +92,23 @@ public class ImLiveBroadcastRoomServiceImpl extends ServiceImpl<ImLiveBroadcastR 
														 | 
													
												
											
												
													
														| 
														 | 
														
															     public static final String ROOM_UID = "${roomUid}"; 
														 | 
														
														 | 
														
															     public static final String ROOM_UID = "${roomUid}"; 
														 | 
													
												
											
												
													
														| 
														 | 
														
															  
														 | 
														
														 | 
														
															  
														 | 
													
												
											
												
													
														| 
														 | 
														
															     //直播间累计用户信息-指只要进入到该房间的用户都要记录 
														 | 
														
														 | 
														
															     //直播间累计用户信息-指只要进入到该房间的用户都要记录 
														 | 
													
												
											
												
													
														| 
														 | 
														
															-    public static final String LIVE_ROOM_TOTAL_USER_LIST = "IM:LIVE_ROOM_TOTAL_USER_LIST:" + ROOM_UID; 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+    public static final String LIVE_ROOM_TOTAL_USER_LIST = String.join(":", "IM:LIVE_ROOM_TOTAL_USER_LIST", ROOM_UID); 
														 | 
													
												
											
												
													
														| 
														 | 
														
															     //直播间在线用户信息 
														 | 
														
														 | 
														
															     //直播间在线用户信息 
														 | 
													
												
											
												
													
														| 
														 | 
														
															-    public static final String LIVE_ROOM_ONLINE_USER_LIST = "IM:LIVE_ROOM_ONLINE_USER_LIST:" + ROOM_UID; 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															-    //主讲人信息 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															-    public static final String LIVE_SPEAKER_INFO = "IM:LIVE_SPEAKER_INFO:" + USER_ID; 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															-    //用户对应的直播间Uid 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															-    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_ONLINE_USER_LIST = String.join(":", "IM:LIVE_ROOM_ONLINE_USER_LIST", ROOM_UID); 
														 | 
													
												
											
												
													
														| 
														 | 
														
															     //当前房间主讲人心跳 
														 | 
														
														 | 
														
															     //当前房间主讲人心跳 
														 | 
													
												
											
												
													
														| 
														 | 
														
															-    public static final String LIVE_ROOM_SPEAKER_HEART_BEAT = "IM:LIVE_ROOM_SPEAKER_HEART_BEAT:" + ROOM_UID; 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															-    //主讲人最近一次加入房间的clientIp 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															-    public static final String LIVE_SPEAKER_LAST_CLIENT_IP = "IM:LIVE_SPEAKER_LAST_CLIENT_IP:" + USER_ID; 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+    public static final String LIVE_ROOM_SPEAKER_HEART_BEAT = String.join(":", "IM:LIVE_ROOM_SPEAKER_HEART_BEAT", ROOM_UID); 
														 | 
													
												
											
												
													
														| 
														 | 
														
															     //房间点赞数 
														 | 
														
														 | 
														
															     //房间点赞数 
														 | 
													
												
											
												
													
														| 
														 | 
														
															-    public static final String LIVE_ROOM_LIKE = "IM:LIVE_ROOM_LIKE:" + ROOM_UID; 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+    public static final String LIVE_ROOM_LIKE = String.join(":", "IM:LIVE_ROOM_LIKE", ROOM_UID); 
														 | 
													
												
											
												
													
														| 
														 | 
														
															     //计算人员观看时长锁 
														 | 
														
														 | 
														
															     //计算人员观看时长锁 
														 | 
													
												
											
												
													
														| 
														 | 
														
															-    public static final String LIVE_LOOK_LOCK = "IM:LIVE_LOOK_LOCK:" + ROOM_UID; 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+    public static final String LIVE_LOOK_LOCK = String.join(":", "IM:LIVE_LOOK_LOCK", ROOM_UID); 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+    //用户对应的直播间Uid 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+    public static final String LIVE_USER_ROOM = String.join(":", "IM:LIVE_ROOM_USER", USER_ID); 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+    //记录人员最后变更的状态消息时间 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+    public static final String LIVE_USER_STATE_TIME = String.join(":", "IM:LIVE_USER_STATE_TIME", USER_ID); 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+    //主讲人信息 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+    public static final String LIVE_SPEAKER_INFO = String.join(":", "IM:LIVE_SPEAKER_INFO", ROOM_UID, USER_ID); 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+    //主讲人最近一次加入房间的clientIp 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+    public static final String LIVE_SPEAKER_LAST_CLIENT_IP = String.join(":", "IM:LIVE_SPEAKER_LAST_CLIENT_IP", ROOM_UID, USER_ID); 
														 | 
													
												
											
												
													
														| 
														 | 
														
															     //直播提前开始时间 
														 | 
														
														 | 
														
															     //直播提前开始时间 
														 | 
													
												
											
												
													
														| 
														 | 
														
															     public static final int PRE_LIVE_TIME_MINUTE = 30; 
														 | 
														
														 | 
														
															     public static final int PRE_LIVE_TIME_MINUTE = 30; 
														 | 
													
												
											
												
													
														| 
														 | 
														
															  
														 | 
														
														 | 
														
															  
														 | 
													
												
											
										
											
												
													
														 | 
														
															@@ -442,7 +442,7 @@ public class ImLiveBroadcastRoomServiceImpl extends ServiceImpl<ImLiveBroadcastR 
														 | 
													
												
											
												
													
														| 
														 | 
														
															             return; 
														 | 
														
														 | 
														
															             return; 
														 | 
													
												
											
												
													
														| 
														 | 
														
															         } 
														 | 
														
														 | 
														
															         } 
														 | 
													
												
											
												
													
														| 
														 | 
														
															         //获取直播间主讲人信息 
														 | 
														
														 | 
														
															         //获取直播间主讲人信息 
														 | 
													
												
											
												
													
														| 
														 | 
														
															-        RBucket<RoomSpeakerInfo> speakerCache = redissonClient.getBucket(LIVE_SPEAKER_INFO.replace(USER_ID, room.getSpeakerId().toString())); 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+        RBucket<RoomSpeakerInfo> speakerCache = getRoomSpeakerInfoCache(room.getRoomUid(), room.getSpeakerId().toString()); 
														 | 
													
												
											
												
													
														| 
														 | 
														
															         if (speakerCache.isExists()) { 
														 | 
														
														 | 
														
															         if (speakerCache.isExists()) { 
														 | 
													
												
											
												
													
														| 
														 | 
														
															             RoomSpeakerInfo speakerInfo = speakerCache.get(); 
														 | 
														
														 | 
														
															             RoomSpeakerInfo speakerInfo = speakerCache.get(); 
														 | 
													
												
											
												
													
														| 
														 | 
														
															             //查询用户是否在线 
														 | 
														
														 | 
														
															             //查询用户是否在线 
														 | 
													
												
											
										
											
												
													
														 | 
														
															@@ -590,7 +590,7 @@ public class ImLiveBroadcastRoomServiceImpl extends ServiceImpl<ImLiveBroadcastR 
														 | 
													
												
											
												
													
														| 
														 | 
														
															         } 
														 | 
														
														 | 
														
															         } 
														 | 
													
												
											
												
													
														| 
														 | 
														
															         int speakerLiveTime = 0; 
														 | 
														
														 | 
														
															         int speakerLiveTime = 0; 
														 | 
													
												
											
												
													
														| 
														 | 
														
															         //获取直播间主讲人信息 写入im_live_broadcast_room_data 
														 | 
														
														 | 
														
															         //获取直播间主讲人信息 写入im_live_broadcast_room_data 
														 | 
													
												
											
												
													
														| 
														 | 
														
															-        RBucket<RoomSpeakerInfo> speakerCache = redissonClient.getBucket(LIVE_SPEAKER_INFO.replace(USER_ID, speakerId.toString())); 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+        RBucket<RoomSpeakerInfo> speakerCache = getRoomSpeakerInfoCache(roomUid, speakerId.toString()); 
														 | 
													
												
											
												
													
														| 
														 | 
														
															         if (speakerCache.isExists()) { 
														 | 
														
														 | 
														
															         if (speakerCache.isExists()) { 
														 | 
													
												
											
												
													
														| 
														 | 
														
															             ImLiveBroadcastRoomData liveData = new ImLiveBroadcastRoomData(); 
														 | 
														
														 | 
														
															             ImLiveBroadcastRoomData liveData = new ImLiveBroadcastRoomData(); 
														 | 
													
												
											
												
													
														| 
														 | 
														
															             RoomSpeakerInfo speakerInfo = speakerCache.get(); 
														 | 
														
														 | 
														
															             RoomSpeakerInfo speakerInfo = speakerCache.get(); 
														 | 
													
												
											
										
											
												
													
														 | 
														
															@@ -639,8 +639,7 @@ public class ImLiveBroadcastRoomServiceImpl extends ServiceImpl<ImLiveBroadcastR 
														 | 
													
												
											
												
													
														| 
														 | 
														
															     public void syncLike(String roomUid, Integer likeNum) { 
														 | 
														
														 | 
														
															     public void syncLike(String roomUid, Integer likeNum) { 
														 | 
													
												
											
												
													
														| 
														 | 
														
															         redissonClient.getBucket(LIVE_ROOM_LIKE.replace(ROOM_UID, roomUid)).set(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()); 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+        redissonClient.getBucket(LIVE_ROOM_SPEAKER_HEART_BEAT.replace(ROOM_UID, roomUid)).set(new Date()); 
														 | 
													
												
											
												
													
														| 
														 | 
														
															     } 
														 | 
														
														 | 
														
															     } 
														 | 
													
												
											
												
													
														| 
														 | 
														
															  
														 | 
														
														 | 
														
															  
														 | 
													
												
											
												
													
														| 
														 | 
														
															     /** 
														 | 
														
														 | 
														
															     /** 
														 | 
													
												
											
										
											
												
													
														 | 
														
															@@ -673,20 +672,20 @@ public class ImLiveBroadcastRoomServiceImpl extends ServiceImpl<ImLiveBroadcastR 
														 | 
													
												
											
												
													
														| 
														 | 
														
															             } 
														 | 
														
														 | 
														
															             } 
														 | 
													
												
											
												
													
														| 
														 | 
														
															             //将最新的时间写入缓存 
														 | 
														
														 | 
														
															             //将最新的时间写入缓存 
														 | 
													
												
											
												
													
														| 
														 | 
														
															             userStateTimeCache.set(userStateTime, 5L, TimeUnit.MINUTES); 
														 | 
														
														 | 
														
															             userStateTimeCache.set(userStateTime, 5L, TimeUnit.MINUTES); 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+            //获取当前用户所在房间的uid 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+            RBucket<String> userRoom = redissonClient.getBucket(LIVE_USER_ROOM.replace(USER_ID, userid)); 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+            if (!userRoom.isExists()) { 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+                return; 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+            } 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+            String roomUid = userRoom.get(); 
														 | 
													
												
											
												
													
														| 
														 | 
														
															             //查询userId是不是主讲人 ,如果是主讲人则返回 
														 | 
														
														 | 
														
															             //查询userId是不是主讲人 ,如果是主讲人则返回 
														 | 
													
												
											
												
													
														| 
														 | 
														
															-            if (isSpeaker(user, now, userid)) { 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+            if (isSpeaker(user, now, userid, roomUid)) { 
														 | 
													
												
											
												
													
														| 
														 | 
														
															                 return; 
														 | 
														
														 | 
														
															                 return; 
														 | 
													
												
											
												
													
														| 
														 | 
														
															             } 
														 | 
														
														 | 
														
															             } 
														 | 
													
												
											
												
													
														| 
														 | 
														
															             //这里开始只处理观看者的数据,观看者只接受退出消息 status=0 是进入房间 
														 | 
														
														 | 
														
															             //这里开始只处理观看者的数据,观看者只接受退出消息 status=0 是进入房间 
														 | 
													
												
											
												
													
														| 
														 | 
														
															             if (user.getStatus().equals("0")) { 
														 | 
														
														 | 
														
															             if (user.getStatus().equals("0")) { 
														 | 
													
												
											
												
													
														| 
														 | 
														
															                 return; 
														 | 
														
														 | 
														
															                 return; 
														 | 
													
												
											
												
													
														| 
														 | 
														
															             } 
														 | 
														
														 | 
														
															             } 
														 | 
													
												
											
												
													
														| 
														 | 
														
															-            //获取当前用户所在房间的uid 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															-            RBucket<String> userRoom = redissonClient.getBucket(LIVE_USER_ROOM.replace(USER_ID, userid)); 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															-            if (!userRoom.isExists()) { 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															-                return; 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															-            } 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															-            String roomUid = userRoom.get(); 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															             Integer userId = Integer.valueOf(userid); 
														 | 
														
														 | 
														
															             Integer userId = Integer.valueOf(userid); 
														 | 
													
												
											
												
													
														| 
														 | 
														
															  
														 | 
														
														 | 
														
															  
														 | 
													
												
											
												
													
														| 
														 | 
														
															             //从房间累计用户信息中查询该用户的信息 
														 | 
														
														 | 
														
															             //从房间累计用户信息中查询该用户的信息 
														 | 
													
												
											
										
											
												
													
														 | 
														
															@@ -766,14 +765,14 @@ public class ImLiveBroadcastRoomServiceImpl extends ServiceImpl<ImLiveBroadcastR 
														 | 
													
												
											
												
													
														| 
														 | 
														
															      * 
														 | 
														
														 | 
														
															      * 
														 | 
													
												
											
												
													
														| 
														 | 
														
															      * @return true 是主讲人 false 不是主讲人 
														 | 
														
														 | 
														
															      * @return true 是主讲人 false 不是主讲人 
														 | 
													
												
											
												
													
														| 
														 | 
														
															      */ 
														 | 
														
														 | 
														
															      */ 
														 | 
													
												
											
												
													
														| 
														 | 
														
															-    private boolean isSpeaker(ImUserState user, Date now, String userid) { 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															-        RBucket<RoomSpeakerInfo> speakerCache = redissonClient.getBucket(LIVE_SPEAKER_INFO.replace(USER_ID, userid)); 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+    private boolean isSpeaker(ImUserState user, Date now, String userid, String roomUid) { 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+        RBucket<RoomSpeakerInfo> speakerCache = getRoomSpeakerInfoCache(roomUid, userid); 
														 | 
													
												
											
												
													
														| 
														 | 
														
															         if (!speakerCache.isExists()) { 
														 | 
														
														 | 
														
															         if (!speakerCache.isExists()) { 
														 | 
													
												
											
												
													
														| 
														 | 
														
															             return false; 
														 | 
														
														 | 
														
															             return false; 
														 | 
													
												
											
												
													
														| 
														 | 
														
															         } 
														 | 
														
														 | 
														
															         } 
														 | 
													
												
											
												
													
														| 
														 | 
														
															         RoomSpeakerInfo speakerInfo = speakerCache.get(); 
														 | 
														
														 | 
														
															         RoomSpeakerInfo speakerInfo = speakerCache.get(); 
														 | 
													
												
											
												
													
														| 
														 | 
														
															         //最后一次进入房间的clientIp 
														 | 
														
														 | 
														
															         //最后一次进入房间的clientIp 
														 | 
													
												
											
												
													
														| 
														 | 
														
															-        RBucket<String> lastClientIp = redissonClient.getBucket(LIVE_SPEAKER_LAST_CLIENT_IP.replace(USER_ID, userid)); 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+        RBucket<String> lastClientIp = redissonClient.getBucket(LIVE_SPEAKER_LAST_CLIENT_IP.replace(ROOM_UID, roomUid).replace(USER_ID, userid)); 
														 | 
													
												
											
												
													
														| 
														 | 
														
															         //主讲人进入房间 
														 | 
														
														 | 
														
															         //主讲人进入房间 
														 | 
													
												
											
												
													
														| 
														 | 
														
															         if (user.getStatus().equals("0")) { 
														 | 
														
														 | 
														
															         if (user.getStatus().equals("0")) { 
														 | 
													
												
											
												
													
														| 
														 | 
														
															             speakerInfo.setJoinRoomTime(now); 
														 | 
														
														 | 
														
															             speakerInfo.setJoinRoomTime(now); 
														 | 
													
												
											
										
											
												
													
														 | 
														
															@@ -821,15 +820,17 @@ public class ImLiveBroadcastRoomServiceImpl extends ServiceImpl<ImLiveBroadcastR 
														 | 
													
												
											
												
													
														| 
														 | 
														
															         } 
														 | 
														
														 | 
														
															         } 
														 | 
													
												
											
												
													
														| 
														 | 
														
															         Date now = new Date(); 
														 | 
														
														 | 
														
															         Date now = new Date(); 
														 | 
													
												
											
												
													
														| 
														 | 
														
															         //获取直播间信息 
														 | 
														
														 | 
														
															         //获取直播间信息 
														 | 
													
												
											
												
													
														| 
														 | 
														
															-        RBucket<RoomSpeakerInfo> speakerCache = redissonClient.getBucket(LIVE_SPEAKER_INFO.replace(USER_ID, userId.toString())); 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+        RBucket<RoomSpeakerInfo> speakerCache = getRoomSpeakerInfoCache(roomUid, userId.toString()); 
														 | 
													
												
											
												
													
														| 
														 | 
														
															         if (!speakerCache.isExists()) { 
														 | 
														
														 | 
														
															         if (!speakerCache.isExists()) { 
														 | 
													
												
											
												
													
														| 
														 | 
														
															             //没有主讲人信息则生成一个 
														 | 
														
														 | 
														
															             //没有主讲人信息则生成一个 
														 | 
													
												
											
												
													
														| 
														 | 
														
															             createSpeakerInfo(this.getById(roomVo.getId()), sysUser); 
														 | 
														
														 | 
														
															             createSpeakerInfo(this.getById(roomVo.getId()), sysUser); 
														 | 
													
												
											
												
													
														| 
														 | 
														
															-            speakerCache = redissonClient.getBucket(LIVE_SPEAKER_INFO.replace(USER_ID, userId.toString())); 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+            speakerCache = getRoomSpeakerInfoCache(roomUid, userId.toString()); 
														 | 
													
												
											
												
													
														| 
														 | 
														
															         } 
														 | 
														
														 | 
														
															         } 
														 | 
													
												
											
												
													
														| 
														 | 
														
															         RoomSpeakerInfo speakerInfo = speakerCache.get(); 
														 | 
														
														 | 
														
															         RoomSpeakerInfo speakerInfo = speakerCache.get(); 
														 | 
													
												
											
												
													
														| 
														 | 
														
															         speakerInfo.setJoinRoomTime(now); 
														 | 
														
														 | 
														
															         speakerInfo.setJoinRoomTime(now); 
														 | 
													
												
											
												
													
														| 
														 | 
														
															         speakerCache.set(speakerInfo); 
														 | 
														
														 | 
														
															         speakerCache.set(speakerInfo); 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+        //记录用户当前房间uid 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+        redissonClient.getBucket(LIVE_USER_ROOM.replace(USER_ID, userId.toString())).set(roomUid, 12L, TimeUnit.HOURS); 
														 | 
													
												
											
												
													
														| 
														 | 
														
															         return roomVo; 
														 | 
														
														 | 
														
															         return roomVo; 
														 | 
													
												
											
												
													
														| 
														 | 
														
															     } 
														 | 
														
														 | 
														
															     } 
														 | 
													
												
											
												
													
														| 
														 | 
														
															  
														 | 
														
														 | 
														
															  
														 | 
													
												
											
										
											
												
													
														 | 
														
															@@ -863,7 +864,7 @@ public class ImLiveBroadcastRoomServiceImpl extends ServiceImpl<ImLiveBroadcastR 
														 | 
													
												
											
												
													
														| 
														 | 
														
															             userInfo.setTotalViewTime(0); 
														 | 
														
														 | 
														
															             userInfo.setTotalViewTime(0); 
														 | 
													
												
											
												
													
														| 
														 | 
														
															         } 
														 | 
														
														 | 
														
															         } 
														 | 
													
												
											
												
													
														| 
														 | 
														
															         //查询主讲人信息 
														 | 
														
														 | 
														
															         //查询主讲人信息 
														 | 
													
												
											
												
													
														| 
														 | 
														
															-        RBucket<RoomSpeakerInfo> speakerCache = redissonClient.getBucket(LIVE_SPEAKER_INFO.replace(USER_ID, imLiveBroadcastRoomVo.getSpeakerId().toString())); 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+        RBucket<RoomSpeakerInfo> speakerCache = getRoomSpeakerInfoCache(roomUid, imLiveBroadcastRoomVo.getSpeakerId().toString()); 
														 | 
													
												
											
												
													
														| 
														 | 
														
															         if (speakerCache.isExists()) { 
														 | 
														
														 | 
														
															         if (speakerCache.isExists()) { 
														 | 
													
												
											
												
													
														| 
														 | 
														
															             //如果用户进来时主讲人已经开启直播则修改学生观看时间 
														 | 
														
														 | 
														
															             //如果用户进来时主讲人已经开启直播则修改学生观看时间 
														 | 
													
												
											
												
													
														| 
														 | 
														
															             Integer state = speakerCache.get().getState(); 
														 | 
														
														 | 
														
															             Integer state = speakerCache.get().getState(); 
														 | 
													
												
											
										
											
												
													
														 | 
														
															@@ -889,7 +890,7 @@ public class ImLiveBroadcastRoomServiceImpl extends ServiceImpl<ImLiveBroadcastR 
														 | 
													
												
											
												
													
														| 
														 | 
														
															      */ 
														 | 
														
														 | 
														
															      */ 
														 | 
													
												
											
												
													
														| 
														 | 
														
															     public void startLive(String roomUid, Integer userId) { 
														 | 
														
														 | 
														
															     public void startLive(String roomUid, Integer userId) { 
														 | 
													
												
											
												
													
														| 
														 | 
														
															         //查询房间信息 
														 | 
														
														 | 
														
															         //查询房间信息 
														 | 
													
												
											
												
													
														| 
														 | 
														
															-        RBucket<RoomSpeakerInfo> speakerCache = redissonClient.getBucket(LIVE_SPEAKER_INFO.replace(USER_ID, userId.toString())); 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+        RBucket<RoomSpeakerInfo> speakerCache = getRoomSpeakerInfoCache(roomUid, userId.toString()); 
														 | 
													
												
											
												
													
														| 
														 | 
														
															         if (!speakerCache.isExists()) { 
														 | 
														
														 | 
														
															         if (!speakerCache.isExists()) { 
														 | 
													
												
											
												
													
														| 
														 | 
														
															             return; 
														 | 
														
														 | 
														
															             return; 
														 | 
													
												
											
												
													
														| 
														 | 
														
															         } 
														 | 
														
														 | 
														
															         } 
														 | 
													
												
											
										
											
												
													
														 | 
														
															@@ -925,7 +926,7 @@ public class ImLiveBroadcastRoomServiceImpl extends ServiceImpl<ImLiveBroadcastR 
														 | 
													
												
											
												
													
														| 
														 | 
														
															      */ 
														 | 
														
														 | 
														
															      */ 
														 | 
													
												
											
												
													
														| 
														 | 
														
															     public void closeLive(String roomUid, Integer userId) { 
														 | 
														
														 | 
														
															     public void closeLive(String roomUid, Integer userId) { 
														 | 
													
												
											
												
													
														| 
														 | 
														
															         //查询房间主播信息 
														 | 
														
														 | 
														
															         //查询房间主播信息 
														 | 
													
												
											
												
													
														| 
														 | 
														
															-        RBucket<RoomSpeakerInfo> speakerCache = redissonClient.getBucket(LIVE_SPEAKER_INFO.replace(USER_ID, userId.toString())); 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+        RBucket<RoomSpeakerInfo> speakerCache = getRoomSpeakerInfoCache(roomUid, userId.toString()); 
														 | 
													
												
											
												
													
														| 
														 | 
														
															         if (!speakerCache.isExists()) { 
														 | 
														
														 | 
														
															         if (!speakerCache.isExists()) { 
														 | 
													
												
											
												
													
														| 
														 | 
														
															             return; 
														 | 
														
														 | 
														
															             return; 
														 | 
													
												
											
												
													
														| 
														 | 
														
															         } 
														 | 
														
														 | 
														
															         } 
														 | 
													
												
											
										
											
												
													
														 | 
														
															@@ -1084,7 +1085,7 @@ public class ImLiveBroadcastRoomServiceImpl extends ServiceImpl<ImLiveBroadcastR 
														 | 
													
												
											
												
													
														| 
														 | 
														
															             speakerInfo.setWhetherVideo(1); 
														 | 
														
														 | 
														
															             speakerInfo.setWhetherVideo(1); 
														 | 
													
												
											
												
													
														| 
														 | 
														
															         } 
														 | 
														
														 | 
														
															         } 
														 | 
													
												
											
												
													
														| 
														 | 
														
															         //写入主讲人信息 
														 | 
														
														 | 
														
															         //写入主讲人信息 
														 | 
													
												
											
												
													
														| 
														 | 
														
															-        redissonClient.getBucket(LIVE_SPEAKER_INFO.replace(USER_ID, room.getSpeakerId().toString())).set(speakerInfo); 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+        getRoomSpeakerInfoCache(room.getRoomUid(), room.getSpeakerId().toString()).set(speakerInfo); 
														 | 
													
												
											
												
													
														| 
														 | 
														
															  
														 | 
														
														 | 
														
															  
														 | 
													
												
											
												
													
														| 
														 | 
														
															         //生成0点赞 
														 | 
														
														 | 
														
															         //生成0点赞 
														 | 
													
												
											
												
													
														| 
														 | 
														
															         redissonClient.getBucket(LIVE_ROOM_LIKE.replace(ROOM_UID, room.getRoomUid())).set(0); 
														 | 
														
														 | 
														
															         redissonClient.getBucket(LIVE_ROOM_LIKE.replace(ROOM_UID, room.getRoomUid())).set(0); 
														 | 
													
												
											
										
											
												
													
														 | 
														
															@@ -1143,6 +1144,7 @@ public class ImLiveBroadcastRoomServiceImpl extends ServiceImpl<ImLiveBroadcastR 
														 | 
													
												
											
												
													
														| 
														 | 
														
															      * 测试 
														 | 
														
														 | 
														
															      * 测试 
														 | 
													
												
											
												
													
														| 
														 | 
														
															      */ 
														 | 
														
														 | 
														
															      */ 
														 | 
													
												
											
												
													
														| 
														 | 
														
															     public Map<String, Object> test(String roomUid) { 
														 | 
														
														 | 
														
															     public Map<String, Object> test(String roomUid) { 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+//        destroyExpiredLiveRoom(); 
														 | 
													
												
											
												
													
														| 
														 | 
														
															         //test 
														 | 
														
														 | 
														
															         //test 
														 | 
													
												
											
												
													
														| 
														 | 
														
															         Map<String, Object> result = new HashMap<>(); 
														 | 
														
														 | 
														
															         Map<String, Object> result = new HashMap<>(); 
														 | 
													
												
											
												
													
														| 
														 | 
														
															         //校验房间心跳是否过期没续租 
														 | 
														
														 | 
														
															         //校验房间心跳是否过期没续租 
														 | 
													
												
											
										
											
												
													
														 | 
														
															@@ -1159,7 +1161,7 @@ public class ImLiveBroadcastRoomServiceImpl extends ServiceImpl<ImLiveBroadcastR 
														 | 
													
												
											
												
													
														| 
														 | 
														
															         } catch (Exception ignored) { 
														 | 
														
														 | 
														
															         } catch (Exception ignored) { 
														 | 
													
												
											
												
													
														| 
														 | 
														
															         } 
														 | 
														
														 | 
														
															         } 
														 | 
													
												
											
												
													
														| 
														 | 
														
															         //获取主讲人信息 
														 | 
														
														 | 
														
															         //获取主讲人信息 
														 | 
													
												
											
												
													
														| 
														 | 
														
															-        RBucket<RoomSpeakerInfo> speakerCache = redissonClient.getBucket(LIVE_SPEAKER_INFO.replace(USER_ID, userId)); 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+        RBucket<RoomSpeakerInfo> speakerCache = getRoomSpeakerInfoCache(roomUid, userId); 
														 | 
													
												
											
												
													
														| 
														 | 
														
															         if (speakerCache.isExists()) { 
														 | 
														
														 | 
														
															         if (speakerCache.isExists()) { 
														 | 
													
												
											
												
													
														| 
														 | 
														
															             result.put("主讲人信息", speakerCache.get()); 
														 | 
														
														 | 
														
															             result.put("主讲人信息", speakerCache.get()); 
														 | 
													
												
											
												
													
														| 
														 | 
														
															         } else { 
														 | 
														
														 | 
														
															         } else { 
														 | 
													
												
											
										
											
												
													
														 | 
														
															@@ -1308,6 +1310,16 @@ public class ImLiveBroadcastRoomServiceImpl extends ServiceImpl<ImLiveBroadcastR 
														 | 
													
												
											
												
													
														| 
														 | 
														
															         return redissonClient.getMap(LIVE_ROOM_TOTAL_USER_LIST.replace(ROOM_UID, roomUid)); 
														 | 
														
														 | 
														
															         return redissonClient.getMap(LIVE_ROOM_TOTAL_USER_LIST.replace(ROOM_UID, roomUid)); 
														 | 
													
												
											
												
													
														| 
														 | 
														
															     } 
														 | 
														
														 | 
														
															     } 
														 | 
													
												
											
												
													
														| 
														 | 
														
															  
														 | 
														
														 | 
														
															  
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+    /** 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+     * 获取房间主讲人消息 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+     * 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+     * @param roomUid 房间uid 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+     * @param userId  用户id 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+     */ 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+    private RBucket<RoomSpeakerInfo> getRoomSpeakerInfoCache(String roomUid, String userId) { 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+        return redissonClient.getBucket(LIVE_SPEAKER_INFO.replace(USER_ID, userId).replace(ROOM_UID, roomUid)); 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+    } 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+ 
														 | 
													
												
											
												
													
														| 
														 | 
														
															     private RoomUserInfoVo getUserInfo(Integer userId) { 
														 | 
														
														 | 
														
															     private RoomUserInfoVo getUserInfo(Integer userId) { 
														 | 
													
												
											
												
													
														| 
														 | 
														
															         RoomUserInfoVo userInfo = new RoomUserInfoVo(); 
														 | 
														
														 | 
														
															         RoomUserInfoVo userInfo = new RoomUserInfoVo(); 
														 | 
													
												
											
												
													
														| 
														 | 
														
															         userInfo.setUserId(userId); 
														 | 
														
														 | 
														
															         userInfo.setUserId(userId); 
														 |