LAPTOP-SNT8I5JK\Boounion
2025-09-11 b9f5d0325af5dacf98e245a3b897d2ea44ea4790
SourceCode/Bond/Servo/SECSRuntimeManager.h
@@ -31,6 +31,34 @@
   */
    void termRuntimeSetting();
    /**
     * 初始化指定的 SystemV 表
     * @param tableName: 要初始化的表名(如 "SystemSV" 或 "SystemDV")。
     *
     * 此函数用于初始化指定名称的 SystemV 表。如果表不存在,将会创建该表。
     * - 表结构包括:ID、Name、DataType、Length、Unit、Remark、SystemID。
     * - 如果表已经存在,则不进行任何操作。
     */
    void initSystemVTable(const std::string& tableName);
    int addSystemVData(const std::string& tableName, int nID, const std::string& sName, const std::string& sDataType, int nLength, const std::string& sUnit, const std::string& sRemark, int nSystemID);
    std::vector<std::vector<std::string>> getSystemVByID(const std::string& tableName, int nID);
    std::vector<std::vector<std::string>> getAllSystemV(const std::string& tableName);
    int updateIDSystemV(const std::string& tableName, int nID, int sNewID);
    int updateAllSystemV(const std::string& tableName, int nID, int sNewID, const std::string& sName, const std::string& sDataType, int nLength, const std::string& sUnit, const std::string& sRemark, int nSystemID);
    void initEqpVTable(const std::string& tableName);
    int addEqpVData(const std::string& tableName, int nID, const std::string& sName, const std::string& sDataType, int nLength, const std::string& sUnit, const std::string& sRemark, int nSeqNo);
    std::vector<std::vector<std::string>> getEqpVDataByID(const std::string& tableName, int nID);
    int updateEqpV(const std::string& tableName, int nID, int nNewID, const std::string& sName, const std::string& sDataType, int nLength, const std::string& sUnit, const std::string& sRemark, int nSeqNo);
   /**
    * 初始化SystemSV表
    */
@@ -190,14 +218,8 @@
    /**
    * 获取所有 EqpSV 数据
    * @return std::vector<std::vector<std::string>>: 返回一个二维字符串向量,表示查询结果。每行代表一条记录,每列代表该记录的一个字段值。
    *          如果表中有数据,则返回所有记录;如果表为空,则返回空的二维向量。
    *
    * 此函数用于从 EqpSV 表中获取所有的数据。通过构造 SQL 查询语句来选择所有记录,并执行查询操作。
    * 返回的结果是一个二维字符串向量,表示表中的所有记录。每行数据是一个字符串向量,其中包含该记录的各个字段。
    * 如果表中没有数据,函数将返回一个空的二维向量。
    */
    std::vector<std::vector<std::string>> SECSRuntimeManager::getAllEqpSV();
    bool getAllEqpSV(std::vector<std::vector<std::string>>& outEqpSV);
    /**
     * 更新指定 ID 的 EqpSV 数据
@@ -258,30 +280,104 @@
    */ 
    void initSystemDVTable();
    int addSystemDV(int nID, const std::string& sName, const std::string& sDataType, int nLength, const std::string& sUnit, const std::string& sRemark, int nSystemID);
    std::vector<std::vector<std::string>> getSystemDVByID(int nID);
    std::vector<std::vector<std::string>> getAllSystemDV();
    int updateIDSystemDV(int nID, int sNewID);
    int updateAllSystemDV(int nID, int sNewID, const std::string& sName, const std::string& sDataType, int nLength, const std::string& sUnit, const std::string& sRemark, int nSystemID);
    int deleteSystemDVByID(int nID);
    int deleteAllSystemDV();
   /**
   * 初始化 EqpDV 表
    */ 
    void initEqpDVTable();
    int addEqpDV(int nID, const std::string& sName, const std::string& sDataType, int nLength, const std::string& sUnit, const std::string& sRemark, int nSeqNo);
    std::vector<std::vector<std::string>> getEqpDVByID(int nID);
    bool getAllEqpDV(std::vector<std::vector<std::string>>& outEqpDV);
    int updateEqpDV(int nID, int nNewID, const std::string& sName, const std::string& sDataType, int nLength, const std::string& sUnit, const std::string& sRemark, int nSeqNo);
    int deleteEqpDVByID(int nID);
    int deleteAllEqpDV();
   /**
   * 初始化 SystemEC 表
    */ 
    void initSystemECTable();
    int addSystemEC(int nID, const std::string& sName, const std::string& sDataType, int nMinValue, int nMaxValue, int nDefaultVal, const std::string& sUnit, const std::string& sRemark, int nSystemID);
    std::vector<std::vector<std::string>> getSystemECByID(int nID);
    std::vector<std::vector<std::string>> getAllSystemEC();
    int updateSystemEC(int nID, int nNewID, const std::string& sName, const std::string& sDataType, int nMinValue, int nMaxValue, int nDefaultVal, const std::string& sUnit, const std::string& sRemark, int nSystemID);
    int deleteSystemECByID(int nID);
    int deleteAllSystemEC();
    /**
    * 初始化 EqpEC 表
    */
    void initEqpECTable();
    int addEqpEC(int nID, const std::string& sName, const std::string& sDataType, int nMinValue, int nMaxValue, int nDefaultValue, const std::string& sUnit, const std::string& sRemark, int nSeqNo, int nLength, int bCanUpdateByHost);
    std::vector<std::vector<std::string>> getEqpECByID(int nID);
    std::vector<std::vector<std::string>> getAllEqpEC();
    int updateEqpEC(int nID, int nNewID, const std::string& sName, const std::string& sDataType, int nMinValue, int nMaxValue, int nDefaultValue, const std::string& sUnit, const std::string& sRemark, int nSeqNo, int nLength, int bCanUpdateByHost);
    int deleteEqpECByID(int nID);
    int deleteAllEqpEC();
    /**
    * 初始化 SystemEvent 表
    */
    void initSystemEventTable();
    int addSystemEvent(int nCEID, const std::string& sName, const std::string& sRemark, int nSystemID);
    std::vector<std::vector<std::string>> getSystemEventByID(int nCEID);
    std::vector<std::vector<std::string>> getAllSystemEvents();
    int updateSystemEvent(int nCEID, int nNewCEID, const std::string& sName, const std::string& sRemark, int nSystemID);
    int deleteSystemEventByID(int nCEID);
    int deleteAllSystemEvents();
    /**
    * 初始化 EqpEvent 表
    */
    void initEqpEventTable();
    int addEqpEvent(const std::string& sName, const std::string& sRemark, int nBitNo);
    std::vector<std::vector<std::string>> getEqpEventByID(int nCEID);
    std::vector<std::vector<std::string>> getAllEqpEvents();
    int updateEqpEvent(int nCEID, const std::string& sName, const std::string& sRemark, int nBitNo);
    int deleteEqpEventByID(int nCEID);
    int deleteAllEqpEvents();
    /**
    * 初始化 EventLink 表
@@ -293,10 +389,143 @@
    */
    void initPPIDTable();
   std::vector<std::string> getAllPPID();
    void setAllPPID(const std::vector<std::string>& vecPPIDList);
    bool updatePPIDForRecipe(int nRecipeNo, const std::string& strPPID);
    std::string getPPIDForRecipe(int nRecipeNo);
    int getRecipeForPPID(std::string strPPID);
    bool deletePPIDForRecipe(int nRecipeNo);
    bool deletePPIDForAllRecipes();
   /**
   * 初始化 RPTID 表
    */ 
    void initRPTIDTable();
    /**
     * 添加 RPTID 和 VID 的关系
     * @param nRPTID: 需要关联的 RPTID。
     * @param nVID: 需要关联的 VID,可以是 SystemSV 或 EqpSV 的 ID。
     * @return 1: 数据库未连接。
     * @return 2: RPTID 和 VID 的关系已存在,无法插入。
    * @return 3: Report 表插入数据失败。
     * @return 4: ReportVIDs 表插入数据失败。
     * @return 0: 插入成功,数据已添加到 ReportVIDs 表中。
     *
     * 此函数用于添加一个新的 RPTID 和 VID 的关联关系。如果该 RPTID 和 VID 的组合已存在于数据库中,
     * 则返回错误代码 2。否则,函数会插入新的关系,并返回 0 表示插入成功。
     */
    int addRPTIDVID(int nRPTID, int nVID);
    /**
     * 添加多个 VID 与一个 RPTID 的关系
     * @param nRPTID: 需要关联的 RPTID。
     * @param vecVID: 需要关联的多个 VID,可以是 SystemSV 或 EqpSV 的 ID 的集合。
     * @return 1: 数据库未连接。
     * @return 2: Report 表插入数据失败。
     * @return 3: ReportVIDs 表插入数据失败。
     * @return 0: 插入成功,数据已添加到 ReportVIDs 表中。
     *
     * 此函数用于将多个 VID 与 RPTID 关联。首先检查 `RPTID` 是否已经存在于 `Report` 表中,
     * 如果不存在,则先插入该 `RPTID`。然后,批量插入 `RPTID` 和 `VID` 的关系,确保同一个 `RPTID`
     * 下的 `VID` 不重复。
     */
    int addRPTIDVIDs(int nRPTID, const std::vector<int>& vecVID);
   /**
    * 删除指定 RPTID 和 VID 的关系
    * @param nRPTID: 需要删除的 RPTID。
    * @param nVID: 需要删除的 VID。
    * @return 1: 数据库未连接。
    * @return 2: RPTID 和 VID 的关系不存在,无法删除。
    * @return 3: 删除操作失败。
    * @return 0: 删除成功。
    *
    * 此函数用于删除指定的 RPTID 和 VID 的关联关系。如果该关系不存在,则返回错误代码 2。
    * 如果删除操作失败,则返回错误代码 3。删除成功后,返回 0 表示删除成功。
    */
    int deleteRPTIDVID(int nRPTID, int nVID);
    /**
     * 删除指定 RPTID 关联的所有记录
     * @param nRPTID: 需要删除的 RPTID。
     *
     * @return 1: 数据库未连接。
     * @return 2: 删除 ReportVIDs 表中的记录失败。
     * @return 3: 删除 Report 表中的 RPTID 失败。
     * @return 0: 删除成功,所有与该 RPTID 关联的记录已被删除。
     *
     * 此函数用于删除 ReportVIDs 表中所有与指定 RPTID 关联的记录,并根据需要删除 Report 表中的 RPTID。
     * - 首先,删除 ReportVIDs 表中所有与该 RPTID 关联的记录。
     * - 然后,可以选择是否删除 Report 表中对应的 RPTID。
     *
     * 若删除失败,则返回相应的错误代码。如果成功删除所有记录,则返回 0。
     */
    int deleteRPTID(int nRPTID);
    /**
     * 更新指定 RPTID 的 VID 关联记录
     * @param nRPTID: 需要更新的 RPTID。
     * @param nOldVID: 需要更新的旧 VID。
     * @param nNewVID: 新的 VID,替代旧的 VID。
     *
     * @return 1: 数据库未连接。
     * @return 2: 找不到指定的 RPTID 和旧 VID 组合。
     * @return 3: 新的 VID 已经存在于该 RPTID 下。
     * @return 4: 更新操作失败。
     * @return 0: 更新成功,VID 已被替换为新的 VID。
     *
     * 此函数用于更新 `ReportVIDs` 表中指定 `RPTID` 的旧 `VID` 为新的 `VID`。
     * - 首先,检查是否存在指定的 `RPTID` 和 `OldVID` 组合。
     * - 然后检查新的 `VID` 是否已经存在于相同的 `RPTID` 下,防止重复。
     * - 如果检查通过,则执行更新操作。
     */
    int updateRPTIDVID(int nRPTID, int nOldVID, int nNewVID);
    /**
     * 删除并重新添加指定 RPTID 下的多个 VID 关联记录
     * @param nRPTID: 需要更新记录的 RPTID。
     * @param vecVID: 需要重新添加的 VID 列表。
     *
     * @return 1: 数据库未连接。
     * @return 2: 删除操作失败,可能是某些 VID 不存在或数据库操作失败。
     * @return 3: 插入操作失败,可能是某些 VID 已经存在。
     * @return 0: 删除并重新添加成功,所有 VID 记录已更新。
     *
     * 此函数用于删除指定 `RPTID` 下的所有旧 VID 记录,然后重新添加新的 VID 记录。
     * - 首先,删除指定 `RPTID` 下的所有 VID 关联记录。
     * - 然后,检查新 `VID` 是否存在,若不存在则插入新记录。
     *
     * 如果操作成功,返回 0;如果删除或插入过程中遇到问题,返回相应的错误代码。
     */
    int updateRPTIDVIDs(int nRPTID, const std::vector<int>& vecVID);
    /**
    * 查询指定 RPTID 下的所有 VID
    * @param nRPTID: 需要查询的 RPTID。
    * @return std::vector<int>: 存储所有与 RPTID 关联的 VID。
    *
    * 此函数用于根据指定的 `RPTID` 查询所有与之关联的 `VID`。
    * - 查询 `ReportVIDs` 表,根据 `RPTID` 获取所有相关的 `VID`。
    * - 返回的结果是一个 `std::vector<int>`,包含所有对应的 `VID`。
    */
    std::vector<int> getVIDsByRPTID(int nRPTID);
    /**
     * 查询所有 Report 表中的 RPTID
     * @return std::vector<int>: 存储所有的 RPTID。
     *
     * 此函数用于查询 `Report` 表中的所有 `RPTID`。
     * - 查询 `Report` 表中的所有 `RPTID`。
     * - 返回的结果是一个 `std::vector<int>`,包含所有的 `RPTID`。
     */
    std::vector<int> getAllRPTIDs();
private:
    SECSRuntimeManager();
@@ -315,6 +544,15 @@
   // 判断名称是否重复
    bool isNameDuplicate(const std::string& sName);
   // 删除指定表中的所有数据
    int deleteAllDataFromTable(const std::string& tableName);
    // 查询指定表所有数据(通用函数)
    bool getAllDataFromTable(const std::string& tableName, std::vector<std::vector<std::string>>& outData);
   // 删除指定表中指定 ID 的数据
    int deleteDataByID(const std::string& tableName, int nID);
    BL::Database* m_pDB;
    static std::mutex m_mutex;
};