task_plan/include/event_manager.hpp

161 lines
4.4 KiB
C++
Raw Permalink Normal View History

2026-05-21 07:09:58 +00:00
#ifndef ETMS_EVENT_MANAGER_HPP
#define ETMS_EVENT_MANAGER_HPP
#include <string>
#include <vector>
#include <chrono>
#include <cstdint>
/**
* @brief
*
* t_event status
* Received Processed PendingTask TaskGenerated
*/
enum class EventStatus {
Received, ///< 已接收,尚未处理
Processed, ///< 已处理完毕
PendingTask, ///< 待生成任务
TaskGenerated ///< 任务已生成
};
/**
* @brief
*
*
*/
enum class EventLevel {
Info = 0, ///< 信息级
Warning = 1, ///< 警告级
Critical = 2, ///< 危急级
Fatal = 3 ///< 致命级
};
/**
* @brief
*
* t_event
*/
struct Event {
uint64_t id; ///< 自增主键 ID
std::string eventId; ///< 事件唯一标识 (event_id)
std::string eventType; ///< 事件类型 (event_type)
int64_t timestamp; ///< 事件发生时间戳 (毫秒)
EventLevel level; ///< 事件等级
double longitude; ///< 经度
double latitude; ///< 纬度
std::string description; ///< 事件描述
EventStatus status; ///< 当前处理状态
int64_t createTime; ///< 记录创建时间戳 (毫秒)
};
/**
* @brief
*/
struct PageResult {
std::vector<Event> items; ///< 当前页数据
size_t totalCount; ///< 总记录数
size_t pageIndex; ///< 当前页码 (从1开始)
size_t pageSize; ///< 每页大小
};
/**
* @brief
*
*
*
*/
class EventManager {
public:
/// @brief 默认构造函数
EventManager();
/// @brief 虚析构函数
virtual ~EventManager();
/// @brief 禁止拷贝
EventManager(const EventManager&) = delete;
EventManager& operator=(const EventManager&) = delete;
/// @brief 允许移动
EventManager(EventManager&&) noexcept;
EventManager& operator=(EventManager&&) noexcept;
/**
* @brief
*
* MQTT/Kafka JSON
*
* @param rawJson JSON
* @return true
* @return false
*/
bool receiveEvent(const std::string& rawJson);
/**
* @brief
*
* @param eventId ID
* @param newStatus
* @return true
* @return false
*/
bool updateStatus(const std::string& eventId, EventStatus newStatus);
/**
* @brief
*
* @param page 1
* @param pageSize
* @param levelFilter nullptr
* @return PageResult
*/
PageResult queryEvents(size_t page, size_t pageSize,
const EventLevel* levelFilter = nullptr) const;
/**
* @brief
* @return size_t
*/
size_t totalEvents() const;
/**
* @brief ID
* @param eventId ID
* @return const Event* nullptr
*/
const Event* findEvent(const std::string& eventId) const;
/**
* @brief
* @param level
* @return const char*
*/
static const char* levelToString(EventLevel level) noexcept;
/**
* @brief
* @param status
* @return const char*
*/
static const char* statusToString(EventStatus status) noexcept;
private:
std::vector<Event> m_events; ///< 事件存储容器(模拟数据库 t_event 表)
uint64_t m_nextId = 1; ///< 自增 ID 计数器
/**
* @brief ID
* @return uint64_t
*/
uint64_t nextId();
/**
* @brief
* @return int64_t
*/
static int64_t nowMs() noexcept;
};
#endif // ETMS_EVENT_MANAGER_HPP