|
|
@@ -594,9 +594,6 @@ bool ManagerPlan::checkPlanTimeConflict(const int chnID, const PlanInfo& info)
|
|
|
newInfo.isNextWeek = isCrossWeek(newInfo);
|
|
|
QList<PlanInfo>& list = findPlanList(chnID);
|
|
|
|
|
|
- bool isConflict = false;
|
|
|
- // int weekDayStart = static_cast<int>(info.onWeekDay);
|
|
|
- // int weekDayEnd = static_cast<int>(info.offWeekDay);
|
|
|
for(const auto& it : list)
|
|
|
{
|
|
|
/* 判断是否同为正常日或者特殊日 */
|
|
|
@@ -609,33 +606,94 @@ bool ManagerPlan::checkPlanTimeConflict(const int chnID, const PlanInfo& info)
|
|
|
PlanInfo tmpInfo = it;
|
|
|
/* 判断是否跨周了 */
|
|
|
tmpInfo.isNextWeek = isCrossWeek(tmpInfo);
|
|
|
+ if(tmpInfo.isNextWeek)
|
|
|
+ {
|
|
|
+ if(newInfo.isNextWeek)
|
|
|
+ {
|
|
|
+ /* 不会有两个都跨周的情况,直接返回冲突 */
|
|
|
+ return true;
|
|
|
+ }
|
|
|
+ }
|
|
|
|
|
|
- int weekDayOn1 = static_cast<int>(tmpInfo.onWeekDay);
|
|
|
- int weekDayOff1 = tmpInfo.isNextWeek ? static_cast<int>(tmpInfo.offWeekDay) + 7 : static_cast<int>(tmpInfo.offWeekDay);
|
|
|
- int weekDayOn2 = static_cast<int>(newInfo.onWeekDay);
|
|
|
- int weekDayOff2 = newInfo.isNextWeek ? static_cast<int>(newInfo.offWeekDay) + 7 : static_cast<int>(newInfo.offWeekDay);
|
|
|
+ int tmpWeekDayOn = static_cast<int>(tmpInfo.onWeekDay);
|
|
|
+ int tmpWeekDayOff = static_cast<int>(tmpInfo.offWeekDay);
|
|
|
+ int newWeekDayOn = static_cast<int>(newInfo.onWeekDay);
|
|
|
+ int newWeekDayOff = static_cast<int>(newInfo.offWeekDay);
|
|
|
/* info结束时间小于开始时间,或者info开始时间大于结束时间,就不冲突 */
|
|
|
bool isLess = false;
|
|
|
bool isGreater = false;
|
|
|
if(it.onWeekDay == enum_WeekDay::WeekDay_Special)
|
|
|
{
|
|
|
- isLess = timeIsGerater(weekDayOn1, it.onDateTime, weekDayOff2, newInfo.offDateTime, true);
|
|
|
- isGreater = timeIsGerater(weekDayOn2, newInfo.onDateTime, weekDayOff1, it.offDateTime, true);
|
|
|
- }else {
|
|
|
- isLess = timeIsGerater(weekDayOn1, it.onDateTime, weekDayOff2, info.offDateTime, false);
|
|
|
- isGreater = timeIsGerater(weekDayOn2, newInfo.onDateTime, weekDayOff1, it.offDateTime, false);
|
|
|
- }
|
|
|
-
|
|
|
- if(isLess || isGreater)
|
|
|
+ isLess = timeIsGerater(tmpWeekDayOn, tmpInfo.onDateTime, newWeekDayOff, newInfo.offDateTime, true);
|
|
|
+ isGreater = timeIsGerater(newWeekDayOn, newInfo.onDateTime, tmpWeekDayOff, tmpInfo.offDateTime, true);
|
|
|
+ }else
|
|
|
{
|
|
|
- /* 时间不冲突 */
|
|
|
- continue;
|
|
|
+ /* 普通日,先判断tmpInfo是否跨周了 */
|
|
|
+ if(tmpInfo.isNextWeek)
|
|
|
+ {
|
|
|
+ /* 拆分成两个时间段分别判断 */
|
|
|
+ int tmpWeekDayOn1 = tmpWeekDayOn;
|
|
|
+ int tmpWeekDayOff1 = 7; /* 这一周的最后一天 */
|
|
|
+ int tmpWeekDayOn2 = 1; /* 下一周的第一天 */
|
|
|
+ int tmpWeekDayOff2 = tmpWeekDayOff;
|
|
|
+ /* 判断两个时间段是否冲突 */
|
|
|
+ bool isLess1 = timeIsGerater(tmpWeekDayOn1, tmpInfo.onDateTime, newWeekDayOn, newInfo.offDateTime, false);
|
|
|
+ bool isGreater1 = timeIsGerater(newWeekDayOn, newInfo.onDateTime, tmpWeekDayOff1, tmpInfo.offDateTime, false);
|
|
|
+ if(isLess1 || isGreater1)
|
|
|
+ {
|
|
|
+ }else {
|
|
|
+ return true; /* 时间冲突 */
|
|
|
+ }
|
|
|
+
|
|
|
+ bool isLess2 = timeIsGerater(tmpWeekDayOn2, tmpInfo.onDateTime, newWeekDayOff, newInfo.offDateTime, false);
|
|
|
+ bool isGreater2 = timeIsGerater(newWeekDayOn, newInfo.onDateTime, tmpWeekDayOff2, tmpInfo.offDateTime, false);
|
|
|
+ if(isLess2 || isGreater2)
|
|
|
+ {
|
|
|
+ }else {
|
|
|
+ return true; /* 时间冲突 */
|
|
|
+ }
|
|
|
+ }
|
|
|
+ else if(newInfo.isNextWeek)
|
|
|
+ {
|
|
|
+ /* 拆分成两个时间段分别判断 */
|
|
|
+ int newWeekDayOn1 = newWeekDayOn;
|
|
|
+ int newWeekDayOff1 = 7; /* 这一周的最后一天 */
|
|
|
+ int newWeekDayOn2 = 1; /* 下一周的第一天 */
|
|
|
+ int newWeekDayOff2 = newWeekDayOff;
|
|
|
+ /* 判断两个时间段是否冲突 */
|
|
|
+ bool isLess1 = timeIsGerater(tmpWeekDayOn, tmpInfo.onDateTime, newWeekDayOff1, newInfo.offDateTime, false);
|
|
|
+ bool isGreater1 = timeIsGerater(newWeekDayOn1, newInfo.onDateTime, tmpWeekDayOff, tmpInfo.offDateTime, false);
|
|
|
+ if(isLess1 || isGreater1)
|
|
|
+ {
|
|
|
+ }else {
|
|
|
+ return true; /* 时间冲突 */
|
|
|
+ }
|
|
|
+
|
|
|
+ bool isLess2 = timeIsGerater(tmpWeekDayOn, tmpInfo.onDateTime, newWeekDayOff2, newInfo.offDateTime, false);
|
|
|
+ bool isGreater2 = timeIsGerater(newWeekDayOn2, newInfo.onDateTime, tmpWeekDayOff, tmpInfo.offDateTime, false);
|
|
|
+ if(isLess2 || isGreater2)
|
|
|
+ {
|
|
|
+ }else {
|
|
|
+ return true; /* 时间冲突 */
|
|
|
+ }
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ isLess = timeIsGerater(tmpWeekDayOn, tmpInfo.onDateTime, newWeekDayOff, newInfo.offDateTime, false);
|
|
|
+ isGreater = timeIsGerater(newWeekDayOn, newInfo.onDateTime, tmpWeekDayOff, tmpInfo.offDateTime, false);
|
|
|
+ if(isLess || isGreater)
|
|
|
+ {
|
|
|
+ /* 时间不冲突 */
|
|
|
+ continue;
|
|
|
+ }else {
|
|
|
+ return true; /* 时间冲突 */
|
|
|
+ }
|
|
|
+ }
|
|
|
}
|
|
|
- isConflict = true; /* 时间冲突 */
|
|
|
- break;
|
|
|
+
|
|
|
}
|
|
|
|
|
|
- return isConflict;
|
|
|
+ return false;
|
|
|
}
|
|
|
|
|
|
|
|
|
@@ -650,14 +708,12 @@ bool ManagerPlan::checkPlanTimeConflict(const int chnID, const PlanInfo& info, c
|
|
|
PlanInfo newInfo = info;
|
|
|
/* 判断是否跨周了 */
|
|
|
newInfo.isNextWeek = isCrossWeek(newInfo);
|
|
|
- bool isConflict = false;
|
|
|
- // int weekDayStart = static_cast<int>(info.onWeekDay);
|
|
|
- // int weekDayEnd = static_cast<int>(info.offWeekDay);
|
|
|
+
|
|
|
for(const auto& it : list)
|
|
|
{
|
|
|
/* 判断是否同为正常日或者特殊日 */
|
|
|
- if( (it.onWeekDay == enum_WeekDay::WeekDay_Special && newInfo.onWeekDay != enum_WeekDay::WeekDay_Special) ||
|
|
|
- (it.onWeekDay != enum_WeekDay::WeekDay_Special && newInfo.onWeekDay == enum_WeekDay::WeekDay_Special) )
|
|
|
+ if( (it.onWeekDay == enum_WeekDay::WeekDay_Special && info.onWeekDay != enum_WeekDay::WeekDay_Special) ||
|
|
|
+ (it.onWeekDay != enum_WeekDay::WeekDay_Special && info.onWeekDay == enum_WeekDay::WeekDay_Special) )
|
|
|
{
|
|
|
/* 一个是特殊日,一个是正常日,不冲突 */
|
|
|
continue;
|
|
|
@@ -665,34 +721,95 @@ bool ManagerPlan::checkPlanTimeConflict(const int chnID, const PlanInfo& info, c
|
|
|
PlanInfo tmpInfo = it;
|
|
|
/* 判断是否跨周了 */
|
|
|
tmpInfo.isNextWeek = isCrossWeek(tmpInfo);
|
|
|
+ if(tmpInfo.isNextWeek)
|
|
|
+ {
|
|
|
+ if(newInfo.isNextWeek)
|
|
|
+ {
|
|
|
+ /* 不会有两个都跨周的情况,直接返回冲突 */
|
|
|
+ return true;
|
|
|
+ }
|
|
|
+ }
|
|
|
|
|
|
- int weekDayOn1 = static_cast<int>(tmpInfo.onWeekDay);
|
|
|
- int weekDayOff1 = tmpInfo.isNextWeek ? static_cast<int>(tmpInfo.offWeekDay) + 7 : static_cast<int>(tmpInfo.offWeekDay);
|
|
|
- int weekDayOn2 = static_cast<int>(newInfo.onWeekDay);
|
|
|
- int weekDayOff2 = newInfo.isNextWeek ? static_cast<int>(newInfo.offWeekDay) + 7 : static_cast<int>(newInfo.offWeekDay);
|
|
|
+ int tmpWeekDayOn = static_cast<int>(tmpInfo.onWeekDay);
|
|
|
+ int tmpWeekDayOff = static_cast<int>(tmpInfo.offWeekDay);
|
|
|
+ int newWeekDayOn = static_cast<int>(newInfo.onWeekDay);
|
|
|
+ int newWeekDayOff = static_cast<int>(newInfo.offWeekDay);
|
|
|
/* info结束时间小于开始时间,或者info开始时间大于结束时间,就不冲突 */
|
|
|
bool isLess = false;
|
|
|
bool isGreater = false;
|
|
|
if(it.onWeekDay == enum_WeekDay::WeekDay_Special)
|
|
|
{
|
|
|
- isLess = timeIsGerater(weekDayOn1, it.onDateTime, weekDayOff2, newInfo.offDateTime, true);
|
|
|
- isGreater = timeIsGerater(weekDayOn2, newInfo.onDateTime, weekDayOff1, it.offDateTime, true);
|
|
|
- }else {
|
|
|
- isLess = timeIsGerater(weekDayOn1, it.onDateTime, weekDayOff2, info.offDateTime, false);
|
|
|
- isGreater = timeIsGerater(weekDayOn2, newInfo.onDateTime, weekDayOff1, it.offDateTime, false);
|
|
|
- }
|
|
|
-
|
|
|
- if(isLess || isGreater)
|
|
|
+ isLess = timeIsGerater(tmpWeekDayOn, tmpInfo.onDateTime, newWeekDayOff, newInfo.offDateTime, true);
|
|
|
+ isGreater = timeIsGerater(newWeekDayOn, newInfo.onDateTime, tmpWeekDayOff, tmpInfo.offDateTime, true);
|
|
|
+ }else
|
|
|
{
|
|
|
- /* 时间不冲突 */
|
|
|
- continue;
|
|
|
+ /* 普通日,先判断tmpInfo是否跨周了 */
|
|
|
+ if(tmpInfo.isNextWeek)
|
|
|
+ {
|
|
|
+ /* 拆分成两个时间段分别判断 */
|
|
|
+ int tmpWeekDayOn1 = tmpWeekDayOn;
|
|
|
+ int tmpWeekDayOff1 = 7; /* 这一周的最后一天 */
|
|
|
+ int tmpWeekDayOn2 = 1; /* 下一周的第一天 */
|
|
|
+ int tmpWeekDayOff2 = tmpWeekDayOff;
|
|
|
+ /* 判断两个时间段是否冲突 */
|
|
|
+ bool isLess1 = timeIsGerater(tmpWeekDayOn1, tmpInfo.onDateTime, newWeekDayOn, newInfo.offDateTime, false);
|
|
|
+ bool isGreater1 = timeIsGerater(newWeekDayOn, newInfo.onDateTime, tmpWeekDayOff1, tmpInfo.offDateTime, false);
|
|
|
+ if(isLess1 || isGreater1)
|
|
|
+ {
|
|
|
+ }else {
|
|
|
+ return true; /* 时间冲突 */
|
|
|
+ }
|
|
|
+
|
|
|
+ bool isLess2 = timeIsGerater(tmpWeekDayOn2, tmpInfo.onDateTime, newWeekDayOff, newInfo.offDateTime, false);
|
|
|
+ bool isGreater2 = timeIsGerater(newWeekDayOn, newInfo.onDateTime, tmpWeekDayOff2, tmpInfo.offDateTime, false);
|
|
|
+ if(isLess2 || isGreater2)
|
|
|
+ {
|
|
|
+ }else {
|
|
|
+ return true; /* 时间冲突 */
|
|
|
+ }
|
|
|
+ }
|
|
|
+ else if(newInfo.isNextWeek)
|
|
|
+ {
|
|
|
+ /* 拆分成两个时间段分别判断 */
|
|
|
+ int newWeekDayOn1 = newWeekDayOn;
|
|
|
+ int newWeekDayOff1 = 7; /* 这一周的最后一天 */
|
|
|
+ int newWeekDayOn2 = 1; /* 下一周的第一天 */
|
|
|
+ int newWeekDayOff2 = newWeekDayOff;
|
|
|
+ /* 判断两个时间段是否冲突 */
|
|
|
+ bool isLess1 = timeIsGerater(tmpWeekDayOn, tmpInfo.onDateTime, newWeekDayOff1, newInfo.offDateTime, false);
|
|
|
+ bool isGreater1 = timeIsGerater(newWeekDayOn1, newInfo.onDateTime, tmpWeekDayOff, tmpInfo.offDateTime, false);
|
|
|
+ if(isLess1 || isGreater1)
|
|
|
+ {
|
|
|
+ }else {
|
|
|
+ return true; /* 时间冲突 */
|
|
|
+ }
|
|
|
+
|
|
|
+ bool isLess2 = timeIsGerater(tmpWeekDayOn, tmpInfo.onDateTime, newWeekDayOff2, newInfo.offDateTime, false);
|
|
|
+ bool isGreater2 = timeIsGerater(newWeekDayOn2, newInfo.onDateTime, tmpWeekDayOff, tmpInfo.offDateTime, false);
|
|
|
+ if(isLess2 || isGreater2)
|
|
|
+ {
|
|
|
+ }else {
|
|
|
+ return true; /* 时间冲突 */
|
|
|
+ }
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ isLess = timeIsGerater(tmpWeekDayOn, tmpInfo.onDateTime, newWeekDayOff, newInfo.offDateTime, false);
|
|
|
+ isGreater = timeIsGerater(newWeekDayOn, newInfo.onDateTime, tmpWeekDayOff, tmpInfo.offDateTime, false);
|
|
|
+ if(isLess || isGreater)
|
|
|
+ {
|
|
|
+ /* 时间不冲突 */
|
|
|
+ continue;
|
|
|
+ }else {
|
|
|
+ return true; /* 时间冲突 */
|
|
|
+ }
|
|
|
+ }
|
|
|
}
|
|
|
- isConflict = true; /* 时间冲突 */
|
|
|
- break;
|
|
|
+
|
|
|
}
|
|
|
|
|
|
|
|
|
- return isConflict;
|
|
|
+ return false;
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
@@ -1063,23 +1180,40 @@ void ManagerPlan::do_modifyPlanItem()
|
|
|
}
|
|
|
// LH_WRITE_LOG_DEBUG(QString("修改行: %1").arg(index));
|
|
|
|
|
|
- /* 获取修改后的日期 */
|
|
|
PlanInfo one;
|
|
|
+ /* 判断是正常日还是特殊日 */
|
|
|
if(ui->tabWidget->currentIndex() == 0)
|
|
|
{
|
|
|
/* 正常日 */
|
|
|
one.onWeekDay = static_cast<enum_WeekDay>(ui->cBox_selectWeekStart->itemData(ui->cBox_selectWeekStart->currentIndex()).toInt());
|
|
|
one.onDateTime.setTime(ui->timeEdit_weekStart->getTime());
|
|
|
+
|
|
|
one.offWeekDay = static_cast<enum_WeekDay>(ui->cBox_selectWeekEnd->itemData(ui->cBox_selectWeekEnd->currentIndex()).toInt());
|
|
|
one.offDateTime.setTime(ui->timeEdit_weekEnd->getTime());
|
|
|
+ /* 判断时间是否相等 */
|
|
|
+ if(isEqualTime(one))
|
|
|
+ {
|
|
|
+ /* 开机时间等于关机时间,相等 */
|
|
|
+ TipWidget::display(TipWidget::OPERATOR_WARN, "开机时间不能等于关机时间!", this);
|
|
|
+ return;
|
|
|
+ }
|
|
|
}else {
|
|
|
/* 特殊日 */
|
|
|
one.onWeekDay = enum_WeekDay::WeekDay_Special;
|
|
|
one.onDateTime.setDate(ui->dateEdit_specialStart->date());
|
|
|
one.onDateTime.setTime(ui->timeEdit_specialStart->getTime());
|
|
|
+
|
|
|
one.offWeekDay = enum_WeekDay::WeekDay_Special;
|
|
|
one.offDateTime.setDate(ui->dateEdit_specialEnd->date());
|
|
|
one.offDateTime.setTime(ui->timeEdit_specialEnd->getTime());
|
|
|
+
|
|
|
+ /* 先判断开机时间和关机时间是否冲突 */
|
|
|
+ if(checkOnAndOffTime(one))
|
|
|
+ {
|
|
|
+ /* 开始和结束时间冲突 */
|
|
|
+ TipWidget::display(TipWidget::OPERATOR_WARN, "开机时间早于或等于关机时间!", this);
|
|
|
+ return;
|
|
|
+ }
|
|
|
}
|
|
|
/* 先判断设置的时间是否和当前选中的行的时间相同 */
|
|
|
auto nowPlan = ui->pCard->getSelectedPlan();
|
|
|
@@ -1088,12 +1222,12 @@ void ManagerPlan::do_modifyPlanItem()
|
|
|
return;
|
|
|
}
|
|
|
/* 先判断开机时间和关机时间是否冲突 */
|
|
|
- if(checkOnAndOffTime(one))
|
|
|
- {
|
|
|
- /* 开始和结束时间冲突 */
|
|
|
- TipWidget::display(TipWidget::OPERATOR_WARN, "开机时间早于或等于关机时间!", this);
|
|
|
- return;
|
|
|
- }
|
|
|
+ // if(checkOnAndOffTime(one))
|
|
|
+ // {
|
|
|
+ // /* 开始和结束时间冲突 */
|
|
|
+ // TipWidget::display(TipWidget::OPERATOR_WARN, "开机时间早于或等于关机时间!", this);
|
|
|
+ // return;
|
|
|
+ // }
|
|
|
auto exPlan = ui->pCard->getSelectedPlan();
|
|
|
/* 判断时间段是否和历史时间段冲突 */
|
|
|
if(checkPlanTimeConflict(chnID, one, exPlan))
|