示例#1
0
        /// <summary>
        /// 描述:获取最多可转入的课次
        /// <para>作    者:瞿琦</para>
        /// <para>创建时间:2018-11-7</para>
        /// </summary>
        /// <param name="inClassId">转入班级</param>
        /// <param name="inDate">上课日期</param>
        /// <returns>最多可以转入的课次</returns>

        public int GetChangeInClassCount(long inClassId, DateTime inDate)
        {
            var service  = new DefaultClassService(inClassId);
            var inLesson = service.GetMaximumLessonByFirstTime(inDate);

            return(inLesson);
        }
示例#2
0
        /// <summary>
        /// 校验学生上课时间是否冲突
        /// <para>作    者:zhiwei.Tang</para>
        /// <para>创建时间:2019-03-13</para>
        /// </summary>
        /// <param name="schoolId">校区ID</param>
        /// <param name="studentId">学生ID</param>
        /// <param name="verifyClassTimes">待校验的上课时间段</param>
        /// <param name="lessonType">课次类型</param>
        /// <exception cref="BussinessException">
        /// 异常ID:32 异常描述:与XX班级时间段冲突
        /// </exception>
        protected virtual void VerifyClassTimeCross(
            string schoolId, long studentId, List <VerifyClassTime> verifyClassTimes, LessonType lessonType)
        {
            if (lessonType != LessonType.RegularCourse)
            {
                return;
            }

            List <int> adjustTypes = new List <int> {
                (int)AdjustType.DEFAULT,                //默认
                (int)AdjustType.SUPPLEMENTNOTCONFIRMED, //补签未确认
                (int)AdjustType.SUPPLEMENTCONFIRMED     //补签已确认
            };

            //学生上课时间
            var stuClassTimeList = this.ViewCompleteStudentAttendanceRepository
                                   .GetStudentAttendList(schoolId, studentId, adjustTypes, new List <int> {
                (int)LessonType.RegularCourse
            })
                                   .Select(m => new StudentTimetableDto
            {
                ClassId        = m.ClassId,
                ClassBeginTime = DateTime.Parse($"{m.ClassDate:yyyy-MM-dd} {m.ClassBeginTime}"),
                ClassEndTime   = DateTime.Parse($"{m.ClassDate:yyyy-MM-dd} {m.ClassEndTime}")
            }).ToList();


            foreach (var classTime in verifyClassTimes)
            {
                //今天学生上课时间
                var todayStuClassTimeList = stuClassTimeList
                                            .Where(x => x.ClassBeginTime.Date == classTime.ClassDate.Date)
                                            .ToList();

                if (todayStuClassTimeList.Count == 0)
                {
                    continue;
                }

                DateTime sTime = DateTime.Parse($"{classTime.ClassDate:yyyy-MM-dd} {classTime.ClassBeginTime}");
                DateTime eTime = DateTime.Parse($"{classTime.ClassDate:yyyy-MM-dd} {classTime.ClassEndTime}");
                foreach (var item in todayStuClassTimeList)
                {
                    if ((item.ClassBeginTime <= sTime && sTime <= item.ClassEndTime) || (sTime <= item.ClassBeginTime && item.ClassBeginTime <= eTime))
                    {
                        var datClass = new DefaultClassService(item.ClassId).TblDatClass;
                        if (datClass != null)
                        {
                            throw new BussinessException(ModelType.Timetable, 32, $"与{datClass.ClassNo}班级上课时间冲突");
                        }
                        else
                        {
                            //班级上课时间冲突
                            throw new BussinessException(ModelType.Timetable, 32);
                        }
                    }
                }
            }
        }
示例#3
0
        /// <summary>
        /// 描述:获取转班明细列表
        /// <para>作    者:瞿琦</para>
        /// <para>创建时间:2019-3-6</para>
        /// </summary>
        /// <param name="searcher">列表筛选条件</param>
        /// <returns>转班明细分页列表</returns>
        public PageResult <ChangeClassListResponse> GetChangeClassList(ChangeClassListSearchRequest searcher)
        {
            var viewChangeClassRepository = new ViewTimChangeClassRepository();
            //获取转班明细列表信息
            var timChangeClassList  = viewChangeClassRepository.GetTimeChangeClassList(this._schoolId, searcher);
            var timChangeClassQuery = AutoMapper.Mapper.Map <List <ChangeClassListResponse> >(timChangeClassList.Data);

            var classIdList = new List <long>();

            classIdList.AddRange(timChangeClassQuery.Select(x => x.OutClassId)); //将转出班级Id集合添加到集合
            classIdList.AddRange(timChangeClassQuery.Select(x => x.InClassId));  //将转入班级Id集合添加到集合

            //获取所有的学期类型
            var termTypeService = new TermTypeService();
            var allTermTypeList = termTypeService.GetAll();
            //获取班级信息集合
            var classList = DefaultClassService.GetClassByClassIdAsync(classIdList).Result;
            //获取所有的课程信息
            var courseList = CourseService.GetAllAsync().Result;
            //获取所有的人员
            var userList = EmployeeService.GetAllBySchoolId(_schoolId);

            foreach (var item in timChangeClassQuery)
            {
                //学期类型信息
                var termModel = allTermTypeList.FirstOrDefault(x => x.TermTypeId == item.TermTypeId);
                //转出班级信息
                var outClassModel = classList.FirstOrDefault(x => x.ClassId == item.OutClassId);
                //获取转出班级的课程信息
                var outCourseModel = courseList.FirstOrDefault(x => x.CourseId == outClassModel.CourseId);
                //获取转出班级教师
                var outTeacherModel = userList.FirstOrDefault(x => x.EmployeeId == outClassModel.TeacherId);

                //转入班级信息
                var inClassModel = classList.FirstOrDefault(x => x.ClassId == item.InClassId);
                //获取转入班级的课程信息
                var inCourseModel = courseList.FirstOrDefault(x => x.CourseId == inClassModel.CourseId);
                //获取转入班级老师
                var inTeacherModel = userList.FirstOrDefault(x => x.EmployeeId == inClassModel.TeacherId);

                item.TermTypeName    = termModel == null ? "" : termModel.TermTypeName;     //学期类型
                item.OutClassName    = outCourseModel == null?"": outCourseModel.ClassCnName;
                item.OutClassNo      = outClassModel == null ? "" : outClassModel.ClassNo;
                item.OutClassTeacher = outTeacherModel == null?"": outTeacherModel.EmployeeName;
                item.InClassName     = inCourseModel == null?"": inCourseModel.ClassCnName;
                item.InClassNo       = inClassModel == null?"": inClassModel.ClassNo;
                item.InClassTeacher  = inTeacherModel == null?"": inTeacherModel.EmployeeName;
            }

            var result = new PageResult <ChangeClassListResponse>
            {
                Data        = timChangeClassQuery,
                CurrentPage = timChangeClassList.CurrentPage,
                PageSize    = timChangeClassList.PageSize,
                TotalData   = timChangeClassList.TotalData,
            };

            return(result);
        }
示例#4
0
        /// <summary>
        /// 获取排课数据基础数据源
        /// <para>作    者:zhiwei.Tang</para>
        /// <para>创建时间:2019-02-19</para>
        /// </summary>
        /// <param name="schoolId">校区Id</param>
        /// <param name="classIds">班级Id</param>
        ///  <param name="companyId">公司编号</param>
        /// <returns>返回排课数据源组合的基础数据源</returns>
        private static MakeLessonResponseBasicData GetMakeLessonResponseBasicData(string schoolId, IEnumerable <long> classIds, string companyId)
        {
            MakeLessonResponseBasicData res = new MakeLessonResponseBasicData
            {
                ClassInfos   = DefaultClassService.GetClassByClassIdAsync(classIds).Result,
                ClassRooms   = new SchoolClassRoomService(schoolId).GetAllEnableClassRoom(),
                Courses      = CourseService.GetAllAsync().Result,
                CourseLevels = new CourseLevelService(companyId).GetList().Result
            };

            return(res);
        }
示例#5
0
        /// <summary>
        /// 根据排课Id构建一个课次生产对象
        /// <para>作    者:zhiwei.Tang</para>
        /// <para>创建时间:2019-02-19</para>
        /// </summary>
        /// <param name="makeLessonId">排课Id</param>
        /// <param name="unitOfWork">工作单元</param>
        public MakeLessonCreator(long makeLessonId, UnitOfWork unitOfWork) : base(makeLessonId)
        {
            this._unitOfWork                = unitOfWork;
            _makeLessonRepository           = unitOfWork.GetCustomRepository <TblTimMakeLessonRepository, TblTimMakeLesson>();
            _enrollOrderRepository          = unitOfWork.GetCustomRepository <TblOdrEnrollOrderRepository, TblOdrEnrollOrder>();
            _enrollOrderItemRepository      = unitOfWork.GetCustomRepository <TblOdrEnrollOrderItemRepository, TblOdrEnrollOrderItem>();
            _viewClassTeacherDateRepository = unitOfWork.GetCustomRepository <ViewClassTeacherDateRepository, ViewClassTeacherDate>();
            _viewChangeClassTimeRepository  = unitOfWork.GetCustomRepository <ViewChangeClassTimeRepository, ViewChangeClassTime>();

            _makeLesson               = _makeLessonRepository.Load(makeLessonId);
            _classService             = new DefaultClassService(_makeLesson.ClassId);
            _viewClassTeacherDates    = _viewClassTeacherDateRepository.Get(_makeLesson.ClassId);
            _viewChangeClassTimeDates = _viewChangeClassTimeRepository.Get(_makeLesson.ClassId);
        }
        /// <summary>
        /// 获取已安排补课或调课的详情
        /// <para>作    者:zhiwei.Tang</para>
        /// <para>创建时间:2019-03-12</para>
        /// </summary>
        /// <param name="studentId">学生Id</param>
        /// <param name="lessonId">课次ID</param>
        /// <returns>调课详情/补课详情</returns>
        public StudentReplenishLessonsResponse GetStudentReplenishLessons(long studentId, long lessonId)
        {
            var studentAttendance = _viewCompleteStudentAttendanceRepository.Value.GetLesson(lessonId);

            if (studentAttendance == null)
            {
                //未找到该学生的补课信息
                throw new BussinessException(ModelType.Timetable, 47);
            }

            if (studentAttendance.StudentId != studentId)
            {
                //未找到该学生的补课信息
                throw new BussinessException(ModelType.Timetable, 47);
            }

            //获取一个班级学生的课次信息
            var stuDayAttendances = _viewCompleteStudentAttendanceRepository.Value.GetStudetnDayLessonList(
                studentAttendance.SchoolId, studentAttendance.ClassId, studentAttendance.ClassDate,
                studentId, LessonType.RegularCourse);

            var lessonIds  = stuDayAttendances.Select(x => x.LessonId).ToList();
            var stuLessons = _viewTimReplenishLessonStudentRepository.Value.GetLessonListByParentLessonId(lessonIds);

            if (stuLessons == null || !stuLessons.Any())
            {
                //未找到该学生的补课信息
                throw new BussinessException(ModelType.Timetable, 47);
            }

            var stuLesson = stuLessons.OrderBy(x => x.ClassBeginTime).FirstOrDefault();

            string classTime = string.Join(" ", stuLessons.Select(x => x.ClassBeginTime + "-" + x.ClassEndTime));

            var classInfo = new DefaultClassService(stuLesson.ClassId).TblDatClass;

            StudentReplenishLessonsResponse res = new StudentReplenishLessonsResponse
            {
                ClassId     = stuLesson.ClassId,
                ClassName   = CourseService.GetByCourseId(stuLesson.CourseId)?.ClassCnName,
                ClassRoom   = new ClassRoomService(stuLesson.ClassRoomId).ClassRoomInfo?.RoomNo,
                ClassTime   = classTime,
                ClassDate   = stuLesson.ClassDate.ToString("yyyy.MM.dd"),
                ClassNo     = new DefaultClassService(stuLesson.ClassId).TblDatClass?.ClassNo,
                TeacherName = TeachService.GetTeacher(stuLesson.TeacherId)?.TeacherName,
                Week        = WeekDayConvert.DayOfWeekToString(stuLesson.ClassDate.DayOfWeek)
            };

            return(res);
        }
        /// <summary>
        /// 描述:根据学期获取本学期正式班级里面的课程信息
        /// <para>作    者:瞿琦</para>
        /// <para>创建时间:2018-10-17</para>
        /// </summary>
        /// <param name="termId">学期id</param>
        /// <returns>已通过课程信息列表</returns>

        public static List <ClassCourseResponse> GetTermClassCourseInfo(long termId)
        {
            var termClassList = DefaultClassService.GetClasssByTermId(termId);
            //所有课程
            var courseList = new TblDatCourseRepository().LoadList(x => x.IsDisabled == false);
            //校区所属课程

            var termClassCourseList = (from x1 in courseList
                                       join x2 in termClassList on x1.CourseId equals x2.CourseId
                                       select new ClassCourseResponse
            {
                CourseId = x1.CourseId,
                ClassCnName = x1.ClassCnName
            }).ToList();

            return(termClassCourseList);
        }
        /// <summary>
        /// 微信通知
        /// <para>作    者:zhiwei.Tang</para>
        /// <para>创建时间:2019-03-15</para>
        /// </summary>
        private void PushWeChatNoticeStart(List <ViewStudentScanCodeAttend> stuAttends, DateTime attendTime)
        {
            List <long> cIds = stuAttends.Select(x => x.ClassId).Distinct().ToList();

            foreach (var item in cIds)
            {
                var    temp          = stuAttends.Where(x => x.ClassId == item).ToList();
                var    model         = temp.FirstOrDefault();
                var    classTimeList = temp.Select(x => x.ClassBeginTime + "-" + x.ClassEndTime);
                string classTime     = $"{model.ClassDate:yyyy.MM.dd} {string.Join("、", classTimeList)}"; //上课时间段
                var    classService  = new DefaultClassService(item);
                var    classInfo     = classService.TblDatClass;
                var    classRoom     = new ClassRoomService(classInfo.ClassRoomId).ClassRoomInfo.RoomNo; //教室门牌号

                var className = CourseService.GetByCourseId(classInfo.CourseId)?.ClassCnName;            //班级名称

                PushWeChatNotice(className, classTime, classRoom, attendTime);
            }
        }
示例#9
0
        /// <summary>
        /// 获取排课基础数据
        /// <para>作    者:zhiwei.Tang</para>
        /// <para>创建时间:2019-02-19</para>
        /// </summary>
        /// <param name="classId">班级Id</param>
        /// <remarks>排课基础数据</remarks>
        private CourseBasicData GetCourseBasicData(IEnumerable <long> classId)
        {
            CourseBasicData courseBasicData = new CourseBasicData
            {
                Classs = DefaultClassService.GetClassByClassIdAsync(classId).Result //班级
            };

            //学期
            courseBasicData.Terms = TermService.GetTermByTermId(courseBasicData.Classs.Select(x => x.TermId));

            //所有课程
            courseBasicData.Courses = CourseService.GetAllAsync().Result;

            //所有课程等级
            courseBasicData.CourseLvs = CourseLevelService.GetAll();

            //老师
            courseBasicData.Teachers = TeachService.GetTeachers();

            return(courseBasicData);
        }
示例#10
0
        /// <summary>
        /// 获取排课课次信息
        /// <para>作    者:zhiwei.Tang</para>
        /// <para>创建时间:2019-02-19</para>
        /// </summary>
        /// <param name="classInfo">班级信息</param>
        /// <param name="companyId">公司编号</param>
        /// <returns>排课课次信息</returns>
        private static MakeLessonResponse GetMakeLessonResponse(ClassInfo classInfo, string companyId)
        {
            MakeLessonResponse response = new MakeLessonResponse
            {
                ClassId         = classInfo.ClassId,
                ClassName       = classInfo.ClassName,
                ClassNo         = classInfo.ClassNo,
                CourseLeaveName = classInfo.LevelName,
                RoomNo          = classInfo.RoomNo,
                Week            = new List <string>(),
                ClassTime       = new List <string>()
            };

            DefaultClassService classService = new DefaultClassService(classInfo.ClassId);

            for (int i = 1; i <= 7; i++)
            {
                var schoolTimes = classService.ClassSchoolTimes.Where(x => x.WeekDay == i).ToList();

                if (schoolTimes.Count == 0)
                {
                    continue;
                }

                response.ClassTime.Add(WeekDayConvert.IntToString(i));

                foreach (var item in schoolTimes)
                {
                    var time = item.BeginTime + "-" + item.EndTime;

                    if (response.ClassTime.Any(x => x == time))
                    {
                        continue;
                    }
                    response.ClassTime.Add(time);
                }
            }

            return(response);
        }
示例#11
0
        /// <summary>
        /// 获取需要生成的写生课和课次不够的学生列表
        /// <para>作    者:郭伟佳</para>
        /// <para>创建时间:2018-11-20</para>
        /// </summary>
        /// <param name="request">学期班级学生实体请求对象</param>
        /// <param name="lifeClassInfo">写生课信息</param>
        /// <param name="studentLessonList">学生课次基础信息表</param>
        /// <param name="enrollItemList">学生报名订单课程明细信息</param>
        /// <returns>
        /// 1、学生课次不够的信息列表
        /// 2、写生课排课列表
        /// 3、写生学生班级列表
        /// </returns>
        private (List <LifeClassLackTimesListResponse>, List <LifeClassLessonMakeRequest>, List <LifeClassStudentClassResponse>) GetLifeClassLesson(List <TimeLessonClassRequest> request,
                                                                                                                                                    TblTimLifeClass lifeClassInfo,
                                                                                                                                                    IEnumerable <ViewTimeLessonClass> studentLessonList,
                                                                                                                                                    List <TblOdrEnrollOrderItem> enrollItemList)
        {
            //课次基础信息表
            var lessonInfoList = studentLessonList.Where(a => request.Any(x => x.TermId == a.TermId && x.ClassId == a.ClassId));

            //获取剩余课次不够写生课扣减课次的学生列表
            var enrollOrderItemInfo = from a in enrollItemList
                                      join b in lessonInfoList on a.EnrollOrderItemId equals b.EnrollOrderItemId
                                      where a.Status == (int)OrderItemStatus.Enroll
                                      select new LifeClassStudentListResponse
            {
                ClassTimes        = a.ClassTimes,
                ClassTimesUse     = a.ClassTimesUse,
                EnrollOrderItemId = b.EnrollOrderItemId,
                StudentId         = b.StudentId,
                ClassId           = b.ClassId
            };

            //获取班级信息
            List <TblDatClass> classInfoList = DefaultClassService.GetClassByClassIdAsync(request.Select(a => a.ClassId).ToList()).Result;

            //根据写生课Id,获取写生课对应的课次基础信息列表
            var lifeInfoList = _timLessonRepository.Value.GetStudentLessonListAsync(_schoolId, new List <long> {
                _lifeClassId
            });

            //课次不够扣的学生列表
            List <LifeClassLackTimesListResponse> notEnoughTimeList = GetNotEnoughTimeStudnetList(lifeClassInfo, enrollOrderItemInfo, classInfoList, lifeInfoList);

            //课次够扣的报班学生列表和学生多班级列表
            (List <LifeClassLessonMakeRequest>, List <LifeClassStudentClassResponse>)lifeLessonList = GetEnoughTimeStudentList(lifeClassInfo, enrollOrderItemInfo, classInfoList, lifeInfoList);

            return(notEnoughTimeList, lifeLessonList.Item1, lifeLessonList.Item2);
        }
示例#12
0
        /// <summary>
        /// 处理排课课次
        /// <para>作    者:zhiwei.Tang</para>
        /// <para>创建时间:2018-11-08</para>
        /// </summary>
        /// <param name="classId">班级Id</param>
        /// <param name="classTimes">预计排课课次</param>
        /// <param name="firstTime">首次上课时间</param>
        /// <returns>实际需要排多少次课</returns>
        private int GetClassTimes(long classId, int classTimes, DateTime firstTime)
        {
            int maximumLesson = new DefaultClassService(classId).GetMaximumLessonByFirstTime(firstTime);

            return(maximumLesson < classTimes ? maximumLesson : classTimes);
        }
示例#13
0
        /// <summary>
        /// 获取的排课详情
        /// <para>作    者:zhiwei.Tang</para>
        /// <para>创建时间:2018-11-06</para>
        /// </summary>
        /// <param name="enrollOrderItemId">报名课程订单Id</param>
        /// <returns>学生报名一个课程的排课详细信息</returns>
        public MakeLessonDetailResponse GetMakeLessonDetail(long enrollOrderItemId)
        {
            MakeLessonDetailResponse res = new MakeLessonDetailResponse
            {
                CourseInfos = new List <CourseInformation>()
            };

            TblOdrEnrollOrderItem enrollOrderItem = _enrollOrderItemRepository.Load(enrollOrderItemId);
            TblOdrEnrollOrder     enrollOrder     = _enrollOrderRepository.Load(enrollOrderItem.EnrollOrderId);

            TblDatCourse course = CourseService.GetByCourseId(enrollOrderItem.CourseId);

            res.RegisterInfo = new RegisterInformation()
            {
                ClassTimes    = enrollOrderItem.ClassTimes,
                ClassTimesUse = enrollOrderItem.ClassTimesUse,
                CourseName    = string.Empty,
                LevelName     = CourseLevelService.GetById(enrollOrderItem.CourseLevelId)?.LevelCnName ?? string.Empty,
                Year          = enrollOrderItem.Year,
                CourseType    = CourseType.Elective,
                TermTypeId    = enrollOrderItem.TermTypeId,
                TermTypeName  = TermTypeService.GetTermTypeName(enrollOrderItem.TermTypeId),
                EnrollDate    = enrollOrder.CreateTime
            };

            if (course != null)
            {
                res.RegisterInfo.CourseName = course.ShortName;
                res.RegisterInfo.CourseType = CourseType.Compulsory;
            }

            List <TblTimMakeLesson> makeLessons =
                _makeLessonRepository.GetUnconfirmedMakeLessonList(enrollOrderItem.EnrollOrderItemId);

            if (makeLessons.Any())
            {
                List <long> classIds = makeLessons.Select(x => x.ClassId).ToList();

                List <TblDatClass> classes = DefaultClassService.GetClassByClassIdAsync(classIds).Result;

                List <ViewRoomCourse> classRooms = ClassRoomService.GetClassRoomBySchoolId(enrollOrder.SchoolId);

                //老师
                var teacherList = TeachService.GetTeachers();

                foreach (var makeLesson in makeLessons)
                {
                    var classInfo        = classes.FirstOrDefault(x => x.ClassId == makeLesson.ClassId);
                    var classSchoolTimes = new DefaultClassService(classInfo.ClassId).ClassSchoolTimes;
                    //老师信息
                    var teacher = teacherList.FirstOrDefault(x => x.TeacherId == classInfo.TeacherId);

                    CourseInformation courseInformation = new CourseInformation
                    {
                        ClassId        = classInfo.ClassId,
                        Year           = enrollOrderItem.Year,
                        ClassNo        = classInfo.ClassNo,
                        ClassTimesUse  = makeLesson.ClassTimes,
                        CourseName     = course?.ShortName ?? string.Empty,
                        FirstClassTime = makeLesson.FirstClassTime,
                        RoomNo         = classRooms.FirstOrDefault(x => x.ClassRoomId == classInfo.ClassRoomId)?.RoomNo ?? string.Empty,
                        LevelName      = CourseLevelService.GetById(classInfo.CourseLeveId)?.LevelCnName ?? string.Empty,
                        TeacherName    = teacher?.TeacherName ?? string.Empty,
                        TermName       = TermService.GetTermByTermId(classInfo.TermId)?.TermName ?? string.Empty,
                        Week           = classSchoolTimes.Select(x => x.WeekDay)
                                         .Distinct()
                                         .OrderBy(x => x)
                                         .Select(x => WeekDayConvert.IntToString(x))
                                         .ToList(),
                        PeriodTime = new List <string>()
                    };

                    foreach (var item in classSchoolTimes)
                    {
                        string time = item.BeginTime + "-" + item.EndTime;
                        if (courseInformation.PeriodTime.Any(x => x == time))
                        {
                            continue;
                        }
                        courseInformation.PeriodTime.Add(time);
                    }

                    res.CourseInfos.Add(courseInformation);
                }
            }

            return(res);
        }
        /// <summary>
        /// 描述:获取可转入的课次信息
        /// <para>作    者:瞿琦</para>
        /// <para>创建时间:2018-11-7</para>
        /// </summary>
        /// <exception cref="AMS.Core.BussinessException">
        /// 异常Id:1,异常描述:未找到数据
        /// 异常Id:71,异常描述:转入班级时间段和课次信息调整时间段不一致
        /// </exception>
        /// <returns>可转入课次信息列表</returns>
        public List <LessonCreatorInfo> GetLessonCreatorInfo()
        {
            var result = new List <LessonCreatorInfo>();
            //获取转入班级信息
            var classService = new DefaultClassService(base._entity.InClassId);
            var firstTime    = base._entity.InDate;
            //1.获取学期信息
            var termInfo = TermService.GetTermByTermId(classService.TblDatClass.TermId);

            if (termInfo == null)
            {
                throw new BussinessException(ModelType.Default, 1);
            }
            //2.获取停课日
            var schoolHoliday = TermService.GetSchoolHoliday(termInfo);

            //首次上课时间大于学期结束时间则没有课次
            if (firstTime > termInfo.EndDate)
            {
                return(result);
            }
            //首次上课时间小于学期开始时间,则首次上课时间等于学期开始时间
            if (firstTime < termInfo.BeginDate)
            {
                firstTime = termInfo.BeginDate;
            }

            while (firstTime <= termInfo.EndDate)
            {
                //上课时间大于学期结束时间或者预计排课课次等于实际排课课次,则停止排课
                if (firstTime > termInfo.EndDate || _entity.ClassTimes == _actualLesson)
                {
                    break;
                }

                var isClosed = SchoolHolidayService.TodayIsSuspendClasses(schoolHoliday, firstTime);
                //当前时间是否是停课日,如果是则加1
                if (isClosed)
                {
                    firstTime = firstTime.AddDays(1);
                    continue;
                }
                //星期转换
                var week = WeekDayConvert.DayOfWeekToInt(firstTime);
                //获取与当前时间匹配的班级上课时间
                var schoolTimes = classService.ClassSchoolTimes.Where(x => x.WeekDay == week).OrderBy(x => x.BeginTime).ToList();

                //获取班级是否有课程信息调整(上课日期和上课时间段 修改)
                var classDateChangeList = _viewChangeClassTimeDates.Where(x => x.OldClassDate == firstTime).OrderBy(x => x.NewClassBeginTime).ToList();
                if (classDateChangeList.Count > 0 && classDateChangeList.Count != schoolTimes.Count)  //如果班级设置的上课时间段和课程调整的时间段不一致则抛出异常
                {
                    throw new BussinessException(ModelType.Timetable, 71);
                }
                var lessonCount = 0;
                foreach (var time in schoolTimes)
                {
                    var lesson = new LessonCreatorInfo
                    {
                        BusinessId        = base._entity.ChangeClassId,
                        BusinessType      = base.BusinessType,
                        ClassId           = base._entity.InClassId,
                        ClassDate         = firstTime,
                        ClassBeginTime    = time.BeginTime,
                        ClassEndTime      = time.EndTime,
                        ClassRoomId       = classService.TblDatClass.ClassRoomId,
                        CourseId          = classService.TblDatClass.CourseId,
                        CourseLevelId     = classService.TblDatClass.CourseLeveId,
                        EnrollOrderItemId = _enrollOrderItemId,
                        SchoolId          = termInfo.SchoolId,
                        StudentId         = base._entity.StudentId,
                        TeacherId         = classService.TblDatClass.TeacherId,
                        TermId            = termInfo.TermId
                    };
                    //获取是否有老师调课
                    var teacherLessonChangeInfo = _viewClassTeacherDates.FirstOrDefault(x => x.ClassId == lesson.ClassId && x.ClassDate == lesson.ClassDate);
                    if (teacherLessonChangeInfo != null && teacherLessonChangeInfo.TeacherId.Trim() != lesson.TeacherId.Trim())
                    {
                        lesson.TeacherId = teacherLessonChangeInfo.TeacherId;
                    }
                    //获取班级是否有修改上课日期和上课时间段,并赋值
                    if (classDateChangeList.Any())
                    {
                        lesson.ClassDate      = classDateChangeList[lessonCount].NewClassDate;
                        lesson.ClassBeginTime = classDateChangeList[lessonCount].NewClassBeginTime;
                        lesson.ClassEndTime   = classDateChangeList[lessonCount].NewClassEndTime;
                    }
                    result.Add(lesson);
                    lessonCount++;
                    //实际排课课次+1
                    _actualLesson++;
                }
                firstTime = firstTime.AddDays(1);
            }
            return(result);
        }
示例#15
0
        /// <summary>
        /// 复制正式学期排课数据到草稿
        /// <para>作    者:zhiwei.Tang</para>
        /// <para>创建时间:2018-09-25</para>
        /// </summary>
        /// <returns>得到审核Id</returns>
        private long CopyClassToAutClass()
        {
            //获取所有班级信息
            var classes = DefaultClassService.GetClasssByTermId(_termId);
            //获取班级所有上课时间段
            var classTime = DefaultClassService.GetClassTimeByClassId(classes.Select(x => x.ClassId));

            TblAutAudit autAudit = new TblAutAudit
            {
                AuditId        = IdGenerator.NextId(),
                CreateTime     = DateTime.Now,
                AuditDate      = DateTime.Now,
                AuditStatus    = (int)AuditStatus.WaitAudit,
                AuditUserId    = string.Empty,
                AuditUserName  = string.Empty,
                BizType        = (int)AuditBusinessType.TermCourseTimetable,
                DataExt        = string.Empty,
                DataExtVersion = string.Empty,
                ExtField1      = _termId.ToString(),
                ExtField2      = string.Empty,
                FlowNo         = string.Empty,
                UpdateTime     = DateTime.Now,
                SchoolId       = base.TblAutAudit.SchoolId,
                CreateUserId   = string.Empty,
                CreateUserName = string.Empty
            };

            List <TblAutClass> autClasses = classes.Select(x => new TblAutClass
            {
                AutClassId   = IdGenerator.NextId(),
                AuditId      = autAudit.AuditId,
                ClassId      = x.ClassId,
                ClassNo      = x.ClassNo,
                ClassRoomId  = x.ClassRoomId,
                CourseId     = x.CourseId,
                CourseLeveId = x.CourseLeveId,
                CourseNum    = x.CourseNum,
                CreateTime   = DateTime.Now,
                DataStatus   = 0,
                RoomCourseId = x.RoomCourseId,
                StudentsNum  = x.StudentsNum,
                TeacherId    = x.TeacherId,
                TermId       = x.TermId,
                UpdateTime   = DateTime.Now,
                SchoolId     = base.TblAutAudit.SchoolId
            }).ToList();

            List <TblAutClassTime> autClassTime = classTime.Select(x => new TblAutClassTime
            {
                AutClassTimeId = IdGenerator.NextId(),
                AuditId        = autAudit.AuditId,
                ClassId        = x.ClassId,
                ClassTimeId    = x.ClassTimeId,
                CreateTime     = DateTime.Now,
                DataStatus     = 0,
                SchoolTimeId   = x.SchoolTimeId,
                SchoolId       = base.TblAutAudit.SchoolId
            }).ToList();

            //TODO:事物
            Task[] tasks = new Task[3];
            tasks[0] = _tblAutAuditRepository.AddTask(autAudit);
            tasks[1] = _tblAutClassRepository.Value.SaveTask(autClasses);
            tasks[2] = _tblAutClassTimeRepository.Value.SaveTask(autClassTime);

            Task.WaitAll(tasks);

            return(autAudit.AuditId);
        }
示例#16
0
        /// <summary>
        /// 添加补课周课次
        /// <para>作    者:Huang GaoLiang </para>
        /// <para>创建时间:2019-03-12 </para>
        /// </summary>
        ///  <param name="replenishWeekClassTime">安排补课参数信息</param>
        public void AddClassTime(ReplenishWeekClassTimeAddRequest replenishWeekClassTime)
        {
            lock (LocalThreadLock.GetLockKeyName(LockKeyNames.LOCK_AMSSCHOOLSTUDENT, this._schoolId, replenishWeekClassTime.StudentId.ToString()))
            {
                // 1、根据编辑编号查询原班级信息
                TblDatClass oldDatClass = new DefaultClassService(replenishWeekClassTime.ClassId).TblDatClass;

                // 2、获取学生缺课的课次信息
                List <ViewStudentTimeLess> studentTimeLessList = GetStudentMissClassList(replenishWeekClassTime);

                // 3、数据校验
                CheckDatClass(oldDatClass, replenishWeekClassTime.WeekClassTimeList.Count, studentTimeLessList.Count);

                // 获取补课日期中该老师所有的课次
                var classDates       = replenishWeekClassTime.WeekClassTimeList.Select(m => m.ClassDate).Distinct().ToList();
                var teacherClassList = new ViewTimAttendLessonRepository().GetClassDateTimAttendLessonList(this._schoolId, this._teacherId, classDates);

                this.ValidationLesson(replenishWeekClassTime.WeekClassTimeList, teacherClassList);


                // 4、获取所有补课周补课中的补课数据
                List <TblTimAdjustLesson> timAdjustLessonList = GetTimAdjustLessonList();

                // 用户补课周补课班级编号生成
                var classNo = string.Empty;
                classNo = oldDatClass.ClassNo.Substring(0, oldDatClass.ClassNo.IndexOf('-') + 1);

                // 5、根据上课教室编号,查询教室信息
                var roomIds = replenishWeekClassTime.WeekClassTimeList.Select(m => m.ClassRoomId).Distinct().ToList();
                List <TblDatClassRoom> datClassRooms = ClassRoomService.GetClassRoomListByIds(roomIds);

                List <TblTimAdjustLesson> adjustLessonList = new List <TblTimAdjustLesson>(); //业务调整表数据集合
                List <TblDatClass>        newClassList     = new List <TblDatClass>();        //补课周班级集合

                List <WeekClassTime> replenishWeekList = new List <WeekClassTime>();

                int index = 0;

                var batchNo = IdGenerator.NextId();
                foreach (var m in replenishWeekClassTime.WeekClassTimeList)
                {
                    var studentTimeLess = studentTimeLessList[index];
                    replenishWeekClassTime.EnrollOrderItemId = studentTimeLess.EnrollOrderItemId;
                    replenishWeekClassTime.CourseId          = studentTimeLess.CourseId;
                    replenishWeekClassTime.CourseLevelId     = studentTimeLess.CourseLevelId;
                    replenishWeekClassTime.TeacherId         = studentTimeLess.TeacherId;

                    // 补课周补课班级编号生成规则
                    var newClassNo = $"{classNo}{datClassRooms.FirstOrDefault(x => x.ClassRoomId == m.ClassRoomId).RoomNo }{WeekDayConvert.DayOfWeekToInt(m.ClassDate)}{GetTimeNumNo(m.ClassBeginTime, m.ClassEndTime, oldDatClass.ClassNo)}{WeekClassNo}";

                    SetDatClass(replenishWeekClassTime, oldDatClass, timAdjustLessonList, newClassNo, newClassList, adjustLessonList, m, replenishWeekList, studentTimeLess, batchNo);

                    WeekClassTime week = new WeekClassTime
                    {
                        ClassDate   = m.ClassDate,
                        ClassRoomId = m.ClassRoomId
                    };
                    replenishWeekList.Add(week);

                    index++;
                }

                using (var unitOfWork = new UnitOfWork())
                {
                    try
                    {
                        unitOfWork.BeginTransaction();

                        // 1、写入调整课次业务表
                        unitOfWork.GetCustomRepository <TblTimAdjustLessonRepository, TblTimAdjustLesson>().Add <TblTimAdjustLesson>(adjustLessonList);

                        // 2、创建补课周补课班级
                        unitOfWork.GetCustomRepository <TblDatClassRepository, TblDatClass>().Add(newClassList);

                        // 3、调用课次服务
                        var adjustLessonReplenishWeekCreator = new AdjustLessonReplenishWeekCreator(replenishWeekClassTime, adjustLessonList, studentTimeLessList, replenishWeekClassTime.StudentId, replenishWeekClassTime.TermId, this._schoolId, this._teacherId);

                        ReplenishLessonService replenishLessonService = new ReplenishLessonService(unitOfWork);
                        replenishLessonService.Create(adjustLessonReplenishWeekCreator);

                        unitOfWork.CommitTransaction();
                    }
                    catch (Exception ex)
                    {
                        unitOfWork.RollbackTransaction();
                        throw ex;
                    }
                }
            }
        }