/// <summary> /// <para>作 者: Huang GaoLiang </para> /// <para>创建时间: 2019-02-19</para> /// </summary> /// <param name="schoolTimeId">上课时间段编号</param> /// <returns>返回上课时间段信息</returns> public static SchoolTimeService CreateSchoolTimeService(long schoolTimeId) { TblDatSchoolTimeRepository repository = new TblDatSchoolTimeRepository(); TblDatSchoolTime entity = repository.Load(schoolTimeId); return(new SchoolTimeService(entity.TermId)); }
/// <summary> /// 修改班级课表 /// <para>作 者:zhiwei.Tang</para> /// <para>创建时间:2018-09-25</para> /// </summary> /// <param name="classId">班级Id</param> /// <param name="request">学期班级排课课表修改</param> /// <param name="createUserName">创建人用户名称</param> /// <returns></returns> public async Task ModifyClassAsync(long classId, EditClassScheduleRequest request, string createUserName) { //1.校验并获取审核Id long auditId = VerifyGetAuditId(base.TblAutAudit.SchoolId); //2.获取待修改的班级 var waitEditClass = await _tblAutClassRepository.Value.GetAsync(auditId, classId); if (waitEditClass == null) { throw new BussinessException(ModelType.Default, 1); } //3.判断老师是否修改,有则校验老师上课时间段是否冲突 if (waitEditClass.TeacherId != request.TeacherId) { var classTime = _tblAutClassTimeRepository.Value.GetByClassId(auditId, classId).Result.Select(x => x.SchoolTimeId); TblDatSchoolTime schoolTime = SchoolTimeService.GetBySchoolTimeId(classTime.FirstOrDefault()); //校验老师是否重复 VerifyTeacherOccupy(classTime, request.TeacherId, schoolTime.TermId); } //4.准备数据 waitEditClass.CourseId = request.CourseId; waitEditClass.CourseLeveId = request.CourseLevelId; waitEditClass.ClassNo = request.ClassNo; waitEditClass.TeacherId = request.TeacherId; waitEditClass.CourseNum = request.CourseNum; waitEditClass.StudentsNum = request.StudentsNum; //5.写入更新的班级数据 await _tblAutClassRepository.Value.UpdateTask(waitEditClass); }
/// <summary> /// 根据主键删除一条上课时间段 /// <para>作 者:Huang GaoLiang </para> /// <para>创建时间:2018-09-07 </para> /// </summary> /// <param name="schoolTimeId">上课时间段主键编号</param> /// <exception cref="AMS.Core.BussinessException"> /// 异常ID:7,上课时间段编号不能为空 /// </exception> public static async Task Remove(long schoolTimeId) { if (schoolTimeId < 1) { throw new BussinessException((byte)ModelType.Datum, 7); } // 1、查询需要数据的删除 TblDatSchoolTimeRepository schoolTimeRepository = new TblDatSchoolTimeRepository(); TblDatSchoolTime schoolTime = await schoolTimeRepository.LoadTask(schoolTimeId); // 2、校验是否可以删除(在课表中被使用的时间段不允许被删除) CanDelete(schoolTimeId, schoolTime.TermId); List <TblDatSchoolTime> schoolTimeList = new List <TblDatSchoolTime>(); schoolTimeList = await SchoolTimeCombinated(schoolTimeRepository, schoolTime, schoolTimeList); await schoolTimeRepository.DeleteTask(schoolTime.TermId, schoolTime.WeekDay, schoolTime.Duration); await schoolTimeRepository.AddTask(schoolTimeList); }
/// <summary> /// 重新构造上课时间段编号 /// <para>作 者:Huang GaoLiang </para> /// <para>创建时间:2018-09-07 </para> /// </summary> /// <param name="schoolTimeRepository">上课时间段仓储</param> /// <param name="schoolTime">上课时间段实体</param> /// <param name="schoolTimeList">上课时间段集合</param> /// <returns>返回上课时间段编号集合</returns> private static async Task <List <TblDatSchoolTime> > SchoolTimeCombinated(TblDatSchoolTimeRepository schoolTimeRepository, TblDatSchoolTime schoolTime, List <TblDatSchoolTime> schoolTimeList) { // 判断上课时间段数据是否为空 if (schoolTime != null) { schoolTimeList = await schoolTimeRepository.Get(schoolTime.TermId, schoolTime.WeekDay, schoolTime.Duration); schoolTimeList = schoolTimeList.Where(m => m.SchoolTimeId != schoolTime.SchoolTimeId).OrderBy(m => m.Duration).ThenBy(m => m.BeginTime).ToList(); int sixtyclassTimeNo = 0; int ninetyclassTimeNo = 0; foreach (TblDatSchoolTime item in schoolTimeList) { // 60分钟的编号加上S if (item.Duration == (int)TimeType.Sixty) { sixtyclassTimeNo++; item.ClassTimeNo = "S" + sixtyclassTimeNo; } // 90分钟的编号加上M if (item.Duration == (int)TimeType.Ninety) { ninetyclassTimeNo++; item.ClassTimeNo = "M" + sixtyclassTimeNo; } } } return(schoolTimeList); }
/// <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); }
/// <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); }