/// <summary> /// Obtiene la última posicion de las unidades pedidas, version para Zeek Transporte, considera funcionalidad de combustible. /// </summary> /// <param name="unidades">Arreglo de identificadores de las unidades</param> /// <returns></returns> public static List<Ubicacion> UltimaUbicacionTransporteDebug(List<string> unidades, string cliente) { //query con notificacion geocercas string query = "select p.unidad, fecha, velocidad, latitud, longitud, evento, VolumenCombustibleGlobal, VolumenesCombustible, VolumenesCombustibleCrudos, NivelesCombustible, r.accion, r.fechahora, r.geocerca " + "from PosicionActualcombustible p " + "left outer join reportegeocercaactual r " + "on p.unidad=r.unidad " + "where p.unidad in ("; //concatenar las unidades en el query foreach (string unidad in unidades) query += "'" + unidad + "', "; //quitar la última coma y espacio query = query.Remove(query.Length - 2); //agregar los dos paréntesis finales. query += ")"; Ubicacion ubicacion; List<Ubicacion> listaUbicaciones = new List<Ubicacion>(); List<Geocerca> NombresGeocercas = GeocercasBD.getGeocercasNombre(cliente); using (SqlConnection sqlConnection = new SqlConnection(ConfigurationManager.ConnectionStrings["ConnectionStringBD"].ConnectionString)) { sqlConnection.Open(); using (SqlCommand sqlCommand = new SqlCommand(query, sqlConnection)) { using (SqlDataReader sqlDataReader = sqlCommand.ExecuteReader()) { while (sqlDataReader.Read()) { ubicacion = new Ubicacion(); ubicacion.Unidad = (string)sqlDataReader["Unidad"]; ubicacion.Fecha = (DateTime)sqlDataReader["Fecha"]; ubicacion.Velocidad = (int)((double)sqlDataReader["Velocidad"]); int latitud = (int)sqlDataReader["Latitud"]; int longitud = (int)sqlDataReader["Longitud"]; System.Drawing.PointF p = GPSInfo.ParseLatitudLongitud(latitud, longitud); ubicacion.Latitud = p.Y; ubicacion.Longitud = p.X; ubicacion.Evento = (byte)((int)sqlDataReader["Evento"]); // Combustible ubicacion.CombustibleGlobal = ((int)sqlDataReader["VolumenCombustibleGlobal"]); // Transformamos el string de 1,1,1,1 a una lista de enteros para asignarla a la ubicacion string volumenesFlat = (string)sqlDataReader["VolumenesCombustible"]; ubicacion.VolumenesCombustible = comasToLista(volumenesFlat); string crudosFlat = (string)sqlDataReader["VolumenesCombustibleCrudos"]; ubicacion.VolumenesCombustibleCrudos = comasToLista(crudosFlat); string nivelesFlat = (string)sqlDataReader["NivelesCombustible"]; ubicacion.NivelesCombustible = comasToLista(nivelesFlat); //datos de geocerca if (!DBNull.Value.Equals(sqlDataReader["geocerca"])) { string geoID = (string)sqlDataReader["geocerca"]; //Verificamos si se tiene un nombre de la geocerca. De lo contrario no guardar if (NombresGeocercas.Find(x => x.GeocercaID == geoID) != null) { ReporteGeocerca reporte = new ReporteGeocerca(); reporte.GeocercaID = geoID; string nombre = NombresGeocercas.Find(x => x.GeocercaID == reporte.GeocercaID).Nombre; reporte.GeocercaNombre = (!string.IsNullOrEmpty(nombre)) ? nombre : ""; reporte.FechaHora = (DateTime)sqlDataReader["fechahora"]; reporte.Accion = (int)sqlDataReader["accion"];//accion 0 - entrada. accion 1 = salida ubicacion.DatosGeocerca = reporte; } } listaUbicaciones.Add(ubicacion); } } } } return listaUbicaciones; }
/// <summary> /// Obtiene la última posicion de las unidades pedidas, version para Zeek Transporte, considera funcionalidad de combustible. /// </summary> /// <param name="unidades">Arreglo de identificadores de las unidades</param> /// <returns></returns> public static List<Ubicacion> UltimaUbicacionTransporte(List<string> unidades, string cliente) { //query con notificacion geocercas // p.unidad, fecha, velocidad, latitud, longitud, evento, VolumenCombustibleGlobal, VolumenesCombustible, r.accion, r.fechahora, r.geocerca string query = "select * " + "from posicionactualCombustible p " + "left outer join reportegeocercaactual r " + "on p.unidad=r.unidad " + "where p.unidad in ("; //concatenar las unidades en el query foreach (string unidad in unidades) query += "'" + unidad + "', "; //quitar la última coma y espacio query = query.Remove(query.Length - 2); //agregar los dos paréntesis finales. query += ")"; Ubicacion ubicacion; List<Ubicacion> listaUbicaciones = new List<Ubicacion>(); List<Geocerca> NombresGeocercas = GeocercasBD.getGeocercasNombre(cliente); using (SqlConnection sqlConnection = new SqlConnection(ConfigurationManager.ConnectionStrings["ConnectionStringBD"].ConnectionString)) { sqlConnection.Open(); using (SqlCommand sqlCommand = new SqlCommand(query, sqlConnection)) { using (SqlDataReader sqlDataReader = sqlCommand.ExecuteReader()) { while (sqlDataReader.Read()) { ubicacion = new Ubicacion(); ubicacion.Unidad = (string)sqlDataReader["Unidad"]; ubicacion.Fecha = (DateTime)sqlDataReader["Fecha"]; ubicacion.Velocidad = (int)((double)sqlDataReader["Velocidad"]); int latitud = (int)sqlDataReader["Latitud"]; int longitud = (int)sqlDataReader["Longitud"]; System.Drawing.PointF p = GPSInfo.ParseLatitudLongitud(latitud, longitud); ubicacion.Latitud = p.Y; ubicacion.Longitud = p.X; ubicacion.Evento = (byte)((int)sqlDataReader["Evento"]); //ubicacion.odometro = (int)sqlDataReader["uodo"]; //ubicacion.orientacion = (int)sqlDataReader["uori"]; // Combustible if (DataRecordExtensions.HasColumn(sqlDataReader, "VolumenCombustibleGlobal")) { if (!DBNull.Value.Equals(sqlDataReader["VolumenCombustibleGlobal"])) { ubicacion.CombustibleGlobal = ((int)sqlDataReader["VolumenCombustibleGlobal"]); // Transformamos el string de 1,1,1,1 a una lista de enteros para asignarla a la ubicacion string volumenesFlat = (string)sqlDataReader["VolumenesCombustible"]; List<string> volumenesString = volumenesFlat.Split(',').ToList(); List<int> volumenes = new List<int>(); foreach (string v in volumenesString) { volumenes.Add(int.Parse(v)); } ubicacion.VolumenesCombustible = volumenes; } } if (DataRecordExtensions.HasColumn(sqlDataReader, "ubat")) { if (!DBNull.Value.Equals(sqlDataReader["ubat"])) { ubicacion.porcentajeBateria = (int)sqlDataReader["ubat"]; } } // Valor artificial para ser no desplegado, nunca deberian llegar a el, estan en el infierno... ubicacion.temperatura = 666; ubicacion.sensoresTemperatura = new List<double>(); // Si tiene campos de TPV if (DataRecordExtensions.HasColumn(sqlDataReader, "temperatura") && DataRecordExtensions.HasColumn(sqlDataReader, "presion")) { if (!DBNull.Value.Equals(sqlDataReader["temperatura"])) { ubicacion.temperatura = (double)sqlDataReader["temperatura"]; } } if (DataRecordExtensions.HasColumn(sqlDataReader, "temperaturas")) { if (!DBNull.Value.Equals(sqlDataReader["temperaturas"])) { ubicacion.sensoresTemperatura = extraerTemperaturas((string)sqlDataReader["temperaturas"]); } if (!DBNull.Value.Equals(sqlDataReader["EstadoThermo"])) { ubicacion.estatusTermo = Int32.Parse((string)sqlDataReader["EstadoThermo"]); } } //datos de geocerca if (!DBNull.Value.Equals(sqlDataReader["geocerca"])) { string geoID = (string)sqlDataReader["geocerca"]; //Verificamos si se tiene un nombre de la geocerca. De lo contrario no guardar if (NombresGeocercas.Find(x => x.GeocercaID == geoID) != null) { ReporteGeocerca reporte = new ReporteGeocerca(); reporte.GeocercaID = geoID; string nombre = NombresGeocercas.Find(x => x.GeocercaID == reporte.GeocercaID).Nombre; reporte.GeocercaNombre = (!string.IsNullOrEmpty(nombre)) ? nombre : ""; reporte.FechaHora = (DateTime)sqlDataReader["fechahora"]; reporte.Accion = (int)sqlDataReader["accion"];//accion 0 - entrada. accion 1 = salida ubicacion.DatosGeocerca = reporte; } } listaUbicaciones.Add(ubicacion); } } } } return listaUbicaciones; }