#ifndef ALARM_MANAGER_H #define ALARM_MANAGER_H #include #include #include #include #include "Database.h" struct AlarmInfo { std::string strUnitID; std::string strUnitNo; int nAlarmLevel; int nAlarmCode; int nAlarmID; std::string strAlarmText; std::string strDescription; }; using AlarmMap = std::unordered_map; class AlarmManager { public: /** * »ñÈ¡µ¥ÀýʵÀý * @return AlarmManagerʵÀýµÄÒýÓà */ static AlarmManager& getInstance(); /** * ÉèÖÃÊý¾Ý¿âÁ¬½Ó * @param db Êý¾Ý¿âÁ¬½ÓµÄÖ¸Õë */ void setDatabase(BL::Database* db); /** * ³õʼ»¯±¨¾¯±í * @return ³É¹¦·µ»Øtrue£¬Ê§°Ü·µ»Øfalse */ bool initAlarmTable(); /** * Ïú»Ù±¨¾¯±í */ void termAlarmTable(); /** * Ïú»Ù±¨¾¯±í * @return ³É¹¦·µ»Øtrue£¬Ê§°Ü·µ»Øfalse */ bool destroyAlarmTable(); /** * Ìí¼Ó±¨¾¯ * @param id ±¨¾¯ID * @param deviceName É豸Ãû³Æ * @param description ±¨¾¯ÃèÊö * @param startTime ±¨¾¯¿ªÊ¼Ê±¼ä * @param endTime ±¨¾¯½áÊøÊ±¼ä * @return ³É¹¦·µ»Øtrue£¬Ê§°Ü·µ»Øfalse */ bool addAlarm(const std::string& id, const std::string& deviceName, const std::string& description, const std::string& startTime, const std::string& endTime); /** * ²éѯËùÓб¨¾¯Êý¾Ý * @return °üº¬ËùÓб¨¾¯Êý¾ÝµÄ¶þά×Ö·û´®ÏòÁ¿ */ std::vector> getAllAlarms(); /** * ¸ù¾Ý±¨¾¯ID²éѯ±¨¾¯ * @param id ±¨¾¯ID * @return °üº¬É¸Ñ¡ºó±¨¾¯Êý¾ÝµÄ¶þά×Ö·û´®ÏòÁ¿ */ std::vector> getAlarmsById(const std::string& id); /** * ¸ù¾ÝÃèÊö²éѯ±¨¾¯ * @param description ±¨¾¯ÃèÊöµÄɸѡÌõ¼þ * @return °üº¬É¸Ñ¡ºó±¨¾¯Êý¾ÝµÄ¶þά×Ö·û´®ÏòÁ¿ */ std::vector> getAlarmsByDescription(const std::string& description); /** * ¸ù¾Ýʱ¼ä·¶Î§²éѯ±¨¾¯ * @param startTime Æðʼʱ¼ä * @param endTime ½áÊøÊ±¼ä * @return °üº¬²éѯ½á¹ûµÄ¶þά×Ö·û´®ÏòÁ¿ */ std::vector> getAlarmsByTimeRange( const std::string& startTime, const std::string& endTime); /** * ¸ù¾ÝIDºÍʱ¼ä·¶Î§²éѯ±¨¾¯ * @param id ±¨¾¯ID * @param startTime Æðʼʱ¼ä * @param endTime ½áÊøÊ±¼ä * @return °üº¬²éѯ½á¹ûµÄ¶þά×Ö·û´®ÏòÁ¿ */ std::vector> getAlarmsByIdAndTimeRange( const std::string& id, const std::string& startTime, const std::string& endTime); /** * »ñÈ¡±¨¾¯Êý¾Ý * @param startPosition ÆðʼλÖà * @param count »ñÈ¡µÄ¼Ç¼ÊýÁ¿ * @return °üº¬±¨¾¯Êý¾ÝµÄ¶þά×Ö·û´®ÏòÁ¿ */ std::vector> getAlarms(int startPosition, int count); /** * »ñȡɸѡºóµÄ±¨¾¯Êý¾Ý * @param id ±¨¾¯IDµÄɸѡÌõ¼þ * @param deviceName É豸Ãû³ÆµÄɸѡÌõ¼þ * @param description ±¨¾¯ÃèÊöµÄɸѡÌõ¼þ * @param startTime Æðʼʱ¼äɸѡÌõ¼þ * @param endTime ½áÊøÊ±¼äɸѡÌõ¼þ * @param pageNumber Ò³Âë * @param pageSize ÿҳµÄ¼Ç¼Êý * @return °üº¬É¸Ñ¡ºó±¨¾¯Êý¾ÝµÄ¶þά×Ö·û´®ÏòÁ¿ */ std::vector> getFilteredAlarms( const std::string& id, const std::string& deviceName, const std::string& description, const std::string& startTime, const std::string& endTime, int pageNumber, int pageSize); /** * »ñÈ¡·ûºÏÌõ¼þµÄ±¨¾¯×ÜÊý * @param id ±¨¾¯IDµÄɸѡÌõ¼þ * @param deviceName É豸Ãû³ÆµÄɸѡÌõ¼þ * @param description ±¨¾¯ÃèÊöµÄɸѡÌõ¼þ * @param startTime Æðʼʱ¼äɸѡÌõ¼þ * @param endTime ½áÊøÊ±¼äɸѡÌõ¼þ * @return ·ûºÏÌõ¼þµÄ±¨¾¯×ÜÊý */ int getTotalAlarmCount( const std::string& id, const std::string& deviceName, const std::string& description, const std::string& startTime, const std::string& endTime); /** * ¸üб¨¾¯½áÊøÊ±¼ä * @param id ±¨¾¯ID * @param description ±¨¾¯ÃèÊö * @param startTime ±¨¾¯¿ªÊ¼Ê±¼ä * @param newEndTime еı¨¾¯½áÊøÊ±¼ä * @return ³É¹¦·µ»Øtrue£¬Ê§°Ü·µ»Øfalse */ bool updateAlarmEndTime(const std::string& id, const std::string& deviceName, const std::string& description, const std::string& startTime, const std::string& newEndTime); /** * ÇåÀí¾É±¨¾¯ * @param daysToKeep ±£ÁôµÄÌìÊý * @param deviceName É豸Ãû³Æ */ void cleanOldAlarms(int daysToKeep = 30, const std::string& deviceName = ""); /** * ¶ÁÈ¡±¨¾¯Îļþ * @param filename ÎļþÃû * @return ³É¹¦·µ»Øtrue£¬Ê§°Ü·µ»Øfalse */ bool readAlarmFile(const std::string& filename); /** * ±£´æ±¨¾¯Îļþ * @param filename ÎļþÃû * @return ³É¹¦·µ»Øtrue£¬Ê§°Ü·µ»Øfalse */ bool saveAlarmFile(const std::string& filename); /** * ͨ¹ý±¨¾¯ID²éѯ±¨¾¯ÐÅÏ¢ * @param nAlarmID ±¨¾¯ID * @return ±¨¾¯ÐÅÏ¢µÄÖ¸Õë */ const AlarmInfo* getAlarmInfoByID(int nAlarmID) const; /** * ͨ¹ý¶à¸ö±¨¾¯ID²éѯ¶ÔÓ¦µÄ±¨¾¯ÐÅÏ¢ * @param alarmIDs ¶à¸ö±¨¾¯ID * @return ·µ»Ø¶à¸ö±¨¾¯ÐÅÏ¢ */ std::vector getAlarmsInfoByIDs(const std::vector& alarmIDs) const; private: AlarmManager(); ~AlarmManager(); // ½ûÖ¹¿½±´ºÍ¸³Öµ AlarmManager(const AlarmManager&) = delete; AlarmManager& operator=(const AlarmManager&) = delete; BL::Database* m_pDB; AlarmMap m_mapAlarm; static std::mutex m_mutex; }; #endif // ALARM_MANAGER_H