Пример #1
0
        static void Main(string[] args)
        {
            //Business.SMS.Instance.SendSMS("Mensagem de teste!!", "+5511965579593");
            Console.WriteLine("Olá!! Vamos começar =)");

            Console.WriteLine("Começando pelo começo, importar o CSV? S/N");

            var csv = Console.ReadLine();

            #region importar dados
            if (csv != null && csv.ToLower() == "s")
            {
                var list = new List<Models.Lentidao>();
                var reader = new StreamReader(File.OpenRead(@"Content\Lentidao.csv"), Encoding.Default);
                reader.ReadLine();
                while (!reader.EndOfStream)
                {
                    var line = reader.ReadLine();
                    if (!String.IsNullOrWhiteSpace(line))
                    {
                        string[] values = line.Split(';');
                        if (values.Length >= 12)
                        {
                            list.Add(new Models.Lentidao
                            {
                                DataHora = Convert.ToDateTime(values[1]),
                                IdCorredor = Convert.ToInt32(values[2]),
                                Corredor = values[3],
                                Sentido = values[4],
                                Pista = values[5],
                                ExtensaoPista = Convert.ToInt32(values[6]),
                                InicioLentidao = values[7],
                                TerminoLentidao = values[8],
                                ReferenciaNumericaInicioLentidao = Convert.ToInt32(values[9]),
                                ExensaoLentidao = Convert.ToInt32(values[10]),
                                Regiao = values[11]
                            });
                        }
                    }
                }

                using (var context = new DatabaseContext())
                {
                    context.BulkInsert(list);
                }
                Console.ForegroundColor = ConsoleColor.Blue;
                Console.WriteLine("Uffa!! Terminamos, vamos pro próximo =)");
                Console.ResetColor();
            }
            #endregion

            Console.WriteLine("Vamos fazer a query... (sem view, vai demorar)");

            using (var context = new DatabaseContext())
            {
                context.Database.Log = Console.WriteLine;
                Console.WriteLine("Inserir Lentidão Consolidada? S/N");
                var s = Console.ReadLine();

                var todos = new List<Models.LentidaoConsolidado>();
                if (s != null && s.ToLower() == "s")
                {

                    todos = context.Lentidoes
                        .GroupBy(a => new {
                            a.InicioLentidao,
                            a.TerminoLentidao,
                            a.ReferenciaNumericaInicioLentidao,
                            a.Regiao})
                        .Select(a=> new
                        {
                            Total = a.Count(),
                            TerminoLentidao = a.Key.TerminoLentidao,
                            InicioLentidao = a.Key.InicioLentidao,
                            ReferenciaNumericaInicioLentidao = a.Key.ReferenciaNumericaInicioLentidao,
                            Regiao = a.Key.Regiao
                        })
                        .OrderByDescending(a => a.Total).Skip(1).ToList().Select(a => new Models.LentidaoConsolidado
                        {
                            Total = a.Total,
                            TerminoLentidao = a.TerminoLentidao,
                            InicioLentidao = a.InicioLentidao,
                            ReferenciaNumericaInicioLentidao = a.ReferenciaNumericaInicioLentidao,
                            Regiao = a.Regiao
                        }).ToList();

                    context.BulkInsert(todos);
                }

                todos = context.LentidaoConsolidados.Where(a=>!a.Steps.Any()).ToList();

                var stps = new List<Models.Step>();

                var count = 0;
                foreach(var todo in todos)
                {

                    count++;
                    var directionsRequest = new DirectionsRequest()
                    {
                        Origin = String.Format("{0} {1}, São Paulo - SP, Brasil", TratarEndereco(todo.InicioLentidao), todo.ReferenciaNumericaInicioLentidao),
                        Destination = String.Format("{0}, São Paulo - SP, Brasil", todo.TerminoLentidao),
                        SigningKey = "AIzaSyAl8V3SnsqpCWA1SmyMH0g-PaOkfN5J5LA",
                    };

                    var directions = GoogleMaps.Directions.Query(directionsRequest);

                    if (directions.Status == DirectionsStatusCodes.OK)
                    {
                        var legs = directions.Routes.First().Legs;

                        foreach (var leg in legs)
                        {
                            if (leg.Distance.Value > 20000)
                            {
                                Console.ForegroundColor = ConsoleColor.Red;
                                Console.WriteLine(
                                    String.Format("Xiiii, mais do que 20 quilômetros? Tá suspeito esse registro..."),
                                    new object {});
                                Console.WriteLine(todo);
                                Console.ResetColor();
                            }
                            else
                            {
                                var steps = leg.Steps;

                                stps.AddRange(steps.Select(step => new Models.Step
                                {
                                    PosicaoGeografica = DbGeography.FromText(Business.Ocorrencia.Instance.GetGeographyTextFromLatlng(step.StartLocation.Latitude, step.StartLocation.Longitude)),
                                    FkLentidaoConsolidado = todo.Id
                                }));

                                count = count + stps.Count;
                            }
                        }
                    }

                    if (count > 500)
                    {
                        if (count > 500)
                        {
                            using (var context2 = new DatabaseContext())
                            {
                                try
                                {
                                    context2.Steps.AddRange(stps.Where(a => a.PosicaoGeografica != null));
                                }
                                catch (Exception)
                                {
                                }
                                context2.SaveChanges();
                                stps = new List<Models.Step>();
                                count = 0;
                            }
                        }

                    }

                    Console.WriteLine(directions);
                };

                context.SaveChanges();

            }
        }
 public object BulkInsert(IEnumerable <TEntity> entities)
 {
     _dbContext.BulkInsert <TEntity>(entities, options => options.IncludeGraph = true);
     _dbContext.BulkSaveChanges();
     return(1);
 }