public IActionResult ProgramJson(TrainerLevelType level = TrainerLevelType.Intermediate,
                                         DaysType days          = DaysType.FourDays, TemplateType templateType = TemplateType.ABC)
        {
            var template = GetTemplate(level, days, templateType.ToString());
            var program  = new FitnessProgram {
                Template = template
            };

            return(new JsonResult(GetProgramViewModel(program)));
        }
        public IActionResult GenerateProgram(TrainerLevelType level, DaysType days, string templateType)
        {
            var template = GetTemplate(level, days, templateType);
            var program  = new FitnessProgram {
                Template = template
            };

            HttpContext.Session.Set($"{ProgramSessionPrefix}{program.Created}", program);

            var vm = GetProgramViewModel(program);

            return(View("Program", vm));
        }
예제 #3
0
        //按小时统计;参数daysType取值1、2或3,表示只考虑工作日、只考虑双休日或全部考虑;参数dateEnd表示统计从当前时间至多久前的数据
        static List <int> DistributionBasedOnHour(DaysType daysType, DateTime dateEnd)
        {
            List <int> resultList = new List <int>(24);//每个元素对应1小时,分别统计在该小时内发出的微博的频数

            for (int i = 0; i < 24; i++)
            {
                resultList.Add(0);
            }
            foreach (Feed feed in user.FeedList)
            {
                DateTime dateOfFeed = DateTime.ParseExact(feed.Time, "yyyy-MM-dd HH:mm", null);
                if (dateEnd < dateOfFeed)
                {
                    switch (daysType)
                    {
                    case DaysType.Weekdays:
                        if (dateOfFeed.DayOfWeek >= DayOfWeek.Monday && dateOfFeed.DayOfWeek <= DayOfWeek.Friday)
                        {
                            resultList[dateOfFeed.Hour]++;
                        }
                        break;

                    case DaysType.Weekends:
                        if (dateOfFeed.DayOfWeek.Equals(DayOfWeek.Saturday) || dateOfFeed.DayOfWeek.Equals(DayOfWeek.Sunday))
                        {
                            resultList[dateOfFeed.Hour]++;
                        }
                        break;

                    default:
                        resultList[dateOfFeed.Hour]++;
                        break;
                    }
                }
                else
                {
                    break;
                }
            }
            return(resultList);
        }
예제 #4
0
 //按小时统计;参数daysType取值1、2或3,表示只考虑工作日、只考虑双休日或全部考虑;参数dateEnd表示统计从当前时间至多久前的数据
 static List<int> DistributionBasedOnHour(DaysType daysType, DateTime dateEnd)
 {
     List<int> resultList = new List<int>(24);//每个元素对应1小时,分别统计在该小时内发出的微博的频数
     for (int i = 0; i < 24; i++)
     {
         resultList.Add(0);
     }
     foreach (Feed feed in user.FeedList)
     {
         DateTime dateOfFeed = DateTime.ParseExact(feed.Time, "yyyy-MM-dd HH:mm", null);
         if (dateEnd < dateOfFeed)
         {
             switch (daysType)
             {
                 case DaysType.Weekdays:
                     if (dateOfFeed.DayOfWeek >= DayOfWeek.Monday && dateOfFeed.DayOfWeek <= DayOfWeek.Friday)
                     {
                         resultList[dateOfFeed.Hour]++;
                     }
                     break;
                 case DaysType.Weekends:
                     if (dateOfFeed.DayOfWeek.Equals(DayOfWeek.Saturday) || dateOfFeed.DayOfWeek.Equals(DayOfWeek.Sunday))
                     {
                         resultList[dateOfFeed.Hour]++;
                     }
                     break;
                 default:
                     resultList[dateOfFeed.Hour]++;
                     break;
             }
         }
         else
         {
             break;
         }
     }
     return resultList;
 }
        private Template GetTemplate(TrainerLevelType level, DaysType days, string templateType)
        {
            Template        template        = null;
            TemplateFactory templateFactory = new TemplateFactory(level);

            if (templateType != "DecideForMe")
            {
                template = templateFactory.CreateBasicTemplate(Enum.Parse <TemplateType>(templateType));
            }
            else
            {
                Random random;
                if (days <= DaysType.TwoDays)
                {
                    //FBW
                    template = templateFactory.CreateBasicTemplate(TemplateType.FBW);
                }

                if (days == DaysType.ThreeDays)
                {
                    if (level == TrainerLevelType.Novice)
                    {
                        //FBW
                        template = templateFactory.CreateBasicTemplate(TemplateType.FBW);
                    }

                    if (level == TrainerLevelType.Intermediate)
                    {
                        //FBW/AB (random)
                        var list = new TemplateType[] { TemplateType.AB };
                        random   = new Random();
                        template = templateFactory.CreateBasicTemplate(list[random.Next(list.Length)]);
                    }

                    if (level >= TrainerLevelType.Advanced)
                    {
                        //AB
                        template = templateFactory.CreateBasicTemplate(TemplateType.AB);
                    }
                }

                if (days == DaysType.FourDays)
                {
                    if (level <= TrainerLevelType.Intermediate)
                    {
                        //AB
                        template = templateFactory.CreateBasicTemplate(TemplateType.AB);
                    }

                    if (level >= TrainerLevelType.Advanced)
                    {
                        // AB, ABC, ABCD (random)
                        var list = new TemplateType[] { TemplateType.ABCD, TemplateType.AB, TemplateType.ABC };
                        random   = new Random();
                        template = templateFactory.CreateBasicTemplate(list[random.Next(list.Length)]);
                    }
                }

                if (days == DaysType.FiveDays)
                {
                    if (level <= TrainerLevelType.Advanced)
                    {
                        //ABC
                        template = templateFactory.CreateBasicTemplate(TemplateType.ABC);
                    }
                    else
                    {
                        //ABC, ABCD, ABCDE
                        var list = new TemplateType[] { TemplateType.ABCD, TemplateType.ABC };
                        random   = new Random(list.Length);
                        template = templateFactory.CreateBasicTemplate(list[random.Next(list.Length)]);
                    }
                }

                if (days == DaysType.SixDays || days == DaysType.SevenDays)
                {
                    if (level <= TrainerLevelType.Advanced)
                    {
                        //ABC
                        template = templateFactory.CreateBasicTemplate(TemplateType.ABC);
                    }
                    else
                    {
                        //ABC, ABCD, ABCDE, ABCDEF
                        var list = new[] { TemplateType.AB, TemplateType.ABC, TemplateType.ABCD };
                        random   = new Random(list.Length);
                        template = templateFactory.CreateBasicTemplate(list[random.Next(list.Length)]);
                    }
                }

                if (template == null)
                {
                    throw new Exception("could not instantiate template");
                }
            }


            template.DaysType         = days;
            template.TrainerLevelType = level;
            foreach (Workout templateWorkout in template.Workouts)
            {
                foreach (MuscleExercises templateWorkoutMuscleExercise in templateWorkout.WorkoutHistories.First()
                         .MuscleExercises)
                {
                    var exercisesOfMuscle = _db.Exercises.Where(x =>
                                                                x.MuscleType == templateWorkoutMuscleExercise.MuscleType).ToList();

                    for (int i = 0; i < templateWorkoutMuscleExercise.Exercises.Count; i++)
                    {
                        Random r = new Random();
                        var    exerciseSetting =
                            _programService.PickExerciseSetting(
                                _programService.GetRelevantExerciseData(i, level,
                                                                        templateWorkoutMuscleExercise.MuscleType));

                        var workoutExercise = templateWorkoutMuscleExercise.Exercises[i];

                        var exerciseChose = _programService.PickExercise(i, exerciseSetting, exercisesOfMuscle);
                        workoutExercise.Name = exerciseChose.Name;

                        var numOfSets = exerciseSetting.Sets[r.Next(exerciseSetting.Sets.Length)];
                        var reps      = _programService.PickReps(exerciseSetting);
                        var rest      = _programService.PickRest(exerciseSetting);
                        for (int j = 0; j < numOfSets; j++)
                        {
                            var set = new Set()
                            {
                                Reps = reps, Rest = rest
                            };
                            workoutExercise.Sets.Add(set);
                        }

                        exercisesOfMuscle.Remove(exerciseChose);
                    }
                }
            }

            return(template);
        }