| | |
| | | } |
| | | |
| | | /** |
| | | * 定时任务将已到结束时间的直播中场次切换为已结束。 |
| | | */ |
| | | @Transactional |
| | | public LiveSessionStatusVO autoEnd(Long sessionId, LocalDateTime actualEndTime) { |
| | | LiveSession session = liveSessionMapper.selectById(sessionId); |
| | | LocalDateTime resolvedEndTime = actualEndTime == null ? LocalDateTime.now() : actualEndTime; |
| | | return markSessionEnded(session, resolvedEndTime, false); |
| | | } |
| | | |
| | | /** |
| | | * 手动结束正在直播中的场次。 |
| | | */ |
| | | @Transactional |
| | | public LiveSessionStatusVO end(Long courseId, Long sessionId) { |
| | | LiveSession s = requireSession(courseId, sessionId); |
| | | if (s.getLiveStatus() == null || s.getLiveStatus() != 1) { |
| | | throw new IllegalArgumentException("场次状态不允许结束"); |
| | | } |
| | | s.setLiveStatus(2); |
| | | s.setActualEndTime(LocalDateTime.now()); |
| | | liveSessionMapper.updateById(s); |
| | | reconcileCourseLivingSessions(s.getLiveCourseId(), s.getActualEndTime()); |
| | | return new LiveSessionStatusVO(s.getId(), s.getLiveStatus(), null, s.getActualEndTime()); |
| | | return markSessionEnded(s, LocalDateTime.now(), true); |
| | | } |
| | | |
| | | /** |
| | |
| | | } |
| | | |
| | | /** |
| | | * 执行直播中场次到已结束的公共状态迁移。 |
| | | */ |
| | | private LiveSessionStatusVO markSessionEnded(LiveSession session, LocalDateTime actualEndTime, boolean failWhenInvalid) { |
| | | if (session == null) { |
| | | if (failWhenInvalid) { |
| | | throw new IllegalArgumentException("场次不存在"); |
| | | } |
| | | return null; |
| | | } |
| | | if (session.getLiveStatus() == null || session.getLiveStatus().intValue() != 1) { |
| | | if (failWhenInvalid) { |
| | | throw new IllegalArgumentException("场次状态不允许结束"); |
| | | } |
| | | return null; |
| | | } |
| | | LocalDateTime resolvedEndTime = actualEndTime == null ? LocalDateTime.now() : actualEndTime; |
| | | session.setLiveStatus(2); |
| | | session.setActualEndTime(resolvedEndTime); |
| | | liveSessionMapper.updateById(session); |
| | | reconcileCourseLivingSessions(session.getLiveCourseId(), resolvedEndTime); |
| | | return new LiveSessionStatusVO(session.getId(), session.getLiveStatus(), session.getActualStartTime(), session.getActualEndTime()); |
| | | } |
| | | |
| | | /** |
| | | * 校验课程存在性。 |
| | | */ |
| | | private LiveCourse requireCourse(Long courseId) { |