/// <summary>
        /// 生成课程学习计划(包括寒假特训营和暑假特训营)
        /// <para>作    者:郭伟佳</para>
        /// <para>创建时间:2018-11-05</para>
        /// </summary>
        /// <param name="term">课程学习计划详情对象</param>
        /// <param name="numbers">个数</param>
        /// <param name="seasonName">季节名称</param>
        /// <returns>学习课程计划详细信息</returns>
        private StudyPlanTermResponse GenerateStudyPlanTerm(TblOdrStudyPlanTerm term, int numbers, string seasonName)
        {
            StudyPlanTermResponse termResponse = new StudyPlanTermResponse {
                Season = seasonName
            };

            //校区存在学习计划学期,则生成寒假特训营(包括一个和两个的课程)/暑假特训营(包括一个、两个和三个的课程)的课程
            if (term != null)
            {
                for (int j = 1; j < numbers; j++)
                {
                    StudyPlanTermItemResponse termItem = new StudyPlanTermItemResponse
                    {
                        ClassTimes  = term.Classes90 * j,
                        Name        = j.GetNumberCnName() + OrdersConstants.Piece,
                        TermTypeId  = term.TermTypeId,
                        MaterialFee = term.MaterialFee,
                        TuitionFee  = term.TuitionFee,
                        Duration    = 90
                    };
                    termResponse.Data.Add(termItem);
                }
            }
            return(termResponse);
        }
        /// <summary>
        /// 根据出生日期,生成每季节对应的学习计划
        /// <para>作    者:郭伟佳</para>
        /// <para>创建时间:2018-11-29</para>
        /// </summary>
        /// <param name="studyPlanTermList">获取校区学期类型信息</param>
        /// <param name="birthday">出生日期</param>
        /// <returns>学生课程计划列表</returns>
        private List <StudyPlanResponse> GetStudyPlanBySeasons(IEnumerable <TblOdrStudyPlanTerm> studyPlanTermList, DateTime birthday)
        {
            List <StudyPlanResponse> result = new List <StudyPlanResponse>();                                            //学生课程计划列表
            var studyPlanList = _repository.Value.GetList(_schoolId).Result;                                             //校区课程信息
            List <SeasonType>   seasonList = GetSeasonList();                                                            //季节
            TblOdrStudyPlanTerm term       = null;                                                                       //报名学习计划学期信息
            int year     = 0;                                                                                            //年份
            int maxValue = 3;                                                                                            //年份界限值

            //从当前年份开始,以年份界限进行循环,生成年份的学习计划课程
            for (int i = 0; i < maxValue; i++)
            {
                year = DateTime.Now.Year + i;
                var studyPlanTerms = studyPlanTermList.Where(a => a.Year == year);
                StudyPlanResponse studyPlanResponse = new StudyPlanResponse {
                    Year = year
                };
                //循环四个季节,生成季节的学习计划课程
                foreach (var season in seasonList)
                {
                    switch (season)
                    {
                    case SeasonType.Spring:     //春
                        term = studyPlanTerms.FirstOrDefault(a => a.Year == year && a.TermTypeId == ClientConfigManager.AppsettingsConfig.TermType.Spring);
                        studyPlanResponse.Data.Add(GenerateStudyPlanTerm(term, studyPlanList, birthday, season.ToString()));
                        break;

                    case SeasonType.Summer:    //夏
                        term = studyPlanTerms.FirstOrDefault(a => a.Year == year && a.TermTypeId == ClientConfigManager.AppsettingsConfig.TermType.Summer);
                        studyPlanResponse.Data.Add(GenerateStudyPlanTerm(term, 4, season.ToString()));
                        break;

                    case SeasonType.Autumn:    //秋
                        term = studyPlanTerms.FirstOrDefault(a => a.Year == year && a.TermTypeId == ClientConfigManager.AppsettingsConfig.TermType.Autumn);
                        studyPlanResponse.Data.Add(GenerateStudyPlanTerm(term, studyPlanList, birthday, season.ToString()));
                        break;

                    case SeasonType.Winter:    //冬
                        term = studyPlanTerms.FirstOrDefault(a => a.Year == year && a.TermTypeId == ClientConfigManager.AppsettingsConfig.TermType.Winter);
                        studyPlanResponse.Data.Add(GenerateStudyPlanTerm(term, 3, season.ToString()));
                        break;

                    default:
                        break;
                    }
                }
                result.Add(studyPlanResponse);
            }
            return(result);
        }
        /// <summary>
        /// 根据分钟获取对应的课次
        /// <para>作    者:郭伟佳</para>
        /// <para>创建时间:2018-11-05</para>
        /// </summary>
        /// <param name="duration"></param>
        /// <param name="term"></param>
        /// <returns>课次</returns>
        private int GetClassTimesByMinutes(TblOdrStudyPlanTerm term, int duration)
        {
            switch (duration)
            {
            case 60:
                return(term.Classes60);

            case 90:
                return(term.Classes90);

            case 180:
                return(term.Classes180);

            default:
                return(0);
            }
        }
        /// <summary>
        /// 生成课程学习计划(包括春季班和秋季班)
        /// <para>作    者:郭伟佳</para>
        /// <para>创建时间:2018-11-05</para>
        /// </summary>
        /// <param name="term">课程学习计划详情对象</param>
        /// <param name="studyPlanList">课程学习计划对象</param>
        /// <param name="birthday">出生日期</param>
        /// <param name="seasonName">季节名称</param>
        /// <returns>学习课程计划详细信息</returns>
        private StudyPlanTermResponse GenerateStudyPlanTerm(TblOdrStudyPlanTerm term, List <TblOdrStudyPlan> studyPlanList, DateTime birthday, string seasonName)
        {
            StudyPlanTermResponse springTermResponse = new StudyPlanTermResponse {
                Season = seasonName
            };

            //校区存在学习计划学期,则生成春季班/秋季班的课程(包括必修课和选修课)
            if (term != null)
            {
                int age = Age.GetAgeByDate(birthday, term.BeginDate);//学生年龄
                //根据学生年龄,获取对应的学习计划课程
                var studyPlan = studyPlanList.FirstOrDefault(a => a.Age == age);
                if (studyPlan != null)
                {
                    //必修课
                    StudyPlanTermItemResponse requiredItem = new StudyPlanTermItemResponse
                    {
                        ClassTimes    = GetClassTimesByMinutes(term, studyPlan.Duration),//计算出课次
                        Name          = studyPlan.CourseName + (studyPlan.CourseLevelName == OrdersConstants.Nothing ? "" : studyPlan.CourseLevelName.Replace(OrdersConstants.Level, "")),
                        CourseId      = studyPlan.CourseId,
                        CourseLevelId = studyPlan.CourseLevelId,
                        CourseType    = CourseType.Compulsory,
                        TermTypeId    = term.TermTypeId,
                        MaterialFee   = term.MaterialFee,
                        TuitionFee    = term.TuitionFee,
                        Duration      = studyPlan.Duration
                    };
                    springTermResponse.Data.Add(requiredItem);
                }
                //选修课
                StudyPlanTermItemResponse optionalItem = new StudyPlanTermItemResponse
                {
                    Name        = OrdersConstants.OptionalLesson,
                    ClassTimes  = term.Classes90,
                    CourseType  = CourseType.Elective,
                    TermTypeId  = term.TermTypeId,
                    MaterialFee = term.MaterialFee,
                    TuitionFee  = term.TuitionFee,
                    Duration    = 90
                };
                springTermResponse.Data.Add(optionalItem);
            }
            return(springTermResponse);
        }