예제 #1
0
        /// <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;
        }
예제 #2
0
        /// <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;
        }
예제 #3
0
        /// <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);
        }
예제 #4
0
파일: Coche.cs 프로젝트: jesumarquez/lt
        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);
        }
예제 #5
0
파일: MobilePoi.cs 프로젝트: jesumarquez/lt
 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;
 }
예제 #6
0
        /// <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);
        }
예제 #7
0
        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);
        }
예제 #8
0
        /// <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);
        }
예제 #9
0
        /// <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);
        }
예제 #10
0
        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();
        }
예제 #11
0
        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);
            }
        }
예제 #12
0
        /// <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);
        }
예제 #13
0
파일: Coche.cs 프로젝트: jesumarquez/lt
 /// <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);
 }
예제 #14
0
        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);
            }
        }
예제 #15
0
파일: Service.cs 프로젝트: jesumarquez/lt
 public int ReportPosition(Coche coche, LogUltimaPosicionVo lastPosition)
 {
     return(ReportEvent("P", coche, lastPosition));
 }
예제 #16
0
        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());
            }
        }