Bläddra i källkod

观看时长统计

liujc 1 år sedan
förälder
incheckning
c6652f5803

+ 20 - 4
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/LiveRoomServiceImpl.java

@@ -866,11 +866,16 @@ public class LiveRoomServiceImpl extends ServiceImpl<LiveRoomDao, LiveRoom> impl
             if (!roomTotalUser.containsKey(userId)) {
                 return;
             }
+            String userJsonStr = roomTotalUser.get(userId);
+            log.info("opsRoom>>>> userJsonStr  {}", userJsonStr);
             //查询用户数据
-            RoomUserInfoCache userInfo = JSONObject.toJavaObject(JSONObject.parseObject(roomTotalUser.get(userId)), RoomUserInfoCache.class);
-            userInfo.setLastOutTime(now);
-            String userJsonStr = JSONObject.toJSONString(userInfo);
-            roomTotalUser.fastPut(userId, userJsonStr);
+            ImLiveBroadcastRoomMemberWrapper.RoomUserInfoVo userInfo = JSONObject.toJavaObject(JSONObject.parseObject(userJsonStr), ImLiveBroadcastRoomMemberWrapper.RoomUserInfoVo.class);
+            //如果有动态观看时间则证明主播开播过,需要计算当前用户观看时长
+            if (Objects.nonNull(userInfo.getDynamicLookTime())) {
+                userInfo.setTotalViewTime(this.getLookMinutes(userInfo.getDynamicLookTime(), userInfo.getTotalViewTime()));
+                userInfo.setDynamicLookTime(null);
+            }
+            roomTotalUser.fastPut(userId, JSONObject.toJSONString(userInfo));
             //查询在线人员列表
             RMap<Long, String> onlineUserInfo = this.getOnlineUserCache(roomUid);
             if (!onlineUserInfo.isExists()) {
@@ -923,6 +928,17 @@ public class LiveRoomServiceImpl extends ServiceImpl<LiveRoomDao, LiveRoom> impl
 
     }
 
+
+    /**
+     * 计算观看时长差-分钟数不满一分钟为0
+     *
+     * @param startDT    开始时间
+     * @param nowMinutes 现在观看时长
+     */
+    private int getLookMinutes(Date startDT, Integer nowMinutes) {
+        return getLookMinutes(startDT, new Date(), nowMinutes);
+    }
+
     private LiveRoom getByRoomUid(String roomUid) {
         return this.lambdaQuery()
                 .eq(LiveRoom::getRoomUid, roomUid)