コード例 #1
0
ファイル: Task.cs プロジェクト: jesumarquez/lt
        /// <summary>
        /// Controla que la dif entre real y teorico no supere el porcentaje configurado de la capacidad.
        /// Devuelve True en caso de que no la haya superado y False en caso de que sí.
        /// </summary>
        /// <param name="tank"></param>
        /// <param name="vol"></param>
        /// <param name="tankVolumeDifferenceAlarm"></param>
        /// <param name="hasBeenBelowPercentageSinceLastEvent"></param>
        private bool ControlsTeoricVsRealDifference(Tanque tank, VolumenHistorico vol, double tankVolumeDifferenceAlarm, bool hasBeenBelowPercentageSinceLastEvent)
        {
            if (tankVolumeDifferenceAlarm != 0 && tankVolumeDifferenceAlarm != HighValue)
            {
                return(true);
            }

            var lastRealLevel = DaoFactory.VolumenHistoricoDAO.GetLastTankRealLevel(tank, vol.Fecha);

            if (Math.Abs((vol.Volumen - lastRealLevel.Volumen)) > tankVolumeDifferenceAlarm)
            {
                if (hasBeenBelowPercentageSinceLastEvent)
                {
                    FuelMessageSaver.CreateNewEvent(null, tank.Codigo, CodeTDifRealVsTeoricoSuperada, String.Format(MsgTDifRealVsTeoricoSuperada, lastRealLevel.Volumen, vol.Volumen),
                                                    vol.Fecha);

                    STrace.Trace(GetType().FullName, String.Format("Teorical versus real levels warning refference reached for tank: {0} (real: {1} - teorical: {2} - date: {3}).", tank.Descripcion, lastRealLevel.Volumen, vol.Volumen, vol.Fecha));
                }
                else
                {
                    STrace.Trace(GetType().FullName, String.Format(
                                     @"Teorical versus real levels warning refference reached for tank: {0} (real: {1} - teorical: {2} - date: {3})
                    || A previos warning already exists (no event was raised).", tank.Descripcion, lastRealLevel.Volumen, vol.Volumen, vol.Fecha));
                }

                return(false);
            }

            return(true);
        }
コード例 #2
0
ファイル: Task.cs プロジェクト: jesumarquez/lt
        /// <summary>
        /// Cheks if the tank teoric level has gone under its capacity since last genereted "TEORICO_SUPERA_CAPACIDAD" event.
        /// </summary>
        /// <param name="tank"></param>
        /// <param name="vol"></param>
        /// <returns></returns>
        private bool HasBeenUnderCapacitySinceLastEvent(Tanque tank, VolumenHistorico vol)
        {
            var lastMessageDate       = DaoFactory.TanqueDAO.FindLastMessageByCode(tank.Id, CodeTTeoricoSuperaCapacidad);
            var lastUnderCapacityDate = DaoFactory.VolumenHistoricoDAO.FindLastTeoricVolumeUnderCapacity(tank.Id, vol.Fecha);

            return(lastMessageDate == null || lastUnderCapacityDate == null || (lastUnderCapacityDate.Fecha > lastMessageDate.Fecha));
        }
コード例 #3
0
ファイル: ParserHelper.cs プロジェクト: jesumarquez/lt
        /// <summary>
        /// Cheks if the HistoricalVolume of a tank values have changed compared with the last value inserted
        /// </summary>
        /// <param name="vol"></param>
        /// <returns></returns>
        private static bool TankVolumeHasChanged(VolumenHistorico vol)
        {
            VolumenHistorico m;

            LastTankNivel.TryGetValue(vol.Tanque.Codigo, out m);

            return(!vol.Equals(m));
        }
コード例 #4
0
ファイル: ParserHelper.cs プロジェクト: jesumarquez/lt
        /// <summary>
        /// Sets the last value changed in dictionary.
        /// </summary>
        /// <param name="vol"></param>
        private static void SetLastTankHistoricalVolumeChanged(VolumenHistorico vol)
        {
            if (LastTankNivel.ContainsKey(vol.Tanque.Codigo))
            {
                LastTankNivel.Remove(vol.Tanque.Codigo);
            }

            LastTankNivel.Add(vol.Tanque.Codigo, vol);
        }
コード例 #5
0
ファイル: Task.cs プロジェクト: jesumarquez/lt
        /// <summary>
        /// Controla que el volumen teorico no pase de positivo a negativo.
        /// </summary>
        /// <param name="tank"></param>
        /// <param name="actualVolume"></param>
        /// <param name="vol"></param>
        private void ControlsNegativeTeoricVolume(Tanque tank, double actualVolume, VolumenHistorico vol)
        {
            if (actualVolume < 0 || vol.Volumen >= 0)
            {
                return;
            }

            FuelMessageSaver.CreateNewEvent(null, tank.Codigo, CodeTTeoricoNegativo, String.Format(MsgTTeoricoNegativo, vol.Volumen), vol.Fecha);

            STrace.Trace(GetType().FullName, String.Format("Negative volume detected for tank: {0} (volume: {1})", tank.Descripcion, vol.Volumen));
        }
コード例 #6
0
ファイル: Task.cs プロジェクト: jesumarquez/lt
        /// <summary>
        /// Determina si el tanque estuvo debajo del porcentaje configurado desde el ultimo reporte.
        /// </summary>
        /// <param name="tank"></param>
        /// <param name="vol"></param>
        /// <param name="volDif"></param>
        /// <returns></returns>
        private bool HasBeenBelowPercentageSinceLastEvent(Tanque tank, VolumenHistorico vol, double volDif)
        {
            var lastMessage = DaoFactory.TanqueDAO.FindLastMessageByCode(tank.Id, CodeTDifRealVsTeoricoSuperada);

            if (lastMessage == null)
            {
                STrace.Error(GetType().FullName, "Last message date was NULL");

                return(true);
            }

            var lastMovementBelowDifference = DaoFactory.VolumenHistoricoDAO.FindLastTeoricVolumeBelowRealAndTeoricDifference(tank.Id, vol.Fecha, lastMessage.Fecha, volDif);

            return(lastMovementBelowDifference != null);
        }
コード例 #7
0
ファイル: Task.cs プロジェクト: jesumarquez/lt
        /// <summary>
        /// Controla que el volumen teorico no supere la capacidad del tanque.
        /// </summary>
        /// <param name="tank"></param>
        /// <param name="vol"></param>
        private void ControlsTeoricVolumeExceededTankCapacity(Tanque tank, VolumenHistorico vol)
        {
            if (vol.Volumen <= tank.Capacidad)
            {
                return;
            }

            if (HasBeenUnderCapacitySinceLastEvent(tank, vol))
            {
                FuelMessageSaver.CreateNewEvent(null, tank.Codigo, CodeTTeoricoSuperaCapacidad, String.Format(MsgTTeoricoSuperaCapacidad, tank.Capacidad, vol.Volumen), vol.Fecha);

                STrace.Trace(GetType().FullName, String.Format("Teorical max volume exceded for tank: {0} (volume: {1} - capacity: {2}).", tank.Descripcion, vol.Volumen, tank.Capacidad));
            }
            else
            {
                STrace.Trace(GetType().FullName, String.Format("Teorical max volume exceded for tank: {0} (volume: {1} - capacity: {2}) || A previos warning already exists (no event was raised)", tank.Descripcion, vol.Volumen, tank.Capacidad));
            }
        }
コード例 #8
0
ファイル: ParserHelper.cs プロジェクト: jesumarquez/lt
        /// <summary>
        /// Parses a T type Message.
        /// </summary>
        /// <param name="daoFactory"></param>
        /// <param name="center"></param>
        /// <param name="code"></param>
        /// <param name="alias"></param>
        /// <param name="volumen"></param>
        /// <param name="volumenAgua"></param>
        /// <param name="fecha"></param>
        /// <param name="events"></param>
        /// <returns></returns>
        public VolumenHistorico ProcessTanque(DAOFactory daoFactory, String center, String code, String alias, Double volumen, Double volumenAgua, DateTime fecha, String events)
        {
            var vol = new VolumenHistorico
            {
                Fecha       = fecha,
                Volumen     = volumen,
                EsTeorico   = false,
                Tanque      = daoFactory.TanqueDAO.FindByCode(code),
                VolumenAgua = volumenAgua
            };

            if (vol.Tanque == null)
            {
                vol.Tanque = CreateTanque(daoFactory, center, code, alias);
            }

            if (!vol.Tanque.Descripcion.Equals(alias))
            {
                UpdateTankDescription(daoFactory, vol.Tanque, alias);
            }

            try
            {
                EventHelper.ProcessTankEvents(center, code, events, fecha);
                EventHelper.EvaluateStockCriticoAndReposicion(vol.Volumen, vol.Tanque, fecha);
                EventHelper.EvaluteWaterLevel(vol.VolumenAgua, vol.Tanque, fecha);
            }
            catch (Exception)
            {
                STrace.Error(GetType().FullName, String.Format("Events: {0}", events));

                throw;
            }

            if (TankVolumeHasChanged(vol))
            {
                SetLastTankHistoricalVolumeChanged(vol);

                return(vol);
            }

            return(null);
        }
コード例 #9
0
ファイル: PozoMessage.cs プロジェクト: jesumarquez/lt
 public void addHistoricalVolumeLog(VolumenHistorico vol)
 {
     historicalVolumesLog.Add(vol);
 }
コード例 #10
0
ファイル: PozoMessage.cs プロジェクト: jesumarquez/lt
 public void addHistoricalVolume(VolumenHistorico vol)
 {
     historicalVolumes.Add(vol);
 }