| | |
| | | // 创建 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."); |
| | | } |
| | |
| | | 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."); |
| | | } |
| | |
| | | } |
| | | } |
| | | |
| | | 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); |