|  | @@ -33,6 +33,7 @@ TransmitterSwitch::TransmitterSwitch(QWidget *parent) :
 | 
	
		
			
				|  |  |  {
 | 
	
		
			
				|  |  |      ui->setupUi(this);
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | +    LH_WRITE_LOG("================================== TransmitterPlan =================================");
 | 
	
		
			
				|  |  |      /* 创建一个布局 */
 | 
	
		
			
				|  |  |      QVBoxLayout* layout = new QVBoxLayout(parent);
 | 
	
		
			
				|  |  |      layout->setMargin(0);
 | 
	
	
		
			
				|  | @@ -175,6 +176,11 @@ void TransmitterSwitch::setWebAPIInfo(const InitData& data)
 | 
	
		
			
				|  |  |   */
 | 
	
		
			
				|  |  |  void TransmitterSwitch::getExecPlanFromEQM()
 | 
	
		
			
				|  |  |  {
 | 
	
		
			
				|  |  | +    if(m_fromWebAPI == nullptr)
 | 
	
		
			
				|  |  | +    {
 | 
	
		
			
				|  |  | +        LH_WRITE_ERROR("未初始化WebAPI");
 | 
	
		
			
				|  |  | +        return;
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  |      /* 判断是在线还是离线模式 */
 | 
	
		
			
				|  |  |      if(!GInfo.isOnlineDB())
 | 
	
		
			
				|  |  |      {
 | 
	
	
		
			
				|  | @@ -260,6 +266,11 @@ void TransmitterSwitch::getExecPlanFromEQM()
 | 
	
		
			
				|  |  |  /* 将计划保存到EQM数据库 */
 | 
	
		
			
				|  |  |  void TransmitterSwitch::saveExecPlanToEQM()
 | 
	
		
			
				|  |  |  {
 | 
	
		
			
				|  |  | +    if(m_fromWebAPI == nullptr)
 | 
	
		
			
				|  |  | +    {
 | 
	
		
			
				|  |  | +        LH_WRITE_ERROR("未初始化WebAPI");
 | 
	
		
			
				|  |  | +        return;
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  |      /* 判断是在线还是离线模式 */
 | 
	
		
			
				|  |  |      if(!GInfo.isOnlineDB())
 | 
	
		
			
				|  |  |      {
 | 
	
	
		
			
				|  | @@ -353,7 +364,11 @@ void TransmitterSwitch::setWebAPIInfoOnly(const InitData& data)
 | 
	
		
			
				|  |  |          LH_WRITE_ERROR("WebAPI info is empty");
 | 
	
		
			
				|  |  |          return;
 | 
	
		
			
				|  |  |      }
 | 
	
		
			
				|  |  | -    m_fromWebAPI->initWebApi(data.url, data.serverID, data.serverKey);
 | 
	
		
			
				|  |  | +    if(!m_fromWebAPI->initWebApi(data.url, data.serverID, data.serverKey))
 | 
	
		
			
				|  |  | +    {
 | 
	
		
			
				|  |  | +        LH_WRITE_ERROR("WebAPI init failed");
 | 
	
		
			
				|  |  | +        return;
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  |  }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  
 | 
	
	
		
			
				|  | @@ -430,6 +445,17 @@ void TransmitterSwitch::clearAll()
 | 
	
		
			
				|  |  |      m_listFrequencyBtn.clear();
 | 
	
		
			
				|  |  |      /* 清空频率信息 */
 | 
	
		
			
				|  |  |      ChnContainer.clearAllChannel();
 | 
	
		
			
				|  |  | +    /* 删除数据库连接实例 */
 | 
	
		
			
				|  |  | +    if(m_fromWebAPI != nullptr)
 | 
	
		
			
				|  |  | +    {
 | 
	
		
			
				|  |  | +        delete m_fromWebAPI;
 | 
	
		
			
				|  |  | +        m_fromWebAPI = nullptr;
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +    if(m_fromSQLite != nullptr)
 | 
	
		
			
				|  |  | +    {
 | 
	
		
			
				|  |  | +        delete m_fromSQLite;
 | 
	
		
			
				|  |  | +        m_fromSQLite = nullptr;
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  |  }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  
 | 
	
	
		
			
				|  | @@ -545,6 +571,12 @@ void TransmitterSwitch::do_pBtnAddExecPlan()
 | 
	
		
			
				|  |  |          }
 | 
	
		
			
				|  |  |          /* 设置计划列表 */
 | 
	
		
			
				|  |  |          pCard->setPlanList(list);
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +        if(!GInfo.isOnlineDB())
 | 
	
		
			
				|  |  | +        {
 | 
	
		
			
				|  |  | +            /* 离线模式不需要写入数据库 */
 | 
	
		
			
				|  |  | +            continue;
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  |          /* 写入数据库 */
 | 
	
		
			
				|  |  |          QList<OnePlanItemInfo> listPlan;
 | 
	
		
			
				|  |  |          pCard->getAllPlanInfo(listPlan);
 | 
	
	
		
			
				|  | @@ -599,14 +631,19 @@ void TransmitterSwitch::do_pBtnModifyExecPlan()
 | 
	
		
			
				|  |  |      auto list = mapPlanInfo.find(pCard->getChannelInfo().ChannelID);
 | 
	
		
			
				|  |  |      pCard->setPlanList(*list);
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -    int chnID = pCard->getChannelInfo().ChannelID;
 | 
	
		
			
				|  |  | -    QList<OnePlanItemInfo> listPlan;
 | 
	
		
			
				|  |  | -    pCard->getAllPlanInfo(listPlan);
 | 
	
		
			
				|  |  | -    if(!m_fromWebAPI->insertData(chnID, listPlan))
 | 
	
		
			
				|  |  | +    /* 在线模式写入数据库,离线模式不需要写入 */
 | 
	
		
			
				|  |  | +    if(GInfo.isOnlineDB())
 | 
	
		
			
				|  |  |      {
 | 
	
		
			
				|  |  | -        LH_WRITE_ERROR(QString("频率ID为%1的计划写入数据库失败").arg(chnID));
 | 
	
		
			
				|  |  | -        TipWidget::display(TipWidget::OPERATOR_FAIL, QString("频率<%1>计划写入数据库失败").arg(pCard->getChannelInfo().ChannelName), this);
 | 
	
		
			
				|  |  | +        int chnID = pCard->getChannelInfo().ChannelID;
 | 
	
		
			
				|  |  | +        QList<OnePlanItemInfo> listPlan;
 | 
	
		
			
				|  |  | +        pCard->getAllPlanInfo(listPlan);
 | 
	
		
			
				|  |  | +        if(!m_fromWebAPI->insertData(chnID, listPlan))
 | 
	
		
			
				|  |  | +        {
 | 
	
		
			
				|  |  | +            LH_WRITE_ERROR(QString("频率ID为%1的计划写入数据库失败").arg(chnID));
 | 
	
		
			
				|  |  | +            TipWidget::display(TipWidget::OPERATOR_FAIL, QString("频率<%1>计划写入数据库失败").arg(pCard->getChannelInfo().ChannelName), this);
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  |      }
 | 
	
		
			
				|  |  | +    
 | 
	
		
			
				|  |  |      TipWidget::display(TipWidget::OPERATOR_OK, "修改计划成功", this);
 | 
	
		
			
				|  |  |      /* 调用回调函数 */
 | 
	
		
			
				|  |  |      if(m_trackCB != nullptr)
 | 
	
	
		
			
				|  | @@ -625,6 +662,15 @@ void TransmitterSwitch::do_pBtnRefresh()
 | 
	
		
			
				|  |  |  /* 点击了“是否开启计划”按钮 */
 | 
	
		
			
				|  |  |  void TransmitterSwitch::do_pBtnIsOpenPlan()
 | 
	
		
			
				|  |  |  {
 | 
	
		
			
				|  |  | +    if(!GInfo.isOnlineDB())
 | 
	
		
			
				|  |  | +    {
 | 
	
		
			
				|  |  | +        return;
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +    if(m_fromWebAPI == nullptr)
 | 
	
		
			
				|  |  | +    {
 | 
	
		
			
				|  |  | +        LH_WRITE_ERROR("未初始化WebAPI");
 | 
	
		
			
				|  |  | +        return;
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  |      /* 保存“默认计划”和“执行模式” */
 | 
	
		
			
				|  |  |      ConfigData config1;
 | 
	
		
			
				|  |  |      config1.key = static_cast<int>(enum_ExecPlanConfig::OpenPlan);
 | 
	
	
		
			
				|  | @@ -650,6 +696,15 @@ void TransmitterSwitch::do_pBtnIsOpenPlan()
 | 
	
		
			
				|  |  |  /* 点击了“执行模式”按钮 */
 | 
	
		
			
				|  |  |  void TransmitterSwitch::do_pBtnExecMode()
 | 
	
		
			
				|  |  |  {
 | 
	
		
			
				|  |  | +    if(!GInfo.isOnlineDB())
 | 
	
		
			
				|  |  | +    {
 | 
	
		
			
				|  |  | +        return;
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +    if(m_fromWebAPI == nullptr)
 | 
	
		
			
				|  |  | +    {
 | 
	
		
			
				|  |  | +        LH_WRITE_ERROR("未初始化WebAPI");
 | 
	
		
			
				|  |  | +        return;
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  |      /* 保存“默认计划”和“执行模式” */
 | 
	
		
			
				|  |  |      ConfigData config1;
 | 
	
		
			
				|  |  |      config1.key = static_cast<int>(enum_ExecPlanConfig::ExecMode);
 | 
	
	
		
			
				|  | @@ -713,14 +768,21 @@ void TransmitterSwitch::do_pBtnClearPlan()
 | 
	
		
			
				|  |  |      }
 | 
	
		
			
				|  |  |      /* 清空计划 */
 | 
	
		
			
				|  |  |      pCard->clearPlanItem();
 | 
	
		
			
				|  |  | -    /* 删除数据库中的计划 */
 | 
	
		
			
				|  |  | -    if(!m_fromWebAPI->deleteOneChnPlan(pCard->getChannelInfo().ChannelID))
 | 
	
		
			
				|  |  | +    if(GInfo.isOnlineDB())
 | 
	
		
			
				|  |  |      {
 | 
	
		
			
				|  |  | -        LH_WRITE_ERROR(QString("频率ID为%1的计划删除失败").arg(pCard->getChannelInfo().ChannelID));
 | 
	
		
			
				|  |  | -        TipWidget::display(TipWidget::OPERATOR_FAIL, QString("频率<%1>计划删除失败").arg(pCard->getChannelInfo().ChannelName), this);
 | 
	
		
			
				|  |  | +        /* 删除数据库中的计划 */
 | 
	
		
			
				|  |  | +        if(!m_fromWebAPI->deleteOneChnPlan(pCard->getChannelInfo().ChannelID))
 | 
	
		
			
				|  |  | +        {
 | 
	
		
			
				|  |  | +            LH_WRITE_ERROR(QString("频率ID为%1的计划删除失败").arg(pCard->getChannelInfo().ChannelID));
 | 
	
		
			
				|  |  | +            TipWidget::display(TipWidget::OPERATOR_FAIL, QString("频率<%1>计划删除失败").arg(pCard->getChannelInfo().ChannelName), this);
 | 
	
		
			
				|  |  | +        }else {
 | 
	
		
			
				|  |  | +            TipWidget::display(TipWidget::OPERATOR_OK, "清空计划成功", this);
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  |      }else {
 | 
	
		
			
				|  |  | +        /* 离线模式不需要删除数据库中的计划 */
 | 
	
		
			
				|  |  |          TipWidget::display(TipWidget::OPERATOR_OK, "清空计划成功", this);
 | 
	
		
			
				|  |  |      }
 | 
	
		
			
				|  |  | +    
 | 
	
		
			
				|  |  |  }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  /* 点击了复制到其他频率按钮 */
 | 
	
	
		
			
				|  | @@ -929,6 +991,10 @@ void TransmitterSwitch::do_setUIStyle()
 | 
	
		
			
				|  |  |      /* 给所有的按钮设置样式 */
 | 
	
		
			
				|  |  |      ui->pBtn_allFrequency->setStyleSheet(EPUIStyle.StrQSS_PBtnFrequency);
 | 
	
		
			
				|  |  |      // LH_WRITE_LOG(QString("频率按钮设置样式:%1").arg(EPUIStyle.StrQSS_PBtnFrequency));
 | 
	
		
			
				|  |  | +    for(auto& it : m_listFrequencyBtn)
 | 
	
		
			
				|  |  | +    {
 | 
	
		
			
				|  |  | +        it->setStyleSheet(EPUIStyle.StrQSS_PBtnFrequency);
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  |  }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  /* 选择了一个频率按钮,取消其他的选择 */
 | 
	
	
		
			
				|  | @@ -1160,10 +1226,8 @@ void TransmitterSwitch::setOneFrequencyMode()
 | 
	
		
			
				|  |  |              /* 设置频率信息 */
 | 
	
		
			
				|  |  |              GInfo.setChannelInfo(chnInfo);
 | 
	
		
			
				|  |  |          }
 | 
	
		
			
				|  |  | -        // LH_WRITE_LOG_DEBUG(QString("设置频率信息成功,频率ID:%1,频率名称:%2").arg(GInfo.getChannelInfo().ChannelID).arg(GInfo.getChannelInfo().ChannelName));
 | 
	
		
			
				|  |  |          /* 如果设置了特定的频率,删除其他的频率 */
 | 
	
		
			
				|  |  |          ChnContainer.deleteOtherChannel(GInfo.getChannelInfo().ChannelID);
 | 
	
		
			
				|  |  | -        // LH_WRITE_LOG_DEBUG(QString("map频率ID:%1,频率名称:%2").arg(ChnContainer.getMapChannel().first().ChannelID).arg(ChnContainer.getMapChannel().first().ChannelName));
 | 
	
		
			
				|  |  |      }else 
 | 
	
		
			
				|  |  |      {
 | 
	
		
			
				|  |  |          /* 清空所有频率 */
 | 
	
	
		
			
				|  | @@ -1174,6 +1238,8 @@ void TransmitterSwitch::setOneFrequencyMode()
 | 
	
		
			
				|  |  |      
 | 
	
		
			
				|  |  |      /* 隐藏复制到其他频率的按钮 */
 | 
	
		
			
				|  |  |      ui->pBtn_cloneToOther->hide();
 | 
	
		
			
				|  |  | +    /* 隐藏全部频率按钮 */
 | 
	
		
			
				|  |  | +    ui->pBtn_allFrequency->hide();
 | 
	
		
			
				|  |  |  }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  /* 设置使用在线或者使用离线数据库,主要是保存模版 */
 | 
	
	
		
			
				|  | @@ -1206,6 +1272,12 @@ void TransmitterSwitch::setUseOnlineDB(bool useOnlineDB)
 | 
	
		
			
				|  |  |  /* 从EQM数据库导入模版 */
 | 
	
		
			
				|  |  |  void TransmitterSwitch::importTemplateFromEQM()
 | 
	
		
			
				|  |  |  {
 | 
	
		
			
				|  |  | +    if(m_fromWebAPI == nullptr)
 | 
	
		
			
				|  |  | +    {
 | 
	
		
			
				|  |  | +        LH_WRITE_ERROR("没有初始化FromWebAPI");
 | 
	
		
			
				|  |  | +        return;
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  |      QMultiMap<int, OneTemplateInfo> tabList;
 | 
	
		
			
				|  |  |      /* 判断有没有选中卡片 */
 | 
	
		
			
				|  |  |      auto pCard = PData.getCurrentPlanCard();
 | 
	
	
		
			
				|  | @@ -1306,6 +1378,12 @@ void TransmitterSwitch::importTemplateFromEQM()
 | 
	
		
			
				|  |  |  /* 从SQLite导入模版 */
 | 
	
		
			
				|  |  |  void TransmitterSwitch::importTemplateFromSQLite()
 | 
	
		
			
				|  |  |  {
 | 
	
		
			
				|  |  | +    if(m_fromSQLite == nullptr)
 | 
	
		
			
				|  |  | +    {
 | 
	
		
			
				|  |  | +        LH_WRITE_ERROR("没有初始化FromSQLite");
 | 
	
		
			
				|  |  | +        return;
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  |      QMultiMap<int, OneTemplateInfo> tabList;
 | 
	
		
			
				|  |  |      /* 获取当前选中的卡片 */
 | 
	
		
			
				|  |  |      auto pCard = PData.getCurrentPlanCard();
 | 
	
	
		
			
				|  | @@ -1374,6 +1452,12 @@ void TransmitterSwitch::importTemplateFromSQLite()
 | 
	
		
			
				|  |  |  /* 将模版写入数据库 */
 | 
	
		
			
				|  |  |  void TransmitterSwitch::saveTemplateToEQM(ChannelInfo info)
 | 
	
		
			
				|  |  |  {
 | 
	
		
			
				|  |  | +    if(m_fromWebAPI == nullptr)
 | 
	
		
			
				|  |  | +    {
 | 
	
		
			
				|  |  | +        LH_WRITE_ERROR("没有初始化FromWebAPI");
 | 
	
		
			
				|  |  | +        return;
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  |      auto pCard = PData.findPlanCard(info.ChannelID);
 | 
	
		
			
				|  |  |      if(pCard == nullptr)
 | 
	
		
			
				|  |  |      {
 | 
	
	
		
			
				|  | @@ -1419,6 +1503,12 @@ void TransmitterSwitch::saveTemplateToEQM(ChannelInfo info)
 | 
	
		
			
				|  |  |  /* 保存计划到SQLite数据库 */
 | 
	
		
			
				|  |  |  void TransmitterSwitch::saveTemplateToSQLite(ChannelInfo info)
 | 
	
		
			
				|  |  |  {
 | 
	
		
			
				|  |  | +    if(m_fromSQLite == nullptr)
 | 
	
		
			
				|  |  | +    {
 | 
	
		
			
				|  |  | +        LH_WRITE_ERROR("没有初始化FromSQLite");
 | 
	
		
			
				|  |  | +        return;
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  |      auto pCard = PData.findPlanCard(info.ChannelID);
 | 
	
		
			
				|  |  |      if(pCard == nullptr)
 | 
	
		
			
				|  |  |      {
 | 
	
	
		
			
				|  | @@ -1464,6 +1554,12 @@ void TransmitterSwitch::saveTemplateToSQLite(ChannelInfo info)
 | 
	
		
			
				|  |  |  /* 从EQM数据库中删除一个模版 */
 | 
	
		
			
				|  |  |  void TransmitterSwitch::deleteTemplateFromEQM(OneTemplateInfo info)
 | 
	
		
			
				|  |  |  {
 | 
	
		
			
				|  |  | +    if(m_fromWebAPI == nullptr)
 | 
	
		
			
				|  |  | +    {
 | 
	
		
			
				|  |  | +        LH_WRITE_ERROR("没有初始化FromWebAPI");
 | 
	
		
			
				|  |  | +        return;
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  |      /* 删除模版 */
 | 
	
		
			
				|  |  |      if(m_fromWebAPI->deleteTemplate(info))
 | 
	
		
			
				|  |  |      {
 | 
	
	
		
			
				|  | @@ -1477,6 +1573,13 @@ void TransmitterSwitch::deleteTemplateFromEQM(OneTemplateInfo info)
 | 
	
		
			
				|  |  |  /* 从SQLite数据库中删除一个模版 */
 | 
	
		
			
				|  |  |  void TransmitterSwitch::deleteTemplateFromSQLite(OneTemplateInfo info)
 | 
	
		
			
				|  |  |  {
 | 
	
		
			
				|  |  | +    if(m_fromSQLite == nullptr)
 | 
	
		
			
				|  |  | +    {
 | 
	
		
			
				|  |  | +        LH_WRITE_ERROR("没有初始化FromSQLite");
 | 
	
		
			
				|  |  | +        return;
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  |      if(m_fromSQLite->deleteTemplate(info))
 | 
	
		
			
				|  |  |      {
 | 
	
		
			
				|  |  |          TipWidget::display(TipWidget::OPERATOR_OK, "删除模版成功", this);
 | 
	
	
		
			
				|  | @@ -1489,6 +1592,12 @@ void TransmitterSwitch::deleteTemplateFromSQLite(OneTemplateInfo info)
 | 
	
		
			
				|  |  |  /* 管理EQM数据库的模版数据 */
 | 
	
		
			
				|  |  |  void TransmitterSwitch::manageTemplateFromEQM()
 | 
	
		
			
				|  |  |  {
 | 
	
		
			
				|  |  | +    if(m_fromWebAPI == nullptr)
 | 
	
		
			
				|  |  | +    {
 | 
	
		
			
				|  |  | +        LH_WRITE_ERROR("没有初始化FromWebAPI");
 | 
	
		
			
				|  |  | +        return;
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  |      /* int是频率ID */
 | 
	
		
			
				|  |  |      QMultiMap<int, OneTemplateInfo> tabList;
 | 
	
		
			
				|  |  |  
 | 
	
	
		
			
				|  | @@ -1567,6 +1676,12 @@ void TransmitterSwitch::manageTemplateFromEQM()
 | 
	
		
			
				|  |  |  /* 管理SQLite数据库的模版数据 */
 | 
	
		
			
				|  |  |  void TransmitterSwitch::manageTemplateFromSQLite()
 | 
	
		
			
				|  |  |  {
 | 
	
		
			
				|  |  | +    if (m_fromSQLite == nullptr)
 | 
	
		
			
				|  |  | +    {
 | 
	
		
			
				|  |  | +        LH_WRITE_ERROR("没有初始化FromSQLite");
 | 
	
		
			
				|  |  | +        return;
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  |      QList<OneTemplateInfo> listTemplate;
 | 
	
		
			
				|  |  |      /* 获取全部的频率 */
 | 
	
		
			
				|  |  |      if(!m_fromSQLite->getTemplateList(GInfo.getChannelInfo().ChannelID, listTemplate))
 |