task_plan_2/include/core/template.hpp

117 lines
3.9 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_TEMPLATE_HPP
#define BATTLEFIELD_CORE_TEMPLATE_HPP
#include <string>
#include <vector>
#include <map>
#include <cstdint>
#include <nlohmann/json.hpp>
namespace battlefield {
/// @brief 任务模板数据结构,对应 T_TEMPLATE
struct TaskTemplate {
std::string versionId; ///< VERSION_ID
std::string name; ///< 模板名称
std::string description; ///< 模板描述
std::string content; ///< 模板内容JSON格式
std::string dateIndex; ///< 日期索引
bool isActive{false}; ///< 是否当前激活版本
bool isRecommended{false}; ///< 是否被推荐
double score{0.0}; ///< 推荐评分
};
/// @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
class TemplateManager {
public:
/// @brief 从目录加载JSON模板文件SRS-F-04-001
/// @param directory 模板文件目录
/// @return 成功加载的模板数量
size_t LoadTemplates(const std::string& directory);
/// @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
/// @return 模板列表
std::vector<TaskTemplate> GetTemplateList() const;
/// @brief 按名称排序SRS-F-04-003
/// @param ascending 是否升序
void SortTemplatesByName(bool ascending = true);
/// @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
/// @param versionId 版本ID
/// @return 选中的模板
TaskTemplate SelectTemplate(const std::string& versionId);
/// @brief 设置模板为激活版本SRS-F-03-001
/// @param versionId 版本ID
/// @return 是否成功
bool SetActiveVersion(const std::string& versionId);
/// @brief 自主模式自动推荐最优模板SRS-F-04-006
/// @return 推荐的模板
TaskTemplate RecommendTemplate();
/// @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;
/// @brief 获取模板总数
size_t GetTemplateCount() const { return templates_.size(); }
private:
std::vector<TaskTemplate> templates_; ///< 模板集合
/// @brief 解析JSON为模板对象
TaskTemplate ParseTemplateJson(const nlohmann::json& j) const;
};
} // namespace battlefield
#endif // BATTLEFIELD_CORE_TEMPLATE_HPP