| 
					
				 | 
			
			
				@@ -70,6 +70,8 @@ import java.time.format.DateTimeFormatter; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import java.time.temporal.TemporalAdjusters; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import java.util.*; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import java.util.concurrent.CompletableFuture; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import java.util.concurrent.ExecutorService; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import java.util.concurrent.Executors; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import java.util.stream.Collectors; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 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()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         //所有的课程 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         List<CourseSchedule> courseSchedules = courseScheduleDao.findByCourseScheduleIds(courseScheduleIds); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		//校验可排课时间 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		this.checkLiveAdjust(courseSchedules); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         //校验机构线上课人数上限 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		this.checkOnlineCategory(courseSchedules,vipGroupCourseAdjustInfo.getTeachMode()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		//重置连堂课标记 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		List<CourseSchedule> liveCourseSchedules = Lists.newArrayList(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		//拷贝历史直播课 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		BeanUtils.copyProperties(courseSchedules,liveCourseSchedules); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         courseSchedules.sort(Comparator.comparing(CourseSchedule::getStartClassTime)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		//获取操作日志 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		List<CourseScheduleModifyLog> modifyLogs = getModifyLogs(courseScheduleIds, courseSchedules, user.getId(), now); 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -2514,6 +2523,8 @@ public class CourseScheduleServiceImpl extends BaseServiceImpl<Long, CourseSched 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 //        courseScheduleStudentPaymentService.updateVipGiveCourse(vipGroup.getId()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		//保存操作日志 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		saveModifyLog(modifyLogs,courseScheduleIds); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		//发送直播课调整通知 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		this.sendChatRoomMessage(liveCourseSchedules); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	@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)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		List<CourseSchedule> liveCourseSchedules = Lists.newArrayList(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		BeanUtils.copyProperties(oldCourseScheduleList,liveCourseSchedules); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         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 (newCourseSchedule.getTeachingTeacherIdList().contains(newCourseSchedule.getActualTeacherId())){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                     throw new BizException("主教和助教不可重复"); 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -3545,56 +3546,8 @@ public class CourseScheduleServiceImpl extends BaseServiceImpl<Long, CourseSched 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		} catch (Exception e) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 			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(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -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) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 |