From 500103089e58ced03f4cecc22b0f362dbb8eae04 Mon Sep 17 00:00:00 2001
From: darker <mr.darker@163.com>
Date: 星期二, 18 二月 2025 08:37:28 +0800
Subject: [PATCH] 1. 添加查询SV表,自定义SV表增删改

---
 SourceCode/Bond/Servo/SECSRuntimeManager.cpp |  168 +++++++++++++++++++++++++++++++++
 SourceCode/Bond/Servo/SECSRuntimeManager.h   |  121 ++++++++++++++++++++++--
 2 files changed, 279 insertions(+), 10 deletions(-)

diff --git a/SourceCode/Bond/Servo/SECSRuntimeManager.cpp b/SourceCode/Bond/Servo/SECSRuntimeManager.cpp
index be02efa..bb382a2 100644
--- a/SourceCode/Bond/Servo/SECSRuntimeManager.cpp
+++ b/SourceCode/Bond/Servo/SECSRuntimeManager.cpp
@@ -249,6 +249,28 @@
     return 0;
 }
 
+// 获取指定 ID 的 SystemSV 数据
+std::vector<std::vector<std::string>> SECSRuntimeManager::getSystemSVByID(int nID) {
+    std::lock_guard<std::mutex> lock(m_mutex);
+    if (m_pDB == nullptr) {
+        return {};
+    }
+
+    std::string query = "SELECT * FROM SystemSV WHERE ID = " + std::to_string(nID) + ";";
+    return m_pDB->fetchResults(query);
+}
+
+// 获取所有 SystemSV 数据
+std::vector<std::vector<std::string>> SECSRuntimeManager::getAllSystemSV() {
+    std::lock_guard<std::mutex> lock(m_mutex);
+    if (m_pDB == nullptr) {
+        return {};
+    }
+
+    std::string query = "SELECT * FROM SystemSV;";
+    return m_pDB->fetchResults(query);
+}
+
 // 更新指定 ID 的 SystemSV 数据
 int SECSRuntimeManager::updateIDSystemSV(int nID, int sNewID) {
     std::lock_guard<std::mutex> lock(m_mutex);
@@ -468,6 +490,152 @@
     return 0; // 插入成功,返回 0 表示操作成功完成。
 }
 
+// 查找指定 ID 的 EqpSV 数据
+std::vector<std::vector<std::string>> SECSRuntimeManager::getEqpSVByID(int nID) {
+    std::lock_guard<std::mutex> lock(m_mutex);
+    if (m_pDB == nullptr) {
+        return {};
+    }
+
+    // 查询 SQL 语句
+    std::string querySQL = "SELECT * FROM EqpSV WHERE ID = " + std::to_string(nID) + ";";
+    return m_pDB->fetchResults(querySQL); // 直接返回查询结果
+}
+
+// 查找所有 EqpSV 数据
+std::vector<std::vector<std::string>> SECSRuntimeManager::getAllEqpSV() {
+    std::lock_guard<std::mutex> lock(m_mutex);
+    if (m_pDB == nullptr) {
+        return {};
+    }
+
+    // 查询 SQL 语句,获取所有数据
+    std::string querySQL = "SELECT * FROM EqpSV;";
+    return m_pDB->fetchResults(querySQL); // 直接返回查询结果
+}
+
+// 更新指定 ID 的 EqpSV 数据
+int SECSRuntimeManager::updateEqpSV(int nID, int nNewID, const std::string& sName, const std::string& sDataType, int nLength, const std::string& sUnit, const std::string& sRemark, int nSeqNo) {
+    std::lock_guard<std::mutex> lock(m_mutex);
+    if (m_pDB == nullptr) {
+        return 1; // 如果数据库未连接,返回 1
+    }
+
+    // 检查是否存在该 ID
+    if (!isIDDuplicate(nID)) {
+        return 2; // 如果 ID 不存在,返回错误代码 2
+    }
+
+    // 检查新的 ID 是否已存在
+    if (isIDDuplicate(nNewID) && nNewID != nID) {
+        return 3; // 如果新 ID 已存在,返回错误代码 3
+    }
+
+    // 构建更新 SQL 语句
+    std::string updateSQL = "UPDATE EqpSV SET ";
+
+    bool firstField = true;
+
+    // 如果新的 ID 被提供,更新 ID
+    if (nNewID > 0 && nNewID != nID) {
+        updateSQL += "ID = " + std::to_string(nNewID);
+        firstField = false;
+    }
+
+    // 更新 Name
+    if (!sName.empty()) {
+        if (!firstField) updateSQL += ", ";
+        updateSQL += "Name = '" + sName + "'";
+        firstField = false;
+    }
+
+    // 更新 DataType
+    if (!sDataType.empty()) {
+        if (!firstField) updateSQL += ", ";
+        updateSQL += "DataType = '" + sDataType + "'";
+        firstField = false;
+    }
+
+    // 更新 Length
+    if (nLength > 0) {
+        if (!firstField) updateSQL += ", ";
+        updateSQL += "Length = " + std::to_string(nLength);
+        firstField = false;
+    }
+
+    // 更新 Unit
+    if (sUnit != "NULL" && !sUnit.empty()) {
+        if (!firstField) updateSQL += ", ";
+        updateSQL += "Unit = '" + sUnit + "'";
+        firstField = false;
+    }
+    else if (sUnit == "NULL") {
+        if (!firstField) updateSQL += ", ";
+        updateSQL += "Unit = NULL";
+        firstField = false;
+    }
+
+    // 更新 Remark
+    if (!sRemark.empty()) {
+        if (!firstField) updateSQL += ", ";
+        updateSQL += "Remark = '" + sRemark + "'";
+        firstField = false;
+    }
+
+    // 更新 SeqNo
+    if (nSeqNo > 0) {
+        if (!firstField) updateSQL += ", ";
+        updateSQL += "SeqNo = " + std::to_string(nSeqNo);
+    }
+
+    // 添加 WHERE 子句,更新指定 ID 的数据
+    updateSQL += " WHERE ID = " + std::to_string(nID) + ";";
+
+    // 执行更新操作
+    if (!m_pDB->executeQuery(updateSQL)) {
+        return 4; // 如果更新失败,返回错误代码 4
+    }
+
+    return 0; // 更新成功,返回 0
+}
+
+// 删除指定 ID 的 EqpSV 数据
+int SECSRuntimeManager::deleteEqpSVByID(int nID) {
+    std::lock_guard<std::mutex> lock(m_mutex);
+    if (m_pDB == nullptr) {
+        return 1;
+    }
+
+    // 检查是否存在该 ID
+    if (!isIDDuplicate(nID)) {
+        return 2; // 如果 ID 不存在,返回错误代码 2
+    }
+
+    // 构建删除 SQL 语句
+    std::string deleteSQL = "DELETE FROM EqpSV WHERE ID = " + std::to_string(nID) + ";";
+    if (!m_pDB->executeQuery(deleteSQL)) {
+        return 3; // 如果删除失败,返回错误代码 3
+    }
+
+    return 0; // 删除成功,返回 0
+}
+
+// 删除 EqpSV 表中的所有数据
+int SECSRuntimeManager::deleteAllEqpSV() {
+    std::lock_guard<std::mutex> lock(m_mutex);
+    if (m_pDB == nullptr) {
+        return 1;
+    }
+
+    // 构建删除所有数据的 SQL 语句
+    std::string deleteSQL = "DELETE FROM EqpSV;";
+    if (!m_pDB->executeQuery(deleteSQL)) {
+        return 2; // 如果删除失败,返回错误代码 2
+    }
+
+    return 0; // 删除成功,返回 0
+}
+
 // 初始化 SystemDV 表
 void SECSRuntimeManager::initSystemDVTable() {
     std::lock_guard<std::mutex> lock(m_mutex);
diff --git a/SourceCode/Bond/Servo/SECSRuntimeManager.h b/SourceCode/Bond/Servo/SECSRuntimeManager.h
index 8493481..8c11a96 100644
--- a/SourceCode/Bond/Servo/SECSRuntimeManager.h
+++ b/SourceCode/Bond/Servo/SECSRuntimeManager.h
@@ -59,6 +59,29 @@
     int addSystemSV(int nID, const std::string& sName, const std::string& sDataType, int nLength, const std::string& sUnit, const std::string& sRemark, int nSystemID);
 
     /**
+     * 鑾峰彇鎸囧畾 ID 鐨� SystemSV 鏁版嵁
+     * @param nID: 闇�瑕佹煡鎵剧殑 SystemSV 鐨� ID銆�
+     * @return std::vector<std::vector<std::string>>: 杩斿洖涓�涓簩缁村瓧绗︿覆鍚戦噺锛岃〃绀烘煡璇㈢粨鏋溿�傛瘡琛屼唬琛ㄤ竴鏉¤褰曪紝姣忓垪浠h〃璇ヨ褰曠殑涓�涓瓧娈靛�笺��
+     *          濡傛灉鎸囧畾鐨� ID 瀛樺湪锛屽垯杩斿洖璇� ID 瀵瑰簲鐨勮褰曪紱濡傛灉涓嶅瓨鍦紝鍒欒繑鍥炵┖鐨勪簩缁村悜閲忋��
+     *
+     * 姝ゅ嚱鏁扮敤浜庨�氳繃鎸囧畾鐨� `ID` 浠� SystemSV 琛ㄤ腑鏌ユ壘瀵瑰簲鐨勬暟鎹�傞鍏堟牴鎹紶鍏ョ殑 `ID` 鏋勯�犳煡璇� SQL 璇彞锛�
+     * 鐒跺悗鎵ц鏌ヨ鎿嶄綔锛岃繑鍥炴煡璇㈢粨鏋溿�傛煡璇㈢粨鏋滄槸涓�涓簩缁村瓧绗︿覆鍚戦噺锛岃〃绀烘煡璇㈠埌鐨勮褰曘�傛瘡琛屾槸涓�涓�
+     * 瀛楃涓插悜閲忥紝姣忎釜鍏冪礌鏄琛屼腑鐨勪竴鍒楁暟鎹�傚鏋滄壘涓嶅埌瀵瑰簲鐨勬暟鎹紝鍑芥暟灏嗚繑鍥炰竴涓┖鐨勪簩缁村悜閲忋��
+     */
+    std::vector<std::vector<std::string>> getSystemSVByID(int nID);
+
+    /**
+    * 鑾峰彇鎵�鏈� SystemSV 鏁版嵁
+    * @return std::vector<std::vector<std::string>>: 杩斿洖涓�涓簩缁村瓧绗︿覆鍚戦噺锛岃〃绀烘煡璇㈢粨鏋溿�傛瘡琛屼唬琛ㄤ竴鏉¤褰曪紝姣忓垪浠h〃璇ヨ褰曠殑涓�涓瓧娈靛�笺��
+    *          濡傛灉琛ㄤ腑鏈夋暟鎹紝鍒欒繑鍥炴墍鏈夎褰曪紱濡傛灉琛ㄤ负绌猴紝鍒欒繑鍥炵┖鐨勪簩缁村悜閲忋��
+    *
+    * 姝ゅ嚱鏁扮敤浜庝粠 SystemSV 琛ㄤ腑鑾峰彇鎵�鏈夌殑鏁版嵁銆傞�氳繃鏋勯�� SQL 鏌ヨ璇彞鏉ラ�夋嫨鎵�鏈夎褰曪紝骞舵墽琛屾煡璇㈡搷浣溿��
+    * 杩斿洖鐨勭粨鏋滄槸涓�涓簩缁村瓧绗︿覆鍚戦噺锛岃〃绀鸿〃涓殑鎵�鏈夎褰曘�傛瘡琛屾暟鎹槸涓�涓瓧绗︿覆鍚戦噺锛屽叾涓寘鍚璁板綍鐨勫悇涓瓧娈点��
+    * 濡傛灉琛ㄤ腑娌℃湁鏁版嵁锛屽嚱鏁板皢杩斿洖涓�涓┖鐨勪簩缁村悜閲忋��
+    */
+    std::vector<std::vector<std::string>> getAllSystemSV();
+
+    /**
      * 鏇存柊鎸囧畾 ID 鐨� SystemSV 鏁版嵁
      * @param nID: 闇�瑕佹洿鏂扮殑 SystemSV 鐨勫綋鍓� ID銆�
      * @param sNewID: 瑕佹洿鏂颁负鐨勬柊 ID銆�
@@ -126,7 +149,7 @@
     int deleteAllSystemSV();
 
 	/**
-    * 鍒濆鍖朎qp琛�
+    * 鍒濆鍖� EqpSV 琛�
     */
     void initEqpSVTable();
 
@@ -152,48 +175,126 @@
 	 */
     int addEqpSV(int nID, const std::string& sName, const std::string& sDataType, int nLength, const std::string& sUnit, const std::string& sRemark, int nSeqNo);
 
+
+    /**
+    * 鑾峰彇鎸囧畾 ID 鐨� EqpSV 鏁版嵁
+    * @param nID: 闇�瑕佹煡鎵剧殑 EqpSV 鐨� ID銆�
+    * @return std::vector<std::vector<std::string>>: 杩斿洖涓�涓簩缁村瓧绗︿覆鍚戦噺锛岃〃绀烘煡璇㈢粨鏋溿�傛瘡琛屼唬琛ㄤ竴鏉¤褰曪紝姣忓垪浠h〃璇ヨ褰曠殑涓�涓瓧娈靛�笺��
+    *          濡傛灉鎸囧畾鐨� ID 瀛樺湪锛屽垯杩斿洖璇� ID 瀵瑰簲鐨勮褰曪紱濡傛灉涓嶅瓨鍦紝鍒欒繑鍥炵┖鐨勪簩缁村悜閲忋��
+    *
+    * 姝ゅ嚱鏁扮敤浜庨�氳繃鎸囧畾鐨� `ID` 浠� EqpSV 琛ㄤ腑鏌ユ壘瀵瑰簲鐨勬暟鎹�傞鍏堟牴鎹紶鍏ョ殑 `ID` 鏋勯�犳煡璇� SQL 璇彞锛�
+    * 鐒跺悗鎵ц鏌ヨ鎿嶄綔锛岃繑鍥炴煡璇㈢粨鏋溿�傛煡璇㈢粨鏋滄槸涓�涓簩缁村瓧绗︿覆鍚戦噺锛岃〃绀烘煡璇㈠埌鐨勮褰曘�傛瘡琛屾槸涓�涓�
+    * 瀛楃涓插悜閲忥紝姣忎釜鍏冪礌鏄琛屼腑鐨勪竴鍒楁暟鎹�傚鏋滄壘涓嶅埌瀵瑰簲鐨勬暟鎹紝鍑芥暟灏嗚繑鍥炰竴涓┖鐨勪簩缁村悜閲忋��
+    */
+    std::vector<std::vector<std::string>> SECSRuntimeManager::getEqpSVByID(int nID);
+
+    /**
+    * 鑾峰彇鎵�鏈� EqpSV 鏁版嵁
+    * @return std::vector<std::vector<std::string>>: 杩斿洖涓�涓簩缁村瓧绗︿覆鍚戦噺锛岃〃绀烘煡璇㈢粨鏋溿�傛瘡琛屼唬琛ㄤ竴鏉¤褰曪紝姣忓垪浠h〃璇ヨ褰曠殑涓�涓瓧娈靛�笺��
+    *          濡傛灉琛ㄤ腑鏈夋暟鎹紝鍒欒繑鍥炴墍鏈夎褰曪紱濡傛灉琛ㄤ负绌猴紝鍒欒繑鍥炵┖鐨勪簩缁村悜閲忋��
+    *
+    * 姝ゅ嚱鏁扮敤浜庝粠 EqpSV 琛ㄤ腑鑾峰彇鎵�鏈夌殑鏁版嵁銆傞�氳繃鏋勯�� SQL 鏌ヨ璇彞鏉ラ�夋嫨鎵�鏈夎褰曪紝骞舵墽琛屾煡璇㈡搷浣溿��
+    * 杩斿洖鐨勭粨鏋滄槸涓�涓簩缁村瓧绗︿覆鍚戦噺锛岃〃绀鸿〃涓殑鎵�鏈夎褰曘�傛瘡琛屾暟鎹槸涓�涓瓧绗︿覆鍚戦噺锛屽叾涓寘鍚璁板綍鐨勫悇涓瓧娈点��
+    * 濡傛灉琛ㄤ腑娌℃湁鏁版嵁锛屽嚱鏁板皢杩斿洖涓�涓┖鐨勪簩缁村悜閲忋��
+    */
+    std::vector<std::vector<std::string>> SECSRuntimeManager::getAllEqpSV();
+
+    /**
+     * 鏇存柊鎸囧畾 ID 鐨� EqpSV 鏁版嵁
+     * @param nID: 闇�瑕佹洿鏂扮殑 EqpSV 鐨� ID锛屽繀椤绘槸宸插瓨鍦ㄧ殑 ID銆�
+     * @param nNewID: 鏇存柊鍚庣殑 ID锛屽繀椤绘槸鍞竴鐨勩��
+     * @param sName: 鏇存柊鍚庣殑 EqpSV 鍚嶇О锛屽繀椤绘槸鍞竴鐨勩��
+     * @param sDataType: 鏇存柊鍚庣殑鏁版嵁绫诲瀷锛岃〃绀鸿璁惧鍊肩殑绫诲瀷锛屼緥濡� "ASCII"銆�"UINT_1" 绛夈��
+     * @param nLength: 鏇存柊鍚庣殑璁惧鍊肩殑鏁版嵁闀垮害锛岄�氬父涓轰竴涓鏁存暟锛岀敤浜庤〃绀鸿鏁版嵁鐨勯暱搴︺��
+     * @param sUnit: 鏇存柊鍚庣殑璁惧鍊肩殑鍗曚綅銆傚鏋滀负绌烘垨鑰呬负 "NULL"锛屽垯鎻掑叆鏁版嵁搴撲腑鐨� NULL 鍊笺��
+     * @param sRemark: 鏇存柊鍚庣殑澶囨敞淇℃伅锛屾弿杩拌璁惧鍊肩殑鍏朵粬淇℃伅锛屽彲鐢ㄤ簬璇存槑璇ュ瓧娈电殑鐢ㄩ�旀垨鐗规�с��
+     * @param nSeqNo: 鏇存柊鍚庣殑璇ユ暟鎹殑搴忓彿锛岀敤浜庢帓搴忋��
+     * @return 1: 鏁版嵁搴撴湭杩炴帴銆�
+     * @return 2: ID 涓嶅瓨鍦紝鏃犳硶鏇存柊鏁版嵁銆�
+     * @return 3: 鏂� ID 閲嶅锛屾棤娉曟洿鏂版暟鎹��
+     * @return 4: 鏇存柊鏁版嵁澶辫触銆�
+     * @return 0: 鏇存柊鎴愬姛锛屾暟鎹凡鏇存柊鍒� EqpSV 琛ㄤ腑銆�
+     *
+     * 姝ゅ嚱鏁扮敤浜庢洿鏂版寚瀹� ID 鐨� EqpSV 鏁版嵁銆傞鍏堟鏌� `ID` 鏄惁瀛樺湪锛屽鏋滀笉瀛樺湪鍒欒繑鍥為敊璇唬鐮� 2銆�
+     * 鐒跺悗妫�鏌ユ柊鐨� `ID` 鏄惁宸插瓨鍦紝濡傛灉宸插瓨鍦ㄥ垯杩斿洖閿欒浠g爜 3銆傛帴涓嬫潵锛屾瀯閫犳洿鏂� SQL 璇彞锛屽寘鍚�
+     * 闇�瑕佹洿鏂扮殑瀛楁锛屽苟鎵ц鏇存柊鎿嶄綔銆傚鏋滄洿鏂板け璐ワ紝鍒欒繑鍥為敊璇唬鐮� 4銆傚鏋滀竴鍒囬『鍒╋紝杩斿洖 0 琛ㄧず
+     * 鏁版嵁鎴愬姛鏇存柊銆�
+     */
+    int updateEqpSV(int nID, int nNewID, const std::string& sName, const std::string& sDataType, int nLength, const std::string& sUnit, const std::string& sRemark, int nSeqNo);
+
 	/**
-	* 鍒濆鍖朣ystemDV琛�
+	 * 鏇存柊鎸囧畾 ID 鐨� EqpSV 鏁版嵁
+	 * @param nID: 闇�瑕佹洿鏂扮殑 EqpSV 鐨勫綋鍓� ID銆�
+	 * @param sNewID: 瑕佹洿鏂颁负鐨勬柊 ID銆�
+	 * @return 1: 鏁版嵁搴撴湭杩炴帴銆�
+	 * @return 2: 鏈壘鍒版寚瀹氱殑 ID銆�
+	 * @return 3: 鏂扮殑 ID 宸茬粡瀛樺湪锛屾棤娉曟洿鏂般��
+	 * @return 4: 鏇存柊鎿嶄綔澶辫触銆�
+	 * @return 0: 鏇存柊鎴愬姛銆�
+	 *
+	 * 姝ゅ嚱鏁扮敤浜庢洿鏂� `EqpSV` 琛ㄤ腑鎸囧畾 `nID` 鐨勮褰曪紝灏嗗叾 `ID` 瀛楁鏇存柊涓� `sNewID`銆�
+	 * 鍦ㄦ墽琛屾洿鏂板墠锛屽嚱鏁颁細妫�鏌ワ細
+	 * 1. 褰撳墠鐨� `nID` 鏄惁瀛樺湪浜庤〃涓��
+	 * 2. 鏂扮殑 `sNewID` 鏄惁宸茬粡瀛樺湪浜庤〃涓紝濡傛灉瀛樺湪锛屽垯鏃犳硶杩涜鏇存柊銆�
+	 *
+	 * 濡傛灉 `nID` 涓嶅瓨鍦紝鍒欒繑鍥為敊璇唬鐮� 2銆傚鏋� `sNewID` 宸茬粡瀛樺湪锛屽垯杩斿洖閿欒浠g爜 3銆�
+	 * 濡傛灉鏁版嵁搴撴洿鏂板け璐ワ紝鍒欒繑鍥為敊璇唬鐮� 4銆傛垚鍔熸椂锛岃繑鍥� 0 琛ㄧず鎿嶄綔鎴愬姛銆�
+	 */
+    int deleteEqpSVByID(int nID);
+
+	/**
+    * 鍒犻櫎鎵�鏈� EqpSV 鏁版嵁
+    * @return 1: 鏁版嵁搴撴湭杩炴帴銆�
+    * @return 2: 鍒犻櫎鎿嶄綔澶辫触銆�
+    * @return 0: 鍒犻櫎鎴愬姛銆�
+    *
+    * 姝ゅ嚱鏁扮敤浜庡垹闄� `EqpSV` 琛ㄤ腑鐨勬墍鏈夎褰曘�傚鏋滄暟鎹簱鏈繛鎺ワ紝鍒欒繑鍥為敊璇唬鐮� 1銆�
+    * 濡傛灉鍒犻櫎鎿嶄綔澶辫触锛屽垯杩斿洖閿欒浠g爜 2銆傚垹闄ゆ垚鍔熷悗锛岃繑鍥� 0 琛ㄧず鍒犻櫎鎴愬姛銆�
+    */ 
+    int deleteAllEqpSV();
+
+	/**
+	* 鍒濆鍖� SystemDV 琛�
     */ 
     void initSystemDVTable();
 
 	/**
-	* 鍒濆鍖朎qpDV琛�
+	* 鍒濆鍖� EqpDV 琛�
     */ 
     void initEqpDVTable();
 
 	/**
-	* 鍒濆鍖朣ystemEC琛�
+	* 鍒濆鍖� SystemEC 琛�
     */ 
     void initSystemECTable();
 
     /**
-    * 鍒濆鍖朎qpEC琛�
+    * 鍒濆鍖� EqpEC 琛�
     */
     void initEqpECTable();
 
     /**
-    * 鍒濆鍖朣ystemEvent琛�
+    * 鍒濆鍖� SystemEvent 琛�
     */
     void initSystemEventTable();
 
     /**
-    * 鍒濆鍖朎qpEvent琛�
+    * 鍒濆鍖� EqpEvent 琛�
     */
     void initEqpEventTable();
 
     /**
-    * 鍒濆鍖朎ventLink琛�
+    * 鍒濆鍖� EventLink 琛�
     */
     void initEventLinkTable();
 
 	/**
-	 * 鍒濆鍖朠PID琛�
+	 * 鍒濆鍖� PPID 琛�
 	 */
     void initPPIDTable();
 
 	/**
-	* 鍒濆鍖朢PTID琛�
+	* 鍒濆鍖� RPTID 琛�
     */ 
     void initRPTIDTable();
 

--
Gitblit v1.9.3