From 23021133c627cb196ccca20e4a59aced5ee6a1d7 Mon Sep 17 00:00:00 2001 From: admin Date: Fri, 21 Oct 2016 10:01:11 +0000 Subject: [PATCH] =?UTF-8?q?logic=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit git-svn-id: svn://192.168.0.12/source@302 8346c931-da38-4b9b-9d4c-e48b93cbd075 --- EffectUI/EffectUI.pro | 6 ++-- EffectUI/EffectUI.pro.user | 2 +- EffectUI/scompanyprocess.cpp | 24 ++++++++----- EffectUI/scompanyprocess.h | 2 ++ EffectUI/serrorprocess.cpp | 4 +++ EffectUI/slogwidget.cpp | 1 + EffectUI/sparentprocess.cpp | 28 ++++++++++----- EffectUI/srunninglistwidget.cpp | 7 ++-- EffectUI/srunningprocess.cpp | 36 ++++++++++++++++---- EffectUI/srunningprocess.h | 6 +++- EffectUI/srunprocess.cpp | 6 ++-- EffectUI/widget.cpp | 60 ++++++++++++++++++++++----------- EffectUI/widget.h | 23 +++++++++++-- 13 files changed, 152 insertions(+), 53 deletions(-) diff --git a/EffectUI/EffectUI.pro b/EffectUI/EffectUI.pro index c81ba27..4c0364b 100644 --- a/EffectUI/EffectUI.pro +++ b/EffectUI/EffectUI.pro @@ -26,7 +26,8 @@ SOURCES += main.cpp\ scompanyprocess.cpp \ serrorprocess.cpp \ srunningprocess.cpp \ - slogwidget.cpp + slogwidget.cpp \ + seffectlogic.cpp HEADERS += widget.h \ scompanylistwidget.h \ @@ -40,6 +41,7 @@ HEADERS += widget.h \ scompanyprocess.h \ serrorprocess.h \ srunningprocess.h \ - slogwidget.h + slogwidget.h \ + seffectlogic.h FORMS += widget.ui diff --git a/EffectUI/EffectUI.pro.user b/EffectUI/EffectUI.pro.user index 17a1727..df9d2f7 100644 --- a/EffectUI/EffectUI.pro.user +++ b/EffectUI/EffectUI.pro.user @@ -1,6 +1,6 @@ - + EnvironmentId diff --git a/EffectUI/scompanyprocess.cpp b/EffectUI/scompanyprocess.cpp index 37e548e..1cdf211 100644 --- a/EffectUI/scompanyprocess.cpp +++ b/EffectUI/scompanyprocess.cpp @@ -6,6 +6,7 @@ #include #include #include +#include namespace @@ -24,11 +25,13 @@ SCompanyProcess::SCompanyProcess():SParentProcess(), void SCompanyProcess::setList(const QVector& _list) { + clear(); m_vecRunList = _list; } void SCompanyProcess::setList(QVector&& _list) { + clear(); m_vecRunList = std::move(_list); } @@ -45,6 +48,7 @@ void SCompanyProcess::setList(QVector&& _list) void SCompanyProcess::runInit() { setInnerMode(E_INNER_RUN_MODE::MODE_WAIT_INIT); + QSqlDatabase db = QSqlDatabase::database(strDatabaseName); if (!db.open()) { @@ -53,13 +57,14 @@ void SCompanyProcess::runInit() return; } - QString strQuery("select num, enddate from company where enddate in ("); - foreach (auto& num, m_vecRunList) + QString strQuery("select num, enddate from company where num in ("); + foreach (auto num, m_vecRunList) { strQuery += (QString::number(num) + ","); } strQuery = strQuery.left(strQuery.length() - 1); strQuery += ")"; + signalLog(strQuery); QSqlQuery query(db); if (!query.exec(strQuery)) @@ -68,12 +73,10 @@ void SCompanyProcess::runInit() emit signalTerminateError(getError()); return; } - while (query.next()) { QDate enddate = QDate::fromString(query.value(1).toString(), "yyyy-MM-dd"); QDate today = QDate::currentDate(); - if (today <= enddate.addMonths(1)) { m_vecRunOrderList.push_back(query.value(0).toInt()); @@ -133,9 +136,9 @@ void SCompanyProcess::runInit() void SCompanyProcess::initIterator() { - m_iterRunOrderList = m_vecRunList.begin(); + m_iterRunOrderList = m_vecRunOrderList.begin(); - while (m_iterRunOrderList != m_vecRunList.end()) + while (m_iterRunOrderList != m_vecRunOrderList.end()) { if (m_mapEffectRow.contains(*m_iterRunOrderList)) { @@ -155,17 +158,19 @@ void SCompanyProcess::nextIterator() if (m_iterEffectRow == m_mapEffectRow[*m_iterRunOrderList].end()) { m_bDoneCompany = true; - while (m_iterRunOrderList != m_vecRunList.end()) + while (++m_iterRunOrderList != m_vecRunOrderList.end()) { if (m_mapEffectRow.contains(*m_iterRunOrderList)) { m_iterEffectRow = m_mapEffectRow[*m_iterRunOrderList].begin(); break; } + /* else { ++m_iterRunOrderList; } + */ } } else @@ -174,7 +179,7 @@ void SCompanyProcess::nextIterator() bool SCompanyProcess::isDone() { - return m_iterRunOrderList == m_vecRunList.end(); + return m_iterRunOrderList == m_vecRunOrderList.end(); } void SCompanyProcess::runEventCode() @@ -189,6 +194,7 @@ void SCompanyProcess::runEventCode() if (isDone()) { + qDebug() << "Done"; setInnerMode(E_INNER_RUN_MODE::MODE_WAIT_TERMINATE); emit signalTerminateNormal(); return; @@ -198,6 +204,8 @@ void SCompanyProcess::runEventCode() setCurrentEffectRow(row); nextIterator(); + emit signalCompanyStart(row.company_num); + runProcess(getProcessArguments(row)); } diff --git a/EffectUI/scompanyprocess.h b/EffectUI/scompanyprocess.h index 122be5c..1d8c477 100644 --- a/EffectUI/scompanyprocess.h +++ b/EffectUI/scompanyprocess.h @@ -18,6 +18,8 @@ public: signals: void signalTerminateCompany(int _company_num); + void signalCompanyStart(int _company_num); + void signalCompanyOutdated(const QVector& _vecCompanyNum); private: void initIterator(); diff --git a/EffectUI/serrorprocess.cpp b/EffectUI/serrorprocess.cpp index 0047e38..fecfc5d 100644 --- a/EffectUI/serrorprocess.cpp +++ b/EffectUI/serrorprocess.cpp @@ -19,17 +19,21 @@ void SErrorProcess::setList(QVector&& _list) void SErrorProcess::setList(const QVector& _list) { + clear(); m_vecRunList = _list; } void SErrorProcess::setList(QVector&& _list) { + clear(); m_vecRunList = std::move(_list); } void SErrorProcess::runInit() { + setInnerMode(E_INNER_RUN_MODE::MODE_WAIT_INIT); initIterator(); + setInnerMode(E_INNER_RUN_MODE::MODE_RUN_EVENTCODE); } void SErrorProcess::runEventCode() diff --git a/EffectUI/slogwidget.cpp b/EffectUI/slogwidget.cpp index 486fada..116a263 100644 --- a/EffectUI/slogwidget.cpp +++ b/EffectUI/slogwidget.cpp @@ -12,6 +12,7 @@ SLogWidget::SLogWidget(QWidget *parent):QWidget(parent), { m_pLayout->addWidget(m_plwLog); setLayout(m_pLayout); + //m_plwLog->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff); } diff --git a/EffectUI/sparentprocess.cpp b/EffectUI/sparentprocess.cpp index 4286a6c..f70ac2f 100644 --- a/EffectUI/sparentprocess.cpp +++ b/EffectUI/sparentprocess.cpp @@ -2,6 +2,7 @@ #include "sutilfunction.h" #include #include +#include extern QString ERROR_MESSAGE[]; @@ -15,8 +16,8 @@ const QString SPLIT_KEYWORD = "!@#"; SParentProcess::SParentProcess():m_pProcess(new QProcess(this)), m_bRunning(false), nTime(0), m_bUserAbort(false), m_eInnerMode(E_INNER_RUN_MODE::MODE_WAIT) { - QObject::connect(m_pProcess, SIGNAL(QProcess::finished(int, QProcess::ExitStatus)), - this, SLOT(SParentProcess::finishedProcess(int, QProcess::ExitStatus))); + QObject::connect(m_pProcess, SIGNAL(finished(int, QProcess::ExitStatus)), + this, SLOT(finishedProcess(int, QProcess::ExitStatus))); QObject::connect(this, &SParentProcess::signalTerminateError, this, &SParentProcess::slotTerminateError); } @@ -44,7 +45,7 @@ QVector SParentProcess::getErrorList() const SReportSummary SParentProcess::getReportSummary(int _id) const { - return m_mapReportSummary[_id]; + return m_mapReportSummary.value(_id, SReportSummary()); } QMap SParentProcess::getReportSummary() const @@ -78,14 +79,22 @@ QStringList SParentProcess::getProcessArguments(SEffectRow&& _row) const return QStringList(); } - - void SParentProcess::runProcess(QStringList _arguments) { - QString arg = _arguments.at(0); - _arguments.removeFirst(); + if (_arguments.size() > 0) + { + QString arg = _arguments.at(0); + _arguments.removeFirst(); - m_pProcess->start(arg, _arguments); + m_pProcess->start(arg, _arguments); + } + else + { + emit signalLog("x " + m_erCurrentRow.eventcode + " " + m_erCurrentRow.url + "\nERROR:NO_PROGRAM"); + emit signalTerminateEachEvent(m_erCurrentRow.company_num, E_CRAWL_STATE::FAIL); + m_vecError.append(m_erCurrentRow); + setInnerMode(E_INNER_RUN_MODE::MODE_RUN_EVENTCODE); + } } void SParentProcess::setError(const SError& _error) @@ -110,7 +119,6 @@ void SParentProcess::update() case E_INNER_RUN_MODE::MODE_WAIT: { - clear(); setInnerMode(E_INNER_RUN_MODE::MODE_RUN_INIT); break; } @@ -190,6 +198,7 @@ void SParentProcess::finishedProcess(int exitCode, QProcess::ExitStatus exitStat emit signalLog(strLog); emit signalTerminateEachEvent(analyzedResult.company_num, analyzedResult.state); setInnerMode(E_INNER_RUN_MODE::MODE_RUN_EVENTCODE); + //This may be unnecessary :( //pPro->kill(); } @@ -354,5 +363,6 @@ void SParentProcess::setCurrentEffectRow(const SEffectRow& _row) void SParentProcess::setCurrentEffectRow(SEffectRow&& _row) { + m_erCurrentRow = _row; m_erCurrentRow = std::move(_row); } diff --git a/EffectUI/srunninglistwidget.cpp b/EffectUI/srunninglistwidget.cpp index eb92e97..5071853 100644 --- a/EffectUI/srunninglistwidget.cpp +++ b/EffectUI/srunninglistwidget.cpp @@ -288,9 +288,12 @@ void SRunningListWidget::setWaiting(int _id) void SRunningListWidget::setComplete(int _id) { - QTableWidgetItem* item = findWidgetItembyID(_id, E_TABLE_HEADER::LAST_UPDATE_TIME); - if (item) + if (QTableWidgetItem* item = findWidgetItembyID(_id, E_TABLE_HEADER::LAST_UPDATE_TIME)) item->setText(QDateTime::currentDateTime().toString("yyyy-MM-dd hh:mm:ss")); + + if (QTableWidgetItem* item = findWidgetItembyID(_id, E_TABLE_HEADER::STATUS)) + item->setText("Complete"); + } void SRunningListWidget::setOutDate(int _id) diff --git a/EffectUI/srunningprocess.cpp b/EffectUI/srunningprocess.cpp index ffa1969..ad0d9a9 100644 --- a/EffectUI/srunningprocess.cpp +++ b/EffectUI/srunningprocess.cpp @@ -1,12 +1,12 @@ #include "srunningprocess.h" #include +#include namespace{ const int ONE_SECOND = 1000; // 1 second const int HALF_SECOND = 500; // 0.5 second } - SRunningProcess::SRunningProcess(): m_pTimer(new QTimer(this)), m_pErrorProcess(new SErrorProcess), m_pCompanyProcess(new SCompanyProcess), m_eMode(E_PROCESS_MODE::WAIT), @@ -19,13 +19,15 @@ SRunningProcess::SRunningProcess(): bool SRunningProcess::isRunning() { if (m_pCurrentProcess == nullptr && !m_pTimer->isActive()) - return true; + return false; else - return m_pCurrentProcess->isWaiting() && !m_pTimer->isActive(); + return !(m_pCurrentProcess->isWaiting() && !m_pTimer->isActive()); } void SRunningProcess::setList(const QVector& _list) { + qDebug() << isRunning(); + if (!isRunning()) { m_pCurrentProcess = m_pErrorProcess; @@ -35,6 +37,8 @@ void SRunningProcess::setList(const QVector& _list) void SRunningProcess::setList(QVector&& _list) { + qDebug() << isRunning(); + if (!isRunning()) { m_pCurrentProcess = m_pErrorProcess; @@ -44,6 +48,7 @@ void SRunningProcess::setList(QVector&& _list) void SRunningProcess::setList(const QVector& _list) { + qDebug() << isRunning(); if (!isRunning()) { m_pCurrentProcess = m_pCompanyProcess; @@ -53,6 +58,7 @@ void SRunningProcess::setList(const QVector& _list) void SRunningProcess::setList(QVector&& _list) { + qDebug() << isRunning(); if (!isRunning()) { m_pCurrentProcess = m_pCompanyProcess; @@ -110,6 +116,7 @@ void SRunningProcess::stop() void SRunningProcess::slotCompanyComplete(int _num) { + qDebug() << "slotCompanyComplete"; SReportSummary summary = m_pCurrentProcess->getReportSummary(_num); emit signalCompanyComplete(_num, summary); } @@ -122,15 +129,16 @@ void SRunningProcess::slotSuccessErrorCompany(int _num) void SRunningProcess::slotTerminateError() { terminate(); - SError error = m_pCurrentProcess->getError(); - emit signalTerminateError(error); + //SError error = m_pCurrentProcess->getError(); + emit signalTerminateError(); } void SRunningProcess::slotTerminateNormal() { - terminate(); + qDebug() << "slotTerminteNormal ??"; QVector errors = m_pCurrentProcess->getErrorList(); QMap reportSummary = m_pCurrentProcess->getReportSummary(); + terminate(); emit signalTerminateNormal(errors, reportSummary); } @@ -149,5 +157,21 @@ void SRunningProcess::initConnect() QObject::connect(&(*m_pCompanyProcess), &SCompanyProcess::signalTerminateCompany, this, &SRunningProcess::slotCompanyComplete); QObject::connect(&(*m_pErrorProcess), &SErrorProcess::signalTerminateCompany, this, &SRunningProcess::slotSuccessErrorCompany); + + QObject::connect(&(*m_pCompanyProcess), &SCompanyProcess::signalUserAbort, this, &SRunningProcess::slotUserAbort); + QObject::connect(&(*m_pErrorProcess), &SErrorProcess::signalUserAbort, this, &SRunningProcess::slotUserAbort); + + QObject::connect(&(*m_pCompanyProcess), &SCompanyProcess::signalCompanyStart, this, &SRunningProcess::slotCompanyStart); + QObject::connect(&(*m_pCompanyProcess), &SCompanyProcess::signalCompanyOutdated, this, &SRunningProcess::slotCompanyOutDated); +} + +void SRunningProcess::slotCompanyOutDated(const QVector& _vecCompanyNum) +{ + emit signalCompanyOutDated(_vecCompanyNum); +} + +void SRunningProcess::slotCompanyStart(int _companyNum) +{ + emit signalCompanyStart(_companyNum); } diff --git a/EffectUI/srunningprocess.h b/EffectUI/srunningprocess.h index b615ba9..bb3a021 100644 --- a/EffectUI/srunningprocess.h +++ b/EffectUI/srunningprocess.h @@ -44,6 +44,8 @@ private slots: void slotSuccessErrorCompany(int _num); void slotTerminateError(); void slotTerminateNormal(); + void slotCompanyOutDated(const QVector& _vecCompanyNum); + void slotCompanyStart(int _companyNum); signals: @@ -51,9 +53,11 @@ signals: void signalUserAbort(); void signalTerminateNormal(const QVector& _error, const QMap& _report); - void signalTerminateError(const SError& _error); + void signalTerminateError(); void signalCompanyComplete(int _num, const SReportSummary& summary); void signalSuccessErrorCompany(int _num); + void signalCompanyOutDated(const QVector& _vecCompanyNum); + void signalCompanyStart(int _companyNum); private: std::unique_ptr m_pTimer; diff --git a/EffectUI/srunprocess.cpp b/EffectUI/srunprocess.cpp index 7521347..742d96b 100644 --- a/EffectUI/srunprocess.cpp +++ b/EffectUI/srunprocess.cpp @@ -225,7 +225,8 @@ void SRunProcess::runInitCompany() if (!query.exec(strQuery)) { SError err(E_ERROR_CODE::DB_QUERY_ERROR, query.lastQuery() + "\n" + query.lastError().text()); - processError(std::move(err)); + //processError(std::move(err)); + processError(err); return; } @@ -256,7 +257,8 @@ void SRunProcess::runInitCompany() if (!query.exec(strQuery)) { SError err(E_ERROR_CODE::DB_QUERY_ERROR, query.lastQuery() + "\n" + query.lastError().text()); - processError(std::move(err)); + //processError(std::move(err)); + processError(err); return; } diff --git a/EffectUI/widget.cpp b/EffectUI/widget.cpp index c60a76c..938d23b 100644 --- a/EffectUI/widget.cpp +++ b/EffectUI/widget.cpp @@ -4,42 +4,64 @@ #include "srunninglistwidget.h" #include "sadddelwidget.h" #include "slogwidget.h" +#include "stimer.h" +#include "seffectlogic.h" +#include "srunningprocess.h" #include -Widget::Widget(QWidget *parent) : - QWidget(parent), +SCompanyListWidget *m_pCompanyWidget; +SRunningListWidget *m_pRunningListWidget; +SAddDelWidget *m_pAddDelWidget; +SLogWidget *m_pLogWidget; +STimer *m_pTimer; +SEffectLogic *m_pLogic; + +Widget::Widget(QWidget *parent) : m_pCompanyWidget(new SCompanyListWidget), + m_pRunningListWidget(new SRunningListWidget), m_pAddDelWidget(new SAddDelWidget), + m_pLogWidget(new SLogWidget), m_pTimer(new STimer), m_pLogic(new SEffectLogic), + m_pProcess(new SRunningProcess), ui(new Ui::Widget) { ui->setupUi(this); - SCompanyListWidget *c = new SCompanyListWidget; - SRunningListWidget *d = new SRunningListWidget; - SAddDelWidget *e = new SAddDelWidget; - SLogWidget *f = new SLogWidget; - QHBoxLayout* mainLayout = new QHBoxLayout(this); - mainLayout->addWidget(c); - mainLayout->addWidget(e); + QHBoxLayout* mainLayout = new QHBoxLayout(); + QVBoxLayout* vmainLayout = new QVBoxLayout(this); - mainLayout->addWidget(d); - mainLayout->addWidget(f); + mainLayout->addWidget(m_pCompanyWidget); + mainLayout->addWidget(m_pAddDelWidget); + mainLayout->addWidget(m_pRunningListWidget); + vmainLayout->addLayout(mainLayout); + vmainLayout->addWidget(m_pLogWidget); - connect(e, &SAddDelWidget::signalClickedAddBtn, [&c, &d](){ - d->addList(c->getSelectedList()); - }); + connect(m_pAddDelWidget, &SAddDelWidget::signalClickedAddBtn, this, &Widget::slotClickAdd); + connect(m_pAddDelWidget, &SAddDelWidget::signalClickedDelBtn, this, &Widget::slotClickDel); - connect(e, &SAddDelWidget::signalClickedDelBtn, [&c, &d](){ - d->removeSelectedList(); - }); + m_pLogic->setSAddDelWidget(m_pAddDelWidget); + m_pLogic->setSLogWidget(m_pLogWidget); + m_pLogic->setSTimer(m_pTimer); + m_pLogic->setSRunningProcess(m_pProcess); + m_pLogic->setSRunningWidget(m_pRunningListWidget); - setLayout(mainLayout); + m_pLogic->initConnect(); + + setLayout(vmainLayout); setWindowTitle("EffectUI " + QString::number(QCoreApplication::applicationPid())); show(); - c->refresh(); + m_pCompanyWidget->refresh(); } Widget::~Widget() { } +void Widget::slotClickAdd() +{ + m_pRunningListWidget->addList(m_pCompanyWidget->getSelectedList()); +} + +void Widget::slotClickDel() +{ + m_pRunningListWidget->removeSelectedList(); +} diff --git a/EffectUI/widget.h b/EffectUI/widget.h index edd25a5..29a5b78 100644 --- a/EffectUI/widget.h +++ b/EffectUI/widget.h @@ -4,6 +4,14 @@ #include #include +class SCompanyListWidget; +class SRunningListWidget; +class SAddDelWidget; +class STimer; +class SLogWidget; +class SEffectLogic; +class SRunningProcess; + namespace Ui { class Widget; } @@ -16,11 +24,20 @@ public: explicit Widget(QWidget *parent = 0); ~Widget(); +protected slots: + void slotClickAdd(); + void slotClickDel(); + + private: std::unique_ptr ui; - - - + SCompanyListWidget *m_pCompanyWidget; + SRunningListWidget *m_pRunningListWidget; + SAddDelWidget *m_pAddDelWidget; + SLogWidget *m_pLogWidget; + STimer *m_pTimer; + SEffectLogic *m_pLogic; + SRunningProcess* m_pProcess; }; #endif // WIDGET_H