1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543154415451546154715481549155015511552155315541555155615571558155915601561156215631564156515661567156815691570157115721573157415751576157715781579158015811582158315841585158615871588158915901591159215931594159515961597 |
- #include "ExecPlan.h"
- #include <QVariant>
- #include <QStyle>
- #include <QPainter>
- #include <QPen>
- #include <memory>
- #include <QDebug>
- #include <QSqlError>
- #include <QSqlQuery>
- #include <QSqlRecord>
- #include <QScrollArea>
- #include <QVBoxLayout>
- #include <QEvent>
- #include <QMouseEvent>
- #include "lhmaskwidget.h"
- #include "widget.h"
- #include "CustomTimeEdit.h"
- #include "UI/ExecPlan/ExecPlanItem.h"
- #include "UI/ExecPlan/addnormalitem.h"
- #include "UI/ExecPlan/addspecialitem.h"
- #include "Communication/devpacketresolution.h"
- #include "Communication/devicecommunication.h"
- #include "event/OneEvent.h"
- #include "common/globalinfo/globalinfo.h"
- #include "UI/Template/importtemplate.h"
- #include "UI/Template/savetotemplate.h"
- #include "UI/ScrollWidget/scrollwidget.h"
- #include "CommonModule/date/cdate.h"
- #include "CommonModule/TipWidget/tipwidget.h"
- #include "common/warning/warning.h"
- #include "timewidget.h"
- ExecPlan::ExecPlan(Widget* mainUI,QWidget* mask,QWidget *parent)
- : QWidget(parent),
- m_mainUI(mainUI),
- m_mask(mask)
- {
- m_logger = spdlog::get("ExecPlan");
- if(nullptr == m_logger)
- {
- qDebug() << "ExecPlan获取logger失败";
- }
- // m_first = true;
- m_leftColumn = new QWidget(this);
- m_stack = new QStackedWidget(this);
- m_pBtnAddItem = new QPushButton(this);
- m_pBtnClearExecPlan = new QPushButton(this);
- m_pBtnImportTemplate = new QPushButton(this);
- m_pBtnSaveTemplate = new QPushButton(this);
- m_pBtnGetEQMData = new QPushButton(this);
- m_labelButtomLine = new QLabel(this);
- m_pBtnDownload = new QPushButton(this);
- m_pBtnDefault = new QPushButton(this);
- m_rBtnDoTime = new QRadioButton(this);
- m_rBtnDoDay = new QRadioButton(this);
- /* 主体框架大小设置 */
- this->resize(1872,698);
- m_leftColumn->resize(122,475);
- m_leftColumn->move(24,70);
- m_stack->resize(1700,474);
- m_stack->move(146,71);
- m_labelButtomLine->resize(1872,1);
- m_labelButtomLine->move(0,633);
- QLabel* stackButtomLine = new QLabel(this);
- stackButtomLine->resize(1822,1);
- stackButtomLine->move(25,544);
- /* 四个功能按钮设置 */
- m_pBtnAddItem->resize(88,32);
- m_pBtnAddItem->move(40,561);
- m_pBtnClearExecPlan->resize(88,32);
- m_pBtnClearExecPlan->move(144,561);
- m_pBtnImportTemplate->resize(88,32);
- m_pBtnImportTemplate->move(248,561);
- m_pBtnSaveTemplate->resize(88,32);
- m_pBtnSaveTemplate->move(352,561);
- m_pBtnAddItem->setText("添加计划");
- m_pBtnClearExecPlan->setText("清空计划");
- m_pBtnImportTemplate->setText("导入模版");
- m_pBtnSaveTemplate->setText("保存为模版");
- m_pBtnGetEQMData->resize(110,32);
- m_pBtnGetEQMData->move(456,561);
- m_pBtnGetEQMData->setText("获取EQM数据");
- /* 下载按钮设置 */
- m_pBtnDownload->resize(60,32);
- m_pBtnDownload->move(1788,650);
- m_pBtnDownload->setText("下载");
- /* 计划和模式按钮设置 */
- QLabel* labelDefault = new QLabel(this);
- labelDefault->resize(70,14);
- labelDefault->move(24,28);
- labelDefault->setText("默认计划:");
- m_pBtnDefault->resize(44,22);
- m_pBtnDefault->move(94,24);
- m_pBtnDefault->setCheckable(true);
- m_pBtnDefault->setChecked(true);
- QLabel* labelExecMode = new QLabel(this);
- labelExecMode->resize(70,14);
- labelExecMode->move(186,28);
- labelExecMode->setText("执行模式:");
- m_rBtnDoTime->resize(80,16);
- m_rBtnDoTime->move(256,27);
- m_rBtnDoTime->setText("按时刻");
- m_rBtnDoDay->resize(70,16);
- m_rBtnDoDay->move(354,27);
- m_rBtnDoDay->setText("按天");
- m_rBtnDoTime->setChecked(true);
- /* 创建小提示 */
- m_labelTip = new QLabel(this);
- m_labelTip->resize(14,14);
- m_labelTip->move(423,28);
- m_TipText = new QLabel(this);
- m_TipText->resize(936,56);
- m_TipText->move(448,8);
- m_TipText->setText(R"(按时刻执行模式:即以时刻点为单位进行执行,若某日既为普通日和特殊日,在某一时刻皆有执行动作,将优先执行特殊日在此时刻所计划的动作。
- 按天执行模式:即以天为单位进行执行,若某日既为普通日和特殊日,则当日一整天优先执行特殊日所计划的动作,普通日计划当日不再执行。)");
- m_TipText->hide();
- /* 设置样式表 */
- m_leftColumn->setObjectName("LeftColumn");
- m_labelButtomLine->setObjectName("ButtomLine");
- m_pBtnAddItem->setObjectName("AddTime");
- m_pBtnClearExecPlan->setObjectName("ClearTime");
- m_pBtnImportTemplate->setObjectName("Import");
- m_pBtnSaveTemplate->setObjectName("Save");
- m_pBtnGetEQMData->setObjectName("GetEQMData");
- m_pBtnDownload->setObjectName("Download");
- stackButtomLine->setObjectName("stackButtomLine");
- m_pBtnDefault->setObjectName("Default");
- m_rBtnDoTime->setObjectName("DoTime");
- m_rBtnDoDay->setObjectName("DoDay");
- m_labelTip->setObjectName("Tip");
- m_TipText->setObjectName("TipText");
- /* 设置样式表 */
- QFile file(":/qss/qss/PageExecPlan/PageExecPlan.qss");
- if(file.open(QFile::ReadOnly))
- {
- QString styleSheet = file.readAll();
- this->setStyleSheet(styleSheet);
- file.close();
- } else
- {
- SPDLOG_LOGGER_ERROR(m_logger,"打开文件失败:{}", file.fileName().toStdString());
- }
- /* 创建一周8天的按钮和stack页面 */
- uiSupplement();
- /* 存储每日项的容器初始化 */
- m_vecItem.clear();
- for(int k = 0;k < 8;k++)
- {
- QList<ExecPlanItem*>* one = new QList<ExecPlanItem*>;
- one->clear();
- m_vecItem.push_back(one);
- }
- /* 创建数据库连接 */
- createDataBase();
- /* 注册事件过滤器 */
- m_labelTip->installEventFilter(this);
- connect(&DevInfo,SIGNAL(signal_addCfgDev()),this,SLOT(do_cfgDevChanged()));
- connect(m_pBtnAddItem,SIGNAL(clicked()),this,SLOT(do_pBtnAddExecPlan()));
- connect(m_pBtnDownload,SIGNAL(clicked()),this,SLOT(do_download()));
- connect(m_pBtnClearExecPlan,SIGNAL(clicked()),this,SLOT(do_clearExecPlan()));
- connect(m_pBtnSaveTemplate,SIGNAL(clicked()),this,SLOT(do_saveTemplate()));
- connect(m_pBtnImportTemplate,SIGNAL(clicked()),this,SLOT(do_importTemplate()));
- connect(m_pBtnGetEQMData,SIGNAL(clicked()),this,SLOT(do_pBtnGetEQMData()));
- /* 这些信号在全局类中定义的 */
- connect(&DevInfo,SIGNAL(signal_deleteCfgDev(QString)),this,SLOT(do_devDelete(QString)));
- connect(&DevInfo,SIGNAL(signal_oneDevChanged(QString,QString)),this,SLOT(do_devChanged(QString,QString)));
- }
- ExecPlan::~ExecPlan()
- {
- for(auto& it : m_vecItem)
- {
- for(auto& it2 : *it)
- {
- delete it2;
- }
- }
- delete m_leftColumn;
- delete m_stack;
- delete m_pBtnAddItem;
- delete m_pBtnClearExecPlan;
- delete m_pBtnImportTemplate;
- delete m_pBtnSaveTemplate;
- delete m_labelButtomLine;
- }
- /* 补充UI */
- void ExecPlan::uiSupplement()
- {
- /* 一周8天的8个按钮设置 */
- for(int i = 0;i < 8;i++)
- {
- QPushButton* pBtn = new QPushButton(m_leftColumn);
- pBtn->resize(120,40);
- pBtn->move(1,i*40);
- pBtn->setProperty("Pressed",false);
- pBtn->setStyleSheet(R"(
- QPushButton[Pressed=true]{
- background-color:rgba(68, 88, 254, 0.10);
- padding-left:20px;
- border-right:2px solid #4458FE;
- color:#4458FE;
- }
- QPushButton[Pressed=false]{
- color: #3A3F63;
- padding-left:20px;
- background-color: #F5F5FA;
- border-right:0px solid #4458FE;
- }
- )");
- /* 点击周几按钮 */
- connect(pBtn,SIGNAL(clicked()),this,SLOT(do_selectDayOfWeeks()));
- m_vecWeeks.push_back(pBtn);
- }
- m_vecWeeks[0]->setText("星期一");
- m_vecWeeks[1]->setText("星期二");
- m_vecWeeks[2]->setText("星期三");
- m_vecWeeks[3]->setText("星期四");
- m_vecWeeks[4]->setText("星期五");
- m_vecWeeks[5]->setText("星期六");
- m_vecWeeks[6]->setText("星期日");
- m_vecWeeks[7]->setText("特殊日");
- /* 创建8个页面 */
- for(int j = 0;j < 7;j++)
- {
- QWidget* w = new QWidget;
- w->resize(m_stack->width(),m_stack->height());
- QLabel* labelNum = new QLabel(w);
- labelNum->resize(28,14);
- labelNum->move(16,16);
- labelNum->setText("序号");
- QLabel* labelTime = new QLabel(w);
- labelTime->resize(28,14);
- labelTime->move(112,16);
- labelTime->setText("设备");
- QLabel* execTime = new QLabel(w);
- execTime->resize(56,14);
- execTime->move(388,16);
- execTime->setText("执行时间");
- QLabel* action = new QLabel(w);
- action->resize(28,14);
- action->move(536,16);
- action->setText("动作");
- QLabel* operate = new QLabel(w);
- operate->resize(28,14);
- operate->move(812,16);
- operate->setText("操作");
- auto sw = new ScrollWidget(w);
- sw->move(0,30);
- m_vecLayout.push_back(sw->Layout());
- m_stack->addWidget(w);
- m_vecScrollArea.push_back(sw);
- }
- /* 单独创建特殊日页面 */
- QWidget* w = new QWidget;
- w->resize(m_stack->width(),m_stack->height());
- QLabel* labelNum = new QLabel(w);
- labelNum->resize(28,14);
- labelNum->move(16,16);
- labelNum->setText("序号");
- QLabel* labelTime = new QLabel(w);
- labelTime->resize(28,14);
- labelTime->move(112,16);
- labelTime->setText("设备");
- QLabel* execDate = new QLabel(w);
- execDate->resize(56,14);
- execDate->move(388,16);
- execDate->setText("执行日期");
- QLabel* execTime = new QLabel(w);
- execTime->resize(56,14);
- execTime->move(536,16);
- execTime->setText("执行时间");
- QLabel* action = new QLabel(w);
- action->resize(28,14);
- action->move(684,16);
- action->setText("动作");
- QLabel* operate = new QLabel(w);
- operate->resize(28,14);
- operate->move(960,16);
- operate->setText("操作");
- auto sw = new ScrollWidget(w);
- sw->move(0,30);
- m_vecLayout.push_back(sw->Layout());
- m_stack->addWidget(w);
- m_vecScrollArea.push_back(sw);
- /* 默认当日周几 */
- int day = QDate::currentDate().dayOfWeek() - 1;
- m_vecWeeks[day]->setProperty("Pressed",true);
- m_stack->setCurrentIndex(day);
- /* 需要手动更新控件,使其生效 */
- m_leftColumn->style()->unpolish(m_vecWeeks[0]);
- m_leftColumn->style()->polish(m_vecWeeks[0]);
- }
- /**
- * @brief 判断时间是否重复
- * @param time
- * @return true:时间重叠
- * false:不重叠
- */
- bool ExecPlan::judgeTimeRepetition(QList<ExecPlanItem*>& list,const QString& devName,const QTime& time)
- {
- for(const auto& it : list)
- {
- /* 先查设备名称是否重复 */
- if(it->getDevName() == devName)
- {
- /* 名称相等再查时间是否重复 */
- if(it->getExecTime() == time)
- {
- return true;
- }
- }
- }
- /* 所有设备都判断完了 */
- return false;
- }
- /**
- * @brief 判断日期是否重复,这里会先将自身移除链表
- * @param list
- * @param item
- * @return
- */
- bool ExecPlan::judgeTimeRepetition(QList<ExecPlanItem *>& list, ExecPlanItem* item)
- {
- /* 先将自身移除链表 */
- list.removeOne(item);
- // SPDLOG_LOGGER_DEBUG(m_logger,"***** 列表中还有{}项",list.count());
- for(const auto& it : list)
- {
- /* 先查设备名称是否重复 */
- if(it->getDevName() == item->getDevName())
- {
- /* 名称相等再查时间是否重复 */
- if(it->getExecTime() == item->getExecTime())
- {
- list.append(item);
- return true;
- }
- }
- }
- list.append(item);
- /* 所有设备都判断完了 */
- return false;
- }
- /**
- * @brief ExecPlan::judgeTimeRepetition
- * @param list
- * @param item
- * @param time
- * @return
- */
- bool ExecPlan::judgeTimeRepetition(QList<ExecPlanItem *>& list, ExecPlanItem *item, const QTime &time)
- {
- /* 先将自身移除链表 */
- list.removeOne(item);
- for(const auto& it : list)
- {
- /* 先查设备名称是否重复 */
- if(it->getDevName() == item->getDevName())
- {
- /* 名称相等再查时间是否重复 */
- if(it->getExecTime() == time)
- {
- list.append(item);
- return true;
- }
- }
- }
- list.append(item);
- /* 所有设备都判断完了 */
- return false;
- }
- /* 判断日期时间是否重复 */
- bool ExecPlan::judgeDateTimeRepetition(QList<ExecPlanItem *> &list, const QString &devName,const QDate& date,const QTime &time)
- {
- for(const auto& it : list)
- {
- if(it->getDevName() == devName)
- {
- if(it->getDate() == date)
- {
- if(it->getExecTime() == time)
- {
- return true;
- }
- }
- }
- }
- /* 没有相等的日期 */
- return false;
- }
- /**
- * @brief 特殊日判断时间重复
- * @param list
- * @param item
- * @param time
- * @return
- */
- bool ExecPlan::judgeDateTimeRepetition(QList<ExecPlanItem *> &list, ExecPlanItem *item, const QTime &time)
- {
- /* 先将自身移除链表 */
- list.removeOne(item);
- for(const auto& it : list)
- {
- /* 先查设备名称是否重复 */
- if(it->getDevName() == item->getDevName())
- {
- /* 名称相等再查日期是否重复 */
- if(it->getDate() == item->getDate())
- {
- if(it->getExecTime() == time)
- {
- list.append(item);
- return true;
- }
- }
- }
- }
- list.append(item);
- /* 所有设备都判断完了 */
- return false;
- }
- /**
- * @brief 这个重载是修改了日期后检查是否冲突
- * @param list
- * @param item
- * @param date
- * @return
- */
- bool ExecPlan::judgeDateTimeRepetition(QList<ExecPlanItem *> &list, ExecPlanItem *item,const QDate& date)
- {
- /* 先将自身移除链表 */
- list.removeOne(item);
- for(const auto& it : list)
- {
- /* 先查设备名称是否重复 */
- if(it->getDevName() == item->getDevName())
- {
- /* 名称相等再查日期是否重复 */
- if(it->getDate() == date)
- {
- if(it->getExecTime() == item->getExecTime())
- {
- list.append(item);
- return true;
- }
- }
- }
- }
- list.append(item);
- /* 所有设备都判断完了 */
- return false;
- }
- /**
- * @brief 这个重载主要是修改了设备后检查是否冲突
- * @param list
- * @param item
- * @return
- */
- bool ExecPlan::judgeDateTimeRepetition(QList<ExecPlanItem *> &list, ExecPlanItem *item)
- {
- /* 先将自身移除链表 */
- list.removeOne(item);
- for(const auto& it : list)
- {
- /* 先查设备名称是否重复 */
- if(it->getDevName() == item->getDevName())
- {
- /* 名称相等再查日期是否重复 */
- if(it->getDate() == item->getDate())
- {
- if(it->getExecTime() == item->getExecTime())
- {
- list.append(item);
- return true;
- }
- }
- }
- }
- list.append(item);
- /* 所有设备都判断完了 */
- return false;
- }
- /* 获取默认计划 */
- char ExecPlan::getDefaultPlan()
- {
- if(m_pBtnDefault->isChecked())
- {
- return 1;
- }
- return 0;
- }
- /* 获取执行模式 */
- char ExecPlan::getExecMode()
- {
- if(m_rBtnDoDay->isChecked())
- {
- return 1;
- }
- return 0;
- }
- /* 获取计划容器 */
- QVector<QList<ExecPlanItem *> *> &ExecPlan::vecItem()
- {
- return m_vecItem;
- }
- /* 获取stackWidget的指针 */
- QStackedWidget *ExecPlan::stackWidget()
- {
- return m_stack;
- }
- QVector<QLayout *>& ExecPlan::layout()
- {
- return m_vecLayout;
- }
- /* 刷新一周8天的页面 */
- //void ExecPlan::RefreshUI()
- //{
- // // /* 将当前页,按时间升序排序 */
- // // qSort(m_vecItem[m_stack->currentIndex()]->begin(),
- // // m_vecItem[m_stack->currentIndex()]->end(),
- // // timeCompare);
- // /* 设置序号,刷新UI */
- // int num1 = 0;
- // for(auto& it : m_vecItem)
- // {
- // num1 = 0;
- // for(auto& it1 : *it)
- // {
- // int y = num1*48;
- // it1->move(0,y);
- // num1++;
- // }
- // }
- //}
- /* 设置默认计划 */
- void ExecPlan::setDefaultPlan(int num)
- {
- if(0 == num)
- {
- m_pBtnDefault->setChecked(false);
- }else
- {
- m_pBtnDefault->setChecked(true);
- }
- }
- /* 按时刻还是按天 */
- void ExecPlan::setTimeOrDay(int num)
- {
- if(0 == num)
- {
- m_rBtnDoTime->setChecked(true);
- }else
- {
- m_rBtnDoDay->setChecked(true);
- }
- }
- /**
- * @brief 检查数据库中有没有这个表格,这里正常日和特殊日分开检查,二者的名称不相关
- * 每个表格名称前面有“正常日-”和“特殊日-”区分,因此显示模板名称的时候需要去掉前缀
- * @param tableName
- * @return
- */
- bool ExecPlan::checkDataBaseTableName(const QString &tableName)
- {
- /* 取出数据库中表格的名称,根据当前是周几,选择性的插入到list中 */
- QStringList tabList = m_DB.tables();
- QStringList normalList;
- QStringList specialList;
- for(const auto& it : tabList)
- {
- /* 去掉前缀 */
- QString name = it.mid(4,it.count() - 4);
- if(it.contains("正常日"))
- {
- normalList.append(name);
- }
- else if(it.contains("特殊日"))
- {
- specialList.append(name);
- }
- }
- int day = m_stack->currentIndex();
- if(day < 7)
- {
- for(const auto& it : normalList)
- {
- if(it == tableName)
- {
- return true;
- }
- }
- return false;
- }else
- {
- for(const auto& it : specialList)
- {
- if(it == tableName)
- {
- return true;
- }
- }
- return false;
- }
- }
- /* 删除一页,num是周几 */
- void ExecPlan::clearOnePage(int num)
- {
- /* 先检查时间选择器是否在运行 */
- if(nullptr != m_timeEdit)
- {
- delete m_timeEdit;
- m_timeEdit = nullptr;
- }
- if(nullptr != m_dateEdit)
- {
- delete m_dateEdit;
- m_dateEdit = nullptr;
- }
- if(m_loop.isRunning())
- {
- m_loop.quit();
- }
- int count = m_vecItem[num]->count();
- for(int i = 0;i < count; i++)
- {
- /* 根据序号删除 */
- delete m_vecItem[num]->at(i);
- }
- /* 清空数组 */
- m_vecItem[num]->clear();
- }
- /* 当前页的项是否为空 */
- bool ExecPlan::itemIsEmpty()
- {
- return m_vecItem[m_stack->currentIndex()]->isEmpty();
- }
- /* 选择周几 */
- void ExecPlan::do_selectDayOfWeeks()
- {
- QPushButton* pBtn = qobject_cast<QPushButton*>(sender());
- /* 清除所有选中效果 */
- for(int i = 0;i < 8;i++)
- {
- m_vecWeeks[i]->setProperty("Pressed",false);
- m_leftColumn->style()->unpolish(m_vecWeeks[i]);
- m_leftColumn->style()->polish(m_vecWeeks[i]);
- if(m_vecWeeks[i] == pBtn)
- {
- m_stack->setCurrentIndex(i);
- }
- }
- pBtn->setProperty("Pressed",true);
- this->style()->unpolish(pBtn);
- this->style()->polish(pBtn);
- }
- /* 修改了一个设备,主要是修改了名称,将这里的名字也修改掉 */
- void ExecPlan::do_devChanged(const QString &previous, const QString &now)
- {
- SPDLOG_LOGGER_DEBUG(m_logger,"设备名由“{}”改为了“{}”",previous.toStdString(),now.toStdString());
- for(auto& it : m_vecItem)
- {
- for(auto& it1 : *it)
- {
- if(it1->getDevName() == previous)
- {
- it1->setDevName(now);
- }
- }
- }
- }
- /* 删除了一个设备 */
- void ExecPlan::do_devDelete(const QString& devName)
- {
- SPDLOG_LOGGER_DEBUG(m_logger,"删除了一个设备:{}",devName.toStdString());
- for(auto& it : m_vecItem)
- {
- /* 特别注意,删除特定的list中的内容只能使用传统的for循环,而且i++也要根据情况判断再++,
- * 如果删除了i位置的一个项,i+1位置的项就会来到i位置,因此这个时候不能再++ */
- for(int i = 0;i < it->count();)
- {
- auto it1 = it->at(i);
- if(it1->getDevName() == devName)
- {
- it1->setParent(nullptr);
- delete it1;
- it->removeOne(it1);
- }else
- {
- i++;
- }
- }
- }
- /* 刷新设备可选项,重新设置可以选择的设备名 */
- for(auto& it : m_vecItem)
- {
- for(auto& it1 : *it)
- {
- it1->setDevName(it1->getDevName());
- }
- }
- SortAndRefreshUI();
- }
- /* 从EQM获取计划数据 */
- void ExecPlan::do_pBtnGetEQMData()
- {
- /* 先判断设备是否连接 */
- if(!GlobalInfo.getConnectState())
- {
- Warning w(this);
- w.setTextWithOneButton("设备未连接!");
- /* 创建遮罩 */
- std::shared_ptr<LHMaskWidget> mask = std::make_shared<LHMaskWidget>();
- mask->SetMainWidget(m_mask); /* 设置主窗口(被遮盖的窗口) */
- mask->SetTrigWidget(&w); /* 设置触发的窗口 */
- mask->SetOpacity(float(0.4)); /* 设置透明度 */
- w.exec();
- return;
- }
- /* 判断是否连接上了EQM数据库 */
- if(!GlobalInfo.isUsingEQM())
- {
- Warning w(this);
- w.setTextWithOneButton("未使用EQM数据库!");
- /* 创建遮罩 */
- std::shared_ptr<LHMaskWidget> mask = std::make_shared<LHMaskWidget>();
- mask->SetMainWidget(m_mask); /* 设置主窗口(被遮盖的窗口) */
- mask->SetTrigWidget(&w); /* 设置触发的窗口 */
- mask->SetOpacity(float(0.4)); /* 设置透明度 */
-
- w.exec();
- return;
- }
- QList<ExecPlanItemInfo> listInfo;
- GlobalInfo.toEQM.getExecPlanData(listInfo);
- /* 清空所有的计划 */
- for(auto& it : m_vecItem)
- {
- for(auto& it1 : *it)
- {
- delete it1;
- }
- it->clear();
- }
- /* 更新计划列表 */
- EQMToHost(listInfo);
- }
- /* 点击添加时段按钮 */
- void ExecPlan::do_pBtnAddExecPlan()
- {
- /* 创建页面,判断是正常日还是特殊日 */
- if(m_stack->currentIndex() < 7)
- {
- std::shared_ptr<AddNormalItem> atf = std::make_shared<AddNormalItem>(this);
- int x = (m_mainUI->width() - atf->width())/2 + m_mainUI->x();
- int y = (m_mainUI->height() - atf->height())/2 + m_mainUI->y() + 24;
- atf->setGeometry(x,y,atf->width(),atf->height());
- connect(atf.get(),SIGNAL(signal_addNormalItem(QString,QString,QTime)),this,SLOT(do_addNormalOneItem(QString,QString,QTime)));
- atf->exec();
- atf->setAttribute(Qt::WA_DeleteOnClose,true);
- }
- else /* 特殊日 */
- {
- std::shared_ptr<AddSpecialItem> ast = std::make_shared<AddSpecialItem>(this);
- int x = (m_mainUI->width() - ast->width())/2 + m_mainUI->x();
- int y = (m_mainUI->height() - ast->height())/2 + m_mainUI->y();
- ast->setGeometry(x,y,ast->width(),ast->height());
- connect(ast.get(),SIGNAL(signal_AddSpecialItem(QString,QString,QDate,QTime)),this,SLOT(do_addSpecialOneItem(QString,QString,QDate,QTime)));
- ast->exec();
- // SPDLOG_LOGGER_DEBUG(m_logger,"特殊日添加了一个项,页面关闭了");
- ast->setAttribute(Qt::WA_DeleteOnClose,true);
- }
- }
- /**
- * @brief 新增一条项,接收新增页面发送过来的信号
- * @param dev
- * @param action
- * @param time
- */
- void ExecPlan::do_addNormalOneItem(QString dev,QString action,QTime time)
- {
- SPDLOG_LOGGER_INFO(m_logger,"执行计划:普通日添加了一项");
- /* 获取是周几 */
- int num = m_stack->currentIndex();
- ExecPlanItem* one = new ExecPlanItem(num);
- // SPDLOG_LOGGER_INFO(m_logger,"devName:{}",dev.toStdString());
- one->setDevName(dev);
- one->setActionName(action);
- one->setExecTime(time);
- /* 连接删除项信号,执行时间改变信号 */
- connect(one,SIGNAL(signal_OneItemDelete(int)),this,SLOT(do_deleteOneItem(int)));
- connect(one,SIGNAL(signal_execTimeClicked(QTime)),this,SLOT(do_editExecTime(QTime)));
- connect(one,SIGNAL(signal_devChanged()),this,SLOT(do_editDev()));
- one->show();
- m_vecLayout[num]->addWidget(one); /* 添加到布局 */
- m_vecItem[num]->push_back(one);
- /* 根据时间排序并重新显示 */
- SortAndRefreshUI();
- }
- /* 新增一条特殊日期项 */
- void ExecPlan::do_addSpecialOneItem(QString dev, QString action, QDate date, QTime time)
- {
- SPDLOG_LOGGER_INFO(m_logger,"执行计划:特殊日添加了一项");
- /* 获取是周几 */
- int num = m_stack->currentIndex();
- ExecPlanItem* one = new ExecPlanItem(num);
- one->setDevName(dev);
- one->setActionName(action);
- one->setDate(date);
- one->setExecTime(time);
- /* 连接删除项信号,执行时间改变信号 */
- connect(one,SIGNAL(signal_OneItemDelete(int)),this,SLOT(do_deleteOneItem(int)));
- connect(one,SIGNAL(signal_execTimeClicked(QTime)),this,SLOT(do_editExecTime(QTime)));
- connect(one,SIGNAL(signal_devChanged()),this,SLOT(do_editDev()));
- connect(one,SIGNAL(signal_dateClicked(QDate)),this,SLOT(do_editDate(QDate)));
- one->show();
- m_vecLayout[num]->addWidget(one); /* 添加到布局 */
- m_vecItem[num]->push_back(one);
- /* 根据时间排序并重新显示 */
- SortAndRefreshUI();
- }
- /* 下载按钮 */
- void ExecPlan::do_download()
- {
- /* 先检查计划是否是空的,不需要检查 */
- // bool isEmpty = true;
- // for(const auto& it : m_vecItem)
- // {
- // if(!it->isEmpty())
- // {
- // isEmpty = false;
- // }
- // }
- // if(isEmpty)
- // {
- // Warning w(this);
- // w.setTextWithOneButton("至少设置一个计划内容!");
- // w.exec();
- // return;
- // }
- QByteArray ba;
- PacketRS::AnalyzeExecPlan aep;
- aep.HostToDev(m_vecItem, ba, this);
- QList<ExecPlanItemInfo>* listInfo = new QList<ExecPlanItemInfo>;
- HostToEQMJson(m_vecItem, *listInfo);
- /* 发送给设备 */
- OneEvent* oe = new OneEvent(CustomEventType::event_sendExecPlan);
- oe->setData(ba);
- QApplication::postEvent(DevC,oe);
- /* 发送给EQM数据库 */
- // OneEvent* oe1 = new OneEvent(CustomEventType::event_sendToEQM);
- // auto p = static_cast<void *>(listInfo);
- // oe1->setData(QVariant::fromValue(p));
- // QApplication::postEvent(DevC,oe1);
- if(GlobalInfo.toEQM.insertData(*listInfo))
- {
- SPDLOG_LOGGER_INFO(m_logger,"插入EQM数据库成功");
- OneEvent* oe1 = new OneEvent(CustomEventType::event_Echo);
- oe1->setData("计划写入EQM数据库成功");
- QApplication::postEvent(g_uiObject, oe1);
- }
- delete listInfo;
- }
- /* 清空计划 */
- void ExecPlan::do_clearExecPlan()
- {
- SPDLOG_LOGGER_DEBUG(m_logger,"清空了当前页的执行计划");
- /* 清空当前页 */
- // for(const auto& it : *m_vecItem[m_stack->currentIndex()])
- // {
- // delete it;
- // }
- // m_vecItem[m_stack->currentIndex()]->clear();
- clearOnePage(m_stack->currentIndex());
- }
- /* 保存模版 */
- void ExecPlan::do_saveTemplate()
- {
- std::shared_ptr<SaveToTemplate> stt = std::make_shared<SaveToTemplate>(PageType::PageExecPlan,this);
- int x = (m_mainUI->width() - stt->width())/2 + m_mainUI->x();
- int y = (m_mainUI->height() - stt->height())/2 + m_mainUI->y();
- stt->setGeometry(x,y,stt->width(),stt->height());
- connect(stt.get(),SIGNAL(signal_templateName(QString)),this,SLOT(do_saveTemplateToSQL(QString)));
- /* 创建遮罩 */
- std::shared_ptr<LHMaskWidget> mask = std::make_shared<LHMaskWidget>();
- mask->SetMainWidget(m_mask); /* 设置主窗口(被遮盖的窗口) */
- mask->SetTrigWidget(stt.get()); /* 设置触发的窗口 */
- mask->SetOpacity(float(0.4));
- stt->exec();
- }
- /* 导入模板按钮 */
- void ExecPlan::do_importTemplate()
- {
- /* 取出数据库中表格的名称,根据当前是周几,选择性显示 */
- QStringList tabList = m_DB.tables();
- QStringList normalList;
- QStringList specialList;
- for(const auto& it : tabList)
- {
- /* 去掉前缀 */
- QString name = it.mid(4,it.count() - 4);
- if(it.contains("正常日"))
- {
- normalList.append(name);
- }
- else if(it.contains("特殊日"))
- {
- specialList.append(name);
- }
- }
- int day = m_stack->currentIndex();
- std::shared_ptr<ImportTemplate> itl = std::make_shared<ImportTemplate>(day < 7 ? normalList : specialList , this);
- int x = (m_mainUI->width() - itl->width())/2 + m_mainUI->x();
- int y = (m_mainUI->height() - itl->height())/2 + m_mainUI->y();
- itl->setGeometry(x,y,itl->width(),itl->height());
- connect(itl.get(),SIGNAL(signal_templateName(QString)),this,SLOT(do_importTemplateFromSQL(QString)));
- connect(itl.get(),SIGNAL(signal_deleteTemplate(QString)),this,SLOT(do_deleteTemplateFromSQL(QString)));
- /* 创建遮罩 */
- std::shared_ptr<LHMaskWidget> mask = std::make_shared<LHMaskWidget>();
- mask->SetMainWidget(m_mask); /* 设置主窗口(被遮盖的窗口) */
- mask->SetTrigWidget(itl.get()); /* 设置触发的窗口 */
- mask->SetOpacity(float(0.4));
- itl->exec();
- }
- /* 将数据保存到数据库中 */
- void ExecPlan::do_saveTemplateToSQL(QString name)
- {
- SPDLOG_LOGGER_INFO(m_logger,"开始保存数据到数据库:{}",name.toStdString());
- if(!m_DB.isValid())
- {
- SPDLOG_LOGGER_INFO(m_logger,"数据库未打开");
- return;
- }
- /* 创建一个表格 */
- QSqlQuery query(m_DB);
- /**
- * 表格保存一周8天的所有项,使用weekDay表示周几,1-7是周一到周日,8是特殊日
- * 在这里添加模版名称前缀
- */
- int weekDay = m_stack->currentIndex();
- if(weekDay < 7)
- {
- name.insert(0,"正常日-");
- }else
- {
- name.insert(0,"特殊日-");
- }
- QString createTable = QString("CREATE TABLE `%1` ("
- "`weekDay` INT,"
- "`num` INT,"
- "`devName` VARCHAR(20),"
- "`devType` INT,"
- "`date` DATE,"
- "`ExecTime` TIME,"
- "`Action` VARCHAR(20))").arg(name);
- if(query.exec(createTable))
- {
- SPDLOG_LOGGER_INFO(m_logger,"创建成功");
- }else
- {
- SPDLOG_LOGGER_INFO(m_logger,"创建表格失败:{}",query.lastError().text().toStdString());
- }
- /* 将数据存储到表格中 */
- QString insertData = QString("INSERT INTO `%1` (`weekDay`,`num`,`devName`,`devType`,`date`,`ExecTime`,`Action`)"
- "VALUES (:weekDay,:num,:devName,:devType,:date,:ExecTime,:Action)").arg(name);
- query.prepare(insertData);
- int cfgNum = DevInfo.cfgDevInfo().count();
- for(auto& it : *m_vecItem[weekDay])
- {
- query.bindValue(":weekDay",weekDay);
- query.bindValue(":num",it->getNum());
- query.bindValue(":devName",it->getDevName());
- /* 这里设置为0主要是为了防止没有设置设备,保存模板时会导致程序崩溃 */
- query.bindValue(":devType",(cfgNum == 0 ? 0 : it->getCfgDev()->DevType.getDevTypeIDToInt()));
- query.bindValue(":date",it->getDate().toString("yyyy-MM-dd"));
- query.bindValue(":ExecTime",it->getExecTime().toString("hh:mm:ss"));
- query.bindValue(":Action",it->getActionName());
- if(!query.exec())
- {
- SPDLOG_LOGGER_INFO(m_logger,"数据插入失败:{}",query.lastError().text().toStdString());
- }
- }
- /* 弱提示,保存成功 */
- TipWidget::display(TipWidget::OPERATOR_OK,"保存模板成功!",m_mainUI);
- }
- /* 导入模板 */
- void ExecPlan::do_importTemplateFromSQL(QString name)
- {
- SPDLOG_LOGGER_DEBUG(m_logger,"选择的模版:{}",name.toStdString());
- /* 当前是周几 */
- int weekDay = m_stack->currentIndex();
- /* 清空内容 */
- for(auto& it1 : *m_vecItem[weekDay])
- {
- delete it1;
- }
- m_vecItem[weekDay]->clear();
- /* 给名称添加前缀 */
- if(weekDay < 7)
- {
- name.insert(0,"正常日-");
- }else
- {
- name.insert(0,"特殊日-");
- }
- QSqlQuery query(m_DB);
- QString sqliteCmd = QString("SELECT * FROM `%1`").arg(name);
- if(!query.exec(sqliteCmd))
- {
- SPDLOG_LOGGER_INFO(m_logger,"读取表格失败:{}",query.lastError().text().toStdString());
- }
- while(query.next())
- {
- QSqlRecord rec = query.record();
- int weekDay = rec.value("weekDay").toInt();
- if(weekDay < 7)
- {
- /* 将weekDay换成真正的周几,前面的if只是判断是不是正常日 */
- weekDay = m_stack->currentIndex();
- ExecPlanItem* item = new ExecPlanItem(weekDay, m_stack->widget(weekDay));
- item->setNum(rec.value("num").toInt());
- QString devName = rec.value("devName").toString();
- item->setDevName(devName);
- QTime time = QTime::fromString(rec.value("ExecTime").toString());
- item->setExecTime(time);
- item->setActionName(rec.value("Action").toString());
- // SPDLOG_LOGGER_DEBUG(m_logger,"Action:{}",rec.value("Action").toString().toStdString());
- QApplication::connect(item,SIGNAL(signal_OneItemDelete(int)),this,SLOT(do_deleteOneItem(int)));
- QApplication::connect(item,SIGNAL(signal_execTimeClicked(QTime)),this,SLOT(do_editExecTime(QTime)));
- QApplication::connect(item,SIGNAL(signal_devChanged()),this,SLOT(do_editDev()));
- m_vecLayout[weekDay]->addWidget(item);
- m_vecItem[weekDay]->push_back(item);
- }
- else
- {
- weekDay = m_stack->currentIndex();
- ExecPlanItem* item = new ExecPlanItem(weekDay, m_stack->widget(weekDay));
- item->setNum(rec.value("num").toInt());
- item->setDevName(rec.value("devName").toString());
- QDate date = QDate::fromString(rec.value("date").toString(),"yyyy-MM-dd");
- item->setDate(date);
- QTime time = QTime::fromString(rec.value("ExecTime").toString());
- item->setExecTime(time);
- item->setActionName(rec.value("Action").toString());
- QApplication::connect(item,SIGNAL(signal_OneItemDelete(int)),this,SLOT(do_deleteOneItem(int)));
- QApplication::connect(item,SIGNAL(signal_execTimeClicked(QTime)),this,SLOT(do_editExecTime(QTime)));
- QApplication::connect(item,SIGNAL(signal_devChanged()),this,SLOT(do_editDev()));
- QApplication::connect(item,SIGNAL(signal_dateClicked(QDate)),this,SLOT(do_editDate(QDate)));
- m_vecLayout[weekDay]->addWidget(item);
- m_vecItem[weekDay]->push_back(item);
- }
- }
- /* 刷新UI */
- SortAndRefreshUI();
- /* 弱提示,导入成功 */
- TipWidget::display(TipWidget::OPERATOR_OK,"导入模版成功!",m_mainUI);
- }
- void ExecPlan::do_deleteTemplateFromSQL(QString name)
- {
- QSqlQuery query(m_DB);
- /* 给名称添加前缀 */
- int weekDay = m_stack->currentIndex();
- if(weekDay < 7)
- {
- name.insert(0,"正常日-");
- }else
- {
- name.insert(0,"特殊日-");
- }
- QString cmd = QString("DROP TABLE `%1`").arg(name);
- if(query.exec(cmd))
- {
- SPDLOG_LOGGER_INFO(m_logger,"删除模版 {} 成功",name.toStdString());
- /* 弱提示,删除成功 */
- TipWidget::display(TipWidget::OPERATOR_OK,"删除模版成功!",m_mainUI);
- }else
- {
- SPDLOG_LOGGER_INFO(m_logger,"删除模版失败,error:",query.lastError().text().toStdString());
- /* 弱提示,删除失败 */
- TipWidget::display(TipWidget::OPERATOR_FAIL,"删除模板失败!",m_mainUI);
- }
- }
- /* 删除一个项 */
- void ExecPlan::do_deleteOneItem(int num)
- {
- /* 先检查时间选择器是否在运行 */
- if(nullptr != m_timeEdit)
- {
- delete m_timeEdit;
- m_timeEdit = nullptr;
- }
- if(nullptr != m_dateEdit)
- {
- delete m_dateEdit;
- m_dateEdit = nullptr;
- }
- if(m_loop.isRunning())
- {
- m_loop.quit();
- }
- /* 根据序号删除 */
- delete m_vecItem[m_stack->currentIndex()]->at(num-1);
- m_vecItem[m_stack->currentIndex()]->removeAt(num-1);
- /* 重新排序 */
- SortAndRefreshUI();
- }
- /**
- * @brief 修改执行时间,在增加项的地方连接信号
- * @param t 当前现实的时间
- */
- void ExecPlan::do_editExecTime(QTime t)
- {
- if(m_dateEdit != nullptr)
- {
- delete m_dateEdit;
- m_dateEdit = nullptr;
- }
- if(m_timeEdit != nullptr)
- {
- delete m_timeEdit;
- m_timeEdit = nullptr;
- }
- if(m_loop.isRunning())
- {
- m_loop.quit();
- }
- SPDLOG_LOGGER_DEBUG(m_logger,"修改执行时间");
- auto s = dynamic_cast<ExecPlanItem*>(sender());
- s->hideWarn();
- m_timeEdit = new TimeWidget(this,TimeWidget::Dialog);
- /* 覆盖住选择框,需要判断是否是特殊日 */
- QPoint p2 = mapToParent(s->pos());
- int x = 0;
- int y = 0;
- if(m_stack->currentIndex() < 7)
- {
- /* 这里的-2是时间选择框比item的框大4,所以可以将其覆盖住 */
- x = p2.x() + 534 - 2;
- }else
- {
- x = p2.x() + 682 -2;
- }
- /* p2是结束时间框,70是当前页面距离ExecPlan顶部的距离,最后一个是滚动条滚动的距离 */
- y = p2.y() + 116 - 2 - m_vecScrollArea[m_stack->currentIndex()]->scrollBarValue();
- m_timeEdit->move(x,y);
- /* 设置样式表 */
- // m_timeEdit->setStyleSheet(R"(background: transparent;
- // border-radius: 4px;
- // padding-left:12px;
- // border: 1px solid #E6E9F4;)");
- /* 设置当前显示的时间 */
- m_timeEdit->setTime(t);
- /* 选择结束后的信号和槽 */
- connect(m_timeEdit,&TimeWidget::signal_nowTime,this,[&](QTime t1){
- if(s->getDateType() == DateType::NormalDate)
- {
- /* 进行时间重复检测 */
- if(judgeTimeRepetition(*m_vecItem[m_stack->currentIndex()],s,t1))
- {
- s->setWarningText("时间冲突");
- delete m_timeEdit;
- m_timeEdit = nullptr;
- m_loop.quit();
- return;
- }
- s->setExecTime(t1);
- }else
- {
- if(judgeDateTimeRepetition(*m_vecItem[m_stack->currentIndex()],s,t1))
- {
- s->setWarningText("时间冲突");
- delete m_timeEdit;
- m_timeEdit = nullptr;
- m_loop.quit();
- return;
- }
- s->setExecTime(t1);
- }
- s->hideWarn();
- /* 重新排序并刷新时间 */
- SortAndRefreshUI();
- m_loop.quit();
- });
- m_timeEdit->showTimeEditArea();
- m_loop.exec();
- delete m_timeEdit;
- m_timeEdit = nullptr;
- }
- /* 修改日期 */
- void ExecPlan::do_editDate(QDate d)
- {
- if(m_timeEdit != nullptr)
- {
- delete m_timeEdit;
- m_timeEdit = nullptr;
- }
- if(m_dateEdit != nullptr)
- {
- delete m_dateEdit;
- m_dateEdit = nullptr;
- }
- if(m_loop.isRunning())
- {
- m_loop.quit();
- }
- auto s = dynamic_cast<ExecPlanItem*>(sender());
- s->hideWarn();
- m_dateEdit = new CDate(d,this);
- /* 移动组件位置,需要判断是否是特殊日 */
- QPoint p2 = mapToParent(s->pos());
- int x = 0;
- int y = 0;
- /* 已经滚动上去的距离 */
- int scrValue = m_vecScrollArea[m_stack->currentIndex()]->scrollBarValue();
- /* 这里的-2是时间选择框比item的框大4,所以可以将其覆盖住 */
- x = p2.x() + 520;
- /* p2是结束时间框,102是当前页面距离Broadcast顶部的距离,最后一个是滚动条滚动的距离 */
- y = p2.y() + 140 - scrValue;
- /* 240是当前页面的前六条坐标,日历可以正常显示,后面三条就得设置向上显示了 */
- if(p2.y() - scrValue > 260)
- {
- /* 整体向上抬日立的高度和date窗口的高度 */
- y = y - m_dateEdit->height() - 16;
- }
- m_dateEdit->move(x,y);
- /* 选择结束后的信号和槽 */
- connect(m_dateEdit,&CDate::signal_DateChanged,[&](QDate d1){
- if(s->getDateType() == DateType::SpecialDate)
- {
- /* 进行时间重复检测 */
- if(judgeDateTimeRepetition(*m_vecItem[m_stack->currentIndex()],s,d1))
- {
- s->setWarningText("时间重复");
- return;
- }
- s->setDate(d1);
- }
- s->hideWarn();
- /* 重新排序并刷新时间 */
- SortAndRefreshUI();
- m_loop.quit();
- });
- m_dateEdit->show();
- m_loop.exec();
- delete m_dateEdit;
- m_dateEdit = nullptr;
- }
- /* 修改了设备 */
- void ExecPlan::do_editDev()
- {
- auto s = qobject_cast<ExecPlanItem*>(sender());
- /* 判断特殊日还是正常日 */
- if(s->getDateType() == DateType::NormalDate)
- {
- if(judgeTimeRepetition(*m_vecItem[m_stack->currentIndex()],s))
- {
- s->setWarningText("设备动作时间重复",0);
- return;
- }
- }else
- {
- if(judgeDateTimeRepetition(*m_vecItem[m_stack->currentIndex()],s))
- {
- s->setWarningText("设备动作时间重复",0);
- return;
- }
- }
- s->hideWarn();
- /* 重新排序 */
- SortAndRefreshUI();
- }
- /* 配置完成的设备改变了 */
- void ExecPlan::do_cfgDevChanged()
- {
- for(const auto& it1 : m_vecItem)
- {
- for(const auto& it2 : *it1)
- {
- it2->setDevName(it2->getDevName());
- }
- }
- }
- /* 绘图事件 */
- void ExecPlan::paintEvent(QPaintEvent *event)
- {
- /* 绘制外边框 */
- QPainter painter(this);
- QPen pen;
- pen.setColor(QColor(218, 224, 242));
- pen.setWidth(1);
- painter.setPen(pen);
- painter.drawRect(24,70,1824,539);
- }
- bool ExecPlan::eventFilter(QObject *watched, QEvent *event)
- {
- /* 判断是哪个控件 */
- if(watched == m_labelTip)
- {
- if(event->type() == QEvent::Enter)
- {
- m_TipText->show();
- return true;
- }
- else if(event->type() == QEvent::Leave)
- {
- m_TipText->hide();
- }
- }
- return QWidget::eventFilter(watched,event);
- }
- /* 根据时间排序,并刷新UI */
- void ExecPlan::SortAndRefreshUI()
- {
- /* 将当前页,按时间升序排序 */
- std::sort(m_vecItem[m_stack->currentIndex()]->begin(),
- m_vecItem[m_stack->currentIndex()]->end(),
- [&](ExecPlanItem* t1,ExecPlanItem* t2) {
- /* 按照日期排序,再按照名称排序 */
- if(t1->getDate() < t2->getDate())
- {
- return true;
- }
- else if(t1->getDate() > t2->getDate())
- {
- return false;
- }
- else
- {
- if(t1->getExecTime() < t2->getExecTime())
- {
- return true;
- }
- else if(t1->getExecTime() > t2->getExecTime())
- {
- return false;
- }else
- {
- return t1->getDevName() < t2->getDevName();
- }
- }
- });
- int index = m_stack->currentIndex();
- /* 设置序号 */
- int num1 = 1;
- for(auto& it : *m_vecItem[index])
- {
- it->setNum(num1);
- num1++;
- }
- /* 刷新UI,先清空layout中的所有控件,就是将item的父指针设置为0 */
- num1 = 0;
- for(auto& it : *m_vecItem[index])
- {
- it->setParent(nullptr);
- }
- /* 将item重新加入到layout中 */
- for(auto& it : *m_vecItem[index])
- {
- m_vecLayout[index]->addWidget(it);
- }
- }
- /* 根据时间排序,并刷新UI */
- void ExecPlan::SortAndRefreshUI(int index)
- {
- if(index > 7)
- {
- return;
- }
- /* 将当前页,按时间升序排序 */
- std::sort(m_vecItem[index]->begin(), m_vecItem[index]->end(), [&](ExecPlanItem* t1,ExecPlanItem* t2)
- {
- /* 按照日期排序,再按照名称排序 */
- if(t1->getDate() < t2->getDate())
- {
- return true;
- }
- else if(t1->getDate() > t2->getDate())
- {
- return false;
- }
- else
- {
- if(t1->getExecTime() < t2->getExecTime())
- {
- return true;
- }
- else if(t1->getExecTime() > t2->getExecTime())
- {
- return false;
- }else
- {
- return t1->getDevName() < t2->getDevName();
- }
- }
- });
- /* 设置序号 */
- int num1 = 1;
- for(auto& it : *m_vecItem[index])
- {
- it->setNum(num1);
- num1++;
- }
- /* 刷新UI,先清空layout中的所有控件,就是将item的父指针设置为0 */
- num1 = 0;
- for(auto& it : *m_vecItem[index])
- {
- it->setParent(nullptr);
- }
- /* 将item重新加入到layout中 */
- for(auto& it : *m_vecItem[index])
- {
- m_vecLayout[index]->addWidget(it);
- }
- }
- void ExecPlan::createDataBase()
- {
- /* 连接数据库 */
- QString dataName = GlobalInfo.ExecPath() + GlobalInfo.DataBasePath + "ExecPlan.db";
- /* 第二个参数ExecPlan应该是数据库在Qt中的名字? */
- m_DB = QSqlDatabase::addDatabase("QSQLITE","ExecPlan");
- m_DB.setDatabaseName(dataName);
- if(!m_DB.open())
- {
- SPDLOG_LOGGER_INFO(m_logger,"{}打开失败:{}",dataName.toStdString(),m_DB.lastError().text().toStdString());
- return;
- }
- }
- /* 本地配置转换成发送的结构体 */
- void ExecPlan::HostToEQMJson(QVector<QList<ExecPlanItem*>*>& cfgVec, QList<ExecPlanItemInfo>& listInfo)
- {
- for(const auto& it : cfgVec)
- {
- for(const auto& it1 : *it)
- {
- ExecPlanItemInfo info;
- info.ExecType = getExecMode();
- info.WeekDay = it1->getWeekDay() + 1; /* 转换成1-7表示周1-周日 */
- info.date = it1->getDate();
- info.execTime = it1->getExecTime();
- info.devName = it1->getDevName();
- info.actionID = it1->getActionNum();
- info.actionName = it1->getActionName();
- // info.dateType = it1->getDateType();
- info.cfgDev = it1->getCfgDev();
- listInfo.append(info);
- }
- }
- }
- /**
- * @brief 添加从EQM获取到的数据
- *
- * @param listInfo
- */
- void ExecPlan::EQMToHost(QList<ExecPlanItemInfo>& listInfo)
- {
- for(auto& it : listInfo)
- {
- ExecPlanItem* item = nullptr;
- if(it.WeekDay < 7)
- {
- item = new ExecPlanItem(it.WeekDay, this);
- }else
- {
- item = new ExecPlanItem(it.WeekDay, this);
- }
- item->setDate(it.date);
- item->setExecTime(it.execTime);
- item->setDevName(it.devName);
- item->setActionName(it.actionName);
- item->setActionNum(it.actionID);
- connect(item,SIGNAL(signal_OneItemDelete(int)),this,SLOT(do_deleteOneItem(int)));
- connect(item,SIGNAL(signal_execTimeClicked(QTime)),this,SLOT(do_editExecTime(QTime)));
- connect(item,SIGNAL(signal_devChanged()),this,SLOT(do_editDev()));
- connect(item,SIGNAL(signal_dateClicked(QDate)),this,SLOT(do_editDate(QDate)));
- m_vecLayout[it.WeekDay]->addWidget(item);
- m_vecItem[it.WeekDay]->push_back(item);
- }
- /* 排序并添加序号 */
- for(int i = 0;i < 8;i++)
- {
- SortAndRefreshUI(i);
- }
- OneEvent* oe = new OneEvent(CustomEventType::event_Echo);
- oe->setData("获取EQM执行计划成功");
- QApplication::postEvent(g_uiObject, oe);
- }
|