#ifndef BATTLEFIELD_CORE_TEMPLATE_HPP #define BATTLEFIELD_CORE_TEMPLATE_HPP #include #include #include #include #include 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 addedFields; std::vector removedFields; std::vector 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 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 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 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 templates_; ///< 模板集合 /// @brief 解析JSON为模板对象 TaskTemplate ParseTemplateJson(const nlohmann::json& j) const; }; } // namespace battlefield #endif // BATTLEFIELD_CORE_TEMPLATE_HPP