Пример #1
0
        public IList <AvgTimeLine> GetAvgTimelines()
        {
            MySqlCommand cmd = new MySqlCommand("get_avgtimeline", connection);

            cmd.CommandType = CommandType.StoredProcedure;
            var reader = cmd.ExecuteReader();
            IList <AvgTimeLine> timeline = new List <AvgTimeLine>();

            while (reader.Read())
            {
                AvgTimeLine t = AvgTimeLine.Mapper(reader);
                timeline.Add(t);
            }
            return(timeline);
        }
Пример #2
0
        public void SaveAvgTimeLine(AvgTimeLine av)
        {
            MySqlCommand cmd = new MySqlCommand("insert_avg_timeline", connection);

            cmd.CommandType = CommandType.StoredProcedure;
            cmd.Parameters.Add(new MySqlParameter("pIdChamp", av.ChampionId));
            cmd.Parameters.Add(new MySqlParameter("pRank", av.Rank));
            cmd.Parameters.Add(new MySqlParameter("pRole", av.Role));
            cmd.Parameters.Add(new MySqlParameter("pAvgAp", av.AvgAp));
            cmd.Parameters.Add(new MySqlParameter("pAvgMr", av.AvgMr));
            cmd.Parameters.Add(new MySqlParameter("pAvgGoldSpent", av.AvgGoldSpent));
            cmd.Parameters.Add(new MySqlParameter("pMostFrequentItems", av.Items));
            cmd.Parameters.Add(new MySqlParameter("pMinute", av.Minute));
            cmd.Parameters.Add(new MySqlParameter("pTotalGames", av.TotalGames));
            cmd.Parameters.Add(new MySqlParameter("pPatch", av.Patch));

            cmd.ExecuteNonQuery();
        }
Пример #3
0
        private static void ProcessAverages()
        {
            var champs = Data.Entidades.Caches.ChampionsCache.Get();

            foreach (var champ in champs)
            {
                IList <ApTimeLine> timelines;
                using (var data = new Data.SqlData())
                {
                    timelines = data.GetTimelines(champ.Id);
                }

                var cleanTimelines = new List <ApTimeLine>();
                var matchgroups    = timelines.GroupBy(t => t.MatchId);
                int j = 0;
                foreach (var match in matchgroups)
                {
                    var participantgroups = match.OrderBy(m => m.Minute).GroupBy(m => m.PlayerId);
                    foreach (var player in participantgroups)
                    {
                        for (int i = 0; i < player.Count() - 1; i++)
                        {
                            cleanTimelines.Add(player.ElementAt(i));

                            while (player.ElementAt(i + 1).Minute > cleanTimelines.ElementAt(j).Minute + 1)
                            {
                                var newmin = new ApTimeLine(cleanTimelines.ElementAt(j));
                                newmin.Minute++;
                                cleanTimelines.Add(newmin);
                                j++;
                            }
                            j++;
                        }
                    }
                }

                var patchgroups = cleanTimelines.GroupBy(t => t.Patch);
                foreach (var patch in patchgroups)
                {
                    var rankgroups = patch.GroupBy(p => p.Rank);
                    foreach (var rank in rankgroups)
                    {
                        var rolegroups = rank.GroupBy(p => Data.Entidades.EnumHelpers.GetRealRoles(p.Role, p.Lane));
                        foreach (var role in rolegroups)
                        {
                            var minutegroups = role.OrderBy(m => m.Minute).GroupBy(t => t.Minute);
                            foreach (var minute in minutegroups)
                            {
                                var items = new List <Item>();
                                foreach (var match in minute)
                                {
                                    match.Items = Data.Entidades.Caches.ItemsCache.RemoveTrinkets(match.Items);
                                    foreach (var item in match.Items)
                                    {
                                        items.Add(item);
                                    }
                                }

                                var q = from x in items
                                        group x by x into g
                                        let count = g.Count()
                                                    orderby count descending
                                                    select new { Value = g.Key, Count = count };

                                var e = q.OrderByDescending(i => i.Count).Take(10);

                                var avgt = new AvgTimeLine();
                                avgt.Minute       = minute.Key;
                                avgt.ChampionId   = champ.Id;
                                avgt.AvgAp        = minute.Average(m => m.TotalAp);
                                avgt.AvgMr        = minute.Average(m => m.TotalMr);
                                avgt.Patch        = patch.Key;
                                avgt.AvgGoldSpent = (int)minute.Average(m => m.GoldSpent);
                                avgt.Rank         = rank.Key;
                                avgt.Role         = role.Key.ToString();
                                avgt.TotalGames   = minute.Count();
                                avgt.Items        = string.Join("|", e.Select(i => string.Format("{0}:{1}", i.Value.Id, i.Count)));
                                using (var data = new Data.SqlData())
                                {
                                    data.SaveAvgTimeLine(avgt);
                                }
                            }
                        }
                    }
                }
            }
        }