task_plan_2/include/core/template.hpp

117 lines
3.9 KiB
C++
Raw Normal View History

2026-05-25 08:25:48 +00:00
#ifndef BATTLEFIELD_CORE_TEMPLATE_HPP
#define BATTLEFIELD_CORE_TEMPLATE_HPP
#include <string>
#include <vector>
2026-05-26 05:33:17 +00:00
#include <map>
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
namespace battlefield {
2026-05-26 05:33:17 +00:00
/// @brief 任务模板数据结构,对应 T_TEMPLATE
2026-05-25 08:25:48 +00:00
struct TaskTemplate {
2026-05-26 05:33:17 +00:00
std::string versionId; ///< VERSION_ID
2026-05-25 08:25:48 +00:00
std::string name; ///< 模板名称
std::string description; ///< 模板描述
std::string content; ///< 模板内容JSON格式
std::string dateIndex; ///< 日期索引
2026-05-26 05:33:17 +00:00
bool isActive{false}; ///< 是否当前激活版本
bool isRecommended{false}; ///< 是否被推荐
double score{0.0}; ///< 推荐评分
2026-05-25 08:25:48 +00:00
};
2026-05-26 05:33:17 +00:00
/// @brief 版本差异信息
struct VersionDiff {
std::string versionA;
std::string versionB;
std::vector<std::string> addedFields;
std::vector<std::string> removedFields;
std::vector<std::string> changedFields;
};
/// @brief 模板管理模块SU-03覆盖 SRS-F-03-001 ~ SRS-F-04-006
2026-05-25 08:25:48 +00:00
class TemplateManager {
public:
2026-05-26 05:33:17 +00:00
/// @brief 从目录加载JSON模板文件SRS-F-04-001
2026-05-25 08:25:48 +00:00
/// @param directory 模板文件目录
/// @return 成功加载的模板数量
size_t LoadTemplates(const std::string& directory);
2026-05-26 05:33:17 +00:00
/// @brief 从单个JSON文件加载模板
/// @param filePath 文件路径
/// @return 是否成功
bool LoadTemplateFromFile(const std::string& filePath);
/// @brief 接收推送的任务模板JSON数据SRS-F-04-001
/// @param jsonData 模板JSON字符串
/// @return 是否接收成功
bool ReceiveTemplatePush(const std::string& jsonData);
/// @brief 保存模板到文件
/// @param tmpl 模板对象
/// @param directory 目标目录
/// @return 是否保存成功
bool SaveTemplateToFile(const TaskTemplate& tmpl, const std::string& directory) const;
/// @brief 获取所有模板列表SRS-F-04-002
2026-05-25 08:25:48 +00:00
/// @return 模板列表
std::vector<TaskTemplate> GetTemplateList() const;
2026-05-26 05:33:17 +00:00
/// @brief 按名称排序SRS-F-04-003
2026-05-25 08:25:48 +00:00
/// @param ascending 是否升序
void SortTemplatesByName(bool ascending = true);
2026-05-26 05:33:17 +00:00
/// @brief 按评分排序
void SortTemplatesByScore(bool ascending = false);
/// @brief 按版本ID排序
void SortTemplatesByVersion(bool ascending = true);
/// @brief 按类别筛选模板
std::vector<TaskTemplate> FilterByCategory(const std::string& keyword) const;
/// @brief 人环模式选择指定版本模板SRS-F-03-001, SRS-F-04-005
2026-05-25 08:25:48 +00:00
/// @param versionId 版本ID
2026-05-26 05:33:17 +00:00
/// @return 选中的模板
2026-05-25 08:25:48 +00:00
TaskTemplate SelectTemplate(const std::string& versionId);
2026-05-26 05:33:17 +00:00
/// @brief 设置模板为激活版本SRS-F-03-001
/// @param versionId 版本ID
/// @return 是否成功
bool SetActiveVersion(const std::string& versionId);
/// @brief 自主模式自动推荐最优模板SRS-F-04-006
2026-05-25 08:25:48 +00:00
/// @return 推荐的模板
TaskTemplate RecommendTemplate();
2026-05-26 05:33:17 +00:00
/// @brief 加权推荐Top-N模板
/// @param topN 返回数量
/// @return 推荐模板列表
std::vector<TaskTemplate> RecommendTopTemplates(size_t topN = 3);
/// @brief 计算模板评分(基于完整性、描述长度、激活状态等加权)
/// @param tmpl 模板
/// @return 评分
double CalculateTemplateScore(const TaskTemplate& tmpl) const;
/// @brief 对比两个版本的差异SRS-F-04-004 详情展示)
/// @param versionIdA 版本A
/// @param versionIdB 版本B
/// @return 差异信息
VersionDiff CompareVersions(const std::string& versionIdA, const std::string& versionIdB) const;
2026-05-25 08:25:48 +00:00
/// @brief 获取模板总数
size_t GetTemplateCount() const { return templates_.size(); }
private:
std::vector<TaskTemplate> templates_; ///< 模板集合
2026-05-26 05:33:17 +00:00
/// @brief 解析JSON为模板对象
TaskTemplate ParseTemplateJson(const nlohmann::json& j) const;
2026-05-25 08:25:48 +00:00
};
} // namespace battlefield
#endif // BATTLEFIELD_CORE_TEMPLATE_HPP