| 
					
				 | 
			
			
				@@ -980,7 +980,7 @@ public class ImLiveBroadcastRoomServiceImpl extends ServiceImpl<ImLiveBroadcastR 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         LiveRoomMessage message = LiveRoomMessage.builder() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 .isIncludeSender(1) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 .objectName(LiveRoomMessage.STAT_SYNC) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                .fromUserId(userid) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                .fromUserId(roomVo.getSpeakerId().toString()) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 .toChatRoomId(roomVo.getRoomUid()) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 .content(messageContent) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 .build(); 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -1005,7 +1005,7 @@ public class ImLiveBroadcastRoomServiceImpl extends ServiceImpl<ImLiveBroadcastR 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         // 消息发送用户 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         LiveRoomMessage.MessageUser messageUser = null; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        SysUser sysUser = sysUserFeignService.queryUserInfo(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        SysUser sysUser = sysUserFeignService.queryUserById(Integer.parseInt(userid)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         if (Objects.nonNull(sysUser)) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             // 发送用户信息 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             messageUser = LiveRoomMessage.MessageUser 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -1024,18 +1024,20 @@ public class ImLiveBroadcastRoomServiceImpl extends ServiceImpl<ImLiveBroadcastR 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         LiveRoomMessage message = LiveRoomMessage.builder() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 .isIncludeSender(1) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                .objectName(LiveRoomMessage.LOOKER_LOGIN_OUT) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                .fromUserId(userid) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                .objectName(LiveRoomMessage.LEAVE) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                .fromUserId(roomVo.getSpeakerId().toString()) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 .toChatRoomId(roomVo.getRoomUid()) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 .content(messageContent) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 .build(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         try { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            // TODO: 取消用户离开事件消息发送 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            // 黑名单才发送退出消息 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             //用户离开直播间发送退出房间消息给主讲人 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            /* 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            if (!imLiveRoomBlackService.checkBlackUser(Integer.parseInt(userid), roomVo.getRoomUid())) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                return; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             LivePluginService pluginService = livePluginContext.getPluginService(roomVo.getServiceProvider()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             pluginService.sendChatRoomMessage(message); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             log.info("sendLiveRoomLoginOutMessage>>>> looker LOOKER_LOGIN_OUT : roomId={}, userId={}", roomVo.getRoomUid(), userid); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         } catch (Exception e) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             log.error("sendLiveRoomLoginOutMessage>>>>  looker error LOOKER_LOGIN_OUT {}", e.getMessage()); 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -1091,7 +1093,7 @@ public class ImLiveBroadcastRoomServiceImpl extends ServiceImpl<ImLiveBroadcastR 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         LiveRoomMessage message = LiveRoomMessage.builder() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 .isIncludeSender(1) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 .objectName(LiveRoomMessage.MEMBER_COUNT) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                .fromUserId(fromUserId.toString()) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                .fromUserId(roomVo.getSpeakerId().toString()) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 .toChatRoomId(roomUid) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 .content(messageContent) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 .build(); 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -1345,11 +1347,69 @@ public class ImLiveBroadcastRoomServiceImpl extends ServiceImpl<ImLiveBroadcastR 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         onlineUserInfo.fastPut(userId, JSONObject.toJSONString(userInfo)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         //向直播间发送当前在线人数消息 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         this.sendOnlineUserCount(imLiveBroadcastRoomVo, userId, onlineUserInfo.size()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        // 黑名单发送进入消息 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if (imLiveRoomBlackService.checkBlackUser(userId, imLiveBroadcastRoomVo.getRoomUid())) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            // 发送进入消息 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            this.sendBlackJoinRoom(userId, imLiveBroadcastRoomVo); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         log.info("join sendOnlineUserCount>>>>   roomUid: {}  fromUserId:{}  count:{}", roomUid, userId, onlineUserInfo.size()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         log.info("joinRoom>>>> userInfo: {}", JSONObject.toJSONString(userInfo)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     /** 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     * 发送黑名单进入消息 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     * @param userId 用户id 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    private void sendBlackJoinRoom(Integer userId,ImLiveBroadcastRoomVo roomVo) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        String roomUid = roomVo.getRoomUid(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        //校验传入参数,房间uid和发送人id不能为空 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if (!WrapperUtil.checkObj(roomUid, userId)) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            log.info(" sendOnlineUserCount>>>> param is null roomUid: {}  fromUserId:{} ", roomUid, userId); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            return; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        // 消息发送用户 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        LiveRoomMessage.MessageUser messageUser = null; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        SysUser sysUser = sysUserFeignService.queryUserById(userId); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if (Objects.nonNull(sysUser)) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            // 发送用户信息 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            messageUser = LiveRoomMessage.MessageUser 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                .builder() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                .sendUserId(sysUser.getId().toString()) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                .sendUserName(sysUser.getUsername()) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                .avatarUrl(sysUser.getAvatar()) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                .blackFlag(true) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                .build(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        LiveRoomMessage.MessageContent messageContent = LiveRoomMessage.MessageContent 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            .builder() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            .sendUserInfo(messageUser) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            .build(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        LiveRoomMessage message = LiveRoomMessage.builder() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                                 .isIncludeSender(1) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                                 .objectName(LiveRoomMessage.WELCOME) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                                 .fromUserId(roomVo.getSpeakerId().toString()) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                                 .toChatRoomId(roomUid) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                                 .content(messageContent) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                                 .build(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        //发送消息 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        try { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            livePluginContext.getPluginService(roomVo.getServiceProvider()).sendChatRoomMessage(message); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            log.info("sendBlackJoinRoom>>>> message: {}", JSONObject.toJSONString(message)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } catch (Exception e) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            log.error("sendBlackJoinRoom>>>> error {}", e.getMessage()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            log.error("sendBlackJoinRoom>>>> sendMessage {} :", JSONObject.toJSONString(message)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    /** 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				      * 获取直播间用户信息 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				      * @param userId 用户id 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				      * @param imLiveBroadcastRoomVo 直播间信息 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -1640,6 +1700,7 @@ public class ImLiveBroadcastRoomServiceImpl extends ServiceImpl<ImLiveBroadcastR 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             // 创建直播间IM群 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             pluginService.chatRoomCreate(room.getRoomUid(), room.getRoomTitle(),sysUser.getId().toString()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            createSpeakerInfo(room, sysUser); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             Boolean whetherVideoFlag = getRoomConfig(room.getRoomConfig()).map(o -> o.getWhether_video() == 0).orElse(true); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             // 腾讯云直播,提前生成录制规则 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -1731,7 +1792,7 @@ public class ImLiveBroadcastRoomServiceImpl extends ServiceImpl<ImLiveBroadcastR 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 case ANCHOR_CAMERA: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                     appDefinedData.add(TencentRequest.ChatRoomGroupDefinedData.builder() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                                                                               .key(key.getCode()) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                                                                              .value("OFF") 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                                                              .value("ON") 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                                                                               .build()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                     break; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             } 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -2131,6 +2192,7 @@ public class ImLiveBroadcastRoomServiceImpl extends ServiceImpl<ImLiveBroadcastR 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         if (liveRoom.getCameraStatus() != null) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             setGroupDefinedData(room,EGroupDefinedDataType.ANCHOR_CAMERA,liveRoom.getCameraStatus() == 1? 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 EOnOffStatus.ON.getCode():EOnOffStatus.OFF.getCode()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            return true; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         return this.updateById(imLiveBroadcastRoom); 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -2276,15 +2338,24 @@ public class ImLiveBroadcastRoomServiceImpl extends ServiceImpl<ImLiveBroadcastR 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             LivePluginService pluginService = livePluginContext.getPluginService( 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 imLiveBroadcastRoom.getServiceProvider()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             try { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                TencentWrapper.LiveStreamState liveStreamState = pluginService 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    .liveStreamState(getStreamId(imLiveBroadcastRoom.getRoomUid(),imLiveBroadcastRoom.getSpeakerId())); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                if (liveStreamState == null) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    log.error("查询直播间流失败,返回结果为空"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                if (pluginService == null) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    log.error("查询直播间流失败,未找到对应的插件"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                     continue; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                log.info("查询直播间流状态:{},roomUid:{}", JSON.toJSONString(liveStreamState), imLiveBroadcastRoom.getRoomUid()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                if (!"active".equals(liveStreamState.getStreamState())) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    roomDestroy(imLiveBroadcastRoom.getRoomUid()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                if (pluginService.pluginName().equals(TencentCloudLivePlugin.PLUGIN_NAME)) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    TencentWrapper.LiveStreamState liveStreamState = pluginService.liveStreamState( 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        getStreamId(imLiveBroadcastRoom.getRoomUid(), imLiveBroadcastRoom.getSpeakerId())); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    if (liveStreamState == null) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        log.error("查询直播间流失败,返回结果为空"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        continue; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    log.info("查询直播间流状态:{},roomUid:{}", JSON.toJSONString(liveStreamState), imLiveBroadcastRoom.getRoomUid()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    if (!"active".equals(liveStreamState.getStreamState())) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        roomDestroy(imLiveBroadcastRoom.getRoomUid()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                } else if (pluginService.pluginName().equals(RongCloudLivePlugin.PLUGIN_NAME)) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    // 融云走原有逻辑 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    destroyExpiredLiveRoom(new Date(), imLiveBroadcastRoom, 0); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             } catch (Exception e) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 |