コード例 #1
0
 private void DeleteCache(string key)
 {
     if (LogicCache.KeyExists(typeof(MensajeVO), key))
     {
         LogicCache.Delete(typeof(MensajeVO), key);
     }
 }
コード例 #2
0
        /// <summary>
        /// Finds the message with the givenn code for the specified location and base.
        /// </summary>
        /// <param name="codigo"></param>
        /// <param name="device"></param>
        /// <returns></returns>
        public MensajeVO GetByCodigo(String codigo, int device)
        {
            if (device == 0)
            {
                return(null);
            }
            if (String.IsNullOrEmpty(codigo))
            {
                return(null);
            }

            var vehicle = new CocheDAO().FindMobileByDevice(device);
            var emp     = vehicle.Empresa != null ? vehicle.Empresa.Id : vehicle.Linea != null ? vehicle.Linea.Empresa != null ? vehicle.Linea.Empresa.Id : -1 : -1;
            var lin     = vehicle.Linea != null ? vehicle.Linea.Id : -1;

            var key = String.Format("message:{0}:{1}:{2}", emp, lin, codigo);

            if (!LogicCache.KeyExists(typeof(MensajeVO), key))
            {
                var result = FindByEmpresaYLineaAndUser(vehicle.Empresa, vehicle.Linea, null).FirstOrDefault(m => Convert.ToInt32(m.Codigo) == Convert.ToInt32(codigo));

                var mensajeVo = result != null ? new MensajeVO(result) : null;

                LogicCache.Store(typeof(MensajeVO), key, mensajeVo);

                return(mensajeVo);
            }

            return(LogicCache.Retrieve <MensajeVO>(typeof(MensajeVO), key));
        }
コード例 #3
0
//        public PedidoDAO(ISession session) : base(session) { }

        #region Find Methods

        public int FindNextId()
        {
            const string cacheKey = "AutoGenCode";
            int          maxId;

            if (LogicCache.KeyExists(typeof(Pedido), cacheKey))
            {
                maxId = (int)LogicCache.Retrieve <object>(typeof(Pedido), cacheKey);
            }
            else
            {
                maxId = Session.Query <Pedido>().Any()
                    ? Session.Query <Pedido>().Max(p => p.Id)
                    : 1;
            }

            while (FindByCode(-1, maxId.ToString()) != null)
            {
                maxId++;
            }

            LogicCache.Store(typeof(Pedido), cacheKey, maxId, DateTime.Now.AddMinutes(5));

            return(maxId);
        }
コード例 #4
0
        /// <summary>
        /// Finds the message with the givenn code for the specified location and base.
        /// </summary>
        /// <param name="codigo"></param>
        /// <param name="empresa"></param>
        /// <param name="linea"></param>
        /// <returns></returns>
        public MensajeVO GetByCodigo(String codigo, Empresa empresa, Linea linea)
        {
            if (String.IsNullOrEmpty(codigo))
            {
                return(null);
            }

            var emp = empresa != null ? empresa.Id : linea != null ? linea.Empresa != null ? linea.Empresa.Id : -1 : -1;
            var lin = linea != null ? linea.Id : -1;

            var key = String.Format("message:{0}:{1}:{2}", emp, lin, codigo);

            if (!LogicCache.KeyExists(typeof(MensajeVO), key))
            {
                var result = FindByEmpresaYLineaAndUser(empresa, linea, null).FirstOrDefault(m => Convert.ToInt32(m.Codigo) == Convert.ToInt32(codigo));

                var mensajeVo = result != null ? new MensajeVO(result) : null;

                LogicCache.Store(typeof(MensajeVO), key, mensajeVo);

                return(mensajeVo);
            }

            return(LogicCache.Retrieve <MensajeVO>(typeof(MensajeVO), key));
        }
コード例 #5
0
ファイル: Coche.cs プロジェクト: jesumarquez/lt
        public virtual Boolean IsNewestPositionReceivedInCache()
        {
            if (Dispositivo == null)
            {
                return(false);
            }

            var key = MakeNewestDeviceStatusKey(Dispositivo.Id);

            return(LogicCache.KeyExists(typeof(DeviceStatus), key));
        }
コード例 #6
0
        /// <summary>
        /// Procesa una posicion y genera los eventos de entrada y salida de geocerca.
        /// </summary>
        /// <param name="data"></param>
        protected void ProcessGeocercas(PositionEvent data)
        {
            try
            {
                var geocercas = Puntos;
                var point     = new GPSPoint(data.Date, (float)data.Latitud, (float)data.Longitud);

                foreach (var geocerca in geocercas)
                {
                    var key = GetKeyGeocerca(geocerca);
                    if (Regeneracion)
                    {
                        key = "recalc_" + key;
                    }

                    var lastState = LogicCache.KeyExists(typeof(EstadosEntrega), key)
                        ? LogicCache.Retrieve <EstadosEntrega>(typeof(EstadosEntrega), key).Estado
                        : EstadosGeocerca.Desconocido;

                    var geo = DaoFactory.ReferenciaGeograficaDAO.FindGeocerca(geocerca);

                    var p      = new PointF(point.Lon, point.Lat);
                    var inside = geo.IsInBounds(p) && geo.Contains(p.Y, p.X);

                    var newState = inside ? EstadosGeocerca.Dentro : EstadosGeocerca.Fuera;

                    if (lastState != newState)
                    {
                        var state = new EstadosEntrega(newState);
                        LogicCache.Store(typeof(EstadosEntrega), key, state, Regeneracion ? DateTime.UtcNow.AddMinutes(5) : DateTime.UtcNow.AddHours(5));

                        IEvent evento = null;
                        if (lastState == EstadosGeocerca.Dentro && newState == EstadosGeocerca.Fuera)
                        {
                            evento = EventFactory.GetEvent(DaoFactory, point, MessageCode.OutsideGeoRefference.GetMessageCode(), geocerca, 0, null, Empleado);
                        }
                        else if (lastState == EstadosGeocerca.Fuera && newState == EstadosGeocerca.Dentro)
                        {
                            evento = EventFactory.GetEvent(DaoFactory, point, MessageCode.InsideGeoRefference.GetMessageCode(), geocerca, 0, null, Empleado);
                        }
                        if (evento == null)
                        {
                            continue;
                        }

                        ProcessEvent(evento, true);
                    }
                }
            }
            catch (Exception ex)
            {
                STrace.Exception(typeof(CicloLogisticoFactory).FullName, ex);
            }
        }
コード例 #7
0
        public static DateTime GetLastUpdate(int empresa, int linea)
        {
            var key = GetGeocercaQtreeKey(empresa, linea);

            if (!LogicCache.KeyExists(typeof(Geocerca), key))
            {
                return(DateTime.MinValue);
            }

            return((DateTime)LogicCache.Retrieve <object>(typeof(Geocerca), key));
        }
コード例 #8
0
ファイル: Events.cs プロジェクト: jesumarquez/lt
        private static string GetEmployeeRfidAction(string rfid)
        {
            var key = string.Format("employeeRfid:{0}", rfid);

            if (LogicCache.KeyExists(typeof(string), key))
            {
                LogicCache.Delete(typeof(string), key);

                return(MessageCode.RfidEmployeeLogout.GetMessageCode());
            }

            LogicCache.Store(typeof(string), key, rfid);

            return(MessageCode.RfidEmployeeLogin.GetMessageCode());
        }
コード例 #9
0
ファイル: Coche.cs プロジェクト: jesumarquez/lt
        public virtual int EtaDistanceTo()
        {
            var key  = string.Empty;
            var dist = 0;

            if (Dispositivo != null)
            {
                key = "device_" + Dispositivo.Id + "_ETA_DistanceTo";
            }
            if (LogicCache.KeyExists(typeof(string), key))
            {
                var ret = LogicCache.Retrieve <string>(key);
                int.TryParse(ret, out dist);
            }
            return(dist);
        }
コード例 #10
0
ファイル: Coche.cs プロジェクト: jesumarquez/lt
        public virtual DateTime?EtaEstimated()
        {
            var      key = string.Empty;
            DateTime?dt  = null;

            if (Dispositivo != null)
            {
                key = "device_" + Dispositivo.Id + "_ETA_Estimated";
            }
            if (LogicCache.KeyExists(typeof(string), key))
            {
                var ret = LogicCache.Retrieve <string>(typeof(string), key);
                dt = DateTime.ParseExact(ret, "O", CultureInfo.InvariantCulture, DateTimeStyles.AdjustToUniversal);
            }
            return(dt);
        }
コード例 #11
0
ファイル: TicketDAO.cs プロジェクト: jesumarquez/lt
        public int FindNextOrdenDiario(int empresa, int linea, DateTime date)
        {
            var cacheKey = string.Format("DailyOrder[{0}][{1}]", empresa, linea);
            int maxId;

            if (LogicCache.KeyExists(typeof(Ticket), cacheKey))
            {
                maxId = (int)LogicCache.Retrieve <object>(typeof(Ticket), cacheKey);
            }
            else
            {
                var max = Query.FilterEmpresa(Session, new[] { empresa }, null)
                          .FilterLinea(Session, new[] { empresa }, new[] { linea }, null)
                          .Where(t => t.FechaTicket >= date.Date && t.FechaTicket < date.Date.AddDays(1) && t.OrdenDiario.HasValue && t.Estado != Ticket.Estados.Eliminado)
                          .Max(t => t.OrdenDiario);
                maxId = max.HasValue ? max.Value : 0;
            }

            maxId++;

            LogicCache.Store(typeof(Pedido), cacheKey, maxId, DateTime.Now.AddMinutes(5));

            return(maxId);
        }
コード例 #12
0
        protected override void OnExecute(Timer timer)
        {
            if (IdEmpresa <= 0)
            {
                return;
            }

            var keyUpdate     = Component + "_update_" + IdEmpresa;
            var keyLastUpdate = Component + "_lastUpdate_" + IdEmpresa;

            if (LogicCache.KeyExists(typeof(bool), keyUpdate))
            {
                _update = (bool)LogicCache.Retrieve <object>(typeof(bool), keyUpdate);
            }

            STrace.Trace(Component, string.Format("Init Update: {0}", _update ? "TRUE" : "FALSE"));

            if (LogicCache.KeyExists(typeof(DateTime), keyLastUpdate))
            {
                _lastUpdate = (DateTime)LogicCache.Retrieve <object>(typeof(DateTime), keyLastUpdate);
            }

            //var archivoPendiente = DaoFactory.LogicLinkFileDAO.GetNextPendiente(IdEmpresa);
            //if (archivoPendiente != null)
            //{
            //    STrace.Trace(Component, "Archivo a procesar: " + archivoPendiente.FilePath);
            //
            //    var te = new TimeElapsed();
            //    ProcessArchivo(archivoPendiente);
            //    STrace.Trace(Component, "Archivo procesado en: " + te.getTimeElapsed().TotalSeconds + " segundos.");
            //}

            var archivosPendientes = DaoFactory.LogicLinkFileDAO.GetPendientes(IdEmpresa).ToList();

            STrace.Trace(Component, "Archivos pendientes: " + archivosPendientes.Count());

            //var archivo = DaoFactory.LogicLinkFileDAO.FindById();
            //archivosPendientes.Add(archivo);

            foreach (var archivoPendiente in archivosPendientes)
            {
                STrace.Trace(Component, "Archivo a procesar: " + archivoPendiente.FilePath);

                var te = new TimeElapsed();
                ProcessArchivo(archivoPendiente);
                STrace.Trace(Component, "Archivo procesado en: " + te.getTimeElapsed().TotalSeconds + " segundos.");
            }

            var empresa           = DaoFactory.EmpresaDAO.FindById(IdEmpresa);
            var now               = DateTime.UtcNow;
            var lastUpdateMinutes = now.Subtract(_lastUpdate).TotalMinutes;

            STrace.Trace(Component, string.Format("Last Update: {0} - {1} minutos", _lastUpdate.ToString("dd/MM/yyyy HH:mm:ss"), lastUpdateMinutes));
            STrace.Trace(Component, string.Format("Update: {0}", _update ? "TRUE" : "FALSE"));

            if (lastUpdateMinutes > empresa.LogiclinkMinutosUpdate && _update)
            {
                var lineas = new List <int>();
                var dict   = new Dictionary <int, List <int> >();

                var todaslaslineas = DaoFactory.LineaDAO.GetList(new[] { IdEmpresa });
                lineas.Add(-1);
                lineas.AddRange(todaslaslineas.Select(l => l.Id));
                dict.Add(IdEmpresa, lineas);

                DaoFactory.ReferenciaGeograficaDAO.UpdateGeocercas(dict);
                _update     = false;
                _lastUpdate = now;
            }

            STrace.Trace(Component, string.Format("Store Update: {0}", _update ? "TRUE" : "FALSE"));

            LogicCache.Store(typeof(bool), keyUpdate, _update);
            LogicCache.Store(typeof(DateTime), keyLastUpdate, _lastUpdate);
        }
コード例 #13
0
 /// <summary>
 /// Elimina el estado de todas las geocercas de este ticket de la cache
 /// </summary>
 protected void ClearGeocercasCache()
 {
     foreach (var key in Geocercas.Select(g => GetKeyGeocerca(g)).Where(key => LogicCache.KeyExists(typeof(EstadosEntrega), key)))
     {
         LogicCache.Delete(typeof(EstadosEntrega), key);
     }
 }