#ifndef BATTLEFIELD_CORE_TASK_HPP #define BATTLEFIELD_CORE_TASK_HPP #include #include #include #include #include #include "core/event.hpp" namespace battlefield { /// @brief 任务草案状态枚举 enum class DraftStatus : int32_t { DRAFT = 0, ///< 草稿 SUBMITTED = 1, ///< 已提交 APPROVED = 2, ///< 已批准 REJECTED = 3 ///< 已驳回 }; /// @brief 任务草案数据结构,对应 T_TASK_DRAFT struct TaskDraft { std::string id; ///< 任务草案ID std::string title; ///< 任务标题 std::string description; ///< 任务描述 int32_t priority{0}; ///< 优先级 (1-10) DraftStatus status{DraftStatus::DRAFT}; ///< 状态 std::string relatedEventId; ///< 关联事件ID std::string taskType; ///< 任务类型标签 std::vector requiredResources; ///< 所需资源列表 }; /// @brief 任务生成策略接口(策略模式,设计文档5.2.1) class ITaskStrategy { public: virtual ~ITaskStrategy() = default; /// @brief 基于事件生成任务草案 virtual TaskDraft Generate(const Event& event, const std::string& draftId) = 0; /// @brief 策略名称 virtual std::string Name() const = 0; }; /// @brief 情报处理任务策略 class IntelTaskStrategy : public ITaskStrategy { public: TaskDraft Generate(const Event& event, const std::string& draftId) override; std::string Name() const override { return "IntelTaskStrategy"; } }; /// @brief 威胁响应任务策略 class ThreatTaskStrategy : public ITaskStrategy { public: TaskDraft Generate(const Event& event, const std::string& draftId) override; std::string Name() const override { return "ThreatTaskStrategy"; } }; /// @brief 任务执行策略 class MissionTaskStrategy : public ITaskStrategy { public: TaskDraft Generate(const Event& event, const std::string& draftId) override; std::string Name() const override { return "MissionTaskStrategy"; } }; /// @brief 后勤保障任务策略 class LogisticTaskStrategy : public ITaskStrategy { public: TaskDraft Generate(const Event& event, const std::string& draftId) override; std::string Name() const override { return "LogisticTaskStrategy"; } }; /// @brief 事件观察者接口(观察者模式,设计文档5.2.1) class IEventObserver { public: virtual ~IEventObserver() = default; /// @brief 当新事件到达时回调 virtual void OnEventReceived(const Event& event) = 0; }; /// @brief 任务生成模块(SU-02,覆盖 SRS-F-02-001 ~ SRS-F-02-004) class TaskGenerator : public IEventObserver { public: TaskGenerator(); /// @brief 基于选定事件生成作战任务草案(SRS-F-02-004) /// @param event 源事件 /// @return 生成的 TaskDraft 对象 TaskDraft CreateTaskFromEvent(const Event& event); /// @brief 观察者接口:当事件到达时被调用 void OnEventReceived(const Event& event) override; /// @brief 获取当前所有任务草案列表(SRS-F-02-001) /// @return 草案列表 std::vector GetDraftList() const; /// @brief 提交任务草案送交处理(对应接口 IF-02) /// @param draftId 草案ID /// @param targetUrl 目标任务引擎地址 /// @return 是否提交成功 bool SubmitDraft(const std::string& draftId, const std::string& targetUrl); /// @brief 提交任务草案并将载荷序列化为JSON nlohmann::json SubmitDraftAsJson(const std::string& draftId); /// @brief 按优先级排序草案列表(SRS-F-02-003) /// @param ascending 是否升序 void SortDraftsByPriority(bool ascending = true); /// @brief 设置自动生成开关(观察者模式:是否在事件到达时自动生成) void SetAutoGenerate(bool enabled) { autoGenerate_ = enabled; } /// @brief 获取草案总数 size_t GetDraftCount() const { return drafts_.size(); } private: std::vector drafts_; ///< 内存暂存的任务草案 std::vector> strategies_; ///< 生成策略集合 bool autoGenerate_{false}; ///< 是否自动生成 size_t draftCounter_{0}; ///< 草案计数 /// @brief 根据事件类型选择策略 ITaskStrategy* SelectStrategy(EventType type) const; }; } // namespace battlefield #endif // BATTLEFIELD_CORE_TASK_HPP