#ifndef FZKJ_APP_HPP #define FZKJ_APP_HPP #include #include #include #include #include #include // ============================================================ // 常量定义 // ============================================================ namespace fzkj { /// 事件负载固定长度(256字节) constexpr std::size_t kEventPayloadSize = 256; /// 最大传输单元(MTU) constexpr std::size_t kMtuSize = 1500; /// 数据缓存容量(1GB) constexpr std::size_t kCacheCapacity = 1024ULL * 1024 * 1024; /// 持久化周期(5分钟,单位:秒) constexpr int kPersistIntervalSec = 300; /// 事件处理延迟阈值(500ms) constexpr std::chrono::milliseconds kEventLatencyThreshold(500); /// 方案分发成功率目标 99.9% constexpr double kDispatchSuccessRate = 0.999; } // namespace fzkj // ============================================================ // 战场事件数据包(EvtData / struct_EventPayload) // 定长结构体 256 字节,字节对齐 // ============================================================ namespace fzkj { #pragma pack(push, 1) struct EventPayload { uint8_t event_type; // 事件类型(枚举 0~255) uint64_t timestamp_ms; // 时间戳(毫秒) uint32_t source_id; // 来源标识 uint8_t payload_data[kEventPayloadSize - 13]; // 载荷数据 uint8_t checksum; // 校验码 }; #pragma pack(pop) /// 事件合法性校验结果 enum class EventValidationResult { kValid, kInvalidType, kInvalidChecksum, kRedundantDuplicate }; /// 事件处理结果 enum class EventProcessResult { kSuccess, kValidationFailed, kTemplateNotFound, kTaskGenerated }; } // namespace fzkj // ============================================================ // 工作模式枚举 // ============================================================ namespace fzkj { enum class WorkMode { kNormal, // 正常模式 kDegraded, // 降级模式 kConfigMaintain // 配置维护模式 }; /// 模式名称转字符串 inline const char* WorkModeName(WorkMode m) noexcept { switch (m) { case WorkMode::kNormal: return "正常模式"; case WorkMode::kDegraded: return "降级模式"; case WorkMode::kConfigMaintain: return "配置维护模式"; default: return "未知"; } } } // namespace fzkj // ============================================================ // 作战任务基类 // ============================================================ namespace fzkj { struct Task { uint64_t task_id = 0; uint32_t source_event_id = 0; std::string description; std::string priority; // "高"/"中"/"低" std::string criticality; // "关键"/"重要"/"一般" std::chrono::system_clock::time_point created_at; std::string ToString() const; }; } // namespace fzkj // ============================================================ // 战斗方案(作战方案) // ============================================================ namespace fzkj { struct BattleSolution { uint64_t solution_id = 0; uint64_t task_id = 0; std::string name; std::string description; double score = 0.0; // 方案评分 bool is_distributed = false; // 是否分布式方案 std::string ToString() const; }; /// 方案对比结果 struct SolutionComparison { uint64_t solution_a_id; uint64_t solution_b_id; double score_diff; std::string summary; }; } // namespace fzkj // ============================================================ // 执行状态 // ============================================================ namespace fzkj { enum class ExecutionStatus { kPending, kInProgress, kSuccess, kFailed, kTimeout }; inline const char* ExecutionStatusName(ExecutionStatus s) noexcept { switch (s) { case ExecutionStatus::kPending: return "待执行"; case ExecutionStatus::kInProgress: return "执行中"; case ExecutionStatus::kSuccess: return "执行成功"; case ExecutionStatus::kFailed: return "执行失败"; case ExecutionStatus::kTimeout: return "超时"; default: return "未知"; } } struct ExecutionUnit { uint64_t unit_id; std::string name; ExecutionStatus status = ExecutionStatus::kPending; std::string ToString() const; }; } // namespace fzkj // ============================================================ // 地图与态势数据 // ============================================================ namespace fzkj { struct GeoPoint { double latitude; // 纬度 double longitude; // 经度 double altitude; // 海拔(米) }; struct SituationLayer { std::string layer_name; bool visible = true; }; struct MapViewState { GeoPoint center_point; double zoom_level = 1.0; bool grid_visible = false; }; /// 量算结果 struct MeasureResult { double distance_m = 0.0; // 距离(米) double area_sqm = 0.0; // 面积(平方米) double azimuth_deg = 0.0; // 方位角(度) }; } // namespace fzkj // ============================================================ // 系统配置 // ============================================================ namespace fzkj { struct SystemConfig { // 算法参数 std::string algorithm_name; double algorithm_param = 1.0; // 运行模式 WorkMode mode = WorkMode::kNormal; // 网络配置 std::string ip_address = "192.168.1.100"; uint16_t port = 8080; bool use_encryption = true; // 想定参数 std::string scenario_name = "默认想定"; std::string ToString() const; }; } // namespace fzkj // ============================================================ // FZKJ Application 核心类 // ============================================================ namespace fzkj { class App { public: App(); ~App() = default; // 禁止拷贝 App(const App&) = delete; App& operator=(const App&) = delete; // ======== 事件处理(SRS-FZKJ_F-001) ======== EventProcessResult ReceiveEvent(const EventPayload& evt); EventProcessResult GenerateTaskFromTemplate(uint32_t event_type); // ======== 方案管理(SRS-FZKJ_F-002) ======== bool AddSolution(const BattleSolution& solution); std::vector GetSolutions() const; void SortByPreference(const std::string& criteria); SolutionComparison CompareSolutions(uint64_t id_a, uint64_t id_b) const; // ======== 方案驱动与状态监控(SRS-FZKJ_F-003) ======== bool DispatchPlan(uint64_t solution_id); ExecutionStatus MonitorExecutionStatus(uint64_t unit_id) const; bool TriggerAlertOnFailure(uint64_t unit_id); // ======== 共用态势与地图展示(SRS-FZKJ_F-004) ======== bool LoadGisMap(const std::string& map_path); bool OverlaySituationLayer(const SituationLayer& layer); MeasureResult MeasureDistance(const GeoPoint& p1, const GeoPoint& p2) const; void ToggleGridDisplay(); // ======== 数据中转与存储管理(SRS-FZKJ_F-005) ======== bool ForwardDataToModule(const std::string& module_name, const uint8_t* data, std::size_t len); bool PersistCacheToDb(); bool ClearScenarioCache(); // ======== 系统设置与想定切换(SRS-FZKJ_F-006) ======== void SetAlgorithmConfig(const std::string& name, double param); bool SwitchExecutionMode(WorkMode new_mode); bool LoadScenarioParams(const std::string& scenario_name); bool ApplyNetworkConfiguration(const std::string& ip, uint16_t port); // ======== 通用查询 ======== WorkMode GetCurrentMode() const noexcept { return current_mode_; } const SystemConfig& GetConfig() const noexcept { return config_; } // ======== 自检 ======== bool SelfTest(); private: WorkMode current_mode_ = WorkMode::kNormal; SystemConfig config_; std::vector event_history_; std::vector tasks_; std::vector solutions_; std::vector exec_units_; MapViewState map_state_; std::vector situation_layers_; std::size_t cache_size_ = 0; uint64_t NextTaskId(); uint64_t NextSolutionId(); uint64_t NextUnitId(); }; } // namespace fzkj #endif // FZKJ_APP_HPP