|
|
@@ -107,33 +107,39 @@ public class LiveCompletionCouponServiceImpl implements ILiveCompletionCouponSer
|
|
|
try {
|
|
|
CompletionCouponConfig config = resolveConfig(liveId);
|
|
|
if (!config.isEnabled()) {
|
|
|
+ log.info("[完课优惠券] 配置未启用, liveId={}, userId={}", liveId, userId);
|
|
|
return result;
|
|
|
}
|
|
|
|
|
|
result.setCoupon(loadCouponInfo(config.getCouponId()));
|
|
|
|
|
|
if (!isWatchRateEligible(liveId, userId, watchDuration, config)) {
|
|
|
+ log.info("[完课优惠券] 观看比例未达标(已在上层方法记录详情), liveId={}, userId={}", liveId, userId);
|
|
|
return result;
|
|
|
}
|
|
|
result.setEligible(true);
|
|
|
|
|
|
if (hasIssuedToday(liveId, userId, config.getCouponId())) {
|
|
|
+ log.info("[完课优惠券] 今日已发券, 跳过, liveId={}, userId={}", liveId, userId);
|
|
|
return result;
|
|
|
}
|
|
|
|
|
|
List<LiveCompletionQuestionVO> questions = loadQuestions(config.getFinishQuestionIds());
|
|
|
if (questions.isEmpty()) {
|
|
|
- log.debug("完课优惠券未配置直播课题, 跳过弹窗, liveId={}", liveId);
|
|
|
+ log.info("[完课优惠券] 未配置直播课题, 跳过弹窗, liveId={}, userId={}", liveId, userId);
|
|
|
return result;
|
|
|
}
|
|
|
|
|
|
if (!forcePush && hasNotifiedToday(liveId, userId)) {
|
|
|
+ log.info("[完课优惠券] 今日已推送过弹窗, 跳过, liveId={}, userId={}", liveId, userId);
|
|
|
result.setQuestions(questions);
|
|
|
return result;
|
|
|
}
|
|
|
|
|
|
result.setShouldNotify(true);
|
|
|
result.setQuestions(questions);
|
|
|
+ log.info("[完课优惠券] 满足推送条件, liveId={}, userId={}, watchDuration={}, completionRate={}%",
|
|
|
+ liveId, userId, watchDuration, config.getCompletionRate());
|
|
|
} catch (Exception e) {
|
|
|
log.error("预检查完课优惠券弹窗失败, liveId={}, userId={}", liveId, userId, e);
|
|
|
}
|
|
|
@@ -424,16 +430,21 @@ public class LiveCompletionCouponServiceImpl implements ILiveCompletionCouponSer
|
|
|
actualWatchDuration = liveWatchUserService.getTotalWatchDuration(liveId, userId);
|
|
|
}
|
|
|
if (actualWatchDuration == null || actualWatchDuration <= 0) {
|
|
|
+ log.info("[完课优惠券] 用户观看时长为0或null, liveId={}, userId={}, watchDuration={}",
|
|
|
+ liveId, userId, actualWatchDuration);
|
|
|
return false;
|
|
|
}
|
|
|
|
|
|
Live live = liveService.selectLiveByLiveId(liveId);
|
|
|
if (live == null) {
|
|
|
+ log.info("[完课优惠券] 直播间不存在, liveId={}, userId={}", liveId, userId);
|
|
|
return false;
|
|
|
}
|
|
|
|
|
|
Long videoDuration = live.getDuration();
|
|
|
if (videoDuration == null || videoDuration <= 0) {
|
|
|
+ log.info("[完课优惠券] 视频总时长为0或null, liveId={}, userId={}, videoDuration={}",
|
|
|
+ liveId, userId, videoDuration);
|
|
|
return false;
|
|
|
}
|
|
|
|
|
|
@@ -443,7 +454,18 @@ public class LiveCompletionCouponServiceImpl implements ILiveCompletionCouponSer
|
|
|
if (watchRate.compareTo(BigDecimal.valueOf(100)) > 0) {
|
|
|
watchRate = BigDecimal.valueOf(100);
|
|
|
}
|
|
|
- return watchRate.compareTo(BigDecimal.valueOf(config.getCompletionRate())) >= 0;
|
|
|
+
|
|
|
+ boolean eligible = watchRate.compareTo(BigDecimal.valueOf(config.getCompletionRate())) >= 0;
|
|
|
+ if (!eligible) {
|
|
|
+ log.info("[完课优惠券] 观看比例未达到完课率要求, liveId={}, userId={}, " +
|
|
|
+ "watchDuration={}s, videoDuration={}s, watchRate={}%, requiredRate={}%",
|
|
|
+ liveId, userId, actualWatchDuration, videoDuration, watchRate, config.getCompletionRate());
|
|
|
+ } else {
|
|
|
+ log.info("[完课优惠券] 观看比例达标, liveId={}, userId={}, " +
|
|
|
+ "watchDuration={}s, videoDuration={}s, watchRate={}%, requiredRate={}%",
|
|
|
+ liveId, userId, actualWatchDuration, videoDuration, watchRate, config.getCompletionRate());
|
|
|
+ }
|
|
|
+ return eligible;
|
|
|
}
|
|
|
|
|
|
private CompletionCouponConfig resolveConfig(Long liveId) {
|