Browse Source

课程调整加消息推送

zouxuan 2 years ago
parent
commit
d74ac45765

+ 47 - 1
mec-biz/src/main/java/com/ym/mec/biz/service/CourseScheduleService.java

@@ -790,7 +790,7 @@ public interface CourseScheduleService extends BaseService<Long, CourseSchedule>
 	 */
 	 */
 	CourseScheduleWrapper.LiveCourseSchedule getLiveCourseScheduleTime(Long courseScheduleId);
 	CourseScheduleWrapper.LiveCourseSchedule getLiveCourseScheduleTime(Long courseScheduleId);
 
 
-    List<CourseScheduleStudentDto> queryDetailList(CourseDetailQueryInfo courseDetailQueryInfo);
+	List<CourseScheduleStudentDto> queryDetailList(CourseDetailQueryInfo courseDetailQueryInfo);
 
 
     /**
     /**
      * 老师乐直播直播课课程列表
      * 老师乐直播直播课课程列表
@@ -809,4 +809,50 @@ public interface CourseScheduleService extends BaseService<Long, CourseSchedule>
      * @return
      * @return
      */
      */
     CourseScheduleDto detailLiveCourse(Long courseScheduleId);
     CourseScheduleDto detailLiveCourse(Long courseScheduleId);
+
+	/**
+	* @description: 校验直播课调整时间
+	 * @param oldCourseSchedule
+	 * @param startRemindTime
+	* @return void
+	* @author zx
+	* @date 2023/6/15 14:36
+	*/
+	void checkLiveAdjust(CourseSchedule oldCourseSchedule,String startRemindTime);
+
+	/**
+	* @description: 校验直播课调整时间
+	 * @param courseSchedules
+	* @return void
+	* @author zx
+	* @date 2023/6/15 14:36
+	*/
+	void checkLiveAdjust(List<CourseSchedule> courseSchedules);
+
+	/**
+	* @description: 重置连堂课标记
+	 * @param courseSchedule
+	* @return void
+	* @author zx
+	* @date 2023/6/15 14:36
+	*/
+	void resetLiveRemind(CourseSchedule courseSchedule);
+
+	/**
+	 * @description: 重置连堂课标记
+	 * @param courseSchedules
+	 * @return void
+	 * @author zx
+	 * @date 2023/6/15 14:36
+	 */
+	void resetLiveRemind(List<CourseSchedule> courseSchedules);
+
+	/**
+	* @description: 课程变更后,给直播间发送变更消息
+	 * @param courseSchedules
+	* @return void
+	* @author zx
+	* @date 2023/6/15 14:47
+	*/
+	void sendChatRoomMessage(List<CourseSchedule> courseSchedules);
 }
 }

+ 101 - 61
mec-biz/src/main/java/com/ym/mec/biz/service/impl/CourseScheduleServiceImpl.java

@@ -70,6 +70,8 @@ import java.time.format.DateTimeFormatter;
 import java.time.temporal.TemporalAdjusters;
 import java.time.temporal.TemporalAdjusters;
 import java.util.*;
 import java.util.*;
 import java.util.concurrent.CompletableFuture;
 import java.util.concurrent.CompletableFuture;
+import java.util.concurrent.ExecutorService;
+import java.util.concurrent.Executors;
 import java.util.stream.Collectors;
 import java.util.stream.Collectors;
 
 
 import static com.ym.mec.biz.dal.entity.CourseSchedule.CourseScheduleType.MUSIC_NETWORK;
 import static com.ym.mec.biz.dal.entity.CourseSchedule.CourseScheduleType.MUSIC_NETWORK;
@@ -2339,8 +2341,15 @@ public class CourseScheduleServiceImpl extends BaseServiceImpl<Long, CourseSched
                 .stream().map(Long::parseLong).collect(Collectors.toList());
                 .stream().map(Long::parseLong).collect(Collectors.toList());
         //所有的课程
         //所有的课程
         List<CourseSchedule> courseSchedules = courseScheduleDao.findByCourseScheduleIds(courseScheduleIds);
         List<CourseSchedule> courseSchedules = courseScheduleDao.findByCourseScheduleIds(courseScheduleIds);
+		//校验可排课时间
+		this.checkLiveAdjust(courseSchedules);
+
         //校验机构线上课人数上限
         //校验机构线上课人数上限
 		this.checkOnlineCategory(courseSchedules,vipGroupCourseAdjustInfo.getTeachMode());
 		this.checkOnlineCategory(courseSchedules,vipGroupCourseAdjustInfo.getTeachMode());
+		//重置连堂课标记
+		List<CourseSchedule> liveCourseSchedules = Lists.newArrayList();
+		//拷贝历史直播课
+		BeanUtils.copyProperties(courseSchedules,liveCourseSchedules);
         courseSchedules.sort(Comparator.comparing(CourseSchedule::getStartClassTime));
         courseSchedules.sort(Comparator.comparing(CourseSchedule::getStartClassTime));
 		//获取操作日志
 		//获取操作日志
 		List<CourseScheduleModifyLog> modifyLogs = getModifyLogs(courseScheduleIds, courseSchedules, user.getId(), now);
 		List<CourseScheduleModifyLog> modifyLogs = getModifyLogs(courseScheduleIds, courseSchedules, user.getId(), now);
@@ -2514,6 +2523,8 @@ public class CourseScheduleServiceImpl extends BaseServiceImpl<Long, CourseSched
 //        courseScheduleStudentPaymentService.updateVipGiveCourse(vipGroup.getId());
 //        courseScheduleStudentPaymentService.updateVipGiveCourse(vipGroup.getId());
 		//保存操作日志
 		//保存操作日志
 		saveModifyLog(modifyLogs,courseScheduleIds);
 		saveModifyLog(modifyLogs,courseScheduleIds);
+		//发送直播课调整通知
+		this.sendChatRoomMessage(liveCourseSchedules);
     }
     }
 
 
 	@Override
 	@Override
@@ -3037,6 +3048,7 @@ public class CourseScheduleServiceImpl extends BaseServiceImpl<Long, CourseSched
 		Map<Long, CourseSchedule> oldCourseScheduleMap = oldCourseScheduleList.stream().collect(Collectors.toMap(CourseSchedule::getId, c -> c));
 		Map<Long, CourseSchedule> oldCourseScheduleMap = oldCourseScheduleList.stream().collect(Collectors.toMap(CourseSchedule::getId, c -> c));
 
 
 		List<CourseSchedule> liveCourseSchedules = Lists.newArrayList();
 		List<CourseSchedule> liveCourseSchedules = Lists.newArrayList();
+		BeanUtils.copyProperties(oldCourseScheduleList,liveCourseSchedules);
         for(CourseSchedule newCourseSchedule : newCourseSchedules){
         for(CourseSchedule newCourseSchedule : newCourseSchedules){
 
 
         	//获取数据库中的记录
         	//获取数据库中的记录
@@ -3092,17 +3104,6 @@ public class CourseScheduleServiceImpl extends BaseServiceImpl<Long, CourseSched
 				}
 				}
 			}
 			}
 
 
-			// 直播课发送推送消息
-			if (LIVE.equals(oldCourseSchedule.getGroupType())) {
-				// 日期,时间,时长,主教老师不一致时,发送消息
-				if (newCourseSchedule.getClassDate() != oldCourseSchedule.getClassDate()
-						|| newCourseSchedule.getStartClassTime() != oldCourseSchedule.getStartClassTime()
-						|| newCourseSchedule.getEndClassTime() != oldCourseSchedule.getEndClassTime()
-						|| newCourseSchedule.getActualTeacherId() != oldCourseSchedule.getActualTeacherId().intValue()) {
-					liveCourseSchedules.add(oldCourseSchedule);
-				}
-			}
-
             if(!CollectionUtils.isEmpty(newCourseSchedule.getTeachingTeacherIdList())){
             if(!CollectionUtils.isEmpty(newCourseSchedule.getTeachingTeacherIdList())){
                 if (newCourseSchedule.getTeachingTeacherIdList().contains(newCourseSchedule.getActualTeacherId())){
                 if (newCourseSchedule.getTeachingTeacherIdList().contains(newCourseSchedule.getActualTeacherId())){
                     throw new BizException("主教和助教不可重复");
                     throw new BizException("主教和助教不可重复");
@@ -3545,56 +3546,8 @@ public class CourseScheduleServiceImpl extends BaseServiceImpl<Long, CourseSched
 		} catch (Exception e) {
 		} catch (Exception e) {
 			e.printStackTrace();
 			e.printStackTrace();
 		}
 		}
-
 		// 直播课消息推送
 		// 直播课消息推送
-		if (CollectionUtils.isNotEmpty(liveCourseSchedules)) {
-
-			CompletableFuture.runAsync(() ->
-
-				liveCourseSchedules.parallelStream().forEach(item -> {
-
-					// 是否是连堂课
-					String continueCourseTime = sysTenantConfigService.getTenantConfigValue(SysConfigService.ONLINE_CONTINUE_COURSE_TIME, item.getTenantId());
-					if (StringUtils.isEmpty(continueCourseTime)) {
-						continueCourseTime = "5";
-					}
-
-					// 直播课关联直播间编号
-					String liveRoomId = getCourseScheduleLiveRoomId(item, continueCourseTime, Lists.newArrayList(), Lists.newArrayList());
-
-					ImLiveBroadcastRoom liveRoom = imLiveBroadcastRoomService.getByRoomUid(liveRoomId);
-					if (Objects.isNull(liveRoom)) {
-						log.warn("liveRoom is null, liveRoomId:{}", item.getLiveRoomId());
-						return;
-					}
-
-					try {
-						LivePluginService pluginService = livePluginContext.getPluginService(liveRoom.getServiceProvider());
-
-						LiveRoomMessage message = new LiveRoomMessage();
-						message.setIsIncludeSender(1);
-						message.setFromUserId(item.getActualTeacherId().toString());
-						message.setToChatRoomId(item.getLiveRoomId());
-						message.setObjectName(LiveRoomMessage.LIVE_STATUS_CHANGE);
-
-						// 发送用户信息
-						LiveRoomMessage.MessageUser messageUser = LiveRoomMessage.MessageUser.builder()
-								.sendUserId("")
-								.sendUserName("")
-								.avatarUrl("")
-								.build();
-
-						message.setContent(LiveRoomMessage.MessageContent.builder()
-								.sendUserInfo(messageUser).build());
-
-						pluginService.sendChatRoomMessage(message);
-					} catch (Exception e) {
-						log.error("liveRoom error", e);
-					}
-				})
-			);
-
-		}
+		this.sendChatRoomMessage(liveCourseSchedules);
 		return BaseController.succeed();
 		return BaseController.succeed();
     }
     }
 
 
@@ -6080,7 +6033,94 @@ public class CourseScheduleServiceImpl extends BaseServiceImpl<Long, CourseSched
 
 
     }
     }
 
 
-    @Override
+	@Override
+	public void checkLiveAdjust(CourseSchedule oldCourseSchedule,String startRemindTime) {
+		// 直播课
+		if (GroupType.LIVE.equals(oldCourseSchedule.getGroupType())){
+			if(org.springframework.util.StringUtils.isEmpty(startRemindTime)){
+				startRemindTime = sysConfigDao.findConfigValue("live_class_start_remind_time");
+			}
+			if(org.springframework.util.StringUtils.isEmpty(startRemindTime)){
+				startRemindTime = "30";
+			}
+			if(DateUtil.minutesBetween(new Date(),oldCourseSchedule.getStartClassTime()) < Integer.parseInt(startRemindTime)
+					&& DateUtil.minutesBetween(new Date(),oldCourseSchedule.getEndClassTime()) >= 0){
+				throw new BizException("直播课课程开始前{}分钟不允许调整",startRemindTime);
+			}
+		}
+	}
+
+	@Override
+	public void checkLiveAdjust(List<CourseSchedule> courseSchedules) {
+		String startRemindTime = sysConfigDao.findConfigValue("live_class_start_remind_time");
+		courseSchedules.forEach(e->checkLiveAdjust(e,startRemindTime));
+	}
+
+	@Override
+	public void resetLiveRemind(CourseSchedule courseSchedule) {
+		if (GroupType.LIVE.equals(courseSchedule.getGroupType())) {
+			// 重置连堂课,关联直播间,消息推送状态
+			courseSchedule.setLiveRemind(0);
+			courseSchedule.setContinuousCourse(false);
+			courseSchedule.setLiveRoomId("");
+		}
+	}
+
+	@Override
+	public void resetLiveRemind(List<CourseSchedule> courseSchedules) {
+		courseSchedules.forEach(e->resetLiveRemind(e));
+	}
+
+	@Override
+	public void sendChatRoomMessage(List<CourseSchedule> courseSchedules) {
+		// 直播课消息推送
+		ExecutorService executor = Executors.newCachedThreadPool();
+		CompletableFuture.runAsync(() ->
+			courseSchedules.parallelStream().filter(e->e.getGroupType() == LIVE).forEach(item -> {
+				// 是否是连堂课
+				String continueCourseTime = sysTenantConfigService.getTenantConfigValue(SysConfigService.ONLINE_CONTINUE_COURSE_TIME, item.getTenantId());
+				if (StringUtils.isEmpty(continueCourseTime)) {
+					continueCourseTime = "5";
+				}
+
+				// 直播课关联直播间编号
+				String liveRoomId = getCourseScheduleLiveRoomId(item, continueCourseTime, Lists.newArrayList(), Lists.newArrayList());
+
+				ImLiveBroadcastRoom liveRoom = imLiveBroadcastRoomService.getByRoomUid(liveRoomId);
+				if (Objects.isNull(liveRoom)) {
+					log.warn("liveRoom is null, liveRoomId:{}", item.getLiveRoomId());
+					return;
+				}
+
+				try {
+					LivePluginService pluginService = livePluginContext.getPluginService(liveRoom.getServiceProvider());
+
+					LiveRoomMessage message = new LiveRoomMessage();
+					message.setIsIncludeSender(1);
+					message.setFromUserId(item.getActualTeacherId().toString());
+					message.setToChatRoomId(item.getLiveRoomId());
+					message.setObjectName(LiveRoomMessage.LIVE_STATUS_CHANGE);
+
+					// 发送用户信息
+					LiveRoomMessage.MessageUser messageUser = LiveRoomMessage.MessageUser.builder()
+							.sendUserId("")
+							.sendUserName("")
+							.avatarUrl("")
+							.build();
+
+					message.setContent(LiveRoomMessage.MessageContent.builder()
+							.sendUserInfo(messageUser).build());
+
+					pluginService.sendChatRoomMessage(message);
+				} catch (Exception e) {
+					log.error("liveRoom error", e);
+				}
+			}),executor
+		);
+		executor.shutdown();
+	}
+
+	@Override
     public List<CourseScheduleStudentDto> queryDetailList(CourseDetailQueryInfo courseDetailQueryInfo) {
     public List<CourseScheduleStudentDto> queryDetailList(CourseDetailQueryInfo courseDetailQueryInfo) {
 
 
 
 

+ 4 - 18
mec-web/src/main/java/com/ym/mec/web/controller/CourseScheduleController.java

@@ -190,24 +190,10 @@ public class CourseScheduleController extends BaseController {
                     &&!VipGroupStatusEnum.FINISHED.equals(vipGroup.getStatus())){
                     &&!VipGroupStatusEnum.FINISHED.equals(vipGroup.getStatus())){
                 throw new BizException("非进行中课程组不允许进行此操作");
                 throw new BizException("非进行中课程组不允许进行此操作");
             }
             }
-
-            // 直播课
-            if (GroupType.LIVE.equals(oldCourseSchedule.getGroupType())){
-                if(org.apache.commons.lang3.StringUtils.isNotBlank(oldCourseSchedule.getLiveRoomId())){
-                    // 重置连堂课,关联直播间,消息推送状态
-                    courseSchedule.setLiveRemind(0);
-                    courseSchedule.setContinuousCourse(false);
-                    courseSchedule.setLiveRoomId("");
-                }
-                String startRemindTime = sysConfigDao.findConfigValue("live_class_start_remind_time");
-                if(StringUtils.isEmpty(startRemindTime)){
-                    startRemindTime = "30";
-                }
-                if(DateUtil.minutesBetween(new Date(),oldCourseSchedule.getStartClassTime()) < Integer.parseInt(startRemindTime)
-                 && DateUtil.minutesBetween(new Date(),oldCourseSchedule.getEndClassTime()) >= 0){
-                    throw new BizException("直播课课程开始前{}分钟不允许调整",startRemindTime);
-                }
-            }
+            //校验调整时间
+            courseScheduleService.checkLiveAdjust(oldCourseSchedule,null);
+            //重置连堂课标记
+            courseScheduleService.resetLiveRemind(courseSchedule);
         }
         }
         if(Objects.isNull(courseSchedule.getClassGroupId())){
         if(Objects.isNull(courseSchedule.getClassGroupId())){
             courseSchedule.setClassGroupId(oldCourseSchedule.getClassGroupId());
             courseSchedule.setClassGroupId(oldCourseSchedule.getClassGroupId());