Files
clients/EffectUI/scompanyprocess.cpp
admin 23021133c6 logic 추가
git-svn-id: svn://192.168.0.12/source@302 8346c931-da38-4b9b-9d4c-e48b93cbd075
2016-10-21 10:01:11 +00:00

229 lines
6.2 KiB
C++

#include "scompanyprocess.h"
#include "sutilfunction.h"
#include <QSqlDatabase>
#include <QSqlQuery>
#include <QSqlError>
#include <QString>
#include <QDate>
#include <QStringList>
#include <QDebug>
namespace
{
const QString strDatabaseName("processlist");
}
SCompanyProcess::SCompanyProcess():SParentProcess(),
m_iterEffectRow(nullptr), m_iterRunOrderList(nullptr), m_bDoneCompany(false)
{
databaseSetting(strDatabaseName);
QObject::connect(this, &SCompanyProcess::signalTerminateEachEvent,
this, &SCompanyProcess::slotTerminateEachEvent);
}
void SCompanyProcess::setList(const QVector<int>& _list)
{
clear();
m_vecRunList = _list;
}
void SCompanyProcess::setList(QVector<int>&& _list)
{
clear();
m_vecRunList = std::move(_list);
}
void SCompanyProcess::setList(const QVector<SEffectRow>& _list)
{
}
void SCompanyProcess::setList(QVector<SEffectRow>&& _list)
{
}
void SCompanyProcess::runInit()
{
setInnerMode(E_INNER_RUN_MODE::MODE_WAIT_INIT);
QSqlDatabase db = QSqlDatabase::database(strDatabaseName);
if (!db.open())
{
setError(SError(E_ERROR_CODE::DB_OPEN_ERROR, db.lastError().text()));
emit signalTerminateError(getError());
return;
}
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))
{
setError(SError(E_ERROR_CODE::DB_QUERY_ERROR, query.lastQuery() + "\n" + query.lastError().text()));
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());
}
}
strQuery = "select company.num, name, startdate, enddate, t.event_num, "
"t.date, t.url, t.eventcode, t.platformname_num from company "
"join (select company_num, event_num, event.date, event.url, event.eventcode, "
"event.platformname_num from company_event_map join event on company_event_map.event_num = event.num) "
"as t on company.num = t.company_num where company.num in (";
foreach (auto &num, m_vecRunOrderList)
{
strQuery += (QString::number(num) + ",");
}
strQuery = strQuery.left(strQuery.length() - 1);
strQuery += ")";
if (!query.exec(strQuery))
{
setError(SError(E_ERROR_CODE::DB_QUERY_ERROR, query.lastQuery() + "\n" + query.lastError().text()));
emit signalTerminateError(getError());
return;
}
/*
foreach (auto &num, m_vecRunOrderList)
{
m_vecRunOrderList.insert(num, QVector<SEffectRow>());
}
*/
while (query.next())
{
if (!m_mapEffectRow.contains(query.value(0).toInt()))
m_mapEffectRow.insert(query.value(0).toInt(), QVector<SEffectRow>());
SEffectRow row(query.value(0).toInt(),
query.value(1).toString().trimmed(),
QDate::fromString(query.value(2).toString().trimmed(), "yyyy-MM-dd"),
QDate::fromString(query.value(3).toString().trimmed(), "yyyy-MM-dd"),
query.value(4).toInt(),
QDate::fromString(query.value(5).toString().trimmed(), "yyyy-MM-dd"),
query.value(6).toString().trimmed(),
query.value(7).toString().trimmed(),
query.value(8).toInt()
);
m_mapEffectRow[query.value(0).toInt()].append(row);
}
initIterator();
setInnerMode(E_INNER_RUN_MODE::MODE_RUN_EVENTCODE);
db.close();
}
void SCompanyProcess::initIterator()
{
m_iterRunOrderList = m_vecRunOrderList.begin();
while (m_iterRunOrderList != m_vecRunOrderList.end())
{
if (m_mapEffectRow.contains(*m_iterRunOrderList))
{
m_iterEffectRow = m_mapEffectRow[*m_iterRunOrderList].begin();
break;
}
else
{
++m_iterRunOrderList;
}
}
}
void SCompanyProcess::nextIterator()
{
++m_iterEffectRow;
if (m_iterEffectRow == m_mapEffectRow[*m_iterRunOrderList].end())
{
m_bDoneCompany = true;
while (++m_iterRunOrderList != m_vecRunOrderList.end())
{
if (m_mapEffectRow.contains(*m_iterRunOrderList))
{
m_iterEffectRow = m_mapEffectRow[*m_iterRunOrderList].begin();
break;
}
/*
else
{
++m_iterRunOrderList;
}
*/
}
}
else
m_bDoneCompany = false;
}
bool SCompanyProcess::isDone()
{
return m_iterRunOrderList == m_vecRunOrderList.end();
}
void SCompanyProcess::runEventCode()
{
setInnerMode(E_INNER_RUN_MODE::MODE_WAIT_EVENTCODE);
if (isUserAbort())
{
setInnerMode(E_INNER_RUN_MODE::MODE_WAIT_TERMINATE);
emit signalUserAbort();
return;
}
if (isDone())
{
qDebug() << "Done";
setInnerMode(E_INNER_RUN_MODE::MODE_WAIT_TERMINATE);
emit signalTerminateNormal();
return;
}
SEffectRow row = *m_iterEffectRow;
setCurrentEffectRow(row);
nextIterator();
emit signalCompanyStart(row.company_num);
runProcess(getProcessArguments(row));
}
void SCompanyProcess::clear()
{
SParentProcess::clear();
m_vecRunList.clear();
m_vecRunOrderList.clear();
m_mapEffectRow.clear();
m_bDoneCompany = false;
m_iterEffectRow = nullptr;
m_iterRunOrderList = nullptr;
}
void SCompanyProcess::slotTerminateEachEvent(int _num, E_CRAWL_STATE _state)
{
if (m_bDoneCompany)
emit signalTerminateCompany(_num);
}