|
@@ -255,7 +255,7 @@ void TransmitterSwitch::getExecPlanFromEQM()
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- /* 判断是指定了频率还是全部频率 */
|
|
|
+ /* 判断是单频率还是多频率 */
|
|
|
if(!GInfo.isOneFrequency())
|
|
|
{
|
|
|
/* 所有频率 */
|
|
@@ -263,13 +263,19 @@ void TransmitterSwitch::getExecPlanFromEQM()
|
|
|
if(m_fromWebAPI->getExecPlanData(mapPlan))
|
|
|
{
|
|
|
/* 先清空所有的计划 */
|
|
|
- PData.clearAllPlanItem();
|
|
|
+ // PData.clearAllPlanItem();
|
|
|
/* 遍历所有的频率 */
|
|
|
for(auto begin = mapPlan.begin(), end = mapPlan.end(); begin != end; begin++)
|
|
|
{
|
|
|
auto pCard = PData.findPlanCard(begin.key());
|
|
|
if(pCard != nullptr)
|
|
|
{
|
|
|
+ if(isFrequencyInCountdown(pCard->getChannelInfo().ChannelID))
|
|
|
+ {
|
|
|
+ TipWidget::display(TipWidget::OPERATOR_WARN, QString("<%1>正在倒计时中,无法更新计划").arg(pCard->getChannelInfo().ChannelName), this);
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+ pCard->clearPlanItem(); /* 清空当前频率的计划 */
|
|
|
pCard->setPlanList(begin.value());
|
|
|
}
|
|
|
}
|
|
@@ -573,18 +579,25 @@ void TransmitterSwitch::setOnePlanData(QList<OnePlanItemInfo>& listPlan, ExecPla
|
|
|
/* 点击了添加计划按钮 */
|
|
|
void TransmitterSwitch::do_pBtnAddExecPlan()
|
|
|
{
|
|
|
- /* 创建新增窗口 */
|
|
|
- std::shared_ptr<ManagerPlan> mp = std::make_shared<ManagerPlan>(Enum_Mode::Mode_Add);
|
|
|
-
|
|
|
/* 获取当前选中的窗口 */
|
|
|
auto pCard = PData.getCurrentPlanCard();
|
|
|
ChannelInfo chnInfo;
|
|
|
if(pCard == nullptr)
|
|
|
{
|
|
|
LH_WRITE_LOG_DEBUG("没有选中频率卡片");
|
|
|
- }else {
|
|
|
- mp->setFrequencyID(pCard->getChannelInfo());
|
|
|
+ TipWidget::display(TipWidget::OPERATOR_WARN, "没有选中频率卡片", this);
|
|
|
+ return;
|
|
|
}
|
|
|
+ /* 判断有没有在倒计时中,如果在就不能操作 */
|
|
|
+ if(isFrequencyInCountdown(pCard->getChannelInfo().ChannelID))
|
|
|
+ {
|
|
|
+ TipWidget::display(TipWidget::OPERATOR_WARN, QString("<%1>正在倒计时中,无法添加计划").arg(pCard->getChannelInfo().ChannelName), this);
|
|
|
+ return;
|
|
|
+ }
|
|
|
+
|
|
|
+ /* 创建新增窗口 */
|
|
|
+ std::shared_ptr<ManagerPlan> mp = std::make_shared<ManagerPlan>(Enum_Mode::Mode_Add);
|
|
|
+ mp->setFrequencyID(pCard->getChannelInfo());
|
|
|
mp->setFromWebAPI(m_fromWebAPI);
|
|
|
mp->setFromSQLite(m_fromSQLite);
|
|
|
connect(mp.get(), &ManagerPlan::signal_callBack, this, &TransmitterSwitch::do_callBack);
|
|
@@ -656,6 +669,14 @@ void TransmitterSwitch::do_pBtnModifyExecPlan()
|
|
|
TipWidget::display(TipWidget::OPERATOR_WARN, "没有选中频率卡片", this);
|
|
|
return;
|
|
|
}
|
|
|
+
|
|
|
+ /* 判断有没有在倒计时中,如果在就不能操作 */
|
|
|
+ if(isFrequencyInCountdown(pCard->getChannelInfo().ChannelID))
|
|
|
+ {
|
|
|
+ TipWidget::display(TipWidget::OPERATOR_WARN, QString("<%1>正在倒计时中,无法修改计划").arg(pCard->getChannelInfo().ChannelName), this);
|
|
|
+ return;
|
|
|
+ }
|
|
|
+
|
|
|
/* 创建新增窗口 */
|
|
|
std::shared_ptr<ManagerPlan> mp = std::make_shared<ManagerPlan>(Enum_Mode::Mode_Modify);
|
|
|
/* 设置频率信息 */
|
|
@@ -801,11 +822,19 @@ void TransmitterSwitch::do_pBtnClearPlan()
|
|
|
}
|
|
|
|
|
|
/* 先判断有没有选中的频率卡片 */
|
|
|
- if(PData.getCurrentPlanCard() == nullptr)
|
|
|
+ auto pCard = PData.getCurrentPlanCard();
|
|
|
+ if(pCard == nullptr)
|
|
|
{
|
|
|
TipWidget::display(TipWidget::OPERATOR_FAIL, "没有选中频率卡片", this);
|
|
|
return;
|
|
|
}
|
|
|
+ /* 判断有没有在倒计时中,如果在就不能操作 */
|
|
|
+ if(isFrequencyInCountdown(pCard->getChannelInfo().ChannelID))
|
|
|
+ {
|
|
|
+ TipWidget::display(TipWidget::OPERATOR_WARN, QString("<%1>正在倒计时中,无法清空计划").arg(pCard->getChannelInfo().ChannelName), this);
|
|
|
+ return;
|
|
|
+ }
|
|
|
+
|
|
|
/* 跳出弹窗警告 */
|
|
|
Warning w(this);
|
|
|
w.setQSS(EPUIStyle.getQSSPath());
|
|
@@ -819,13 +848,6 @@ void TransmitterSwitch::do_pBtnClearPlan()
|
|
|
{
|
|
|
return;
|
|
|
}
|
|
|
- /* 获取选中的卡片 */
|
|
|
- auto pCard = PData.getCurrentPlanCard();
|
|
|
- if(pCard == nullptr)
|
|
|
- {
|
|
|
- LH_WRITE_ERROR("没有选中频率卡片");
|
|
|
- return;
|
|
|
- }
|
|
|
/* 清空计划 */
|
|
|
pCard->clearPlanItem();
|
|
|
if(GInfo.isOnlineDB())
|
|
@@ -893,6 +915,12 @@ void TransmitterSwitch::do_pBtnCopyToOther()
|
|
|
LH_WRITE_ERROR(QString("没有找到频率ID为%1的卡片").arg(it.ChannelID));
|
|
|
continue;
|
|
|
}
|
|
|
+ /* 判断有没有在倒计时中,如果在就不能操作 */
|
|
|
+ if(isFrequencyInCountdown(pTmpCard->getChannelInfo().ChannelID))
|
|
|
+ {
|
|
|
+ TipWidget::display(TipWidget::OPERATOR_WARN, QString("<%1>正在倒计时中,无法变更计划").arg(pCard->getChannelInfo().ChannelName), this);
|
|
|
+ continue;
|
|
|
+ }
|
|
|
/* 设置计划列表 */
|
|
|
pTmpCard->setPlanList(listPlan);
|
|
|
QList<OnePlanItemInfo> tmpListPlan;
|
|
@@ -1426,6 +1454,12 @@ void TransmitterSwitch::importTemplateFromEQM()
|
|
|
LH_WRITE_ERROR(QString("没有找到频率ID为%1的卡片").arg(begin.key()));
|
|
|
continue;
|
|
|
}
|
|
|
+ /* 判断有没有在倒计时中,如果在就不能操作 */
|
|
|
+ if(isFrequencyInCountdown(pCard->getChannelInfo().ChannelID))
|
|
|
+ {
|
|
|
+ TipWidget::display(TipWidget::OPERATOR_WARN, QString("<%1>正在倒计时中,无法导入模版").arg(pCard->getChannelInfo().ChannelName), this);
|
|
|
+ continue;
|
|
|
+ }
|
|
|
/* 设置计划列表 */
|
|
|
pCard->setPlanList(begin.value());
|
|
|
|
|
@@ -1821,6 +1855,115 @@ void TransmitterSwitch::manageTemplateFromSQLite()
|
|
|
}
|
|
|
}
|
|
|
|
|
|
+/* 判断当前频率是否在倒计时 */
|
|
|
+bool TransmitterSwitch::isFrequencyInCountdown(int channelID)
|
|
|
+{
|
|
|
+ auto pCard = PData.findPlanCard(channelID);
|
|
|
+ if(pCard == nullptr)
|
|
|
+ {
|
|
|
+ LH_WRITE_ERROR(QString("没有找到频率ID为%1的卡片").arg(channelID));
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+ QList<PlanInfo> list;
|
|
|
+ pCard->getPlanList(list);
|
|
|
+
|
|
|
+ bool isNear = false;
|
|
|
+ QDateTime nowTime = QDateTime::currentDateTime();
|
|
|
+ /* 先判断特殊日 */
|
|
|
+ for(const auto& it : list)
|
|
|
+ {
|
|
|
+ if(it.onWeekDay == enum_WeekDay::WeekDay_Special)
|
|
|
+ {
|
|
|
+ if(isInCountdownTime(nowTime, it.onWeekDay, it.onDateTime))
|
|
|
+ {
|
|
|
+ /* 找到特殊日的计划 */
|
|
|
+ isNear = true;
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ if(isInCountdownTime(nowTime, it.offWeekDay, it.offDateTime))
|
|
|
+ {
|
|
|
+ /* 找到特殊日的计划 */
|
|
|
+ isNear = true;
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if(isNear)
|
|
|
+ {
|
|
|
+ /* 找到特殊日的计划,直接返回 */
|
|
|
+ return true;
|
|
|
+ }
|
|
|
+ /* 判断正常日 */
|
|
|
+ for(const auto& it : list)
|
|
|
+ {
|
|
|
+ if(it.onWeekDay != enum_WeekDay::WeekDay_Special)
|
|
|
+ {
|
|
|
+ if(isInCountdownTime(nowTime, it.onWeekDay, it.onDateTime))
|
|
|
+ {
|
|
|
+ /* 找到正常日的计划 */
|
|
|
+ isNear = true;
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ if(isInCountdownTime(nowTime, it.offWeekDay, it.offDateTime))
|
|
|
+ {
|
|
|
+ /* 找到正常日的计划 */
|
|
|
+ isNear = true;
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ return isNear;
|
|
|
+}
|
|
|
+
|
|
|
+/* 判断两个时间点是否在十分钟之内 */
|
|
|
+bool TransmitterSwitch::isInCountdownTime(const QDateTime& nowTime, const enum_WeekDay weekDay, const QDateTime& time)
|
|
|
+{
|
|
|
+ // 10分钟后
|
|
|
+ QDateTime tmpTime = nowTime.addSecs(10 * 60);
|
|
|
+ enum_WeekDay nowWeekDay = static_cast<enum_WeekDay>(nowTime.date().dayOfWeek());
|
|
|
+ enum_WeekDay tmpWeekDay = static_cast<enum_WeekDay>(tmpTime.date().dayOfWeek());
|
|
|
+ /* 先判断是否是特殊日 */
|
|
|
+ if(weekDay == enum_WeekDay::WeekDay_Special)
|
|
|
+ {
|
|
|
+ if(time <= tmpTime && time > nowTime)
|
|
|
+ {
|
|
|
+ /* 在10分钟之内 */
|
|
|
+ return true;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ /* 正常日,先判断有没有跨天 */
|
|
|
+ if(nowWeekDay == tmpWeekDay)
|
|
|
+ {
|
|
|
+ /* 在同一天 */
|
|
|
+ if(time.time() <= tmpTime.time() && time.time() > nowTime.time())
|
|
|
+ {
|
|
|
+ /* 在10分钟之内 */
|
|
|
+ return true;
|
|
|
+ }
|
|
|
+ }else {
|
|
|
+ /* 跨天了,判断时间 */
|
|
|
+ if(weekDay == nowWeekDay)
|
|
|
+ {
|
|
|
+ /* 在今天 */
|
|
|
+ if(time.time() >= nowTime.time())
|
|
|
+ {
|
|
|
+ /* 在今天的10分钟之内 */
|
|
|
+ return true;
|
|
|
+ }else {
|
|
|
+ /* 在明天的10分钟之内 */
|
|
|
+ if(time.time() <= tmpTime.time())
|
|
|
+ {
|
|
|
+ return true;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ return false; /* 不在10分钟之内 */
|
|
|
+}
|
|
|
+
|
|
|
|
|
|
|
|
|
/* 事件过滤器 */
|