#ifndef ETMS_APP_HPP #define ETMS_APP_HPP #include #include #include #include #include namespace etms { /// @brief 事件状态枚举,对应需求文档中 t_event.status 的状态流转。 enum class EventStatus { Received, ///< 刚接收,待处理 Processed, ///< 已处理 PendingTask, ///< 待映射任务 Rejected, ///< 已拒绝 TaskGenerated ///< 任务已生成 }; /// @brief 将 EventStatus 转换为可读字符串。 /// @param status 事件状态枚举值 /// @return 状态字符串,例如 "Received" const char* EventStatusToString(EventStatus status) noexcept; /// @brief 事件结构体,对应数据库 t_event 表。 struct Event { int64_t id{}; ///< 自增主键 std::string event_id; ///< 全局唯一标识 std::string event_type; ///< 事件类型:侦察、打击、预警等 std::time_t timestamp{}; ///< 事件发生时间(Unix 秒) int level{}; ///< 事件等级(紧急程度) double longitude{}; ///< 经度 double latitude{}; ///< 纬度 std::string description; ///< 事件描述文本 EventStatus status{EventStatus::Received}; ///< 当前状态 std::time_t create_time{}; ///< 记录入库时间 }; /// @brief 任务模板结构体,对应数据库 t_task_template 表。 struct TaskTemplate { std::string template_id; ///< 模板唯一标识 std::string name; ///< 显示名称 std::string version; ///< 关联知识库版本号 std::string content_path; ///< MinIO 中模板文件存储路径 std::string applicable_type;///< 可匹配的事件类型 std::time_t create_time{}; ///< 模板导入时间 }; /// @brief 知识库版本结构体,对应数据库 t_kb_version 表。 struct KbVersion { std::string version_id; ///< 版本 ID,如 KB-V1.0 std::string version_name; ///< 友好显示名 std::time_t release_time{}; ///< 版本发布时间 std::string status; ///< "Active" 或 "Deprecated" }; /// @brief 事件接收的结果,包含 ACK 信息。 struct EventAck { bool accepted{false}; ///< 是否接受 std::string event_id; ///< 对应事件 ID std::string message; ///< 提示消息 }; /// @brief 任务生成请求报文结构。 struct TaskGenerationRequest { std::string request_id; ///< 请求唯一标识 std::string event_id; ///< 引用的事件 ID std::string template_id; ///< 选定的模板 ID std::string kb_version_id; ///< 知识库版本 ID std::map params; ///< 初始参数键值对 std::time_t request_time{}; ///< 请求生成时间 }; // ======================== // 公开 API 函数声明 // ======================== /// @brief 校验并解析原始 JSON 事件数据(模拟器),返回 ACK。 /// @param raw_json 原始 JSON 字符串(最大 4KB) /// @return EventAck 结构体,包含接受状态与 event_id EventAck ReceiveRawEvent(const std::string& raw_json); /// @brief 清洗并分类打标一个事件,将其状态置为 Processed。 /// @param evt 事件引用(会被修改) /// @return true 如果处理成功 bool ProcessEvent(Event& evt); /// @brief 查询所有已接收事件(模拟数据库查询)。 /// @return 事件列表(按创建时间倒序) std::vector QueryAllEvents(); /// @brief 根据事件等级筛选紧迫事件(level >= 8 视为紧迫)。 /// @param events 事件列表 /// @return 紧迫事件列表 std::vector FilterUrgentEvents(const std::vector& events); /// @brief 根据事件特征推荐匹配的模板(自主执行模式模拟)。 /// @param evt 事件 /// @param templates 可用模板列表 /// @return 推荐模板的 ID;若无匹配返回空字符串 std::string RecommendTemplate(const Event& evt, const std::vector& templates); /// @brief 组装任务生成请求报文。 /// @param event_id 事件 ID /// @param template_id 模板 ID /// @param kb_ver 知识库版本 ID /// @param params 初始参数 /// @return 组装好的 TaskGenerationRequest TaskGenerationRequest BuildTaskRequest( const std::string& event_id, const std::string& template_id, const std::string& kb_ver, const std::map& params); /// @brief 获取可用知识库版本列表(模拟)。 /// @return 知识库版本列表 std::vector GetAvailableKbVersions(); /// @brief 获取可用任务模板列表(模拟)。 /// @return 任务模板列表 std::vector GetAvailableTemplates(); /// @brief 将事件状态推进到下一个状态(状态机模拟)。 /// @param evt 事件引用(会被修改) /// @return true 如果状态转换合法 bool AdvanceEventStatus(Event& evt); /// @brief 模拟事件排序(按等级降序)。 /// @param events 事件列表(会被排序) void SortEventsByLevelDesc(std::vector& events); /// @brief 模拟事件排序(按时间升序)。 /// @param events 事件列表(会被排序) void SortEventsByTimeAsc(std::vector& events); } // namespace etms #endif // ETMS_APP_HPP