|
@@ -529,10 +529,17 @@ public class LiveRoomServiceImpl extends ServiceImpl<LiveRoomDao, LiveRoom> impl
|
|
|
if (StringUtils.isBlank(user.getStatus())) {
|
|
|
return;
|
|
|
}
|
|
|
+ String userIdStr = user.getUserid();
|
|
|
+ //获取当前用户所在房间的uid
|
|
|
+ RBucket<String> userRoom = redissonClient.getBucket(LIVE_USER_ROOM.replace(USER_ID, userIdStr));
|
|
|
+ if (!userRoom.isExists()) {
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ String roomUid = userRoom.get();
|
|
|
+
|
|
|
Date now = new Date();
|
|
|
//获取当前用户状态变更的时间
|
|
|
long userStateTime = Optional.ofNullable(user.getTime()).orElse(now.getTime());
|
|
|
- String userIdStr = user.getUserid();
|
|
|
RBucket<Long> userStateTimeCache = redissonClient.getBucket(LIVE_USER_LAST_TIME.replace(USER_ID, userIdStr));
|
|
|
if (userStateTimeCache.isExists()) {
|
|
|
//缓存的时间比当前传入时间大则放弃这条数据
|
|
@@ -542,13 +549,7 @@ public class LiveRoomServiceImpl extends ServiceImpl<LiveRoomDao, LiveRoom> impl
|
|
|
}
|
|
|
}
|
|
|
//将最新的时间写入缓存
|
|
|
- userStateTimeCache.set(userStateTime, 5L, TimeUnit.MINUTES);
|
|
|
- //获取当前用户所在房间的uid
|
|
|
- RBucket<String> userRoom = redissonClient.getBucket(LIVE_USER_ROOM.replace(USER_ID, userIdStr));
|
|
|
- if (!userRoom.isExists()) {
|
|
|
- return;
|
|
|
- }
|
|
|
- String roomUid = userRoom.get();
|
|
|
+ userStateTimeCache.set(userStateTime, 60L, TimeUnit.MINUTES);
|
|
|
//根据房间号获取房间信息
|
|
|
RBucket<RoomInfoCache> roomInfoCache = this.getLiveRoomInfo(roomUid);
|
|
|
if (!roomInfoCache.isExists()) {
|
|
@@ -557,7 +558,7 @@ public class LiveRoomServiceImpl extends ServiceImpl<LiveRoomDao, LiveRoom> impl
|
|
|
RoomInfoCache roomInfo = roomInfoCache.get();
|
|
|
// 查询userId是不是主讲人 ,如果是主讲人则返回
|
|
|
if (roomInfo.getSpeakerId().toString().equals(userIdStr)) {
|
|
|
- opsSpeaker(roomInfoCache, user, now, userIdStr);
|
|
|
+ this.opsSpeaker(roomInfoCache, user, now, userIdStr);
|
|
|
return;
|
|
|
}
|
|
|
//这里开始只处理观看者的数据,观看者只接受退出消息 status=0 是进入房间
|
|
@@ -569,7 +570,10 @@ public class LiveRoomServiceImpl extends ServiceImpl<LiveRoomDao, LiveRoom> impl
|
|
|
//从房间累计用户信息中查询该用户的信息
|
|
|
RMap<Long, String> roomTotalUser = this.getTotalUserCache(roomUid);
|
|
|
//该房间未查询到用户数据则不处理
|
|
|
- if (!roomTotalUser.isExists() && !roomTotalUser.containsKey(userId)) {
|
|
|
+ if (!roomTotalUser.isExists()) {
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ if (!roomTotalUser.containsKey(userId)) {
|
|
|
return;
|
|
|
}
|
|
|
//查询用户数据
|
|
@@ -585,13 +589,10 @@ public class LiveRoomServiceImpl extends ServiceImpl<LiveRoomDao, LiveRoom> impl
|
|
|
//从在线人员列表删除该人员
|
|
|
onlineUserInfo.fastRemove(userId);
|
|
|
//学员退出 写学生考勤表
|
|
|
- StudentAttendance studentAttendance = studentAttendanceService.getOne(Wrappers.<StudentAttendance>lambdaQuery()
|
|
|
+ studentAttendanceService.update(Wrappers.<StudentAttendance>lambdaUpdate()
|
|
|
.eq(StudentAttendance::getStudentId, userId)
|
|
|
- .eq(StudentAttendance::getCourseScheduleId, roomInfo.getCourseId()));
|
|
|
- if (Objects.nonNull(studentAttendance)) {
|
|
|
- studentAttendance.setSignOutTime(now);
|
|
|
- studentAttendanceService.updateById(studentAttendance);
|
|
|
- }
|
|
|
+ .eq(StudentAttendance::getCourseScheduleId, roomInfo.getCourseId())
|
|
|
+ .set(StudentAttendance::getSignOutTime, now));
|
|
|
//向直播间发送当前在线人数消息
|
|
|
this.sendOnlineUserCount(roomUid, userId, onlineUserInfo.size());
|
|
|
log.info("opsRoom>>>> looker userInfo: {}", userJsonStr);
|