Esempio n. 1
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);
        }
Esempio n. 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));
        }
Esempio n. 3
0
        /// <summary>
        /// Determines if the givenn action applies for the specified message.
        /// </summary>
        /// <param name="context"></param>
        /// <param name="accion"></param>
        /// <returns></returns>
        protected static Boolean ApplyAction(Object context, Accion accion)
        {
            if (String.IsNullOrEmpty(accion.Condicion))
            {
                return(true);
            }

            try
            {
                var expression = ExpressionContext.CreateExpression(accion.Condicion, context);

                var cachedResult = LogicCache.Retrieve <Object>(typeof(Boolean), expression);

                if (cachedResult != null)
                {
                    return(Convert.ToBoolean(cachedResult));
                }

                var result = Logictracker.ExpressionEvaluator.ExpressionEvaluator.Evaluate <bool>(expression);

                LogicCache.Store(typeof(Boolean), expression, result);

                return(result);
            }
            catch (Exception e)
            {
                STrace.Exception(typeof(BaseEventSaver).FullName, e, String.Format("Error procesando condicion: {0} | Accion: {1}", accion.Condicion, accion.Descripcion));

                return(false);
            }
        }
Esempio n. 4
0
        public Sensor FindByCode(int dispositivo, string code)
        {
            lock (CacheByCodeLock)
            {
                var key         = GetByCodeCacheKey(dispositivo, code);
                var sensorCache = LogicCache.Retrieve <string>(typeof(string), key);
                if (!string.IsNullOrEmpty(sensorCache))
                {
                    var sensorId = Convert.ToInt32(sensorCache);
                    var sensor   = sensorId == 0 ? null : FindById(sensorId);
                    return(sensor == null || sensor.Dispositivo.Id != dispositivo ? null : sensor);
                }

                try
                {
                    var sensor = Query
                                 .Where(s => !s.Baja && s.Dispositivo.Id == dispositivo && s.Codigo == code)
                                 .SafeFirstOrDefault();
                    if (sensor != null)
                    {
                        LogicCache.Store(typeof(string), key, sensor.Id);
                    }
                    return(sensor);
                }
                catch (Exception e)
                {
                    STrace.Exception(typeof(SensorDAO).FullName, e, dispositivo);
                    return(null);
                }
            }
        }
Esempio n. 5
0
        /// <summary>
        /// Adds or refreshes the devices parameters dictionary.
        /// </summary>
        private void CalculateDeviceParameters()
        {
            var key = String.Format("deviceParameters:{0}", Dispositivo.Id);

            var parameters = LogicCache.Retrieve <DeviceParameters>(typeof(DeviceParameters), key);

            if (parameters != null)
            {
                if (parameters.NeedsUpdate)
                {
                    parameters.UpdateParameters(Dispositivo);

                    LogicCache.Store(typeof(DeviceParameters), key, parameters);
                }

                DeviceParameters = parameters;
            }
            else
            {
                parameters = new DeviceParameters(Dispositivo);

                LogicCache.Store(typeof(DeviceParameters), key, parameters);

                DeviceParameters = parameters;
            }
        }
Esempio n. 6
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));
        }
Esempio n. 7
0
        public SubEntidad FindBySensor(int sensor)
        {
            lock (CacheBySensorLock)
            {
                var key             = GetBySensorCacheKey(sensor);
                var subEntidadCache = LogicCache.Retrieve <string>(typeof(string), key);
                if (!string.IsNullOrEmpty(subEntidadCache))
                {
                    var subEntidadId = Convert.ToInt32(subEntidadCache);
                    var subEntidad   = subEntidadId == 0 ? null : FindById(subEntidadId);
                    return(subEntidad == null || subEntidad.Sensor.Id != sensor ? null : subEntidad);
                }

                try
                {
                    var subEntidad = Query.Where(s => !s.Baja && s.Sensor.Id == sensor).SafeFirstOrDefault();
                    if (subEntidad != null)
                    {
                        LogicCache.Store(typeof(string), key, subEntidad.Id);
                    }
                    return(subEntidad);
                }
                catch (Exception e)
                {
                    STrace.Exception(typeof(SensorDAO).FullName, e);
                    return(null);
                }
            }
        }
Esempio n. 8
0
        /// <summary>
        /// Setea el estado inicial (dentro/fuera) de todas las geocercas del ticket a partir de la ultima posicion del vehiculo.
        /// </summary>
        protected void FirstPosition()
        {
            try
            {
                var position = DaoFactory.LogPosicionDAO.GetLastOnlineVehiclePosition(Vehiculo);
                if (position == null)
                {
                    return;
                }

                // Pongo todas las geocercas en Desconocido
                var geocercas = Geocercas.Select(geocerca => GetKeyGeocerca(geocerca));

                foreach (var key in geocercas)
                {
                    LogicCache.Store(typeof(EstadosEntrega), key, new EstadosEntrega(EstadosGeocerca.Desconocido), DateTime.UtcNow.AddHours(5));
                }

                // Proceso la primera posicion
                var positionEvent = new PositionEvent(position.FechaMensaje, position.Latitud, position.Longitud);
                ProcessGeocercas(positionEvent);
            }
            catch (Exception ex)
            {
                STrace.Exception(typeof(CicloLogisticoFactory).FullName, ex);
            }
        }
Esempio n. 9
0
        public void ResetLastModQtree(int empresa, int linea)
        {
            var key = GetGeocercaQtreeKey(empresa, linea);

            LogicCache.Store(typeof(Geocerca), key, DateTime.UtcNow);
            STrace.Trace("QtreeReset", string.Format("Reset para ({0}, {1})", empresa, linea));
        }
Esempio n. 10
0
        public Geocerca FindGeocerca(ReferenciaGeografica rg)
        {
            var geo = new Geocerca(rg);

            LogicCache.Store(typeof(Geocerca), GetGeocercaByIdKey(rg.Id), geo, DateTime.UtcNow.AddMinutes(Config.Dispatcher.DispatcherGeocercasRefreshRate));
            return(geo);
        }
Esempio n. 11
0
        private static void StoreDevKey(int deviceId, Coche cocheObj)
        {
            if (cocheObj == null)
            {
                return;                               //si estan configurando un dispositivo nuevo y reporta antes de darlo de alta es mejor no guardar nada y esperar a que lo den de alta
            }
            var id = cocheObj.Id.ToString("#0");

            LogicCache.Store(typeof(String), "DeviceVehicle:" + deviceId, id);
        }
Esempio n. 12
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);
            }
        }
Esempio n. 13
0
        public Geocerca GetGeocercaById(int id)
        {
            var rg = Session.CreateCriteria <ReferenciaGeografica>("rg")
                     .Add(Restrictions.Eq("Id", id))
                     .UniqueResult <ReferenciaGeografica>();

            var geo = new Geocerca(rg);

            LogicCache.Store(typeof(Geocerca), GetGeocercaByIdKey(rg.Id), geo, DateTime.UtcNow.AddMinutes(Config.Dispatcher.DispatcherGeocercasRefreshRate));

            return(geo);
        }
Esempio n. 14
0
        private static void setETAEstimated(Int32 Id, DateTime?value)
        {
            var key = makeIDFor(Id, "ETA_Estimated");

            if (value == null)
            {
                LogicCache.Delete(key);
            }
            else
            {
                LogicCache.Store(typeof(String), key, value.Value.ToString("O"));
            }
        }
Esempio n. 15
0
        private static void setETADistanceTo(Int32 Id, UInt32?value)
        {
            var key = makeIDFor(Id, "ETA_DistanceTo");

            if (value == null)
            {
                LogicCache.Delete(key);
            }
            else
            {
                LogicCache.Store(typeof(String), key, value.Value.ToString());
            }
        }
Esempio n. 16
0
        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());
        }
Esempio n. 17
0
        /// <summary>
        /// Updates the cache to store the message being created.
        /// </summary>
        /// <param name="obj"></param>
        private void UpdateCache(Mensaje obj)
        {
            const string keyformat = "message:{0}:{1}:{2}";

            var key = String.Format(keyformat, -1, -1, obj.Codigo);

            DeleteCache(key);

            var empresa = obj.Empresa != null ? obj.Empresa.Id : -1;
            var linea   = obj.Linea != null ? obj.Linea.Id : -1;

            if (empresa == -1)
            {
                foreach (var lin in new LineaDAO().FindAll())
                {
                    key = String.Format(keyformat, lin.Empresa.Id, lin.Id, obj.Codigo);
                    DeleteCache(key);

                    key = String.Format(keyformat, lin.Empresa.Id, -1, obj.Codigo);
                    DeleteCache(key);
                }
            }
            else if (linea == -1)
            {
                key = String.Format(keyformat, empresa, -1, obj.Codigo);
                DeleteCache(key);

                foreach (var lin in new LineaDAO().FindList(new[] { empresa }))
                {
                    key = String.Format(keyformat, empresa, lin.Id, obj.Codigo);
                    DeleteCache(key);
                }
            }
            else
            {
                key = String.Format(keyformat, empresa, linea, obj.Codigo);
                DeleteCache(key);
            }

            LogicCache.Store(typeof(MensajeVO), key, new MensajeVO(obj));
        }
Esempio n. 18
0
        public override void SaveOrUpdate(Sensor obj)
        {
            var oldDev = obj.OldDispositivo;

            base.SaveOrUpdate(obj);
            lock (CacheByCodeLock)
            {
                if (oldDev != null) // si cambia el dispo, borro la cache vieja
                {
                    LogicCache.Delete(typeof(string), GetByCodeCacheKey(oldDev.Id, obj.OldCodigo));
                }
                if (obj.Baja) // si se elimina el sensor, borro la cache
                {
                    LogicCache.Delete(typeof(string), GetByCodeCacheKey(obj.Dispositivo.Id, obj.Codigo));
                }
                if (!obj.Baja) // si no se elimino el sensor, agrego el id a la cache
                {
                    LogicCache.Store(typeof(string), GetByCodeCacheKey(obj.Dispositivo.Id, obj.Codigo), obj.Id);
                }
            }
        }
Esempio n. 19
0
        public override void SaveOrUpdate(SubEntidad obj)
        {
            var oldSensor = obj.OldSensor;

            base.SaveOrUpdate(obj);
            lock (CacheBySensorLock)
            {
                if (oldSensor != null) // si cambia el sensor, borro la cache vieja
                {
                    LogicCache.Delete(typeof(string), GetBySensorCacheKey(oldSensor.Id));
                }
                if (obj.Baja) // si se elimina la subEntidad, borro la cache
                {
                    LogicCache.Delete(typeof(string), GetBySensorCacheKey(obj.Sensor.Id));
                }
                if (!obj.Baja) // si no se elimino la subEntidad, agrego el id a la cache
                {
                    LogicCache.Store(typeof(string), GetBySensorCacheKey(obj.Sensor.Id), obj.Id);
                }
            }
        }
Esempio n. 20
0
        private static Boolean ApplyAction(LogMensajeBase log, Accion accion)
        {
            if (accion == null || accion.Condicion == null || accion.Condicion.Trim() == string.Empty)
            {
                return(true);
            }

            try
            {
                var context = new EventContext
                {
                    Dispositivo        = log.Dispositivo.Codigo,
                    Duracion           = log.Duracion,
                    Exceso             = log.Exceso,
                    Interno            = log.Coche.Interno,
                    Legajo             = log.Chofer != null ? log.Chofer.Legajo : string.Empty,
                    Texto              = log.Texto,
                    TieneTicket        = log.Horario != null,
                    VelocidadAlcanzada = log.VelocidadAlcanzada.HasValue ? log.VelocidadAlcanzada.Value : -1,
                    VelocidadPermitida = log.VelocidadPermitida.HasValue ? log.VelocidadPermitida.Value : -1,
                    Fecha              = log.Fecha,
                    FechaFin           = log.FechaFin
                };

                var expression   = ExpressionContext.CreateExpression(accion.Condicion, context);
                var cachedResult = LogicCache.Retrieve <Object>(typeof(Boolean), expression);
                if (cachedResult != null)
                {
                    return(Convert.ToBoolean(cachedResult));
                }
                var result = Logictracker.ExpressionEvaluator.ExpressionEvaluator.Evaluate <bool>(expression);
                LogicCache.Store(typeof(Boolean), expression, result);
                return(result);
            }
            catch (Exception e)
            {
                STrace.Exception(typeof(BaseEventSaver).FullName, e, String.Format("Error procesando condicion: {0} | Accion: {1}", accion.Condicion, accion.Descripcion));
                return(false);
            }
        }
Esempio n. 21
0
        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);
        }
Esempio n. 22
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);
        }
Esempio n. 23
0
        private void Store(int geocerca, string variable, object value)
        {
            const string prefix = "[EV({0}:{1})][{2}]";

            LogicCache.Store(string.Format(prefix, Vehiculo.Dispositivo.Id, geocerca, variable), value);
        }