#include "checkperiodfunc.h" /** * @brief 周查重函数 * * @param planList 需要查重的列表 * @param plan 目标计划 * @param isExcludeSelf 是否排除自身 * @return true * @return false */ bool isWeekPlanDuplicate(const QList& planList, const OnePlan_t& plan, bool isExcludeSelf) { QList list = planList; if(isExcludeSelf) { /* 排除自身 */ for(int i = 0; i < list.size(); ++i) { if(list[i].weekType == plan.weekType && list[i].timeStart == plan.timeStart && list[i].timeEnd == plan.timeEnd) { list.removeAt(i); break; } } } bool isConflict = false; for(const auto& it : list) { /* info结束时间小于开始时间,或者info开始时间大于结束时间,就不冲突 */ bool isLess = weekTimeIsGerater(it.weekType, it.timeStart, plan.weekType, plan.timeEnd); bool isGreater = weekTimeIsGerater(plan.weekType, plan.timeStart, it.weekType, it.timeEnd); if(isLess || isGreater) { /* 时间不冲突 */ continue; } isConflict = true; /* 时间冲突 */ break; } return isConflict; } /** * @brief 日期查重函数 * * @param planList * @param plan * @param isExcludeSelf * @return true * @return false */ bool isDatePlanDuplicate(const QList& planList, const OnePlan_t& plan, bool isExcludeSelf) { QList list = planList; if(isExcludeSelf) { /* 排除自身 */ for(int i = 0; i < list.size(); ++i) { if(list[i].date == plan.date && list[i].timeStart == plan.timeStart && list[i].timeEnd == plan.timeEnd) { list.removeAt(i); break; } } } bool isConflict = false; for(const auto& it : list) { /* info结束时间小于开始时间,或者info开始时间大于结束时间,就不冲突 */ bool isLess = dateTimeIsGerater(it.date, it.timeStart, plan.date, plan.timeEnd); bool isGreater = dateTimeIsGerater(plan.date, plan.timeStart, it.date, it.timeEnd); if(isLess || isGreater) { /* 时间不冲突 */ continue; } isConflict = true; /* 时间冲突 */ break; } return isConflict; } /* 周时间1大于周时间2 */ bool weekTimeIsGerater(const eWeekType& week1, const QTime& time1, const eWeekType& week2, const QTime& time2) { /* 先比较日期 */ if(week1 > week2) { return true; } else if(week1 == week2) { /* 日期相同,比较时间 */ if(time1 > time2) { return true; }else { return false; } } return false; } /* 日期1大于日期2 */ bool dateTimeIsGerater(const QDate& date1, const QTime& time1, const QDate& date2, const QTime& time2) { /* 先比较日期 */ if(date1 > date2) { return true; } else if(date1 == date2) { /* 日期相同,比较时间 */ if(time1 > time2) { return true; }else { return false; } } return false; }