/// <summary> /// Gets a mobile position based on the givenn vehicle, position and rfid. /// </summary> /// <param name="mobile"></param> /// <param name="lastPosition"></param> /// <param name="lastRfid"></param> public MobilePosition(Coche mobile, LogUltimaPosicionVo lastPosition, LogUltimoLoginVo lastRfid) { Dispositivo = lastPosition != null ? lastPosition.Dispositivo : mobile.Dispositivo != null ? mobile.Dispositivo.Codigo : string.Empty; Interno = mobile.Interno; Patente = mobile.Patente; Fecha = lastPosition != null ? lastPosition.FechaMensaje : (DateTime?)null; IdDispositivo = lastPosition != null ? lastPosition.IdDispositivo : mobile.Dispositivo != null ? mobile.Dispositivo.Id : 0; IdDispositivoCoche = mobile.Dispositivo != null ? mobile.Dispositivo.Id : 0; FechaAlta = lastPosition != null ? lastPosition.FechaRecepcion : (DateTime?)null; Latitud = lastPosition != null ? lastPosition.Latitud : 0; Longitud = lastPosition != null ? lastPosition.Longitud : 0; Responsable = lastPosition != null ? lastPosition.Responsable : string.Empty; IdMovil = mobile.Id; IdBase = mobile.Linea != null ? mobile.Linea.Id : 0; Velocidad = lastPosition != null ? lastPosition.Velocidad : -1; IdPosicion = lastPosition != null ? lastPosition.Id : 0; //Firmware = lastPosition != null ? lastPosition.Firmware : mobile.Dispositivo != null ? mobile.Dispositivo.FullFirmwareVersion : string.Empty; ReferenciaVehiculo = mobile.Referencia; TipoDispositivo = lastPosition != null ? lastPosition.TipoDispositivo : mobile.Dispositivo != null?GetDeviceTypeDescription(mobile.Dispositivo) : string.Empty; EstadoReporte = lastPosition != null ? lastPosition.EstadoReporte : 4; Distrito = GetDistrito(mobile); Base = GetBase(mobile); Transportista = GetTransportista(mobile); TipoVehiculo = mobile.TipoCoche.Descripcion; IdDistrito = mobile.Empresa != null ? mobile.Empresa.Id : 0; //Qtree = lastPosition != null ? lastPosition.Qtree : string.Empty; Chofer = lastRfid != null ? lastRfid.Chofer : string.Empty; UltimoLogin = lastRfid != null && lastRfid.Fecha.HasValue ? lastRfid.Fecha.Value : (DateTime?)null; CentroDeCosto = mobile.CentroDeCostos != null ? mobile.CentroDeCostos.Descripcion : string.Empty; }
/// <summary> /// Gets a mobile position based on the givenn vehicle, position and rfid. /// </summary> /// <param name="dispositivo"></param> /// <param name="coche"></param> /// <param name="lastPosition"></param> /// <param name="lastRfid"></param> public MobilePosition(Dispositivo dispositivo, Coche coche, LogUltimaPosicionVo lastPosition, LogUltimoLoginVo lastRfid) { Dispositivo = dispositivo.Codigo; Interno = coche != null ? coche.Interno : null; Patente = coche != null ? coche.Patente : null; Fecha = lastPosition != null ? lastPosition.FechaMensaje : (DateTime?)null; IdDispositivo = dispositivo.Id; IdDispositivoCoche = coche != null && coche.Dispositivo != null ? coche.Dispositivo.Id : 0; FechaAlta = lastPosition != null ? lastPosition.FechaRecepcion : (DateTime?)null; Latitud = lastPosition != null ? lastPosition.Latitud : 0; Longitud = lastPosition != null ? lastPosition.Longitud : 0; Responsable = lastPosition != null ? lastPosition.Responsable : string.Empty; IdMovil = coche != null ? coche.Id : 0; IdBase = dispositivo.Linea != null ? dispositivo.Linea.Id : 0; Velocidad = lastPosition != null ? lastPosition.Velocidad : -1; IdPosicion = lastPosition != null ? lastPosition.Id : 0; //Firmware = dispositivo.FullFirmwareVersion; ReferenciaVehiculo = coche != null ? coche.Referencia : string.Empty; TipoDispositivo = GetDeviceTypeDescription(dispositivo); EstadoReporte = lastPosition != null ? lastPosition.EstadoReporte : 4; Distrito = coche != null?GetDistrito(coche) : GetDistrito(dispositivo); Base = coche != null?GetBase(coche) : GetBase(dispositivo); Transportista = GetTransportista(coche); TipoVehiculo = coche != null ? coche.TipoCoche.Descripcion : string.Empty; IdDistrito = dispositivo.Empresa != null ? dispositivo.Empresa.Id : 0; //Qtree = dispositivo.QtreeRevision; Chofer = lastRfid != null ? lastRfid.Chofer : string.Empty; UltimoLogin = lastRfid != null && lastRfid.Fecha.HasValue ? lastRfid.Fecha.Value : (DateTime?)null; CentroDeCosto = lastPosition != null ? lastPosition.CentroDeCosto : string.Empty; }
/// <summary> /// Saves a no report warning event. /// </summary> /// <param name="vehicle"></param> /// <param name="position"></param> private void SaveNoReportEvent(Coche vehicle, LogUltimaPosicionVo position) { var lastPositionDate = GetLastPositionDate(vehicle, position); var text = String.Format(" - Vehiculo: {0} - Último Reporte: {1}", position.Coche, lastPositionDate); STrace.Trace(GetType().FullName, String.Format("The vehicle {0} needs to be checked (last position on: {1}).", position.Coche, lastPositionDate)); MessageSaver.Save(MessageCode.NoReport.GetMessageCode(), vehicle, DateTime.UtcNow, null, text); }
public virtual LogUltimaPosicionVo RetrieveNewestReceivedPositionVo() { var key = MakeNewestDeviceStatusKey(Dispositivo.Id); var deviceStatus = LogicCache.Retrieve <DeviceStatus>(typeof(DeviceStatus), key); var pos = new LogPosicionBase(deviceStatus.Position, this); var ret = new LogUltimaPosicionVo(pos); return(ret); }
public MobilePoi(LogUltimaPosicionVo posicion, Geocerca referencia, Empleado chofer) { IdVehiculo = posicion.IdCoche; Interno = posicion.Coche; TipoVehiculo = posicion.TipoCoche; Distancia = Distancias.Loxodromica(posicion.Latitud, posicion.Longitud, referencia.Latitude, referencia.Longitude); Latitud = posicion.Latitud; Longitud = posicion.Longitud; PuntoDeInteres = referencia.Descripcion; Velocidad = posicion.Velocidad; Responsable = posicion.Responsable; Chofer = chofer != null ? chofer.Entidad.Descripcion : string.Empty; }
/// <summary> /// Analize if the givenn position requires a warning. /// </summary> /// <param name="position"></param> private void AnalizePosition(LogUltimaPosicionVo position) { var vehicle = DaoFactory.CocheDAO.FindById(position.IdCoche); var lastWarning = DaoFactory.LogMensajeDAO.GetLastMessageDate(vehicle, MessageCode.NoReport.GetMessageCode()); if (lastWarning.HasValue && lastWarning.Value >= position.FechaMensaje) { return; } vehicle.DeleteLastMessageDate(MessageCode.NoReport.GetMessageCode()); SaveNoReportEvent(vehicle, position); }
public static LastPosition Create(LogUltimaPosicionVo position) { var rv = new LastPosition() { Latitud = position.Latitud, Longitud = position.Longitud, Velocidad = position.Velocidad, Curso = position.Curso, Fecha = position.FechaMensaje, Hdop = position.HDop ?? 0 }; return(rv); }
/// <summary> /// Gets the last vehicle position. /// </summary> /// <param name="mobile"></param> /// <param name="lastPosition"></param> /// <param name="lastRfid"></param> /// <returns></returns> private static MobilePosition GetLastPosition(Coche mobile, LogUltimaPosicionVo lastPosition, LogUltimoLoginVo lastRfid) { var position = new MobilePosition(mobile, lastPosition, lastRfid); UpdateDates(position); position.EstadoMovil = GetStatusDescription(mobile.Estado); if (lastPosition != null) { position.EstadoDispositivo = GetStatusDescription(lastPosition.EstadoDispositivo); } return(position); }
/// <summary> /// Gets the last device position. /// </summary> /// <param name="device"></param> /// <param name="lastPosition"></param> /// <param name="lastRfid"></param> /// <returns></returns> private MobilePosition GetLastPosition(Dispositivo device, LogUltimaPosicionVo lastPosition, LogUltimoLoginVo lastRfid) { var coche = lastPosition != null?DAOFactory.CocheDAO.FindById(lastPosition.IdCoche) : DAOFactory.CocheDAO.FindMobileByDevice(device.Id); var position = new MobilePosition(device, coche, lastPosition, lastRfid); UpdateDates(position); if (lastPosition != null) { position.EstadoMovil = GetStatusDescription(coche.Estado); position.EstadoDispositivo = GetStatusDescription(lastPosition.EstadoDispositivo); } return(position); }
protected void VehiculosCercanos(Coche vehiculo, LogUltimaPosicionVo posicion) { var vehiculos = DAOFactory.CocheDAO.GetList(IdsEmpresas, IdsLineas) .Where(v => v.Dispositivo != null) .ToList(); var positions = SharedPositions.GetLastPositions(vehiculos); var distancias = from pos in positions where pos.IdCoche != vehiculo.Id select new VehiculoDistancia { Distancia = Distancias.Loxodromica(posicion.Latitud, posicion.Longitud, pos.Latitud, pos.Longitud), Id = pos.IdCoche, Interno = pos.Coche }; var cercanas = (from pos in distancias orderby pos.Distancia select pos).Take(5); gridMov.DataSource = cercanas; gridMov.DataBind(); }
public LogUltimaPosicionVo GetLastOnlineVehiclePosition(Coche coche) { try { if (coche == null) { return(null); } LogUltimaPosicionVo lastPositionVo = null; if (coche.IsLastPositionInCache()) { lastPositionVo = coche.RetrieveLastPosition(); } if (lastPositionVo != null) // if a position existed in cached, then return it else go find last one on DB. { return(lastPositionVo); } var maxMonths = coche.Empresa != null ? coche.Empresa.MesesConsultaPosiciones : 3; var q = InternalGetLastNPositionsBetweenDates(coche.Id, FirstRow, null, null, maxMonths, Order.Desc("lp.FechaMensaje"), null, null); var fe = q.UniqueResult <LogPosicion>(); if (fe != null) { lastPositionVo = new LogUltimaPosicionVo(fe); } coche.StoreLastPosition(lastPositionVo); return(lastPositionVo); } catch (Exception e) { STrace.Exception(GetType().FullName, e); return(null); } }
/// <summary> /// Gets the last position date converted to the vehicle`s associated culture. /// </summary> /// <param name="vehicle"></param> /// <param name="position"></param> /// <returns></returns> private static DateTime GetLastPositionDate(Coche vehicle, LogUltimaPosicionVo position) { var culture = GetCulture(vehicle); return(culture != null?position.FechaMensaje.AddHours(culture.BaseUtcOffset.TotalHours) : position.FechaMensaje); }
/// <summary> /// Stores in cache the givenn position as the vehicles last position. /// </summary> /// <param name="position"></param> public virtual void StoreLastPosition(LogUltimaPosicionVo position) { this.Store("lastPosition", position); }
public LogUltimaPosicionVo GetLastVehiclePosition(Coche coche) { try { if (coche == null) { return(null); } LogUltimaPosicionVo lastPositionVo = null; if (coche.IsLastPositionInCache()) { lastPositionVo = coche.RetrieveLastPosition(); } if (coche.IsNewestPositionReceivedInCache()) { var newestReceivedPos = coche.RetrieveNewestReceivedPositionVo(); if (newestReceivedPos != null) { newestReceivedPos.Coche = newestReceivedPos.Coche + " *"; if (lastPositionVo == null || newestReceivedPos.FechaMensaje > lastPositionVo.FechaMensaje) { lastPositionVo = newestReceivedPos; } } } if (lastPositionVo != null) // if a position existed in cached, then return it else go find last one on DB. { return(lastPositionVo); } var maxMonths = coche.Empresa != null ? coche.Empresa.MesesConsultaPosiciones : 3; var te = new TimeElapsed(); var q = InternalGetLastNPositionsBetweenDates(coche.Id, FirstRow, null, null, maxMonths, Order.Desc("lp.FechaMensaje"), null, null); var fe = q.UniqueResult <LogPosicion>(); var totalSecs = te.getTimeElapsed().TotalSeconds; if (totalSecs > 1) { STrace.Error("DispatcherLock", coche.Dispositivo.Id, "InternalGetLastNPositionsBetweenDates: " + totalSecs); } if (fe != null) { lastPositionVo = new LogUltimaPosicionVo(fe); } te.Restart(); coche.StoreLastPosition(lastPositionVo); totalSecs = te.getTimeElapsed().TotalSeconds; if (totalSecs > 1) { STrace.Error("DispatcherLock", coche.Dispositivo.Id, "StoreLastPosition: " + totalSecs); } return(lastPositionVo); } catch (Exception e) { STrace.Exception(GetType().FullName, e); return(null); } }
public int ReportPosition(Coche coche, LogUltimaPosicionVo lastPosition) { return(ReportEvent("P", coche, lastPosition)); }
public XmlDocument ObtenerEstadoEntrega(String Distrito, String Base, String Entrega, String Cliente) { var address = HttpContext.Current.Request.UserHostAddress; try { using (StreamWriter sw = File.AppendText(Directory.GetCurrentDirectory() + @"\LOGIP.txt")) { sw.WriteLine(address.ToString() + "\t" + DateTime.Now.ToString("ddMMyyyyHHmmssfff")); } } catch (Exception) { } if (!String.IsNullOrEmpty(Distrito) && !String.IsNullOrEmpty(Base) && (!String.IsNullOrEmpty(Entrega) || !String.IsNullOrEmpty(Cliente))) { var EstadoActual = ""; var TiempoLlegada = ""; var DistanciakmtsLlegada = ""; var linkGoogleMaps = "https://www.google.com.ar/maps/dir/-34.598198,-58.3841437/-34.5972089,-58.3780497"; ViajeDistribucionDAO dao = new ViajeDistribucionDAO(); LogPosicionDAO daopos = new LogPosicionDAO(); var sinbase = dao.FindAll().Where(x => x.Inicio.Day.Equals(DateTime.Now.Day) && x.Inicio.Month.Equals(DateTime.Now.Month) && x.Inicio.Year.Equals(DateTime.Now.Year) && x.Empresa.RazonSocial.ToString().Trim().ToUpper().Contains(Distrito.Trim().ToUpper())); if (!String.IsNullOrEmpty(Base)) { sinbase = sinbase.Where(x => x.Linea == null || x.Linea != null && x.Linea.Descripcion.ToString().Trim().ToUpper().Contains(Base.Trim().ToUpper())); } bool closeLoop = false; foreach (var item in sinbase) { foreach (EntregaDistribucion detalle in item.Detalles.Where(x => x.PuntoEntrega != null)) { //codigo = entrega //descripcion cliente if (detalle.PuntoEntrega.Codigo.Trim().ToUpper().Equals(Entrega.Trim().ToUpper()) || detalle.PuntoEntrega.Descripcion.Trim().ToUpper().Equals(Cliente.Trim().ToUpper())) { switch (detalle.Estado) { case EntregaDistribucion.Estados.EnSitio: { EstadoActual = "EnSitio"; break; } case EntregaDistribucion.Estados.Completado: { EstadoActual = "Completado"; break; } case EntregaDistribucion.Estados.Cancelado: { EstadoActual = "Cancelado"; break; } case EntregaDistribucion.Estados.EnZona: { EstadoActual = "EnZona"; break; } case EntregaDistribucion.Estados.NoCompletado: { EstadoActual = "NoCompletado"; break; } case EntregaDistribucion.Estados.Pendiente: { EstadoActual = "Pendiente"; break; } case EntregaDistribucion.Estados.Restaurado: { EstadoActual = "Restaurado"; break; } case EntregaDistribucion.Estados.SinVisitar: { EstadoActual = "SinVisitar"; break; } case EntregaDistribucion.Estados.Visitado: { EstadoActual = "Visitado"; break; } default: break; } LogUltimaPosicionVo ult = daopos.GetLastVehiclePosition(item.Vehiculo); if (ult == null) { ult = daopos.GetLastOnlineVehiclePosition(item.Vehiculo); } LatLon origen = new LatLon(ult.Latitud, ult.Longitud); LatLon destino = new LatLon(detalle.PuntoEntrega.ReferenciaGeografica.Latitude, detalle.PuntoEntrega.ReferenciaGeografica.Longitude); linkGoogleMaps = "https://www.google.com.ar/maps/dir/" + origen.Latitud.ToString().Replace(',', '.') + "," + origen.Longitud.ToString().Replace(',', '.') + "/" + destino.Latitud.ToString().Replace(',', '.') + "," + destino.Longitud.ToString().Replace(',', '.'); var waypoints = new List <LatLon>(); waypoints.Add(origen); waypoints.Add(destino); var directions = GoogleDirections.GetDirections(origen, destino, GoogleDirections.Modes.Driving, string.Empty, waypoints.ToArray()); int reintentos = 0; while (directions == null && reintentos < 4) { reintentos++; Thread.Sleep(2000); directions = GoogleDirections.GetDirections(origen, destino, GoogleDirections.Modes.Driving, string.Empty, waypoints.ToArray()); } if (directions != null) { TiempoLlegada = new DateTime(directions.Duration.Ticks).ToString("HH:mm:ss"); DistanciakmtsLlegada = (directions.Distance / 1000).ToString(); } closeLoop = true; break; } } if (closeLoop) { break; } } XmlDocument doc = new XmlDocument(); XmlDeclaration xmlDeclaration = doc.CreateXmlDeclaration("1.0", "UTF-8", null); XmlElement root = doc.DocumentElement; doc.InsertBefore(xmlDeclaration, root); //(2) string.Empty makes cleaner code XmlElement element1 = doc.CreateElement(string.Empty, "body", string.Empty); doc.AppendChild(element1); XmlElement element2 = doc.CreateElement(string.Empty, "EstadoActual", string.Empty); XmlText text1 = doc.CreateTextNode(EstadoActual); element2.AppendChild(text1); element1.AppendChild(element2); XmlElement element3 = doc.CreateElement(string.Empty, "TiempoLlegadaHHMMSS", string.Empty); XmlText text2 = doc.CreateTextNode(TiempoLlegada); element3.AppendChild(text2); element1.AppendChild(element3); XmlElement element4 = doc.CreateElement(string.Empty, "DistanciakmtsLlegada", string.Empty); XmlText text3 = doc.CreateTextNode(DistanciakmtsLlegada); element4.AppendChild(text3); element1.AppendChild(element4); XmlElement element5 = doc.CreateElement(string.Empty, "linkGoogleMaps", string.Empty); XmlText text4 = doc.CreateTextNode(linkGoogleMaps); element5.AppendChild(text4); element1.AppendChild(element5); return(doc); } else { return(new XmlDocument()); } }