|  | @@ -342,7 +342,7 @@ public class ImLiveBroadcastRoomServiceImpl extends ServiceImpl<ImLiveBroadcastR
 | 
	
		
			
				|  |  |      /**
 | 
	
		
			
				|  |  |       * 修改直播间信息
 | 
	
		
			
				|  |  |       *
 | 
	
		
			
				|  |  | -     * @param dto
 | 
	
		
			
				|  |  | +     * @param dto ImLiveBroadcastRoomDto
 | 
	
		
			
				|  |  |       */
 | 
	
		
			
				|  |  |      @Override
 | 
	
		
			
				|  |  |      @Transactional(rollbackFor = Exception.class)
 | 
	
	
		
			
				|  | @@ -783,11 +783,31 @@ public class ImLiveBroadcastRoomServiceImpl extends ServiceImpl<ImLiveBroadcastR
 | 
	
		
			
				|  |  |              if (isSpeaker(user, now, userid, roomUid)) {
 | 
	
		
			
				|  |  |                  return;
 | 
	
		
			
				|  |  |              }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +            //向直播间发送当前在线人数消息
 | 
	
		
			
				|  |  | +            ImLiveBroadcastRoomVo roomVo = this.getImLiveBroadcastRoomVo(roomUid);
 | 
	
		
			
				|  |  | +            if (Objects.isNull(roomVo)) {
 | 
	
		
			
				|  |  | +                log.info("opsRoom>>>> roomVo is null, userState: {}", JSON.toJSONString(userState));
 | 
	
		
			
				|  |  | +                return;
 | 
	
		
			
				|  |  | +            }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +            Integer userId = Integer.valueOf(userid);
 | 
	
		
			
				|  |  |              //这里开始只处理观看者的数据,观看者只接受退出消息 status=0 是进入房间
 | 
	
		
			
				|  |  |              if (user.getStatus().equals("0")) {
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +                // 用户进入直播间,发送统计数据
 | 
	
		
			
				|  |  | +                sendLiveRoomStatMessage(userid, roomVo);
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +                // 更新用户在线状态
 | 
	
		
			
				|  |  | +                liveBroadcastRoomMemberService.lambdaUpdate()
 | 
	
		
			
				|  |  | +                        .eq(ImLiveBroadcastRoomMember::getTenantId, roomVo.getTenantId())
 | 
	
		
			
				|  |  | +                        .eq(ImLiveBroadcastRoomMember::getRoomUid, roomVo.getRoomUid())
 | 
	
		
			
				|  |  | +                        .eq(ImLiveBroadcastRoomMember::getUserId, userId)
 | 
	
		
			
				|  |  | +                        .set(ImLiveBroadcastRoomMember::getOnlineStatus, 1)
 | 
	
		
			
				|  |  | +                        .update();
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  |                  return;
 | 
	
		
			
				|  |  |              }
 | 
	
		
			
				|  |  | -            Integer userId = Integer.valueOf(userid);
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |              //从房间累计用户信息中查询该用户的信息
 | 
	
		
			
				|  |  |              RMap<Integer, String> roomTotalUser = this.getTotalUserCache(roomUid);
 | 
	
	
		
			
				|  | @@ -815,29 +835,130 @@ public class ImLiveBroadcastRoomServiceImpl extends ServiceImpl<ImLiveBroadcastR
 | 
	
		
			
				|  |  |              }
 | 
	
		
			
				|  |  |              //从在线人员列表删除该人员
 | 
	
		
			
				|  |  |              onlineUserInfo.fastRemove(userId);
 | 
	
		
			
				|  |  | -            //向直播间发送当前在线人数消息
 | 
	
		
			
				|  |  | -            ImLiveBroadcastRoomVo roomVo = this.getImLiveBroadcastRoomVo(roomUid);
 | 
	
		
			
				|  |  | -            this.sendOnlineUserCount(roomVo, userId, onlineUserInfo.size());
 | 
	
		
			
				|  |  | -            log.info("opsRoom>>>> looker userInfo: {}", JSONObject.toJSONString(userInfo));
 | 
	
		
			
				|  |  | -            //用户离开直播间发送退出房间消息给主讲人
 | 
	
		
			
				|  |  | -            LiveRoomMessage message = new LiveRoomMessage();
 | 
	
		
			
				|  |  | -            message.setIsIncludeSender(1);
 | 
	
		
			
				|  |  | -            message.setFromUserId(userId.toString());
 | 
	
		
			
				|  |  | -            message.setToChatRoomId(roomUid);
 | 
	
		
			
				|  |  | -            message.setObjectName(ImRoomMessage.LOOKER_LOGIN_OUT);
 | 
	
		
			
				|  |  | -            message.setContent(userId);
 | 
	
		
			
				|  |  | -            try {
 | 
	
		
			
				|  |  | -                LivePluginService pluginService = livePluginContext.getPluginService(roomVo.getServiceProvider());
 | 
	
		
			
				|  |  | -                pluginService.sendChatRoomMessage(message);
 | 
	
		
			
				|  |  | -                log.info("opsRoom>>>> looker LOOKER_LOGIN_OUT : {}", JSONObject.toJSONString(userInfo));
 | 
	
		
			
				|  |  | -            } catch (Exception e) {
 | 
	
		
			
				|  |  | -                log.error("opsRoom>>>>  looker error LOOKER_LOGIN_OUT {}", e.getMessage());
 | 
	
		
			
				|  |  | -                log.error("opsRoom>>>>  looker error sendMessage {} : LOOKER_LOGIN_OUT : {}", message, JSONObject.toJSONString(userInfo));
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +            // 更新用户离线状态
 | 
	
		
			
				|  |  | +            ImLiveBroadcastRoomMember roomMember = new ImLiveBroadcastRoomMember();
 | 
	
		
			
				|  |  | +            roomMember.setOnlineStatus(0);
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +            // 用户离开直播间
 | 
	
		
			
				|  |  | +            if (user.getStatus().equals("3")) {
 | 
	
		
			
				|  |  | +                roomMember.setLiveRoomStatus(0);
 | 
	
		
			
				|  |  |              }
 | 
	
		
			
				|  |  | +            // 更新用户在线状态为离线
 | 
	
		
			
				|  |  | +            liveBroadcastRoomMemberService.lambdaUpdate()
 | 
	
		
			
				|  |  | +                    .eq(ImLiveBroadcastRoomMember::getTenantId, roomVo.getTenantId())
 | 
	
		
			
				|  |  | +                    .eq(ImLiveBroadcastRoomMember::getRoomUid, roomVo.getRoomUid())
 | 
	
		
			
				|  |  | +                    .eq(ImLiveBroadcastRoomMember::getUserId, userId)
 | 
	
		
			
				|  |  | +                    .update(roomMember);
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +            log.info("opsRoom>>>> looker userInfo: {}", JSONObject.toJSONString(userInfo));
 | 
	
		
			
				|  |  | +            // 在线用户消息同步
 | 
	
		
			
				|  |  | +            sendOnlineUserCount(roomVo, userId, onlineUserInfo.size());
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +            // 直播间统计数据
 | 
	
		
			
				|  |  | +            sendLiveRoomStatMessage(userid, roomVo);
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +            // 直播间用户离开消息
 | 
	
		
			
				|  |  | +            sendLiveRoomLoginOutMessage(userid, roomVo);
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  |          });
 | 
	
		
			
				|  |  |      }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |      /**
 | 
	
		
			
				|  |  | +     * 直播间统计数据同步
 | 
	
		
			
				|  |  | +     * @param userid 用户Id
 | 
	
		
			
				|  |  | +     * @param roomVo ImLiveBroadcastRoomVo
 | 
	
		
			
				|  |  | +     */
 | 
	
		
			
				|  |  | +    private void sendLiveRoomStatMessage(String userid, ImLiveBroadcastRoomVo roomVo) {
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +        // 直播间统计数据
 | 
	
		
			
				|  |  | +        getRoomData(roomVo);
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +        // 消息发送用户
 | 
	
		
			
				|  |  | +        LiveRoomMessage.MessageUser messageUser = null;
 | 
	
		
			
				|  |  | +        SysUser sysUser = sysUserFeignService.queryUserInfo();
 | 
	
		
			
				|  |  | +        if (Objects.nonNull(sysUser)) {
 | 
	
		
			
				|  |  | +            // 发送用户信息
 | 
	
		
			
				|  |  | +            messageUser = LiveRoomMessage.MessageUser
 | 
	
		
			
				|  |  | +                    .builder()
 | 
	
		
			
				|  |  | +                    .sendUserId(sysUser.getId().toString())
 | 
	
		
			
				|  |  | +                    .sendUserName(sysUser.getUsername())
 | 
	
		
			
				|  |  | +                    .avatarUrl(sysUser.getAvatar())
 | 
	
		
			
				|  |  | +                    .build();
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +        LiveRoomMessage.MessageContent messageContent = LiveRoomMessage.MessageContent
 | 
	
		
			
				|  |  | +                .builder()
 | 
	
		
			
				|  |  | +                .onlineUsers(roomVo.getLookNum().longValue())
 | 
	
		
			
				|  |  | +                .viewers(roomVo.getTotalLookNum().longValue())
 | 
	
		
			
				|  |  | +                .likes(roomVo.getLikeNum().longValue())
 | 
	
		
			
				|  |  | +                .sendUserInfo(messageUser)
 | 
	
		
			
				|  |  | +                .build();
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +        LiveRoomMessage message = LiveRoomMessage.builder()
 | 
	
		
			
				|  |  | +                .isIncludeSender(1)
 | 
	
		
			
				|  |  | +                .objectName(LiveRoomMessage.STAT_SYNC)
 | 
	
		
			
				|  |  | +                .fromUserId(userid)
 | 
	
		
			
				|  |  | +                .toChatRoomId(roomVo.getRoomUid())
 | 
	
		
			
				|  |  | +                .content(messageContent)
 | 
	
		
			
				|  |  | +                .build();
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +        //发送消息
 | 
	
		
			
				|  |  | +        try {
 | 
	
		
			
				|  |  | +            livePluginContext.getPluginService(roomVo.getServiceProvider()).sendChatRoomMessage(message);
 | 
	
		
			
				|  |  | +            log.info("sendLiveRoomStatMessage>>>> message: {}", JSONObject.toJSONString(message));
 | 
	
		
			
				|  |  | +        } catch (Exception e) {
 | 
	
		
			
				|  |  | +            log.error("sendLiveRoomStatMessage>>>> error {}", e.getMessage());
 | 
	
		
			
				|  |  | +            log.error("sendLiveRoomStatMessage>>>> sendMessage {} :", JSONObject.toJSONString(message));
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    /**
 | 
	
		
			
				|  |  | +     * 直播间用户离开消息
 | 
	
		
			
				|  |  | +     * @param userid 用户id
 | 
	
		
			
				|  |  | +     * @param roomVo ImLiveBroadcastRoomVo
 | 
	
		
			
				|  |  | +     */
 | 
	
		
			
				|  |  | +    private void sendLiveRoomLoginOutMessage(String userid, ImLiveBroadcastRoomVo roomVo) {
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +        // 消息发送用户
 | 
	
		
			
				|  |  | +        LiveRoomMessage.MessageUser messageUser = null;
 | 
	
		
			
				|  |  | +        SysUser sysUser = sysUserFeignService.queryUserInfo();
 | 
	
		
			
				|  |  | +        if (Objects.nonNull(sysUser)) {
 | 
	
		
			
				|  |  | +            // 发送用户信息
 | 
	
		
			
				|  |  | +            messageUser = LiveRoomMessage.MessageUser
 | 
	
		
			
				|  |  | +                    .builder()
 | 
	
		
			
				|  |  | +                    .sendUserId(sysUser.getId().toString())
 | 
	
		
			
				|  |  | +                    .sendUserName(sysUser.getUsername())
 | 
	
		
			
				|  |  | +                    .avatarUrl(sysUser.getAvatar())
 | 
	
		
			
				|  |  | +                    .build();
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +        LiveRoomMessage.MessageContent messageContent = LiveRoomMessage.MessageContent
 | 
	
		
			
				|  |  | +                .builder()
 | 
	
		
			
				|  |  | +                .targetId(userid)
 | 
	
		
			
				|  |  | +                .sendUserInfo(messageUser)
 | 
	
		
			
				|  |  | +                .build();
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +        LiveRoomMessage message = LiveRoomMessage.builder()
 | 
	
		
			
				|  |  | +                .isIncludeSender(1)
 | 
	
		
			
				|  |  | +                .objectName(LiveRoomMessage.LOOKER_LOGIN_OUT)
 | 
	
		
			
				|  |  | +                .fromUserId(userid)
 | 
	
		
			
				|  |  | +                .toChatRoomId(roomVo.getRoomUid())
 | 
	
		
			
				|  |  | +                .content(messageContent)
 | 
	
		
			
				|  |  | +                .build();
 | 
	
		
			
				|  |  | +        try {
 | 
	
		
			
				|  |  | +            //用户离开直播间发送退出房间消息给主讲人
 | 
	
		
			
				|  |  | +            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());
 | 
	
		
			
				|  |  | +            log.error("sendLiveRoomLoginOutMessage>>>>  looker error sendMessage {} : LOOKER_LOGIN_OUT : : roomId={}, userId={}", message, roomVo.getRoomUid(), userid);
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    /**
 | 
	
		
			
				|  |  |       * 向直播间发送当前在线人数消息
 | 
	
		
			
				|  |  |       *
 | 
	
		
			
				|  |  |       * @param roomVo    直播间
 | 
	
	
		
			
				|  | @@ -845,20 +966,47 @@ public class ImLiveBroadcastRoomServiceImpl extends ServiceImpl<ImLiveBroadcastR
 | 
	
		
			
				|  |  |       * @param count      人数
 | 
	
		
			
				|  |  |       */
 | 
	
		
			
				|  |  |      private void sendOnlineUserCount(ImLiveBroadcastRoomVo roomVo, Integer fromUserId, Integer count) {
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  |          String roomUid = roomVo.getRoomUid();
 | 
	
		
			
				|  |  |          //校验传入参数,房间uid和发送人id不能为空
 | 
	
		
			
				|  |  |          if (!WrapperUtil.checkObj(roomUid, fromUserId, count)) {
 | 
	
		
			
				|  |  |              log.info(" sendOnlineUserCount>>>> param is null   roomUid: {}  fromUserId:{}  count:{}", roomUid, fromUserId, count);
 | 
	
		
			
				|  |  |              return;
 | 
	
		
			
				|  |  |          }
 | 
	
		
			
				|  |  | -        LiveRoomMessage message = new LiveRoomMessage();
 | 
	
		
			
				|  |  | -        message.setIsIncludeSender(1);
 | 
	
		
			
				|  |  | -        message.setObjectName(ImRoomMessage.MEMBER_COUNT);
 | 
	
		
			
				|  |  | -        message.setToChatRoomId(roomUid);
 | 
	
		
			
				|  |  | -        HashMap<String, Integer> sendMap = new HashMap<>();
 | 
	
		
			
				|  |  | -        sendMap.put("count", count);
 | 
	
		
			
				|  |  | -        message.setFromUserId(fromUserId.toString());
 | 
	
		
			
				|  |  | -        message.setContent(sendMap);
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +        // 直播间统计数据
 | 
	
		
			
				|  |  | +        getRoomData(roomVo);
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +        // 消息发送用户
 | 
	
		
			
				|  |  | +        LiveRoomMessage.MessageUser messageUser = null;
 | 
	
		
			
				|  |  | +        SysUser sysUser = sysUserFeignService.queryUserInfo();
 | 
	
		
			
				|  |  | +        if (Objects.nonNull(sysUser)) {
 | 
	
		
			
				|  |  | +            // 发送用户信息
 | 
	
		
			
				|  |  | +            messageUser = LiveRoomMessage.MessageUser
 | 
	
		
			
				|  |  | +                    .builder()
 | 
	
		
			
				|  |  | +                    .sendUserId(sysUser.getId().toString())
 | 
	
		
			
				|  |  | +                    .sendUserName(sysUser.getUsername())
 | 
	
		
			
				|  |  | +                    .avatarUrl(sysUser.getAvatar())
 | 
	
		
			
				|  |  | +                    .build();
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +        LiveRoomMessage.MessageContent messageContent = LiveRoomMessage.MessageContent
 | 
	
		
			
				|  |  | +                .builder()
 | 
	
		
			
				|  |  | +                .count(count.longValue())
 | 
	
		
			
				|  |  | +                .onlineUsers(roomVo.getLookNum().longValue())
 | 
	
		
			
				|  |  | +                .viewers(roomVo.getTotalLookNum().longValue())
 | 
	
		
			
				|  |  | +                .likes(roomVo.getLikeNum().longValue())
 | 
	
		
			
				|  |  | +                .sendUserInfo(messageUser)
 | 
	
		
			
				|  |  | +                .build();
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +        LiveRoomMessage message = LiveRoomMessage.builder()
 | 
	
		
			
				|  |  | +                .isIncludeSender(1)
 | 
	
		
			
				|  |  | +                .objectName(LiveRoomMessage.MEMBER_COUNT)
 | 
	
		
			
				|  |  | +                .fromUserId(fromUserId.toString())
 | 
	
		
			
				|  |  | +                .toChatRoomId(roomUid)
 | 
	
		
			
				|  |  | +                .content(messageContent)
 | 
	
		
			
				|  |  | +                .build();
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  |          //发送消息
 | 
	
		
			
				|  |  |          try {
 | 
	
		
			
				|  |  |              livePluginContext.getPluginService(roomVo.getServiceProvider()).sendChatRoomMessage(message);
 | 
	
	
		
			
				|  | @@ -875,15 +1023,19 @@ public class ImLiveBroadcastRoomServiceImpl extends ServiceImpl<ImLiveBroadcastR
 | 
	
		
			
				|  |  |       * @return true 是主讲人 false 不是主讲人
 | 
	
		
			
				|  |  |       */
 | 
	
		
			
				|  |  |      private boolean isSpeaker(ImUserState user, Date now, String userid, String roomUid) {
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  |          RBucket<RoomSpeakerInfo> speakerCache = getRoomSpeakerInfoCache(roomUid, userid);
 | 
	
		
			
				|  |  |          if (!speakerCache.isExists()) {
 | 
	
		
			
				|  |  |              return false;
 | 
	
		
			
				|  |  |          }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +        // 当前用户为主播
 | 
	
		
			
				|  |  |          RoomSpeakerInfo speakerInfo = speakerCache.get();
 | 
	
		
			
				|  |  |          //最后一次进入房间的clientIp
 | 
	
		
			
				|  |  |          RBucket<String> lastClientIp = redissonClient.getBucket(LIVE_SPEAKER_LAST_CLIENT_IP.replace(ROOM_UID, roomUid).replace(USER_ID, userid));
 | 
	
		
			
				|  |  |          //主讲人进入房间
 | 
	
		
			
				|  |  |          if (user.getStatus().equals("0")) {
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  |              speakerInfo.setJoinRoomTime(now);
 | 
	
		
			
				|  |  |              log.info("opsRoom>>>> join speakerCache {}", JSONObject.toJSONString(speakerInfo));
 | 
	
		
			
				|  |  |              speakerCache.set(speakerInfo);
 | 
	
	
		
			
				|  | @@ -891,6 +1043,14 @@ public class ImLiveBroadcastRoomServiceImpl extends ServiceImpl<ImLiveBroadcastR
 | 
	
		
			
				|  |  |              if (StringUtils.isNotBlank(user.getClientIp())) {
 | 
	
		
			
				|  |  |                  lastClientIp.set(user.getClientIp());
 | 
	
		
			
				|  |  |              }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +            // 更新主播在线状态
 | 
	
		
			
				|  |  | +            lambdaUpdate()
 | 
	
		
			
				|  |  | +                    .eq(ImLiveBroadcastRoom::getRoomUid, roomUid)
 | 
	
		
			
				|  |  | +                    .eq(ImLiveBroadcastRoom::getSpeakerId, Integer.parseInt(userid))
 | 
	
		
			
				|  |  | +                    .set(ImLiveBroadcastRoom::getSpeakerStatus, 1)
 | 
	
		
			
				|  |  | +                    .update();
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  |              return true;
 | 
	
		
			
				|  |  |          }
 | 
	
		
			
				|  |  |          //校验本次退出直播间的clientIp 是不是上次进入房间的clientIp
 | 
	
	
		
			
				|  | @@ -906,18 +1066,48 @@ public class ImLiveBroadcastRoomServiceImpl extends ServiceImpl<ImLiveBroadcastR
 | 
	
		
			
				|  |  |          if (compareDate.apply(speakerInfo.getExitRoomTime(), speakerInfo.getJoinRoomTime())) {
 | 
	
		
			
				|  |  |              return true;
 | 
	
		
			
				|  |  |          }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  |          //主讲人退出房间关闭录像
 | 
	
		
			
				|  |  |          closeLive(speakerInfo);
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +        //主讲人退出房间
 | 
	
		
			
				|  |  |          speakerInfo.setExitRoomTime(now);
 | 
	
		
			
				|  |  |          log.info("opsRoom>>>> exit speakerCache {}", JSONObject.toJSONString(speakerInfo));
 | 
	
		
			
				|  |  |          speakerCache.set(speakerInfo);
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +        //向直播间发送当前在线人数消息
 | 
	
		
			
				|  |  | +        ImLiveBroadcastRoomVo roomVo = this.getImLiveBroadcastRoomVo(roomUid);
 | 
	
		
			
				|  |  | +        if (Objects.isNull(roomVo)) {
 | 
	
		
			
				|  |  | +            log.info("opsRoom>>>> roomVo is null, roomId: {}, userId={}", roomUid, userid);
 | 
	
		
			
				|  |  | +            return true;
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +        ImLiveBroadcastRoom room = new ImLiveBroadcastRoom();
 | 
	
		
			
				|  |  | +        room.setSpeakerStatus(0);
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +        // 更新推流状态
 | 
	
		
			
				|  |  | +        if (user.getStatus().equals("3")) {
 | 
	
		
			
				|  |  | +            room.setPushStatus(0);
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +        // 更新主播状态
 | 
	
		
			
				|  |  | +        lambdaUpdate()
 | 
	
		
			
				|  |  | +                .eq(ImLiveBroadcastRoom::getRoomUid, roomUid)
 | 
	
		
			
				|  |  | +                .eq(ImLiveBroadcastRoom::getSpeakerId, Integer.parseInt(userid))
 | 
	
		
			
				|  |  | +                .update(room);
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +        // 腾讯云直播方案,推送主播离开消息
 | 
	
		
			
				|  |  | +        if (roomVo.getServiceProvider().equals("tencentCloud")) {
 | 
	
		
			
				|  |  | +            // 主播离开消息通知
 | 
	
		
			
				|  |  | +            sendLiveRoomLoginOutMessage(userid, roomVo);
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  |          return true;
 | 
	
		
			
				|  |  |      }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |      /**
 | 
	
		
			
				|  |  |       * 主讲人登录专用
 | 
	
		
			
				|  |  |       *
 | 
	
		
			
				|  |  | -     * @param roomUid
 | 
	
		
			
				|  |  | +     * @param roomUid 直播间Id
 | 
	
		
			
				|  |  |       */
 | 
	
		
			
				|  |  |      public ImLiveBroadcastRoomVo speakerJoinRoom(String roomUid, String os) {
 | 
	
		
			
				|  |  |          SysUser sysUser = getSysUser();
 | 
	
	
		
			
				|  | @@ -948,6 +1138,13 @@ public class ImLiveBroadcastRoomServiceImpl extends ServiceImpl<ImLiveBroadcastR
 | 
	
		
			
				|  |  |          //记录用户当前房间uid
 | 
	
		
			
				|  |  |          redissonClient.getBucket(LIVE_USER_ROOM.replace(USER_ID, userId.toString())).set(roomUid, 12L, TimeUnit.HOURS);
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | +        // 更新直播间主播状态
 | 
	
		
			
				|  |  | +        lambdaUpdate()
 | 
	
		
			
				|  |  | +                .eq(ImLiveBroadcastRoom::getRoomUid, roomUid)
 | 
	
		
			
				|  |  | +                .eq(ImLiveBroadcastRoom::getSpeakerId, userId)
 | 
	
		
			
				|  |  | +                .set(ImLiveBroadcastRoom::getSpeakerStatus, 1)
 | 
	
		
			
				|  |  | +                .update();
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  |          return roomVo;
 | 
	
		
			
				|  |  |      }
 | 
	
		
			
				|  |  |  
 |