Просмотр исходного кода

updates: db changes to sqllite

Yao 2 недель назад
Родитель
Сommit
5e7d4d08e6
6 измененных файлов с 112 добавлено и 229 удалено
  1. 45 15
      CMakeLists.txt
  2. 0 110
      QframeTest01.pro
  3. 0 4
      blastProject/projectdialog.cpp
  4. 66 7
      databasemanager.cpp
  5. 1 0
      databasemanager.h
  6. 0 93
      home.ui.autosave

+ 45 - 15
CMakeLists.txt

@@ -9,7 +9,7 @@ set(CMAKE_AUTORCC ON)
 # 设置 C++ 标准
 set(CMAKE_CXX_STANDARD 17)
 set(CMAKE_CXX_STANDARD_REQUIRED ON)
-set(CMAKE_PREFIX_PATH "/opt/homebrew/Cellar/qt/6.9.0")
+set(CMAKE_PREFIX_PATH "C:/Qt/6.9.0/msvc2022_64")
 
 
 # # 设置 OpenSSL 安装路径
@@ -35,6 +35,7 @@ set(SOURCES
     blastopepage.cpp
     addressfactory.cpp
     addresspage.cpp
+    pagefactory.cpp
     components/MultiSelectComboBox.cpp
     blastProject/blastprojectfactory.cpp
     blastProject/blastprojectpage.cpp
@@ -51,6 +52,7 @@ set(SOURCES
     global.cpp
     httpclient.cpp
     jobs.cpp
+    logger.cpp
     login/loginwindow.cpp
     main.cpp
     mainwindow.cpp
@@ -66,6 +68,17 @@ set(SOURCES
     blastRegRecord/hblastregrecorddao.cpp
     fireWidget/firingwidget.cpp
     fireWidget/navprogress.cpp
+    des3encryption.cpp
+    countdownwidget.cpp
+    serial/serialtool.cpp
+    serial/serialgps.cpp
+    paregnrmc.cpp
+    serialgpsthread.cpp
+    worker/timeupdatethread.cpp
+    loadingWidget.cpp
+    backendapimanager.cpp
+    homepage.cpp
+    homepagefactory.cpp
 )
 
 # 定义头文件列表
@@ -75,6 +88,8 @@ set(HEADERS
     blastopepage.h
     addressfactory.h
     addresspage.h
+    pagefactory.h
+    components/MultiSelectComboBox.h
     blastProject/blastprojectfactory.h
     blastProject/blastprojectpage.h
     blastProject/hproject.h
@@ -90,6 +105,7 @@ set(HEADERS
     global.h
     httpclient.h
     jobs.h
+    logger.h
     login/loginwindow.h
     mainwindow.h
     registryManager/registrymanager.h
@@ -105,6 +121,16 @@ set(HEADERS
     blastRegRecord/hblastregrecorddao.h
     fireWidget/firingwidget.h
     fireWidget/navprogress.h
+    des3encryption.h
+    countdownwidget.h
+    serial/serialtool.h
+    serial/serialgps.h
+    paregnrmc.h
+    serialgpsthread.h
+    worker/timeupdatethread.h
+    loadingWidget.h
+    backendapimanager.h
+    homepage.h
 )
 
 # 定义 UI 文件列表
@@ -135,25 +161,29 @@ add_executable(${PROJECT_NAME}
     ${HEADERS}
     ${FORMS}
     ${RESOURCES}
-    des3encryption.h des3encryption.cpp
-    countdownwidget.h countdownwidget.cpp
-    serial/serialtool.h serial/serialtool.cpp
-    serial/serialgps.h serial/serialgps.cpp
-    paregnrmc.cpp paregnrmc.h
-    serialgpsthread.h serialgpsthread.cpp
-    worker/timeupdatethread.h worker/timeupdatethread.cpp
     logo.rc
-    logger.h
+)
+
+
+# 创建测试可执行文件
+add_executable(test_database
+    test_database.cpp
+    databasemanager.cpp
     logger.cpp
-    loadingWidget.h
-    loadingWidget.cpp
-    README.md
-    backendapimanager.h backendapimanager.cpp
+)
 
-    homepage.h homepage.cpp homepage.ui
-    homepagefactory.cpp
+# 链接测试可执行文件的库
+target_link_libraries(test_database
+    Qt${QT_VERSION_MAJOR}::Core
+    Qt${QT_VERSION_MAJOR}::Widgets
+    Qt${QT_VERSION_MAJOR}::Sql
+    ${OPENSSL_LIBRARIES}
 )
 
+# 设置测试可执行文件的输出目录
+set_target_properties(test_database PROPERTIES
+    RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin
+)
 
 set_target_properties(${PROJECT_NAME} PROPERTIES
     WIN32_EXECUTABLE FALSE

+ 0 - 110
QframeTest01.pro

@@ -1,110 +0,0 @@
-QT       += core gui sql network
-
-greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
-
-CONFIG += c++17
-
-# You can make your code fail to compile if it uses deprecated APIs.
-# In order to do so, uncomment the following line.
-#DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000    # disables all the APIs deprecated before Qt 6.0.0
-
-SOURCES += \
-    PageWidget.cpp \
-    addressfactory.cpp \
-    addresspage.cpp \
-    blastplanpage.cpp \
-    blastplanpfactory.cpp \
-    blastprojectfactory.cpp \
-    blastprojectpage.cpp \
-    book.cpp \
-    buttondelegate.cpp \
-    databasemanager.cpp \
-    detInfo/detinfofactory.cpp \
-    detInfo/detinfopage.cpp \
-    detdialog.cpp \
-    dialog.cpp \
-    equipment/equipmentfactory.cpp \
-    equipment/equipmentpage.cpp \
-    global.cpp \
-    hplan.cpp \
-    hplandao.cpp \
-    hproject.cpp \
-    hprojectdao.cpp \
-    httpclient.cpp \
-    jobs.cpp \
-    loginwindow.cpp \
-    main.cpp \
-    mainwindow.cpp \
-    mqtt/mqttclient.cpp \
-    newpagefactory.cpp \
-    page.cpp \
-    pagetest.cpp \
-    pagetestfactory.cpp \
-    plandialog.cpp \
-    projectdialog.cpp \
-    sysapi.cpp \
-    sysapidao.cpp \
-    testdialog.cpp
-
-HEADERS += \
-    PageWidget.h \
-    addressfactory.h \
-    addresspage.h \
-    blastplanpage.h \
-    blastplanpfactory.h \
-    blastprojectfactory.h \
-    blastprojectpage.h \
-    book.h \
-    buttondelegate.h \
-    databasemanager.h \
-    detInfo/detinfofactory.h \
-    detInfo/detinfopage.h \
-    detdialog.h \
-    dialog.h \
-    equipment/equipmentfactory.h \
-    equipment/equipmentpage.h \
-    global.h \
-    hplan.h \
-    hplandao.h \
-    hproject.h \
-    hprojectdao.h \
-    httpclient.h \
-    jobs.h \
-    loginwindow.h \
-    mainwindow.h \
-    PageFactory.h\
-    mqtt/mqttclient.h \
-    newpagefactory.h \
-    page.h \
-    pagetest.h \
-    pagetestfactory.h \
-    plandialog.h \
-    projectdialog.h \
-    regex.h \
-    sysapi.h \
-    sysapidao.h \
-    testdialog.h
-
-FORMS += \
-    PageWidget.ui \
-    addresspage.ui \
-    blastplanpage.ui \
-    blastprojectpage.ui \
-    detInfo/detinfopage.ui \
-    detdialog.ui \
-    dialog.ui \
-    equipment/equipmentpage.ui \
-    loginwindow.ui \
-    mainwindow.ui \
-    page.ui \
-    pagetest.ui \
-    plandialog.ui \
-    projectdialog.ui \
-    testdialog.ui
-# Default rules for deployment.
-qnx: target.path = /tmp/$${TARGET}/bin
-else: unix:!android: target.path = /opt/$${TARGET}/bin
-!isEmpty(target.path): INSTALLS += target
-QMAKE_PROJECT_DEPTH = 0
-RESOURCES += \
-    media.qrc

+ 0 - 4
blastProject/projectdialog.cpp

@@ -147,16 +147,12 @@ void ProjectDialog::validateAndSaveProject() {
     for (const auto &pair :
          ui->undergroundOperatorsWidget->findChild<MultiSelectComboBox *>()->checkedItemsWithKeys()) {
         selectedBlasters.append(pair.first);
-        qDebug() << "Selected underground operator:" << pair.first;
     }
     for (const auto &pair : ui->groundOperatorsWidget->findChild<MultiSelectComboBox *>()->checkedItemsWithKeys()) {
         selectedOperators.append(pair.first);
-        qDebug() << "Selected ground operator:" << pair.first;
     }
     for (const auto &pair : ui->safetyInspectorsWidget->findChild<MultiSelectComboBox *>()->checkedItemsWithKeys()) {
         selectedSafetyInspectors.append(pair.first);
-
-        qDebug() << "Selected safety inspector:" << pair.first;
     }
 
     QString detNum = ui->editDetNum->text().trimmed();

+ 66 - 7
databasemanager.cpp

@@ -1,8 +1,11 @@
 #include "databasemanager.h"
 
 #include <QDebug>
+#include <QDir>
 #include <QMessageBox>
 #include <QSqlError>
+#include <QSqlQuery>
+#include <QStandardPaths>
 
 #include "global.h"
 #include "logger.h"
@@ -13,21 +16,30 @@ DatabaseManager& DatabaseManager::getInstance() {
 }
 
 // 创建一个新的数据库连接
-DatabaseManager::DatabaseManager() : db(QSqlDatabase::addDatabase("QMYSQL")) {
-    db.setHostName(databaseHost);
-    db.setDatabaseName("pc_system");
-    db.setUserName("root");
-    db.setPassword("123456");
+DatabaseManager::DatabaseManager() : db(QSqlDatabase::addDatabase("QSQLITE")) {
+    // 设置SQLite数据库文件路径
+    QString appDataPath = QStandardPaths::writableLocation(QStandardPaths::AppDataLocation);
+    QDir appDataDir(appDataPath);
+    if (!appDataDir.exists()) {
+        appDataDir.mkpath(".");
+    }
+
+    QString dbPath = appDataPath + "/smartmine.db";
+    db.setDatabaseName(dbPath);
 
     if (!db.open()) {
         Logger::getInstance().error(
-            QString("Mysql Connected error. host: %1, error: %2").arg(databaseHost, db.lastError().text()));
+            QString("SQLite Connected error. path: %1, error: %2").arg(dbPath, db.lastError().text()));
         QMessageBox::critical(nullptr, "错误",
                               QString("无法连接数据库, 请联系开发人员。\n 错误: %1").arg(db.lastError().text()));
 
         throw std::runtime_error("Database connection failed: " + db.lastError().text().toStdString());
     }
-    Logger::getInstance().info(QString("Mysql Connected. host: %1").arg(databaseHost));
+
+    Logger::getInstance().info(QString("SQLite Connected. path: %1").arg(dbPath));
+
+    // 初始化数据库表结构
+    initializeTables();
 }
 
 DatabaseManager::~DatabaseManager() {
@@ -37,3 +49,50 @@ DatabaseManager::~DatabaseManager() {
 }
 
 QSqlDatabase& DatabaseManager::getDatabase() { return db; }
+
+void DatabaseManager::initializeTables() {
+    QSqlQuery query(db);
+
+    // 创建 h_project 表 (SQLite语法,基于提供的MySQL结构)
+    QString createHProjectTable = R"(
+        CREATE TABLE IF NOT EXISTS h_project (
+            id INTEGER PRIMARY KEY AUTOINCREMENT,
+            uuid TEXT,
+            name TEXT,
+            company_code TEXT,
+            htid TEXT,
+            xmbh TEXT,
+            operator_name TEXT,
+            operator_identity TEXT,
+            blaster_name TEXT,
+            blaster_identity TEXT,
+            lora_address TEXT,
+            blast_count TEXT,
+            address_uuid TEXT,
+            pc_sn TEXT,
+            det_sum TEXT,
+            file_name TEXT,
+            file_url TEXT,
+            blast_status TEXT,
+            created_at TEXT,
+            updated_at TEXT,
+            deleted_at TEXT,
+            create_by INTEGER,
+            update_by INTEGER,
+            address_path TEXT,
+            deletion_date TEXT
+        )
+    )";
+
+    if (!query.exec(createHProjectTable)) {
+        Logger::getInstance().error(QString("Failed to create h_project table: %1").arg(query.lastError().text()));
+        throw std::runtime_error("Failed to create h_project table");
+    }
+
+    // 创建索引(可选,提高查询性能)
+    query.exec("CREATE INDEX IF NOT EXISTS idx_h_project_uuid ON h_project(uuid)");
+    query.exec("CREATE INDEX IF NOT EXISTS idx_h_project_blast_status ON h_project(blast_status)");
+    query.exec("CREATE INDEX IF NOT EXISTS idx_h_project_deletion_date ON h_project(deletion_date)");
+
+    Logger::getInstance().info("Database tables initialized successfully");
+}

+ 1 - 0
databasemanager.h

@@ -12,6 +12,7 @@ class DatabaseManager {
     ~DatabaseManager();
     DatabaseManager(const DatabaseManager&) = delete;
     DatabaseManager& operator=(const DatabaseManager&) = delete;
+    void initializeTables();  // 初始化数据库表结构
     QSqlDatabase db;
 };
 

+ 0 - 93
home.ui.autosave

@@ -1,93 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<ui version="4.0">
- <class>Form</class>
- <widget class="QWidget" name="Form">
-  <property name="geometry">
-   <rect>
-    <x>0</x>
-    <y>0</y>
-    <width>890</width>
-    <height>422</height>
-   </rect>
-  </property>
-  <property name="windowTitle">
-   <string>Form</string>
-  </property>
-  <widget class="QWidget" name="verticalLayoutWidget">
-   <property name="geometry">
-    <rect>
-     <x>9</x>
-     <y>9</y>
-     <width>871</width>
-     <height>71</height>
-    </rect>
-   </property>
-   <layout class="QVBoxLayout" name="verticalLayout"/>
-  </widget>
-  <widget class="QWidget" name="gridLayoutWidget">
-   <property name="geometry">
-    <rect>
-     <x>30</x>
-     <y>90</y>
-     <width>411</width>
-     <height>80</height>
-    </rect>
-   </property>
-   <layout class="QGridLayout" name="gridLayout"/>
-  </widget>
-  <widget class="QWidget" name="verticalLayoutWidget_2">
-   <property name="geometry">
-    <rect>
-     <x>440</x>
-     <y>90</y>
-     <width>411</width>
-     <height>81</height>
-    </rect>
-   </property>
-   <layout class="QVBoxLayout" name="verticalLayout_2">
-    <item>
-     <widget class="QLCDNumber" name="todayBlastCout"/>
-    </item>
-   </layout>
-  </widget>
-  <widget class="QWidget" name="gridLayoutWidget_2">
-   <property name="geometry">
-    <rect>
-     <x>30</x>
-     <y>170</y>
-     <width>411</width>
-     <height>81</height>
-    </rect>
-   </property>
-   <layout class="QGridLayout" name="gridLayout_2">
-    <item row="0" column="0">
-     <widget class="QLabel" name="label_2">
-      <property name="text">
-       <string> 本周爆破量:</string>
-      </property>
-      <property name="margin">
-       <number>20</number>
-      </property>
-     </widget>
-    </item>
-   </layout>
-  </widget>
-  <widget class="QWidget" name="gridLayoutWidget_3">
-   <property name="geometry">
-    <rect>
-     <x>440</x>
-     <y>170</y>
-     <width>411</width>
-     <height>81</height>
-    </rect>
-   </property>
-   <layout class="QGridLayout" name="gridLayout_3">
-    <item row="1" column="0">
-     <widget class="QLCDNumber" name="lcdNumber"/>
-    </item>
-   </layout>
-  </widget>
- </widget>
- <resources/>
- <connections/>
-</ui>