“mitao”
2026-04-17 4b1bea687e1e121c94fb7d894daf6171c877430c
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);
    }
    /**