/// <summary> /// Determines if the current device has valid parents. /// </summary> /// <returns></returns> private void HasValidParents(LogPosicionBase position) { var validCompany = position.Coche.Empresa == null || !position.Coche.Empresa.Baja; var validLocation = position.Coche.Linea == null || !position.Coche.Linea.Baja; ValidParents = validCompany || validLocation; }
public String GetHash(LogPosicionBase posicion) { return(string.Format("{0}|{1}|{2}", posicion.Velocidad == 0 ? "D" : "M", // Detención/Movimiento posicion.MotorOn.HasValue ? (posicion.MotorOn.Value ? "E" : "A") : "D", // Estado Motor posicion.Zona != null ? posicion.Zona.Id : 0 // Zona de manejo )); }
private static double GetDistance(LogPosicionBase initialPosition, LogPosicionBase lastPosition) { if (initialPosition == null || lastPosition == null) { return(0); } return(Distancias.Loxodromica(initialPosition.Latitud, initialPosition.Longitud, lastPosition.Latitud, lastPosition.Longitud) / 1000.0); }
/// <summary> /// Corrects the current position georeferenciation in order to maintain the original stop position. /// </summary> /// <param name="lastPosition"></param> /// <param name="posicion"></param> private void CorrectGeoreferenciation(LogPosicionBase lastPosition, LogPosicion posicion) { posicion.Longitud = lastPosition.Longitud; posicion.Latitud = lastPosition.Latitud; posicion.Altitud = lastPosition.Altitud; posicion.Velocidad = lastPosition.Velocidad; DaoFactory.LogPosicionDAO.SaveOrUpdate(posicion); }
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 MobilePoiHistoric(LogPosicionBase posicion, ReferenciaGeografica referencia, DateTime fecha) { Interno = posicion.Coche.Interno; TipoVehiculo = posicion.Coche.TipoCoche.Descripcion; 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.Coche.Chofer != null ? posicion.Coche.Chofer.Entidad.Descripcion : string.Empty; Fecha = fecha; RefId = referencia.Id; }
/// <summary> /// Instanciates a new position vo based on the givenn position. /// </summary> /// <param name="lastPosition"></param> public LogUltimaPosicionVo(LogPosicionBase lastPosition) : base(lastPosition) { if (lastPosition != null && lastPosition.Coche != null && lastPosition.Coche.Empresa != null) { MinutosEnAmarillo = lastPosition.Coche.Empresa.MinutosEnAmarillo; HorasEnRojo = lastPosition.Coche.Empresa.HorasEnRojo; } else { MinutosEnAmarillo = 5; HorasEnRojo = 48; } }
private bool EsPosicionValida(LogPosicionBase a, LogPosicionBase b) { if (a == null || b == null) { return(true); } //Calculo el tiempo entre posiciones, la distancia y la maxima distancia alcanzable por el movil en ese intervalo de tiempo. var tiempo = Math.Abs(b.FechaMensaje.Subtract(a.FechaMensaje).TotalSeconds); var distancia = Math.Abs(Distancias.Loxodromica(a.Latitud, a.Longitud, b.Latitud, b.Longitud)); var maximaDistanciaTipoVehiculo = (Vehiculo.TipoCoche.MaximaVelocidadAlcanzable * tiempo) / 3.6; return(distancia <= maximaDistanciaTipoVehiculo); }
/// <summary> /// Instanciates a new position vo based on the givenn position. /// </summary> /// <param name="lastPosition"></param> public LogPosicionVo(LogPosicionBase lastPosition) { var te = new TimeElapsed(); Id = lastPosition.Id; FechaRecepcion = lastPosition.FechaRecepcion; FechaMensaje = lastPosition.FechaMensaje; Longitud = lastPosition.Longitud; Latitud = lastPosition.Latitud; Altitud = lastPosition.Altitud; IdDispositivo = lastPosition.Dispositivo.Id; try { Dispositivo = lastPosition.Dispositivo.Codigo; TipoDispositivo = String.Format("{0} - {1}", lastPosition.Dispositivo.TipoDispositivo.Fabricante, lastPosition.Dispositivo.TipoDispositivo.Modelo); //Firmware = lastPosition.Dispositivo.FullFirmwareVersion; //Qtree = lastPosition.Dispositivo.QtreeRevision; EstadoDispositivo = lastPosition.Dispositivo.Estado; } catch {} Velocidad = lastPosition.Velocidad; Curso = lastPosition.Curso; MotorOn = lastPosition.MotorOn; HDop = lastPosition.HDop; var totalSecs = te.getTimeElapsed().TotalSeconds; if (totalSecs > 1) { STrace.Error("DispatcherLock", lastPosition.Dispositivo.Id, "LogPosicionVo #1: " + totalSecs); } te.Restart(); ApplyVehicleData(lastPosition.Coche); totalSecs = te.getTimeElapsed().TotalSeconds; if (totalSecs > 1) { STrace.Error("DispatcherLock", lastPosition.Dispositivo.Id, "ApplyVehicleData: " + totalSecs); } te.Restart(); HasValidParents(lastPosition); totalSecs = te.getTimeElapsed().TotalSeconds; if (totalSecs > 1) { STrace.Error("DispatcherLock", lastPosition.Dispositivo.Id, "HasValidParents: " + totalSecs); } }
/// <summary> /// Generates a new route position based on the givenn database position. /// </summary> /// <param name="position"></param> /// <param name="historical"></param> /// <param name="motivoDescarte"></param> public RoutePosition(LogPosicionBase position, Boolean historical, int motivoDescarte) { Altitude = position.Altitud; Course = position.Curso; Date = position.FechaMensaje; Recieved = position.FechaRecepcion; Id = position.Id; Latitude = position.Latitud; Longitude = position.Longitud; Speed = position.Velocidad; Status = position.Status; MotorOn = position.MotorOn; Historical = historical; MotivoDescarte = motivoDescarte; }
/// <summary> /// Gets the mobile or device report status based on the last reported position datetime. /// </summary> /// <param name="position"></param> private static int GetReportStatus(LogPosicionBase position) { if (position == null) { return(3); } var minutosDesdeReporte = DateTime.UtcNow.Subtract(position.FechaMensaje); if (minutosDesdeReporte > TimeSpan.FromMinutes(Minutesred)) { return(2); } return(minutosDesdeReporte > TimeSpan.FromMinutes(Minutesyellow) ? 1 : 0); }
/// <summary> /// Instanciates a new discarted position with the givenn reason code and position values. /// </summary> public LogPosicionDescartada(LogPosicionBase position, DiscardReason reasonCode) { FechaRecepcion = position.FechaRecepcion; FechaMensaje = position.FechaMensaje; Longitud = position.Longitud; Latitud = position.Latitud; Dispositivo = position.Dispositivo; Coche = position.Coche; Velocidad = position.Velocidad; VeloCalculada = position.VeloCalculada; Altitud = position.Altitud; Curso = position.Curso; Status = position.Status; MotorOn = position.MotorOn; MotivoDescarte = (int)reasonCode; }
public double GetDistancia(LogPosicionBase inicio, LogPosicionBase fin, DateTime?desde, DateTime?hasta) { if (inicio == null || fin == null) { return(0); } var totalDistance = Distancias.Loxodromica(inicio.Latitud, inicio.Longitud, fin.Latitud, fin.Longitud) / 1000.0; if (!desde.HasValue && !hasta.HasValue) { return(totalDistance); } var fDesde = desde.HasValue ? desde.Value : inicio.FechaMensaje; var fHasta = hasta.HasValue ? hasta.Value : fin.FechaMensaje; var totalTime = fin.FechaMensaje.Subtract(inicio.FechaMensaje).TotalMinutes; var partialTime = fHasta.Subtract(fDesde).TotalMinutes; return(totalTime > 0 ? (totalDistance * partialTime) / totalTime : 0); }
/// <summary> /// Instanciates a new route position. /// </summary> /// <param name="posicion"></param> /// <param name="historical"></param> /// <param name="motivoDescarte"></param> /// <returns></returns> private static RoutePosition GetRoutePosition(LogPosicionBase posicion, Boolean historical, int motivoDescarte) { return(new RoutePosition(posicion, historical, motivoDescarte)); }
/// <summary> /// Get s amobile position. /// </summary> /// <param name="coche"></param> /// <param name="dispositivo"></param> /// <param name="lastPosition"></param> /// <param name="lastRfid"></param> /// <returns></returns> private static MobilePosition GetPosition(Coche coche, Dispositivo dispositivo, LogPosicionBase lastPosition, LogMensajeBase lastRfid) { return(new MobilePosition { Dispositivo = dispositivo.Codigo, Interno = coche.Interno, Fecha = lastPosition.FechaMensaje.ToDisplayDateTime(), IdDispositivo = dispositivo.Id, FechaAlta = lastPosition.FechaRecepcion.ToDisplayDateTime(), Latitud = lastPosition.Latitud, Longitud = lastPosition.Longitud, Responsable = coche.Chofer != null ? coche.Chofer.Entidad.Descripcion : string.Empty, IdMovil = coche.Id, IdBase = coche.Linea != null ? coche.Linea.Id : 0, Velocidad = lastPosition.Velocidad, IdPosicion = lastPosition.Id, //Firmware = dispositivo.FullFirmwareVersion, EstadoMovil = GetStatusDescription(coche.Estado), EstadoDispositivo = GetStatusDescription(dispositivo.Estado), ReferenciaVehiculo = coche.Referencia, TipoDispositivo = GetDeviceTypeDescription(dispositivo), EstadoReporte = GetReportStatus(lastPosition), Distrito = MobilePosition.GetDistrito(coche), Base = MobilePosition.GetBase(coche), TipoVehiculo = coche.TipoCoche.Descripcion, IdDistrito = coche.Empresa != null ? coche.Empresa.Id : 0, //Qtree = dispositivo.QtreeRevision, Chofer = lastRfid != null ? lastRfid.Chofer != null ? lastRfid.Chofer.Entidad.Descripcion : string.Empty : string.Empty, UltimoLogin = lastRfid != null?lastRfid.Fecha.ToDisplayDateTime() : DateTime.MinValue }); }
public static String FromPosicion(LogPosicionBase posicion) { return(posicion.Velocidad > 0 ? Datamart.Estadosvehiculo.EnMovimiento : Datamart.Estadosvehiculo.Detenido); }
public static String FromPosicion(LogPosicionBase posicion) { return(posicion.MotorOn.HasValue ? (posicion.MotorOn.Value ? Datamart.EstadosMotor.Encendido : Datamart.EstadosMotor.Apagado) : Datamart.EstadosMotor.Indefinido); }