From 18108a94f48b2cd6f9fce59aa5ed1d1ccc3f27b2 Mon Sep 17 00:00:00 2001
From: mrDarker <mr.darker@163.com>
Date: 星期三, 18 六月 2025 17:34:44 +0800
Subject: [PATCH] 1. 系统日志修复关闭连接 2. 删除之前模仿台达的数据库管理类 3. 重做配方主界面 4. 配方管理类添加更新PPID和描述的函数

---
 SourceCode/Bond/Servo/RecipeManager.cpp |   44 +++++++++++++++++++++++++++++++++++++++++++-
 1 files changed, 43 insertions(+), 1 deletions(-)

diff --git a/SourceCode/Bond/Servo/RecipeManager.cpp b/SourceCode/Bond/Servo/RecipeManager.cpp
index 247cd40..6e58418 100644
--- a/SourceCode/Bond/Servo/RecipeManager.cpp
+++ b/SourceCode/Bond/Servo/RecipeManager.cpp
@@ -56,7 +56,7 @@
             device_id INTEGER NOT NULL,
             device_name TEXT NOT NULL,
             recipe_id INTEGER NOT NULL,
-            FOREIGN KEY(ppid) REFERENCES recipes(ppid) ON DELETE CASCADE,
+            FOREIGN KEY(ppid) REFERENCES recipes(ppid) ON DELETE CASCADE ON UPDATE CASCADE,
             UNIQUE (ppid, device_id),
             UNIQUE (ppid, device_name)
         );
@@ -331,6 +331,48 @@
     return addRecipe(recipe);
 }
 
+bool RecipeManager::updatePPID(const std::string& oldPPID, const std::string& newPPID) {
+    if (!m_pDB || oldPPID.empty() || newPPID.empty()) {
+        std::cerr << "[updatePPID] Invalid input." << std::endl;
+        return false;
+    }
+
+    std::lock_guard<std::recursive_mutex> lock(m_mutex);
+
+    // 检查是否已经存在相同的 newPPID
+    auto check = m_pDB->fetchResults("SELECT COUNT(*) FROM recipes WHERE ppid = '" + newPPID + "';");
+    if (!check.empty() && !check[0].empty() && check[0][0] != "0") {
+        std::cerr << "[updatePPID] New PPID already exists: " << newPPID << std::endl;
+        return false;
+    }
+
+    m_pDB->executeQuery("BEGIN TRANSACTION;");
+
+    std::ostringstream sql;
+    sql << "UPDATE recipes SET ppid = '" << newPPID << "' WHERE ppid = '" << oldPPID << "';";
+    if (!m_pDB->executeQuery(sql.str())) {
+        std::cerr << "[updatePPID] Failed to update recipes table." << std::endl;
+        m_pDB->executeQuery("ROLLBACK;");
+        return false;
+    }
+
+    m_pDB->executeQuery("COMMIT;");
+    return true;
+}
+
+bool RecipeManager::updateDescription(const std::string& ppid, const std::string& newDescription) {
+    if (!m_pDB || ppid.empty()) {
+        std::cerr << "[updateRecipeDescription] Invalid input." << std::endl;
+        return false;
+    }
+
+    std::ostringstream oss;
+    oss << "UPDATE recipes SET description = '" << newDescription << "' WHERE ppid = '" << ppid << "';";
+
+    std::lock_guard<std::recursive_mutex> lock(m_mutex);
+    return m_pDB->executeQuery(oss.str());
+}
+
 bool RecipeManager::updateDeviceRecipeIDByID(const std::string& ppid, int nDeviceID, int nNewRecipeID) {
 	if (!m_pDB || ppid.empty() || nDeviceID <= 0 || nNewRecipeID <= 0) {
 		return false;

--
Gitblit v1.9.3