140 lines
5.3 KiB
C++
140 lines
5.3 KiB
C++
#ifndef ETMS_APP_HPP
|
||
#define ETMS_APP_HPP
|
||
|
||
#include <string>
|
||
#include <vector>
|
||
#include <cstdint>
|
||
#include <ctime>
|
||
#include <map>
|
||
|
||
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<std::string, std::string> 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<Event> QueryAllEvents();
|
||
|
||
/// @brief 根据事件等级筛选紧迫事件(level >= 8 视为紧迫)。
|
||
/// @param events 事件列表
|
||
/// @return 紧迫事件列表
|
||
std::vector<Event> FilterUrgentEvents(const std::vector<Event>& events);
|
||
|
||
/// @brief 根据事件特征推荐匹配的模板(自主执行模式模拟)。
|
||
/// @param evt 事件
|
||
/// @param templates 可用模板列表
|
||
/// @return 推荐模板的 ID;若无匹配返回空字符串
|
||
std::string RecommendTemplate(const Event& evt, const std::vector<TaskTemplate>& 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<std::string, std::string>& params);
|
||
|
||
/// @brief 获取可用知识库版本列表(模拟)。
|
||
/// @return 知识库版本列表
|
||
std::vector<KbVersion> GetAvailableKbVersions();
|
||
|
||
/// @brief 获取可用任务模板列表(模拟)。
|
||
/// @return 任务模板列表
|
||
std::vector<TaskTemplate> GetAvailableTemplates();
|
||
|
||
/// @brief 将事件状态推进到下一个状态(状态机模拟)。
|
||
/// @param evt 事件引用(会被修改)
|
||
/// @return true 如果状态转换合法
|
||
bool AdvanceEventStatus(Event& evt);
|
||
|
||
/// @brief 模拟事件排序(按等级降序)。
|
||
/// @param events 事件列表(会被排序)
|
||
void SortEventsByLevelDesc(std::vector<Event>& events);
|
||
|
||
/// @brief 模拟事件排序(按时间升序)。
|
||
/// @param events 事件列表(会被排序)
|
||
void SortEventsByTimeAsc(std::vector<Event>& events);
|
||
|
||
} // namespace etms
|
||
|
||
#endif // ETMS_APP_HPP
|