112 lines
3.2 KiB
C++
112 lines
3.2 KiB
C++
#ifndef CALARMDATACOLLECT_H
|
||
#define CALARMDATACOLLECT_H
|
||
|
||
#include <QObject>
|
||
#include <QMutex>
|
||
#include <QThread>
|
||
#include <QMap>
|
||
#include <QTimer>
|
||
#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 iot_service::CAlmApiForAlmClt
|
||
{
|
||
Q_OBJECT
|
||
public:
|
||
static CAlarmDataCollect *instance();
|
||
|
||
virtual ~CAlarmDataCollect();
|
||
|
||
void refrence();
|
||
|
||
int getRefrenceCount();
|
||
|
||
bool isFaultRecallState();
|
||
|
||
virtual bool requestCfmAlm(iot_idl::SAlmCltCfmAlm &objCfmAlm);
|
||
|
||
virtual bool requestDelAlm(iot_idl::SAlmCltDelAlm &objDelAlm);
|
||
|
||
virtual void handleAllAlmMsg(int domainId, iot_idl::SAlmCltAddAlm &objAllAlm);
|
||
|
||
virtual void handleAddAlmMsg(iot_idl::SAlmCltAddAlm &objAddAlm);
|
||
|
||
virtual void handleCfmAlmMsg(iot_idl::SAlmCltCfmAlm &objCfmAlm);
|
||
|
||
virtual void handleDelAlmMsg(iot_idl::SAlmCltDelAlm &objDelAlm);
|
||
|
||
virtual void handleReleaseAlmMsg(iot_idl::SAlmCltReleaseAlm &objDelAlm);
|
||
|
||
virtual void handleLinkWave2AlmMsg(iot_idl::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;
|
||
iot_dbms::CRdbAccess * m_rtdbAccess;
|
||
iot_dbms::CRdbAccess * m_rtdbAlmLvlDefTab; // 告警等级定义表
|
||
iot_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
|