#include "databaseutils.h" /* * "all_count INTEGER DEFAULT 0," 总检验次数 "manual_cnt INTEGER DEFAULT 0," 手动检验次数 "auto_cnt INTEGER DEFAULT 0," 自动检验次数 "up_cnt INTEGER DEFAULT 0," 超过大于范围的电阻值 "down_cnt INTEGER DEFAULT 0," 超过小于范围的电阻值 "max_res INTEGER DEFAULT 0," 检测范围范最大电阻值 "min_res INTEGER DEFAULT 0," 检测范围范最小电阻值 "auto_time INTEGER DEFAULT 1," 自动检测重复时间 "auto_sd INTEGER DEFAULT 5," 自动检测误差允许 "chexing TEXT DEFAULT ''," 车型 "sm_num INTEGER DEFAULT 0)"; 护面扫码编号 * * */ namespace DatabaseUtils { QSqlDatabase db; bool init_Database() { db = QSqlDatabase::database(); if (!db.isValid()) { db = QSqlDatabase::addDatabase("QSQLITE"); db.setDatabaseName("RB_RES.db"); } if (!db.open()) { qDebug() << "Error: Unable to open the database"; return false; } QSqlQuery query; // value 阻值 state 0正常 1过大 2过小 flag 0手动 1自动 QString createResDataTable = "CREATE TABLE IF NOT EXISTS res_data_t (" "id INTEGER PRIMARY KEY AUTOINCREMENT," "chexing TEXT DEFAULT ''," "sm_num TEXT DEFAULT ''," "hot_num TEXT DEFAULT ''," "value REAL," "detect TEXT DEFAULT ''," "state TEXT DEFAULT ''," "flag TEXT DEFAULT ''," "name TEXT DEFAULT ''," "timestamp DATETIME DEFAULT CURRENT_TIMESTAMP)"; if (!query.exec(createResDataTable)) { qDebug() << "Error: Unable to create res_data_t table" << query.lastError(); } // 检查并添加 hot_num 列(兼容旧数据库) query.exec("ALTER TABLE res_data_t ADD COLUMN hot_num TEXT DEFAULT ''"); // 日检验次数 手动检测次数 合格 过大 过小 最大值 最小值 合格率 日期 QString createDailyInspectionTable = "CREATE TABLE IF NOT EXISTS daily_data_t (" "ID INTEGER PRIMARY KEY AUTOINCREMENT," "daily_inspection_count INTEGER," "manual_inspection_count INTEGER," "qualified INTEGER," "over_limit INTEGER," "under_limit INTEGER," "max_value REAL," "min_value REAL," "qualification_rate REAL," "date DATE)"; if (!query.exec(createDailyInspectionTable)) { qDebug() << "Error: Unable to create daily_data_t table" << query.lastError(); } QString createInfoTable = "CREATE TABLE IF NOT EXISTS info_t (" "all_count INTEGER DEFAULT 0," // 总次数 "manual_cnt INTEGER DEFAULT 0," // 手动检测次数 "auto_cnt INTEGER DEFAULT 0," // 自动检测次数 "qualified_cnt INTEGER DEFAULT 0," // 合格次数 "up_cnt INTEGER DEFAULT 0," // 超过最大范围次数 "down_cnt INTEGER DEFAULT 0," // 超过最小范围次数 "res_value REAL DEFAULT 0," // 电阻标准值 "res_sd REAL DEFAULT 0," // 电阻误差范围 "max_res REAL DEFAULT 0," // 最大阻值 "min_res REAL DEFAULT 0," // 最小阻值 "auto_time INTEGER DEFAULT 3," // 自动检测时间 "xc_sd REAL DEFAULT 0," // 线材阻值 "name TEXT DEFAULT ''," // 姓名 "pwd TEXT DEFAULT ''," // 密码 "chexing TEXT DEFAULT ''," // 车型 "sm_num TEXT DEFAULT ''," // 护面扫码编号 "hot_num TEXT DEFAULT '')"; // 加热垫扫码编号 QString checkTableEmpty = "SELECT COUNT(*) FROM info_t"; QString insertInitialData = "INSERT INTO info_t (all_count, manual_cnt, auto_cnt, qualified_cnt, up_cnt, down_cnt, res_value, res_sd,max_res, min_res, auto_time, xc_sd, name, pwd, chexing, sm_num, hot_num) " "VALUES (0, 0, 0, 0, 0, 0, 0.0, 0.0, 0.0, 0.0, 3, 0.0, '', 'nuobo123', '', '', '');"; if (!query.exec(createInfoTable)) { qDebug() << "Error: Unable to create info_t table" << query.lastError(); } // 检查并添加 hot_num 列(兼容旧数据库) query.exec("ALTER TABLE info_t ADD COLUMN hot_num TEXT DEFAULT ''"); if (query.exec(checkTableEmpty)) { if (query.next() && query.value(0).toInt() == 0) { if (!query.exec(insertInitialData)) { qDebug() << "Error inserting initial data:" << query.lastError(); } } } else { qDebug() << "Error checking table:" << query.lastError(); } return true; // db.close(); } bool closeDatabase() { if (db.isOpen()) { db.close(); return true; } return false; } bool insert_ResData(const QString &chexing, const QString &sm_num, const QString &hot_num, double value, const QString &detect, const QString &state, const QString &flag, const QString &name) { if (!db.isOpen() && !db.open()) { if (!init_Database()) { qDebug() << "Error: Unable to open the database"; return false; } } QSqlQuery query(db); query.prepare("INSERT INTO res_data_t (chexing, sm_num, hot_num, value, detect, state, flag, name, timestamp) VALUES (:chexing, :sm_num, :hot_num, :value, :detect, :state, :flag, :name, datetime('now', 'localtime'))"); query.bindValue(":chexing", chexing); query.bindValue(":sm_num", sm_num); query.bindValue(":hot_num", hot_num); query.bindValue(":value", value); query.bindValue(":detect", detect); query.bindValue(":state", state); query.bindValue(":flag", flag); query.bindValue(":name", name); if (!query.exec()) { qDebug() << "Error: Unable to insert data into res_data_t table" << query.lastError(); return false; } return true; } int delete_ResData(int id) { if (!db.isOpen() && !db.open()) { if (!init_Database()) { qDebug() << "Error: Unable to open the database"; return -1; } } QSqlQuery query(db); query.prepare("DELETE FROM res_data_t WHERE id = :id"); query.bindValue(":id", id); if (!query.exec()) { qDebug() << "Error: Unable to delete data from res_data_t table" << query.lastError(); return -1; } // 没有行受到影响 if (query.numRowsAffected() == 0) { qDebug() << "Warning: No data deleted, ID not found"; return 0; } return 1; } bool update_ResData(int id, const QString &chexing, const QString &sm_num, const QString &hot_num, double value, const QString &detect, const QString &state, const QString &flag, const QString &name) { if (!db.isOpen() && !db.open()) { if (!init_Database()) { qDebug() << "Error: Unable to open the database"; return false; } } QSqlQuery query(db); query.prepare("UPDATE res_data_t SET chexing = :chexing, sm_num = :sm_num, hot_num = :hot_num, value = :value, detect = :detect, state = :state, flag = :flag, name = :name WHERE id = :id"); query.bindValue(":chexing", chexing); query.bindValue(":sm_num", sm_num); query.bindValue(":hot_num", hot_num); query.bindValue(":value", value); query.bindValue(":detect", detect); query.bindValue(":state", state); query.bindValue(":flag", flag); query.bindValue(":name", name); query.bindValue(":id", id); if (!query.exec()) { qDebug() << "Error: Unable to update data in res_data_t table" << query.lastError(); return false; } return true; } QList read_ResData() { QList dataList; if (!db.isOpen() && !db.open()) { if (!init_Database()) { qDebug() << "Error: Unable to open the database"; return dataList; } } QSqlQuery query(db); if (!query.exec("SELECT * FROM res_data_t")) { qDebug() << "Error: Unable to read data from res_data_t table" << query.lastError(); return dataList; } while (query.next()) { QVariantMap data; data["id"] = query.value("id"); data["chexing"] = query.value("chexing"); data["sm_num"] = query.value("sm_num"); data["hot_num"] = query.value("hot_num"); data["value"] = query.value("value"); data["detect"] = query.value("detect"); data["state"] = query.value("state"); data["flag"] = query.value("flag"); data["name"] = query.value("name"); data["timestamp"] = query.value("timestamp"); dataList.append(data); } return dataList; } int getResTotalRows() { if (!db.isOpen() && !db.open()) { if (!init_Database()) { qDebug() << "Error: Unable to open the database"; return 0; } } QSqlQuery query(db); query.prepare("SELECT COUNT(*) FROM res_data_t"); if (query.exec() && query.next()) { return query.value(0).toInt(); } return 0; } QVector getData(int limit, int offset) { QVector data; if (!db.isOpen() && !db.open()) { if (!init_Database()) { qDebug() << "Error: Unable to open the database"; return data; } } QSqlQuery query(db); query.prepare("SELECT * FROM res_data_t ORDER BY id LIMIT :limit OFFSET :offset"); query.bindValue(":limit", limit); query.bindValue(":offset", offset); if (query.exec()) { while (query.next()) { QVariantList row; for (int i = 0; i < query.record().count(); ++i) { row.append(query.value(i)); } data.append(row); } } else { qDebug() << "Error: Unable to fetch data from res_data_t table" << query.lastError(); } return data; } bool insertTestData(int numRows) { if (!db.isOpen() && !db.open()) { if (!init_Database()) { qDebug() << "Error: Unable to open the database"; return false; } } QSqlQuery query(db); query.prepare("INSERT INTO res_data_t (chexing, sm_num, hot_num, value, detect, state, flag, name, timestamp) VALUES (:chexing, :sm_num, :hot_num, :value, :detect, :state, :flag, :name, datetime('now', 'localtime'))"); db.transaction(); for (int i = 1; i <= numRows; ++i) { query.bindValue(":chexing", QString("chexing%1").arg(i)); query.bindValue(":sm_num", QString("sm_num%1").arg(i)); query.bindValue(":hot_num", QString("hot_num%1").arg(i)); query.bindValue(":value", i * 1.0); query.bindValue(":detect", QString("detect%1").arg(i)); query.bindValue(":state", QString("state%1").arg(i)); query.bindValue(":flag", QString("flag%1").arg(i)); query.bindValue(":name", QString("name%1").arg(i)); if (!query.exec()) { db.rollback(); qDebug() << "Error inserting data:" << query.lastError(); return false; } } db.commit(); return true; } QVector getAllData() { QVector data; if (!db.isOpen() && !db.open()) { if (!init_Database()) { qDebug() << "Error: Unable to open the database"; return data; } } QSqlQuery query(db); // 明确指定列顺序,确保与导出表头匹配 if (!query.exec("SELECT id, chexing, sm_num, hot_num, value, detect, state, flag, name, timestamp FROM res_data_t")) { qDebug() << "Error: failed to execute query -" << query.lastError(); return data; } while (query.next()) { QVariantList row; for (int i = 0; i < query.record().count(); ++i) { row.append(query.value(i)); } data.append(row); } return data; } bool insert_Info_t(const QString &column, const QVariant &value) { if (!db.isOpen() && !db.open()) { qDebug() << "Error: Unable to open the database"; if (!init_Database()) { return false; } } QSqlQuery query(db); query.prepare("SELECT COUNT(*) FROM info_t"); if (!query.exec() || !query.next()) { qDebug() << "Error: Unable to check data in info_t table" << query.lastError(); return false; } int count = query.value(0).toInt(); if (count == 0) { query.prepare(QString("INSERT INTO info_t (%1) VALUES (:value)").arg(column)); } else { query.prepare(QString("UPDATE info_t SET %1 = :value").arg(column)); } query.bindValue(":value", value); if (!query.exec()) { qDebug() << "Error: Unable to insert/update data in info_t table" << query.lastError(); return false; } return true; } bool update_Info_t(const QString &column, const QVariant &value) { if (!db.isOpen() && !db.open()) { qDebug() << "Error: Unable to open the database"; if (!init_Database()) { return false; } } QSqlQuery query(db); query.prepare(QString("UPDATE info_t SET %1 = :value").arg(column)); query.bindValue(":value", value); if (!query.exec()) { qDebug() << "Error: Unable to update data in info_t table" << query.lastError(); return false; } return true; } QVariant read_Info_t(const QString &column) { if (!db.isOpen() && !db.open()) { qDebug() << "Error: Unable to open the database"; if (!init_Database()) { return QVariant(); } } QSqlQuery query(db); query.prepare(QString("SELECT %1 FROM info_t").arg(column)); if (!query.exec()) { qDebug() << "Error: Unable to read data from info_t table" << query.lastError(); return QVariant(); } if (query.next()) { return query.value(0); } return QVariant(); } bool delete_Info_t() { if (!db.isOpen() && !db.open()) { qDebug() << "Error: Unable to open the database"; if (!init_Database()) { return false; } } QSqlQuery query(db); query.prepare("DELETE FROM info_t"); if (!query.exec()) { qDebug() << "Error: Unable to clear data from info_t table" << query.lastError(); return false; } return true; } QMap read_all_Info_t() { QMap data; QSqlDatabase db = QSqlDatabase::database(); if (!db.isOpen() && !db.open()) { qDebug() << "Error: Unable to open the database"; if (!init_Database()) { return data; } } QSqlQuery query(db); query.prepare("SELECT * FROM info_t"); if (!query.exec()) { qDebug() << "Error: Unable to read data from info_t table" << query.lastError(); return data; } if (query.next()) { for (int i = 0; i < query.record().count(); ++i) { QString columnName = query.record().fieldName(i); data[columnName] = query.value(i); } } return data; } bool insertOrUpdateDailyData(int daily_inspection_count, int manual_inspection_count, int qualified, int over_limit, int under_limit, double max_value, double min_value, double qualification_rate) { if (!db.isOpen() && !db.open()) { qDebug() << "Error: Unable to open the database"; if (!init_Database()) { return false; } } QSqlQuery query(db); QString currentDate = QDate::currentDate().toString("yyyy-MM-dd"); query.prepare("SELECT ID, date FROM daily_data_t ORDER BY ID DESC LIMIT 1"); if (!query.exec()) { qDebug() << "Error: Unable to retrieve data from daily_data_t table" << query.lastError(); return false; } int latestId = -1; QString latestDate; if (query.next()) { latestId = query.value(0).toInt(); latestDate = query.value(1).toString(); } // qDebug() << "latestDate:" << latestDate; // qDebug() << "currentDate:" << currentDate; QString latestDateOnly = latestDate.left(10); // qDebug() << "latestDateOnly:" << latestDateOnly; if (latestDateOnly == currentDate) { query.prepare("UPDATE daily_data_t SET daily_inspection_count = :daily_inspection_count, " "manual_inspection_count = :manual_inspection_count, qualified = :qualified, " "over_limit = :over_limit, under_limit = :under_limit, max_value = :max_value, " "min_value = :min_value, qualification_rate = :qualification_rate " "WHERE ID = :id"); query.bindValue(":id", latestId); } else { query.prepare("INSERT INTO daily_data_t (daily_inspection_count, manual_inspection_count, qualified, over_limit, under_limit, max_value, min_value, qualification_rate, date) " "VALUES (:daily_inspection_count, :manual_inspection_count, :qualified, :over_limit, :under_limit, :max_value, :min_value, :qualification_rate, datetime('now', 'localtime'))"); } query.bindValue(":daily_inspection_count", daily_inspection_count); query.bindValue(":manual_inspection_count", manual_inspection_count); query.bindValue(":qualified", qualified); query.bindValue(":over_limit", over_limit); query.bindValue(":under_limit", under_limit); query.bindValue(":max_value", max_value); query.bindValue(":min_value", min_value); query.bindValue(":qualification_rate", qualification_rate); if (!query.exec()) { qDebug() << "Error: Unable to insert or update data in daily_data_t table" << query.lastError(); return false; } return true; } QList getLastFiveDailyDataSkippingToday() { QList dataList; if (!db.isOpen() && !db.open()) { qDebug() << "Error: Unable to open the database"; return dataList; } QSqlQuery query(db); QString currentDate = QDate::currentDate().toString("yyyy-MM-dd"); query.prepare("SELECT date FROM daily_data_t ORDER BY ID DESC LIMIT 1"); if (!query.exec()) { qDebug() << "Error: Unable to retrieve data from daily_data_t table" << query.lastError(); return dataList; } QString latestDate; if (query.next()) { latestDate = query.value(0).toString(); } QString latestDateOnly = latestDate.left(10); // qDebug() << "currentDate:" << currentDate; // qDebug() << "latestDateOnly:" << latestDateOnly; if (latestDateOnly == currentDate) { query.prepare("SELECT ID, daily_inspection_count, manual_inspection_count, qualified, over_limit, under_limit, max_value, min_value, qualification_rate, date " "FROM daily_data_t WHERE date < :currentDate ORDER BY ID DESC LIMIT 5"); query.bindValue(":currentDate", currentDate); } else { query.prepare("SELECT ID, daily_inspection_count, manual_inspection_count, qualified, over_limit, under_limit, max_value, min_value, qualification_rate, date " "FROM daily_data_t ORDER BY ID DESC LIMIT 5"); } if (!query.exec()) { qDebug() << "Error: Unable to retrieve data from daily_data_t table" << query.lastError(); return dataList; } while (query.next()) { QVariantList row; row << query.value(0) // ID << query.value(1) // daily_inspection_count << query.value(2) // manual_inspection_count << query.value(3) // qualified << query.value(4) // over_limit << query.value(5) // under_limit << query.value(6) // max_value << query.value(7) // min_value << query.value(8) // qualification_rate << query.value(9); // date dataList.append(row); } return dataList; } QString get_today_daliy_t(int &daily_cnt, int &daily_cnt_manual, int &daily_qualified_cnt, int &daily_cnt_over, int &daily_cnt_down, double &daily_cnt_max, double &daily_cnt_min) { if (!db.isOpen() && !db.open()) { qDebug() << "Error: Unable to open the database"; return ""; } QSqlQuery query(db); QString currentDate = QDate::currentDate().toString("yyyy-MM-dd"); // qDebug() << "Current date: " << currentDate; query.prepare("SELECT date FROM daily_data_t ORDER BY ID DESC LIMIT 1"); if (!query.exec()) { qDebug() << "Error: Unable to retrieve data from daily_data_t table" << query.lastError(); return ""; } QString latestDate; if (query.next()) { latestDate = query.value(0).toString(); // qDebug() << "Latest date in database: " << latestDate; } else { qDebug() << "No records found in daily_data_t table"; return ""; } QString latestDateOnly = latestDate.left(10); // qDebug() << "Latest date only: " << latestDateOnly; if (latestDateOnly == currentDate) { query.prepare("SELECT daily_inspection_count, manual_inspection_count, qualified, over_limit, under_limit, max_value, min_value " "FROM daily_data_t WHERE date(date) = :date"); query.bindValue(":date", currentDate); if (!query.exec()) { qDebug() << "Error: Unable to retrieve today's data from daily_data_t table" << query.lastError(); return ""; } if (query.next()) { daily_cnt = query.value(0).toInt(); // daily_inspection_count // qDebug() << "daily_cnt db " << daily_cnt; daily_cnt_manual = query.value(1).toInt(); // manual_inspection_count daily_qualified_cnt = query.value(2).toInt(); // qualified daily_cnt_over = query.value(3).toInt(); // over_limit daily_cnt_down = query.value(4).toInt(); // under_limit daily_cnt_max = query.value(5).toDouble(); // max_value daily_cnt_min = query.value(6).toDouble(); // min_value } else { qDebug() << "No data found for today's date"; return ""; } return latestDateOnly; } else { daily_cnt = 0; daily_cnt_manual = 0; daily_qualified_cnt = 0; daily_cnt_over = 0; daily_cnt_down = 0; daily_cnt_max = 0; daily_cnt_min = 0; qDebug() << "Latest date does not match current date"; return ""; } } bool updateLastDate() { if (!db.isOpen()) { qWarning() << "Database is not open!"; return false; } QSqlQuery query(db); if (!query.exec("SELECT date FROM daily_data_t ORDER BY ID DESC LIMIT 1")) { qWarning() << "Failed to execute query:" << query.lastError().text(); return false; } if (!query.next()) { qWarning() << "No records found in the table."; return false; } QDate lastDate = query.value(0).toDate(); qDebug() << "Last date in the table:" << lastDate; QDate newDate = lastDate.addDays(-1); qDebug() << "New date after subtracting one day:" << newDate; QSqlQuery updateQuery(db); updateQuery.prepare("UPDATE daily_data_t SET date = :newDate WHERE ID = (SELECT MAX(ID) FROM daily_data_t)"); updateQuery.bindValue(":newDate", newDate); if (!updateQuery.exec()) { qWarning() << "Failed to update date:" << updateQuery.lastError().text(); return false; } qDebug() << "Date updated successfully."; return true; } }