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); }
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)); }
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); }
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); }
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; //} }
//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"); } }
//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"); }
//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()); }
//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"); } }
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); }
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); }