Browse Source

V1.5.2
1、完成了对ESM8C上位机的适配

Apple 4 months ago
parent
commit
ca7c1c1dd3
100 changed files with 919 additions and 369 deletions
  1. 1 1
      CMakeLists.txt
  2. 52 0
      SQLite.sql
  3. 3 3
      TransmitterSwitch/CMakeLists.txt
  4. 10 0
      TransmitterSwitch/ExecPlanData/PlanData.cpp
  5. 2 0
      TransmitterSwitch/ExecPlanData/PlanData.h
  6. 292 0
      TransmitterSwitch/FromSQL/FromSQLite.cpp
  7. 50 0
      TransmitterSwitch/FromSQL/FromSQLite.h
  8. 1 1
      TransmitterSwitch/FromSQL/FromWebAPI.cpp
  9. 0 0
      TransmitterSwitch/FromSQL/FromWebAPI.h
  10. 77 0
      TransmitterSwitch/FromSQL/SqlQuery.h
  11. 14 1
      TransmitterSwitch/ManagerPlan/managerplan.cpp
  12. 0 251
      TransmitterSwitch/Resource/QSS/dark/oneitem.qss
  13. 1 5
      TransmitterSwitch/Resource/QSS/dark/pBtn_frequency.qss
  14. 26 0
      TransmitterSwitch/Resource/QSS/white/pBtn_frequency.qss
  15. 96 0
      TransmitterSwitch/Resource/QSS/white/plancard.qss
  16. 49 70
      TransmitterSwitch/Resource/QSS/white/transmitterswitch.qss
  17. 2 3
      TransmitterSwitch/Resource/TransSwitch.qrc
  18. 39 2
      TransmitterSwitch/Template/templatemanager.cpp
  19. 6 3
      TransmitterSwitch/Template/templatemanager.h
  20. 23 0
      TransmitterSwitch/TransmitterSwitchInfo.cpp
  21. 85 0
      TransmitterSwitch/TransmitterSwitchInfo.h
  22. 3 3
      TransmitterSwitch/UserData/pBtnUserData2.h
  23. 1 1
      TransmitterSwitch/common/FlowLayout/flowlayout.cpp
  24. BIN
      TransmitterSwitch/common/LHHTTPAPI/lib/.DS_Store
  25. BIN
      TransmitterSwitch/common/LHHTTPAPI/lib/MinGW_64/LHSqlWebInterface.dll
  26. BIN
      TransmitterSwitch/common/LHHTTPAPI/lib/MinGW_64/LHSqlWebInterfaced.dll
  27. 3 0
      TransmitterSwitch/common/Logs/loginit.cpp
  28. 83 25
      TransmitterSwitch/common/spdlog/Findspdlog.cmake
  29. 0 0
      TransmitterSwitch/common/spdlog/include_1.14.1/spdlog/async.h
  30. 0 0
      TransmitterSwitch/common/spdlog/include_1.14.1/spdlog/async_logger-inl.h
  31. 0 0
      TransmitterSwitch/common/spdlog/include_1.14.1/spdlog/async_logger.h
  32. 0 0
      TransmitterSwitch/common/spdlog/include_1.14.1/spdlog/cfg/argv.h
  33. 0 0
      TransmitterSwitch/common/spdlog/include_1.14.1/spdlog/cfg/env.h
  34. 0 0
      TransmitterSwitch/common/spdlog/include_1.14.1/spdlog/cfg/helpers-inl.h
  35. 0 0
      TransmitterSwitch/common/spdlog/include_1.14.1/spdlog/cfg/helpers.h
  36. 0 0
      TransmitterSwitch/common/spdlog/include_1.14.1/spdlog/common-inl.h
  37. 0 0
      TransmitterSwitch/common/spdlog/include_1.14.1/spdlog/common.h
  38. 0 0
      TransmitterSwitch/common/spdlog/include_1.14.1/spdlog/details/backtracer-inl.h
  39. 0 0
      TransmitterSwitch/common/spdlog/include_1.14.1/spdlog/details/backtracer.h
  40. 0 0
      TransmitterSwitch/common/spdlog/include_1.14.1/spdlog/details/circular_q.h
  41. 0 0
      TransmitterSwitch/common/spdlog/include_1.14.1/spdlog/details/console_globals.h
  42. 0 0
      TransmitterSwitch/common/spdlog/include_1.14.1/spdlog/details/file_helper-inl.h
  43. 0 0
      TransmitterSwitch/common/spdlog/include_1.14.1/spdlog/details/file_helper.h
  44. 0 0
      TransmitterSwitch/common/spdlog/include_1.14.1/spdlog/details/fmt_helper.h
  45. 0 0
      TransmitterSwitch/common/spdlog/include_1.14.1/spdlog/details/log_msg-inl.h
  46. 0 0
      TransmitterSwitch/common/spdlog/include_1.14.1/spdlog/details/log_msg.h
  47. 0 0
      TransmitterSwitch/common/spdlog/include_1.14.1/spdlog/details/log_msg_buffer-inl.h
  48. 0 0
      TransmitterSwitch/common/spdlog/include_1.14.1/spdlog/details/log_msg_buffer.h
  49. 0 0
      TransmitterSwitch/common/spdlog/include_1.14.1/spdlog/details/mpmc_blocking_q.h
  50. 0 0
      TransmitterSwitch/common/spdlog/include_1.14.1/spdlog/details/null_mutex.h
  51. 0 0
      TransmitterSwitch/common/spdlog/include_1.14.1/spdlog/details/os-inl.h
  52. 0 0
      TransmitterSwitch/common/spdlog/include_1.14.1/spdlog/details/os.h
  53. 0 0
      TransmitterSwitch/common/spdlog/include_1.14.1/spdlog/details/periodic_worker-inl.h
  54. 0 0
      TransmitterSwitch/common/spdlog/include_1.14.1/spdlog/details/periodic_worker.h
  55. 0 0
      TransmitterSwitch/common/spdlog/include_1.14.1/spdlog/details/registry-inl.h
  56. 0 0
      TransmitterSwitch/common/spdlog/include_1.14.1/spdlog/details/registry.h
  57. 0 0
      TransmitterSwitch/common/spdlog/include_1.14.1/spdlog/details/synchronous_factory.h
  58. 0 0
      TransmitterSwitch/common/spdlog/include_1.14.1/spdlog/details/tcp_client-windows.h
  59. 0 0
      TransmitterSwitch/common/spdlog/include_1.14.1/spdlog/details/tcp_client.h
  60. 0 0
      TransmitterSwitch/common/spdlog/include_1.14.1/spdlog/details/thread_pool-inl.h
  61. 0 0
      TransmitterSwitch/common/spdlog/include_1.14.1/spdlog/details/thread_pool.h
  62. 0 0
      TransmitterSwitch/common/spdlog/include_1.14.1/spdlog/details/udp_client-windows.h
  63. 0 0
      TransmitterSwitch/common/spdlog/include_1.14.1/spdlog/details/udp_client.h
  64. 0 0
      TransmitterSwitch/common/spdlog/include_1.14.1/spdlog/details/windows_include.h
  65. 0 0
      TransmitterSwitch/common/spdlog/include_1.14.1/spdlog/fmt/bin_to_hex.h
  66. 0 0
      TransmitterSwitch/common/spdlog/include_1.14.1/spdlog/fmt/bundled/args.h
  67. 0 0
      TransmitterSwitch/common/spdlog/include_1.14.1/spdlog/fmt/bundled/chrono.h
  68. 0 0
      TransmitterSwitch/common/spdlog/include_1.14.1/spdlog/fmt/bundled/color.h
  69. 0 0
      TransmitterSwitch/common/spdlog/include_1.14.1/spdlog/fmt/bundled/compile.h
  70. 0 0
      TransmitterSwitch/common/spdlog/include_1.14.1/spdlog/fmt/bundled/core.h
  71. 0 0
      TransmitterSwitch/common/spdlog/include_1.14.1/spdlog/fmt/bundled/fmt.license.rst
  72. 0 0
      TransmitterSwitch/common/spdlog/include_1.14.1/spdlog/fmt/bundled/format-inl.h
  73. 0 0
      TransmitterSwitch/common/spdlog/include_1.14.1/spdlog/fmt/bundled/format.h
  74. 0 0
      TransmitterSwitch/common/spdlog/include_1.14.1/spdlog/fmt/bundled/locale.h
  75. 0 0
      TransmitterSwitch/common/spdlog/include_1.14.1/spdlog/fmt/bundled/os.h
  76. 0 0
      TransmitterSwitch/common/spdlog/include_1.14.1/spdlog/fmt/bundled/ostream.h
  77. 0 0
      TransmitterSwitch/common/spdlog/include_1.14.1/spdlog/fmt/bundled/printf.h
  78. 0 0
      TransmitterSwitch/common/spdlog/include_1.14.1/spdlog/fmt/bundled/ranges.h
  79. 0 0
      TransmitterSwitch/common/spdlog/include_1.14.1/spdlog/fmt/bundled/std.h
  80. 0 0
      TransmitterSwitch/common/spdlog/include_1.14.1/spdlog/fmt/bundled/xchar.h
  81. 0 0
      TransmitterSwitch/common/spdlog/include_1.14.1/spdlog/fmt/chrono.h
  82. 0 0
      TransmitterSwitch/common/spdlog/include_1.14.1/spdlog/fmt/compile.h
  83. 0 0
      TransmitterSwitch/common/spdlog/include_1.14.1/spdlog/fmt/fmt.h
  84. 0 0
      TransmitterSwitch/common/spdlog/include_1.14.1/spdlog/fmt/ostr.h
  85. 0 0
      TransmitterSwitch/common/spdlog/include_1.14.1/spdlog/fmt/ranges.h
  86. 0 0
      TransmitterSwitch/common/spdlog/include_1.14.1/spdlog/fmt/std.h
  87. 0 0
      TransmitterSwitch/common/spdlog/include_1.14.1/spdlog/fmt/xchar.h
  88. 0 0
      TransmitterSwitch/common/spdlog/include_1.14.1/spdlog/formatter.h
  89. 0 0
      TransmitterSwitch/common/spdlog/include_1.14.1/spdlog/fwd.h
  90. 0 0
      TransmitterSwitch/common/spdlog/include_1.14.1/spdlog/logger-inl.h
  91. 0 0
      TransmitterSwitch/common/spdlog/include_1.14.1/spdlog/logger.h
  92. 0 0
      TransmitterSwitch/common/spdlog/include_1.14.1/spdlog/mdc.h
  93. 0 0
      TransmitterSwitch/common/spdlog/include_1.14.1/spdlog/pattern_formatter-inl.h
  94. 0 0
      TransmitterSwitch/common/spdlog/include_1.14.1/spdlog/pattern_formatter.h
  95. 0 0
      TransmitterSwitch/common/spdlog/include_1.14.1/spdlog/sinks/android_sink.h
  96. 0 0
      TransmitterSwitch/common/spdlog/include_1.14.1/spdlog/sinks/ansicolor_sink-inl.h
  97. 0 0
      TransmitterSwitch/common/spdlog/include_1.14.1/spdlog/sinks/ansicolor_sink.h
  98. 0 0
      TransmitterSwitch/common/spdlog/include_1.14.1/spdlog/sinks/base_sink-inl.h
  99. 0 0
      TransmitterSwitch/common/spdlog/include_1.14.1/spdlog/sinks/base_sink.h
  100. 0 0
      TransmitterSwitch/common/spdlog/include_1.14.1/spdlog/sinks/basic_file_sink-inl.h

+ 1 - 1
CMakeLists.txt

@@ -126,7 +126,7 @@ find_package(QT NAMES Qt6 Qt5 REQUIRED COMPONENTS Widgets)
 find_package(Qt5 COMPONENTS
     Widgets
     Core
-    Network
+    Sql
     REQUIRED
 )
 

+ 52 - 0
SQLite.sql

@@ -0,0 +1,52 @@
+-- Active: 1744884470757@@127.0.0.1@3306
+
+
+
+#获取所有的模版
+SELECT *
+FROM tExecPlanTemplate;
+
+#获取模板列表
+SELECT EPT.TemplateName, EPT.ChannelID 
+FROM tExecPlanTemplate AS EPT
+WHERE ChannelID = %1;
+
+#获取所有的模板列表,无需关注频率
+SELECT EPT.TemplateName, EPT.ChannelID 
+FROM tExecPlanTemplate AS EPT
+GROUP BY EPT.TemplateName;
+
+
+#================================================================================================
+# 表格操作
+#================================================================================================
+
+#检查表格是否存在
+SELECT name 
+FROM sqlite_master 
+WHERE type='table' AND name='%1';
+
+
+#创建表格
+CREATE TABLE IF NOT EXISTS "tExecPlanTemplate"
+(
+    "TemplateName" VARCHAR(255) NOT NULL,
+    "ChannelID" INT NOT NULL,
+    "ChannelName" VARCHAR(255),
+    "OnWeekDay" INT NOT NULL,
+    "OnDate" VARCHAR(255) NOT NULL,
+    "OnTime" VARCHAR(255) NOT NULL,
+    "OffWeekDay" INT NOT NULL,
+    "OffDate" VARCHAR(255) NOT NULL,
+    "OffTime" VARCHAR(255) NOT NULL,
+
+    "DeviceName" VARCHAR(255),
+    "ActionName" VARCHAR(255),
+    "ActionID" INT
+)
+
+#删除表格
+DROP TABLE IF EXISTS "tExecPlanTemplate";
+
+
+

+ 3 - 3
TransmitterSwitch/CMakeLists.txt

@@ -11,7 +11,7 @@ file(GLOB LOCAL_SRC
     ${CMAKE_CURRENT_SOURCE_DIR}/*.ui
     ${CMAKE_CURRENT_SOURCE_DIR}/*.qrc
 
-    ${CMAKE_CURRENT_SOURCE_DIR}/WebAPI/*.cpp
+    ${CMAKE_CURRENT_SOURCE_DIR}/FromSQL/*.cpp
     ${CMAKE_CURRENT_SOURCE_DIR}/Resource/*.qrc
     ${CMAKE_CURRENT_SOURCE_DIR}/UserData/*.cpp
     ${CMAKE_CURRENT_SOURCE_DIR}/ExecPlanData/*.cpp
@@ -54,7 +54,7 @@ target_include_directories(${lib_name} PRIVATE
     ${CMAKE_CURRENT_SOURCE_DIR}
     ${CMAKE_CURRENT_SOURCE_DIR}/LHLog
 
-    ${CMAKE_CURRENT_SOURCE_DIR}/WebAPI
+    ${CMAKE_CURRENT_SOURCE_DIR}/FromSQL
     ${CMAKE_CURRENT_SOURCE_DIR}/UserData
     ${CMAKE_CURRENT_SOURCE_DIR}/ExecPlanData
     ${CMAKE_CURRENT_SOURCE_DIR}/Template
@@ -85,7 +85,7 @@ target_include_directories(${lib_name} PRIVATE
 target_link_libraries(${lib_name} PRIVATE
     Qt5::Widgets
     Qt5::Core
-    Qt5::Network
+    Qt5::Sql
 )
 
 #链接外部库

+ 10 - 0
TransmitterSwitch/ExecPlanData/PlanData.cpp

@@ -37,6 +37,16 @@ void PlanData::deleteOneCard(int channelID)
     }
 }
 
+/* 删除所有的卡片 */
+void PlanData::deleteAllCard()
+{
+    for(auto& it : m_mapPlanCard)
+    {
+        delete it;
+    }
+    m_mapPlanCard.clear();
+}
+
 /* 清空一个卡片的计划 */
 void PlanData::clearOnePlanItem(int channelID)
 {

+ 2 - 0
TransmitterSwitch/ExecPlanData/PlanData.h

@@ -25,6 +25,8 @@ public:
     PlanCard* createOneCard(const ChannelInfo& chnInfo);
     /* 删除一个卡片 */
     void deleteOneCard(int channelID);
+    /* 删除所有的卡片 */
+    void deleteAllCard();
     /* 清空一个卡片的计划 */
     void clearOnePlanItem(int channelID);
     /* 清空所有的计划 */

+ 292 - 0
TransmitterSwitch/FromSQL/FromSQLite.cpp

@@ -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;
+}
+
+

+ 50 - 0
TransmitterSwitch/FromSQL/FromSQLite.h

@@ -0,0 +1,50 @@
+#ifndef FROMSQLITE_H
+#define FROMSQLITE_H
+
+#include "spdlog/spdlog.h"
+
+#include <QString>
+#include <QSqlDatabase>
+
+
+struct OneTemplateInfo;
+struct OnePlanItemInfo;
+
+
+/**
+ * @brief 单机版目前不考虑多个频率区分模版的问题,模版所有的频率都可以操作
+ * 
+ */
+class FromSQLite
+{
+
+public:
+    FromSQLite();
+    ~FromSQLite();
+
+    /* 初始化数据库 */
+    void initDB(const QString dbPath);
+
+    /* 获取模版名称列表 */
+    bool getTemplateList(int chnID, QList<OneTemplateInfo>& listTemplate);
+    /* 保存模板 */
+    bool saveTemplate(const QString templateName, const QList<OnePlanItemInfo>& listPlan);
+    /* 删除模版 */
+    bool deleteTemplate(const OneTemplateInfo& info);
+    /* 删除模版列表 */
+    bool deleteTemplateList(const QList<OneTemplateInfo>& listTemplate);
+    /* 获取模版数据 */
+    bool getTemplateData(const OneTemplateInfo& info, QList<OnePlanItemInfo>& listPlan);
+    /* 修改模版列表 */
+    bool modifyTemplateList(const QMap<OneTemplateInfo, QList<OnePlanItemInfo>>& mapTemplate);
+    /* 更新模板名称 */
+    bool updateTemplateName(const QMap<OneTemplateInfo, QString>& mapTemplateName);
+
+private:
+    std::shared_ptr<spdlog::logger> m_logger = nullptr;     /* 日志对象 */
+    QSqlDatabase m_DB;                                      /* 数据库对象 */
+
+};
+
+
+#endif // FROMSQLITE_H

+ 1 - 1
TransmitterSwitch/WebAPI/FromWebAPI.cpp → TransmitterSwitch/FromSQL/FromWebAPI.cpp

@@ -403,7 +403,7 @@ bool FromWebAPI::getExecPlanData(int chnID, QList<OnePlanItemInfo>& list)
         return false;
     }
 
-    // LH_WRITE_LOG_DEBUG(QString("从 EQM.tExecPlan 表格获取数据成功,计划数目:%1").arg(list.size()));
+    LH_WRITE_LOG_DEBUG(QString("从 tExecPlan 表格获取数据成功,计划数目:%1").arg(list.size()));
 
     return true;
 }

+ 0 - 0
TransmitterSwitch/WebAPI/FromWebAPI.h → TransmitterSwitch/FromSQL/FromWebAPI.h


+ 77 - 0
TransmitterSwitch/FromSQL/SqlQuery.h

@@ -0,0 +1,77 @@
+#ifndef SQLQUERY_H
+#define SQLQUERY_H
+
+#include <QString>
+
+/* ====================================================================
+ * SQLite查询语句
+ * ==================================================================== */
+
+ /* 检查表格是否存在 */
+ const QString cmd_CheckTable = R"(
+    SELECT name 
+    FROM sqlite_master 
+    WHERE type='table' AND name='%1';
+ )";
+
+
+/**
+ * @brief 创建模版表格
+ * 
+ */
+const QString cmd_CreateExecPlanTamplate = R"(
+CREATE TABLE IF NOT EXISTS "tExecPlanTemplate"
+(
+    "TemplateName" VARCHAR(255) NOT NULL,
+    "ChannelID" INT NOT NULL,
+    "ChannelName" VARCHAR(255),
+    "OnWeekDay" INT NOT NULL,
+    "OnDate" VARCHAR(255) NOT NULL,
+    "OnTime" VARCHAR(255) NOT NULL,
+    "OffWeekDay" INT NOT NULL,
+    "OffDate" VARCHAR(255) NOT NULL,
+    "OffTime" VARCHAR(255) NOT NULL,
+
+    "DeviceName" VARCHAR(255),
+    "ActionName" VARCHAR(255),
+    "ActionID" INT
+)
+)";
+
+/* 获取模版列表 */
+const QString cmd_GetTemplateList = R"(
+    SELECT EPT.TemplateName, EPT.ChannelID 
+    FROM tExecPlanTemplate AS EPT
+    GROUP BY EPT.TemplateName;
+)";
+
+
+/* 插入一条模板数据 */
+const QString cmd_InsertTemplate = R"(
+    INSERT INTO tExecPlanTemplate (TemplateName, ChannelID, ChannelName, OnWeekDay, OnDate, OnTime, OffWeekDay, OffDate, OffTime)
+    VALUES ('%1', %2, '%3', %4, '%5', '%6', %7, '%8', '%9');
+)";
+
+/* 删除模版,单机版目前不考虑频率ID */
+const QString cmd_DeleteTemplate = R"(
+    DELETE FROM tExecPlanTemplate 
+    WHERE TemplateName = '%1';
+)";
+
+
+/* 获取一个模版数据 */
+const QString cmd_GetTemplateData = R"(
+    SELECT * 
+    FROM tExecPlanTemplate 
+    WHERE TemplateName = '%1';
+)";
+
+/* 更新模板名称 */
+const QString cmd_UpdateTemplateName = R"(
+    UPDATE tExecPlanTemplate 
+    SET TemplateName = '%1' 
+    WHERE TemplateName = '%2';
+)";
+
+
+#endif // SQLQUERY_H

+ 14 - 1
TransmitterSwitch/ManagerPlan/managerplan.cpp

@@ -4,6 +4,8 @@
 
 #include <QMouseEvent>
 #include <QDesktopWidget>
+#include <QScreen>
+
 #include "UIStyleManager.h"
 #include "OneShadowEffect.h"
 #include "TransmitterSwitchInfo.h"
@@ -30,7 +32,8 @@ ManagerPlan::ManagerPlan(Enum_Mode mode, QDialog *parent) :
     ui->widget_background->setGraphicsEffect(pShadow);
 
     /* 获取屏幕大小 */
-    auto screenRect = QApplication::desktop()->availableGeometry();
+    // auto screenRect = QApplication::desktop()->availableGeometry();
+    auto screenRect = QGuiApplication::screenAt(QCursor::pos())->geometry();
     this->resize(screenRect.width(), screenRect.height());
     /* 设置设置区域居中显示 */
     ui->widget_background->move(screenRect.width() / 2 - ui->widget_background->width() / 2,
@@ -166,6 +169,16 @@ void ManagerPlan::setPlanList(QList<OnePlanItemInfo>& listPlan)
     ui->pCard->getPlanList(list);
     /* 设置计划列表 */
     m_mapPlanInfo.insert(m_channelInfo.ChannelID, list);
+    
+    if(ui->pCard->isPlanEmpty())
+    {
+        /* 没有计划,隐藏按钮 */
+        setButtonVisible(false);
+    }else
+    {
+        /* 有计划,显示按钮 */
+        setButtonVisible(true);
+    }
 }
 
 

+ 0 - 251
TransmitterSwitch/Resource/QSS/dark/oneitem.qss

@@ -1,251 +0,0 @@
-
-QWidget
-{
-    /* font-family: 思源黑体R; */
-    /* font-weight: 400; */
-    font-size: 14px;
-    color: #D2D2D2;
-    line-height: 22px;
-    text-align: left;
-    font-style: normal;
-    text-transform: none;
-
-}
-
-QWidget#widget
-{
-    background: transparent;
-    border: 0px solid #313539;
-}
-
-QWidget#widget_content
-{
-    background: transparent;
-    border: 0px solid #313539;
-}
-
-
-/* 序号 */
-QLabel#label_num
-{
-    background: #313539;
-    border-radius: 2px 2px 2px 2px;
-    border: 1px solid #313539;
-    padding-left: 12px;
-}
-
-
-
-QPushButton#pBtn_close
-{
-    background-color: #313539;
-    border-radius: 2px 2px 2px 2px;
-    padding-left: 6px;
-
-    border: 1px solid #313539;
-    qproperty-icon: url(:/ICON/ICON/Close_Dark.png);
-    qproperty-iconSize: 20px 20px;
-}
-
-QPushButton#pBtn_close[Hover = true]
-{
-    background-color: #313539;
-    border-radius: 2px 2px 2px 2px;
-    padding-left: 6px;
-
-    border: 1px solid #438EFF;
-    qproperty-icon: url(:/ICON/ICON/Close_pass.png);
-    qproperty-iconSize: 20px 20px;
-}
-
-/* 执行时间 */
-QPushButton#pBtn_execTime, #pBtn_execDate
-{
-    background-color: #313539;
-    border-radius: 2px 2px 2px 2px;
-    padding-left: 12px;
-
-    border: 1px solid #313539;
-}
-
-QPushButton#pBtn_execTime:hover, #pBtn_execDate:hover
-{
-    background-color: #313539;
-    border-radius: 2px 2px 2px 2px;
-    padding-left: 12px;
-
-    border: 1px solid #438EFF;
-}
-
-/* 时间图标 */ 
-QPushButton#pBtn_iconTime
-{
-    background: transparent;
-    border: none;
-    qproperty-icon: url(:/ICON/ICON/Time.png);
-    qproperty-iconSize: 16px 16px;
-}
-
-/* 日期图标 */ 
-QPushButton#pBtn_iconDate
-{
-    background: transparent;
-    border: none;
-    qproperty-icon: url(:/ICON/ICON/date_dark.png);
-    qproperty-iconSize: 16px 16px;
-}
-
-
-/*=====================================================================
- * QComboBox下拉框
- *==================================================================== */
-
-QComboBox
-{
-	background-color: #313539;
-	border-radius: 4px;
-	border: 1px solid #313539;
-	/* font-weight: 400; */
-	font-size: 14px;
-	color: #D2D2D2;
-	padding-left: 12px;
-}
-QComboBox:hover, QComboBox:on 
-{
-	border: 1px solid #438EFF;
-}
-/*下拉箭头样式*/
-QComboBox::down-arrow
-{
-	height: 16px;
-	width: 16px;
-	image: url(:/ICON/ICON/DownArrow_Dark.png);
-}
-QComboBox::drop-down
-{
-    background-color:transparent;
-	padding-right:12px;
-}
-/* 下拉后,整个下拉窗体样式 */
-QComboBox QAbstractItemView
-{
-	margin: 12px;
-	font-size: 14px;
-	background-color: #5C5E61;
-	outline:0px;
-	border-radius: 4px;
-}
-/* 下拉后,整个下拉窗体每项的样式 */
-QComboBox QAbstractItemView::item 
-{
-    border-radius: 4px;
-	color: #D2D2D2;
-    height: 32px;
-	background-color: #5C5E61;
-	/* font-weight: 400; */
-	font-size: 14px;
-	padding-left: 12px;
-}
-QComboBox QAbstractItemView::item:hover 
-{
-	/* font-weight: 400; */
-    color: #FFFFFF;
-	background-color: #438EFF;
-}
-QComboBox QAbstractItemView::item:selected 
-{
-	/* font-weight: 400; */
-    color: #FFFFFF;
-	background-color: #438EFF;
-}
-
-
-/*=====================================================================
- * 报警文字和报警框
- *==================================================================== */
-
-QLabel#label_warnning
-{
-    /* font-weight: 400; */
-    font-size: 14px;
-    color: #D21F21;
-    line-height: 21px;
-    text-align: left;
-    font-style: normal;
-    padding-left: 18px;
-}
-
-QPushButton#pBtn_execTime[Warn=true], #pBtn_execDate[Warn=true]
-{
-    background-color: #313539;
-    border-radius: 2px 2px 2px 2px;
-    padding-left: 12px;
-
-    border: 1px solid #D21F21;
-}
-
-/* ==========================================================
- *  日期选择器
- * ========================================================== */
-CalendarDTEdit
-{
-	background-color: #313539;
-    border-radius: 4px;
-    padding-left:12px;
-    /* border: 1px solid rgba(255,255,255,0.15); */
-    border: 1px solid #313539;
-}
-
-CalendarDTEdit:hover
-{
-	background-color: #313539;
-    border-radius: 4px;
-    padding-left:12px;
-    border: 1px solid #438EFF;
-}
-
-CalendarDTEdit[Hover = true]
-{
-	background-color: #313539;
-    border-radius: 4px;
-    padding-left:12px;
-    border: 1px solid #438EFF;
-}
-
-CalendarDTEdit[Warn=true]
-{
-	background-color: #313539;
-    border-radius: 4px;
-    padding-left:12px;
-    border: 1px solid #D21F21;
-}
-
-CalendarDTEdit:!enabled/* 或者disable */
-{
-    background: rgba(0,0,0,0.04);
-    border: 1px solid #E6E9F4;
-}
-
-CalendarDTEdit::drop-down
-{
- 	padding-right:8px;
-	width: 16px;
-    image: url(:/ICON/ICON/date_light.png);
-}
-
-/* QDateEdit
-{
-    background-color: #313539;
-    border-radius: 4px;
-    padding-left:12px;
-    border: 1px solid rgba(255,255,255,0.15);
-}
-
-QDateEdit:hover
-{
-    background-color: #313539;
-    border-radius: 4px;
-    padding-left:12px;
-    border: 1px solid #438EFF;
-} */
-

+ 1 - 5
TransmitterSwitch/Resource/QSS/dark/pBtn_frequency.qss

@@ -1,14 +1,10 @@
 
 /* 频率按钮样式表 */
-
 QPushButton
 {
-    font-weight: normal;
+    /* font-weight: normal; */
     font-size: 14px;
-}
 
-QPushButton
-{
     text-align: left;
     padding-left: 19px;
     background: #313539;

+ 26 - 0
TransmitterSwitch/Resource/QSS/white/pBtn_frequency.qss

@@ -0,0 +1,26 @@
+
+/* 频率按钮样式表 */
+QPushButton
+{
+    color: #3A3F63;
+    /* font-weight: normal; */
+    font-size: 14px;
+    text-align: left;
+    padding-left: 19px;
+    background: transparent;
+    border-radius: 0px 0px 0px 0px;
+    border: 0px;
+}
+
+QPushButton:checked
+{   
+    color: #3A3F63;
+    text-align: left;
+    padding-left: 19px;
+    background: rgba(68,88,254,0.1);
+    border-radius: 0px;
+    border-right: 2px solid #4458FE;
+}
+
+
+

+ 96 - 0
TransmitterSwitch/Resource/QSS/white/plancard.qss

@@ -0,0 +1,96 @@
+
+/* ================================================================
+ * 外框
+ * ================================================================ */
+
+QWidget#widget
+{
+    background: transparent;
+    border-radius: 4px 4px 4px 4px;
+    border: 1px solid #E6E9F4
+}
+
+QWidget#widget[Selected = "true"]
+{
+    border-radius: 4px 4px 4px 4px;
+    border: 1px solid #4458FE;
+}
+
+
+
+/* 标题 */
+QLabel#label_title
+{
+    font-weight: 500;
+    font-size: 16px;
+    color: #3A3F63;
+    line-height: 22px;
+    text-align: left;
+    font-style: normal;
+    text-transform: none;
+
+    padding-left: 12px;
+}
+
+
+/* ================================================================
+ * TableView
+ * ================================================================ */
+
+/* 表格标题 */
+QWidget#widget_tableHeader
+{
+    background-color: #E6E9F4;
+    /* background: green; */
+    border-radius: 0px 0px 0px 0px; 
+    border: none;
+}
+
+QLabel#label_onTime, #label_offTime
+{
+    font-weight: 500;
+    font-size: 14px;
+    color: #3A3F63;
+    line-height: 22px;
+    text-align: left;
+    font-style: normal;
+    text-transform: none;
+
+    padding-left: 12px;
+}
+
+QTableView
+{
+    background: transparent;
+    font-weight: 400;
+    font-size: 14px;
+    color: #3A3F63;
+    line-height: 22px;
+    text-align: left;
+    font-style: normal;
+    text-transform: none;
+
+    /* background: #4458FE; */
+    border: 0px solid rgba(255, 255, 255, 0.1);
+    outline: none;
+}
+
+QTableView::item
+{
+    font-weight: 400;
+    font-size: 14px;
+    color: #3A3F63;
+    background: transparent;
+
+    border: none;
+    padding-left: 12px;
+    outline: none;
+}
+
+QTableView::item:selected
+{
+    color: #FFFFFF;
+    background: #4458FE;
+    border-radius: 0px 0px 0px 0px;
+    outline: none;
+}

+ 49 - 70
TransmitterSwitch/Resource/QSS/white/transmitterswitch.qss

@@ -5,10 +5,8 @@
 
 QWidget
 {
-    /* font-family: 思源黑体R; */
-    /* font-weight: 400; */
     font-size: 14px;
-    color: #1D2129;
+    color: #3A3F63;
     line-height: 22px;
     text-align: left;
     font-style: normal;
@@ -16,13 +14,9 @@ QWidget
 }
 
 /* 整体背景 */
-QWidget
-{
-    background: #FFFFFF;
-}
-
 QWidget#widget
 {
+    background: #F7F8FA;
     border-radius: 4px 4px 4px 4px;
 }
 
@@ -39,12 +33,20 @@ QPushButton
 /*===============================================================
  * widget_Top
  ================================================================*/
+QWidget#widget_top
+{
+    background-color:#FFFFFF;
+    border-radius: 4px 4px 4px 4px;
+}
+
+
 QLabel#label_X1
 {
     text-align: center;
     color: #F53F3F;
 }
 
+
 QPushButton#pBtn_defaultPlan
 {
     /* background: #202428; */
@@ -59,6 +61,7 @@ QPushButton#pBtn_defaultPlan
     border-image: url(:/ICON/ICON/Switch_Close.png);
 }
 
+
 QRadioButton#rBtn_moment::indicator:unchecked, QRadioButton#rBtn_day::indicator:unchecked
 {
     background: #FFFFFF;
@@ -75,11 +78,14 @@ QRadioButton#rBtn_moment::indicator:checked, QRadioButton#rBtn_day::indicator:ch
     border-image: url(:/ICON/ICON/rBtn_Checked.png);
 }
 
+
+
 QLabel#label_Tip
 {
     border-image: url(:/ICON/ICON/Tip_Light.png);
 }
 
+
 QLabel#label_TipText
 {
     padding:8px;
@@ -91,93 +97,66 @@ QLabel#label_TipText
 }
 
 
-/*===============================================================
- * widget_Content
- ================================================================*/
-QWidget#widget_content
+QPushButton#pBtn_editPlan, #pBtn_clearPlan, #pBtn_importPlan, #pBtn_exportPlan, #pBtn_deletePlan, #pBtn_cloneToOther, #pBtn_refresh,
+#pBtn_templateManager
 {
-    border-radius: 0px 0px 0px 0px;
+    text-align: center;
+    background-color: #FFFFFF;
+    border-radius: 2px 2px 2px 2px;
     border: 1px solid #DAE0F2;
 }
 
-QWidget#widget_weekpBtn
+QPushButton#pBtn_editPlan:hover, #pBtn_clearPlan:hover, #pBtn_importPlan:hover, #pBtn_exportPlan:hover, #pBtn_deletePlan:hover, 
+#pBtn_cloneToOther:hover, #pBtn_refresh:hover, #pBtn_templateManager:hover
 {
-    background-color: #F5F5FA;
-    border-right: 1px solid #DAE0F2;
+    text-align: center;
+    color: #4458FE;
+    background-color: #FFFFFF;
+    border-radius: 2px;
+    border: 1px solid #4458FE;
 }
 
-/* 周几按钮 */
-QPushButton#pBtn_Monday, #pBtn_Tuesday, #pBtn_Wednesday, #pBtn_Thursday, #pBtn_Friday, #pBtn_Saturday, #pBtn_Sunday, #pBtn_SpecialDay
+/* 添加按钮 */
+QPushButton#pBtn_addPlan
 {
-    /* font-weight: normal; */
-    font-size: 14px;
-
-    background-color: #F5F5FA;
-
-    text-align: left;
-    padding-left: 19px;
-    border-radius: 0px 0px 0px 0px;
-    border: 0px;
-    border-right:0px solid #4458FE;
+    text-align: center;
+    color: #FFFFFF;
+    background: #438EFF;
+    border-radius: 2px 2px 2px 2px;
 }
 
-QPushButton#pBtn_Monday:checked, #pBtn_Tuesday:checked, #pBtn_Wednesday:checked, #pBtn_Thursday:checked, #pBtn_Friday:checked, #pBtn_Saturday:checked, #pBtn_Sunday:checked, #pBtn_SpecialDay:checked
+QPushButton#pBtn_addPlan:hover
 {
-    /* font-weight: normal; */
-    font-size: 14px;
-
-    color:#4458FE;
-    background-color:rgba(68, 88, 254, 0.10);
-    text-align: left;
-    padding-left: 19px;
-    border-radius: 0px;
-    border-right: 2px solid #4458FE;
+    text-align: center;
+    color: #FFFFFF;
+    background: #5F9EFF;
+    border-radius: 2px 2px 2px 2px;
 }
 
-/*===============================================================
- * widget_bottom
- ================================================================*/
 
-QWidget#widget_bottom
-{
-    border-radius: 0px 0px 0px 0px;
-    border-left: 1px solid #DAE0F2;
-    border-right: 1px solid #DAE0F2;
-    border-bottom: 1px solid #DAE0F2;
-}
 
-QWidget#widget_bottom2
-{
-    border-radius: 0px 0px 0px 0px;
-    border-left: 1px solid rgba(255,255,255,0.15);
-    border-right: 1px solid rgba(255,255,255,0.15);
-    border-bottom: 1px solid rgba(255,255,255,0.15);
-}
 
-QPushButton#pBtn_addPlan, #pBtn_clearPlan, #pBtn_importPlan, #pBtn_exportPlan, #pBtn_savePlan, #pBtn_getPlan
+
+/*===============================================================
+ * widget_Content
+ ================================================================*/
+QWidget#widget_content
 {
-    /* font-weight: 400; */
-    font-size: 14px;
-    /* font-family: 思源黑体M; */
     background-color: #FFFFFF;
-    border-radius: 4px;
-    border: 1px solid #E6E9F4;
+    border-radius: 0px 0px 0px 0px;
+    border: 0px solid #FFFFFF;
 }
 
-QPushButton#pBtn_addPlan:hover, #pBtn_clearPlan:hover, #pBtn_importPlan:hover, #pBtn_exportPlan:hover, #pBtn_savePlan:hover, #pBtn_getPlan:hover
+QWidget#widget_frequency
 {
-    /* font-weight: 400; */
-    font-size: 14px;
-    /* font-family: 思源黑体M; */
-    color: #4458FE;
-    background-color: #FFFFFF;
-    border-radius: 4px;
-    border: 1px solid #4458FE;
+    background-color: #F5F5FA;
+    border-right: 1px solid #DAE0F2;
 }
 
 
+
 /*===============================================================
- * WidgetItems
+ * QScrollBar 滚动条
  ================================================================*/
 
 /*QScrollBar*/

+ 2 - 3
TransmitterSwitch/Resource/TransSwitch.qrc

@@ -1,9 +1,6 @@
 <RCC>
     <qresource prefix="/QSS">
-        <file>QSS/white/addnormalitem.qss</file>
-        <file>QSS/white/addspecialitem.qss</file>
         <file>QSS/white/importtemplate.qss</file>
-        <file>QSS/white/oneitem.qss</file>
         <file>QSS/white/savetotemplate.qss</file>
         <file>QSS/white/transmitterswitch.qss</file>
         <file>QSS/white/warning.qss</file>
@@ -12,6 +9,8 @@
         <file>QSS/white/SelectTime/timewidget.qss</file>
         <file>QSS/white/SelectDate/calendarheader.qss</file>
         <file>QSS/white/SelectDate/calendarnav.qss</file>
+        <file>QSS/white/pBtn_frequency.qss</file>
+        <file>QSS/white/plancard.qss</file>
         <file>QSS/dark/addspecialitem.qss</file>
         <file>QSS/dark/importtemplate.qss</file>
         <file>QSS/dark/savetotemplate.qss</file>

+ 39 - 2
TransmitterSwitch/Template/templatemanager.cpp

@@ -21,6 +21,7 @@
 #include "FromWebAPI.h"
 #include "tipwidget.h"
 #include "previewplan.h"
+#include "FromSQLite.h"
 
 
 TemplateManager::TemplateManager(QWidget *parent) :
@@ -274,6 +275,22 @@ void TemplateManager::setWebAPI(FromWebAPI* webAPI)
         return;
     }
     m_fromWebAPI = webAPI;
+    /* 设置FromSQLite指针为nullptr */
+    m_fromSQLite = nullptr;
+}
+
+
+/* 设置FromSQLite指针 */
+void TemplateManager::setFromSQLite(FromSQLite* sqlite)
+{
+    if(sqlite == nullptr)
+    {
+        LH_WRITE_ERROR("SQLite is nullptr");
+        return;
+    }
+    m_fromSQLite = sqlite;
+    /* 设置WebAPI指针为nullptr */
+    m_fromWebAPI = nullptr;
 }
 
 
@@ -339,12 +356,22 @@ void TemplateManager::modifyTemplate(QTableWidgetItem* item)
     /* 获取频率名称 */
     info.channelInfo = ChnContainer.getChannel(item->data(m_roleChnID).toInt());
     /* 获取模版中的计划 */
+    bool isSuccess = true;
     QList<OnePlanItemInfo> nowListPlan;
-    if(!m_fromWebAPI->getOneTemplateData(info, nowListPlan))
+    if(m_fromWebAPI != nullptr)
+    {
+        isSuccess = m_fromWebAPI->getOneTemplateData(info, nowListPlan);
+    }
+    else if(m_fromSQLite != nullptr)
+    {
+        isSuccess = m_fromSQLite->getTemplateData(info, nowListPlan);
+    }
+    if(!isSuccess)
     {
         TipWidget::display(TipWidget::OPERATOR_FAIL, "获取模版计划失败", this);
         return;
     }
+
     LH_WRITE_LOG_DEBUG(QString("获取模版计划成功, 频率ID:%1, 模版名称:%2, 计划数:%3").arg(info.channelInfo.ChannelID).arg(info.templateName).arg(nowListPlan.size()));
     /* 弹出修改模版的窗口 */
     std::shared_ptr<ManagerPlan> mp = std::make_shared<ManagerPlan>(Enum_Mode::Mode_ModifyTemplate);
@@ -416,7 +443,17 @@ void TemplateManager::previewTemplate(QTableWidgetItem* item)
     info.channelInfo = ChnContainer.getChannel(item->data(m_roleChnID).toInt());
     /* 获取模版中的计划 */
     QList<OnePlanItemInfo> nowListPlan;
-    if(!m_fromWebAPI->getOneTemplateData(info, nowListPlan))
+    bool isSuccess = true;
+    /* 判断是否是在线模式 */
+    if(m_fromWebAPI != nullptr)
+    {
+        isSuccess = m_fromWebAPI->getOneTemplateData(info, nowListPlan);
+    }
+    else if(m_fromSQLite != nullptr)
+    {
+        isSuccess = m_fromSQLite->getTemplateData(info, nowListPlan);
+    }
+    if(!isSuccess)
     {
         TipWidget::display(TipWidget::OPERATOR_FAIL, "获取模版计划失败", this);
         return;

+ 6 - 3
TransmitterSwitch/Template/templatemanager.h

@@ -9,9 +9,10 @@
 #include <QLineEdit>
 
 class TemplateItem;
-class OneTemplateInfo;
+struct OneTemplateInfo;
 class FromWebAPI;
-class OnePlanItemInfo;
+struct OnePlanItemInfo;
+class FromSQLite;
 
 namespace Ui {
 class TemplateManager;
@@ -62,7 +63,8 @@ public:
     void setQSSPath(const QString& qssPath);
     /* 设置WebAPI指针 */
     void setWebAPI(FromWebAPI* webAPI);
-
+    /* 设置FromSQLite指针 */
+    void setFromSQLite(FromSQLite* sqlite);
     
 signals:
     
@@ -100,6 +102,7 @@ private:
     Ui::TemplateManager *ui;
 
     FromWebAPI* m_fromWebAPI = nullptr;                 /* WebAPI操作类 */
+    FromSQLite* m_fromSQLite = nullptr;               /* SQLite操作类 */
 
     bool m_isOk = false;                                /* 是否点下了OK */
     // QString m_templateName;                             /* 模版名称 */

+ 23 - 0
TransmitterSwitch/TransmitterSwitchInfo.cpp

@@ -4,6 +4,8 @@
 #include <QFile>
 #include <QEventLoop>
 
+#include "spdlog/spdlog.h"
+
 /**
  * @brief 全局的回调函数传入值和说明
  * 
@@ -132,6 +134,16 @@ ChannelInfo MapChannel::getChannel(int channelID)
     return ChannelInfo();
 }
 
+/* 删除除了设置频率外的其他频率信息 */
+void MapChannel::deleteOtherChannel(int channelID)
+{
+    auto tmp = getChannel(channelID);
+    // SPDLOG_INFO("删除其他频率信息,当前频率ID为:{},频率名称为:{}", tmp.ChannelID, tmp.ChannelName.toStdString());
+    m_mapChannel.clear();
+    m_mapChannel.insert(channelID, tmp);
+    // SPDLOG_INFO("当前频率个数为:{}", m_mapChannel.size());
+}
+
 
 DevTypeInfo::DevTypeInfo()
 {
@@ -313,3 +325,14 @@ bool OneTemplateInfo::operator==(const OneTemplateInfo& info) const
     }
     return false;
 }
+
+
+
+GlobalInfo::GlobalInfo()
+{
+    channelInfo.ChannelID = -1;
+    channelInfo.ChannelName = "";
+    m_oneFrequency = false;
+}
+
+

+ 85 - 0
TransmitterSwitch/TransmitterSwitchInfo.h

@@ -233,6 +233,10 @@ public:
     ChannelInfo getChannel(int channelID);
     /* 获取容器 */
     QMap<int, ChannelInfo>& getMapChannel() { return m_mapChannel; }
+    /* 删除除了设置频率外的其他频率信息 */
+    void deleteOtherChannel(int channelID);
+    /* 清空所有的频率 */
+    void clearAllChannel() { m_mapChannel.clear(); }
     
 private:
     QMap<int, ChannelInfo> m_mapChannel;          /* 频率信息,key是通道ID */
@@ -363,6 +367,87 @@ struct OneTemplateInfo
 
 
 
+/**
+ * @brief 用于传输执行计划相关的信息
+ * 
+ */
+struct ExecPlanInfo
+{
+    int ChannelID = -1;                     /* 频率ID */
+    QString ChannelName;                    /* 频率名称 */
+    QString DatabasePath;                   /* 数据库路径 */
+
+    ExecPlanInfo& operator=(const ExecPlanInfo& info)
+    {
+        ChannelID = info.ChannelID;
+        ChannelName = info.ChannelName;
+        DatabasePath = info.DatabasePath;
+
+        return *this;
+    }
+};
+
+/**
+ * @brief 页面的其他配置信息
+ * 
+ */
+struct ExecPlanConfig
+{
+    int isUsingPlan;                /* 是否使用执行计划,0不使用,1使用 */
+    int execMdoe;                   /* 执行模式,0按时刻,1按天 */
+};
+
+
+
+
+/**
+ * @brief 全局信息,主要是一些全局标志位
+ * 
+ */
+#define GInfo GlobalInfo::getInstance()
+
+class GlobalInfo
+{
+private:
+    GlobalInfo();
+    GlobalInfo(const GlobalInfo& info) = delete;
+    GlobalInfo& operator=(const GlobalInfo& info) = delete;
+public:
+    static GlobalInfo& getInstance()
+    {
+        static GlobalInfo instance;
+        return instance;
+    }
+    ~GlobalInfo() {}
+
+    /* 设置单频率模式 */
+    void setOneFrequency(bool oneFrequency) { m_oneFrequency = oneFrequency; }
+    /* 获取单频率模式 */
+    bool isOneFrequency() const { return m_oneFrequency; }
+    
+    /* 设置是否使用在线数据库 */
+    void setOnlineDB(bool isOnlineDB) { m_isOnlineDB = isOnlineDB; }
+    /* 获取是否使用在线数据库 */
+    bool isOnlineDB() const { return m_isOnlineDB; }
+
+    /* 设置频率信息 */
+    void setChannelInfo(const ChannelInfo& channel) { channelInfo = channel; }
+    /* 获取频率信息 */
+    ChannelInfo getChannelInfo() const { return channelInfo; }
+    /* 设置数据库路径 */
+    void setDatabasePath(const QString& path) { DatabasePath = path; }
+    /* 获取数据库路径 */
+    QString getDatabasePath() const { return DatabasePath; }
+
+private:
+
+    bool m_oneFrequency = false;            /* 单频率模式 */
+    bool m_isOnlineDB = true;               /* 是否在线数据库 */
+
+    ChannelInfo channelInfo;                /* 频率信息 */
+    QString DatabasePath;                   /* 数据库路径 */
+};
+
 
 
 

+ 3 - 3
TransmitterSwitch/UserData/pBtnUserData2.h

@@ -2,13 +2,11 @@
 #define PBTNUSERDATA_H
 
 
-#include <QObjectUserData>
-
 #include "TransmitterSwitchInfo.h"
 
 class PlanCard;
 
-class PBtnUserData2 : public QObjectUserData
+class PBtnUserData2
 {
 
 public:
@@ -29,5 +27,7 @@ private:
     PlanCard* m_pCard = nullptr;       /* 卡片指针 */
 };
 
+Q_DECLARE_METATYPE(PBtnUserData2*)
+
 
 #endif /* PBTNUSERDATA_H */

+ 1 - 1
TransmitterSwitch/common/FlowLayout/flowlayout.cpp

@@ -48,7 +48,7 @@
 **
 ****************************************************************************/
 
-#include <QtWidgets>
+#include <QWidget>
 
 #include "flowlayout.h"
 //! [1]

BIN
TransmitterSwitch/common/LHHTTPAPI/lib/.DS_Store


BIN
TransmitterSwitch/common/LHHTTPAPI/lib/MinGW_64/LHSqlWebInterface.dll


BIN
TransmitterSwitch/common/LHHTTPAPI/lib/MinGW_64/LHSqlWebInterfaced.dll


+ 3 - 0
TransmitterSwitch/common/Logs/loginit.cpp

@@ -47,11 +47,14 @@ void init_log()
         auto logger_MQTT = std::make_shared<spdlog::logger>("MQTT",begin(sinks),end(sinks));
         /* 创建一个线程池输出Logger */
         auto logger_threadPool = std::make_shared<spdlog::logger>("ThreadPool",begin(sinks),end(sinks));
+        /* 创建一个计划页面的Logger */
+        auto logger_plan = std::make_shared<spdlog::logger>("Plan",begin(sinks),end(sinks));
 
         /* 注册到注册表 */
         spdlog::register_logger(logger_main);
         spdlog::register_logger(logger_MQTT);
         spdlog::register_logger(logger_threadPool);
+        spdlog::register_logger(logger_plan);
 
 
         /* 设置spdlog输出级别,默认的估计不输出debug这个级别 */

+ 83 - 25
TransmitterSwitch/common/spdlog/Findspdlog.cmake

@@ -1,83 +1,139 @@
 
 
-#SPDLOG日志库
+# SPDLOG库分为1.14.1和1.15.1,1.14.1是使用Qt5.12.12编译的,只能使用在Qt5环境中
+# 1.15.1是没有带Qt的环境编译的,支持Qt5和Qt6,编译器版本是GCC11.3
+# 静态库好像不能跨GCC版本使用,链接时会报错,提示找不到符号
 
 message(STATUS "***** Find spdlog Library *****")
 
-#寻找头文件
-# find_path(spdlog_INCLUDE_DIR
-#     NAMES spdlog/logger.h
-#     PATHS ${CMAKE_CURRENT_LIST_DIR}
-#     NO_DEFAULT_PATH
-# )
+
+#寻找头文件,需要判断gcc编译器版本
 unset(spdlog_INCLUDE_DIR CACHE)
-list(APPEND spdlog_INCLUDE_DIR ${CMAKE_CURRENT_LIST_DIR}/include)
-list(APPEND spdlog_INCLUDE_DIR ${CMAKE_CURRENT_LIST_DIR}/include/spdlog)
+unset(SPDLOG_INC_DIR CACHE)
+#判断操作系统
+if(CMAKE_SYSTEM_NAME MATCHES "Windows")
+    if(CMAKE_CXX_COMPILER_ID MATCHES "GNU")
+        if(CMAKE_CXX_COMPILER_VERSION VERSION_LESS 7.3)
+            message(STATUS "GCC编译器版本过低,请使用GCC7.3及以上版本")
+            return()
+        elseif(CMAKE_CXX_COMPILER_VERSION VERSION_LESS 11.2 AND CMAKE_CXX_COMPILER_VERSION VERSION_GREATER 7.2)
+            set(SPDLOG_V 1.14.1)
+            set(SPDLOG_INC_DIR ${CMAKE_CURRENT_LIST_DIR}/include_1.14.1)
+        elseif(CMAKE_CXX_COMPILER_VERSION VERSION_GREATER 11.1)
+            set(SPDLOG_V 1.15.1)
+            set(SPDLOG_INC_DIR ${CMAKE_CURRENT_LIST_DIR}/include_1.15.1)
+        endif()
+    elseif(CMAKE_CXX_COMPILER_ID MATCHES "MSVC")
+        #MSVC编译器
+        set(SPDLOG_V 1.14.1)
+        set(SPDLOG_INC_DIR ${CMAKE_CURRENT_LIST_DIR}/include_1.14.1)
+    endif()
+    
+elseif(CMAKE_SYSTEM_NAME MATCHES "Linux")
+    set(SPDLOG_V 1.14.1)
+    set(SPDLOG_INC_DIR ${CMAKE_CURRENT_LIST_DIR}/include_1.14.1)
+elseif(CMAKE_SYSTEM_NAME MATCHES "Darwin")
+    set(SPDLOG_V 1.14.1)
+    set(SPDLOG_INC_DIR ${CMAKE_CURRENT_LIST_DIR}/include_1.14.1)
+else()
+    message(STATUS "操作系统:未知")
+endif()
+
+
+
+list(APPEND spdlog_INCLUDE_DIR ${SPDLOG_INC_DIR})
+list(APPEND spdlog_INCLUDE_DIR ${SPDLOG_INC_DIR}/spdlog)
 #包含fmt头文件,使用fmt的时候包含fmt/bundled/format.h这样的完整目录
-list(APPEND spdlog_INCLUDE_DIR ${CMAKE_CURRENT_LIST_DIR}/include/spdlog/fmt)
+list(APPEND spdlog_INCLUDE_DIR ${SPDLOG_INC_DIR}/spdlog/fmt)
 
 
 
 unset(spdlog_LIBRARY CACHE)
 unset(spdlog_STATIC_LIBRARY CACHE)
+unset(SPDLOG_LIB_DIR CACHE)
 #查找库文件,需要判断操作系统,位数
 if(CMAKE_SYSTEM_NAME MATCHES "Windows")
+    #GCC编译器
     if(CMAKE_CXX_COMPILER_ID MATCHES "GNU")
         #64位
         if(CMAKE_SIZEOF_VOID_P EQUAL 8)
+            #GCC7.3版本
+            if(SPDLOG_V EQUAL 1.14.1)
+                set(SPDLOG_LIB_DIR ${CMAKE_CURRENT_LIST_DIR}/windows/gcc7.3)
+            #GCC11.2版本
+            elseif(SPDLOG_V EQUAL 1.15.1)
+                set(SPDLOG_LIB_DIR ${CMAKE_CURRENT_LIST_DIR}/windows/gcc11.2)
+            #默认版本
+            else()
+                set(SPDLOG_LIB_DIR ${CMAKE_CURRENT_LIST_DIR}/windows/gcc11.2)
+            endif()
+            #动态库
             if(CMAKE_BUILD_TYPE MATCHES "Debug")
-                list(APPEND spdlog_LIBRARY ${CMAKE_CURRENT_LIST_DIR}/windows/gcc7.3/libspdlogd.dll)
+                list(APPEND spdlog_LIBRARY ${SPDLOG_LIB_DIR}/libspdlogd.dll)
             else()
-                list(APPEND spdlog_LIBRARY ${CMAKE_CURRENT_LIST_DIR}/windows/gcc7.3/libspdlog.dll)
+                list(APPEND spdlog_LIBRARY ${SPDLOG_LIB_DIR}/libspdlog.dll)
             endif()
+            #静态库
             if(ENABLE_SPDLOG_STATIC_LIB)
                 if(CMAKE_BUILD_TYPE MATCHES "Debug")
-                    list(APPEND spdlog_STATIC_LIBRARY ${CMAKE_CURRENT_LIST_DIR}/windows/gcc7.3_static/libspdlogd.a)
+                    list(APPEND spdlog_STATIC_LIBRARY ${SPDLOG_LIB_DIR}/libspdlogd.a)
                 else()
-                    list(APPEND spdlog_STATIC_LIBRARY ${CMAKE_CURRENT_LIST_DIR}/windows/gcc7.3_static/libspdlog.a)
+                    list(APPEND spdlog_STATIC_LIBRARY ${SPDLOG_LIB_DIR}/libspdlog.a)
                 endif()
             endif()
         #32位
         elseif(CMAKE_SIZEOF_VOID_P EQUAL 4)
+            set(SPDLOG_LIB_DIR ${CMAKE_CURRENT_LIST_DIR}/windows/gcc7.3_32)
             #动态库
             if(CMAKE_BUILD_TYPE MATCHES "Debug")
-                list(APPEND spdlog_LIBRARY ${CMAKE_CURRENT_LIST_DIR}/windows/gcc7.3_32/libspdlogd.dll)
+                list(APPEND spdlog_LIBRARY ${SPDLOG_LIB_DIR}/libspdlogd.dll)
             else()
-                list(APPEND spdlog_LIBRARY ${CMAKE_CURRENT_LIST_DIR}/windows/gcc7.3_32/libspdlog.dll)
+                list(APPEND spdlog_LIBRARY ${SPDLOG_LIB_DIR}/libspdlog.dll)
             endif()
             #静态库
             if(ENABLE_SPDLOG_STATIC_LIB)
                 if(CMAKE_BUILD_TYPE MATCHES "Debug")
-                    list(APPEND spdlog_STATIC_LIBRARY ${CMAKE_CURRENT_LIST_DIR}/windows/gcc7.3_static_32/libspdlogd.a)
+                    list(APPEND spdlog_STATIC_LIBRARY ${SPDLOG_LIB_DIR}/libspdlogd.a)
                 else()
-                    list(APPEND spdlog_STATIC_LIBRARY ${CMAKE_CURRENT_LIST_DIR}/windows/gcc7.3_static_32/libspdlog.a)
+                    list(APPEND spdlog_STATIC_LIBRARY ${SPDLOG_LIB_DIR}/libspdlog.a)
                 endif()
             endif()
         endif()
+    #MSVC编译器
     elseif(CMAKE_CXX_COMPILER_ID MATCHES "MSVC")
+        set(SPDLOG_LIB_DIR ${CMAKE_CURRENT_LIST_DIR}/windows/msvc2022)
         if(CMAKE_BUILD_TYPE MATCHES "Debug")
-            list(APPEND spdlog_LIBRARY ${CMAKE_CURRENT_LIST_DIR}/windows/msvc2022/spdlogd.lib)
+            list(APPEND spdlog_LIBRARY ${SPDLOG_LIB_DIR}/spdlogd.lib)
         else()
-            list(APPEND spdlog_LIBRARY ${CMAKE_CURRENT_LIST_DIR}/windows/msvc2022/spdlog.lib)
+            list(APPEND spdlog_LIBRARY ${SPDLOG_LIB_DIR}/spdlog.lib)
         endif()
     endif()
 #添加Linux版本
 elseif(CMAKE_SYSTEM_NAME MATCHES "Linux")
+    set(SPDLOG_LIB_DIR ${CMAKE_CURRENT_LIST_DIR}/linux/gcc8.3)
     if(CMAKE_BUILD_TYPE MATCHES "Debug")
-        list(APPEND spdlog_LIBRARY ${CMAKE_CURRENT_LIST_DIR}/linux/gcc8.3/libspdlog.so)
+        list(APPEND spdlog_LIBRARY ${SPDLOG_LIB_DIR}/libspdlogd.so)
     else()
-        list(APPEND spdlog_LIBRARY ${CMAKE_CURRENT_LIST_DIR}/linux/gcc8.3/libspdlog.so)
+        list(APPEND spdlog_LIBRARY ${SPDLOG_LIB_DIR}/libspdlog.so)
     endif()
     list(APPEND spdlog_LIBRARY pthread)
     if(ENABLE_SPDLOG_STATIC_LIB)
         if(CMAKE_BUILD_TYPE MATCHES "Debug")
-            list(APPEND spdlog_STATIC_LIBRARY ${CMAKE_CURRENT_LIST_DIR}/linux/gcc8.3_static/libspdlogd.a)
+            list(APPEND spdlog_STATIC_LIBRARY ${SPDLOG_LIB_DIR}/libspdlogd.a)
         else()
-            list(APPEND spdlog_STATIC_LIBRARY ${CMAKE_CURRENT_LIST_DIR}/linux/gcc8.3_static/libspdlog.a)
+            list(APPEND spdlog_STATIC_LIBRARY ${SPDLOG_LIB_DIR}/libspdlog.a)
         endif()
         #这里需要显式的链接依赖库,或者使用target_link_options(appname PRIVATE "-Wl,--copy-dt-needed-entries")来让gcc递归搜索依赖库
         list(APPEND spdlog_STATIC_LIBRARY pthread)
     endif()
+#MacOS版本
+elseif(CMAKE_SYSTEM_NAME MATCHES "Darwin")
+    #MacOS版本
+    if(CMAKE_BUILD_TYPE MATCHES "Debug")
+        list(APPEND spdlog_LIBRARY ${CMAKE_CURRENT_LIST_DIR}/macos/libspdlog.dylib)
+    else()
+        list(APPEND spdlog_LIBRARY ${CMAKE_CURRENT_LIST_DIR}/macos/libspdlog.dylib)
+    endif()
 
 endif()
 
@@ -87,10 +143,12 @@ endif()
 # endif()
 
 # message(STATUS "spdlog_INCLUDE_DIR: ${spdlog_INCLUDE_DIR}")
+# message(STATUS "spdlog_LIBRARY: ${spdlog_LIBRARY}")
+# message(STATUS "spdlog_STATIC_LIBRARY: ${spdlog_STATIC_LIBRARY}")
 
 if(spdlog_INCLUDE_DIR AND (spdlog_LIBRARY OR spdlog_STATIC_LIBRARY))
     set(spdlog_FOUND TRUE)
-    set(spdlog_VERSION 1.14.1)
+    set(spdlog_VERSION ${SPDLOG_V})
 
     message(STATUS "如果需要使用静态库,定义“ ENABLE_SPDLOG_STATIC_LIB ”变量")
     message(STATUS "include : spdlog_INCLUDE_DIR")

+ 0 - 0
TransmitterSwitch/common/spdlog/include/spdlog/async.h → TransmitterSwitch/common/spdlog/include_1.14.1/spdlog/async.h


+ 0 - 0
TransmitterSwitch/common/spdlog/include/spdlog/async_logger-inl.h → TransmitterSwitch/common/spdlog/include_1.14.1/spdlog/async_logger-inl.h


+ 0 - 0
TransmitterSwitch/common/spdlog/include/spdlog/async_logger.h → TransmitterSwitch/common/spdlog/include_1.14.1/spdlog/async_logger.h


+ 0 - 0
TransmitterSwitch/common/spdlog/include/spdlog/cfg/argv.h → TransmitterSwitch/common/spdlog/include_1.14.1/spdlog/cfg/argv.h


+ 0 - 0
TransmitterSwitch/common/spdlog/include/spdlog/cfg/env.h → TransmitterSwitch/common/spdlog/include_1.14.1/spdlog/cfg/env.h


+ 0 - 0
TransmitterSwitch/common/spdlog/include/spdlog/cfg/helpers-inl.h → TransmitterSwitch/common/spdlog/include_1.14.1/spdlog/cfg/helpers-inl.h


+ 0 - 0
TransmitterSwitch/common/spdlog/include/spdlog/cfg/helpers.h → TransmitterSwitch/common/spdlog/include_1.14.1/spdlog/cfg/helpers.h


+ 0 - 0
TransmitterSwitch/common/spdlog/include/spdlog/common-inl.h → TransmitterSwitch/common/spdlog/include_1.14.1/spdlog/common-inl.h


+ 0 - 0
TransmitterSwitch/common/spdlog/include/spdlog/common.h → TransmitterSwitch/common/spdlog/include_1.14.1/spdlog/common.h


+ 0 - 0
TransmitterSwitch/common/spdlog/include/spdlog/details/backtracer-inl.h → TransmitterSwitch/common/spdlog/include_1.14.1/spdlog/details/backtracer-inl.h


+ 0 - 0
TransmitterSwitch/common/spdlog/include/spdlog/details/backtracer.h → TransmitterSwitch/common/spdlog/include_1.14.1/spdlog/details/backtracer.h


+ 0 - 0
TransmitterSwitch/common/spdlog/include/spdlog/details/circular_q.h → TransmitterSwitch/common/spdlog/include_1.14.1/spdlog/details/circular_q.h


+ 0 - 0
TransmitterSwitch/common/spdlog/include/spdlog/details/console_globals.h → TransmitterSwitch/common/spdlog/include_1.14.1/spdlog/details/console_globals.h


+ 0 - 0
TransmitterSwitch/common/spdlog/include/spdlog/details/file_helper-inl.h → TransmitterSwitch/common/spdlog/include_1.14.1/spdlog/details/file_helper-inl.h


+ 0 - 0
TransmitterSwitch/common/spdlog/include/spdlog/details/file_helper.h → TransmitterSwitch/common/spdlog/include_1.14.1/spdlog/details/file_helper.h


+ 0 - 0
TransmitterSwitch/common/spdlog/include/spdlog/details/fmt_helper.h → TransmitterSwitch/common/spdlog/include_1.14.1/spdlog/details/fmt_helper.h


+ 0 - 0
TransmitterSwitch/common/spdlog/include/spdlog/details/log_msg-inl.h → TransmitterSwitch/common/spdlog/include_1.14.1/spdlog/details/log_msg-inl.h


+ 0 - 0
TransmitterSwitch/common/spdlog/include/spdlog/details/log_msg.h → TransmitterSwitch/common/spdlog/include_1.14.1/spdlog/details/log_msg.h


+ 0 - 0
TransmitterSwitch/common/spdlog/include/spdlog/details/log_msg_buffer-inl.h → TransmitterSwitch/common/spdlog/include_1.14.1/spdlog/details/log_msg_buffer-inl.h


+ 0 - 0
TransmitterSwitch/common/spdlog/include/spdlog/details/log_msg_buffer.h → TransmitterSwitch/common/spdlog/include_1.14.1/spdlog/details/log_msg_buffer.h


+ 0 - 0
TransmitterSwitch/common/spdlog/include/spdlog/details/mpmc_blocking_q.h → TransmitterSwitch/common/spdlog/include_1.14.1/spdlog/details/mpmc_blocking_q.h


+ 0 - 0
TransmitterSwitch/common/spdlog/include/spdlog/details/null_mutex.h → TransmitterSwitch/common/spdlog/include_1.14.1/spdlog/details/null_mutex.h


+ 0 - 0
TransmitterSwitch/common/spdlog/include/spdlog/details/os-inl.h → TransmitterSwitch/common/spdlog/include_1.14.1/spdlog/details/os-inl.h


+ 0 - 0
TransmitterSwitch/common/spdlog/include/spdlog/details/os.h → TransmitterSwitch/common/spdlog/include_1.14.1/spdlog/details/os.h


+ 0 - 0
TransmitterSwitch/common/spdlog/include/spdlog/details/periodic_worker-inl.h → TransmitterSwitch/common/spdlog/include_1.14.1/spdlog/details/periodic_worker-inl.h


+ 0 - 0
TransmitterSwitch/common/spdlog/include/spdlog/details/periodic_worker.h → TransmitterSwitch/common/spdlog/include_1.14.1/spdlog/details/periodic_worker.h


+ 0 - 0
TransmitterSwitch/common/spdlog/include/spdlog/details/registry-inl.h → TransmitterSwitch/common/spdlog/include_1.14.1/spdlog/details/registry-inl.h


+ 0 - 0
TransmitterSwitch/common/spdlog/include/spdlog/details/registry.h → TransmitterSwitch/common/spdlog/include_1.14.1/spdlog/details/registry.h


+ 0 - 0
TransmitterSwitch/common/spdlog/include/spdlog/details/synchronous_factory.h → TransmitterSwitch/common/spdlog/include_1.14.1/spdlog/details/synchronous_factory.h


+ 0 - 0
TransmitterSwitch/common/spdlog/include/spdlog/details/tcp_client-windows.h → TransmitterSwitch/common/spdlog/include_1.14.1/spdlog/details/tcp_client-windows.h


+ 0 - 0
TransmitterSwitch/common/spdlog/include/spdlog/details/tcp_client.h → TransmitterSwitch/common/spdlog/include_1.14.1/spdlog/details/tcp_client.h


+ 0 - 0
TransmitterSwitch/common/spdlog/include/spdlog/details/thread_pool-inl.h → TransmitterSwitch/common/spdlog/include_1.14.1/spdlog/details/thread_pool-inl.h


+ 0 - 0
TransmitterSwitch/common/spdlog/include/spdlog/details/thread_pool.h → TransmitterSwitch/common/spdlog/include_1.14.1/spdlog/details/thread_pool.h


+ 0 - 0
TransmitterSwitch/common/spdlog/include/spdlog/details/udp_client-windows.h → TransmitterSwitch/common/spdlog/include_1.14.1/spdlog/details/udp_client-windows.h


+ 0 - 0
TransmitterSwitch/common/spdlog/include/spdlog/details/udp_client.h → TransmitterSwitch/common/spdlog/include_1.14.1/spdlog/details/udp_client.h


+ 0 - 0
TransmitterSwitch/common/spdlog/include/spdlog/details/windows_include.h → TransmitterSwitch/common/spdlog/include_1.14.1/spdlog/details/windows_include.h


+ 0 - 0
TransmitterSwitch/common/spdlog/include/spdlog/fmt/bin_to_hex.h → TransmitterSwitch/common/spdlog/include_1.14.1/spdlog/fmt/bin_to_hex.h


+ 0 - 0
TransmitterSwitch/common/spdlog/include/spdlog/fmt/bundled/args.h → TransmitterSwitch/common/spdlog/include_1.14.1/spdlog/fmt/bundled/args.h


+ 0 - 0
TransmitterSwitch/common/spdlog/include/spdlog/fmt/bundled/chrono.h → TransmitterSwitch/common/spdlog/include_1.14.1/spdlog/fmt/bundled/chrono.h


+ 0 - 0
TransmitterSwitch/common/spdlog/include/spdlog/fmt/bundled/color.h → TransmitterSwitch/common/spdlog/include_1.14.1/spdlog/fmt/bundled/color.h


+ 0 - 0
TransmitterSwitch/common/spdlog/include/spdlog/fmt/bundled/compile.h → TransmitterSwitch/common/spdlog/include_1.14.1/spdlog/fmt/bundled/compile.h


+ 0 - 0
TransmitterSwitch/common/spdlog/include/spdlog/fmt/bundled/core.h → TransmitterSwitch/common/spdlog/include_1.14.1/spdlog/fmt/bundled/core.h


+ 0 - 0
TransmitterSwitch/common/spdlog/include/spdlog/fmt/bundled/fmt.license.rst → TransmitterSwitch/common/spdlog/include_1.14.1/spdlog/fmt/bundled/fmt.license.rst


+ 0 - 0
TransmitterSwitch/common/spdlog/include/spdlog/fmt/bundled/format-inl.h → TransmitterSwitch/common/spdlog/include_1.14.1/spdlog/fmt/bundled/format-inl.h


+ 0 - 0
TransmitterSwitch/common/spdlog/include/spdlog/fmt/bundled/format.h → TransmitterSwitch/common/spdlog/include_1.14.1/spdlog/fmt/bundled/format.h


+ 0 - 0
TransmitterSwitch/common/spdlog/include/spdlog/fmt/bundled/locale.h → TransmitterSwitch/common/spdlog/include_1.14.1/spdlog/fmt/bundled/locale.h


+ 0 - 0
TransmitterSwitch/common/spdlog/include/spdlog/fmt/bundled/os.h → TransmitterSwitch/common/spdlog/include_1.14.1/spdlog/fmt/bundled/os.h


+ 0 - 0
TransmitterSwitch/common/spdlog/include/spdlog/fmt/bundled/ostream.h → TransmitterSwitch/common/spdlog/include_1.14.1/spdlog/fmt/bundled/ostream.h


+ 0 - 0
TransmitterSwitch/common/spdlog/include/spdlog/fmt/bundled/printf.h → TransmitterSwitch/common/spdlog/include_1.14.1/spdlog/fmt/bundled/printf.h


+ 0 - 0
TransmitterSwitch/common/spdlog/include/spdlog/fmt/bundled/ranges.h → TransmitterSwitch/common/spdlog/include_1.14.1/spdlog/fmt/bundled/ranges.h


+ 0 - 0
TransmitterSwitch/common/spdlog/include/spdlog/fmt/bundled/std.h → TransmitterSwitch/common/spdlog/include_1.14.1/spdlog/fmt/bundled/std.h


+ 0 - 0
TransmitterSwitch/common/spdlog/include/spdlog/fmt/bundled/xchar.h → TransmitterSwitch/common/spdlog/include_1.14.1/spdlog/fmt/bundled/xchar.h


+ 0 - 0
TransmitterSwitch/common/spdlog/include/spdlog/fmt/chrono.h → TransmitterSwitch/common/spdlog/include_1.14.1/spdlog/fmt/chrono.h


+ 0 - 0
TransmitterSwitch/common/spdlog/include/spdlog/fmt/compile.h → TransmitterSwitch/common/spdlog/include_1.14.1/spdlog/fmt/compile.h


+ 0 - 0
TransmitterSwitch/common/spdlog/include/spdlog/fmt/fmt.h → TransmitterSwitch/common/spdlog/include_1.14.1/spdlog/fmt/fmt.h


+ 0 - 0
TransmitterSwitch/common/spdlog/include/spdlog/fmt/ostr.h → TransmitterSwitch/common/spdlog/include_1.14.1/spdlog/fmt/ostr.h


+ 0 - 0
TransmitterSwitch/common/spdlog/include/spdlog/fmt/ranges.h → TransmitterSwitch/common/spdlog/include_1.14.1/spdlog/fmt/ranges.h


+ 0 - 0
TransmitterSwitch/common/spdlog/include/spdlog/fmt/std.h → TransmitterSwitch/common/spdlog/include_1.14.1/spdlog/fmt/std.h


+ 0 - 0
TransmitterSwitch/common/spdlog/include/spdlog/fmt/xchar.h → TransmitterSwitch/common/spdlog/include_1.14.1/spdlog/fmt/xchar.h


+ 0 - 0
TransmitterSwitch/common/spdlog/include/spdlog/formatter.h → TransmitterSwitch/common/spdlog/include_1.14.1/spdlog/formatter.h


+ 0 - 0
TransmitterSwitch/common/spdlog/include/spdlog/fwd.h → TransmitterSwitch/common/spdlog/include_1.14.1/spdlog/fwd.h


+ 0 - 0
TransmitterSwitch/common/spdlog/include/spdlog/logger-inl.h → TransmitterSwitch/common/spdlog/include_1.14.1/spdlog/logger-inl.h


+ 0 - 0
TransmitterSwitch/common/spdlog/include/spdlog/logger.h → TransmitterSwitch/common/spdlog/include_1.14.1/spdlog/logger.h


+ 0 - 0
TransmitterSwitch/common/spdlog/include/spdlog/mdc.h → TransmitterSwitch/common/spdlog/include_1.14.1/spdlog/mdc.h


+ 0 - 0
TransmitterSwitch/common/spdlog/include/spdlog/pattern_formatter-inl.h → TransmitterSwitch/common/spdlog/include_1.14.1/spdlog/pattern_formatter-inl.h


+ 0 - 0
TransmitterSwitch/common/spdlog/include/spdlog/pattern_formatter.h → TransmitterSwitch/common/spdlog/include_1.14.1/spdlog/pattern_formatter.h


+ 0 - 0
TransmitterSwitch/common/spdlog/include/spdlog/sinks/android_sink.h → TransmitterSwitch/common/spdlog/include_1.14.1/spdlog/sinks/android_sink.h


+ 0 - 0
TransmitterSwitch/common/spdlog/include/spdlog/sinks/ansicolor_sink-inl.h → TransmitterSwitch/common/spdlog/include_1.14.1/spdlog/sinks/ansicolor_sink-inl.h


+ 0 - 0
TransmitterSwitch/common/spdlog/include/spdlog/sinks/ansicolor_sink.h → TransmitterSwitch/common/spdlog/include_1.14.1/spdlog/sinks/ansicolor_sink.h


+ 0 - 0
TransmitterSwitch/common/spdlog/include/spdlog/sinks/base_sink-inl.h → TransmitterSwitch/common/spdlog/include_1.14.1/spdlog/sinks/base_sink-inl.h


+ 0 - 0
TransmitterSwitch/common/spdlog/include/spdlog/sinks/base_sink.h → TransmitterSwitch/common/spdlog/include_1.14.1/spdlog/sinks/base_sink.h


+ 0 - 0
TransmitterSwitch/common/spdlog/include/spdlog/sinks/basic_file_sink-inl.h → TransmitterSwitch/common/spdlog/include_1.14.1/spdlog/sinks/basic_file_sink-inl.h


Some files were not shown because too many files changed in this diff