From e429c291995f3f20184079e480031533ae5c03e6 Mon Sep 17 00:00:00 2001
From: zjk <852185829@qq.com>
Date: 星期五, 18 九月 2026 17:24:28 +0800
Subject: [PATCH] refactor(全项目): 综合优化全端业务与修复各类问题

---
 tcm-training-admin-backend/src/main/java/com/tcm/training/admin/live/service/LiveSessionAppService.java |   35 ++++++++++++++++++++++++++---------
 1 files changed, 26 insertions(+), 9 deletions(-)

diff --git a/tcm-training-admin-backend/src/main/java/com/tcm/training/admin/live/service/LiveSessionAppService.java b/tcm-training-admin-backend/src/main/java/com/tcm/training/admin/live/service/LiveSessionAppService.java
index b6f4aec..1add5bb 100644
--- a/tcm-training-admin-backend/src/main/java/com/tcm/training/admin/live/service/LiveSessionAppService.java
+++ b/tcm-training-admin-backend/src/main/java/com/tcm/training/admin/live/service/LiveSessionAppService.java
@@ -388,26 +388,30 @@
      * 解析同课程时间线下当前有效的直播中场次。
      */
     private LiveSession resolveEffectiveLivingSession(List<LiveSession> sessions, LocalDateTime now) {
-        LiveSession latestStartedSession = null;
+        LiveSession latestLivingSession = null;
         for (LiveSession session : sessions) {
-            if (session == null || session.getStartTime() == null || session.getStartTime().isAfter(now)) {
+            if (session == null || safeInt(session.getLiveStatus()) != 1) {
                 continue;
             }
-            if (latestStartedSession == null || compareTimelineSession(latestStartedSession, session) < 0) {
-                latestStartedSession = session;
+            LocalDateTime timelineTime = resolveLivingTimelineTime(session);
+            if (timelineTime == null || timelineTime.isAfter(now)) {
+                continue;
+            }
+            if (latestLivingSession == null || compareTimelineSession(latestLivingSession, session) < 0) {
+                latestLivingSession = session;
             }
         }
-        if (latestStartedSession == null || safeInt(latestStartedSession.getLiveStatus()) != 1) {
-            return null;
-        }
-        return latestStartedSession;
+        return latestLivingSession;
     }
 
     /**
      * 比较两场已开始场次在课程时间线中的先后,开始时间更晚者优先。
      */
     private int compareTimelineSession(LiveSession left, LiveSession right) {
-        int startTimeCompare = compareSessionTime(left == null ? null : left.getStartTime(), right == null ? null : right.getStartTime());
+        int startTimeCompare = compareSessionTime(
+                left == null ? null : resolveLivingTimelineTime(left),
+                right == null ? null : resolveLivingTimelineTime(right)
+        );
         if (startTimeCompare != 0) {
             return startTimeCompare;
         }
@@ -426,6 +430,19 @@
     }
 
     /**
+     * 直播中场次优先按实际开播时间参与收敛,手动提前开播时不会再被计划开播时间误伤。
+     */
+    private LocalDateTime resolveLivingTimelineTime(LiveSession session) {
+        if (session == null) {
+            return null;
+        }
+        if (session.getActualStartTime() != null) {
+            return session.getActualStartTime();
+        }
+        return session.getStartTime();
+    }
+
+    /**
      * 比较两个时间值,null 视为更早的时间。
      */
     private int compareSessionTime(LocalDateTime left, LocalDateTime right) {

--
Gitblit v1.7.1