浏览代码

V1.2
1、添加了更新标志位,在保存计划的时候会更新该标志位

Apple 1 月之前
父节点
当前提交
114a43c392

+ 16 - 8
SwitchOnOff.sql

@@ -133,8 +133,10 @@ DROP TABLE IF EXISTS "EQM_CESHI"."tExecPlan";
 # 执行计划页面全局配置表格-tExecPlanConfig
 #===============================================
 
-#删除表格
-DROP TABLE IF EXISTS "EQM_CESHI"."tExecPlanConfig";
+#查询表格
+SELECT *
+FROM tExecPlanConfig;
+
 
 #清空表格
 DELETE
@@ -143,16 +145,22 @@ FROM tExecPlanConfig;
 #创建表格
 CREATE TABLE IF NOT EXISTS "EQM_CESHI"."tExecPlanConfig" (
     "KeyWord" INT PRIMARY KEY,
-    "Value1" INT
+    "Value1" INT,
+    "UpdateTime" VARCHAR(64),
+    "Notes" VARCHAR(255)
 )
 
-#查询表格
-SELECT *
-FROM tExecPlanConfig;
+#删除表格
+DROP TABLE IF EXISTS "EQM_CESHI"."tExecPlanConfig";
 
 #插入数据
-INSERT INTO "tExecPlanConfig" ("KeyWord", "Value1")
-VALUES (:keyWord, :value1);
+INSERT INTO "tExecPlanConfig" ("KeyWord", "Value1", "UpdateTime", "Notes")
+VALUES (:keyWord, :value1, :updateTime, :notes);
+
+#更新数据
+UPDATE "tExecPlanConfig"
+SET "Value1" = :value1, "UpdateTime" = :updateTime
+WHERE "KeyWord" = :keyWord;
 
 
 #根据关键字删除数据

+ 4 - 1
TransmitterSwitch/ItemData/ItemData.cpp

@@ -36,6 +36,7 @@ void ItemData::addOneItem(int week, OneItem* item)
         return;
     }
     m_mapItem[week]->append(item);
+    m_isUpdate = true;
 }
 
 /* 删除一项计划 */
@@ -57,7 +58,7 @@ void ItemData::deleteOneItem(int week, int num)
             break;
         }
     }
-
+    m_isUpdate = true;
 }
 
 /* 清空一天的计划 */
@@ -73,6 +74,7 @@ void ItemData::clearOneDay(int week)
         delete *it;
     }
     list->clear();
+    m_isUpdate = true;
 }
 
 /* 清空所有的计划数据 */
@@ -86,6 +88,7 @@ void ItemData::clearAllItem()
         }
         it.value()->clear();
     }
+    m_isUpdate = true;
 }
 
 

+ 7 - 1
TransmitterSwitch/ItemData/ItemData.h

@@ -33,6 +33,7 @@ public:
     void clearOneDay(int week);
     /* 清空所有的计划数据 */
     void clearAllItem();
+
     /* 查找有没有这个项 */
     bool findItem(OneItem* item);
     bool findItem(int week, OneItem* item);
@@ -51,9 +52,14 @@ public:
     /* 判断特殊日的已有项修改时间后和其他项是否重复 */
     bool judgeDateTimeRepetitionWithEdit(int weekDay, OneItem* item, const QDate& newDate, const QTime& newTime);
     
+    /* 获取计划是否有更新 */
+    bool isUpdate() { return m_isUpdate; }
+    /* 设置计划是否有更新 */
+    void setUpdate(bool isUpdate) { m_isUpdate = isUpdate; }
 
 private:
-    QMap<int, QList<OneItem*>*> m_mapItem;           /* int是周几 */
+    bool m_isUpdate = false;                        /* 是否有更新计划 */
+    QMap<int, QList<OneItem*>*> m_mapItem;          /* int是周几 */
 
 
 };

+ 54 - 0
TransmitterSwitch/TransmitterSwitchInfo.cpp

@@ -4,6 +4,60 @@
 #include <QFile>
 #include <QEventLoop>
 
+
+
+/**
+ * @brief 更新一个配置,不存在则添加
+ * 
+ * @param data 
+ */
+void ConfigDataContainer::updateConfigData(const ConfigData& data)
+{
+    if(m_mapConfigData.contains(data.key))
+    {
+        m_mapConfigData[data.key].value = data.value;
+        m_mapConfigData[data.key].updateTime = data.updateTime;
+    }else 
+    {
+        /* 加入新的内容,添加说明 */
+        m_mapConfigData.insert(data.key, data);
+        if(KeyNotes.contains(data.key))
+        {
+            m_mapConfigData[data.key].notes = KeyNotes[data.key];
+        }
+    }
+}
+
+/* 获取一个配置 */
+ConfigData& ConfigDataContainer::getConfigData(int key)
+{
+    if(m_mapConfigData.contains(key))
+    {
+        return m_mapConfigData[key];
+    }
+    return m_mapConfigData[0];
+}
+
+/* 查找一个配置是否在不在 */
+bool ConfigDataContainer::findConfigData(int key)
+{
+    return m_mapConfigData.contains(key);
+}
+
+/* 删除一个配置 */
+void ConfigDataContainer::deleteConfigData(int key)
+{
+    if(m_mapConfigData.contains(key))
+    {
+        m_mapConfigData.remove(key);
+    }
+}
+
+
+
+
+
+
 ExecPlanItemInfo::ExecPlanItemInfo()
 {
     ExecType = -1;

+ 82 - 1
TransmitterSwitch/TransmitterSwitchInfo.h

@@ -52,7 +52,8 @@ enum class enum_UIStyle
 enum class enum_ExecPlanConfig : int
 {
     DefaultPlan = 1,            /* 执行计划 */
-    ExecMode = 2                /* 执行模式 */
+    ExecMode = 2,               /* 执行模式 */
+    IsChanged = 3               /* 是否修改 */
 };
 
 /**
@@ -65,6 +66,10 @@ enum class enum_ExecPlanConfig : int
     DefaultPlan_OFF = 1             /* 默认计划开 */
  };
 
+/**
+ * @brief WebAPI初始化数据
+ * 
+ */
 struct InitData
 {
     QString url;                /* WebAPI地址 */
@@ -79,6 +84,81 @@ struct InitData
     }
 };
 
+/**
+ * @brief 配置键值对
+ *        key1 : 默认执行计划开关
+ *        key2 : 执行模式
+ * 
+ */
+struct ConfigData
+{
+    int key;                    /* 键 */
+    int value;                  /* 值 */
+    QDateTime updateTime;       /* 更新时间 */
+    QString notes;              /* 备注 */
+    ConfigData() : key(0), value(0), updateTime(QDateTime::currentDateTime()), notes("") {}
+    ConfigData(const ConfigData& data)
+    {
+        key = data.key;
+        value = data.value;
+        updateTime = data.updateTime;
+        notes = data.notes;
+    }
+    ConfigData& operator=(const ConfigData& data)
+    {
+        key = data.key;
+        value = data.value;
+        updateTime = data.updateTime;
+        notes = data.notes;
+        return *this;
+    }
+};
+
+#define CfgData ConfigDataContainer::getInstance()
+
+/**
+ * @brief 全局键值对容器
+ * 
+ */
+class ConfigDataContainer
+{
+private:
+    ConfigDataContainer() {}
+    ConfigDataContainer(const ConfigDataContainer& data) = delete;
+    ConfigDataContainer& operator=(const ConfigDataContainer& data) = delete;
+public:
+    /* 配置的键值对的说明 */
+    const QMap<int, QString> KeyNotes = {
+        {static_cast<int>(enum_ExecPlanConfig::DefaultPlan), "默认执行计划开关,0关,1开"},
+        {static_cast<int>(enum_ExecPlanConfig::ExecMode), "执行模式,0按时刻,1按天"},
+        {static_cast<int>(enum_ExecPlanConfig::IsChanged), "是否修改,0未修改,1修改"}
+    };
+
+public:
+    ~ConfigDataContainer() {}
+
+    static ConfigDataContainer& getInstance()
+    {
+        static ConfigDataContainer data;
+        return data;
+    }
+
+    /* 添加一个配置 */
+    void updateConfigData(const ConfigData& data);
+    /* 获取一个配置 */
+    ConfigData& getConfigData(int key);
+    /* 查找一个配置是否在不在 */
+    bool findConfigData(int key);
+    /* 删除一个配置 */
+    void deleteConfigData(int key);
+    /* 获取容器 */
+    QMap<int, ConfigData>& getMapConfigData() { return m_mapConfigData; }
+
+private:
+    QMap<int, ConfigData> m_mapConfigData;          /* 配置信息,key是配置的键 */
+
+};
+
 
 /**
  * @brief 执行计划条目信息
@@ -152,6 +232,7 @@ private:
 
 
 
+
 /**
  * @brief 配置完成后的信息,给一个类型的设备创建了名字,并存储了设备类型和参数信息
 */

+ 27 - 16
TransmitterSwitch/WebAPI/FromWebAPI.cpp

@@ -349,8 +349,14 @@ bool FromWebAPI::getExecPlanData(QList<ExecPlanItemInfo>& list)
     return true;
 }
 
-/* 将页面的配置写入数据库 */
-bool FromWebAPI::insertConfigData(QMap<int, int>& mapConfig)
+/**
+ * @brief 将页面的配置写入数据库,主要是默认计划和执行模式
+ * 
+ * @param mapConfig 
+ * @return true 
+ * @return false 
+ */
+bool FromWebAPI::insertConfigData(QMap<int, ConfigData>& list)
 {
     if(m_httpApi == nullptr)
     {
@@ -358,18 +364,20 @@ bool FromWebAPI::insertConfigData(QMap<int, int>& mapConfig)
         return false;
     }
 
-    deleteConfigData(mapConfig);
+    deleteConfigData(list);
 
     nJson json0 = nJson::array();
     try{
-        for(auto begin = mapConfig.begin(), end = mapConfig.end(); begin != end; begin++)
+        for(auto begin = list.begin(), end = list.end(); begin != end; begin++)
         {
             nJson json1;
             json1["opName"] = "ESM8C_InsertExecPlanConfig";
             json1["Key"] = QUuid::createUuid().toString().toStdString();
             nJson json2;
-            json2["keyWord"] = begin.key();
-            json2["value1"] = begin.value();
+            json2["keyWord"] = begin->key;
+            json2["value1"] = begin->value;
+            json2["updateTime"] = begin->updateTime.toString("yyyy-MM-dd hh:mm:ss").toStdString();
+            json2["notes"] = begin->notes.toStdString();
             json1["paramList"] = json2;
             json0.push_back(json1);
         }
@@ -397,13 +405,13 @@ bool FromWebAPI::insertConfigData(QMap<int, int>& mapConfig)
         LH_WRITE_ERROR(QString("写入tExecPlanConfig失败:%1, 错误信息:%2").arg(ret).arg(m_httpApi->DoGetLastError(&ret)));
         return false;
     }
-    LH_WRITE_LOG(QString("页面配置写入tExecPlanConfig成功, 计划数目:%1").arg(QString::number(mapConfig.size())));
+    LH_WRITE_LOG(QString("页面配置写入tExecPlanConfig成功, 数目:%1").arg(QString::number(list.size())));
 
     return true;
 }
 
 /* 删除配置数据 */
-bool FromWebAPI::deleteConfigData(QMap<int, int>& mapConfig)
+bool FromWebAPI::deleteConfigData(QMap<int, ConfigData>& list)
 {
     if(m_httpApi == nullptr)
     {
@@ -413,13 +421,13 @@ bool FromWebAPI::deleteConfigData(QMap<int, int>& mapConfig)
 
     nJson json0 = nJson::array();
     try{
-        for(auto begin = mapConfig.begin(), end = mapConfig.end(); begin != end; begin++)
+        for(auto begin = list.begin(), end = list.end(); begin != end; begin++)
         {
             nJson json1;
             json1["opName"] = "ESM8C_DeleteExecPlanConfig";
             json1["Key"] = QUuid::createUuid().toString().toStdString();
             nJson json2;
-            json2["keyWord"] = begin.key();
+            json2["keyWord"] = begin->key;
             json1["paramList"] = json2;
             json0.push_back(json1);
         }
@@ -447,13 +455,13 @@ bool FromWebAPI::deleteConfigData(QMap<int, int>& mapConfig)
         LH_WRITE_ERROR(QString("删除tExecPlanConfig表格数据失败:%1, 错误信息:%2").arg(ret).arg(m_httpApi->DoGetLastError(&ret)));
         return false;
     }
-    LH_WRITE_LOG_DEBUG(QString("删除tExecPlanConfig表格数据成功, 计划数目:%1").arg(QString::number(mapConfig.size())));
+    LH_WRITE_LOG_DEBUG(QString("删除tExecPlanConfig表格数据成功, 计划数目:%1").arg(QString::number(list.size())));
 
     return true;
 }
 
 /* 获取配置数据 */
-bool FromWebAPI::getConfigData(QMap<int, int>& mapConfig)
+bool FromWebAPI::getConfigData(QMap<int, ConfigData>& list)
 {
     if(m_httpApi == nullptr)
     {
@@ -483,9 +491,12 @@ bool FromWebAPI::getConfigData(QMap<int, int>& mapConfig)
         nJson result = json1["result"];
         for(auto& it : result)
         {
-            int keyWord = it["keyWord"].get<int>();
-            int value1 = it["value1"].get<int>();
-            mapConfig.insert(keyWord, value1);
+            ConfigData data;
+            data.key = it["keyWord"].get<int>();
+            data.value = it["value1"].get<int>();
+            data.updateTime = QDateTime::fromString(QString::fromStdString(it["updateTime"].get<std::string>()),"yyyy-MM-dd hh:mm:ss");
+            data.notes = QString::fromStdString(it["notes"].get<std::string>());
+            list.insert(data.key, data);
         }
 
     } catch (const nJson::parse_error& e) {
@@ -503,7 +514,7 @@ bool FromWebAPI::getConfigData(QMap<int, int>& mapConfig)
         return false;
     }
 
-    LH_WRITE_LOG_DEBUG(QString("获取tExecPlanConfig表格数据成功,数据数目:%1").arg(mapConfig.size()));
+    LH_WRITE_LOG_DEBUG(QString("获取tExecPlanConfig表格数据成功,数据数目:%1").arg(list.size()));
     
     return true;
 }

+ 4 - 3
TransmitterSwitch/WebAPI/FromWebAPI.h

@@ -22,12 +22,13 @@ public:
     bool insertData(QList<ExecPlanItemInfo>& list);
     /* 获取tExecPlan表格数据 */
     bool getExecPlanData(QList<ExecPlanItemInfo>& list);
+
     /* 将页面的配置写入数据库 */
-    bool insertConfigData(QMap<int, int>& mapConfig);
+    bool insertConfigData(QMap<int, ConfigData>& list);
     /* 删除配置数据 */
-    bool deleteConfigData(QMap<int, int>& mapConfig);
+    bool deleteConfigData(QMap<int, ConfigData>& list);
     /* 获取配置数据 */
-    bool getConfigData(QMap<int, int>& mapConfig);
+    bool getConfigData(QMap<int, ConfigData>& list);
 
     /* 获取EQM数据库中的模版编号 */
     bool getEQMTemplateID(QList<int>& listId);

+ 30 - 11
TransmitterSwitch/transmitterswitch.cpp

@@ -149,8 +149,7 @@ void TransmitterSwitch::getExecPlanFromEQM()
     IData.clearAllItem();
 
     /* 获取页面的配置信息 */
-    QMap<int, int> mapConfig;
-    if(m_fromWebAPI->getConfigData(mapConfig))
+    if(m_fromWebAPI->getConfigData(CfgData.getMapConfigData()))
     {
         TipWidget::display(TipWidget::OPERATOR_OK, "获取配置成功", this);
     }else {
@@ -158,15 +157,16 @@ void TransmitterSwitch::getExecPlanFromEQM()
         return;
     }
     /* 设置计划配置 */
+    auto& mapConfig = CfgData.getMapConfigData();
     for(auto begin = mapConfig.begin(), end = mapConfig.end(); begin != end; begin++)
     {
-        if(begin.key() == static_cast<int>(enum_ExecPlanConfig::DefaultPlan))
+        if(begin->key == static_cast<int>(enum_ExecPlanConfig::DefaultPlan))
         {
-            ui->pBtn_defaultPlan->setChecked(begin.value() == 1 ? true : false);
+            ui->pBtn_defaultPlan->setChecked(begin->value == 1 ? true : false);
         }
-        else if(begin.key() == static_cast<int>(enum_ExecPlanConfig::ExecMode))
+        else if(begin->key == static_cast<int>(enum_ExecPlanConfig::ExecMode))
         {
-            if(begin.value() == 0)
+            if(begin->value == 0)
             {
                 ui->rBtn_moment->setChecked(true);
             }else {
@@ -195,7 +195,6 @@ void TransmitterSwitch::getExecPlanFromEQM()
         else if(it.WeekDay == 8)
         {
             addSpecialOneItem(it.WeekDay - 1, it.devName, it.actionID, it.date, it.execTime);
-        
         }
     }
     /* 排序 */
@@ -203,6 +202,8 @@ void TransmitterSwitch::getExecPlanFromEQM()
     {
         sortLayout(i);
     }
+    /* 获取数据插入到全局变量中,会将更新标志位置true,这里需要手动置为false */
+    IData.setUpdate(false);
 }
 
 /* 将计划保存到EQM数据库 */
@@ -242,13 +243,31 @@ void TransmitterSwitch::saveExecPlanToEQM()
     }
 
     /* 保存“默认计划”和“执行模式” */
-    QMap<int, int> mapConfig;
-    mapConfig.insert(static_cast<int>(enum_ExecPlanConfig::DefaultPlan), ui->pBtn_defaultPlan->isChecked() ? 1 : 0);
-    mapConfig.insert(static_cast<int>(enum_ExecPlanConfig::ExecMode), execType);
+    ConfigData config1;
+    config1.key = static_cast<int>(enum_ExecPlanConfig::DefaultPlan);
+    config1.value = ui->pBtn_defaultPlan->isChecked() ? 1 : 0;
+    config1.updateTime = QDateTime::currentDateTime();
+    CfgData.updateConfigData(config1);
+    
+    ConfigData config2;
+    config2.key = static_cast<int>(enum_ExecPlanConfig::ExecMode);
+    config2.value = ui->rBtn_moment->isChecked() ? 0 : 1;
+    config2.updateTime = QDateTime::currentDateTime();
+    CfgData.updateConfigData(config2);
+
+    /* 更新“计划是否更新”标志位 */
+    ConfigData config3;
+    config3.key = static_cast<int>(enum_ExecPlanConfig::IsChanged);
+    config3.value = IData.isUpdate() ? 1 : 0;
+    config3.updateTime = QDateTime::currentDateTime();
+    CfgData.updateConfigData(config3);
+
     /* 将配置写入数据库 */
-    if(m_fromWebAPI->insertConfigData(mapConfig))
+    if(m_fromWebAPI->insertConfigData(CfgData.getMapConfigData()))
     {
         TipWidget::display(TipWidget::OPERATOR_OK, "保存配置成功", this);
+        /* 设置更新标志位为false */
+        IData.setUpdate(false);
     }else {
         TipWidget::display(TipWidget::OPERATOR_FAIL, "保存配置失败", this);
     }