From 4b1bea687e1e121c94fb7d894daf6171c877430c Mon Sep 17 00:00:00 2001
From: “mitao” <“2763622819@qq.com”>
Date: 星期五, 17 四月 2026 09:36:44 +0800
Subject: [PATCH] feat:养生直播修改

---
 tcm-training-admin-backend/src/main/java/com/tcm/training/admin/app/live/service/AppLiveCourseService.java |   32 +++++++++++++++-----------------
 1 files changed, 15 insertions(+), 17 deletions(-)

diff --git a/tcm-training-admin-backend/src/main/java/com/tcm/training/admin/app/live/service/AppLiveCourseService.java b/tcm-training-admin-backend/src/main/java/com/tcm/training/admin/app/live/service/AppLiveCourseService.java
index ba22245..9e219a0 100644
--- a/tcm-training-admin-backend/src/main/java/com/tcm/training/admin/app/live/service/AppLiveCourseService.java
+++ b/tcm-training-admin-backend/src/main/java/com/tcm/training/admin/app/live/service/AppLiveCourseService.java
@@ -228,7 +228,8 @@
         }
 
         boolean pointsAwarded = false;
-        if (allCorrect && watchSummary.isWatchCompleted()) {
+        // 当前业务改为只要三题全部答对就立即发放积分,不再依赖完整观看直播。
+        if (allCorrect) {
             pointsAwarded = awardQuizPoints(course, session, userId, insertedRecords, questions);
         }
 
@@ -238,7 +239,7 @@
         resultVO.setWatchCompleted(Boolean.valueOf(watchSummary.isWatchCompleted()));
         resultVO.setPointsAwarded(Boolean.valueOf(pointsAwarded));
         resultVO.setPointsReward(Integer.valueOf(defaultNumber(course.getQuizPoints())));
-        resultVO.setMessage(resolveQuizSubmitMessage(allCorrect, watchSummary.isWatchCompleted(), pointsAwarded));
+        resultVO.setMessage(resolveQuizSubmitMessage(allCorrect, pointsAwarded));
         return resultVO;
     }
 
@@ -250,7 +251,7 @@
                                                               Long sessionId,
                                                               AppLiveWatchRecordUploadRequest request) {
         Long userId = appAuthSessionService.requireLoginUserId();
-        LiveCourse course = requireCourse(courseId);
+        requireCourse(courseId);
         LiveSession session = requireCourseSession(courseId, sessionId);
         validateWatchRecordRequest(request);
 
@@ -268,20 +269,15 @@
         record.setIsEffective(defaultNumber(request.getDurationSeconds()) > 0 ? 1 : 0);
         liveWatchRecordMapper.insert(record);
 
-        List<LiveSessionQuestion> questions = listSessionQuestions(sessionId);
         List<LiveSessionQuizRecord> quizRecords = listUserQuizRecords(sessionId, userId);
-        QuizUserState quizUserState = resolveQuizUserState(questions, quizRecords, watchCompleted);
-        boolean pointsAwarded = quizUserState.isQuizPointsAwarded();
-        if (quizUserState.isQuizAllCorrect() && watchCompleted && !quizUserState.isQuizPointsAwarded()) {
-            pointsAwarded = awardQuizPoints(course, session, userId, quizRecords, questions);
-        }
+        QuizUserState quizUserState = resolveQuizUserState(listSessionQuestions(sessionId), quizRecords, watchCompleted);
 
         AppLiveWatchRecordUploadResultVO resultVO = new AppLiveWatchRecordUploadResultVO();
         resultVO.setCumulativeWatchSeconds(Integer.valueOf(cumulativeWatchSeconds));
         resultVO.setWatchCompleted(Boolean.valueOf(watchCompleted));
         resultVO.setQuizSubmitted(Boolean.valueOf(quizUserState.isQuizSubmitted()));
         resultVO.setQuizAllCorrect(Boolean.valueOf(quizUserState.isQuizAllCorrect()));
-        resultVO.setQuizPointsAwarded(Boolean.valueOf(pointsAwarded));
+        resultVO.setQuizPointsAwarded(Boolean.valueOf(quizUserState.isQuizPointsAwarded()));
         return resultVO;
     }
 
@@ -726,15 +722,12 @@
     /**
      * 构造答题提交后的提示文案。
      */
-    private String resolveQuizSubmitMessage(boolean allCorrect, boolean watchCompleted, boolean pointsAwarded) {
+    private String resolveQuizSubmitMessage(boolean allCorrect, boolean pointsAwarded) {
         if (!allCorrect) {
             return "回答错误,本次不获得积分";
         }
         if (pointsAwarded) {
             return "答题成功,积分已到账";
-        }
-        if (!watchCompleted) {
-            return "已全部答对,完整观看直播后自动发放积分";
         }
         return "答题成功";
     }
@@ -850,9 +843,14 @@
      * 判断当前场次是否已达到答题开放时间。
      */
     private boolean isQuizEnabled(LiveSession session, LocalDateTime quizAvailableAt, LocalDateTime now) {
-        return session != null
-                && quizAvailableAt != null
-                && !quizAvailableAt.isAfter(now);
+        if (session == null || quizAvailableAt == null || quizAvailableAt.isAfter(now)) {
+            return false;
+        }
+        if (appLiveCourseDisplaySupport.defaultNumber(session.getLiveStatus()) == AppLiveCourseDisplaySupport.SESSION_STATUS_LIVING) {
+            return true;
+        }
+        // 直播结束后的五分钟冷却窗口内继续允许用户进入直播间并完成答题。
+        return appLiveCourseDisplaySupport.isInEndedCooldown(session, now, DETAIL_WATCH_KEEP_MINUTES);
     }
 
     /**

--
Gitblit v1.7.1