#include "FromSQLite.h" #include #include #include #include #include "SqlQuery.h" #include "TransmitterSwitchInfo.h" FromSQLite::FromSQLite() { m_logger = spdlog::get("Plan"); if(m_logger == nullptr) { fmt::print("获取日志对象失败\n"); return; } } FromSQLite::~FromSQLite() { } /* 初始化数据库 */ void FromSQLite::initDB(const QString dbPath) { /* 去掉路径最后的斜杠 */ QString dbName; if(dbPath.endsWith("/")) { dbName = dbPath.left(dbPath.length() - 1); } dbName = dbName + "/ExecPlan.db"; SPDLOG_LOGGER_DEBUG(m_logger,"数据库路径:{}", dbName.toStdString()); /* 连接数据库 */ m_DB = QSqlDatabase::addDatabase("QSQLITE", "ExecPlan"); m_DB.setDatabaseName(dbName); if(!m_DB.open()) { SPDLOG_LOGGER_INFO(m_logger,"{}打开失败:{}",dbName.toStdString(),m_DB.lastError().text().toStdString()); return; } /* 检查表格是否存在 */ QString strCheckTable = QString(cmd_CheckTable).arg("tExecPlanTemplate"); // SPDLOG_LOGGER_DEBUG(m_logger,"检查表格是否存在:{}", strCheckTable.toStdString()); /* 创建表格 */ QSqlQuery query(m_DB); if(!query.exec(strCheckTable)) { SPDLOG_LOGGER_ERROR(m_logger,"检查表格失败:{}", query.lastError().text().toStdString()); return; } /* 如果表格不存在,创建表格 */ bool tableExists = false; while(query.next()) { QSqlRecord record = query.record(); if(!record.isEmpty()) { tableExists = true; break; } } // SPDLOG_LOGGER_DEBUG(m_logger,"表格是否存在:{}", tableExists); query.clear(); if(!tableExists) { /* 执行创建表格的命令 */ if(!query.exec(cmd_CreateExecPlanTamplate)) { SPDLOG_LOGGER_ERROR(m_logger,"创建表格失败:{}", query.lastError().text().toStdString()); return; }else { SPDLOG_LOGGER_DEBUG(m_logger,"创建表格成功:{}", "tExecPlanTemplate"); } } } /* 获取模版名称列表 */ bool FromSQLite::getTemplateList(int chnID, QList& listTemplate) { if(m_DB.isOpen() == false) { SPDLOG_LOGGER_ERROR(m_logger,"数据库没有打开"); return false; } /* 查询模版列表 */ QString strSql = QString(cmd_GetTemplateList); // SPDLOG_LOGGER_DEBUG(m_logger,"查询模版列表:{}", strSql.toStdString()); QSqlQuery query(m_DB); if(!query.exec(strSql)) { SPDLOG_LOGGER_ERROR(m_logger,"查询模版列表失败:{}", query.lastError().text().toStdString()); return false; } while(query.next()) { QSqlRecord rec = query.record(); OneTemplateInfo info; info.templateName = rec.value("TemplateName").toString(); info.channelInfo.ChannelID = chnID; listTemplate.append(info); } return true; } /* 保存模板 */ bool FromSQLite::saveTemplate(const QString templateName, const QList& listPlan) { if(m_DB.isOpen() == false) { SPDLOG_LOGGER_ERROR(m_logger,"数据库没有打开"); return false; } for(const auto& it : listPlan) { /* 插入模版数据 */ QString strSql = QString(cmd_InsertTemplate) .arg(templateName) .arg(it.ChannelID) .arg(it.ChannelName) .arg(static_cast(it.onWeekDay)) .arg(it.onDateTime.date().toString("yyyy-MM-dd")) .arg(it.onDateTime.time().toString("hh:mm:ss")) .arg(static_cast(it.offWeekDay)) .arg(it.offDateTime.date().toString("yyyy-MM-dd")) .arg(it.offDateTime.time().toString("hh:mm:ss")); /* 执行插入模版数据的命令 */ // SPDLOG_LOGGER_DEBUG(m_logger,"插入模版数据:{}", strSql.toStdString()); QSqlQuery query(m_DB); if(!query.exec(strSql)) { SPDLOG_LOGGER_ERROR(m_logger,"插入模版数据失败:{}", query.lastError().text().toStdString()); return false; } } return true; } /* 删除模版 */ bool FromSQLite::deleteTemplate(const OneTemplateInfo& info) { if(m_DB.isOpen() == false) { SPDLOG_LOGGER_ERROR(m_logger,"数据库没有打开"); return false; } /* 删除模版数据 */ QString strSql = QString(cmd_DeleteTemplate).arg(info.templateName); // SPDLOG_LOGGER_DEBUG(m_logger,"删除模版数据:{}", strSql.toStdString()); QSqlQuery query(m_DB); if(!query.exec(strSql)) { SPDLOG_LOGGER_ERROR(m_logger,"删除模版数据失败:{}", query.lastError().text().toStdString()); return false; } return true; } /* 删除模版列表 */ bool FromSQLite::deleteTemplateList(const QList& listTemplate) { if(m_DB.isOpen() == false) { SPDLOG_LOGGER_ERROR(m_logger,"数据库没有打开"); return false; } for(const auto& it : listTemplate) { /* 删除模版数据 */ QString strSql = QString(cmd_DeleteTemplate).arg(it.templateName); QSqlQuery query(m_DB); if(!query.exec(strSql)) { SPDLOG_LOGGER_ERROR(m_logger,"删除模版数据失败:{}", query.lastError().text().toStdString()); return false; } } return true; } /* 获取模版数据 */ bool FromSQLite::getTemplateData(const OneTemplateInfo& info, QList& listPlan) { if(m_DB.isOpen() == false) { SPDLOG_LOGGER_ERROR(m_logger,"数据库没有打开"); return false; } /* 查询模版数据 */ QString strSql = QString(cmd_GetTemplateData).arg(info.templateName); // SPDLOG_LOGGER_DEBUG(m_logger,"查询模版数据:{}", strSql.toStdString()); QSqlQuery query(m_DB); if(!query.exec(strSql)) { SPDLOG_LOGGER_ERROR(m_logger,"查询模版数据失败:{}", query.lastError().text().toStdString()); return false; } while(query.next()) { QSqlRecord rec = query.record(); OnePlanItemInfo planInfo; planInfo.ChannelID = rec.value("ChannelID").toInt(); planInfo.ChannelName = rec.value("ChannelName").toString(); planInfo.onWeekDay = static_cast(rec.value("OnWeekDay").toInt()); planInfo.onDateTime.setDate(QDate::fromString(rec.value("OnDate").toString(), "yyyy-MM-dd")); planInfo.onDateTime.setTime(QTime::fromString(rec.value("OnTime").toString(), "hh:mm:ss")); planInfo.offWeekDay = static_cast(rec.value("OffWeekDay").toInt()); planInfo.offDateTime.setDate(QDate::fromString(rec.value("OffDate").toString(), "yyyy-MM-dd")); planInfo.offDateTime.setTime(QTime::fromString(rec.value("OffTime").toString(), "hh:mm:ss")); listPlan.append(planInfo); } return true; } /* 修改模版列表 */ bool FromSQLite::modifyTemplateList(const QMap>& mapTemplate) { if(m_DB.isOpen() == false) { SPDLOG_LOGGER_ERROR(m_logger,"数据库没有打开"); return false; } /* 先删除模版 */ if(deleteTemplateList(mapTemplate.keys()) == false) { SPDLOG_LOGGER_ERROR(m_logger,"删除模版失败"); return false; } /* 再插入模版 */ for(auto it = mapTemplate.begin(); it != mapTemplate.end(); it++) { if(saveTemplate(it.key().templateName, it.value()) == false) { SPDLOG_LOGGER_ERROR(m_logger,"插入模版失败"); return false; } } return true; } /** * @brief 更新模板名称 * * @param mapTemplateName QString是新的模版名称,旧的名称在key中 * @return true * @return false */ bool FromSQLite::updateTemplateName(const QMap& mapTemplateName) { if(m_DB.isOpen() == false) { SPDLOG_LOGGER_ERROR(m_logger,"数据库没有打开"); return false; } /* 更新模版名称 */ for(auto it = mapTemplateName.begin(); it != mapTemplateName.end(); it++) { QString strSql = QString(cmd_UpdateTemplateName).arg(it.value()).arg(it.key().templateName); // SPDLOG_LOGGER_DEBUG(m_logger,"更新模版名称:{}", strSql.toStdString()); QSqlQuery query(m_DB); if(!query.exec(strSql)) { SPDLOG_LOGGER_ERROR(m_logger,"更新模版名称失败:{}", query.lastError().text().toStdString()); return false; } } return true; }