HM-SPMS/product/src/gui/plugin/AlarmWidget/CAlarmDataCollect.h

112 lines
3.2 KiB
C
Raw Normal View History

2025-03-14 17:05:48 +08:00
#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"
2025-03-17 09:23:17 +08:00
class CAlarmDataCollect : public QObject, public iot_service::CAlmApiForAlmClt
2025-03-14 17:05:48 +08:00
{
Q_OBJECT
public:
static CAlarmDataCollect *instance();
virtual ~CAlarmDataCollect();
void refrence();
int getRefrenceCount();
bool isFaultRecallState();
2025-03-17 09:23:17 +08:00
virtual bool requestCfmAlm(iot_idl::SAlmCltCfmAlm &objCfmAlm);
2025-03-14 17:05:48 +08:00
2025-03-17 09:23:17 +08:00
virtual bool requestDelAlm(iot_idl::SAlmCltDelAlm &objDelAlm);
2025-03-14 17:05:48 +08:00
2025-03-17 09:23:17 +08:00
virtual void handleAllAlmMsg(int domainId, iot_idl::SAlmCltAddAlm &objAllAlm);
2025-03-14 17:05:48 +08:00
2025-03-17 09:23:17 +08:00
virtual void handleAddAlmMsg(iot_idl::SAlmCltAddAlm &objAddAlm);
2025-03-14 17:05:48 +08:00
2025-03-17 09:23:17 +08:00
virtual void handleCfmAlmMsg(iot_idl::SAlmCltCfmAlm &objCfmAlm);
2025-03-14 17:05:48 +08:00
2025-03-17 09:23:17 +08:00
virtual void handleDelAlmMsg(iot_idl::SAlmCltDelAlm &objDelAlm);
2025-03-14 17:05:48 +08:00
2025-03-17 09:23:17 +08:00
virtual void handleReleaseAlmMsg(iot_idl::SAlmCltReleaseAlm &objDelAlm);
2025-03-14 17:05:48 +08:00
2025-03-17 09:23:17 +08:00
virtual void handleLinkWave2AlmMsg(iot_idl::SAlmCltLinkWave2Alm &objWave2Alm);
2025-03-14 17:05:48 +08:00
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;
2025-03-17 09:23:17 +08:00
iot_dbms::CRdbAccess * m_rtdbAccess;
iot_dbms::CRdbAccess * m_rtdbAlmLvlDefTab; // 告警等级定义表
iot_dbms::CRdbAccess * m_rtdbAlmActDefTab; // 告警动作定义表
2025-03-14 17:05:48 +08:00
bool m_bIsNeedUpdate; //< 是否消息确认(每秒更新)
bool m_bIsNeedRemove; //< 是否需要删除(每秒更新)
bool m_bIsNeedRelease; //< 是否需要释放(每秒更新)-
static CAlarmDataCollect * m_pInstance;
//1秒需要删除的条数 在这里统计这个原因是当删除大量数据时一条一条删除没有重置模型效率高此处当大于1000时会重置模型小于的话则一条一条删
//beginRemoveRows() 和beginResetModel() 没有深入研究临界值目前先采用1000
int m_removeNum;
};
#endif // CALARMDATACOLLECT_H