|
@@ -2503,6 +2503,17 @@ public class CourseScheduleServiceImpl extends BaseServiceImpl<Long, CourseSched
|
|
|
|
|
|
// courseScheduleTeacherSalaryDao.batchUpdateCourseSalarys(courseScheduleIds, teacherSalary);
|
|
|
|
|
|
+ // 直播课数据清除
|
|
|
+ for (CourseSchedule item : courseSchedules) {
|
|
|
+ if (LIVE == item.getGroupType()) {
|
|
|
+ // 消息提醒
|
|
|
+ item.setLiveRemind(0);
|
|
|
+ // 直播间关联
|
|
|
+ item.setLiveRoomId("");
|
|
|
+ // 连堂课标识
|
|
|
+ item.setContinuousCourse(false);
|
|
|
+ }
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
courseScheduleDao.batchUpdate(courseSchedules);
|
|
@@ -3165,7 +3176,7 @@ public class CourseScheduleServiceImpl extends BaseServiceImpl<Long, CourseSched
|
|
|
|
|
|
//课程结束时间必须在21:00之前
|
|
|
if(DateUtil.getHour(newCourseSchedule.getEndClassTime()) > 20 && DateUtil.getMinute(newCourseSchedule.getEndClassTime()) > 0){
|
|
|
- throw new BizException("课程结束时间不能超过21:00,请重新调整上课时间");
|
|
|
+ throw new BizException("课程结束时间不能超过21:00,请重新调整上课时间");
|
|
|
}
|
|
|
|
|
|
//判断上课时间是否跨天
|
|
@@ -6297,10 +6308,10 @@ public class CourseScheduleServiceImpl extends BaseServiceImpl<Long, CourseSched
|
|
|
// 课程时间长计算
|
|
|
List<CourseScheduleWrapper.CourseScheduleTime> courseScheduleTimes = Lists.newArrayList();
|
|
|
// 直播课关联直播间编号
|
|
|
- String liveRoomId = getCourseScheduleLiveRoomId(courseSchedule, continueCourseTime, newCourseSchedules, courseScheduleTimes);
|
|
|
+ String liveRoomId = getCourseScheduleLiveRoomId(courseSchedule, continueCourseTime, newCourseSchedules, courseScheduleTimes, true);
|
|
|
|
|
|
// 定时任务更新课程状态为进行中,判断当前课程状态是否匹配
|
|
|
- int studentRemindTime = Integer.parseInt(sysConfigService.findByParamName(SysConfigService.LIVE_CLASS_START_REMIND_TIME).getParanValue());
|
|
|
+ /*int studentRemindTime = Integer.parseInt(sysConfigService.findByParamName(SysConfigService.LIVE_CLASS_START_REMIND_TIME).getParanValue());
|
|
|
|
|
|
Date date = DateUtil.startDateAndEndTime(courseSchedule.getClassDate(), courseSchedule.getStartClassTime());
|
|
|
date = DateUtil.addMinutes(date, -studentRemindTime);
|
|
@@ -6310,7 +6321,7 @@ public class CourseScheduleServiceImpl extends BaseServiceImpl<Long, CourseSched
|
|
|
}
|
|
|
if (CourseStatusEnum.OVER == courseSchedule.getStatus()) {
|
|
|
throw new BizException("直播课已结束");
|
|
|
- }
|
|
|
+ }*/
|
|
|
|
|
|
// 直播间配置
|
|
|
ImLiveBroadcastRoom liveBroadcastRoom = imLiveBroadcastRoomService.lambdaQuery()
|
|
@@ -6321,11 +6332,17 @@ public class CourseScheduleServiceImpl extends BaseServiceImpl<Long, CourseSched
|
|
|
throw new BizException("请先进入直播课教室");
|
|
|
}
|
|
|
|
|
|
+ String autoCloseNetworkRoomTime = sysTenantConfigService.getTenantConfigValue(SysConfigService.COURSE_AFTER_BUFFER_TIME, courseSchedule.getTenantId());
|
|
|
+ if (StringUtils.isEmpty(autoCloseNetworkRoomTime)) {
|
|
|
+ autoCloseNetworkRoomTime = "15";
|
|
|
+ }
|
|
|
+
|
|
|
return CourseScheduleWrapper.LiveCourseSchedule.builder()
|
|
|
.liveRoomId(liveRoomId)
|
|
|
.subjectId(liveBroadcastRoom.getSubjectId())
|
|
|
.autoCloseFlag(true)
|
|
|
- .autoCloseNetworkRoomTime(getCloseNetworkRoomTime(courseSchedule, continueCourseTime))
|
|
|
+ //.autoCloseNetworkRoomTime(getCloseNetworkRoomTime(courseSchedule, continueCourseTime))
|
|
|
+ .autoCloseNetworkRoomTime(autoCloseNetworkRoomTime)
|
|
|
.surplusTime(DateUtil.secondsBetween(new Date(), courseSchedule.getEndClassTime()))
|
|
|
.timestamp(DateTime.now().getMillis())
|
|
|
.courseScheduleTimes(courseScheduleTimes)
|
|
@@ -6343,7 +6360,8 @@ public class CourseScheduleServiceImpl extends BaseServiceImpl<Long, CourseSched
|
|
|
private String getCourseScheduleLiveRoomId(CourseSchedule courseSchedule,
|
|
|
String continueCourseTime,
|
|
|
List<CourseSchedule> newCourseSchedules,
|
|
|
- List<CourseScheduleWrapper.CourseScheduleTime> courseScheduleTimes) {
|
|
|
+ List<CourseScheduleWrapper.CourseScheduleTime> courseScheduleTimes,
|
|
|
+ Boolean updateFlag) {
|
|
|
String liveRoomId;
|
|
|
// 课程开始时间
|
|
|
courseSchedule.setStartClassTime(getDateTime(courseSchedule.getClassDate(), courseSchedule.getStartClassTime()).toDate());
|
|
@@ -6380,6 +6398,8 @@ public class CourseScheduleServiceImpl extends BaseServiceImpl<Long, CourseSched
|
|
|
if (item.getId().longValue() == courseSchedule.getId()) {
|
|
|
continue;
|
|
|
}
|
|
|
+ // 重置连堂状态
|
|
|
+ item.setContinuousCourse(false);
|
|
|
|
|
|
schedule = JSON.parseObject(JSON.toJSONString(item), CourseSchedule.class);
|
|
|
if (item.getEndClassTime().getTime() <= courseSchedule.getStartClassTime().getTime()) {
|
|
@@ -6391,6 +6411,7 @@ public class CourseScheduleServiceImpl extends BaseServiceImpl<Long, CourseSched
|
|
|
}
|
|
|
}
|
|
|
|
|
|
+ courseSchedule.setContinuousCourse(false);
|
|
|
// 当前课程之前连堂课
|
|
|
beforeCourse.add(JSON.parseObject(JSON.toJSONString(courseSchedule), CourseSchedule.class));
|
|
|
// 当前课程之后连堂课
|
|
@@ -6401,17 +6422,73 @@ public class CourseScheduleServiceImpl extends BaseServiceImpl<Long, CourseSched
|
|
|
|
|
|
// 课程连堂状态
|
|
|
if (beforeCourse.get(beforeCourse.size() - 1).getContinuousCourse()) {
|
|
|
- List<CourseSchedule> collect = beforeCourse.stream()
|
|
|
+
|
|
|
+ // 倒序排序
|
|
|
+ beforeCourse = beforeCourse.stream()
|
|
|
+ .sorted(Comparator.comparing(CourseSchedule::getStartClassTime).reversed())
|
|
|
+ .collect(Collectors.toList());
|
|
|
+
|
|
|
+ for (int i = 0; i < beforeCourse.size(); i++) {
|
|
|
+ CourseSchedule current = beforeCourse.get(i);
|
|
|
+ if (current.getContinuousCourse()) {
|
|
|
+ newCourseSchedules.add(current);
|
|
|
+ }
|
|
|
+
|
|
|
+ if (i + 1 < beforeCourse.size()) {
|
|
|
+ CourseSchedule next = beforeCourse.get(i + 1);
|
|
|
+
|
|
|
+ if (!next.getContinuousCourse()) {
|
|
|
+ newCourseSchedules.add(next);
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ // 正序排序
|
|
|
+ beforeCourse = beforeCourse.stream()
|
|
|
+ .sorted(Comparator.comparing(CourseSchedule::getStartClassTime))
|
|
|
+ .collect(Collectors.toList());
|
|
|
+
|
|
|
+ /*for (int i = beforeCourse.size() - 1; i >= 0 ; i--) {
|
|
|
+ CourseSchedule current = beforeCourse.get(i);
|
|
|
+ CourseSchedule next = null;
|
|
|
+ if ((i - 1) >= 0) {
|
|
|
+ next = beforeCourse.get(i - 1);
|
|
|
+ }
|
|
|
+ if (next != null && current.getContinuousCourse() && next.getContinuousCourse()) {
|
|
|
+ newCourseSchedules.addAll(Lists.newArrayList(current, next));
|
|
|
+ }
|
|
|
+ }*/
|
|
|
+
|
|
|
+ /*List<CourseSchedule> collect = beforeCourse.stream()
|
|
|
.filter(CourseSchedule::getContinuousCourse)
|
|
|
.collect(Collectors.toList());
|
|
|
if (CollectionUtils.isNotEmpty(collect)) {
|
|
|
newCourseSchedules.addAll(collect);
|
|
|
- }
|
|
|
+ }*/
|
|
|
}
|
|
|
|
|
|
// 课程后连堂状态
|
|
|
updateContinuousCourseStatus(continueCourseTime, afterCourse);
|
|
|
if (afterCourse.get(0).getContinuousCourse()) {
|
|
|
+
|
|
|
+ for (int i = 0; i < afterCourse.size(); i++) {
|
|
|
+ CourseSchedule current = afterCourse.get(i);
|
|
|
+ if (current.getContinuousCourse()) {
|
|
|
+ newCourseSchedules.add(current);
|
|
|
+ }
|
|
|
+
|
|
|
+ if (i + 1 < afterCourse.size()) {
|
|
|
+ CourseSchedule next = afterCourse.get(i + 1);
|
|
|
+
|
|
|
+ if (!next.getContinuousCourse()) {
|
|
|
+ newCourseSchedules.add(next);
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ /*
|
|
|
List<CourseSchedule> collect = afterCourse.stream()
|
|
|
.filter(CourseSchedule::getContinuousCourse)
|
|
|
.collect(Collectors.toList());
|
|
@@ -6422,11 +6499,16 @@ public class CourseScheduleServiceImpl extends BaseServiceImpl<Long, CourseSched
|
|
|
} else {
|
|
|
newCourseSchedules.addAll(collect.subList(1, collect.size()));
|
|
|
}
|
|
|
- }
|
|
|
+ }*/
|
|
|
}
|
|
|
|
|
|
if (CollectionUtils.isNotEmpty(newCourseSchedules)) {
|
|
|
|
|
|
+ // 课程按开始时间排序
|
|
|
+ newCourseSchedules = newCourseSchedules.stream()
|
|
|
+ .sorted(Comparator.comparing(CourseSchedule::getStartClassTime))
|
|
|
+ .collect(Collectors.toList());
|
|
|
+
|
|
|
// 连党课程信息
|
|
|
for (CourseSchedule item : newCourseSchedules) {
|
|
|
courseScheduleTimes.add(CourseScheduleWrapper.CourseScheduleTime.builder()
|
|
@@ -6437,27 +6519,64 @@ public class CourseScheduleServiceImpl extends BaseServiceImpl<Long, CourseSched
|
|
|
|
|
|
// 获取连堂课第一节信息
|
|
|
CourseSchedule finalCourseSchedule = newCourseSchedules.get(0);
|
|
|
- CompletableFuture.runAsync(() -> {
|
|
|
|
|
|
- List<Long> collect = newCourseSchedules.stream()
|
|
|
- .map(CourseSchedule::getId)
|
|
|
- .distinct().collect(Collectors.toList());
|
|
|
- try {
|
|
|
+ List<Long> collect = newCourseSchedules.stream()
|
|
|
+ .map(CourseSchedule::getId)
|
|
|
+ .distinct().collect(Collectors.toList());
|
|
|
+ try {
|
|
|
|
|
|
+ if (Optional.ofNullable(updateFlag).orElse(true)) {
|
|
|
// 关联直播间编号
|
|
|
courseScheduleDao.batchUpdateLiveRoomId(collect, finalCourseSchedule.getLiveRoomId());
|
|
|
+ }
|
|
|
|
|
|
+ if (CollectionUtils.size(collect) > 1) {
|
|
|
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);
|
|
|
+ if (!Optional.ofNullable(updateFlag).orElse(true)) {
|
|
|
+
|
|
|
+ // 课程连堂状态
|
|
|
+ if (beforeCourse.get(beforeCourse.size() - 1).getContinuousCourse()) {
|
|
|
+
|
|
|
+ int size = beforeCourse.size();
|
|
|
+ collect = beforeCourse.subList(size - 2, size).stream()
|
|
|
+ .map(CourseSchedule::getId)
|
|
|
+ .distinct().collect(Collectors.toList());
|
|
|
+ if (CollectionUtils.isNotEmpty(collect)) {
|
|
|
+ // 更新连堂课状态
|
|
|
+ courseScheduleDao.batchUpdateContinuousCourse(collect, false);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ // 课程后连堂状态
|
|
|
+ if (afterCourse.get(0).getContinuousCourse()) {
|
|
|
+ collect = afterCourse.stream().map(CourseSchedule::getId).distinct().collect(Collectors.toList());
|
|
|
+
|
|
|
+ if (CollectionUtils.isNotEmpty(collect)) {
|
|
|
+ // 关联直播间编号
|
|
|
+ courseScheduleDao.batchUpdateLiveRoomId(collect, "");
|
|
|
+ // 更新连堂课状态
|
|
|
+ courseScheduleDao.batchUpdateContinuousCourse(collect, false);
|
|
|
+ }
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
- });
|
|
|
+ // 更新连堂课状态,最后一节课重置
|
|
|
+ CourseSchedule lastCourseSchedule = newCourseSchedules.get(newCourseSchedules.size() - 1);
|
|
|
+ if (Objects.nonNull(lastCourseSchedule)) {
|
|
|
+ courseScheduleDao.batchUpdateContinuousCourse(Lists.newArrayList(lastCourseSchedule.getId()), false);
|
|
|
+ }
|
|
|
+
|
|
|
+ } catch (Exception e) {
|
|
|
+ log.error("getLiveCourseScheduleTime courseScheduleIds={}", collect, e);
|
|
|
+ }
|
|
|
+
|
|
|
// 连堂课直播间编号
|
|
|
liveRoomId = finalCourseSchedule.getLiveRoomId();
|
|
|
} else {
|
|
@@ -6468,6 +6587,9 @@ public class CourseScheduleServiceImpl extends BaseServiceImpl<Long, CourseSched
|
|
|
.endTime(courseSchedule.getEndClassTime().getTime())
|
|
|
.build());
|
|
|
|
|
|
+ // 更新连堂课状态
|
|
|
+ courseScheduleDao.batchUpdateContinuousCourse(Lists.newArrayList(courseSchedule.getId()), false);
|
|
|
+
|
|
|
liveRoomId = courseSchedule.getLiveRoomId();
|
|
|
}
|
|
|
return liveRoomId;
|
|
@@ -6493,13 +6615,15 @@ public class CourseScheduleServiceImpl extends BaseServiceImpl<Long, CourseSched
|
|
|
|
|
|
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)) {
|
|
|
+ // 如果当前课程结束时间和下一节课开始时间间隔小于5分钟,那么合并时间(修复代码合并)
|
|
|
+ if ((startTime.isBefore(endTime) || startTime.isEqual(endTime))
|
|
|
+ && startTime.plusSeconds(Integer.parseInt(continueCourseTime) * 60 + 10).isAfter(endTime)) {
|
|
|
// 上节连堂状态
|
|
|
current.setContinuousCourse(true);
|
|
|
// 下节连堂状态
|
|
|
next.setContinuousCourse(true);
|
|
|
+ } else {
|
|
|
+ current.setContinuousCourse(false);
|
|
|
}
|
|
|
}
|
|
|
}
|