Browse Source

fix连堂课计时

shangke 2 năm trước cách đây
mục cha
commit
96c32f1d83

+ 180 - 260
.idea/httpRequests/http-requests-log.http

@@ -1,3 +1,183 @@
+GET http://127.0.0.1:9002/teacherCourseSchedule/liveCourseScheduleTime?courseScheduleId=2006
+Authorization: bearer d20c3bfa-22d3-4da9-a3f6-90216b2710fa
+Proxy-Connection: Keep-Alive
+User-Agent: Apache-HttpClient/4.5.14 (Java/17.0.6)
+Accept-Encoding: br,deflate,gzip,x-gzip
+
+<> 2023-06-08T210116.200.json
+
+###
+
+GET http://127.0.0.1:9002/teacherCourseSchedule/liveCourseScheduleTime?courseScheduleId=2006
+Authorization: bearer d20c3bfa-22d3-4da9-a3f6-90216b2710fa
+Proxy-Connection: Keep-Alive
+User-Agent: Apache-HttpClient/4.5.14 (Java/17.0.6)
+Accept-Encoding: br,deflate,gzip,x-gzip
+
+<> 2023-06-08T210051.200.json
+
+###
+
+GET http://127.0.0.1:9002/teacherCourseSchedule/liveCourseScheduleTime?courseScheduleId=2006
+Authorization: bearer d20c3bfa-22d3-4da9-a3f6-90216b2710fa
+Proxy-Connection: Keep-Alive
+User-Agent: Apache-HttpClient/4.5.14 (Java/17.0.6)
+Accept-Encoding: br,deflate,gzip,x-gzip
+
+<> 2023-06-08T205535.200.json
+
+###
+
+GET http://127.0.0.1:9002/teacherCourseSchedule/liveCourseScheduleTime?courseScheduleId=2006
+Authorization: bearer d20c3bfa-22d3-4da9-a3f6-90216b2710fa
+Proxy-Connection: Keep-Alive
+User-Agent: Apache-HttpClient/4.5.14 (Java/17.0.6)
+Accept-Encoding: br,deflate,gzip,x-gzip
+
+<> 2023-06-08T205404.200.json
+
+###
+
+GET http://127.0.0.1:9002/teacherCourseSchedule/liveCourseScheduleTime?courseScheduleId=2006
+Authorization: bearer d20c3bfa-22d3-4da9-a3f6-90216b2710fa
+Proxy-Connection: Keep-Alive
+User-Agent: Apache-HttpClient/4.5.14 (Java/17.0.6)
+Accept-Encoding: br,deflate,gzip,x-gzip
+
+<> 2023-06-08T205238.200.json
+
+###
+
+GET http://127.0.0.1:9002/teacherCourseSchedule/liveCourseScheduleTime?courseScheduleId=2006
+Authorization: bearer d20c3bfa-22d3-4da9-a3f6-90216b2710fa
+Proxy-Connection: Keep-Alive
+User-Agent: Apache-HttpClient/4.5.14 (Java/17.0.6)
+Accept-Encoding: br,deflate,gzip,x-gzip
+
+<> 2023-06-08T205047.200.json
+
+###
+
+GET http://127.0.0.1:9002/teacherCourseSchedule/liveCourseScheduleTime?courseScheduleId=2006
+Authorization: bearer d20c3bfa-22d3-4da9-a3f6-90216b2710fa
+Proxy-Connection: Keep-Alive
+User-Agent: Apache-HttpClient/4.5.14 (Java/17.0.6)
+Accept-Encoding: br,deflate,gzip,x-gzip
+
+<> 2023-06-08T205000.200.json
+
+###
+
+GET http://127.0.0.1:9002/teacherCourseSchedule/liveCourseScheduleTime?courseScheduleId=2006
+Authorization: bearer d20c3bfa-22d3-4da9-a3f6-90216b2710fa
+Proxy-Connection: Keep-Alive
+User-Agent: Apache-HttpClient/4.5.14 (Java/17.0.6)
+Accept-Encoding: br,deflate,gzip,x-gzip
+
+<> 2023-06-08T204724.200.json
+
+###
+
+GET http://127.0.0.1:9002/teacherCourseSchedule/liveCourseScheduleTime?courseScheduleId=2006
+Authorization: bearer d20c3bfa-22d3-4da9-a3f6-90216b2710fa
+Proxy-Connection: Keep-Alive
+User-Agent: Apache-HttpClient/4.5.14 (Java/17.0.6)
+Accept-Encoding: br,deflate,gzip,x-gzip
+
+<> 2023-06-08T204410.200.json
+
+###
+
+GET http://127.0.0.1:9002/teacherCourseSchedule/liveCourseScheduleTime?courseScheduleId=2006
+Authorization: bearer d20c3bfa-22d3-4da9-a3f6-90216b2710fa
+Proxy-Connection: Keep-Alive
+User-Agent: Apache-HttpClient/4.5.14 (Java/17.0.6)
+Accept-Encoding: br,deflate,gzip,x-gzip
+
+<> 2023-06-08T203725.200.json
+
+###
+
+GET http://127.0.0.1:9002/teacherCourseSchedule/liveCourseScheduleTime?courseScheduleId=2006
+Authorization: bearer d20c3bfa-22d3-4da9-a3f6-90216b2710fa
+Proxy-Connection: Keep-Alive
+User-Agent: Apache-HttpClient/4.5.14 (Java/17.0.6)
+Accept-Encoding: br,deflate,gzip,x-gzip
+
+<> 2023-06-08T203018.200.json
+
+###
+
+GET http://127.0.0.1:9002/teacherCourseSchedule/liveCourseScheduleTime?courseScheduleId=2006
+Authorization: bearer f5e187da-f04a-4fae-b1ca-e30d3f920620
+Proxy-Connection: Keep-Alive
+User-Agent: Apache-HttpClient/4.5.14 (Java/17.0.6)
+Accept-Encoding: br,deflate,gzip,x-gzip
+
+<> 2023-06-08T201324.200.json
+
+###
+
+GET http://127.0.0.1:9002/teacherCourseSchedule/liveCourseScheduleTime?courseScheduleId=2006
+Authorization: bearer f5e187da-f04a-4fae-b1ca-e30d3f920620
+Proxy-Connection: Keep-Alive
+User-Agent: Apache-HttpClient/4.5.14 (Java/17.0.6)
+Accept-Encoding: br,deflate,gzip,x-gzip
+
+<> 2023-06-08T193239.200.json
+
+###
+
+GET http://127.0.0.1:9002/teacherCourseSchedule/liveCourseScheduleTime?courseScheduleId=2006
+Authorization: bearer f5e187da-f04a-4fae-b1ca-e30d3f920620
+Proxy-Connection: Keep-Alive
+User-Agent: Apache-HttpClient/4.5.14 (Java/17.0.6)
+Accept-Encoding: br,deflate,gzip,x-gzip
+
+<> 2023-06-08T190527.200.json
+
+###
+
+GET http://127.0.0.1:9002/teacherCourseSchedule/liveCourseScheduleTime?courseScheduleId=2006
+Authorization: bearer f5e187da-f04a-4fae-b1ca-e30d3f920620
+Proxy-Connection: Keep-Alive
+User-Agent: Apache-HttpClient/4.5.14 (Java/17.0.6)
+Accept-Encoding: br,deflate,gzip,x-gzip
+
+<> 2023-06-08T185918.200.json
+
+###
+
+GET http://127.0.0.1:9002/teacherCourseSchedule/liveCourseScheduleTime?courseScheduleId=2006
+Authorization: bearer f5e187da-f04a-4fae-b1ca-e30d3f920620
+Proxy-Connection: Keep-Alive
+User-Agent: Apache-HttpClient/4.5.14 (Java/17.0.6)
+Accept-Encoding: br,deflate,gzip,x-gzip
+
+<> 2023-06-08T185609.200.json
+
+###
+
+GET http://127.0.0.1:9002/teacherCourseSchedule/liveCourseScheduleTime?courseScheduleId=2006
+Authorization: bearer f5e187da-f04a-4fae-b1ca-e30d3f920620
+Proxy-Connection: Keep-Alive
+User-Agent: Apache-HttpClient/4.5.14 (Java/17.0.6)
+Accept-Encoding: br,deflate,gzip,x-gzip
+
+<> 2023-06-08T185500.200.json
+
+###
+
+GET http://127.0.0.1:9002/teacherCourseSchedule/liveCourseScheduleTime?courseScheduleId=2006
+Authorization: bearer f5e187da-f04a-4fae-b1ca-e30d3f920620
+Proxy-Connection: Keep-Alive
+User-Agent: Apache-HttpClient/4.5.14 (Java/17.0.6)
+Accept-Encoding: br,deflate,gzip,x-gzip
+
+<> 2023-06-08T185344.200.json
+
+###
+
 GET http://127.0.0.1:9002/teacherCourseSchedule/findCourseAttendanceDetailHeadInfo?courseScheduleId=2002
 authorization: bearer 97fd8e85-bb3c-4967-8a07-47c44957f94a
 Content-Type: application/json
@@ -548,263 +728,3 @@ Accept-Encoding: br,deflate,gzip,x-gzip
 
 ###
 
-GET http://127.0.0.1:9002/teacherCourseSchedule/liveCourseScheduleTime?courseScheduleId=2030
-Authorization: bearer 2cd308e9-0b8b-4b08-b3cd-f34dc50a8dfd
-Proxy-Connection: Keep-Alive
-User-Agent: Apache-HttpClient/4.5.14 (Java/17.0.6)
-Accept-Encoding: br,deflate,gzip,x-gzip
-
-<> 2023-06-07T154917.200.json
-
-###
-
-GET http://127.0.0.1:9002/teacherCourseSchedule/liveCourseScheduleTime?courseScheduleId=2030
-Authorization: bearer 2cd308e9-0b8b-4b08-b3cd-f34dc50a8dfd
-Proxy-Connection: Keep-Alive
-User-Agent: Apache-HttpClient/4.5.14 (Java/17.0.6)
-Accept-Encoding: br,deflate,gzip,x-gzip
-
-<> 2023-06-07T154631.200.json
-
-###
-
-GET http://127.0.0.1:9002/teacherCourseSchedule/liveCourseScheduleTime?courseScheduleId=2030
-Authorization: bearer 2cd308e9-0b8b-4b08-b3cd-f34dc50a8dfd
-Proxy-Connection: Keep-Alive
-User-Agent: Apache-HttpClient/4.5.14 (Java/17.0.6)
-Accept-Encoding: br,deflate,gzip,x-gzip
-
-<> 2023-06-07T154529.200.json
-
-###
-
-GET http://127.0.0.1:9002/teacherCourseSchedule/liveCourseScheduleTime?courseScheduleId=1678
-Authorization: bearer 2cd308e9-0b8b-4b08-b3cd-f34dc50a8dfd
-Proxy-Connection: Keep-Alive
-User-Agent: Apache-HttpClient/4.5.14 (Java/17.0.6)
-Accept-Encoding: br,deflate,gzip,x-gzip
-
-<> 2023-06-07T152014.200.json
-
-###
-
-GET http://127.0.0.1:8005/teacher/findTeacherByTenantId
-Authorization: bearer 7e4145d6-111d-429b-893a-4546df0f58ed
-tenantId: 1
-Connection: Keep-Alive
-User-Agent: Apache-HttpClient/4.5.14 (Java/17.0.6)
-Accept-Encoding: br,deflate,gzip,x-gzip
-
-<> 2023-06-06T170540.200.json
-
-###
-
-GET http://127.0.0.1:9002/classGroup/findTeacherClassStudents?classGroupId=191
-Authorization: bearer 7957b8d7-63d0-43e1-9c06-8a36b2cc85a4
-Connection: Keep-Alive
-User-Agent: Apache-HttpClient/4.5.14 (Java/17.0.6)
-Accept-Encoding: br,deflate,gzip,x-gzip
-
-<> 2023-06-05T193543.200.json
-
-###
-
-GET http://127.0.0.1:9002/classGroup/findTeacherClassStudents?classGroupId=197
-Authorization: bearer 7957b8d7-63d0-43e1-9c06-8a36b2cc85a4
-Connection: Keep-Alive
-User-Agent: Apache-HttpClient/4.5.14 (Java/17.0.6)
-Accept-Encoding: br,deflate,gzip,x-gzip
-
-<> 2023-06-05T193534.200.json
-
-###
-
-GET http://127.0.0.1:9002/classGroup/findTeacherClassStudents?courseScheduleId=1819
-Authorization: bearer 7957b8d7-63d0-43e1-9c06-8a36b2cc85a4
-Connection: Keep-Alive
-User-Agent: Apache-HttpClient/4.5.14 (Java/17.0.6)
-Accept-Encoding: br,deflate,gzip,x-gzip
-
-<> 2023-06-05T193400.200.json
-
-###
-
-GET http://127.0.0.1:9002/classGroup/findTeacherClassStudents?courseScheduleId=1270
-Authorization: bearer 7957b8d7-63d0-43e1-9c06-8a36b2cc85a4
-Connection: Keep-Alive
-User-Agent: Apache-HttpClient/4.5.14 (Java/17.0.6)
-Accept-Encoding: br,deflate,gzip,x-gzip
-
-<> 2023-06-05T193335.200.json
-
-###
-
-GET http://127.0.0.1:9002/classGroup/findTeacherClassStudents
-Authorization: bearer 7957b8d7-63d0-43e1-9c06-8a36b2cc85a4
-Connection: Keep-Alive
-User-Agent: Apache-HttpClient/4.5.14 (Java/17.0.6)
-Accept-Encoding: br,deflate,gzip,x-gzip
-
-<> 2023-06-05T193308.200.json
-
-###
-
-POST http://127.0.0.1:8005/studentManage/userPage
-Authorization: bearer b897da27-5a37-47df-8e76-54d80a61a55d
-Content-Type: application/json
-coopId: 25
-Content-Length: 137
-Connection: Keep-Alive
-User-Agent: Apache-HttpClient/4.5.14 (Java/17.0.6)
-Accept-Encoding: br,deflate,gzip,x-gzip
-
-{
-//  "keyword": "一",
-//    "musicGroupId": 23050516201200001,
-  //  "subjectId": 2,
-  //  "vipFlag": true,
-//  "studentId": 2248340
-
-}
-
-<> 2023-06-02T201036.200.json
-
-###
-
-POST http://127.0.0.1:8005/studentManage/userDetail
-Authorization: bearer 81d0c352-fcc8-4812-87f5-0f7a68d10451
-Content-Type: application/json
-coopId: 25
-Content-Length: 63
-Connection: Keep-Alive
-User-Agent: Apache-HttpClient/4.5.14 (Java/17.0.6)
-Accept-Encoding: br,deflate,gzip,x-gzip
-
-{
-  "studentId": 2248340,
-  "musicGroupId": 23042419330600001
-}
-
-<> 2023-06-02T201028.200.json
-
-###
-
-POST http://127.0.0.1:8005/studentManage/userPage
-Authorization: bearer b897da27-5a37-47df-8e76-54d80a61a55d
-Content-Type: application/json
-coopId: 25
-Content-Length: 137
-Connection: Keep-Alive
-User-Agent: Apache-HttpClient/4.5.14 (Java/17.0.6)
-Accept-Encoding: br,deflate,gzip,x-gzip
-
-{
-//  "keyword": "一",
-//    "musicGroupId": 23050516201200001,
-  //  "subjectId": 2,
-  //  "vipFlag": true,
-//  "studentId": 2248340
-
-}
-
-<> 2023-06-02T195056.200.json
-
-###
-
-POST http://127.0.0.1:8005/studentManage/userPage
-Authorization: bearer b897da27-5a37-47df-8e76-54d80a61a55d
-Content-Type: application/json
-coopId: 14
-Content-Length: 137
-Connection: Keep-Alive
-User-Agent: Apache-HttpClient/4.5.14 (Java/17.0.6)
-Accept-Encoding: br,deflate,gzip,x-gzip
-
-{
-//  "keyword": "一",
-//    "musicGroupId": 23050516201200001,
-  //  "subjectId": 2,
-  //  "vipFlag": true,
-//  "studentId": 2248340
-
-}
-
-<> 2023-06-02T194927.200.json
-
-###
-
-POST http://127.0.0.1:8005/studentManage/userPage
-Authorization: bearer b897da27-5a37-47df-8e76-54d80a61a55d
-Content-Type: application/json
-coopId: 14
-Content-Length: 137
-Connection: Keep-Alive
-User-Agent: Apache-HttpClient/4.5.14 (Java/17.0.6)
-Accept-Encoding: br,deflate,gzip,x-gzip
-
-{
-//  "keyword": "一",
-//    "musicGroupId": 23050516201200001,
-  //  "subjectId": 2,
-  //  "vipFlag": true,
-//  "studentId": 2248340
-
-}
-
-<> 2023-06-02T194743.200.json
-
-###
-
-POST http://127.0.0.1:8005/studentManage/userPage
-Authorization: bearer b897da27-5a37-47df-8e76-54d80a61a55d
-Content-Type: application/json
-coopId: 14
-Content-Length: 137
-Connection: Keep-Alive
-User-Agent: Apache-HttpClient/4.5.14 (Java/17.0.6)
-Accept-Encoding: br,deflate,gzip,x-gzip
-
-{
-//  "keyword": "一",
-//    "musicGroupId": 23050516201200001,
-  //  "subjectId": 2,
-  //  "vipFlag": true,
-//  "studentId": 2248340
-
-}
-
-<> 2023-06-02T194634.200.json
-
-###
-
-POST http://127.0.0.1:8005/studentManage/userPage
-Authorization: bearer 3f804d4e-b7f0-41ad-8dbf-119a0c54becc
-Content-Type: application/json
-coopId: 14
-Content-Length: 137
-Connection: Keep-Alive
-User-Agent: Apache-HttpClient/4.5.14 (Java/17.0.6)
-Accept-Encoding: br,deflate,gzip,x-gzip
-
-{
-//  "keyword": "一",
-//    "musicGroupId": 23050516201200001,
-  //  "subjectId": 2,
-  //  "vipFlag": true,
-//  "studentId": 2248340
-
-}
-
-<> 2023-06-02T194506.200.json
-
-###
-
-GET http://127.0.0.1:8005/schoolActivity/detail/16
-Connection: Keep-Alive
-User-Agent: Apache-HttpClient/4.5.14 (Java/17.0.6)
-Accept-Encoding: br,deflate,gzip,x-gzip
-
-<> 2023-06-02T182950.200.json
-
-###
-

+ 16 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/dao/CourseScheduleDao.java

@@ -2056,6 +2056,22 @@ public interface CourseScheduleDao extends BaseDAO<Long, CourseSchedule> {
     void updateLiveRemind(@Param("courseScheduleId") Long courseScheduleId, @Param("liveRemind") int liveRemind);
 
     /**
+     * 更新课程关联直播间编号
+     *
+     * @param courseScheduleIds 课程ID
+     * @param liveRoomId 直播间编号
+     */
+    void batchUpdateLiveRoomId(@Param("courseScheduleIds") List<Long> courseScheduleIds, @Param("liveRoomId") String liveRoomId);
+
+    /**
+     * 更新课程关联直播间编号
+     *
+     * @param courseScheduleIds 课程ID
+     * @param continuousCourse 连堂课状态
+     */
+    void batchUpdateContinuousCourse(@Param("courseScheduleIds") List<Long> courseScheduleIds, @Param("continuousCourse") Boolean continuousCourse);
+
+    /**
      * 获取下一次连堂课
      *
      * @param classGroupId 班级编号

+ 150 - 25
mec-biz/src/main/java/com/ym/mec/biz/service/impl/CourseScheduleServiceImpl.java

@@ -66,6 +66,7 @@ import java.time.*;
 import java.time.format.DateTimeFormatter;
 import java.time.temporal.TemporalAdjusters;
 import java.util.*;
+import java.util.concurrent.CompletableFuture;
 import java.util.stream.Collectors;
 
 import static com.ym.mec.biz.dal.entity.CourseSchedule.CourseScheduleType.MUSIC_NETWORK;
@@ -5971,12 +5972,10 @@ public class CourseScheduleServiceImpl extends BaseServiceImpl<Long, CourseSched
 		if (courseSchedule.getTeachMode() == TeachModeEnum.OFFLINE) {
 			throw new BizException("请前往线下教室");
 		}
-
-		List<CourseScheduleWrapper.CourseScheduleTime> courseScheduleTimes = Lists.newArrayList();
-		courseScheduleTimes.add(CourseScheduleWrapper.CourseScheduleTime.builder()
-				.startTime(getDateTime(courseSchedule.getClassDate(), courseSchedule.getStartClassTime()).getMillis())
-				.endTime(getDateTime(courseSchedule.getClassDate(), courseSchedule.getEndClassTime()).getMillis())
-				.build());
+		// 课程开始时间
+		courseSchedule.setStartClassTime(getDateTime(courseSchedule.getClassDate(), courseSchedule.getStartClassTime()).toDate());
+		// 课程结束时间
+		courseSchedule.setEndClassTime(getDateTime(courseSchedule.getClassDate(), courseSchedule.getEndClassTime()).toDate());
 
 		// 是否是连堂课
 		String continueCourseTime = sysTenantConfigService.getTenantConfigValue(SysConfigService.ONLINE_CONTINUE_COURSE_TIME, courseSchedule.getTenantId());
@@ -5985,34 +5984,127 @@ public class CourseScheduleServiceImpl extends BaseServiceImpl<Long, CourseSched
 		}
 
 		// 连堂课标准:同一个老师,同一天,同一课程组,连续上课
+		List<CourseSchedule> continuousCourse = courseScheduleDao.getTeacherContinuousCourse(courseSchedule.getClassGroupId(),
+				courseSchedule.getClassDate(), courseSchedule.getActualTeacherId());
+		for (CourseSchedule item : continuousCourse) {
+			// 设置开始时间
+			item.setStartClassTime(getDateTime(item.getClassDate(), item.getStartClassTime()).toDate());
+			// 设置结束时间
+			item.setEndClassTime(getDateTime(item.getClassDate(), item.getEndClassTime()).toDate());
+		}
+
+		// 课程按开始时间排序
+		continuousCourse = continuousCourse.stream()
+				.sorted(Comparator.comparing(CourseSchedule::getStartClassTime))
+				.collect(Collectors.toList());
+
+		// 以当前课程为分界线,分为两个集合
+		List<CourseSchedule> beforeCourse = Lists.newArrayList();
+		List<CourseSchedule> afterCourse = Lists.newArrayList();
+
+		CourseSchedule schedule;
+		for (CourseSchedule item : continuousCourse) {
+			if (item.getId().longValue() == courseSchedule.getId()) {
+				continue;
+			}
 
+			schedule = JSON.parseObject(JSON.toJSONString(item), CourseSchedule.class);
+			if (item.getEndClassTime().getTime() <= courseSchedule.getStartClassTime().getTime()) {
+				beforeCourse.add(schedule);
+			}
 
+			if (courseSchedule.getEndClassTime().getTime() <= item.getStartClassTime().getTime()) {
+				afterCourse.add(schedule);
+			}
+		}
 
-		CourseSchedule schedule = courseSchedule;
-		// 如果当前课程是连堂课,那么获取第一节课的课程编号
-		while (true) {
-			String classDate = DateUtil.format(schedule.getClassDate(), DateUtil.DEFAULT_PATTERN);
-			String startClassTime = DateUtil.format(schedule.getStartClassTime(), DateUtil.EXPANDED_TIME_FORMAT);
-			schedule = courseScheduleDao.getFirstCourse(schedule.getClassGroupId(), classDate + " " + startClassTime, schedule.getActualTeacherId(), continueCourseTime);
-			if (schedule != null) {
-				courseScheduleTimes.add(CourseScheduleWrapper.CourseScheduleTime.builder()
-						.startTime(getDateTime(schedule.getClassDate(), schedule.getStartClassTime()).getMillis())
-						.endTime(getDateTime(schedule.getClassDate(), schedule.getEndClassTime()).getMillis())
-						.build());
-			} else {
-				break;
+		// 当前课程之前连堂课
+		beforeCourse.add(JSON.parseObject(JSON.toJSONString(courseSchedule), CourseSchedule.class));
+		// 当前课程之后连堂课
+		afterCourse.add(0, JSON.parseObject(JSON.toJSONString(courseSchedule), CourseSchedule.class));
+
+		// 课程前连堂状态
+		updateContinuousCourseStatus(continueCourseTime, beforeCourse);
+
+		List<CourseSchedule> newCourseSchedules = Lists.newArrayList();
+		// 课程连堂状态
+		if (beforeCourse.get(beforeCourse.size() - 1).getContinuousCourse()) {
+			List<CourseSchedule> collect = beforeCourse.stream()
+					.filter(CourseSchedule::getContinuousCourse)
+					.collect(Collectors.toList());
+			if (CollectionUtils.isNotEmpty(collect)) {
+				newCourseSchedules.addAll(collect);
 			}
 		}
 
-		if (courseScheduleTimes.size() <= 1) {
+		// 课程后连堂状态
+		updateContinuousCourseStatus(continueCourseTime, afterCourse);
+		if (afterCourse.get(0).getContinuousCourse()) {
+			List<CourseSchedule> collect = afterCourse.stream()
+					.filter(CourseSchedule::getContinuousCourse)
+					.collect(Collectors.toList());
+			if (CollectionUtils.isNotEmpty(collect)) {
 
-			// 定时任务更新课程状态为进行中,判断当前课程状态是否匹配
-			if (CourseStatusEnum.NOT_START == courseSchedule.getStatus()) {
-				throw new BizException("直播课暂未开启,请稍后重试");
+				if (CollectionUtils.isEmpty(newCourseSchedules)) {
+					newCourseSchedules.addAll(collect);
+				} else {
+					newCourseSchedules.addAll(collect.subList(1, collect.size()));
+				}
 			}
-			if (CourseStatusEnum.OVER == courseSchedule.getStatus()) {
-				throw new BizException("直播课已结束");
+		}
+
+		List<CourseScheduleWrapper.CourseScheduleTime> courseScheduleTimes = Lists.newArrayList();
+		if (CollectionUtils.isNotEmpty(newCourseSchedules)) {
+
+			// 连党课程信息
+			for (CourseSchedule item : newCourseSchedules) {
+				courseScheduleTimes.add(CourseScheduleWrapper.CourseScheduleTime.builder()
+						.startTime(item.getStartClassTime().getTime())
+						.endTime(item.getEndClassTime().getTime())
+						.build());
 			}
+
+			// 获取连堂课第一节信息
+			courseSchedule = newCourseSchedules.get(0);
+
+			CourseSchedule finalCourseSchedule = courseSchedule;
+			CompletableFuture.runAsync(() -> {
+
+				List<Long> collect = newCourseSchedules.stream()
+						.map(CourseSchedule::getId)
+						.distinct().collect(Collectors.toList());
+				try {
+
+					// 关联直播间编号
+					courseScheduleDao.batchUpdateLiveRoomId(collect, finalCourseSchedule.getLiveRoomId());
+
+					collect = newCourseSchedules.subList(0, newCourseSchedules.size() - 1).stream()
+							.map(CourseSchedule::getId)
+							.distinct().collect(Collectors.toList());
+					// 更新连堂课状态
+					courseScheduleDao.batchUpdateContinuousCourse(collect, true);
+
+				} catch (Exception e) {
+				    log.error("getLiveCourseScheduleTime courseScheduleIds={}", collect, e);
+				}
+
+			});
+
+		} else {
+
+			// 当前课程信息
+			courseScheduleTimes.add(CourseScheduleWrapper.CourseScheduleTime.builder()
+					.startTime(courseSchedule.getStartClassTime().getTime())
+					.endTime(courseSchedule.getEndClassTime().getTime())
+					.build());
+		}
+
+		// 定时任务更新课程状态为进行中,判断当前课程状态是否匹配
+		if (CourseStatusEnum.NOT_START == courseSchedule.getStatus()) {
+			throw new BizException("直播课暂未开启,请稍后重试");
+		}
+		if (CourseStatusEnum.OVER == courseSchedule.getStatus()) {
+			throw new BizException("直播课已结束");
 		}
 
 		// 直播间配置
@@ -6039,6 +6131,39 @@ public class CourseScheduleServiceImpl extends BaseServiceImpl<Long, CourseSched
 	}
 
 	/**
+	 * 更新当前课程连堂状态
+	 * @param continueCourseTime 连堂时间间隔
+	 * @param continuousCourse 连堂课程
+	 */
+	private void updateContinuousCourseStatus(String continueCourseTime, List<CourseSchedule> continuousCourse) {
+
+		// continuousCourse对象相邻两个时间比较,如果时间间隔小于5分钟,那么合并为连堂课
+		DateTime startTime;
+		DateTime endTime;
+		for (int i = 0; i < continuousCourse.size(); i++) {
+			CourseSchedule current = continuousCourse.get(i);
+			CourseSchedule next = null;
+			if (i + 1 < continuousCourse.size()) {
+				next = continuousCourse.get(i + 1);
+			}
+			if (next != null) {
+
+				startTime = getDateTime(current.getClassDate(), current.getEndClassTime());
+				endTime = getDateTime(next.getClassDate(), next.getStartClassTime());
+				// 如果当前课程结束时间和下一节课开始时间间隔小于5分钟,那么合并时间
+				if (startTime.isBefore(endTime)
+						&& startTime.plusMinutes(Integer.parseInt(continueCourseTime) + 1).isAfter(endTime)) {
+					// 上节连堂状态
+					current.setContinuousCourse(true);
+					// 下节连堂状态
+					next.setContinuousCourse(true);
+				}
+			}
+		}
+
+	}
+
+	/**
 	 * 课程开始时间
 	 * @param day 开始天
 	 * @param time 开始时间

+ 7 - 1
mec-biz/src/main/resources/config/mybatis/CourseScheduleMapper.xml

@@ -4377,11 +4377,17 @@
     <update id="updateLiveRemind">
         update course_schedule set live_remind_ = #{liveRemind} where id_ = #{courseScheduleId}
     </update>
+    <update id="batchUpdateLiveRoomId">
+        update course_schedule set live_room_id_ = #{liveRoomId} where id_ IN (<foreach collection="courseScheduleIds" separator="," item="item">#{item}</foreach>)
+    </update>
+    <update id="batchUpdateContinuousCourse">
+        update course_schedule set continuous_course_ = #{continuousCourse} where id_ IN (<foreach collection="courseScheduleIds" separator="," item="item">#{item}</foreach>)
+    </update>
 
     <select id="getTeacherContinuousCourse" resultMap="CourseSchedule">
         SELECT <include refid="resultSql"/> FROM course_schedule cs
         WHERE cs.class_group_id_ = #{classGroupId}
-        AND cs.actual_teacher_id_ = #{teacherId} AND cs.pre_course_flag_ = 0
+        AND cs.actual_teacher_id_ = #{teacherId} AND cs.pre_course_flag_ = 0 AND cs.class_date_ = #{classDate}
         ORDER BY cs.class_date_ DESC,cs.end_class_time_ DESC
     </select>
 </mapper>