task_plan_2/include/core/task.hpp

128 lines
4.4 KiB
C++
Raw Normal View History

2026-05-25 08:25:48 +00:00
#ifndef BATTLEFIELD_CORE_TASK_HPP
#define BATTLEFIELD_CORE_TASK_HPP
#include <string>
#include <vector>
2026-05-26 05:33:17 +00:00
#include <memory>
2026-05-25 08:25:48 +00:00
#include <cstdint>
2026-05-26 05:33:17 +00:00
#include <nlohmann/json.hpp>
2026-05-25 08:25:48 +00:00
#include "core/event.hpp"
namespace battlefield {
/// @brief 任务草案状态枚举
enum class DraftStatus : int32_t {
DRAFT = 0, ///< 草稿
SUBMITTED = 1, ///< 已提交
APPROVED = 2, ///< 已批准
REJECTED = 3 ///< 已驳回
};
2026-05-26 05:33:17 +00:00
/// @brief 任务草案数据结构,对应 T_TASK_DRAFT
2026-05-25 08:25:48 +00:00
struct TaskDraft {
std::string id; ///< 任务草案ID
std::string title; ///< 任务标题
std::string description; ///< 任务描述
2026-05-26 05:33:17 +00:00
int32_t priority{0}; ///< 优先级 (1-10)
2026-05-25 08:25:48 +00:00
DraftStatus status{DraftStatus::DRAFT}; ///< 状态
std::string relatedEventId; ///< 关联事件ID
2026-05-26 05:33:17 +00:00
std::string taskType; ///< 任务类型标签
std::vector<std::string> requiredResources; ///< 所需资源列表
2026-05-25 08:25:48 +00:00
};
2026-05-26 05:33:17 +00:00
/// @brief 任务生成策略接口策略模式设计文档5.2.1
class ITaskStrategy {
2026-05-25 08:25:48 +00:00
public:
2026-05-26 05:33:17 +00:00
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
2026-05-25 08:25:48 +00:00
/// @param event 源事件
/// @return 生成的 TaskDraft 对象
TaskDraft CreateTaskFromEvent(const Event& event);
2026-05-26 05:33:17 +00:00
/// @brief 观察者接口:当事件到达时被调用
void OnEventReceived(const Event& event) override;
/// @brief 获取当前所有任务草案列表SRS-F-02-001
2026-05-25 08:25:48 +00:00
/// @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);
2026-05-26 05:33:17 +00:00
/// @brief 提交任务草案并将载荷序列化为JSON
nlohmann::json SubmitDraftAsJson(const std::string& draftId);
/// @brief 按优先级排序草案列表SRS-F-02-003
2026-05-25 08:25:48 +00:00
/// @param ascending 是否升序
void SortDraftsByPriority(bool ascending = true);
2026-05-26 05:33:17 +00:00
/// @brief 设置自动生成开关(观察者模式:是否在事件到达时自动生成)
void SetAutoGenerate(bool enabled) { autoGenerate_ = enabled; }
/// @brief 获取草案总数
size_t GetDraftCount() const { return drafts_.size(); }
2026-05-25 08:25:48 +00:00
private:
2026-05-26 05:33:17 +00:00
std::vector<TaskDraft> drafts_; ///< 内存暂存的任务草案
std::vector<std::unique_ptr<ITaskStrategy>> strategies_; ///< 生成策略集合
bool autoGenerate_{false}; ///< 是否自动生成
size_t draftCounter_{0}; ///< 草案计数
/// @brief 根据事件类型选择策略
ITaskStrategy* SelectStrategy(EventType type) const;
2026-05-25 08:25:48 +00:00
};
} // namespace battlefield
#endif // BATTLEFIELD_CORE_TASK_HPP