#ifndef CALARMDATACOLLECT_H #define CALARMDATACOLLECT_H #include #include #include #include #include #include "AlarmMessage.pb.h" #include "CAlarmMsgInfo.h" #include "net_msg_bus_api/MsgBusApi.h" #include "dbms/rdb_api/CRdbAccess.h" class CAlarmDataCollect : public QObject, public kbd_service::CAlmApiForAlmClt { Q_OBJECT public: static CAlarmDataCollect *instance(); virtual ~CAlarmDataCollect(); void refrence(); int getRefrenceCount(); bool isFaultRecallState(); virtual bool requestCfmAlm(kbd_idlfile::SAlmCltCfmAlm &objCfmAlm); virtual bool requestDelAlm(kbd_idlfile::SAlmCltDelAlm &objDelAlm); virtual void handleAllAlmMsg(int domainId, kbd_idlfile::SAlmCltAddAlm &objAllAlm); virtual void handleAddAlmMsg(kbd_idlfile::SAlmCltAddAlm &objAddAlm); virtual void handleCfmAlmMsg(kbd_idlfile::SAlmCltCfmAlm &objCfmAlm); virtual void handleDelAlmMsg(kbd_idlfile::SAlmCltDelAlm &objDelAlm); virtual void handleReleaseAlmMsg(kbd_idlfile::SAlmCltReleaseAlm &objDelAlm); virtual void handleLinkWave2AlmMsg(kbd_idlfile::SAlmCltLinkWave2Alm &objWave2Alm); void refresh(); signals: //< 启停定时器 void sigTimerShot(const bool bStop); //< 定时更新,通知model刷新界面 void sigUpdateAlarmView(); //< 通知所有告警插件禁用/使能告警操作 void sigAlarmOperateEnable(const bool &bEnable); //< 通知model重新拉取告警消息 void sigMsgRefresh(); //< 通知model告警消息到达 //void sigMsgArrived(); //< 通知model告警消息确认 void sigMsgConfirm(); //< 通知model告警消息删除(原始告警 删除数量) void sigMsgRemove(int removeNum); //< 告警数量或状态改变时触发。 void sigAlarmStateChanged(int total, int unConfirm); void sigDevTreeUpdate(); public slots: void initialize(); void release(); void destory(); void slotTimerShot(const bool start); void slotSwitchFaultRecallState(bool bFaultRecallState); private: CAlarmDataCollect(); int queryPriorityOrder(int &id); int queryAlarmAction(const int &priority); private slots: void slotAlarmStateChanged(); private: int m_referenceCount; bool m_bFaultRecallState; //是否处于事故追忆 QMutex * m_rtdbMutex; QTimer * m_pAlternateTimer; kbd_dbms::CRdbAccess * m_rtdbAccess; kbd_dbms::CRdbAccess * m_rtdbAlmLvlDefTab; // 告警等级定义表 kbd_dbms::CRdbAccess * m_rtdbAlmActDefTab; // 告警动作定义表 bool m_bIsNeedUpdate; //< 是否消息确认(每秒更新) bool m_bIsNeedRemove; //< 是否需要删除(每秒更新) bool m_bIsNeedRelease; //< 是否需要释放(每秒更新)- static CAlarmDataCollect * m_pInstance; //1秒需要删除的条数 (在这里统计这个,原因是当删除大量数据时,一条一条删除没有重置模型效率高,此处当大于1000时,会重置模型,小于的话,则一条一条删) //beginRemoveRows() 和beginResetModel() 没有深入研究临界值,目前先采用1000 int m_removeNum; }; #endif // CALARMDATACOLLECT_H