LAPTOP-SNT8I5JK\Boounion
2025-09-05 fc8d367963a16de61dfbc4a0ff34c78c91ec2cfe
SourceCode/Bond/Servo/RecipeManager.h
@@ -1,4 +1,4 @@
#ifndef RECIPE_MANAGER_H
#ifndef RECIPE_MANAGER_H
#define RECIPE_MANAGER_H
#include <string>
@@ -9,99 +9,113 @@
#include "CParam.h"
// 单个设备配方映射信息
// 单个设备配方映射信息
struct DeviceRecipe {
    int nDeviceID;               // 设备ID
    int nRecipeID;               // 子配方ID
   std::string strRecipeName;   // 子配方名称
    std::string strDeviceName;   // 设备名称
    std::vector<uint8_t> paramsRawData;     // 配方原始数据
    std::vector<CParam*> m_params;         // 出站时记录参数
   int nDeviceID;                     // 设备ID
   int nRecipeID;                     // 子配方ID
   std::string strRecipeName;            // 设备名称
   std::string strDeviceName;            // 子配方名称
   std::vector<uint8_t> paramsRawData;     // 原始参数数据
   std::vector<CParam*> m_params;         // 参数对象列表
};
// 配方信息
// 配方信息
struct RecipeInfo {
    std::string strPPID;         // 配方ID
    std::string strDescription;  // 配方描述
    std::string strCreateTime;   // 创建时间
    std::vector<DeviceRecipe> vecDeviceList;  // 关联的设备信息列表
   std::string strPPID;         // 配方ID
   std::string strDescription;  // 配方描述
   std::string strCreateTime;   // 创建时间
   std::vector<DeviceRecipe> vecDeviceList;  // 关联的设备信息列表
};
using RecipeMap = std::unordered_map<std::string, RecipeInfo>; // 按 PPID 映射的配方表
using RecipeMap = std::unordered_map<std::string, RecipeInfo>; // 按 PPID 映射的配方表
class RecipeManager {
public:
    // 获取单例
   // 获取单例
    static RecipeManager& getInstance();
    // 初始化配方数据库
   // 初始化配方数据库
    bool initRecipeTable();
    // 销毁表或关闭连接
   // 销毁表或关闭连接
    void termRecipeTable();
    bool destroyRecipeTable();
   // 检查 PPID 是否存在
   // 检查 PPID 是否存在
    bool ppidExists(const std::string& ppid);
   // 检查设备是否存在于指定 PPID 的配方中
   // 检查设备是否存在于指定 PPID 的配方中
   bool deviceExists(const std::string& ppid, int nDeviceID);
    // 添加一个配方及其设备映射
   // 添加一个配方及其设备映射
    bool addRecipe(const RecipeInfo& recipe);
   // 添加设备到指定配方
   // 添加设备到指定配方
    bool addRecipeDevice(const std::string& ppid, const DeviceRecipe& device);
   // 删除指定 PPID 的设备配方
   // 删除指定 PPID 的设备配方
    bool deleteRecipeDeviceByID(const std::string& ppid, int nDeviceID);
   // 删除指定 PPID 的设备配方(通过设备名称)
   // 删除指定 PPID 的设备配方(通过设备名称)
    bool deleteRecipeDeviceByName(const std::string& ppid, const std::string& strDeviceName);
    // 查询所有配方
   // 查询所有配方
    std::vector<RecipeInfo> getAllRecipes();
   // 根据 PPID 或描述查询配方
   // 根据 PPID 或描述查询配方
    std::vector<RecipeInfo> getRecipesByKeyword(const std::string& keyword);
   // 获取所有 PPID
   // 获取所有 PPID
    std::vector<std::string> getAllPPID() const;
    // 按 PPID 查询配方
   // 按 ID 查询 PPID
   std::string getPPIDById(int nId);
   // 按 PPID 查询 ID
   int getIdByPPID(const std::string& ppid);
   // 按 PPID 查询配方
    RecipeInfo getRecipeByPPID(const std::string& ppid);
    // 根据 PPID 和设备ID 获取设备配方ID
   // 根据 PPID 和设备ID 获取设备配方ID
    int getDeviceRecipeIDByID(const std::string& ppid, int nDeviceID);
    // 根据 PPID 和设备名称 获取设备配方ID
   // 根据 PPID 和设备名称 获取设备配方ID
    int getDeviceRecipeIDByName(const std::string& ppid, const std::string& strDeviceName);
    // 删除指定 PPID 的配方
   // 删除指定 PPID 的配方
    bool deleteRecipeByPPID(const std::string& ppid);
    // 更新指定 PPID 的配方
   // 更新指定 PPID 的配方
    bool updateRecipe(const RecipeInfo& recipe);
   // 更新 PPID(通过旧 PPID 和新 PPID)
   // 更新 PPID(通过旧 PPID 和新 PPID)
    bool updatePPID(const std::string& oldPPID, const std::string& newPPID);
   // 更新配方描述(通过 PPID)
   // 更新配方描述(通过 PPID)
    bool updateDescription(const std::string& ppid, const std::string& newDescription);
   // 更新设备配方ID(通过 PPID 和设备ID)
   // 更新设备配方ID(通过 PPID 和设备ID)
    bool updateDeviceRecipeIDByID(const std::string& ppid, int nDeviceID, int nNewRecipeID);
   // 更新设备配方ID(通过 PPID 和设备名称)
   // 更新设备配方ID(通过 PPID 和设备名称)
    bool updateDeviceRecipeIDByName(const std::string& ppid, const std::string& strDeviceName, int nNewRecipeID);
    // 模拟插入数据(测试用)
   bool addDeviceRecipe(const std::string& strDeviceName, int nID, const std::string& strName, const std::string& strPara);
   bool updateDeviceRecipeName(const std::string& strDeviceName, int nID, const std::string& strNewName);
   bool updateDeviceRecipePara(const std::string& strDeviceName, int nID, const std::string& strNewPara);
   std::string getDeviceRecipeName(const std::string& strDeviceName, int nID);
   std::string getDeviceRecipePara(const std::string& strDeviceName, int nID);
   bool deleteDeviceRecipe(const std::string& strDeviceName, int nID);
   std::vector<std::pair<int, std::string>> getDeviceRecipes(const std::string& strDeviceName);
   // 模拟插入数据(测试用)
    void insertMockData();
    // 读取配方文件(CSV 或 JSON)
   // 读取配方文件(CSV 或 JSON)
    bool readRecipeFile(const std::string& filename);
    // 保存配方到文件
   // 保存配方到文件
    bool saveRecipeFile(const std::string& filename);
private: