|
@@ -0,0 +1,292 @@
|
|
|
+#include "FromSQLite.h"
|
|
|
+
|
|
|
+
|
|
|
+#include <QSqlError>
|
|
|
+#include <QSqlQuery>
|
|
|
+#include <QSqlRecord>
|
|
|
+#include <QVariant>
|
|
|
+
|
|
|
+#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<OneTemplateInfo>& 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<OnePlanItemInfo>& 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<int>(it.onWeekDay))
|
|
|
+ .arg(it.onDateTime.date().toString("yyyy-MM-dd"))
|
|
|
+ .arg(it.onDateTime.time().toString("hh:mm:ss"))
|
|
|
+ .arg(static_cast<int>(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<OneTemplateInfo>& 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<OnePlanItemInfo>& 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<enum_WeekDay>(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<enum_WeekDay>(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<OneTemplateInfo, QList<OnePlanItemInfo>>& 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<OneTemplateInfo, QString>& 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.key().templateName).arg(it.value());
|
|
|
+ // 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;
|
|
|
+}
|
|
|
+
|
|
|
+
|