/// <summary> /// 添加班级排课 /// <para>作 者:zhiwei.Tang</para> /// <para>创建时间:2018-09-25</para> /// </summary> /// <param name="classRoomId">教室Id</param> /// <param name="schoolTimeId">时间段Id</param> /// <param name="request">班级排课数据源</param> /// <param name="createUserName">创建人用户名称</param> /// <returns></returns> public static void AddClass(long classRoomId, long schoolTimeId, ClassScheduleRequest request, string createUserName) { TblAutClass autClass = GetTblAutClass(request, classRoomId, schoolTimeId, createUserName); List <long> hasBeenClassTimeIds = GetHasBeenClassTimeIds(autClass.AuditId, classRoomId); List <TblAutClassTime> autClassTimes = GetTblAutClassTimes(request, autClass, hasBeenClassTimeIds, schoolTimeId); //校验老师是否重复 VerifyTeacherOccupy(autClassTimes.Select(x => x.SchoolTimeId), request.TeacherId, autClass.TermId); Task[] tasks = new Task[2]; tasks[0] = new TblAutClassRepository().AddTask(autClass); tasks[1] = new TblAutClassTimeRepository().SaveTask(autClassTimes); Task.WaitAll(tasks); }
/// <summary> /// 待添加到审核中班级 /// <para>作 者:zhiwei.Tang</para> /// <para>创建时间:2019-02-19</para> /// </summary> /// <param name="input">待添加的班级信息</param> /// <param name="classRoomId">教室Id</param> /// <param name="schoolTimeId">上课时间段Id</param> /// <param name="createUserName">创建人</param> /// <returns>审核中的班级课表信息</returns> private static TblAutClass GetTblAutClass(ClassScheduleRequest input, long classRoomId, long schoolTimeId, string createUserName) { //教室信息 var classRoom = new ClassRoomService(classRoomId).ClassRoomInfo; ValidateObject(classRoom); //上课时间信息 var schoolTime = SchoolTimeService.GetBySchoolTimeId(schoolTimeId); ValidateObject(schoolTime); //根据学期编号获取学期信息 TblDatTerm term = TermService.GetTermByTermId(schoolTime.TermId); ValidateObject(term); //获取课程 TblDatRoomCourse roomCourse = new ClassRoomService(classRoomId).GetByCourseId(input.CourseId).Result; ValidateObject(roomCourse); //复制课表到审核中得到审核主表id long auditId = new TermCourseTimetableAuditService(schoolTime.TermId).VerifyGetAuditId(classRoom.SchoolId); TblAutClass autClass = new TblAutClass { AutClassId = IdGenerator.NextId(), SchoolId = classRoom.SchoolId, ClassId = IdGenerator.NextId(), AuditId = auditId, ClassNo = input.ClassNo, TermId = term.TermId, RoomCourseId = roomCourse.RoomCourseId, ClassRoomId = classRoomId, CourseId = roomCourse.CourseId, CourseLeveId = input.CourseLevelId, TeacherId = input.TeacherId, CourseNum = input.CourseNum, StudentsNum = input.StudentsNum, CreateTime = DateTime.Now, UpdateTime = DateTime.Now, DataStatus = 0 }; return(autClass); }
/// <summary> /// 待添加到审核中上课时间段 /// <para>作 者:zhiwei.Tang</para> /// <para>创建时间:2018-11-23</para> /// </summary> /// <param name="request">待添加的班级信息</param> /// <param name="autClass">审核中的班级</param> /// <param name="hasBeenClassTimeIds">一组已排课的上课时间Id</param> /// <param name="schoolTimeId">要添加的上课时间段Id</param> /// <returns>班级上课时间列表</returns> /// <exception cref="BussinessException"> /// 异常ID:2,异常描述:没有此时间段;时间段已占用;不能与下一个时间段连上;下一个时间段已排课; /// </exception> private static List <TblAutClassTime> GetTblAutClassTimes(ClassScheduleRequest request, TblAutClass autClass, List <long> hasBeenClassTimeIds, long schoolTimeId) { List <TblAutClassTime> res = new List <TblAutClassTime>(); List <TblDatSchoolTime> schoolTimes = new SchoolTimeService(autClass.TermId) .TblDatSchoolTime .OrderBy(x => x.BeginTime) .ToList(); TblDatSchoolTime schoolTime = schoolTimes.FirstOrDefault(x => x.SchoolTimeId == schoolTimeId); ValidateObject(schoolTime); foreach (var weekDay in request.WeekDay) { var dayAllClassTime = schoolTimes .Where(x => x.WeekDay == weekDay && x.Duration == schoolTime.Duration) .OrderBy(x => x.BeginTime) .ToList(); var firstClassTime = dayAllClassTime.FirstOrDefault(x => x.BeginTime == schoolTime.BeginTime && x.EndTime == schoolTime.EndTime); if (firstClassTime == null) { throw new BussinessException(ModelType.Default, 2, $"{WeekDayConvert.IntToString(weekDay)}没有此时间段"); } //判断是否有排课 if (hasBeenClassTimeIds.Any(x => x == firstClassTime.SchoolTimeId)) { throw new BussinessException(ModelType.Default, 2, $"{WeekDayConvert.IntToString(weekDay)}时间段已占用"); } res.Add(new TblAutClassTime { AutClassTimeId = IdGenerator.NextId(), SchoolId = autClass.SchoolId, ClassTimeId = IdGenerator.NextId(), AuditId = autClass.AuditId, ClassId = autClass.ClassId, CreateTime = DateTime.Now, DataStatus = 0, SchoolTimeId = firstClassTime.SchoolTimeId }); if (schoolTime.Duration == (int)TimeType.Ninety && request.IsLink) { int firstIndex = dayAllClassTime.IndexOf(firstClassTime); int secondIndex = firstIndex + 1; //最后一个时间段 if (secondIndex >= dayAllClassTime.Count) { throw new BussinessException(ModelType.Default, 2, $"{WeekDayConvert.IntToString(weekDay)}不能与下一个时间段连上"); } var secondClassTime = dayAllClassTime[secondIndex]; //判断是否有排课 if (hasBeenClassTimeIds.Any(x => x == secondClassTime.SchoolTimeId)) { throw new BussinessException(ModelType.Default, 2, $"{WeekDayConvert.IntToString(weekDay)}下一个时间段已排课"); } res.Add(new TblAutClassTime { AutClassTimeId = IdGenerator.NextId(), ClassTimeId = IdGenerator.NextId(), AuditId = autClass.AuditId, ClassId = autClass.ClassId, CreateTime = DateTime.Now, DataStatus = 0, SchoolId = autClass.SchoolId, SchoolTimeId = secondClassTime.SchoolTimeId }); } } return(res); }