diff --git a/rc-service/rc-service-live/live-application/src/main/java/com/red/circle/live/app/listener/UserHeartbeatListener.java b/rc-service/rc-service-live/live-application/src/main/java/com/red/circle/live/app/listener/UserHeartbeatListener.java index 6b4f43bf..268f950a 100644 --- a/rc-service/rc-service-live/live-application/src/main/java/com/red/circle/live/app/listener/UserHeartbeatListener.java +++ b/rc-service/rc-service-live/live-application/src/main/java/com/red/circle/live/app/listener/UserHeartbeatListener.java @@ -24,7 +24,9 @@ import com.red.circle.other.inner.endpoint.live.RoomMemberClient; import com.red.circle.other.inner.endpoint.task.RoomDailyTaskClient; import com.red.circle.other.inner.endpoint.user.user.UserOnlineClient; import com.red.circle.other.inner.endpoint.user.user.UserProfileClient; +import com.red.circle.other.inner.enums.live.RoomUserRolesEnum; import com.red.circle.other.inner.enums.task.RoomDailyTaskCode; +import com.red.circle.other.inner.model.cmd.live.MemberRolesQryCmd; import com.red.circle.other.inner.model.cmd.task.RoomDailyTaskProgressUpdateInnerCmd; import com.red.circle.other.inner.model.cmd.user.OnlineStatusUploadCmd; import com.red.circle.other.inner.model.dto.live.RoomMemberDTO; @@ -37,8 +39,11 @@ import com.red.circle.tool.core.regex.RegexConstant; import com.red.circle.tool.core.sequence.IdWorkerUtils; import com.red.circle.tool.core.text.StringUtils; import java.util.List; +import java.util.Map; import java.util.Objects; +import java.util.Set; import java.util.concurrent.TimeUnit; +import java.util.stream.Collectors; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; @@ -121,7 +126,15 @@ public class UserHeartbeatListener implements MessageListener { // 房间内同时在线用户数 if (Objects.equals(roomProfile.getUserId(), event.getUserId())) { List liveRoomUsers = liveMicUserCacheService.listUser(roomProfile.getId()); - handleOnlineUserCountTask(event.getUserId(), liveRoomUsers.size()); + Set userIdList = liveRoomUsers.stream().map(LiveRoomUser::getUserId).collect(Collectors.toSet()); + + MemberRolesQryCmd roleQry = new MemberRolesQryCmd().setRoomId(roomId).setUserIds(userIdList); + Map body = roomMemberClient.mapMemberRoles(roleQry).getBody(); + Set collect = body.values().stream() + .filter(roleEnum -> !RoomUserRolesEnum.TOURIST.equals(roleEnum)) + .collect(Collectors.toSet()); + + handleOnlineUserCountTask(event.getUserId(), collect.size()); } else { // 在他人房间活跃 if (!tryAcquireMinuteTick(event.getUserId())) {