Просмотр исходного кода

1.3.4
1、重新修改了获取计划的方式,统一获取所有的计划数据

Apple 2 месяцев назад
Родитель
Сommit
00bccde8b4

+ 9 - 0
TransmitterSwitch/ExecPlanData/PlanData.cpp

@@ -49,6 +49,15 @@ void PlanData::clearOnePlanItem(int channelID)
     }
 }
 
+/* 清空所有的计划 */
+void PlanData::clearAllPlanItem()
+{
+    for(auto& it : m_mapPlanCard)
+    {
+        it->clearPlanItem();
+    }
+}
+
 /* 查找卡片 */
 PlanCard* PlanData::findPlanCard(int channelID)
 {

+ 2 - 0
TransmitterSwitch/ExecPlanData/PlanData.h

@@ -27,6 +27,8 @@ public:
     void deleteOneCard(int channelID);
     /* 清空一个卡片的计划 */
     void clearOnePlanItem(int channelID);
+    /* 清空所有的计划 */
+    void clearAllPlanItem();
 
     /* 查找卡片 */
     PlanCard* findPlanCard(int channelID);

+ 76 - 0
TransmitterSwitch/WebAPI/FromWebAPI.cpp

@@ -408,6 +408,82 @@ bool FromWebAPI::getExecPlanData(int chnID, QList<OnePlanItemInfo>& list)
     return true;
 }
 
+bool FromWebAPI::getExecPlanData(QMap<int, QList<OnePlanItemInfo>>& mapPlan)
+{
+    if(m_httpApi == nullptr)
+    {
+        LH_WRITE_ERROR("WebAPI is nullptr");
+        return false;
+    }
+
+    nJson json0;
+    json0["opName"] = "ESM8C_GetExecPlan";
+    nJson json1;
+    json0["paramList"] = json1;
+    QString strCmd = QString::fromStdString(json0.dump());
+    QString strRet;
+    auto ret = m_httpApi->DBDoInterface(enDBOperatorType::EDBOT_Select, strCmd, strRet, true);
+    if(ret != 0)
+    {
+        LH_WRITE_ERROR(QString("从EQM获取tExecPlan表格数据失败:%1, 错误信息:%2").arg(ret).arg(m_httpApi->DoGetLastError(&ret)));
+        return false;
+    }
+    /* 解析获取到的JSON数据 */
+    // SPDLOG_LOGGER_DEBUG(m_logger,"获取执行计划:\n{}",strRet.toStdString());
+    try 
+    {
+        nJson json2 = nJson::parse(strRet.toStdString());
+        int retCode = json2["code"].get<int>();
+        if(retCode != 0)
+        {
+            LH_WRITE_ERROR("获取tExecPlan表格数据失败");
+            return false;
+        }
+        nJson result = json2["result"];
+        for(auto& it : result)
+        {
+            OnePlanItemInfo info;
+            info.ChannelID = it["channelID"].is_null() ? -1 : it["channelID"].get<int>();
+            info.ChannelName = QString::fromStdString(it["channelName"].get<std::string>());
+            info.onWeekDay = static_cast<enum_WeekDay>(it["onWeekDay"].get<int>());
+            info.onDateTime.setDate(QDate::fromString(QString::fromStdString(it["onDate"].get<std::string>()), "yyyy-MM-dd"));
+            info.onDateTime.setTime(QTime::fromString(QString::fromStdString(it["onTime"].get<std::string>()), "hh:mm:ss"));
+            info.offWeekDay = static_cast<enum_WeekDay>(it["offWeekDay"].get<int>());
+            info.offDateTime.setDate(QDate::fromString(QString::fromStdString(it["offDate"].get<std::string>()), "yyyy-MM-dd"));
+            info.offDateTime.setTime(QTime::fromString(QString::fromStdString(it["offTime"].get<std::string>()), "hh:mm:ss"));
+
+            /* 查找对应的设备列表 */
+            auto list = mapPlan.find(info.ChannelID);
+            if(list == mapPlan.end())
+            {
+                /* 创建一个新的列表 */
+                QList<OnePlanItemInfo> listPlan;
+                listPlan.append(info);
+                mapPlan.insert(info.ChannelID, listPlan);
+            }else {
+                /* 找到对应的列表 */
+                list->append(info);
+            }
+        }
+
+    } catch (const nJson::parse_error& e) {
+        LH_WRITE_ERROR(QString("解析 tExecPlan 表格数据失败:%1").arg(e.what()));
+        return false;
+    }
+    catch (const nJson::exception& e)
+    {
+        LH_WRITE_ERROR(QString("解析 tExecPlan 表格数据失败:%1").arg(e.what()));
+        return false;
+    }
+    catch(...)
+    {
+        LH_WRITE_ERROR("解析 tExecPlan 表格数据失败");
+        return false;
+    }
+
+    return true;
+}
+
 
 /* 删除所有行 */
 bool FromWebAPI::deleteAllRow()

+ 1 - 0
TransmitterSwitch/WebAPI/FromWebAPI.h

@@ -24,6 +24,7 @@ public:
     bool insertData(int chnID, QList<OnePlanItemInfo>& list);
     /* 获取tExecPlan表格数据 */
     bool getExecPlanData(int chnID, QList<OnePlanItemInfo>& list);
+    bool getExecPlanData(QMap<int, QList<OnePlanItemInfo>>& mapPlan);
     /* 删除所有行 */
     bool deleteAllRow();
     /* 删除一个发射机计划 */

+ 33 - 17
TransmitterSwitch/transmitterswitch.cpp

@@ -189,31 +189,47 @@ void TransmitterSwitch::getExecPlanFromEQM()
     }
 
     /* 获取所有频率的计划 */
-    bool isSuccess = true;
-    for(const auto& chn : ChnContainer.getMapChannel())
+    // bool isSuccess = true;
+    // for(const auto& chn : ChnContainer.getMapChannel())
+    // {
+    //     /* 获取计划 */
+    //     QList<OnePlanItemInfo> list;
+    //     if(m_fromWebAPI->getExecPlanData(chn.ChannelID, list))
+    //     {
+    //         auto pCard = PData.findPlanCard(chn.ChannelID);
+    //         if(pCard != nullptr)
+    //         {
+    //             pCard->setPlanList(list);
+    //         }
+    //     }else {
+    //         TipWidget::display(TipWidget::OPERATOR_FAIL, QString("获取频率<%1>计划失败").arg(chn.ChannelName), this);
+    //         isSuccess = false;
+    //         LH_WRITE_ERROR(QString("获取频率“%1”计划失败").arg(chn.ChannelName));
+    //     }
+    //     /* 先显示已获取到的数据,避免等待时间太久,卡顿 */
+    //     QEventLoop loop;
+    //     loop.processEvents();
+    // }
+
+    QMap<int, QList<OnePlanItemInfo>> mapPlan;
+    if(m_fromWebAPI->getExecPlanData(mapPlan))
     {
-        /* 获取计划 */
-        QList<OnePlanItemInfo> list;
-        if(m_fromWebAPI->getExecPlanData(chn.ChannelID, list))
+        /* 先清空所有的计划 */
+        PData.clearAllPlanItem();
+        /* 遍历所有的频率 */
+        for(auto begin = mapPlan.begin(), end = mapPlan.end(); begin != end; begin++)
         {
-            auto pCard = PData.findPlanCard(chn.ChannelID);
+            auto pCard = PData.findPlanCard(begin.key());
             if(pCard != nullptr)
             {
-                pCard->setPlanList(list);
+                pCard->setPlanList(begin.value());
             }
-        }else {
-            TipWidget::display(TipWidget::OPERATOR_FAIL, QString("获取频率<%1>计划失败").arg(chn.ChannelName), this);
-            isSuccess = false;
-            LH_WRITE_ERROR(QString("获取频率“%1”计划失败").arg(chn.ChannelName));
         }
-        /* 先显示已获取到的数据,避免等待时间太久,卡顿 */
-        QEventLoop loop;
-        loop.processEvents();
-    }
-    if(isSuccess)
-    {
         TipWidget::display(TipWidget::OPERATOR_OK, "获取计划成功", this);
+    }else {
+        TipWidget::display(TipWidget::OPERATOR_FAIL, QString("获取计划失败"), this);
     }
+
     /* 调用回调函数 */
     if(m_trackCB != nullptr)
     {