|
|
@@ -210,23 +210,28 @@ public class LiveCompletionPointsController extends AppBaseController {
|
|
|
? record.getWatchDuration() : 0L;
|
|
|
|
|
|
vo.setVideoDuration(videoDuration);
|
|
|
- // 按照观看时长 / 视频总时长计算完课比例
|
|
|
+ vo.setWatchDuration(watchDuration);
|
|
|
+
|
|
|
+ // 如果配置了看课时长,使用看课时长作为目标;否则使用视频总时长
|
|
|
+ Long targetDuration = requiredWatchDuration != null ? requiredWatchDuration : videoDuration;
|
|
|
+ vo.setRemainingTime(Math.max(0, targetDuration - watchDuration));
|
|
|
+
|
|
|
+ // 使用RemainingTime和videoDuration计算完课比例
|
|
|
+ // 先计算基于videoDuration的剩余时长
|
|
|
if (videoDuration != null && videoDuration > 0) {
|
|
|
- BigDecimal completionRate = BigDecimal.valueOf(watchDuration)
|
|
|
+ Long remainingTimeForVideo = Math.max(0, videoDuration - watchDuration); // 基于视频总时长的剩余时长
|
|
|
+ Long watchedTime = videoDuration - remainingTimeForVideo; // 已观看时长 = 视频总时长 - 剩余时长
|
|
|
+ BigDecimal completionRate = BigDecimal.valueOf(watchedTime)
|
|
|
.multiply(BigDecimal.valueOf(100))
|
|
|
.divide(BigDecimal.valueOf(videoDuration), 2, java.math.RoundingMode.HALF_UP);
|
|
|
if (completionRate.compareTo(BigDecimal.valueOf(100)) > 0) {
|
|
|
completionRate = BigDecimal.valueOf(100);
|
|
|
}
|
|
|
+ if (completionRate.compareTo(BigDecimal.ZERO) < 0) {
|
|
|
+ completionRate = BigDecimal.ZERO;
|
|
|
+ }
|
|
|
vo.setCompletionRate(completionRate);
|
|
|
- } else {
|
|
|
- vo.setCompletionRate(BigDecimal.ZERO);
|
|
|
}
|
|
|
- vo.setWatchDuration(watchDuration);
|
|
|
-
|
|
|
- // 如果配置了看课时长,使用看课时长作为目标;否则使用视频总时长
|
|
|
- Long targetDuration = requiredWatchDuration != null ? requiredWatchDuration : videoDuration;
|
|
|
- vo.setRemainingTime(Math.max(0, targetDuration - watchDuration));
|
|
|
vo.setHasReceived(record != null && record.getReceiveStatus() != null && record.getReceiveStatus() == 1);
|
|
|
|
|
|
return R.ok().put("data", vo);
|