From bfe14e41fa5b07771d78af4511ba18d706bc23cc Mon Sep 17 00:00:00 2001
From: LAPTOP-SNT8I5JK\Boounion <Chenluhua@qq.com>
Date: 星期一, 28 七月 2025 17:07:52 +0800
Subject: [PATCH] 1.Spooling Config功能EAP模拟测试;
---
SourceCode/Bond/Servo/SECSRuntimeManager.cpp | 112 ++++++++++++++++++++++++++++++++++++++++++++++++++++++-
1 files changed, 109 insertions(+), 3 deletions(-)
diff --git a/SourceCode/Bond/Servo/SECSRuntimeManager.cpp b/SourceCode/Bond/Servo/SECSRuntimeManager.cpp
index 3f8d08a..ccbcf77 100644
--- a/SourceCode/Bond/Servo/SECSRuntimeManager.cpp
+++ b/SourceCode/Bond/Servo/SECSRuntimeManager.cpp
@@ -1401,8 +1401,8 @@
// 创建 EqpPPID 表
std::string createTableSQL =
"CREATE TABLE IF NOT EXISTS EqpPPID ("
- "BitNo INTEGER PRIMARY KEY AUTOINCREMENT, "
- "PPID INTEGER NULL);";
+ "RecipeNo INTEGER PRIMARY KEY, "
+ "PPID TEXT NULL);";
if (!m_pDB->executeQuery(createTableSQL)) {
throw std::runtime_error("Failed to create EqpPPID table.");
}
@@ -1412,7 +1412,7 @@
if (nCount == 0) {
// 插入初始数据(512 行)
for (int nBitNo = 0; nBitNo < 512; ++nBitNo) {
- std::string insertSQL = "INSERT INTO EqpPPID (BitNo) VALUES (" + std::to_string(nBitNo) + ");";
+ std::string insertSQL = "INSERT INTO EqpPPID (RecipeNo) VALUES (" + std::to_string(nBitNo) + ");";
if (!m_pDB->executeQuery(insertSQL)) {
throw std::runtime_error("Failed to insert data into EqpPPID table.");
}
@@ -1420,6 +1420,112 @@
}
}
+std::vector<std::string> SECSRuntimeManager::getAllPPID() {
+ std::lock_guard<std::mutex> lock(m_mutex);
+ if (m_pDB == nullptr) {
+ return {};
+ }
+
+ std::string querySQL = "SELECT PPID FROM EqpPPID;";
+ auto rows = m_pDB->fetchResults(querySQL);
+
+ std::vector<std::string> vecResult;
+ for (const auto& row : rows) {
+ vecResult.push_back(row[0]);
+ }
+ return vecResult;
+}
+
+void SECSRuntimeManager::setAllPPID(const std::vector<std::string>& vecPPIDList) {
+ std::lock_guard<std::mutex> lock(m_mutex);
+ if (m_pDB == nullptr) return;
+
+ // 开启事务
+ m_pDB->executeQuery("BEGIN TRANSACTION;");
+
+ for (size_t i = 0; i < vecPPIDList.size(); ++i) {
+ std::string safePPID = vecPPIDList[i];
+ size_t pos = 0;
+ while ((pos = safePPID.find('\'', pos)) != std::string::npos) {
+ safePPID.insert(pos, 1, '\'');
+ pos += 2;
+ }
+ std::string sql = "UPDATE EqpPPID SET PPID = '" + safePPID + "' WHERE RecipeNo = " + std::to_string(i) + ";";
+ m_pDB->executeQuery(sql);
+ }
+
+ // 提交事务
+ m_pDB->executeQuery("COMMIT;");
+}
+
+bool SECSRuntimeManager::updatePPIDForRecipe(int nRecipeNo, const std::string& strPPID) {
+ std::lock_guard<std::mutex> lock(m_mutex);
+ if (m_pDB == nullptr) {
+ return false;
+ }
+
+ // 转义单引号,防止 SQL 注入
+ std::string safePPID = strPPID;
+ size_t pos = 0;
+ while ((pos = safePPID.find('\'', pos)) != std::string::npos) {
+ safePPID.insert(pos, 1, '\'');
+ pos += 2;
+ }
+
+ std::string updateSQL = "UPDATE EqpPPID SET PPID = '" + safePPID + "' WHERE RecipeNo = " + std::to_string(nRecipeNo) + ";";
+ return m_pDB->executeQuery(updateSQL);
+}
+
+std::string SECSRuntimeManager::getPPIDForRecipe(int nRecipeNo) {
+ std::lock_guard<std::mutex> lock(m_mutex);
+ if (m_pDB == nullptr) {
+ return "";
+ }
+
+ std::string querySQL = "SELECT PPID FROM EqpPPID WHERE RecipeNo = " + std::to_string(nRecipeNo) + ";";
+ std::vector<std::vector<std::string>> results = m_pDB->fetchResults(querySQL);
+ if (!results.empty() && !results[0].empty()) {
+ return results[0][0];
+ }
+
+ return "";
+}
+
+int SECSRuntimeManager::getRecipeForPPID(std::string strPPID) {
+ std::lock_guard<std::mutex> lock(m_mutex);
+ if (m_pDB == nullptr) {
+ return -1;
+ }
+
+ std::string querySQL = "SELECT RecipeNo FROM EqpPPID WHERE PPID = '" + strPPID + "';";
+ std::vector<std::vector<std::string>> results = m_pDB->fetchResults(querySQL);
+ if (!results.empty() && !results[0].empty()) {
+ return std::stoi(results[0][0]);
+ }
+
+ return -1;
+}
+
+bool SECSRuntimeManager::deletePPIDForRecipe(int nRecipeNo) {
+ std::lock_guard<std::mutex> lock(m_mutex);
+ if (m_pDB == nullptr) {
+ return false;
+ }
+
+ std::string deleteSQL = "UPDATE EqpPPID SET PPID = NULL WHERE RecipeNo = " + std::to_string(nRecipeNo) + ";";
+ return m_pDB->executeQuery(deleteSQL);
+}
+
+bool SECSRuntimeManager::deletePPIDForAllRecipes() {
+ std::lock_guard<std::mutex> lock(m_mutex);
+ if (m_pDB == nullptr) {
+ return false;
+ }
+
+ std::string deleteSQL = "UPDATE EqpPPID SET PPID = NULL WHERE RecipeNo BETWEEN 0 AND 511;";
+ return m_pDB->executeQuery(deleteSQL);
+}
+
// 初始化 RPTID 表
void SECSRuntimeManager::initRPTIDTable() {
std::lock_guard<std::mutex> lock(m_mutex);
--
Gitblit v1.9.3