Ejemplo n.º 1
0
        public static List <Ruta> CrearRutasEnRango(ProyectoAutoContext _db, HistorialDiario _histDia, DateTime _desde, DateTime _hasta)
        {
            List <Ruta> rutas = new List <Ruta>();
            List <HistorialPosicion> listaActual = new List <HistorialPosicion>();

            for (int i = 0; i < _histDia.historialesPosicion.Count; i++)
            {
                HistorialPosicion puntoActual = _histDia.historialesPosicion[i];
                if (puntoActual.Inicio == true)
                {
                    if (listaActual.Count > 0)
                    {
                        Ruta nruta = new Ruta(_db, listaActual, _histDia);
                        if (nruta.Puntos.Count > 0)
                        {
                            rutas.Add(nruta);
                        }
                    }

                    listaActual = new List <HistorialPosicion>();
                }

                if (puntoActual.FechaHora >= _desde && puntoActual.FechaHora <= _hasta)
                {
                    listaActual.Add(puntoActual);
                }
            }

            rutas.Add(new Ruta(_db, listaActual, _histDia));

            return(rutas);
        }
Ejemplo n.º 2
0
        public ActionResult getPosicionesFiltradasYMas(string horaDesde, string horaHasta, int idAuto)
        {
            Auto auto = db.Autos.Where(a => a.Id == idAuto).FirstOrDefault();
            List <HistorialDiario> historialesDiarios = auto.HistorialesDiarios.ToList();

            horaDesde = horaDesde.Replace('-', '/');
            horaHasta = horaHasta.Replace('-', '/');

            string formato = "d/M/yyyy H:m:s";

            DateTime desde;
            bool     resultDesde = DateTime.TryParseExact(horaDesde, formato, FormatoFecha.provider, DateTimeStyles.None, out desde);

            DateTime hasta;
            bool     resultHasta = DateTime.TryParseExact(horaHasta, formato, FormatoFecha.provider, DateTimeStyles.None, out hasta);


            HistorialDiario historialHoy = null;

            List <HistorialDiario> historialesHoy = auto.HistorialesDiarios
                                                    .Where(h => h.Fecha.Year == desde.Year &&
                                                           h.Fecha.Month == desde.Month &&
                                                           h.Fecha.Day == desde.Day).ToList();

            int nResultados = 0;

            foreach (HistorialDiario hd in historialesHoy)
            {
                if (hd.historialesPosicion.Count > nResultados)
                {
                    historialHoy = hd;
                    nResultados  = hd.historialesPosicion.Count;
                }
            }

            List <Ruta> filtro = Ruta.CrearRutasEnRango(db, historialHoy, desde, hasta);

            //filtro = filtro.OrderBy(h => h.FechaHora).ToList();

            System.Web.Script.Serialization.JavaScriptSerializer oSerializer = new System.Web.Script.Serialization.JavaScriptSerializer();
            string sJSON = oSerializer.Serialize(filtro);

            return(Json(new { respuesta = sJSON }, JsonRequestBehavior.AllowGet));
        }
Ejemplo n.º 3
0
        public static HistorialWeb PrepararHistorialEnergia(ProyectoAutoContext _db, HistorialWeb _HW, DateTime _fecha, int _idAuto)
        {
            Auto auto = _db.Autos.Where(a => a.Id == _idAuto).FirstOrDefault();

            if (auto == null)
            {
                return(new HistorialWeb());
            }

            HistorialDiario historialHoy = auto.HistorialesDiarios
                                           .Where(h => h.Fecha.Year == _fecha.Year &&
                                                  h.Fecha.Month == _fecha.Month &&
                                                  h.Fecha.Day == _fecha.Day).FirstOrDefault();

            if (historialHoy == null)
            {
                _HW.historialesEnergia = new List <PuntoGrafico>();
                return(_HW);
            }

            List <HistorialEnergia> histEnergia = historialHoy.historialesEnergia.OrderBy(h => h.HoraRegistro).ToList();

            #region HistorialesComparables
            List <HistorialWeb.TiposHistorial> historialesComparables = new List <HistorialWeb.TiposHistorial>();
            historialesComparables.Add(HistorialWeb.TiposHistorial.Velocidad);
            _HW.historialesComparables = historialesComparables;

            List <HistorialVelocidad> histVelocidad = historialHoy.historialesVelocidad.OrderBy(h => h.HoraRegistro).ToList();
            #endregion

            List <PuntoGrafico> puntosEnergia   = EnergiaAPuntosGrafico(histEnergia);
            List <PuntoGrafico> puntosVelocidad = VelocidadAPuntosGrafico(histVelocidad);

            if (histVelocidad.Count == 0)
            {
                puntosVelocidad = CrearHistorialVelocidadEjemplo();
                puntosEnergia   = CrearHistorialEnergiaEjemplo();
            }

            _HW.historialesEnergia   = puntosEnergia;
            _HW.historialesVelocidad = puntosVelocidad;

            return(_HW);
        }
Ejemplo n.º 4
0
        public List <HistorialDiario> CrearHistorialesDiariosEnRango(DateTime _inicio, DateTime _final, Auto _auto)
        {
            //se revisan si hay un historialdiario para cada una de las fechas entre esos 2 limites
            //Se crean de ser necesario

            //deberia haber un db.savechanges
            //se retorna la lista de historialesdiarios junto a los recien creados

            List <HistorialDiario> historiales = _auto.HistorialesDiarios.ToList();
            int diasDiferencia = Convert.ToInt32((_final.Date - _inicio.Date).TotalDays);

            List <HistorialDiario> resultado = new List <HistorialDiario>();

            for (int i = 0; i <= diasDiferencia; i++)
            {
                DateTime fecha = _inicio.Date + new TimeSpan(i, 0, 0, 0, 0);

                HistorialDiario historialHoy = historiales.Where(h => h.Fecha.Year == fecha.Year &&
                                                                 h.Fecha.Month == fecha.Month &&
                                                                 h.Fecha.Day == fecha.Day).FirstOrDefault();
                if (historialHoy == null)
                {
                    historialHoy = new HistorialDiario()
                    {
                        //Fecha = hisPosicion[hisPosicion.Count -1].FechaHora.Date,
                        Fecha = fecha,
                        historialesEnergia   = new List <HistorialEnergia>(),
                        historialesPosicion  = new List <HistorialPosicion>(),
                        historialesVelocidad = new List <HistorialVelocidad>()
                    };
                    _auto.HistorialesDiarios.Add(historialHoy);
                }

                resultado.Add(historialHoy);
            }

            db.SaveChanges();
            return(resultado);
        }
Ejemplo n.º 5
0
        public Ruta(ProyectoAutoContext _db, List <HistorialPosicion> _puntos, HistorialDiario _histDia)
        {
            if (_puntos.Count == 0)
            {
                return;
            }

            List <HistorialPosicion> puntos = _puntos.OrderBy(p => p.FechaHora).ToList();

            #region Filtro SPIKES

            //la suma de los dos siguientes segmentos
            //noo deberia ser mayor a la distancia del primer a tercer punto x 3

            //En este filtro el primer punto es aceptado por default
            //A partir del "indexOrigen", se evalua si se agrega al filtro el "indexOrigen" + 1

            float multiploLimite            = 1.5f;
            List <HistorialPosicion> filtro = new List <HistorialPosicion>();
            filtro.Add(puntos[0]);

            //int indexOrigen = 0;
            for (int i = 0; i < puntos.Count; i++)
            {
                if (i < puntos.Count - 2)
                {
                    var origen  = new GeoCoordinate(puntos[i].Latitud, puntos[i].Longitud);
                    var evaluar = new GeoCoordinate(puntos[i + 1].Latitud, puntos[i + 1].Longitud);
                    var final   = new GeoCoordinate(puntos[i + 2].Latitud, puntos[i + 2].Longitud);

                    if (puntos[i + 1].GPSOffBool == true)
                    {
                        continue;
                    }

                    double de1a2 = origen.GetDistanceTo(evaluar);
                    double de2a3 = evaluar.GetDistanceTo(final);
                    double de1a3 = origen.GetDistanceTo(final);

                    double suma = de1a2 + de2a3;

                    if (suma <= de1a3 * multiploLimite)
                    {
                        filtro.Add(puntos[i + 1]);
                    }
                }
                else if (i == puntos.Count - 2)
                {
                    filtro.Add(puntos[i + 1]);
                }
            }
            filtro = filtro.OrderBy(h => h.FechaHora).ToList();

            #endregion
            puntos = filtro;

            #region Filtro distancia

            float distanciaLimite = 150; //metros
            float distanciaMinima = 6;
            List <HistorialPosicion> filtroDistancia = new List <HistorialPosicion>();
            //int indexOrigen = 0;
            for (int i = 0; i < puntos.Count - 1; i++)
            {
                if (puntos[i].GPSOffBool == true)
                {
                    continue;
                }

                var origen = new GeoCoordinate(puntos[i].Latitud, puntos[i].Longitud);
                var final  = new GeoCoordinate(puntos[i + 1].Latitud, puntos[i + 1].Longitud);

                double distancia = origen.GetDistanceTo(final);

                if (distancia <= distanciaLimite && distancia >= distanciaMinima)
                {
                    filtroDistancia.Add(puntos[i]);
                }
            }
            filtroDistancia = filtroDistancia.OrderBy(h => h.FechaHora).ToList();

            #endregion
            puntos = filtroDistancia;


            if (puntos.Count == 0)
            {
                Puntos = new List <HistorialPosicion>();
                return;
            }


            Puntos = puntos;
            double metrosRecorridos = 0;
            for (int i = 0; i < puntos.Count - 1; i++)
            {
                var sCoord = new GeoCoordinate(puntos[i].Latitud, puntos[i].Longitud);
                var eCoord = new GeoCoordinate(puntos[i + 1].Latitud, puntos[i + 1].Longitud);

                metrosRecorridos += sCoord.GetDistanceTo(eCoord);
            }
            double km = metrosRecorridos / 1000f;
            KilometrosRecorridos = Math.Round(km, 2, MidpointRounding.AwayFromZero);

            DateTime desde = puntos.First().FechaHora;
            DateTime hasta = puntos.Last().FechaHora;

            List <float> filtroVelocidades = new List <float>();
            float        sumaVelocidades   = 0;
            foreach (HistorialVelocidad hv in _histDia.historialesVelocidad)
            {
                if (hv.HoraRegistro >= desde && hv.HoraRegistro <= hasta)
                {
                    filtroVelocidades.Add(hv.ValorInicio);
                    sumaVelocidades += hv.ValorInicio;

                    filtroVelocidades.Add(hv.ValorUnCuarto);
                    sumaVelocidades += hv.ValorUnCuarto;

                    filtroVelocidades.Add(hv.ValorMitad);
                    sumaVelocidades += hv.ValorMitad;

                    filtroVelocidades.Add(hv.ValorTresCuartos);
                    sumaVelocidades += hv.ValorTresCuartos;

                    filtroVelocidades.Add(hv.ValorFinal);
                    sumaVelocidades += hv.ValorFinal;

                    filtroVelocidades.Add(hv.ValorMayor);
                    sumaVelocidades += hv.ValorMayor;

                    filtroVelocidades.Add(hv.ValorMenor);
                    sumaVelocidades += hv.ValorMenor;
                }
            }

            if (filtroVelocidades.Count > 0)
            {
                VelocidadPromedio = sumaVelocidades / filtroVelocidades.Count;
            }

            HistorialPosicion inicioHP = puntos.First();
            HistorialPosicion finalHP  = puntos.Last();

            if (inicioHP.NombreCalle == null)
            {
                inicioHP.NombreCalle = "";
            }
            if (inicioHP.NombreLocalidad == null)
            {
                inicioHP.NombreLocalidad = "";
            }
            if (finalHP.NombreCalle == null)
            {
                finalHP.NombreLocalidad = "";
            }
            if (finalHP.NombreLocalidad == null)
            {
                finalHP.NombreLocalidad = "";
            }

            if (inicioHP.NombreCalle == "" || inicioHP.NombreLocalidad == "")
            {
                List <Placemark> datosInicio = Posicion.ObtenerDatosPosición(puntos.First().Latitud, puntos.First().Longitud);
                if (datosInicio != null)
                {
                    if (inicioHP.NombreCalle == "")
                    {
                        inicioHP.NombreCalle = datosInicio[0].ThoroughfareName;
                    }

                    if (inicioHP.NombreLocalidad == "")
                    {
                        inicioHP.NombreLocalidad = datosInicio[0].LocalityName;
                    }
                }
            }

            if (finalHP.NombreCalle == "" || finalHP.NombreLocalidad == "")
            {
                List <Placemark> datosFinal = Posicion.ObtenerDatosPosición(puntos.Last().Latitud, puntos.Last().Longitud);

                if (datosFinal != null)
                {
                    if (finalHP.NombreCalle == "")
                    {
                        finalHP.NombreCalle = datosFinal[0].ThoroughfareName;
                    }
                    if (finalHP.NombreLocalidad == "")
                    {
                        finalHP.NombreLocalidad = datosFinal[0].LocalityName;
                    }
                }
            }
            _db.SaveChanges();

            NombreCalleInicio  = inicioHP.NombreCalle;
            NombreCiudadInicio = inicioHP.NombreLocalidad;

            NombreCalleFinal  = finalHP.NombreCalle;
            NombreCiudadFinal = finalHP.NombreLocalidad;

            //NombreCalleInicio = "";
            //NombreCiudadInicio = "";
            //NombreCalleFinal = "";
            //NombreCiudadFinal = "";

            //List<Placemark> datosInicio = Posicion.ObtenerDatosPosición(puntos.First().Latitud, puntos.First().Longitud);
            //if (datosInicio != null)
            //{
            //    NombreCalleInicio = datosInicio[0].ThoroughfareName;
            //    NombreCiudadInicio = datosInicio[0].LocalityName;
            //}

            //List<Placemark> datosFinal = Posicion.ObtenerDatosPosición(puntos.Last().Latitud, puntos.Last().Longitud);

            //if(datosFinal != null)
            //{
            //    NombreCalleFinal = datosFinal[0].ThoroughfareName;
            //    NombreCiudadFinal = datosFinal[0].LocalityName;
            //}
        }
Ejemplo n.º 6
0
        //POST: odata/Autos/ActualizarPosicionListaDXZGPS
        //Parametros: Id,ListaPosiciones
        //(FechaHora,MetrosTramo,Latitud,Longitud,Inicio)
        public string ActualizarPosicionListaDXZGPS(ODataActionParameters parameters)
        {
            if (parameters == null)
            {
                return("Error");
            }
            try
            {
                int                      id              = (int)parameters["Id"];
                var                      posiciones      = parameters["ListaPosiciones"] as IEnumerable <Posicion>;
                List <Posicion>          listaPosiciones = posiciones.ToList();
                List <HistorialPosicion> hisPosicion     = new List <HistorialPosicion>();

                Auto auto = db.Autos.Where(a => a.Id == id).FirstOrDefault();
                if (auto == null)
                {
                    return("Error");
                }

                for (int i = 0; i < listaPosiciones.Count; i++)
                {
                    double latitud        = listaPosiciones[i].Latitud;
                    double longitud       = listaPosiciones[i].Longitud;
                    string horaString     = listaPosiciones[i].FechaHora;
                    float  distanciaTramo = listaPosiciones[i].MetrosTramo;
                    bool   inicio         = listaPosiciones[i].Inicio;
                    bool   gpsOff         = listaPosiciones[i].GPSOffBool;

                    DateTime horaRegistro;
                    bool     result = DateTime.TryParseExact(horaString,
                                                             FormatoFecha.formato, FormatoFecha.provider, DateTimeStyles.None, out horaRegistro);

                    if (result == false)
                    {
                        return("Error");
                    }

                    HistorialPosicion hp = new HistorialPosicion();
                    hp.FechaHora   = horaRegistro;
                    hp.Latitud     = latitud;
                    hp.Longitud    = longitud;
                    hp.MetrosTramo = distanciaTramo;
                    hp.Inicio      = inicio;

                    hp.NombreCalle     = "";
                    hp.NombreLocalidad = "";
                    hp.GPSOffBool      = gpsOff;

                    hisPosicion.Add(hp);
                }

                if (hisPosicion.Count == 0)
                {
                    return("Error");
                }

                hisPosicion = hisPosicion.OrderBy(h => h.FechaHora).ToList();

                List <HistorialDiario> HistDiarioEnRango = CrearHistorialesDiariosEnRango(hisPosicion.First().FechaHora, hisPosicion.Last().FechaHora, auto);

                //------SE FILTRAN LOS HISTORIALES OBTENIDOS--------------
                //A partir del primer punto, solo se agregan un punto siguiente si supera los 25 metros del filtro


                int metrosFiltro = 25;
                List <HistorialPosicion> filtro = new List <HistorialPosicion>();
                filtro.Add(hisPosicion[0]);

                int indexOrigen = 0;
                for (int i = 0; i < hisPosicion.Count; i++)
                {
                    if (i > indexOrigen)
                    {
                        var sCoord = new GeoCoordinate(hisPosicion[indexOrigen].Latitud, hisPosicion[indexOrigen].Longitud);
                        //a partir del index de origen se busca el primer punto a distancia mayor de 25 metros
                        //el index de ese punto se convierte en el indexorigen
                        for (int y = (indexOrigen + 1); y < hisPosicion.Count; y++)
                        {
                            var    eCoord          = new GeoCoordinate(hisPosicion[y].Latitud, hisPosicion[y].Longitud);
                            double metrosDistancia = sCoord.GetDistanceTo(eCoord);

                            if (metrosDistancia > metrosFiltro)
                            {
                                filtro.Add(hisPosicion[y]);
                                indexOrigen = y;
                                break;
                            }
                        }
                    }
                }

                for (int i = 0; i < filtro.Count; i++)
                {
                    HistorialDiario histCorrespondiente = HistDiarioEnRango.Where(h => h.Fecha.Year == filtro[i].FechaHora.Year &&
                                                                                  h.Fecha.Month == filtro[i].FechaHora.Month &&
                                                                                  h.Fecha.Day == filtro[i].FechaHora.Day).FirstOrDefault();
                    histCorrespondiente.historialesPosicion.Add(filtro[i]);
                }

                HistorialPosicion ultimaPosicion = filtro[filtro.Count - 1];
                auto.Latitud  = ultimaPosicion.Latitud;
                auto.Longitud = ultimaPosicion.Longitud;
                db.SaveChanges();

                return("Ok");
            }
            catch
            {
                return("CatchWebService");
            }
        }
Ejemplo n.º 7
0
        //POST: odata/Autos/ActualizarPosicionListaDX
        //Parametros: Id,ListaPosiciones
        //(FechaHora,MetrosTramo,Latitud,Longitud,Inicio)
        public string ActualizarPosicionListaDX(ODataActionParameters parameters)
        {
            if (parameters == null)
            {
                return("Error");
            }

            int                      id              = (int)parameters["Id"];
            var                      posiciones      = parameters["ListaPosiciones"] as IEnumerable <Posicion>;
            List <Posicion>          listaPosiciones = posiciones.ToList();
            List <HistorialPosicion> hisPosicion     = new List <HistorialPosicion>();

            Auto auto = db.Autos.Where(a => a.Id == id).FirstOrDefault();

            if (auto == null)
            {
                return("Error");
            }

            for (int i = 0; i < listaPosiciones.Count; i++)
            {
                double latitud        = listaPosiciones[i].Latitud;
                double longitud       = listaPosiciones[i].Longitud;
                string horaString     = listaPosiciones[i].FechaHora;
                float  distanciaTramo = listaPosiciones[i].MetrosTramo;
                bool   inicio         = listaPosiciones[i].Inicio;

                DateTime horaRegistro;
                bool     result = DateTime.TryParseExact(horaString,
                                                         FormatoFecha.formato, FormatoFecha.provider, DateTimeStyles.None, out horaRegistro);

                if (result == false)
                {
                    return("Error");
                }

                HistorialPosicion hp = new HistorialPosicion();
                hp.FechaHora   = horaRegistro;
                hp.Latitud     = latitud;
                hp.Longitud    = longitud;
                hp.MetrosTramo = distanciaTramo;
                hp.Inicio      = inicio;

                hisPosicion.Add(hp);
            }

            if (hisPosicion.Count == 0)
            {
                return("Error");
            }


            List <HistorialDiario> historiales = auto.HistorialesDiarios.ToList();

            historiales.Reverse();

            DateTime        fechaHoy     = DateTime.Today;
            HistorialDiario historialHoy = historiales.Where(h => h.Fecha.Year == fechaHoy.Year &&
                                                             h.Fecha.Month == fechaHoy.Month &&
                                                             h.Fecha.Day == fechaHoy.Day).FirstOrDefault();

            if (historialHoy == null)
            {
                historialHoy = new HistorialDiario()
                {
                    //Fecha = hisPosicion[hisPosicion.Count -1].FechaHora.Date,
                    Fecha = fechaHoy,
                    historialesEnergia   = new List <HistorialEnergia>(),
                    historialesPosicion  = new List <HistorialPosicion>(),
                    historialesVelocidad = new List <HistorialVelocidad>()
                };
                auto.HistorialesDiarios.Add(historialHoy);
            }

            //------SE FILTRAN LOS HISTORIALES OBTENIDOS--------------
            //A partir del primer punto, solo se agregan un punto siguiente si supera los 25 metros del filtro
            #region TEST METROS POR TRAMO
            List <double> metrosTramos = new List <double>();
            for (int i = 0; i < hisPosicion.Count - 1; i++)
            {
                var sCoord = new GeoCoordinate(hisPosicion[i].Latitud, hisPosicion[i].Longitud);
                var eCoord = new GeoCoordinate(hisPosicion[i + 1].Latitud, hisPosicion[i + 1].Longitud);

                metrosTramos.Add(sCoord.GetDistanceTo(eCoord));
            }

            #endregion


            int metrosFiltro = 25;
            List <HistorialPosicion> filtro = new List <HistorialPosicion>();
            filtro.Add(hisPosicion[0]);

            int indexOrigen = 0;
            for (int i = 0; i < hisPosicion.Count; i++)
            {
                if (i > indexOrigen)
                {
                    var sCoord = new GeoCoordinate(hisPosicion[indexOrigen].Latitud, hisPosicion[indexOrigen].Longitud);
                    //a partir del index de origen se busca el primer punto a distancia mayor de 25 metros
                    //el index de ese punto se convierte en el indexorigen
                    for (int y = (indexOrigen + 1); y < hisPosicion.Count; y++)
                    {
                        var    eCoord          = new GeoCoordinate(hisPosicion[y].Latitud, hisPosicion[y].Longitud);
                        double metrosDistancia = sCoord.GetDistanceTo(eCoord);

                        if (metrosDistancia > metrosFiltro)
                        {
                            filtro.Add(hisPosicion[y]);
                            indexOrigen = y;
                            break;
                        }
                    }
                }
            }

            for (int i = 0; i < filtro.Count; i++)
            {
                historialHoy.historialesPosicion.Add(filtro[i]);
            }

            HistorialPosicion ultimaPosicion = filtro[filtro.Count - 1];
            auto.Latitud  = ultimaPosicion.Latitud;
            auto.Longitud = ultimaPosicion.Longitud;
            db.SaveChanges();

            return("Ok");
        }
Ejemplo n.º 8
0
        //POST: odata/Autos/ActualizarEnergia
        //Parametros: Id,HoraRegistro,ValorInicio,HoraInicio,ValorFinal,HoraFinal,ValorMenor,HoraMenor,ValorMayor,HoraMayor,ValorMitad,HoraMitad
        public IHttpActionResult ActualizarEnergia(ODataActionParameters parameters)
        {
            if (parameters == null)
            {
                return(BadRequest());
            }

            int      id = (int)parameters["Id"];
            string   horaRegistroString = (string)parameters["HoraRegistro"];
            DateTime horaRegistro;

            float    valorInicio      = (float)parameters["ValorInicio"];
            string   horaInicioString = (string)parameters["HoraInicio"];
            DateTime horaInicio;

            float    valorFinal      = (float)parameters["ValorFinal"];
            string   horaFinalString = (string)parameters["HoraFinal"];
            DateTime horaFinal;

            float    valorMenor      = (float)parameters["ValorMayor"];
            string   horaMenorString = (string)parameters["HoraMayor"];
            DateTime horaMenor;

            float    valorMayor      = (float)parameters["ValorMenor"];
            string   horaMayorString = (string)parameters["HoraMenor"];
            DateTime horaMayor;

            float    valorMitad      = (float)parameters["ValorMitad"];
            string   horaMitadString = (string)parameters["HoraMitad"];
            DateTime horaMitad;

            bool resultFechas;

            #region Transformar strings a fechas
            resultFechas = DateTime.TryParseExact(horaRegistroString,
                                                  FormatoFecha.formato, FormatoFecha.provider, DateTimeStyles.None, out horaRegistro);

            resultFechas = DateTime.TryParseExact(horaInicioString,
                                                  FormatoFecha.formato, FormatoFecha.provider, DateTimeStyles.None, out horaInicio);

            resultFechas = DateTime.TryParseExact(horaFinalString,
                                                  FormatoFecha.formato, FormatoFecha.provider, DateTimeStyles.None, out horaFinal);

            resultFechas = DateTime.TryParseExact(horaMenorString,
                                                  FormatoFecha.formato, FormatoFecha.provider, DateTimeStyles.None, out horaMenor);

            resultFechas = DateTime.TryParseExact(horaMayorString,
                                                  FormatoFecha.formato, FormatoFecha.provider, DateTimeStyles.None, out horaMayor);

            resultFechas = DateTime.TryParseExact(horaMitadString,
                                                  FormatoFecha.formato, FormatoFecha.provider, DateTimeStyles.None, out horaMitad);

            #endregion

            if (resultFechas == false)
            {
                return(BadRequest());
            }

            Auto auto = db.Autos.Where(a => a.Id == id).FirstOrDefault();
            List <HistorialDiario> historiales = auto.HistorialesDiarios.ToList();
            historiales.Reverse();

            DateTime        fechaHoy     = DateTime.Today;
            HistorialDiario historialHoy = historiales.Where(h => h.Fecha.Year == fechaHoy.Year &&
                                                             h.Fecha.Month == fechaHoy.Month &&
                                                             h.Fecha.Day == fechaHoy.Day).FirstOrDefault();


            if (historialHoy == null)
            {
                historialHoy = new HistorialDiario()
                {
                    Fecha = fechaHoy,
                    historialesEnergia   = new List <HistorialEnergia>(),
                    historialesPosicion  = new List <HistorialPosicion>(),
                    historialesVelocidad = new List <HistorialVelocidad>()
                };
                auto.HistorialesDiarios.Add(historialHoy);
            }

            HistorialEnergia nuevoHistorial = new HistorialEnergia();
            nuevoHistorial.HoraRegistro = horaRegistro;

            nuevoHistorial.HoraInicio = horaInicio;
            nuevoHistorial.HoraFinal  = horaFinal;
            nuevoHistorial.HoraMayor  = horaMayor;
            nuevoHistorial.HoraMenor  = horaMenor;
            nuevoHistorial.HoraMitad  = horaMitad;

            nuevoHistorial.ValorInicio = valorInicio;
            nuevoHistorial.ValorFinal  = valorFinal;
            nuevoHistorial.ValorMayor  = valorMayor;
            nuevoHistorial.ValorMenor  = valorMenor;
            nuevoHistorial.ValorMitad  = valorMitad;

            historialHoy.historialesEnergia.Add(nuevoHistorial);
            db.SaveChanges();

            return(Ok());
        }
Ejemplo n.º 9
0
        //POST: odata/Autos/ActualizarVelocidadLista
        //Parametros: Id,Registros
        //(FechaHora,Valor)
        public string ActualizarVelocidadListaDX(ODataActionParameters parameters)
        {
            if (parameters == null)
            {
                return("Error");
            }

            try
            {
                int size = 10;

                int id        = (int)parameters["Id"];
                var registros = parameters["Registros"] as IEnumerable <RegistroHistorial>;
                List <RegistroHistorial> listaRegistros = registros.ToList();

                if (listaRegistros.Count == 1)
                {
                    return("Ok");
                }

                //SE CREAN GRUPOS DE 10 EN 10 O DEPENDE DE "size"
                List <List <RegistroHistorial> > gruposDeRegistros = new List <List <RegistroHistorial> >();

                for (int i = 0; i < listaRegistros.Count; i += size)
                {
                    gruposDeRegistros.Add(listaRegistros.GetRange(i, Math.Min(size, listaRegistros.Count - i)));
                }


                Auto auto = db.Autos.Where(a => a.Id == id).FirstOrDefault();
                if (auto == null)
                {
                    return("Error");
                }


                List <HistorialVelocidad> historialesVelocidadCreados = new List <HistorialVelocidad>();

                //SE RECORREN LOS GRUPOS Y SE CREA UN HISTORIAL VELOCIDAD POR CADA UNO,
                //Se agrega a la lista

                for (int r = 0; r < gruposDeRegistros.Count; r++)
                {
                    List <RegistroHistorial> grupoActual = gruposDeRegistros[r];

                    for (int i = 0; i < grupoActual.Count; i++)
                    {
                        //Se recorren los registros y se le asigna la fecha correspondiente

                        string   horaRegistroString = grupoActual[i].FechaHora;
                        DateTime horaRegistro;
                        bool     result = DateTime.TryParseExact(horaRegistroString,
                                                                 FormatoFecha.formato, FormatoFecha.provider, DateTimeStyles.None, out horaRegistro);

                        if (result == false)
                        {
                            return("Error");
                        }

                        grupoActual[i].FechaDateTime = horaRegistro;
                    }

                    grupoActual = grupoActual.OrderBy(u => u.FechaDateTime).ToList();

                    RegistroHistorial registroInicio   = grupoActual.First();
                    RegistroHistorial registroFinal    = grupoActual.Last();
                    RegistroHistorial registro1Cuarto  = null;
                    RegistroHistorial registroMitad    = null;
                    RegistroHistorial registro3Cuartos = null;
                    RegistroHistorial registroMayor    = null;
                    RegistroHistorial registrosMenor   = null;

                    float valorMayor    = 0;
                    float valorMenor    = float.MaxValue;
                    float valor1Cuarto  = (grupoActual.Count / 4);
                    float valorMitad    = (grupoActual.Count / 2);
                    float valor3Cuartos = (grupoActual.Count / 4) * 3;


                    for (int i = 0; i < grupoActual.Count; i++)
                    {
                        RegistroHistorial regActual = grupoActual[i];

                        if (regActual.Valor >= valorMayor)
                        {
                            registroMayor = regActual;
                            valorMayor    = regActual.Valor;
                        }

                        if (regActual.Valor <= valorMenor)
                        {
                            registrosMenor = regActual;
                            valorMenor     = regActual.Valor;
                        }

                        if (registro1Cuarto == null && i >= valor1Cuarto)
                        {
                            registro1Cuarto = regActual;
                        }

                        if (registroMitad == null && i >= valorMitad)
                        {
                            registroMitad = regActual;
                        }

                        if (registro3Cuartos == null && i >= valor3Cuartos)
                        {
                            registro3Cuartos = regActual;
                        }
                    }

                    HistorialVelocidad nuevoHistorial = new HistorialVelocidad();
                    nuevoHistorial.HoraRegistro    = DateTime.Now;
                    nuevoHistorial.HoraInicio      = registroInicio.FechaDateTime;
                    nuevoHistorial.HoraFinal       = registroFinal.FechaDateTime;
                    nuevoHistorial.HoraMenor       = registrosMenor.FechaDateTime;
                    nuevoHistorial.HoraMayor       = registroMayor.FechaDateTime;
                    nuevoHistorial.HoraMitad       = registroMitad.FechaDateTime;
                    nuevoHistorial.HoraUnCuarto    = registro1Cuarto.FechaDateTime;
                    nuevoHistorial.HoraTresCuartos = registro3Cuartos.FechaDateTime;

                    nuevoHistorial.ValorInicio      = registroInicio.Valor;
                    nuevoHistorial.ValorFinal       = registroFinal.Valor;
                    nuevoHistorial.ValorMayor       = registroMayor.Valor;
                    nuevoHistorial.ValorMenor       = registrosMenor.Valor;
                    nuevoHistorial.ValorMitad       = registroMitad.Valor;
                    nuevoHistorial.ValorUnCuarto    = registro1Cuarto.Valor;
                    nuevoHistorial.ValorTresCuartos = registro3Cuartos.Valor;

                    historialesVelocidadCreados.Add(nuevoHistorial);
                }


                List <HistorialDiario> HistDiarioEnRango = CrearHistorialesDiariosEnRango(historialesVelocidadCreados.First().HoraInicio, historialesVelocidadCreados.Last().HoraFinal, auto);


                //Se registran en la base de datos los historiales creados
                for (int i = 0; i < historialesVelocidadCreados.Count; i++)
                {
                    HistorialDiario histCorrespondiente = HistDiarioEnRango.Where(h => h.Fecha.Year == historialesVelocidadCreados[i].HoraMitad.Year &&
                                                                                  h.Fecha.Month == historialesVelocidadCreados[i].HoraMitad.Month &&
                                                                                  h.Fecha.Day == historialesVelocidadCreados[i].HoraMitad.Day).FirstOrDefault();

                    histCorrespondiente.historialesVelocidad.Add(historialesVelocidadCreados[i]);
                }


                db.SaveChanges();

                return("Ok");
            }
            catch
            {
                return("CatchWebService");
            }
        }
Ejemplo n.º 10
0
        public static HistorialWeb PrepararHistorialPosicion(ProyectoAutoContext _db, HistorialWeb _HW, DateTime _fecha, int _idAuto)
        {
            Auto auto = _db.Autos.Where(a => a.Id == _idAuto).FirstOrDefault();

            if (auto == null)
            {
                return(new HistorialWeb());
            }

            HistorialDiario historialHoy = null;

            List <HistorialDiario> historialesHoy = auto.HistorialesDiarios
                                                    .Where(h => h.Fecha.Year == _fecha.Year &&
                                                           h.Fecha.Month == _fecha.Month &&
                                                           h.Fecha.Day == _fecha.Day).ToList();

            int nResultados = 0;

            foreach (HistorialDiario hd in historialesHoy)
            {
                List <HistorialPosicion> histPos = hd.historialesPosicion;
                if (histPos.Count > nResultados)
                {
                    historialHoy = hd;
                    nResultados  = histPos.Count;
                }
            }

            DateTime fechaEjemplo = new DateTime(2018, 1, 1);

            if (_fecha.Date == fechaEjemplo.Date)
            {
                _HW.historialesPosicion = CrearHistorialPosicionejemplo();
                return(_HW);
            }

            if (historialHoy == null)
            {
                _HW.historialesPosicion = new List <HistorialPosicion>();
                return(_HW);
            }


            List <HistorialPosicion> historiales = historialHoy.historialesPosicion.OrderBy(h => h.FechaHora).ToList();

            _HW.historialesPosicion = historiales;

            #region HistorialesComparables

            List <HistorialWeb.TiposHistorial> historialesComparables = new List <HistorialWeb.TiposHistorial>();
            historialesComparables.Add(HistorialWeb.TiposHistorial.Velocidad);
            _HW.historialesComparables = historialesComparables;

            List <HistorialVelocidad> histVelocidad   = historialHoy.historialesVelocidad.OrderBy(h => h.HoraRegistro).ToList();
            List <PuntoGrafico>       puntosVelocidad = VelocidadAPuntosGrafico(histVelocidad);
            _HW.historialesVelocidad = puntosVelocidad;

            #endregion

            return(_HW);
        }
Ejemplo n.º 11
0
        public static HistorialWeb PrepararHistorialVelocidad(ProyectoAutoContext _db, HistorialWeb _HW, DateTime _fecha, int _idAuto)
        {
            //historial web ya llega creado (con ciertos datos genericos como fecha y patente)

            //Ordenar historiales velocidad
            //transformarlos apuntos grafico
            //Remover repetidos si se puede
            //asignarlos al historial web

            Auto auto = _db.Autos.Where(a => a.Id == _idAuto).FirstOrDefault();

            if (auto == null)
            {
                return(new HistorialWeb());
            }

            HistorialDiario historialHoy = null;

            List <HistorialDiario> historialesHoy = auto.HistorialesDiarios
                                                    .Where(h => h.Fecha.Year == _fecha.Year &&
                                                           h.Fecha.Month == _fecha.Month &&
                                                           h.Fecha.Day == _fecha.Day).ToList();

            int nResultados = 0;

            foreach (HistorialDiario hd in historialesHoy)
            {
                if (hd.historialesVelocidad.Count > nResultados)
                {
                    historialHoy = hd;
                    nResultados  = hd.historialesVelocidad.Count;
                }
            }

            if (historialHoy == null)
            {
                _HW.historialesVelocidad = new List <PuntoGrafico>();
                return(_HW);
            }


            List <HistorialVelocidad> histVelocidad = historialHoy.historialesVelocidad.OrderBy(h => h.HoraRegistro).ToList();

            #region HistorialesComparables

            List <HistorialWeb.TiposHistorial> historialesComparables = new List <HistorialWeb.TiposHistorial>();
            historialesComparables.Add(HistorialWeb.TiposHistorial.Energia);
            _HW.historialesComparables = historialesComparables;

            List <HistorialEnergia> histEnergia = historialHoy.historialesEnergia.OrderBy(h => h.HoraRegistro).ToList();

            #endregion


            List <PuntoGrafico> puntosVelocidad = VelocidadAPuntosGrafico(histVelocidad);
            List <PuntoGrafico> puntosEnergia   = EnergiaAPuntosGrafico(histEnergia);

            if (histVelocidad.Count == 0)
            {
                puntosVelocidad = CrearHistorialVelocidadEjemplo();
                puntosEnergia   = CrearHistorialEnergiaEjemplo();
            }

            _HW.historialesVelocidad = puntosVelocidad;
            _HW.historialesEnergia   = puntosEnergia;
            _HW.ValorMaximo          = BuscarValorMaximo(puntosVelocidad);


            return(_HW);
        }