task_plan_2/include/core/task.hpp

128 lines
4.4 KiB
C++
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#ifndef BATTLEFIELD_CORE_TASK_HPP
#define BATTLEFIELD_CORE_TASK_HPP
#include <string>
#include <vector>
#include <memory>
#include <cstdint>
#include <nlohmann/json.hpp>
#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<std::string> 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<TaskDraft> 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<TaskDraft> drafts_; ///< 内存暂存的任务草案
std::vector<std::unique_ptr<ITaskStrategy>> strategies_; ///< 生成策略集合
bool autoGenerate_{false}; ///< 是否自动生成
size_t draftCounter_{0}; ///< 草案计数
/// @brief 根据事件类型选择策略
ITaskStrategy* SelectStrategy(EventType type) const;
};
} // namespace battlefield
#endif // BATTLEFIELD_CORE_TASK_HPP