|
@@ -43,6 +43,7 @@ import org.springframework.transaction.annotation.Transactional;
|
|
|
|
|
|
import java.io.Serializable;
|
|
|
import java.util.*;
|
|
|
+import java.util.concurrent.TimeUnit;
|
|
|
import java.util.function.BiConsumer;
|
|
|
import java.util.stream.Collectors;
|
|
|
|
|
@@ -81,6 +82,8 @@ public class ImLiveBroadcastRoomServiceImpl extends ServiceImpl<ImLiveBroadcastR
|
|
|
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_LIKE = "IM:LIVE_ROOM_LIKE:" + ROOM_UID;
|
|
|
//直播提前开始时间
|
|
@@ -443,8 +446,21 @@ public class ImLiveBroadcastRoomServiceImpl extends ServiceImpl<ImLiveBroadcastR
|
|
|
return;
|
|
|
}
|
|
|
Date now = new Date();
|
|
|
+ //获取当前用户状态变更的时间
|
|
|
+ long userStateTime = Optional.ofNullable(user.getTime()).orElse(now.getTime());
|
|
|
+ String userid = user.getUserid();
|
|
|
+ RBucket<Long> userStateTimeCache = redissonClient.getBucket(LIVE_USER_STATE_TIME.replace(USER_ID, userid));
|
|
|
+ if (userStateTimeCache.isExists()) {
|
|
|
+ //缓存的时间比当前传入时间大则放弃这条数据
|
|
|
+ long cacheTime = userStateTimeCache.get();
|
|
|
+ if (cacheTime > userStateTime) {
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ //将最新的时间写入缓存
|
|
|
+ userStateTimeCache.set(userStateTime,5L, TimeUnit.MINUTES);
|
|
|
//查询主讲人userId,若是主讲人
|
|
|
- RBucket<RoomSpeakerInfo> speakerCache = redissonClient.getBucket(LIVE_SPEAKER_INFO.replace(USER_ID, user.getUserid()));
|
|
|
+ RBucket<RoomSpeakerInfo> speakerCache = redissonClient.getBucket(LIVE_SPEAKER_INFO.replace(USER_ID, userid));
|
|
|
if (speakerCache.isExists()) {
|
|
|
RoomSpeakerInfo speakerInfo = speakerCache.get();
|
|
|
//主讲人进入房间
|
|
@@ -466,12 +482,12 @@ public class ImLiveBroadcastRoomServiceImpl extends ServiceImpl<ImLiveBroadcastR
|
|
|
return;
|
|
|
}
|
|
|
//获取当前用户所在房间的uid
|
|
|
- RBucket<String> userRoom = redissonClient.getBucket(LIVE_USER_ROOM.replace(USER_ID, user.getUserid()));
|
|
|
+ RBucket<String> userRoom = redissonClient.getBucket(LIVE_USER_ROOM.replace(USER_ID, userid));
|
|
|
if (!userRoom.isExists()) {
|
|
|
return;
|
|
|
}
|
|
|
String roomUid = userRoom.get();
|
|
|
- Integer userId = Integer.valueOf(user.getUserid());
|
|
|
+ Integer userId = Integer.valueOf(userid);
|
|
|
|
|
|
//从房间累计用户信息中查询该用户的信息
|
|
|
RMap<Integer, RoomUserInfoVo> roomTotalUser = redissonClient.getMap(LIVE_ROOM_TOTAL_USER_LIST.replace(ROOM_UID, roomUid));
|