Пример #1
0
        private void OnAdminAlarm_EventReg(TecView obj, TecView.EventRegEventArgs ev)
        {
            ALARM_OBJECT            alarmObj = null;
            KeyValuePair <int, int> cKey     = new KeyValuePair <int, int> (ev.m_id_gtp, ev.m_id_tg);

            if (m_dictAlarmObject.ContainsKey(cKey) == false)
            {
                alarmObj = new ALARM_OBJECT(ev);
                m_dictAlarmObject.Add(cKey, alarmObj);

                //if (m_bDestGUIActivated == true) {
                m_dictAlarmObject [cKey].state = INDEX_STATES_ALARM.PROCESSED;

                EventAdd(ev);
                //} else ;
            }
            else
            {
                bool bEventRetry = false;
                if (m_dictAlarmObject[cKey].CONFIRM == false)
                {
                    bEventRetry = true;
                }
                else
                {
                    if ((m_dictAlarmObject[cKey].dtConfirm - m_dictAlarmObject[cKey].dtReg) > TimeSpan.FromMilliseconds(MSEC_ALARM_EVENTRETRY))
                    {
                        bEventRetry = true;
                    }
                    else
                    {
                        ;
                    }
                }

                if (bEventRetry == true)
                {
                    m_dictAlarmObject[cKey].dtReg = DateTime.Now;

                    //if (m_bDestGUIActivated == true) {
                    if (m_dictAlarmObject [cKey].state < INDEX_STATES_ALARM.PROCESSED)
                    {
                        m_dictAlarmObject [cKey].state = INDEX_STATES_ALARM.PROCESSED;
                    }
                    else
                    {
                        ;
                    }

                    EventRetry(ev);
                    //} else ;
                }
                else
                {
                    ;
                }
            }
        }
Пример #2
0
        /// <summary>
        /// Возвратить признак подтверждения события
        ///  по указанным частям составного ключа
        /// </summary>
        /// <param name="id_comp">Часть составного ключа: идентификтор компонента ТЭЦ (ГТП, ТГ)</param>
        /// <param name="dtReg">Часть составного ключа: дата/время регистрации события сигнализаций</param>
        /// <returns>Результат выполнения операции</returns>
        public bool IsConfirmed(int id_comp, DateTime dtReg)
        {
            bool         bRes     = false;
            ALARM_OBJECT objAlarm = find(id_comp, dtReg);

            if (!(objAlarm == null))
            {
                bRes = objAlarm.CONFIRMED;
            }
            else
            {
                bRes = false;
            }

            return(bRes);
        }
Пример #3
0
        /// <summary>
        /// Получить дату/время регистрации события сигнализации для ТГ
        /// </summary>
        /// <param name="id_comp">Составная часть ключа: идентификатор ГТП</param>
        /// <param name="id_tg">Составная часть ключа: идентификатор ТГ</param>
        /// <returns></returns>
        public DateTime TGAlarmDatetimeReg(int id_comp, DateTime dtReg)
        {
            DateTime dtRes = DateTime.Now;

            ALARM_OBJECT objAlarm = find(id_comp, dtReg);

            if (!(objAlarm == null))
            {
                dtRes = objAlarm.FirstDTRegistred;
            }
            else
            {
                ;
            }

            return(dtRes);
        }
Пример #4
0
        /// <summary>
        /// Найти объект сигнализации по указанным частям составного ключа
        /// </summary>
        /// <param name="id_comp">Составная часть ключа: идентификатор ГТП</param>
        /// <param name="dtReg">Составная часть ключа: дата/время_регистрации события</param>
        /// <returns>Объект сигнализации</returns>
        private ALARM_OBJECT find(int id_comp, DateTime dtReg)
        {
            ALARM_OBJECT objRes = null;

            KeyValuePair <int, DateTime> cKey = new KeyValuePair <int, DateTime>(id_comp, dtReg);

            //int cKey = id_comp;
            if (_dictAlarmObject.ContainsKey(cKey) == true)
            {
                objRes = _dictAlarmObject[cKey];
            }
            else
            {
                Logging.Logg().Error(@"DictAlarmObject::find (id_comp=" + id_comp.ToString() + @") - НЕ НАЙДЕН!", Logging.INDEX_MESSAGE.NOT_SET);
            }

            return(objRes);
        }
Пример #5
0
        /// <summary>
        /// Установить признак - событие сигнализаций "ожидается подтверждение"
        /// </summary>
        /// <param name="id_comp">Часть составного ключа: идентификтор компонента ТЭЦ (ГТП, ТГ)</param>
        /// <param name="dtReg">Часть составного ключа: дата/время регистрации события сигнализаций</param>
        /// <returns>Результат выполнения операции</returns>
        public int Confirming(int id_comp, DateTime dtReg)
        {
            int iRes = -1;

            ALARM_OBJECT objAlarm = find(id_comp, dtReg);

            if (!(objAlarm == null))
            {
                objAlarm.Confirming();

                iRes = 0;
            }
            else
            {
                ;
            }

            return(iRes);
        }
Пример #6
0
        /// <summary>
        /// Присвоить объекту по указанным частям составного ключа признак "зафиксирован"
        /// </summary>
        /// <param name="id_comp">Часть составного ключа: идентификатор компонента</param>
        /// <param name="dtReg">Часть составного ключа: идентификатор даты/времени_регистрации</param>
        /// <param name="dtFixed">Дата/время фиксации события</param>
        /// <returns>Признак выполнения функции</returns>
        public int Fixed(int id_comp, DateTime dtReg, DateTime dtFixed)
        {
            int iRes = -1;

            ALARM_OBJECT objAlarm = find(id_comp, dtReg);

            if (!(objAlarm == null))
            {
                objAlarm.Fixed(dtFixed);

                iRes = 0;
            }
            else
            {
                ;
            }

            return(iRes);
        }
Пример #7
0
        /// <summary>
        /// Найти объект сигнализации по указанным частям составного ключа
        /// </summary>
        /// <param name="id_comp">Составная часть ключа: идентификатор ГТП</param>
        /// <param name="dtReg">Составная часть ключа: дата/время_регистрации события</param>
        /// <returns>Объект сигнализации</returns>
        private ALARM_OBJECT find(int id_comp, DateTime dtReg)
        {
            ALARM_OBJECT objRes = null;

            KeyValuePair <int, DateTime> cKey = new KeyValuePair <int, DateTime>(id_comp, dtReg);

            //int cKey = id_comp;
            if (_dictAlarmObject.ContainsKey(cKey) == true)
            {
                objRes = _dictAlarmObject[cKey];
            }
            else
            {
                Logging.Logg().Error(@"DictAlarmObject::find (id_comp=" + id_comp + @", dtReg=" + dtReg.ToString(@"dd.MM.yyyy HH:mm:ss.fffffff", CultureInfo.InvariantCulture) + @") - НЕ НАЙДЕН!", Logging.INDEX_MESSAGE.NOT_SET);
            }

            //Console.WriteLine(@"DictAlarmObject::find (id_comp=" + id_comp + @", dtReg=" + dtReg.ToString(@"dd.MM.yyyy HH:mm:ss.fffffff", CultureInfo.InvariantCulture) + @") - " + (objRes == null ? @"НЕ НАЙДЕН!" : @"Ok..."));

            return(objRes);
        }
Пример #8
0
        /// <summary>
        /// Найти объект с указанным иднтификатором (частью составного ключа)
        ///  , если объектов больше, чем 1 - вернуть такой
        ///  , у которого разница текущих дата/времени и дата_регистрации минимальна (самый новый)
        /// </summary>
        /// <param name="id_comp">Идентификаторр для поиска</param>
        /// <returns>РОбъект - результат поиска</returns>
        private ALARM_OBJECT find(int id_comp)
        {
            ALARM_OBJECT    objRes       = null;
            List <DateTime> listPartKeys = new List <DateTime> ();

            //Заполнить список датами_регистрации всех записей для указанного идентификатора
            foreach (KeyValuePair <int, DateTime> cKey in _dictAlarmObject.Keys)
            {
                if (cKey.Key.Equals(id_comp) == true)
                {
                    listPartKeys.Add(cKey.Value);
                }
                else
                {
                    ;
                }
            }
            //Проверить наличие хотя бы одной записи
            if (listPartKeys.Count > 0)
            {
                listPartKeys.Sort();
                //Получить объект по ключу
                try
                {
                    objRes = _dictAlarmObject[new KeyValuePair <int, DateTime>(id_comp, listPartKeys.LastOrDefault())];
                }
                catch (Exception e)
                {
                    Logging.Logg().Exception(e, @"DictAlarmObject::find(id_comp=" + id_comp + @") - ...", Logging.INDEX_MESSAGE.NOT_SET);
                }
            }
            else
            {
                ;
            }

            return(objRes);
        }
Пример #9
0
        /// <summary>
        /// Найти объект сигнализации по указанным частям составного ключа
        /// </summary>
        /// <param name="id_comp">Составная часть ключа: идентификатор ГТП</param>
        /// <param name="dtReg">Составная часть ключа: дата/время_регистрации события</param>
        /// <returns>Объект сигнализации</returns>
        private ALARM_OBJECT find(int id_comp, DateTime dtReg)
        {
            ALARM_OBJECT objRes = null;

            KeyValuePair <int, DateTime> cKey = new KeyValuePair <int, DateTime>(id_comp, dtReg);

            //int cKey = id_comp;
            if (_dictAlarmObject.ContainsKey(cKey) == true)
            {
                objRes = _dictAlarmObject[cKey];
            }
            else
            {
                //!!! Предупреждение, т.к. ситуация  возникает при вкл./выкл. оповещения
                // , а в этот моммент словарь не может содержать никаких событий
                Logging.Logg().Warning(@"DictAlarmObject::find (id_comp=" + id_comp + @", dtReg=" + dtReg.ToString(@"dd.MM.yyyy HH:mm:ss.fffffff", CultureInfo.InvariantCulture) + @") - НЕ НАЙДЕН!"
                                       , Logging.INDEX_MESSAGE.NOT_SET);
            }

            //Console.WriteLine(@"DictAlarmObject::find (id_comp=" + id_comp + @", dtReg=" + dtReg.ToString(@"dd.MM.yyyy HH:mm:ss.fffffff", CultureInfo.InvariantCulture) + @") - " + (objRes == null ? @"НЕ НАЙДЕН!" : @"Ok..."));

            return(objRes);
        }
Пример #10
0
        /// <summary>
        /// Зарегистрировать событие от БД
        /// </summary>
        /// <param name="ev">Аргумент события</param>
        /// <returns>Результат регистрации (см. пред. обработчик для 'TecViewAlarm.AlarmTecViewEventArgs')</returns>
        public INDEX_ACTION Registred(AdminAlarm.AlarmDbEventArgs ev, MODE mode)
        {
            INDEX_ACTION iRes     = INDEX_ACTION.NOTHING;
            ALARM_OBJECT alarmObj = find(ev.m_id_comp, ev.m_dtRegistred.GetValueOrDefault());

            lock (this)
            {
                try
                {
                    if (alarmObj == null)
                    {//Только, если объект события сигнализации НЕ создан
                        // создать объект события сигнализации
                        alarmObj = new ALARM_OBJECT(ev);
                        _dictAlarmObject.Add(new KeyValuePair <int, DateTime>(ev.m_id_comp, ev.m_dtRegistred.GetValueOrDefault()), alarmObj);
                        alarmObj.Fixed(ev.m_dtFixed);
                        alarmObj.Confirmed(ev.m_dtConfirm);

                        if (mode == MODE.ADMIN)
                        {
                            if (alarmObj.IsNotify() == true)
                            {
                                alarmObj.Fixing();
                                iRes = INDEX_ACTION.NEW;
                            }
                            else
                            {
                                ;
                            }
                        }
                        else
                        {
                            ;
                        }
                    }
                    else
                    {
                        alarmObj.Fixed(ev.m_dtFixed);
                        alarmObj.Confirmed(ev.m_dtConfirm);

                        if (mode == MODE.SERVICE)
                        {
                            //if (alarmObj.CONFIRMED == true)
                            //    if (TECComponent.Mode(ev.m_id_comp) == FormChangeMode.MODE_TECCOMPONENT.TG)
                            //        iRes = INDEX_ACTION.CONFIRMED_TG;
                            //    else
                            //        ;
                            //else
                            if (alarmObj.IsAutoConfirming() == true)
                            {
                                // если объект не подтвержден длительное время
                                iRes = INDEX_ACTION.AUTO_CONFIRMING;
                            }
                            else
                            if ((alarmObj.IsAutoFixing(ALARM_OBJECT.INDEX_DATETIME_REGISTRED.LAST) == true) ||
                                ((TECComponent.Mode(ev.m_id_comp) == FormChangeMode.MODE_TECCOMPONENT.TG) &&
                                 (alarmObj.IsAutoFixing(ALARM_OBJECT.INDEX_DATETIME_REGISTRED.FIRST) == true)))
                            {
                                // если объект не зафиксирован длительное время
                                iRes = INDEX_ACTION.AUTO_FIXING;
                            }
                            else
                            {
                                ;
                            }
                        }
                        else
                        if (mode == MODE.ADMIN)
                        {
                            if (alarmObj.IsNotify() == true)
                            {
                                alarmObj.Fixing();
                                iRes = INDEX_ACTION.RETRY;
                            }
                            else
                            {
                                ;
                            }
                        }
                        else
                        {
                            ;     // при 'VIEW' ничего не делать
                        }
                    }
                }
                catch (Exception e)
                {
                    Logging.Logg().Exception(e, @"DictAlarmObject::Registred (" + ev.GetType().Name + @") - ...", Logging.INDEX_MESSAGE.NOT_SET);
                }
            }

            return(iRes);
        }
Пример #11
0
        /// <summary>
        /// Зарегистрировать событие в режиме "выполнение_приложения"
        /// </summary>
        /// <param name="ev">Аргумент события</param>
        /// <returns>Результат регистрации (-1 - ошибка, 0 - ничего_не_делать, 1 - новый_объект, 2 - повторное_событие)</returns>
        public INDEX_ACTION Registred(ref TecViewAlarm.AlarmTecViewEventArgs ev)
        {
            INDEX_ACTION iRes     = INDEX_ACTION.NOTHING;
            ALARM_OBJECT alarmObj = null;
            List <KeyValuePair <int, DateTime> > listToRemoveKeys;

            lock (this)
            {
                try
                {
                    alarmObj =
                        //find(ev.m_id_comp, ev.m_dtRegistred.GetValueOrDefault())
                        find(ev.m_id_comp)
                    ;

                    if (alarmObj == null)
                    {
                        //Только, если объект события сигнализации НЕ создан
                        //Сообщить для сохранения в БД
                        iRes = INDEX_ACTION.NEW;
                    }
                    else
                    //Только, если объект события сигнализации создан
                    //Проверить состояние
                    if (alarmObj.CONFIRMED == true)
                    {
                        // если подтверждено - проверить период между датой/временем регистрации события сигнализации и датой/временем его подтверждения
                        if (alarmObj.HISTORY == true)
                        {
                            //Сообщить для сохранения в БД для регистрации нового события сигнализаций для этого же компонента ТЭЦ
                            iRes = INDEX_ACTION.NEW;
                        }
                        else
                        {
                            ;
                        }
                    }
                    else
                    if (alarmObj.RETRY == true)
                    {
                        ev.m_dtRegistred = alarmObj.Retry(ev.m_dtRegistred.GetValueOrDefault());
                        iRes             = INDEX_ACTION.RETRY;
                    }
                    else
                    {
                        ;
                    }

                    if (iRes == INDEX_ACTION.NEW)
                    {
                        //Перед добавлением объекта очистить словарь от "устаревших" объектов
                        //Подготовить список со сложными ключами для удалениями
                        listToRemoveKeys = new List <KeyValuePair <int, DateTime> >();
                        foreach (KeyValuePair <int, DateTime> cKey in _dictAlarmObject.Keys)
                        {
                            //Проверить признак "устаревания"
                            if ((cKey.Value - DateTime.UtcNow).TotalHours > DEPTH_HOUR_OBJECTALRM)
                            {
                                listToRemoveKeys.Add(cKey);
                            }
                            else
                            {
                                ;
                            }
                        }
                        //Удалить объекты со сложными ключами в списке
                        foreach (KeyValuePair <int, DateTime> cKey in listToRemoveKeys)
                        {
                            _dictAlarmObject.Remove(cKey);
                        }
                        // создать объект события сигнализации
                        _dictAlarmObject.Add(new KeyValuePair <int, DateTime>(ev.m_id_comp, ev.m_dtRegistred.GetValueOrDefault()), new ALARM_OBJECT(ev));
                    }
                    else
                    {
                        ;
                    }

                    Logging.Logg().Debug(@"DictAlarmObject::Register (id=" + ev.m_id_comp + @", dtReg=" + ev.m_dtRegistred.GetValueOrDefault().ToString() + @") - общее_кол-во_событий: " + _dictAlarmObject.Count
                                         , Logging.INDEX_MESSAGE.NOT_SET);
                }
                catch (Exception e)
                {
                    iRes = INDEX_ACTION.ERROR;
                    Logging.Logg().Exception(e, @"DictAlarmObject::Registred (" + ev.GetType().Name + @") - ...", Logging.INDEX_MESSAGE.NOT_SET);
                }
            }

            return(iRes);
        }
Пример #12
0
        /// <summary>
        /// Зарегистрировать событие от БД
        /// </summary>
        /// <param name="ev">Аргумент события</param>
        /// <returns>Результат регистрации (см. пред. обработчик для 'TecViewAlarm.AlarmTecViewEventArgs')</returns>
        public INDEX_ACTION Registred(AdminAlarm.AlarmDbEventArgs ev)
        {
            INDEX_ACTION iRes     = INDEX_ACTION.NOTHING;
            ALARM_OBJECT alarmObj = find(ev.m_id_comp, ev.m_dtRegistred.GetValueOrDefault());

            lock (this)
            {
                try
                {
                    if (alarmObj == null)
                    {//Только, если объект события сигнализации НЕ создан
                        // создать объект события сигнализации
                        alarmObj = new ALARM_OBJECT(ev);
                        _dictAlarmObject.Add(new KeyValuePair <int, DateTime>(ev.m_id_comp, ev.m_dtRegistred.GetValueOrDefault()), alarmObj);
                        alarmObj.Fixed(ev.m_dtFixed);
                        alarmObj.Confirmed(ev.m_dtConfirm);

                        if (alarmObj.IsNotify() == true)
                        {
                            iRes = INDEX_ACTION.NEW;
                        }
                        else
                        {
                            ;
                        }
                    }
                    else
                    {
                        alarmObj.Fixed(ev.m_dtFixed);
                        alarmObj.Confirmed(ev.m_dtConfirm);

                        if ((alarmObj.CONFIRMED == false) &&
                            ((alarmObj.FIXED == true) && ((DateTime.UtcNow - ev.m_dtFixed.GetValueOrDefault()).TotalMilliseconds > AdminAlarm.MSEC_ALARM_EVENTRETRY))
                            )
                        {
                            // если объект не подтвержден длительное время
                            iRes = INDEX_ACTION.AUTO_CONFIRMING;
                        }
                        else
                        if ((alarmObj.FIXED == false) &&
                            ((DateTime.UtcNow - ev.m_dtRegistred.GetValueOrDefault()).TotalMilliseconds > AdminAlarm.MSEC_ALARM_EVENTRETRY)
                            )
                        {
                            // если объект не зафиксирован длительное время
                            iRes = INDEX_ACTION.AUTO_FIXING;
                        }
                        else
                        if (alarmObj.IsNotify() == true)
                        {
                            iRes = INDEX_ACTION.RETRY;
                        }
                        else
                        {
                            ;
                        }
                    }
                }
                catch (Exception e)
                {
                    Logging.Logg().Exception(e, Logging.INDEX_MESSAGE.NOT_SET, @"DictAlarmObject::Registred (" + ev.GetType().Name + @") - ...");
                }
            }

            return(iRes);
        }