Exemplo n.º 1
0
        /// <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;
        }
Exemplo n.º 2
0
 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
                          ));
 }
Exemplo n.º 3
0
 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);
 }
Exemplo n.º 4
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);
        }
Exemplo n.º 5
0
        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);
        }
Exemplo n.º 6
0
 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;
 }
Exemplo n.º 7
0
 /// <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;
     }
 }
Exemplo n.º 8
0
        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);
        }
Exemplo n.º 9
0
        /// <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);
            }
        }
Exemplo n.º 10
0
 /// <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;
 }
Exemplo n.º 11
0
        /// <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);
        }
Exemplo n.º 12
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;
 }
Exemplo n.º 13
0
        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);
        }
Exemplo n.º 14
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));
 }
Exemplo n.º 15
0
 /// <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
     });
 }
Exemplo n.º 16
0
 public static String FromPosicion(LogPosicionBase posicion)
 {
     return(posicion.Velocidad > 0 ? Datamart.Estadosvehiculo.EnMovimiento : Datamart.Estadosvehiculo.Detenido);
 }
Exemplo n.º 17
0
 public static String FromPosicion(LogPosicionBase posicion)
 {
     return(posicion.MotorOn.HasValue
                ? (posicion.MotorOn.Value ? Datamart.EstadosMotor.Encendido : Datamart.EstadosMotor.Apagado)
                : Datamart.EstadosMotor.Indefinido);
 }