Exemple #1
0
        /// <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));
        }
Exemple #2
0
        /// <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);
        }
Exemple #3
0
        /// <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);
        }
Exemple #4
0
        /// <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);
        }
Exemple #6
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);
        }