コード例 #1
0
        private void ApplyResultChanges(DsTimeResultValue resultvalue, DsTimeResult result)
        {
            result.Count++;
            if (resultvalue.Win)
            {
                result.Wins++;
            }
            if (resultvalue.MVP)
            {
                result.MVP++;
            }
            result.Duration += resultvalue.Duration;
            result.Kills    += resultvalue.Kills;
            result.Army     += resultvalue.Army;

            foreach (var teammate in resultvalue.Teammates)
            {
                var rteammate = result.Teammates.FirstOrDefault(f => f.Cmdr == teammate.Cmdr);
                if (rteammate == null)
                {
                    rteammate = new DsParticipant()
                    {
                        Cmdr = teammate.Cmdr
                    };
                    result.Teammates.Add(rteammate);
                }
                rteammate.Count++;
                if (teammate.Win)
                {
                    rteammate.Wins++;
                }
            }

            foreach (var opponent in resultvalue.Opponents)
            {
                var ropponent = result.Opponents.FirstOrDefault(f => f.Cmdr == opponent.Cmdr);
                if (ropponent == null)
                {
                    ropponent = new DsParticipant()
                    {
                        Cmdr = opponent.Cmdr
                    };
                    result.Opponents.Add(ropponent);
                }
                ropponent.Count++;
                if (opponent.Win)
                {
                    ropponent.Wins++;
                }
            }
        }
コード例 #2
0
        private static void ApplyChanges(DsTimeResult result, List <DsTimeResultValue> values)
        {
            if (!values.Any())
            {
                return;
            }
            result.Count    += values.Count;
            result.Wins     += values.Where(x => x.Win == true).Count();
            result.MVP      += values.Where(x => x.MVP == true).Count();
            result.Duration += values.Sum(s => s.Duration);
            result.Kills    += values.Sum(s => s.Kills);
            result.Army     += values.Sum(s => s.Army);

            foreach (var cmdr in DSData.cmdrs)
            {
                var teammates = values.SelectMany(s => s.Teammates).Where(x => x.Cmdr == cmdr).ToList();
                var opponents = values.SelectMany(s => s.Opponents).Where(x => x.Cmdr == cmdr).ToList();

                var teammateParticipant = result.Teammates.SingleOrDefault(f => f.Cmdr == cmdr);
                if (teammateParticipant == null)
                {
                    teammateParticipant = new DsParticipant()
                    {
                        Cmdr = cmdr
                    };
                    result.Teammates.Add(teammateParticipant);
                }
                if (teammates.Any())
                {
                    teammateParticipant.Count += teammates.Count;
                    teammateParticipant.Wins  += teammates.Where(x => x.Win == true).Count();
                }
                var opponentParticipant = result.Opponents.SingleOrDefault(s => s.Cmdr == cmdr);
                if (opponentParticipant == null)
                {
                    opponentParticipant = new DsParticipant()
                    {
                        Cmdr = cmdr
                    };
                    result.Opponents.Add(opponentParticipant);
                }

                if (opponents.Any())
                {
                    opponentParticipant.Count += opponents.Count;
                    opponentParticipant.Wins  += opponents.Where(x => x.Win == true).Count();
                }
            }

            foreach (var teammate in values.SelectMany(s => s.Teammates))
            {
                var rteammate = result.Teammates.FirstOrDefault(f => f.Cmdr == teammate.Cmdr);
                if (rteammate == null)
                {
                    rteammate = new DsParticipant()
                    {
                        Cmdr = teammate.Cmdr
                    };
                    result.Teammates.Add(rteammate);
                }
                rteammate.Count++;
                if (teammate.Win)
                {
                    rteammate.Wins++;
                }
            }

            foreach (var opponent in values.SelectMany(s => s.Opponents))
            {
                var ropponent = result.Opponents.FirstOrDefault(f => f.Cmdr == opponent.Cmdr);
                if (ropponent == null)
                {
                    ropponent = new DsParticipant()
                    {
                        Cmdr = opponent.Cmdr
                    };
                    result.Opponents.Add(ropponent);
                }
                ropponent.Count++;
                if (opponent.Win)
                {
                    ropponent.Wins++;
                }
            }
        }
コード例 #3
0
        public static void CollectTimeResults2(sc2dsstatsContext context, ILogger logger, List <DsTimeResultValue> resultvalues = null)
        {
            DateTime lastDate = new DateTime(2018, 1, 1);

            if (resultvalues == null)
            {
                resultvalues = context.DsTimeResultValues
                               .Include(i => i.Opponents)
                               .Include(i => i.Teammates)
                               .OrderBy(o => o.Gametime)
                               .AsSplitQuery()
                               .ToList();

                if (!resultvalues.Any())
                {
                    return;
                }

                context.DsParticipantsValues.RemoveRange(resultvalues.SelectMany(s => s.Opponents));
                context.DsParticipantsValues.RemoveRange(resultvalues.SelectMany(s => s.Teammates));
                context.DsTimeResultValues.RemoveRange(resultvalues);
                lastDate = resultvalues.OrderBy(o => o.Gametime).First().Gametime.AddMonths(-1);
            }

            if (!resultvalues.Any())
            {
                return;
            }

            //var results = context.DsTimeResults
            //    .Include(i => i.Opponents)
            //    .Include(i => i.Teammates)
            //    .AsSplitQuery()
            //    .ToList();

            // first day next month
            DateTime dateTime   = new DateTime(DateTime.Today.Year, DateTime.Today.Month, DateTime.DaysInMonth(DateTime.Today.Year, DateTime.Today.Month)).AddDays(1);
            string   yearString = String.Empty;


            while (dateTime > lastDate)
            {
                DateTime _dateTime    = dateTime.AddMonths(-1);
                string   _yearString  = _dateTime.ToString("yyyy");
                string   _monthString = _dateTime.ToString("yyyyMM");
                bool     doYear       = false;
                if (yearString != _yearString)
                {
                    doYear     = true;
                    yearString = _yearString;
                }

                logger.LogInformation($"Collecting timeresults {_monthString} ({_dateTime.ToString("yyyyMMdd")}-{dateTime.ToString("yyyyMMdd")})");

                var timeValues = resultvalues.Where(x => x.Gametime >= _dateTime && x.Gametime < dateTime).ToList();

                foreach (var cmdr in DSData.cmdrs)
                {
                    var cmdrValues   = timeValues.Where(x => x.Cmdr == cmdr).ToList();
                    var cmdrPlValues = timeValues.Where(x => x.Player && x.Cmdr == cmdr).ToList();

                    // var allResult = results.SingleOrDefault(s => s.Player == false && s.Timespan == _monthString && s.Cmdr == cmdr && s.Opp == String.Empty);
                    var allResult = context.DsTimeResults
                                    .Include(i => i.Opponents)
                                    .Include(i => i.Teammates)
                                    .SingleOrDefault(s => s.Player == false && s.Timespan == _monthString && s.Cmdr == cmdr && s.Opp == String.Empty);

                    if (allResult == null)
                    {
                        allResult = new DsTimeResult()
                        {
                            Player    = false,
                            Timespan  = _monthString,
                            Cmdr      = cmdr,
                            Opp       = String.Empty,
                            Teammates = new HashSet <DsParticipant>(),
                            Opponents = new HashSet <DsParticipant>()
                        };
                        // results.Add(allResult);
                        context.DsTimeResults.Add(allResult);
                    }
                    ApplyChanges(allResult, cmdrValues);


                    // var allPlResult = results.SingleOrDefault(s => s.Player == true && s.Timespan == _monthString && s.Cmdr == cmdr && s.Opp == String.Empty);
                    var allPlResult = context.DsTimeResults
                                      .Include(i => i.Opponents)
                                      .Include(i => i.Teammates)
                                      .SingleOrDefault(s => s.Player == true && s.Timespan == _monthString && s.Cmdr == cmdr && s.Opp == String.Empty);
                    if (allPlResult == null)
                    {
                        allPlResult = new DsTimeResult()
                        {
                            Player    = true,
                            Timespan  = _monthString,
                            Cmdr      = cmdr,
                            Opp       = String.Empty,
                            Teammates = new HashSet <DsParticipant>(),
                            Opponents = new HashSet <DsParticipant>()
                        };
                        // results.Add(allPlResult);
                        context.DsTimeResults.Add(allPlResult);
                    }
                    ApplyChanges(allPlResult, cmdrPlValues);

                    List <DsTimeResultValue> yearValues       = new List <DsTimeResultValue>();
                    List <DsTimeResultValue> cmdrYearValues   = new List <DsTimeResultValue>();
                    List <DsTimeResultValue> cmdrPlYearValues = new List <DsTimeResultValue>();
                    if (doYear)
                    {
                        yearValues       = resultvalues.Where(x => x.Gametime >= new DateTime(_dateTime.Year, 1, 1) && x.Gametime < new DateTime(_dateTime.Year + 1, 1, 1)).ToList();
                        cmdrYearValues   = yearValues.Where(x => x.Cmdr == cmdr).ToList();
                        cmdrPlYearValues = yearValues.Where(x => x.Player && x.Cmdr == cmdr).ToList();

                        // var allYearResult = results.SingleOrDefault(s => s.Player == false && s.Timespan == _yearString && s.Cmdr == cmdr && s.Opp == String.Empty);
                        var allYearResult = context.DsTimeResults
                                            .Include(i => i.Opponents)
                                            .Include(i => i.Teammates)
                                            .SingleOrDefault(s => s.Player == false && s.Timespan == _yearString && s.Cmdr == cmdr && s.Opp == String.Empty);

                        if (allYearResult == null)
                        {
                            allYearResult = new DsTimeResult()
                            {
                                Player    = false,
                                Timespan  = _yearString,
                                Cmdr      = cmdr,
                                Opp       = String.Empty,
                                Teammates = new HashSet <DsParticipant>(),
                                Opponents = new HashSet <DsParticipant>()
                            };
                            // results.Add(allYearResult);
                            context.DsTimeResults.Add(allYearResult);
                        }
                        ApplyChanges(allYearResult, cmdrYearValues);


                        // var allPlYearResult = results.SingleOrDefault(s => s.Player == true && s.Timespan == _yearString && s.Cmdr == cmdr && s.Opp == String.Empty);
                        var allPlYearResult = context.DsTimeResults
                                              .Include(i => i.Opponents)
                                              .Include(i => i.Teammates)
                                              .SingleOrDefault(s => s.Player == true && s.Timespan == _yearString && s.Cmdr == cmdr && s.Opp == String.Empty);

                        if (allPlYearResult == null)
                        {
                            allPlYearResult = new DsTimeResult()
                            {
                                Player    = true,
                                Timespan  = _yearString,
                                Cmdr      = cmdr,
                                Opp       = String.Empty,
                                Teammates = new HashSet <DsParticipant>(),
                                Opponents = new HashSet <DsParticipant>()
                            };
                            // results.Add(allPlYearResult);
                            context.DsTimeResults.Add(allPlYearResult);
                        }
                        ApplyChanges(allPlYearResult, cmdrPlYearValues);
                    }

                    foreach (var vs in DSData.cmdrs)
                    {
                        var cmdrVsValues   = cmdrValues.Where(x => x.Opp == vs).ToList();
                        var cmdrPlVsValues = cmdrPlValues.Where(x => x.Opp == vs).ToList();

                        // var allVsResult = results.SingleOrDefault(s => s.Player == false && s.Timespan == _monthString && s.Cmdr == cmdr && s.Opp == vs);
                        var allVsResult = context.DsTimeResults
                                          .Include(i => i.Opponents)
                                          .Include(i => i.Teammates).SingleOrDefault(s => s.Player == false && s.Timespan == _monthString && s.Cmdr == cmdr && s.Opp == vs);
                        if (allVsResult == null)
                        {
                            allVsResult = new DsTimeResult()
                            {
                                Player    = false,
                                Timespan  = _monthString,
                                Cmdr      = cmdr,
                                Opp       = vs,
                                Teammates = new HashSet <DsParticipant>(),
                                Opponents = new HashSet <DsParticipant>()
                            };
                            // results.Add(allVsResult);
                            context.DsTimeResults.Add(allVsResult);
                        }
                        ApplyChanges(allVsResult, cmdrVsValues);


                        var allPlVsResult = context.DsTimeResults
                                            .Include(i => i.Opponents)
                                            .Include(i => i.Teammates).SingleOrDefault(s => s.Player == true && s.Timespan == _monthString && s.Cmdr == cmdr && s.Opp == vs);
                        if (allPlVsResult == null)
                        {
                            allPlVsResult = new DsTimeResult()
                            {
                                Player    = true,
                                Timespan  = _monthString,
                                Cmdr      = cmdr,
                                Opp       = vs,
                                Teammates = new HashSet <DsParticipant>(),
                                Opponents = new HashSet <DsParticipant>()
                            };
                            // results.Add(allPlVsResult);
                            context.DsTimeResults.Add(allPlVsResult);
                        }
                        ApplyChanges(allPlVsResult, cmdrPlVsValues);

                        if (doYear)
                        {
                            var cmdrYearVsValues   = cmdrYearValues.Where(x => x.Opp == vs).ToList();
                            var cmdrPlYearVsValues = cmdrPlYearValues.Where(x => x.Opp == vs).ToList();

                            var allYearVsResult = context.DsTimeResults
                                                  .Include(i => i.Opponents)
                                                  .Include(i => i.Teammates).SingleOrDefault(s => s.Player == false && s.Timespan == _yearString && s.Cmdr == cmdr && s.Opp == vs);
                            if (allYearVsResult == null)
                            {
                                allYearVsResult = new DsTimeResult()
                                {
                                    Player    = false,
                                    Timespan  = _yearString,
                                    Cmdr      = cmdr,
                                    Opp       = vs,
                                    Teammates = new HashSet <DsParticipant>(),
                                    Opponents = new HashSet <DsParticipant>()
                                };
                                // results.Add(allYearVsResult);
                                context.DsTimeResults.Add(allYearVsResult);
                            }
                            ApplyChanges(allYearVsResult, cmdrYearVsValues);


                            var allPlYearVsResult = context.DsTimeResults
                                                    .Include(i => i.Opponents)
                                                    .Include(i => i.Teammates).SingleOrDefault(s => s.Player == true && s.Timespan == _yearString && s.Cmdr == cmdr && s.Opp == vs);
                            if (allPlYearVsResult == null)
                            {
                                allPlYearVsResult = new DsTimeResult()
                                {
                                    Player    = true,
                                    Timespan  = _yearString,
                                    Cmdr      = cmdr,
                                    Opp       = vs,
                                    Teammates = new HashSet <DsParticipant>(),
                                    Opponents = new HashSet <DsParticipant>()
                                };
                                // results.Add(allPlYearVsResult);
                                context.DsTimeResults.Add(allPlYearVsResult);
                            }
                            ApplyChanges(allPlYearVsResult, cmdrYearVsValues);
                        }
                    }
                }
                dateTime = _dateTime;
            }
            context.SaveChanges();
        }
コード例 #4
0
        public void CollectTimeResults(sc2dsstatsContext context)
        {
            var resultvalues = context.DsTimeResultValues
                               .Include(i => i.Opponents)
                               .Include(i => i.Teammates)
                               .ToList();

            var results = context.DsTimeResults
                          .Include(i => i.Opponents)
                          .Include(i => i.Teammates)
                          .ToList();

            int i = 0;

            foreach (var resultvalue in resultvalues)
            {
                string        monthstring = resultvalue.Gametime.ToString("yyyyMM");
                string        yearstring  = resultvalue.Gametime.ToString("yyyy");
                List <string> timestrings = new List <string>()
                {
                    monthstring, yearstring
                };
                foreach (var time in timestrings)
                {
                    var result = results.SingleOrDefault(x => x.Timespan == time && x.Cmdr == resultvalue.Cmdr && x.Opp == String.Empty && x.Player == false);
                    if (result == null)
                    {
                        result = new DsTimeResult()
                        {
                            Player    = false,
                            Timespan  = time,
                            Cmdr      = resultvalue.Cmdr,
                            Opp       = String.Empty,
                            Teammates = new HashSet <DsParticipant>(),
                            Opponents = new HashSet <DsParticipant>()
                        };
                        results.Add(result);
                        context.DsTimeResults.Add(result);
                    }

                    var vsresult = results.SingleOrDefault(x => x.Timespan == time && x.Cmdr == resultvalue.Cmdr && x.Opp == resultvalue.Opp && x.Player == false);
                    if (vsresult == null)
                    {
                        vsresult = new DsTimeResult()
                        {
                            Player    = false,
                            Timespan  = time,
                            Cmdr      = resultvalue.Cmdr,
                            Opp       = resultvalue.Opp,
                            Teammates = new HashSet <DsParticipant>(),
                            Opponents = new HashSet <DsParticipant>()
                        };
                        results.Add(vsresult);
                        context.DsTimeResults.Add(vsresult);
                    }

                    List <DsTimeResult> timeresults = new List <DsTimeResult>()
                    {
                        result, vsresult
                    };

                    if (resultvalue.Player)
                    {
                        var plresult = results.SingleOrDefault(x => x.Timespan == time && x.Cmdr == resultvalue.Cmdr && x.Opp == String.Empty && x.Player == true);
                        if (plresult == null)
                        {
                            plresult = new DsTimeResult()
                            {
                                Player    = true,
                                Timespan  = time,
                                Cmdr      = resultvalue.Cmdr,
                                Opp       = String.Empty,
                                Teammates = new HashSet <DsParticipant>(),
                                Opponents = new HashSet <DsParticipant>()
                            };
                            results.Add(plresult);
                            context.DsTimeResults.Add(plresult);
                        }
                        timeresults.Add(plresult);

                        var plvsresult = results.SingleOrDefault(x => x.Timespan == time && x.Cmdr == resultvalue.Cmdr && x.Opp == resultvalue.Opp && x.Player == true);
                        if (plvsresult == null)
                        {
                            plvsresult = new DsTimeResult()
                            {
                                Player    = true,
                                Timespan  = time,
                                Cmdr      = resultvalue.Cmdr,
                                Opp       = resultvalue.Opp,
                                Teammates = new HashSet <DsParticipant>(),
                                Opponents = new HashSet <DsParticipant>()
                            };
                            results.Add(plvsresult);
                            context.DsTimeResults.Add(plvsresult);
                        }
                        timeresults.Add(plvsresult);
                    }

                    foreach (var tresult in timeresults)
                    {
                        ApplyResultChanges(resultvalue, tresult);
                    }
                }
                context.DsTimeResultValues.Remove(resultvalue);

                i++;
                if (i % 1000 == 0)
                {
                    logger.LogInformation($"DsTimeResults collected: {i}/{resultvalues.Count}");
                    context.SaveChanges();
                }
            }

            context.SaveChanges();
        }