/// <summary> /// 获取未安排课表的班级课表信息 /// <para>作 者:zhiwei.Tang</para> /// <para>创建时间:2018-11-06</para> /// </summary> /// <param name="classRoomId">教室ID</param> /// <param name="schoolTimeId">时间段ID</param> /// <returns>课次表详情</returns> public static ClassTimetableResponse GetNoClassTimetable(long classRoomId, long schoolTimeId) { ClassTimetableResponse res = new ClassTimetableResponse { IsClassJoin = false }; SchoolTimeService service = SchoolTimeService.CreateSchoolTimeService(schoolTimeId); List <TblDatSchoolTime> allSchoolTimes = service.TblDatSchoolTime; TblDatTerm term = service.TblDatTerm; //获取当前时间段 var firstTime = allSchoolTimes.FirstOrDefault(x => x.SchoolTimeId == schoolTimeId); //第一节课时间段 res.Time1 = new List <string> { firstTime.BeginTime, firstTime.EndTime }; //上课老师 res.Teacher = TeachService.GetIncumbentTeachers(term.SchoolId); //当前教室门牌号 res.RoomNo = new SchoolClassRoomService(term.SchoolId).GetClassRoom(classRoomId)?.RoomNo; //课程与课程等级 res.ClassTimetableCourse = GetClassTimetableCourseResponse(term.SchoolId, classRoomId); ClassTimetableSchoolTimeResult classTimetableSchoolTimeResult = GetClassTimetableSchoolTimeResult(allSchoolTimes, classRoomId, schoolTimeId, term.TermId); //星期几与上课时间的数据 res.WeekDaySchoolTimes = classTimetableSchoolTimeResult .WeekDaySchoolTimes .OrderBy(m => m.WeekDay).ToList(); res.CanClassJoin = classTimetableSchoolTimeResult.CanClassJoin; //第二节课时间段 res.Time2 = classTimetableSchoolTimeResult.Time2; return(res); }
/// <summary> /// 校验时间段是否可以连上 /// <para>作 者:zhiwei.Tang</para> /// <para>创建时间:2018-11-06</para> /// </summary> /// <param name="allClassTime">所有上课时间段</param> /// <param name="classRoomId">教室Id</param> /// <param name="schoolTimeId">上课时间段</param> /// <param name="termId">学期Id</param> /// <returns>课程表基础数据</returns> private static ClassTimetableSchoolTimeResult GetClassTimetableSchoolTimeResult( List <TblDatSchoolTime> allClassTime, long classRoomId, long schoolTimeId, long termId) { ClassTimetableSchoolTimeResult res = new ClassTimetableSchoolTimeResult() { Time2 = new List <string>(), WeekDaySchoolTimes = new List <ClassTimetableSchoolTimeResponse>(), CanClassJoin = false }; TermCourseTimetableAuditService termCourseTimetableAuditService = new TermCourseTimetableAuditService(termId); List <long> schoolTimeIds = allClassTime.Select(x => x.SchoolTimeId).Distinct().ToList(); List <long> alreadySchoolTimeIds = null;//已上课时间段 if (termCourseTimetableAuditService.NoPass) { alreadySchoolTimeIds = termCourseTimetableAuditService.GetAlreadyClassTime(classRoomId); } else { alreadySchoolTimeIds = GetAlreadyClassTime(termId, classRoomId); } //1.第一节上课时间 TblDatSchoolTime firstClassTime = allClassTime.FirstOrDefault(x => x.SchoolTimeId == schoolTimeId); //2.第二节上课时间 TblDatSchoolTime secondClassTime = null; //当天所有上课时间段 var dayClassTimes = allClassTime .Where(x => x.WeekDay == firstClassTime.WeekDay && x.Duration == firstClassTime.Duration) .OrderBy(x => x.BeginTime) .ToList(); //第一个时间段索引 int firstTimeIndex = dayClassTimes.IndexOf(firstClassTime); //第二个时间段索引 int secondClassTimeIndex = firstTimeIndex + 1; //班级第二个时间段 if (dayClassTimes.Count > secondClassTimeIndex) { secondClassTime = dayClassTimes[secondClassTimeIndex]; if (!alreadySchoolTimeIds.Any(x => x == secondClassTime.SchoolTimeId)) { res.CanClassJoin = true; res.Time2.Add(secondClassTime.BeginTime); res.Time2.Add(secondClassTime.EndTime); } } //一周的上课时间 for (int i = 1; i <= 7; i++) { ClassTimetableSchoolTimeResponse ctst = new ClassTimetableSchoolTimeResponse { HasSchoolTime1 = false, SchoolTimeId1 = 0, HasSchoolTime2 = false, SchoolTimeId2 = 0, IsChecked = false, WeekDay = i }; //当天时间段 var currentDayTime = allClassTime .Where(x => x.WeekDay == i && x.Duration == firstClassTime.Duration) .OrderBy(x => x.BeginTime) .ToList(); //第一节 TblDatSchoolTime first = currentDayTime.FirstOrDefault(x => x.Duration == firstClassTime.Duration && x.BeginTime == firstClassTime.BeginTime && x.EndTime == firstClassTime.EndTime); //该天没有此时间段 if (first == null) { res.WeekDaySchoolTimes.Add(ctst); continue; } //第一节课基本数据 ctst.HasSchoolTime1 = true; ctst.SchoolTimeId1 = first.SchoolTimeId; if (first.SchoolTimeId == firstClassTime.SchoolTimeId) { ctst.IsChecked = true; } //第一节课时间段段是否占用 if (alreadySchoolTimeIds.Any(x => x == first.SchoolTimeId)) { ctst.HasSchoolTime1 = false; ctst.SchoolTimeId1 = 0; res.WeekDaySchoolTimes.Add(ctst); continue; } //第二节 是否能够与下一个时间段连上 if (secondClassTime != null) { TblDatSchoolTime second = currentDayTime.FirstOrDefault(x => x.Duration == secondClassTime.Duration && x.BeginTime == secondClassTime.BeginTime && x.EndTime == secondClassTime.EndTime); if (second != null) { if (!alreadySchoolTimeIds.Any(x => x == second.SchoolTimeId)) { ctst.HasSchoolTime2 = true; ctst.SchoolTimeId2 = second.SchoolTimeId; } } } res.WeekDaySchoolTimes.Add(ctst); } return(res); }