/// <summary>
        /// 获取已排课的时间段
        /// <para>作    者:zhiwei.Tang</para>
        /// <para>创建时间:2018-11-06</para>
        /// </summary>
        /// <param name="classRooms">教室列表数据</param>
        /// <param name="termId">学期Id</param>
        /// <returns>上课时间段列表</returns>
        private static List <TblDatSchoolTime> GetScheduledTimes(List <TimetableClassRoomResponse> classRooms, long termId)
        {
            List <TblDatSchoolTime> res = new List <TblDatSchoolTime>();

            List <TblDatSchoolTime> schoolTimes = new SchoolTimeService(termId).TblDatSchoolTime;

            foreach (var classRoom in classRooms)                   //教室
            {
                foreach (var @class in classRoom.Classes)           //班级
                {
                    if (@class.ClassId != 0)
                    {
                        if (!res.Any(x => x.SchoolTimeId == @class.SchoolTimeId))
                        {
                            res.Add(schoolTimes.FirstOrDefault(x => x.SchoolTimeId == @class.SchoolTimeId));
                        }
                    }
                }
            }

            return(res.OrderBy(x => x.WeekDay).ThenBy(x => x.BeginTime).ToList());
        }
Esempio n. 2
0
        /// <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);
        }