| ¶Ô±ÈÐÂÎļþ |
| | |
| | | #include "stdafx.h" |
| | | #include "SECSRuntimeManager.h" |
| | | |
| | | // 常é |
| | | const std::string DATABASE_FILE = R"(SECSDataManager.db)"; |
| | | |
| | | // éææååå§å |
| | | std::mutex SECSRuntimeManager::m_mutex; |
| | | |
| | | // è·ååä¾å®ä¾ |
| | | SECSRuntimeManager& SECSRuntimeManager::getInstance() { |
| | | static SECSRuntimeManager instance; |
| | | return instance; |
| | | } |
| | | |
| | | // æé 彿° |
| | | SECSRuntimeManager::SECSRuntimeManager() { |
| | | m_pDB = new BL::SQLiteDatabase(); |
| | | } |
| | | |
| | | // ææå½æ° |
| | | SECSRuntimeManager::~SECSRuntimeManager() { |
| | | termRuntimeSetting(); |
| | | |
| | | if (m_pDB != nullptr) { |
| | | delete m_pDB; |
| | | m_pDB = nullptr; |
| | | } |
| | | } |
| | | |
| | | // 仿°æ®åºä¸è·åæ´æ° |
| | | int SECSRuntimeManager::getIntFromDB(const std::string& query) { |
| | | auto results = m_pDB->fetchResults(query); |
| | | if (!results.empty() && !results[0].empty()) { |
| | | // 转æ¢ç¬¬ä¸ä¸ªæ¥è¯¢ç»æä¸ºæ´æ° |
| | | return std::stoi(results[0][0]); |
| | | } |
| | | |
| | | return 0; |
| | | } |
| | | |
| | | // 夿VIDæ¯å¦éå¤ |
| | | bool SECSRuntimeManager::isIDDuplicate(int nID) { |
| | | std::lock_guard<std::mutex> lock(m_mutex); |
| | | if (m_pDB == nullptr) { |
| | | return false; |
| | | } |
| | | |
| | | // å®ä¹è¦æ£æ¥ç表 |
| | | std::vector<std::string> tables = { "SystemSV", "EqpSV", "SystemDV", "EqpDV", "SystemEC", "EqpEC" }; |
| | | |
| | | // éåè¡¨ï¼æ£æ¥æ¯å¦æéå¤ç ID |
| | | for (const auto& table : tables) { |
| | | // å建 SQL æ¥è¯¢ |
| | | std::string checkSQL = "SELECT COUNT(*) FROM " + table + " WHERE ID = " + std::to_string(nID) + ";"; |
| | | |
| | | // æ§è¡æ¥è¯¢ |
| | | auto results = m_pDB->fetchResults(checkSQL); |
| | | int count = (!results.empty() && !results[0].empty()) ? std::stoi(results[0][0]) : 0; |
| | | |
| | | // 妿æ¾å°äºéå¤ç IDï¼åè¿å true |
| | | if (count > 0) { |
| | | return true; |
| | | } |
| | | } |
| | | |
| | | // å¦ææ²¡æéå¤ï¼è¿å false |
| | | return false; |
| | | } |
| | | |
| | | // 夿åç§°æ¯å¦éå¤ |
| | | bool SECSRuntimeManager::isNameDuplicate(const std::string& sName) { |
| | | std::lock_guard<std::mutex> lock(m_mutex); |
| | | if (m_pDB == nullptr) { |
| | | return false; |
| | | } |
| | | |
| | | // å®ä¹è¦æ£æ¥ç表 |
| | | std::vector<std::string> tables = { "SystemSV", "EqpSV", "SystemDV", "EqpDV", "SystemEC", "EqpEC" }; |
| | | |
| | | // éåè¡¨ï¼æ£æ¥æ¯å¦æéå¤ç Name |
| | | for (const auto& table : tables) { |
| | | // å建 SQL æ¥è¯¢ |
| | | std::string checkSQL = "SELECT COUNT(*) FROM " + table + " WHERE Name = '" + sName + "';"; |
| | | |
| | | // æ§è¡æ¥è¯¢ |
| | | auto results = m_pDB->fetchResults(checkSQL); |
| | | int count = (!results.empty() && !results[0].empty()) ? std::stoi(results[0][0]) : 0; |
| | | |
| | | // 妿æ¾å°äºéå¤ç Nameï¼åè¿å true |
| | | if (count > 0) { |
| | | return true; |
| | | } |
| | | } |
| | | |
| | | // å¦ææ²¡æéå¤ï¼è¿å false |
| | | return false; |
| | | } |
| | | |
| | | // è®¾ç½®æ°æ®åºè¿æ¥ |
| | | void SECSRuntimeManager::setDatabase(BL::Database* db) { |
| | | std::lock_guard<std::mutex> lock(m_mutex); |
| | | m_pDB = db; |
| | | } |
| | | |
| | | // åå§åSECS设置管çåº |
| | | bool SECSRuntimeManager::initRuntimeSetting() { |
| | | char path[MAX_PATH]; |
| | | GetModuleFileName(NULL, path, MAX_PATH); |
| | | std::string exePath(path); |
| | | std::string dbFileDir = exePath.substr(0, exePath.find_last_of("\\/")) + "\\DB"; |
| | | if (!CreateDirectory(dbFileDir.c_str(), NULL) && ERROR_ALREADY_EXISTS != GetLastError()) { |
| | | throw std::runtime_error("Failed to create database directory."); |
| | | } |
| | | |
| | | std::string dbFilePath = dbFileDir + "\\" + DATABASE_FILE; |
| | | if (!m_pDB->connect(dbFilePath, true)) { |
| | | return false; |
| | | } |
| | | |
| | | // åå§å SystemSV 表 |
| | | initSystemSVTable(); |
| | | |
| | | // åå§å EqpSV 表 |
| | | initEqpSVTable(); |
| | | |
| | | // åå§å SystemDV 表 |
| | | initSystemDVTable(); |
| | | |
| | | // åå§å EqpDV 表 |
| | | initEqpDVTable(); |
| | | |
| | | // åå§å SystemEC 表 |
| | | initSystemECTable(); |
| | | |
| | | // åå§å EqpEC 表 |
| | | initEqpECTable(); |
| | | |
| | | // åå§å SystemECID 表 |
| | | initSystemEventTable(); |
| | | |
| | | // åå§å EqpECID 表 |
| | | initEqpEventTable(); |
| | | |
| | | // åå§å SystemEventLink 表 |
| | | initEventLinkTable(); |
| | | |
| | | // åå§å PPID 表 |
| | | initPPIDTable(); |
| | | |
| | | // åå§å RPTID 表 |
| | | initRPTIDTable(); |
| | | |
| | | return true; |
| | | } |
| | | |
| | | // 鿝SECS设置管çåº |
| | | void SECSRuntimeManager::termRuntimeSetting() { |
| | | if (m_pDB != nullptr) { |
| | | m_pDB->disconnect(); |
| | | } |
| | | } |
| | | |
| | | // åå§å SystemSV 表 |
| | | void SECSRuntimeManager::initSystemSVTable() { |
| | | std::lock_guard<std::mutex> lock(m_mutex); |
| | | if (m_pDB == nullptr) { |
| | | throw std::runtime_error("Database not connected."); |
| | | } |
| | | |
| | | // å建 SystemSV 表ï¼å¦æä¸åå¨ï¼ |
| | | std::string createTableSQL = |
| | | "CREATE TABLE IF NOT EXISTS SystemSV (" |
| | | "ID INTEGER PRIMARY KEY, " |
| | | "Name TEXT UNIQUE NOT NULL, " |
| | | "DataType TEXT NOT NULL, " |
| | | "Length INTEGER NULL, " |
| | | "Unit TEXT NULL, " |
| | | "Remark TEXT, " |
| | | "SystemID INTEGER);"; |
| | | |
| | | if (!m_pDB->executeQuery(createTableSQL)) { |
| | | throw std::runtime_error("Failed to create SystemSV table."); |
| | | } |
| | | |
| | | // é¢å®ä¹ç SV æ°æ® |
| | | std::vector<std::tuple<int, std::string, std::string, int, std::string, std::string, int>> svData = { |
| | | {1, "SYS_LICENSE_CODE", "ASCII", 0, "NULL", "License code (Formal; Evaluation; NoLicense)", 1}, |
| | | {2, "SYS_LICENSE_STATUS", "UINT_1", 0, "NULL", "License status(0:Unauthorized; 1:Authorized; 2:Evaluation; 3:Evaluation Expiring; 4:Trial; 5:Trial End)", 2}, |
| | | {3, "GEM_CLOCK", "ASCII", 0, "NULL", "System Clock", 3}, |
| | | {4, "SYS_SECS_COMM_MODE", "UINT_1", 0, "NULL", "SECS Communication Mode(0:HSMS Mode; 1:SECSI Mode)", 4}, |
| | | {5, "SYS_SECS_DRIVER_CONNECT_STATE", "UINT_1", 0, "NULL", "Initial SECS Driver Connect State(0:Stop; 1:Start)", 5} |
| | | }; |
| | | |
| | | for (const auto& entry : svData) { |
| | | int nID, nLength, nSystemID; |
| | | std::string sName, sDataType, sRemark, sUnit; |
| | | std::tie(nID, sName, sDataType, nLength, sUnit, sRemark, nSystemID) = entry; |
| | | |
| | | // æ£æ¥ Name æ¯å¦å·²åå¨ |
| | | int count = getIntFromDB("SELECT COUNT(*) FROM SystemSV WHERE Name = '" + sName + "';"); |
| | | if (count == 0) { |
| | | // æå
¥æ°æ® |
| | | std::string insertSQL = "INSERT INTO SystemSV (ID, Name, DataType, Length, Unit, Remark, SystemID) VALUES (" |
| | | + std::to_string(nID) + ", '" |
| | | + sName + "', '" |
| | | + sDataType + "', " |
| | | + (nLength > 0 ? std::to_string(nLength) : "NULL") + ", " |
| | | + ((sUnit == "NULL") ? "NULL" : "'" + sUnit + "'") + ", '" |
| | | + sRemark + "', " |
| | | + std::to_string(nSystemID) + ");"; |
| | | |
| | | if (!m_pDB->executeQuery(insertSQL)) { |
| | | throw std::runtime_error("Failed to insert SystemSV data."); |
| | | } |
| | | } |
| | | } |
| | | } |
| | | |
| | | // æ·»å SystemSV æ°æ® |
| | | int SECSRuntimeManager::addSystemSV(int nID, const std::string& sName, const std::string& sDataType, int nLength, const std::string& sUnit, const std::string& sRemark, int nSystemID) { |
| | | std::lock_guard<std::mutex> lock(m_mutex); |
| | | if (m_pDB == nullptr) { |
| | | return 1; |
| | | } |
| | | |
| | | if (isIDDuplicate(nID)) { |
| | | return 2; |
| | | } |
| | | |
| | | if (isNameDuplicate(sName)) { |
| | | return 3; |
| | | } |
| | | |
| | | // 妿 Unit æ¯ "NULL" å符串æè
为空ï¼åæå
¥ NULL å¼ |
| | | std::string insertSQL = "INSERT INTO SystemSV (ID, Name, DataType, Length, Unit, Remark, SystemID) VALUES (" |
| | | + std::to_string(nID) + ", '" |
| | | + sName + "', '" |
| | | + sDataType + "', " |
| | | + (nLength > 0 ? std::to_string(nLength) : "NULL") + ", " |
| | | + ((sUnit == "NULL" || sUnit.empty()) ? "NULL" : "'" + sUnit + "'") + ", '" |
| | | + sRemark + "', " |
| | | + std::to_string(nSystemID) + ");"; |
| | | |
| | | if (!m_pDB->executeQuery(insertSQL)) { |
| | | return 4; |
| | | } |
| | | |
| | | return 0; |
| | | } |
| | | |
| | | // æ´æ°æå® ID ç SystemSV æ°æ® |
| | | int SECSRuntimeManager::updateIDSystemSV(int nID, int sNewID) { |
| | | std::lock_guard<std::mutex> lock(m_mutex); |
| | | if (m_pDB == nullptr) { |
| | | return 1; |
| | | } |
| | | |
| | | // æ£æ¥æ¯å¦åå¨è¯¥ ID |
| | | if (!isIDDuplicate(nID)) { |
| | | return 2; |
| | | } |
| | | |
| | | if (isIDDuplicate(sNewID)) { |
| | | return 3; |
| | | } |
| | | |
| | | // æå»ºæ´æ°ç SQL è¯å¥ |
| | | std::string updateSQL = "UPDATE SystemSV SET ID = " + std::to_string(sNewID) + " WHERE ID = " + std::to_string(nID) + ";"; |
| | | if (!m_pDB->executeQuery(updateSQL)) { |
| | | return 4; |
| | | } |
| | | |
| | | return 0; |
| | | } |
| | | |
| | | // æ´æ°ææ SystemSV æ°æ® |
| | | int SECSRuntimeManager::updateAllSystemSV(int nID, int sNewID, const std::string& sName, const std::string& sDataType, int nLength, const std::string& sUnit, const std::string& sRemark, int nSystemID) { |
| | | std::lock_guard<std::mutex> lock(m_mutex); |
| | | if (m_pDB == nullptr) { |
| | | return 1; |
| | | } |
| | | |
| | | // æ£æ¥æ¯å¦åå¨è¯¥ ID |
| | | if (!isIDDuplicate(nID)) { |
| | | return 2; |
| | | } |
| | | |
| | | // æ£æ¥æ°ç ID æ¯å¦å·²åå¨ï¼å¦æå·²åå¨ï¼åè¿åé误代ç 3ã |
| | | if (isIDDuplicate(sNewID)) { |
| | | return 3; |
| | | } |
| | | |
| | | // æå»ºæ´æ°ç SQL è¯å¥ |
| | | std::string updateSQL = "UPDATE SystemSV SET "; |
| | | |
| | | bool firstField = true; |
| | | |
| | | // 妿æ°ç ID 被æä¾ï¼æ´æ° ID |
| | | if (sNewID > 0) { |
| | | if (!firstField) { |
| | | updateSQL += ", "; |
| | | } |
| | | updateSQL += "ID = " + std::to_string(sNewID); |
| | | 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; |
| | | } |
| | | |
| | | // æ´æ° SystemID |
| | | if (nSystemID > 0) { |
| | | if (!firstField) { |
| | | updateSQL += ", "; |
| | | } |
| | | updateSQL += "SystemID = " + std::to_string(nSystemID); |
| | | } |
| | | |
| | | // æ·»å WHERE å奿¥æå®æ´æ°åªä¸ªè®°å½ |
| | | updateSQL += " WHERE ID = " + std::to_string(nID) + ";"; |
| | | |
| | | // æ§è¡æ´æ°æä½ |
| | | if (!m_pDB->executeQuery(updateSQL)) { |
| | | return 4; |
| | | } |
| | | |
| | | return 0; |
| | | } |
| | | |
| | | // å é¤æå® ID ç SystemSV æ°æ® |
| | | int SECSRuntimeManager::deleteSystemSVByID(int nID) { |
| | | std::lock_guard<std::mutex> lock(m_mutex); |
| | | if (m_pDB == nullptr) { |
| | | return 1; |
| | | } |
| | | |
| | | // æ£æ¥æ¯å¦åå¨è¯¥ ID |
| | | if (!isIDDuplicate(nID)) { |
| | | return 2; |
| | | } |
| | | |
| | | // æå»ºå é¤ç SQL è¯å¥ |
| | | std::string deleteSQL = "DELETE FROM SystemSV WHERE ID = " + std::to_string(nID) + ";"; |
| | | if (!m_pDB->executeQuery(deleteSQL)) { |
| | | return 3; |
| | | } |
| | | |
| | | return 0; |
| | | } |
| | | |
| | | int SECSRuntimeManager::deleteAllSystemSV() { |
| | | std::lock_guard<std::mutex> lock(m_mutex); |
| | | if (m_pDB == nullptr) { |
| | | return 1; |
| | | } |
| | | |
| | | // æå»ºå é¤æææ°æ®ç SQL è¯å¥ |
| | | std::string deleteSQL = "DELETE FROM SystemSV;"; |
| | | if (!m_pDB->executeQuery(deleteSQL)) { |
| | | return 2; |
| | | } |
| | | |
| | | return 0; // å 餿åï¼è¿å 0 表示æä½æå宿ã |
| | | } |
| | | |
| | | // åå§å EqpSV 表 |
| | | void SECSRuntimeManager::initEqpSVTable() { |
| | | std::lock_guard<std::mutex> lock(m_mutex); |
| | | if (m_pDB == nullptr) { |
| | | throw std::runtime_error("Database not connected."); |
| | | } |
| | | |
| | | // å建 EqpSV 表 |
| | | std::string createTableSQL = |
| | | "CREATE TABLE IF NOT EXISTS EqpSV (" |
| | | "ID INTEGER PRIMARY KEY, " |
| | | "Name TEXT UNIQUE NOT NULL, " |
| | | "DataType TEXT NOT NULL, " |
| | | "Length INTEGER NULL, " |
| | | "Unit TEXT NULL, " |
| | | "Remark TEXT, " |
| | | "SeqNo INTEGER);"; |
| | | |
| | | if (!m_pDB->executeQuery(createTableSQL)) { |
| | | throw std::runtime_error("Failed to create EqpSV table."); |
| | | } |
| | | } |
| | | |
| | | // æ·»å EqpSV æ°æ® |
| | | int SECSRuntimeManager::addEqpSV(int nID, 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; |
| | | } |
| | | |
| | | if (isIDDuplicate(nID)) { |
| | | return 2; |
| | | } |
| | | |
| | | if (isNameDuplicate(sName)) { |
| | | return 3; |
| | | } |
| | | |
| | | // æå»º SQL æå
¥è¯å¥ï¼æå
¥æ°æ®å° EqpSV 表ä¸ã |
| | | std::string insertSQL = "INSERT INTO EqpSV (ID, Name, DataType, Length, Unit, Remark, SeqNo) VALUES (" |
| | | + std::to_string(nID) + ", '" |
| | | + sName + "', '" |
| | | + sDataType + "', " |
| | | + ((nLength <= 0) ? "NULL" : std::to_string(nLength))+", " |
| | | + ((sUnit == "NULL" || sUnit.empty()) ? "NULL" : "'" + sUnit + "'")+", '" |
| | | + sRemark + "', " |
| | | + std::to_string(nSeqNo) + ");"; |
| | | |
| | | // æ§è¡æå
¥æä½ï¼è¥å¤±è´¥åæåºå¼å¸¸ã |
| | | if (!m_pDB->executeQuery(insertSQL)) { |
| | | return 4; |
| | | } |
| | | |
| | | return 0; // æå
¥æåï¼è¿å 0 表示æä½æå宿ã |
| | | } |
| | | |
| | | // åå§å SystemDV 表 |
| | | void SECSRuntimeManager::initSystemDVTable() { |
| | | std::lock_guard<std::mutex> lock(m_mutex); |
| | | if (m_pDB == nullptr) { |
| | | throw std::runtime_error("Database not connected."); |
| | | } |
| | | |
| | | // å建 SystemDV 表 |
| | | std::string createTableSQL = |
| | | "CREATE TABLE IF NOT EXISTS SystemDV (" |
| | | "ID INTEGER PRIMARY KEY, " |
| | | "Name TEXT UNIQUE NOT NULL, " |
| | | "DataType TEXT NOT NULL, " |
| | | "Length INTEGER NULL, " |
| | | "Unit TEXT NULL, " |
| | | "Remark TEXT, " |
| | | "SystemID INTEGER);"; |
| | | |
| | | if (!m_pDB->executeQuery(createTableSQL)) { |
| | | throw std::runtime_error("Failed to create SystemDV table."); |
| | | } |
| | | } |
| | | |
| | | // åå§å EqpDV 表 |
| | | void SECSRuntimeManager::initEqpDVTable() { |
| | | std::lock_guard<std::mutex> lock(m_mutex); |
| | | if (m_pDB == nullptr) { |
| | | throw std::runtime_error("Database not connected."); |
| | | } |
| | | |
| | | // å建 EqpDV 表 |
| | | std::string createTableSQL = |
| | | "CREATE TABLE IF NOT EXISTS EqpDV (" |
| | | "ID INTEGER PRIMARY KEY, " |
| | | "Name TEXT UNIQUE NOT NULL, " |
| | | "DataType TEXT NOT NULL, " |
| | | "Length INTEGER NULL, " |
| | | "Unit TEXT NULL, " |
| | | "Remark TEXT, " |
| | | "SeqNo INTEGER);"; |
| | | |
| | | if (!m_pDB->executeQuery(createTableSQL)) { |
| | | throw std::runtime_error("Failed to create EqpDV table."); |
| | | } |
| | | } |
| | | |
| | | // åå§å SystemEC 表 |
| | | void SECSRuntimeManager::initSystemECTable() { |
| | | std::lock_guard<std::mutex> lock(m_mutex); |
| | | if (m_pDB == nullptr) { |
| | | throw std::runtime_error("Database not connected."); |
| | | } |
| | | |
| | | // å建 SystemEC 表 |
| | | std::string createTableSQL = |
| | | "CREATE TABLE IF NOT EXISTS SystemEC (" |
| | | "ID INTEGER PRIMARY KEY, " |
| | | "Name TEXT UNIQUE NOT NULL, " |
| | | "DataType TEXT NOT NULL, " |
| | | "MinValue INTEGER NULL, " |
| | | "MaxValue INTEGER NULL, " |
| | | "DefaultVal INTEGER NULL, " |
| | | "Unit TEXT NULL, " |
| | | "Remark TEXT, " |
| | | "SystemID INTEGER);"; |
| | | |
| | | if (!m_pDB->executeQuery(createTableSQL)) { |
| | | throw std::runtime_error("Failed to create SystemEC table."); |
| | | } |
| | | } |
| | | |
| | | // åå§å EqpEC 表 |
| | | void SECSRuntimeManager::initEqpECTable() { |
| | | std::lock_guard<std::mutex> lock(m_mutex); |
| | | if (m_pDB == nullptr) { |
| | | throw std::runtime_error("Database not connected."); |
| | | } |
| | | |
| | | // å建 EqpEC 表 |
| | | std::string createTableSQL = |
| | | "CREATE TABLE IF NOT EXISTS EqpEC (" |
| | | "ID INTEGER PRIMARY KEY, " |
| | | "Name TEXT UNIQUE NOT NULL, " |
| | | "DataType TEXT NOT NULL, " |
| | | "MinValue INTEGER NULL, " |
| | | "MaxValue INTEGER NULL, " |
| | | "DefaultValue INTEGER NULL, " |
| | | "Unit TEXT NULL, " |
| | | "Remark TEXT, " |
| | | "SeqNo INTEGER NOT NULL, " |
| | | "Length INTEGER NOT NULL, " |
| | | "CanUpdateByHost INTEGER NOT NULL);"; |
| | | |
| | | if (!m_pDB->executeQuery(createTableSQL)) { |
| | | throw std::runtime_error("Failed to create EqpEC table."); |
| | | } |
| | | } |
| | | |
| | | // åå§å SystemEvent 表 |
| | | void SECSRuntimeManager::initSystemEventTable() { |
| | | std::lock_guard<std::mutex> lock(m_mutex); |
| | | if (m_pDB == nullptr) { |
| | | throw std::runtime_error("Database not connected."); |
| | | } |
| | | |
| | | // å建 SystemEvent 表 |
| | | std::string createTableSQL = |
| | | "CREATE TABLE IF NOT EXISTS SystemEvent (" |
| | | "CEID INTEGER PRIMARY KEY, " |
| | | "Name TEXT UNIQUE NOT NULL, " |
| | | "Remark TEXT, " |
| | | "SystemID INTEGER);"; |
| | | |
| | | if (!m_pDB->executeQuery(createTableSQL)) { |
| | | throw std::runtime_error("Failed to create SystemEvent table."); |
| | | } |
| | | } |
| | | |
| | | // åå§å EqpEvent 表 |
| | | void SECSRuntimeManager::initEqpEventTable() { |
| | | std::lock_guard<std::mutex> lock(m_mutex); |
| | | if (m_pDB == nullptr) { |
| | | throw std::runtime_error("Database not connected."); |
| | | } |
| | | |
| | | // å建 EqpEvent 表 |
| | | std::string createTableSQL = |
| | | "CREATE TABLE IF NOT EXISTS EqpEvent (" |
| | | "CEID INTEGER PRIMARY KEY AUTOINCREMENT, " |
| | | "Name TEXT UNIQUE NOT NULL, " |
| | | "Remark TEXT, " |
| | | "BitNo INTEGER);"; |
| | | |
| | | if (!m_pDB->executeQuery(createTableSQL)) { |
| | | throw std::runtime_error("Failed to create EqpEvent table."); |
| | | } |
| | | } |
| | | |
| | | // åå§å EventLink 表 |
| | | void SECSRuntimeManager::initEventLinkTable() { |
| | | std::lock_guard<std::mutex> lock(m_mutex); |
| | | if (m_pDB == nullptr) { |
| | | throw std::runtime_error("Database not connected."); |
| | | } |
| | | |
| | | // å建 EventLink 表 |
| | | std::string createEventLinkSQL = |
| | | "CREATE TABLE IF NOT EXISTS EventLink (" |
| | | "CEID INTEGER, " |
| | | "RPTID INTEGER, " |
| | | "FOREIGN KEY (CEID) REFERENCES EqpEvent(CEID));"; |
| | | |
| | | if (!m_pDB->executeQuery(createEventLinkSQL)) { |
| | | throw std::runtime_error("Failed to create EventLink table."); |
| | | } |
| | | } |
| | | |
| | | // åå§å PPID 表 |
| | | void SECSRuntimeManager::initPPIDTable() { |
| | | std::lock_guard<std::mutex> lock(m_mutex); |
| | | if (m_pDB == nullptr) { |
| | | throw std::runtime_error("Database not connected."); |
| | | } |
| | | |
| | | // å建 EqpPPID 表 |
| | | std::string createTableSQL = |
| | | "CREATE TABLE IF NOT EXISTS EqpPPID (" |
| | | "BitNo INTEGER PRIMARY KEY AUTOINCREMENT, " |
| | | "PPID INTEGER NULL);"; |
| | | if (!m_pDB->executeQuery(createTableSQL)) { |
| | | throw std::runtime_error("Failed to create EqpPPID table."); |
| | | } |
| | | |
| | | // å
æ£æ¥è¡¨æ¯å¦ä¸ºç©º |
| | | int nCount = getIntFromDB("SELECT COUNT(*) FROM EqpPPID;"); |
| | | if (nCount == 0) { |
| | | // æå
¥åå§æ°æ®ï¼512 è¡ï¼ |
| | | for (int nBitNo = 0; nBitNo < 512; ++nBitNo) { |
| | | std::string insertSQL = "INSERT INTO EqpPPID (BitNo) VALUES (" + std::to_string(nBitNo) + ");"; |
| | | if (!m_pDB->executeQuery(insertSQL)) { |
| | | throw std::runtime_error("Failed to insert data into EqpPPID table."); |
| | | } |
| | | } |
| | | } |
| | | } |
| | | |
| | | // åå§å RPTID 表 |
| | | void SECSRuntimeManager::initRPTIDTable() { |
| | | std::lock_guard<std::mutex> lock(m_mutex); |
| | | if (m_pDB == nullptr) { |
| | | throw std::runtime_error("Database not connected."); |
| | | } |
| | | |
| | | // å建 RPTID ç¸å
³è¡¨ |
| | | std::string createReportTableSQL = |
| | | "CREATE TABLE IF NOT EXISTS Report (" |
| | | "RPTID INTEGER PRIMARY KEY);"; |
| | | |
| | | std::string createReportVIDsTableSQL = |
| | | "CREATE TABLE IF NOT EXISTS ReportVIDs (" |
| | | "ID INTEGER PRIMARY KEY AUTOINCREMENT, " |
| | | "RPTID INTEGER NOT NULL, " |
| | | "VID INTEGER NOT NULL, " |
| | | "FOREIGN KEY (RPTID) REFERENCES Report(RPTID));"; |
| | | |
| | | if (!m_pDB->executeQuery(createReportTableSQL)) { |
| | | throw std::runtime_error("Failed to create Report table."); |
| | | } |
| | | if (!m_pDB->executeQuery(createReportVIDsTableSQL)) { |
| | | throw std::runtime_error("Failed to create ReportVIDs table."); |
| | | } |
| | | } |