liujunchi hace 2 años
padre
commit
a58575d792

+ 12 - 1
mec-biz/src/main/java/com/ym/mec/biz/dal/vo/ImLiveBroadcastRoomDetailVo.java

@@ -30,9 +30,12 @@ public class ImLiveBroadcastRoomDetailVo implements Serializable {
     @ApiModelProperty(value = "点赞数")
     private Integer totalLikeNum;
 
-    @ApiModelProperty(value = "直播时长")
+    @ApiModelProperty(value = "直播时长 分钟 平台统计")
     private Integer totalLiveTime;
 
+    @ApiModelProperty("推流时长 毫秒 三方统计")
+    private Integer liveTotalTime;
+
     @ApiModelProperty(value = "直播开始时间")
     private Date liveStartTime;
 
@@ -44,6 +47,14 @@ public class ImLiveBroadcastRoomDetailVo implements Serializable {
 
     private List<ImLiveRoomVideoVo> videoList;
 
+    public Integer getLiveTotalTime() {
+        return liveTotalTime;
+    }
+
+    public void setLiveTotalTime(Integer liveTotalTime) {
+        this.liveTotalTime = liveTotalTime;
+    }
+
     public Date getLiveStartTime() {
         return liveStartTime;
     }

+ 40 - 4
mec-biz/src/main/java/com/ym/mec/biz/service/impl/ImLiveBroadcastRoomServiceImpl.java

@@ -737,7 +737,7 @@ public class ImLiveBroadcastRoomServiceImpl extends ServiceImpl<ImLiveBroadcastR
             liveData.setLikeNum(like);
             liveData.setTotalUserNum(CollectionUtils.isNotEmpty(memberList) ? memberList.size() : 0);
             liveData.setUpdatedTime(now);
-            liveData.setLiveTime(getLookMinutes(speakerInfo.getStartLiveTime(), now, speakerInfo.getTotalLiveTime()));
+            liveData.setLiveTime(getLookMillisecond(speakerInfo.getStartLiveTime(), now, speakerInfo.getTotalLiveTime()));
             liveBroadcastRoomDataService.save(liveData);
             //删除房间主讲人数据
             speakerCache.delete();
@@ -1422,10 +1422,10 @@ public class ImLiveBroadcastRoomServiceImpl extends ServiceImpl<ImLiveBroadcastR
             roomSpeakerInfo.setEndLiveTime(now);
             roomSpeakerInfo.setState(1);
             //如果开播时间和本次操作结束播放时间小于1分钟则不计算观看时间
-            int liveMinutes = getLookMinutes(roomSpeakerInfo.getStartLiveTime(), null);
+            int liveMinutes = getLookMillisecond(roomSpeakerInfo.getStartLiveTime(), null);
             if (liveMinutes > 1) {
                 //写入本次直播时长
-                roomSpeakerInfo.setTotalLiveTime(getLookMinutes(roomSpeakerInfo.getStartLiveTime(), roomSpeakerInfo.getTotalLiveTime()));
+                roomSpeakerInfo.setTotalLiveTime(getLookMillisecond(roomSpeakerInfo.getStartLiveTime(), roomSpeakerInfo.getTotalLiveTime()));
                 //关闭直播后异步执行计算房间人员观看时长
                 CompletableFuture.runAsync(() -> this.asyncOpsLiveLookTime(roomSpeakerInfo.getRoomUid(), 2, now));
             }
@@ -1902,7 +1902,8 @@ public class ImLiveBroadcastRoomServiceImpl extends ServiceImpl<ImLiveBroadcastR
         imLiveBroadcastRoom.setSpeakerStatus(liveRoom.getSpeakerStatus());
         imLiveBroadcastRoom.setPushStatus(liveRoom.getPushStatus());
         imLiveBroadcastRoom.setBanStatus(liveRoom.getBanStatus());
-        imLiveBroadcastRoom.setLiveTotalTime(liveRoom.getLiveTotalTime());
+        // 不用前端传时间
+        // imLiveBroadcastRoom.setLiveTotalTime(liveRoom.getLiveTotalTime());
 
         return this.updateById(imLiveBroadcastRoom);
     }
@@ -2194,6 +2195,41 @@ public class ImLiveBroadcastRoomServiceImpl extends ServiceImpl<ImLiveBroadcastR
         return Math.max(minutesBetween, 0);
     }
 
+
+    /**
+     * 计算观看时长差-毫秒数
+     *
+     * @param startDT    开始时间
+     * @param nowMinutes 现在观看时长
+     */
+    private int getLookMillisecond(Date startDT, Integer nowMinutes) {
+        return getLookMillisecond(startDT, new Date(), nowMinutes);
+    }
+    /**
+     * 计算观看时长差-毫秒数
+     *
+     * @param startDT    开始时间
+     * @param endDT      结束时间
+     * @param nowMinutes 现在观看时长
+     */
+    private int getLookMillisecond(Date startDT, Date endDT, Integer nowMinutes) {
+        if (Objects.isNull(nowMinutes)) {
+            nowMinutes = 0;
+        }
+        if (Objects.isNull(startDT)) {
+            return nowMinutes;
+        }
+        if (startDT.getTime() > endDT.getTime()) {
+            return nowMinutes;
+        }
+        //课程结束时间-课程开始时间
+        long durationTime = endDT.getTime() - startDT.getTime();
+        //相差多少分钟
+        int minutesBetween = new Long(durationTime).intValue();
+        minutesBetween += nowMinutes;
+        return Math.max(minutesBetween, 0);
+    }
+
     /**
      * 判断Integer是否相等-null值不相等
      *

+ 2 - 1
mec-biz/src/main/resources/config/mybatis/ImLiveBroadcastRoomDataMapper.xml

@@ -35,7 +35,8 @@
                r.live_remark_              AS liveRemark,
                ifnull(a.total_user_num_, 0) AS totalLookNum,
                ifnull(a.like_num_, 0)      as totalLikeNum,
-               ifnull(a.live_time_, 0)     as totalLiveTime,
+               ifnull(a.live_time_, 0)/60/1000     as totalLiveTime,
+               ifnull(r.live_total_time_, 0)     as liveTotalTime,
                r.live_start_time_      as liveStartTime,
                r.live_end_time_      as liveEndTime,
                r.live_state_      as liveState