From 3677d3ca8c4cd8bf2dfa2d04d01a625341d02d7f Mon Sep 17 00:00:00 2001 From: RCi <15089880081@163.com> Date: Wed, 22 Oct 2025 10:08:24 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8Dsql?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- include/sql/qSqlBase.h | 52 +++++++++---------- src/Core/back/cameraManager.cpp | 2 +- src/Core/back/detData.h | 3 ++ .../Hd_CameraModule_HIK_hard_GIGE.cpp | 2 +- .../Hd_CameraModule_HIK_soft_GIGE.cpp | 2 +- 5 files changed, 30 insertions(+), 31 deletions(-) diff --git a/include/sql/qSqlBase.h b/include/sql/qSqlBase.h index 9d58cdb..65d02f5 100644 --- a/include/sql/qSqlBase.h +++ b/include/sql/qSqlBase.h @@ -33,7 +33,7 @@ class SQLiteDB { public: QSqlDatabase db; // 新增:全局互斥锁,保护所有数据库操作 - mutable std::mutex db_mutex; + mutable QMutex db_mutex; SQLiteDB(const QString& dbPath) : dbPath(dbPath) { @@ -43,7 +43,7 @@ public: // 所有公有方法加锁保护 bool execute(const QString& queryStr, const QVariantList& args = {}) { - std::lock_guard lock(db_mutex); + QMutexLocker lock(&db_mutex); QSqlQuery query(db); query.prepare(queryStr); @@ -60,7 +60,7 @@ public: } QList> query(const QString& queryStr, const QVariantList& args = {}) { - std::lock_guard lock(db_mutex); + QMutexLocker lock(&db_mutex); QList> results; QSqlQuery query(db); query.prepare(queryStr); @@ -87,7 +87,7 @@ public: } bool createTable(const QString& tableName, const QList>& columns) { - std::lock_guard lock(db_mutex); + QMutexLocker lock(&db_mutex); if (columns.empty()) { qDebug() << "Create table failed: columns are empty."; return false; @@ -107,7 +107,7 @@ public: } std::vector getTables() { - std::lock_guard lock(db_mutex); + QMutexLocker lock(&db_mutex); std::vector tables; QString sql = "SELECT name FROM sqlite_master WHERE type='table' AND name NOT LIKE 'sqlite_%';"; QSqlQuery query(db); @@ -122,13 +122,13 @@ public: } bool dropTable(const QString& tableName) { - std::lock_guard lock(db_mutex); + QMutexLocker lock(&db_mutex); QString sql = QString("DROP TABLE IF EXISTS %1").arg(tableName); return execute(sql); } bool addColumn(const QString& tableName, const QString& columnName, const QString& columnType) { - std::lock_guard lock(db_mutex); + QMutexLocker lock(&db_mutex); if (columnName.isEmpty() || columnType.isEmpty()) { qDebug() << "Add column failed: column name or type is empty."; return false; @@ -149,7 +149,7 @@ public: } bool tableExists(const QString& tableName) { - std::lock_guard lock(db_mutex); + QMutexLocker lock(&db_mutex); QString sql = QString("SELECT name FROM sqlite_master WHERE type='table' AND name='%1';").arg(tableName); QList> result = query(sql); @@ -158,7 +158,7 @@ public: bool _insert(const QString& tableName, const std::map& data) { - std::lock_guard lock(db_mutex); + QMutexLocker lock(&db_mutex); if (data.empty()) { qDebug() << "Insert failed: data is empty."; return false; @@ -200,7 +200,7 @@ public: bool _update(const QString& tableName, const std::map& data, const std::map& conditions) { - std::lock_guard lock(db_mutex); + QMutexLocker lock(&db_mutex); if (data.empty() || conditions.empty()) { qDebug() << "Update failed: data or conditions are empty."; return false; @@ -242,7 +242,7 @@ public: bool _delete(const QString& tableName, const std::map& conditions) { - std::lock_guard lock(db_mutex); + QMutexLocker lock(&db_mutex); if (conditions.empty()) { qDebug() << "Delete failed: conditions are empty."; return false; @@ -275,7 +275,7 @@ public: std::vector> _search(const QString& tableName, const QStringList& columns, const std::map& conditions = {}) { - std::lock_guard lock(db_mutex); + QMutexLocker lock(&db_mutex); QStringList selectColumns = columns.isEmpty() ? QStringList("*") : columns; QString sql = QString("SELECT %1 FROM \"%2\"").arg(selectColumns.join(", "), tableName); @@ -316,13 +316,13 @@ public: } QList> queryTabelData(const QString& tableName) { - std::lock_guard lock(db_mutex); + QMutexLocker lock(&db_mutex); QString sql = QString("SELECT * FROM \"%1\"").arg(tableName); return query(sql); } bool exportTableToCSV(const QString& tableName, const QString& filePath, std::mutex& _mutex) { - std::lock_guard lock(db_mutex); + QMutexLocker lock(&db_mutex); using namespace std::chrono; auto start = high_resolution_clock::now(); @@ -372,7 +372,7 @@ public: } bool setWALMode(bool enableWAL = true, int busyTimeoutMs = 3000) { - std::lock_guard lock(db_mutex); + QMutexLocker lock(&db_mutex); if (!db.isOpen()) { qWarning() << "Database is not open, cannot set WAL mode."; return false; @@ -498,12 +498,12 @@ public: } bool isNewData(const QString& snCode) { - std::lock_guard locker(db->db_mutex); + QMutexLocker locker(&db->db_mutex); auto res = db->_search(getCurrentProcessCsvName(), {}, { {"条码",snCode} }); return res.empty(); } bool isNgData(const QString& snCode) { - std::lock_guard locker(db->db_mutex); + QMutexLocker locker(&db->db_mutex); auto res = db->_search(getCurrentProcessCsvName(), {}, { {"条码",snCode} }); if (res.empty() == true) return false; @@ -516,15 +516,17 @@ public: void run() override{ while (queue.size() > 0) { - queueLock.lock(); - auto val = queue.dequeue(); - queueLock.unlock(); + std::pair> val; + { + QMutexLocker locker(&queueLock); + val = queue.dequeue(); + } try { auto snCode = val.first; auto data = val.second; QString currentProcessCsvName = getCurrentProcessCsvName(); if (currentProcessCsvName != currentProcessCsvNameCache) { - std::lock_guard locker(db->db_mutex); + QMutexLocker locker(&db->db_mutex); if (!db->createTable(currentProcessCsvName, db_InitColumns)) { qWarning() << "addtData: Failed to create table:" << currentProcessCsvName; return; @@ -533,7 +535,7 @@ public: } QList tableColumns; { - std::lock_guard locker(db->db_mutex); + QMutexLocker locker(&db->db_mutex); QSqlQuery colQuery(db->db); QString colSql = QString("PRAGMA table_info(\"%1\")").arg(currentProcessCsvName); if (colQuery.exec(colSql)) { @@ -543,7 +545,6 @@ public: } } for (const auto& kv : data) { - std::lock_guard locker(db->db_mutex); if (!tableColumns.contains(kv.first)) { if (!db->addColumn(currentProcessCsvName, kv.first, "TEXT")) { qWarning() << "addtData: Failed to add column:" << kv.first << "to table:" << currentProcessCsvName; @@ -552,7 +553,6 @@ public: } std::vector> res; { - std::lock_guard locker(db->db_mutex); res = db->_search(currentProcessCsvName, {}, { {"条码",snCode} }); } QString nowTime = QDateTime::currentDateTime().toString("yyyy-MM-dd hh:mm:ss.zzz"); @@ -560,7 +560,6 @@ public: if (res.empty()) { std::vector> lastRes; { - std::lock_guard locker(db->db_mutex); lastRes = db->_search(getLastProcessCsvName(), {}, { {"条码",snCode} }); } if (lastRes.empty()) { @@ -568,7 +567,6 @@ public: insertData["条码"] = snCode; insertData["创建时间"] = nowTime; insertData["修改时间"] = nowTime; - std::lock_guard locker(db->db_mutex); opResult = db->_insert(currentProcessCsvName, insertData); if (!opResult) { qWarning() << "addtData: Insert failed for table:" << currentProcessCsvName << "snCode:" << snCode; @@ -577,7 +575,6 @@ public: else { std::map updateData = data; updateData["修改时间"] = nowTime; - std::lock_guard locker(db->db_mutex); opResult = db->_update(getLastProcessCsvName(), updateData, { {"条码",snCode} }); if (!opResult) { qWarning() << "addtData: Update failed for table:" << getLastProcessCsvName() << "snCode:" << snCode; @@ -587,7 +584,6 @@ public: else { std::map updateData = data; updateData["修改时间"] = nowTime; - std::lock_guard locker(db->db_mutex); opResult = db->_update(getCurrentProcessCsvName(), updateData, { {"条码",snCode} }); if (!opResult) { qWarning() << "addtData: Update failed for table:" << getCurrentProcessCsvName() << "snCode:" << snCode; diff --git a/src/Core/back/cameraManager.cpp b/src/Core/back/cameraManager.cpp index 19ac289..6ad62dd 100644 --- a/src/Core/back/cameraManager.cpp +++ b/src/Core/back/cameraManager.cpp @@ -24,7 +24,7 @@ static MV_CC_DEVICE_INFO_LIST searchMvDevice() { MV_CC_DEVICE_INFO_LIST m_stDevList; memset(&m_stDevList, 0, sizeof(MV_CC_DEVICE_INFO_LIST)); - int nRet = MV_CC_EnumDevices(MV_GIGE_DEVICE || MV_USB_DEVICE, &m_stDevList); + int nRet = MV_CC_EnumDevices(MV_GIGE_DEVICE | MV_USB_DEVICE, &m_stDevList); return m_stDevList; } diff --git a/src/Core/back/detData.h b/src/Core/back/detData.h index 2b2f92a..253af49 100644 --- a/src/Core/back/detData.h +++ b/src/Core/back/detData.h @@ -54,6 +54,9 @@ public: QMutex oriImgMutex;//原图锁 std::vector oriImgs;//原图容器 std::vector oriFormat;//原图格式 如果数量不一致直接全存bmp + + QString customPath = "",customFileName = ""; + QMap customReplaceMap; #pragma endregion QMap additional; detData() {} diff --git a/subModule/Hd_CameraModule_HIK_hard_GIGE/Hd_CameraModule_HIK_hard_GIGE.cpp b/subModule/Hd_CameraModule_HIK_hard_GIGE/Hd_CameraModule_HIK_hard_GIGE.cpp index 7b1a3be..31572b2 100644 --- a/subModule/Hd_CameraModule_HIK_hard_GIGE/Hd_CameraModule_HIK_hard_GIGE.cpp +++ b/subModule/Hd_CameraModule_HIK_hard_GIGE/Hd_CameraModule_HIK_hard_GIGE.cpp @@ -96,7 +96,7 @@ int SearchDevice() { memset(&m_stDevList, 0, sizeof(MV_CC_DEVICE_INFO_LIST)); // ch:枚举子网内所有设备 | en:Enumerate all devices within subnet - int nRet = MV_CC_EnumDevices(MV_GIGE_DEVICE || MV_USB_DEVICE, &m_stDevList); + int nRet = MV_CC_EnumDevices(MV_GIGE_DEVICE | MV_USB_DEVICE, &m_stDevList); for (int i = 0; i < m_stDevList.nDeviceNum; i++) { //SN diff --git a/subModule/Hd_CameraModule_HIK_soft_GIGE/Hd_CameraModule_HIK_soft_GIGE.cpp b/subModule/Hd_CameraModule_HIK_soft_GIGE/Hd_CameraModule_HIK_soft_GIGE.cpp index b5b0ec2..32eadfd 100644 --- a/subModule/Hd_CameraModule_HIK_soft_GIGE/Hd_CameraModule_HIK_soft_GIGE.cpp +++ b/subModule/Hd_CameraModule_HIK_soft_GIGE/Hd_CameraModule_HIK_soft_GIGE.cpp @@ -95,7 +95,7 @@ int SearchDevice() { memset(&m_stDevList, 0, sizeof(MV_CC_DEVICE_INFO_LIST)); // ch:枚举子网内所有设备 | en:Enumerate all devices within subnet - int nRet = MV_CC_EnumDevices(MV_GIGE_DEVICE || MV_USB_DEVICE, &m_stDevList); + int nRet = MV_CC_EnumDevices(MV_GIGE_DEVICE | MV_USB_DEVICE, &m_stDevList); for (int i = 0; i < m_stDevList.nDeviceNum; i++) { //SN