Jelajahi Sumber

优化用户观看时长算法

hgw 3 tahun lalu
induk
melakukan
7423bb2a0a

+ 17 - 1
mec-biz/src/main/java/com/ym/mec/biz/service/impl/ImLiveBroadcastRoomServiceImpl.java

@@ -622,6 +622,12 @@ public class ImLiveBroadcastRoomServiceImpl extends ServiceImpl<ImLiveBroadcastR
      * @param userId  用户id
      */
     public void joinRoom(String roomUid, Integer userId) {
+        //查询房间信息
+        ImLiveBroadcastRoomVo imLiveBroadcastRoomVo = queryRoomInfo(roomUid);
+        if (Objects.isNull(imLiveBroadcastRoomVo)) {
+            log.info("opsRoom>>>> joinRoom error roomUid: {}", roomUid);
+            return;
+        }
         //记录用户当前房间uid
         redissonClient.getBucket(LIVE_USER_ROOM.replace(USER_ID, userId.toString())).set(roomUid);
         //房间累计用户信息-指只要进入到该房间的用户都要记录
@@ -638,7 +644,17 @@ public class ImLiveBroadcastRoomServiceImpl extends ServiceImpl<ImLiveBroadcastR
             userInfo.setFirstJoinTime(now);
             userInfo.setTotalViewTime(0);
         }
-        userInfo.setState(0);//0 进入/在房间
+        //0 进入房间
+        userInfo.setState(0);
+        //查询主讲人信息
+        RBucket<RoomSpeakerInfo> speakerCache = redissonClient.getBucket(LIVE_SPEAKER_INFO.replace(USER_ID, imLiveBroadcastRoomVo.getSpeakerId().toString()));
+        if (speakerCache.isExists()) {
+            //如果用户进来时主讲人已经开启直播则修改学生观看时间
+            Integer state = speakerCache.get().getState();
+            if (Objects.nonNull(state) && state == 0) {
+                userInfo.setDynamicLookTime(now);
+            }
+        }
         roomTotalUser.fastPut(userId, userInfo);
         log.info("joinRoom>>>> userInfo: {}", JSONObject.toJSONString(userInfo));
     }