diff --git a/Analyzer/Analyzer.pro b/Analyzer/Analyzer.pro index 2e776bb..c126806 100644 --- a/Analyzer/Analyzer.pro +++ b/Analyzer/Analyzer.pro @@ -20,7 +20,8 @@ SOURCES += main.cpp\ scolumn.cpp \ sfilterobject.cpp \ ../Json/sjson.cpp \ - sfilterdlg.cpp + sfilterdlg.cpp \ + sbatchrun.cpp HEADERS += mainwindow.h \ ../Json/sjson.h \ @@ -31,4 +32,5 @@ HEADERS += mainwindow.h \ scountdlg.h \ scolumn.h \ sfilterobject.h \ - sfilterdlg.h + sfilterdlg.h \ + sbatchrun.h diff --git a/Analyzer/main.cpp b/Analyzer/main.cpp index 05c4f1f..d94008d 100644 --- a/Analyzer/main.cpp +++ b/Analyzer/main.cpp @@ -17,6 +17,7 @@ SColumn GetColumn() return g_column; } + int main(int argc, char *argv[]) { QApplication a(argc, argv); diff --git a/Analyzer/mainwindow.cpp b/Analyzer/mainwindow.cpp index d9e7b22..6f2274b 100644 --- a/Analyzer/mainwindow.cpp +++ b/Analyzer/mainwindow.cpp @@ -78,6 +78,7 @@ void MainWindow::setMenu() void MainWindow::setDialog() { + m_pBatchRunDlg = new SBatchRun; m_pDataDlg = new SDataDlg; m_ploadDlg = new SLoadDlg; m_pCountDlg = new SCountDlg; @@ -88,7 +89,7 @@ void MainWindow::setDialog() m_pDialogs[2] = m_pCountDlg; m_pDialogs[3] = m_pFilterObjectDlg; m_pDialogs[4] = m_pFilterDlg; - + //m_pDialogs[5] = m_pBatchRunDlg; QFile file("size.sts"); if (file.open(QIODevice::ReadOnly)) { diff --git a/Analyzer/mainwindow.h b/Analyzer/mainwindow.h index 998b39a..6a35092 100644 --- a/Analyzer/mainwindow.h +++ b/Analyzer/mainwindow.h @@ -16,7 +16,7 @@ #include "scountdlg.h" #include "sfilterobject.h" #include "sfilterdlg.h" - +#include "sbatchrun.h" #include "scolumn.h" #define D_DIALOG_MAX 5 @@ -50,6 +50,7 @@ public: SCountDlg *m_pCountDlg; SFilterObject *m_pFilterObjectDlg; SFilterDlg *m_pFilterDlg; + SBatchRun *m_pBatchRunDlg; QWebView m_graph; QSqlDatabase m_db; QProgressBar m_progress; diff --git a/Analyzer/sbatchrun.cpp b/Analyzer/sbatchrun.cpp new file mode 100644 index 0000000..202d1fd --- /dev/null +++ b/Analyzer/sbatchrun.cpp @@ -0,0 +1,850 @@ +#include "sbatchrun.h" +#include +#include +#include +#include +#include +#include "mainwindow.h" +#include +#include +#include +#include +#include +#include +#include +#include "stable.h" +#include "scolumn.h" +#include "./../Json/sjson.h" +#define D_NOT_SELECT -1 +#include + +void SBatchRun::showBatchRun(int nGroupID) +{ + if(nGroupID == -1) + return; + + RefreshFilter(nGroupID); + this->show(); + this->setFocus(); +} + + +SBatchRun::SBatchRun() +{ + setMainWidgets(); + ReloadColumn(); +} + +QVBoxLayout* SBatchRun::setLoadWidgets() +{ + QVBoxLayout *vLoad = new QVBoxLayout; + m_plwData = new QListWidget; + m_plwData->setSelectionMode(QAbstractItemView::SingleSelection); + vLoad->addWidget(m_plwData); + + QPushButton *ppbRefresh = new QPushButton("Refresh"); + vLoad->addWidget(ppbRefresh); + connect(ppbRefresh, SIGNAL(released()),this, SLOT(Refresh())); + + return vLoad; +} + +QVBoxLayout* SBatchRun::setDaysWidgets() +{ + QVBoxLayout *vDays = new QVBoxLayout; + + m_pgbFromTo = setFromToWidgets(); + m_pgbCutDays = setCutDaysWidgets(); + + connect(m_pgbFromTo, SIGNAL(clicked(bool)), this, SLOT(clickedFromTo(bool))); + connect(m_pgbCutDays, SIGNAL(clicked(bool)), this, SLOT(clickedCutDays(bool))); + + vDays->addWidget(m_pgbFromTo); + vDays->addWidget(m_pgbCutDays); + + return vDays; +} + +QVBoxLayout* SBatchRun::setFilterWidgets() +{ + m_pleFilter = new QLineEdit; + m_plwFilter = new QListWidget; + + QVBoxLayout *vFilter = new QVBoxLayout; + vFilter->addWidget(m_pleFilter); + vFilter->addWidget(m_plwFilter); + + return vFilter; +} + + +QGroupBox* SBatchRun::setFromToWidgets() +{ + m_pdeFrom = new QDateEdit(QDate::currentDate()); + m_pdeTo = new QDateEdit(QDate::currentDate()); + + m_pdeFrom->setDateRange(QDate(2003, 5, 20),QDate::currentDate()); + m_pdeTo->setDateRange(QDate(2003, 5, 20),QDate::currentDate().addYears(1)); + + QCalendarWidget *pCalender = new QCalendarWidget(); + m_pdeFrom->setCalendarWidget(pCalender); + m_pdeFrom->setCalendarPopup(true); + + m_pdeTo->setCalendarWidget(pCalender); + m_pdeTo->setCalendarPopup(true); + + QHBoxLayout *hFromTo = new QHBoxLayout; + hFromTo->addWidget(new QLabel("From:")); + hFromTo->addWidget(m_pdeFrom); + hFromTo->addWidget(new QLabel("To:")); + hFromTo->addWidget(m_pdeTo); + + QGroupBox* pgbFromTo = new QGroupBox("FromTo"); + pgbFromTo->setLayout(hFromTo); + pgbFromTo->setCheckable(true); + pgbFromTo->setChecked(false); + + return pgbFromTo; +} + +QGroupBox* SBatchRun::setCutDaysWidgets() +{ + m_pleCutDays = new QLineEdit; + m_pleCutDays->setText("-31"); + + QHBoxLayout *hCutDays = new QHBoxLayout; + hCutDays->addWidget(new QLabel("CutDays:")); + hCutDays->addWidget(m_pleCutDays); + + QGroupBox* pgbCutDays = new QGroupBox("CutDays"); + pgbCutDays->setLayout(hCutDays); + pgbCutDays->setCheckable(true); + pgbCutDays->setChecked(true); + + return pgbCutDays; +} + + +void SBatchRun::setMainWidgets() +{ + QHBoxLayout *hMain = new QHBoxLayout; + hMain->addLayout(setLoadWidgets()); + hMain->addLayout(setDaysWidgets()); + hMain->addLayout(setFilterWidgets()); + QPushButton *ppbRun = new QPushButton; + ppbRun->setText("Run"); + connect(ppbRun, SIGNAL(released()),this, SLOT(run())); + hMain->addWidget(ppbRun); + + setLayout(hMain); + + setWindowTitle("Batch Run"); + Refresh(); +} + +void SBatchRun::clickedCutDays(bool clicked) +{ + m_pgbFromTo->setChecked(!clicked); +} + + +void SBatchRun::clickedFromTo(bool clicked) +{ + m_pgbCutDays->setChecked(!clicked); +} + +void SBatchRun::Refresh() +{ + m_plwData->clear(); + QSqlQuery query("select id,name,count from datagroup"); + while (query.next()) + { + QString str = query.value(1).toString(); + str += " ( "; + str += query.value(0).toString(); + str += " , "; + str += query.value(2).toString(); + str += " )"; + QListWidgetItem *pItem = new QListWidgetItem(str,m_plwData); + pItem->setData(Qt::UserRole, QVariant(query.value(0))); + } +} + +void SBatchRun::run() +{ + if(!loadData()) + { + Message("Check Data DB"); + return; + } + if(!execFilter()) + { + Message("Filter Failed"); + return; + } + ViewResult(); + clearData(); +} + +SBatchRun::~SBatchRun() +{ + +} + +void SBatchRun::ViewResult() +{ + QVector column = GetColumn().data(); + /* + STable *pTable = (STable *)GetMainWindow()->m_pDataDlg->GetCurrentWidget(); + if (pTable == NULL) + pTable = (STable *)GetMainWindow()->m_pDataDlg->AddTable(""); + */ + STable *pTable = (STable *)GetMainWindow()->m_pDataDlg->AddTable(""); + QMap mapFilter; + + for(int i = 0; i < E_ARTICLE_MAX; i++) + { + if(m_bDataFlag[i]) + { + for(int j = 0; j < m_data[i].length(); j++) + { + mapFilter[m_data[i][j][m_anData[E_DATA_article_url]].trimmed()] = true; + } + } + qDebug() << m_bDataFlag[i]; + } + + qDebug() << "MapFilter size :" << mapFilter.size(); + + if(!m_bDataFlag[E_ARTICLE_BODY] && !m_bDataFlag[E_ARTICLE_REPLY]) + { + for(int i = 0; i < m_vecData[E_ARTICLE_BODY].size(); i++) + { + mapFilter[m_vecData[E_ARTICLE_BODY][i][m_anData[E_DATA_article_url]].trimmed()] = true; + } + } + + int totalRow = 0; + for(int i = 0; i < E_ARTICLE_MAX; i++) + { + for(int j = 0; j < m_vecData[i].size(); j++) + { + if(mapFilter.value(m_vecData[i][j][m_anData[E_DATA_article_url]].trimmed())) + totalRow++; + } + } + qDebug() << totalRow; + + pTable->setArticleSelect(STable::E_ARTICLE_ALL); + pTable->clear(); + pTable->SetHeaderList(&column,SColumn::E_NAME); + pTable->setRowCount(totalRow); + + GetMainWindow()->m_progress.setRange(0, totalRow); + int nCount = 0; + for(int i = 0; i < E_ARTICLE_MAX; i++) + { + for(int j = 0; j < m_vecData[i].length(); j++) + { + if(mapFilter.value(m_vecData[i][j][m_anData[E_DATA_article_url]].trimmed())) + { + for (int k = 0; k < pTable->columnCount() ; k++) + { + QString str = m_vecData[i][j][k].replace("\n"," "); + pTable->setItem(nCount,k,new QTableWidgetItem(" "+str.replace("\t"," ")+" ")); + } + nCount++; + GetMainWindow()->m_progress.setValue(nCount); + GetMainWindow()->m_progress.repaint(); + } + } + } + pTable->repaint(); + //Message(QString("RealBody : ") + QString::number(m_data[E_ARTICLE_BODY].size()) + QString("\nRealReply : ") + QString::number(m_data[E_ARTICLE_REPLY].size())); +} + + +void SBatchRun::ViewRawResult() +{ + // check data duplication + { + QMap mapUrls; + for(int i = 0; i < m_vecData[E_ARTICLE_BODY].size(); i++) + { + if(mapUrls.contains(m_vecData[E_ARTICLE_BODY][i][m_anData[E_DATA_article_url]].trimmed())) + { + mapUrls[m_vecData[E_ARTICLE_BODY][i][m_anData[E_DATA_article_url]].trimmed()] += 1; + } + else + { + mapUrls[m_vecData[E_ARTICLE_BODY][i][m_anData[E_DATA_article_url]].trimmed()] = 1; + } + } + + + for(QMap::iterator iterPos = mapUrls.begin(); iterPos != mapUrls.end(); iterPos++) + { + if(iterPos.value() > 1) + qDebug() << iterPos.key() << " : " << iterPos.value() ; + } + } + + + QVector column = GetColumn().data(); + /* + STable *pTable = (STable *)GetMainWindow()->m_pDataDlg->GetCurrentWidget(); + if (pTable == NULL) + pTable = (STable *)GetMainWindow()->m_pDataDlg->AddTable(""); + */ + STable *pTable = (STable *)GetMainWindow()->m_pDataDlg->AddTable(""); + + int totalRow = 0; + for(int i = 0; i < E_ARTICLE_MAX; i++) + { + totalRow += m_vecData[i].size(); + } + qDebug() << totalRow; + + pTable->setArticleSelect(STable::E_ARTICLE_ALL); + pTable->clear(); + pTable->SetHeaderList(&column,SColumn::E_NAME); + pTable->setRowCount(totalRow); + + GetMainWindow()->m_progress.setRange(0, totalRow); + int nCount = 0; + for(int i = 0; i < E_ARTICLE_MAX; i++) + { + for(int j = 0; j < m_vecData[i].length(); j++) + { + for (int k = 0; k < pTable->columnCount() ; k++) + { + QString str = m_vecData[i][j][k].replace("\n"," "); + pTable->setItem(nCount,k,new QTableWidgetItem(" "+str.replace("\t"," ")+" ")); + } + nCount++; + GetMainWindow()->m_progress.setValue(nCount); + GetMainWindow()->m_progress.repaint(); + } + } + pTable->repaint(); +} + + +void SBatchRun::RefreshFilter(int _nGroup) +{ + if (_nGroup == D_NOT_SELECT) return; + { + QSqlQuery query("select id,type,data from filter where filtergroup_id = " + QString::number(_nGroup)); + m_plwFilter->clear(); + while (query.next()) + { + QString str = GetMainWindow()->m_pFilterObjectDlg->JsonToString(query.value(1).toInt(),query.value(2).toString()); + QListWidgetItem *pItem = new QListWidgetItem(str, m_plwFilter); + pItem->setData(Qt::UserRole, QVariant(QList() << query.value(1) << query.value(2))); + } + } + { + m_pleFilter->clear(); + QSqlQuery query("select id,name from filtergroup where id = " + QString::number(_nGroup)); + while (query.next()) + m_pleFilter->setText(query.value(1).toString()); + } +} + +/* +bool SBatchRun::ReloadColumn() +{ + QVector vecColumn; + QFile file("column.txt"); + if (file.open(QIODevice::ReadOnly | QIODevice::Text) == false) return false; + { + while (!file.atEnd()) + { + QString str = QString(file.readLine()); + if (str.at(0) == QChar('#')) continue; + if (str.trimmed().isEmpty()) continue; + vecColumn.push_back(str.split(",")); + } + } + if (vecColumn.size() <= 0) return false; + + foreach(QStringList strList,vecColumn) + m_listDataBaseColumn.push_back(strList.at(E_COLUMN_DATABASE)); + + for(int i = 0; i < m_listDataBaseColumn.size(); i++) + { + if (m_listDataBaseColumn[i].trimmed() == QString("platform_title")) m_anData[E_DATA_platform_title] = i; + if (m_listDataBaseColumn[i].trimmed() == QString("article_form")) m_anData[E_DATA_article_form] = i; + if (m_listDataBaseColumn[i].trimmed() == QString("article_parent")) m_anData[E_DATA_article_parent] = i; + if (m_listDataBaseColumn[i].trimmed() == QString("article_id")) m_anData[E_DATA_article_id] = i; + if (m_listDataBaseColumn[i].trimmed() == QString("article_nickname")) m_anData[E_DATA_article_nickname] = i; + if (m_listDataBaseColumn[i].trimmed() == QString("article_title")) m_anData[E_DATA_article_title] = i; + if (m_listDataBaseColumn[i].trimmed() == QString("article_data")) m_anData[E_DATA_article_data] = i; + if (m_listDataBaseColumn[i].trimmed() == QString("article_url")) m_anData[E_DATA_article_url] = i; + if (m_listDataBaseColumn[i].trimmed() == QString("article_hit")) m_anData[E_DATA_article_hit] = i; + if (m_listDataBaseColumn[i].trimmed() == QString("article_date")) m_anData[E_DATA_article_date] = i; + if (m_listDataBaseColumn[i].trimmed() == QString("article_order")) m_anData[E_DATA_article_order] = i; + if (m_listDataBaseColumn[i].trimmed() == QString("platform_id")) m_anData[E_DATA_platform_id] = i; + if (m_listDataBaseColumn[i].trimmed() == QString("platform_name")) m_anData[E_DATA_platform_name] = i; + if (m_listDataBaseColumn[i].trimmed() == QString("platform_form")) m_anData[E_DATA_platform_form] = i; + if (m_listDataBaseColumn[i].trimmed() == QString("reply_url")) m_anData[E_DATA_reply_url] = i; + if (m_listDataBaseColumn[i].trimmed() == QString("keyword_id")) m_anData[E_DATA_keyword_id] = i; + if (m_listDataBaseColumn[i].trimmed() == QString("article_profileurl")) m_anData[E_DATA_article_profileurl] = i; + if (m_listDataBaseColumn[i].trimmed() == QString("article_profile")) m_anData[E_DATA_article_profile] = i; + if (m_listDataBaseColumn[i].trimmed() == QString("etc")) m_anData[E_DATA_etc] = i; + } + + m_nUrlColumn = m_anData[E_DATA_article_url]; + m_nDateColumn = m_anData[E_DATA_article_date]; + m_nOrderColumn = m_anData[E_DATA_article_order]; + return true; +} +*/ + +bool SBatchRun::ReloadColumn() +{ + m_anData[E_DATA_platform_title] = GetColumn().getColumnIndex(QString("platform_title")); + m_anData[E_DATA_article_form] = GetColumn().getColumnIndex(QString("article_form")); + m_anData[E_DATA_article_parent] = GetColumn().getColumnIndex(QString("article_parent")); + m_anData[E_DATA_article_id] = GetColumn().getColumnIndex(QString("article_id")); + m_anData[E_DATA_article_nickname] = GetColumn().getColumnIndex(QString("article_nickname")); + m_anData[E_DATA_article_title] = GetColumn().getColumnIndex(QString("article_title")); + m_anData[E_DATA_article_data] = GetColumn().getColumnIndex(QString("article_data")); + m_anData[E_DATA_article_url] = GetColumn().getColumnIndex(QString("article_url")); + m_anData[E_DATA_article_hit] = GetColumn().getColumnIndex(QString("article_hit")); + m_anData[E_DATA_article_date] = GetColumn().getColumnIndex(QString("article_date")); + m_anData[E_DATA_article_order] = GetColumn().getColumnIndex(QString("article_order")); + m_anData[E_DATA_platform_id] = GetColumn().getColumnIndex(QString("platform_id")); + m_anData[E_DATA_platform_name] = GetColumn().getColumnIndex(QString("platform_name")); + m_anData[E_DATA_platform_form] = GetColumn().getColumnIndex(QString("platform_form")); + m_anData[E_DATA_reply_url] = GetColumn().getColumnIndex(QString("reply_url")); + m_anData[E_DATA_keyword_id] = GetColumn().getColumnIndex(QString("keyword_id")); + m_anData[E_DATA_article_profileurl] = GetColumn().getColumnIndex(QString("article_profileurl")); + m_anData[E_DATA_article_profile] = GetColumn().getColumnIndex(QString("article_profile")); + m_anData[E_DATA_etc] = GetColumn().getColumnIndex(QString("etc")); + + m_nUrlColumn = m_anData[E_DATA_article_url]; + m_nDateColumn = m_anData[E_DATA_article_date]; + m_nOrderColumn = m_anData[E_DATA_article_order]; + return true; +} + + +bool SBatchRun::loadData() +{ + QList items = m_plwData->selectedItems(); + if(items.length() < 1 || items.length() > 1) + return false; + + clearData(); + + QString _strDataNum = QString::number(items[0]->data(Qt::UserRole).toInt()); + int nCutDays = m_pleCutDays->text().toInt(); + QDate dateFrom = m_pdeFrom->date(); + QDate dateTo = m_pdeTo->date(); + + + QString strSelect; + strSelect = "select "; + qDebug() << "GetColumn().data().size() : "<< GetColumn().data().size(); + foreach (QStringList strListColumn, GetColumn().data()) + { + qDebug() << strListColumn[E_COLUMN_DATABASE]; + strSelect += "CONVERT(" + strListColumn[E_COLUMN_DATABASE] + " USING utf8),"; + } + /* + foreach (QString strColumn,m_listDataBaseColumn) + strSelect += "CONVERT(" + strColumn + " USING utf8),"; + */ + strSelect = strSelect.left(strSelect.size() - 1); + strSelect += " from "; + strSelect += "data_" + _strDataNum; + + QString astrWhere[E_ARTICLE_MAX] = {" where article_form = 'body'"," where article_form = 'reply'"}; + astrWhere[E_ARTICLE_BODY] += " and date(article_date) >= "; + astrWhere[E_ARTICLE_REPLY] += " and date(article_date) >= "; + if(m_pgbCutDays->isChecked()) + { + astrWhere[E_ARTICLE_BODY] += "date(subdate(now(), INTERVAL "; + astrWhere[E_ARTICLE_BODY] += QString::number(abs(nCutDays)); + astrWhere[E_ARTICLE_BODY] += " DAY))"; + astrWhere[E_ARTICLE_BODY] += " and date(article_date) <= date(now())"; + + astrWhere[E_ARTICLE_REPLY] += "date(subdate(now(), INTERVAL "; + astrWhere[E_ARTICLE_REPLY] += QString::number(abs(nCutDays)); + astrWhere[E_ARTICLE_REPLY] += " DAY))"; + } + else + { + astrWhere[E_ARTICLE_BODY] += "date('" + dateFrom.toString("yyyy-MM-dd") + "') "; + astrWhere[E_ARTICLE_BODY] += " and date(article_date) <= date('" + dateTo.toString("yyyy-MM-dd") + "')"; + + astrWhere[E_ARTICLE_REPLY] += "date('" + dateFrom.toString("yyyy-MM-dd") + "') "; + } + astrWhere[E_ARTICLE_BODY] += " Order by article_date DESC"; + + QSqlQuery query; + QSet setUrl; + + for (int i = 0; i < E_ARTICLE_MAX ; i++) + { + if(query.exec(QString(strSelect + astrWhere[i]).toUtf8()) == false) + { + qDebug() << query.lastQuery(); + + return false; + } + + while(query.next()) + { + QStringList strList; + strList.clear(); + for(int j = 0; j < GetColumn().data().size(); j++) + //strList << " " + query.value(j).toString() + " "; + strList.append(query.value(j).toString()); + + if(strList[m_anData[E_DATA_platform_form]].trimmed() == "post" || strList[m_anData[E_DATA_platform_form]].trimmed() == "story" || strList[m_anData[E_DATA_platform_form]].trimmed() == "channel") + strList[m_anData[E_DATA_platform_form]] = "sns"; + + if(strList[m_anData[E_DATA_platform_form]].trimmed() == "group") + strList[m_anData[E_DATA_platform_form]] = "community"; + + + if(i == E_ARTICLE_BODY) + { + if (strList[m_anData[E_DATA_article_date]].trimmed().isEmpty()) continue; + if (strList[m_anData[E_DATA_article_id]].trimmed().isEmpty()) continue; + if (strList[m_anData[E_DATA_article_nickname]].trimmed().isEmpty()) continue; + if (strList[m_anData[E_DATA_platform_id]].trimmed().isEmpty()) continue; + if (strList[m_anData[E_DATA_platform_id]].trimmed().isEmpty()) continue; + if (strList[m_anData[E_DATA_article_date]].trimmed() == "0000-00-00 00:00:00") + strList[m_anData[E_DATA_article_date]] = "1990-01-01 00:00:00"; + + setUrl.insert(strList[m_anData[E_DATA_article_url]].trimmed()); + m_vecData[i].append(strList); + } + + else if(i == E_ARTICLE_REPLY) + { + if (strList[m_anData[E_DATA_article_id]].trimmed().isEmpty()) continue; + if (strList[m_anData[E_DATA_article_nickname]].trimmed().isEmpty()) continue; + if (strList[m_anData[E_DATA_article_date]].trimmed() == "0000-00-00 00:00:00") + strList[m_anData[E_DATA_article_date]] = "1990-01-01 00:00:00"; + + if(setUrl.contains(strList[m_anData[E_DATA_article_url]].trimmed())) + { + m_vecData[i].append(strList); + } + } + } + query.clear(); + } + + setUrl.clear(); + for(int i = 0; i < E_ARTICLE_MAX; i++) + { + m_data[i] = m_vecData[i]; + } + + //ViewRawResult(); + return true; +} + +void SBatchRun::Message(QString strMessage) +{ + QMessageBox msgBox; + msgBox.setText(strMessage); + msgBox.exec(); +} + +bool SBatchRun::execFilter() +{ + DataFilter(); + return true; +} + + +void SBatchRun::clearData() +{ + for(int i = 0; i < E_ARTICLE_MAX; i++) + { + for(int j = 0; j < m_vecData[i].length(); j++) + { + m_vecData[i][j].clear(); + } + for(int j = 0; j < m_data[i].length(); j++) + { + m_data[i][j].clear(); + } + m_vecData[i].clear(); + m_data[i].clear(); + } + for(int i = 0; i < E_ARTICLE_MAX; i++) + { + m_bDataFlag[i] = false; + } + +} + + +void SBatchRun::DataFilter() +{ + qDebug() << m_plwFilter->count(); + for(int i = 0; i < m_plwFilter->count(); i++) + { + QList filterInfo = m_plwFilter->item(i)->data(Qt::UserRole).toList(); +// qDebug() << filterInfo[0].toInt(); +// qDebug() << filterInfo[1].toString(); + switch(filterInfo.at(0).toInt()) + { + case E_FILTER_TYPE_DATE://Date + FilterDate(filterInfo.at(1).toString()); + break; + case E_FILTER_TYPE_SEARCH: + FilterSerach(filterInfo.at(1).toString()); + break; + case E_FILTER_TYPE_LENGTH: + FilterLength(filterInfo.at(1).toString()); + break; + case E_FILTER_TYPE_REPLACE: + FilterReplace(filterInfo.at(1).toString()); + break; + case E_FILTER_TYPE_COUNTER: + FilterCounter(filterInfo.at(1).toString()); + break; + } + } +} + + +void SBatchRun::FilterDate(QString _strJson) +{ + SJson json; + int nSelect = json.Get(_strJson,"Article").toInt() - 1; + if (nSelect < 0) return; + m_bDataFlag[nSelect] = true; + QVector copyData; + QDate dateStart = QDate::fromString(json.Get(_strJson,"Start"),"yyyy-MM-dd"); + QDate dateEnd = QDate::fromString(json.Get(_strJson,"End"),"yyyy-MM-dd"); + foreach(QStringList strList , m_data[nSelect]) + { + bool bFlag = false; + QString strTime = strList.at(m_nDateColumn).trimmed(); + if (strTime.size() >= 10) + { + QChar ch = strTime.at(4); + QString strFormat = QString("yyyy")+ch+QString("MM")+ch+QString("dd"); + QDate date = QDate::fromString(strTime.left(10),strFormat); + if (dateStart <= date && dateEnd >= date) + bFlag = true; + } + if (bFlag) + copyData.push_back(strList); + } + m_data[nSelect].clear(); + m_data[nSelect] = copyData; +} + +void SBatchRun::FilterLength(QString _strJson) +{ + SJson json; + int nSelect = json.Get(_strJson,"Article").toInt() - 1; + if (nSelect < 0) return; + m_bDataFlag[nSelect] = true; + + int nCatalog = json.GetNumber(_strJson,"Category"); + int nComp = json.GetNumber(_strJson,"Comp"); + int nFlag = json.GetNumber(_strJson,"InsDel"); + int nLength = json.Get(_strJson,"String").toInt(); + + QVector copyData; + foreach(QStringList strList , m_data[nSelect]) + { + bool bFlag = false; + int nCurrentLength = strList.at(nCatalog).trimmed().length(); + switch(nComp) + { + case E_LENGTH_COMP_GREATER: + if (nCurrentLength > nLength) + bFlag = true; + break; + case E_LENGTH_COMP_LESS: + if (nCurrentLength < nLength) + bFlag = true; + break; + case E_LENGTH_COMP_EQUAL: + if (nCurrentLength == nLength) + bFlag = true; + break; + } + if (nFlag == 1) bFlag = !bFlag; + if (bFlag) + copyData.push_back(strList); + } + m_data[nSelect].clear(); + m_data[nSelect] = copyData; +} + + +void SBatchRun::FilterCounter(QString _strJson) +{ + SJson json; + int nSelect = json.Get(_strJson,"Article").toInt() - 1; + if (nSelect < 0) return; + m_bDataFlag[nSelect] = true; + + int nCatalog = json.GetNumber(_strJson,"Category"); + int nComp = json.GetNumber(_strJson,"Comp"); + int nFlag = json.GetNumber(_strJson,"InsDel"); + int nCounter = json.Get(_strJson,"String").toInt(); + + QMap mapData, mapDataresult; + foreach(QStringList strList , m_data[nSelect]) + { + QString str = strList.at(nCatalog).trimmed(); + if(mapData.contains(str)) + mapData[str]++; + else + mapData.insert(str, 1); + } + + for(QMap ::iterator iterPos = mapData.begin(); iterPos != mapData.end(); iterPos++) + { + bool bFlag = false; + switch(nComp) + { + case E_LENGTH_COMP_GREATER: + if (iterPos.value() > nCounter) + bFlag = true; + break; + case E_LENGTH_COMP_LESS: + if (iterPos.value() < nCounter) + bFlag = true; + break; + case E_LENGTH_COMP_EQUAL: + if (iterPos.value() == nCounter) + bFlag = true; + break; + } + if (nFlag == 1) bFlag = !bFlag; + if (bFlag) + mapDataresult.insert(iterPos.key(), iterPos.value()); + } + + mapData.clear(); + + QVector copyData; + foreach(QStringList strList , m_data[nSelect]) + { + QString str = strList.at(nCatalog).trimmed(); + if(mapDataresult.contains(str)) + copyData.push_back(strList); + } + m_data[nSelect].clear(); + m_data[nSelect] = copyData; +} + +void SBatchRun::FilterReplace(QString _strJson) +{ + SJson json; + int nSelect = json.Get(_strJson,"Article").toInt() - 1; + if (nSelect < 0) return; + m_bDataFlag[nSelect] = true; + + int nCatalog = json.GetNumber(_strJson,"Category"); + QString strFind = json.Get(_strJson,"String_Find"); + QString strReplace = json.Get(_strJson,"String_Replace"); + + bool bFlag = false; + QStringList strListKeyword; + if (json.GetNumber(_strJson,"Find") == E_REPLACE_SPACE) + { + bFlag = true; + strListKeyword = strFind.split(" "); + } + + for (int i = 0 ; i < m_data[nSelect].size(); i++) + { + if (bFlag) + { + foreach(QString str,strListKeyword) + { + m_data[nSelect][i][nCatalog] = m_data[nSelect][i][nCatalog].replace(str,strReplace); + } + } + else + m_data[nSelect][i][nCatalog] = m_data[nSelect][i][nCatalog].replace(strFind,strReplace); + } +} + +void SBatchRun::FilterSerach(QString _strJson) +{ + SJson json; + int nSelect = json.Get(_strJson,"Article").toInt() - 1; + if (nSelect < 0) return; + m_bDataFlag[nSelect] = true; + { + SKeyword stKeyword; + stKeyword.m_nCatalog = json.GetNumber(_strJson,"Category"); + stKeyword.m_nKeyword = json.GetNumber(_strJson,"Keyword"); + stKeyword.m_strListKeyword = json.Get(_strJson,"String").split(" "); + if (json.GetNumber(_strJson,"Method") == 1) + { + for (int i = 0 ; i < stKeyword.m_strListKeyword.size(); i++ ) + stKeyword.m_strListKeyword[i] = " " + stKeyword.m_strListKeyword[i] + " "; + } + m_vecKeyword.push_back(stKeyword); + } + if (json.GetBool(_strJson,"Last")) // + { + QVector copyData; + + foreach(QStringList strList , m_data[nSelect]) + { + bool bFlag = false; + foreach(SKeyword stKeyword,m_vecKeyword) + { + QString strData = strList.at(stKeyword.m_nCatalog); + switch(stKeyword.m_nKeyword) + { + case E_SEARCH_KEYWORD_OR: + { + foreach(QString strKey , stKeyword.m_strListKeyword) + if (strData.contains(strKey)){bFlag = true;break;} + break; + } + case E_SEARCH_KEYWORD_AND: + { + int nKeyCount = 0; + foreach(QString strKey , stKeyword.m_strListKeyword) + if (strData.contains(strKey)) nKeyCount++; + if (nKeyCount == stKeyword.m_strListKeyword.size()) + bFlag = true; + break; + } + case E_SEARCH_KEYWORD_CELL_DELETE_OR: + { + bFlag = true; + foreach(QString strKey , stKeyword.m_strListKeyword) + if (strData.contains(strKey)){bFlag = false;break;} + break; + } + case E_SEARCH_KEYWORD_CELL_DELETE_AND: + { + bFlag = true; + int nCount = 0; + foreach(QString strKey , stKeyword.m_strListKeyword) + if (strData.contains(strKey)){nCount++;} + if (nCount == stKeyword.m_strListKeyword.size()) + bFlag = false; + break; + } + } + } + if (bFlag) copyData.push_back(strList); + } + m_data[nSelect].clear(); + m_data[nSelect] = copyData; + m_vecKeyword.clear(); + } +} diff --git a/Analyzer/sbatchrun.h b/Analyzer/sbatchrun.h new file mode 100644 index 0000000..5fd7d5b --- /dev/null +++ b/Analyzer/sbatchrun.h @@ -0,0 +1,117 @@ +#ifndef SBATCHRUN +#define SBATCHRUN + +#include +#include "scolumn.h" +#include "./../common.h" +#include +#include + +class QGroupBox; +class QListWidget; +class QLineEdit; +class QDateEdit; +class QVBoxLayout; + +class SBatchRun : public QDialog +{ + Q_OBJECT +public: + enum E_COLUMN + { + E_COLUMN_DATABASE=0, + E_COLUMN_NAME, + E_COLUMN_DATE, + E_COLUMN_COUNT, + }; + + enum E_ARTICLE + { + E_ARTICLE_BODY = 0, + E_ARTICLE_REPLY, + E_ARTICLE_MAX, + }; + + enum E_DATA + { + E_DATA_platform_title = 0, + E_DATA_article_form, + E_DATA_article_parent, + E_DATA_article_id, + E_DATA_article_nickname, + E_DATA_article_title, + E_DATA_article_data, + E_DATA_article_url, + E_DATA_article_hit, + E_DATA_article_date, + E_DATA_article_order, + E_DATA_platform_id, + E_DATA_platform_name, + E_DATA_platform_form, + E_DATA_reply_url, + E_DATA_keyword_id, + E_DATA_article_profileurl, + E_DATA_article_profile, + E_DATA_etc, + E_DATA_MAX, + }; + + +private slots: + void clickedFromTo(bool clicked); + void clickedCutDays(bool clicked); + void run(); + void Refresh(); + +private: + void setMainWidgets(); + QVBoxLayout* setLoadWidgets(); + QVBoxLayout* setDaysWidgets(); + QVBoxLayout* setFilterWidgets(); + QGroupBox* setCutDaysWidgets(); + QGroupBox* setFromToWidgets(); + void RefreshFilter(int nGroupID); + void ViewResult(); + void ViewRawResult(); + bool execFilter(); + bool loadData(); + void clearData(); + void Message(QString strMessage); + + // functions from FilterProcess + bool ReloadColumn(); + void DataFilter(); + void FilterDate(QString strJson); + void FilterSerach(QString strJson); + void FilterLength(QString strJson); + void FilterReplace(QString strJson); + void FilterCounter(QString _strJson); + + +public: + SBatchRun(); + ~SBatchRun(); + void showBatchRun(int nGroupID); + + +private: + QVector m_vecData[E_ARTICLE_MAX]; + QVector m_data[E_ARTICLE_MAX]; + QListWidget *m_plwData, *m_plwFilter; + QGroupBox *m_pgbCutDays, *m_pgbFromTo; + QLineEdit *m_pleCutDays, *m_pleFilter; + QDateEdit *m_pdeFrom, *m_pdeTo; + + QVector m_vecKeyword; + + //variables from FilterProcess + QStringList m_listDataBaseColumn; + int m_nUrlColumn, m_nDateColumn, m_nOrderColumn; + int m_anData[E_DATA_MAX]; + bool m_bDataFlag[E_DATA_MAX]; +}; + + + +#endif // SBATCHRUN + diff --git a/Analyzer/sdatadlg.cpp b/Analyzer/sdatadlg.cpp index b4dff08..e97b3ea 100644 --- a/Analyzer/sdatadlg.cpp +++ b/Analyzer/sdatadlg.cpp @@ -86,6 +86,10 @@ void SDataDlg::DataReload(QString _strTableName,int _nSelect) for (int i = 0; i < pTable->columnCount() ; i++) { QString str = query.value(i).toString().replace("\n"," "); + if((i == GetColumn().getColumnIndex("platform_form")) && (str.trimmed() == "post" || str.trimmed() == "channel" || str.trimmed() == "story")) + str = "sns"; + if((i == GetColumn().getColumnIndex("platform_form")) && (str.trimmed() == "group")) + str = "community"; pTable->setItem(nCount,i,new QTableWidgetItem(" "+str.replace("\t"," ")+" ")); } nCount++; diff --git a/Analyzer/sdatadlg.h b/Analyzer/sdatadlg.h index 3e4b5dd..eb35f2e 100644 --- a/Analyzer/sdatadlg.h +++ b/Analyzer/sdatadlg.h @@ -25,9 +25,10 @@ public: void SearchLength(int _nCatalogIndex,int _nCompIndex,int _nInsDelIndex,int _nLength); void SearchReplace(int _nCatalogIndex,int _nReplaceFindIndex,int _nReplaceIndex,QString _strFind,QString _strReplace); void SearchKeyword(QVector _vecKeyword); - void Import(QVector _vecImport); void Export(QString _strFilename); + QTabWidget* GetCurrentTab() { return m_ptab; } + //void SearchCounter(int _nCatalogIndex,int _nCompIndex,int _nInsDelIndex,QString _strCounter); private: QTabWidget *m_ptab; diff --git a/Analyzer/sfilterdlg.cpp b/Analyzer/sfilterdlg.cpp index ef8a390..5878816 100644 --- a/Analyzer/sfilterdlg.cpp +++ b/Analyzer/sfilterdlg.cpp @@ -41,12 +41,15 @@ void SFilterDlg::setWidgets() connect(pbCopy_Paste, SIGNAL(released()),this, SLOT(Group_CopyPaste())); QPushButton *pbRefresh = new QPushButton("Refresh"); connect(pbRefresh, SIGNAL(released()),this, SLOT(Group_Refresh())); + QPushButton *pbRun = new QPushButton("Run"); + connect(pbRun, SIGNAL(released()), this, SLOT(Group_Run())); hlayout->addWidget(pbInsert); hlayout->addWidget(pbDelete); hlayout->addWidget(pbModify); hlayout->addWidget(pbCopy_Paste); hlayout->addWidget(pbRefresh); + hlayout->addWidget(pbRun); vlayout->addLayout(hlayout); } hMainlayout->addLayout(vlayout,1); @@ -145,7 +148,7 @@ void SFilterDlg::RefreshFilter(int _nGroup) while (query.next()) { QString str = GetMainWindow()->m_pFilterObjectDlg->JsonToString(query.value(1).toInt(),query.value(2).toString()); - QListWidgetItem *pItem = new QListWidgetItem(str,m_plwFilter); + QListWidgetItem *pItem = new QListWidgetItem(str, m_plwFilter); pItem->setData(Qt::UserRole, QVariant(query.value(0))); } } @@ -227,3 +230,7 @@ int SFilterDlg::GetSelectFilterID() return nCurrentFilterID; } +void SFilterDlg::Group_Run() +{ + GetMainWindow()->m_pBatchRunDlg->showBatchRun(GetSelectGroupID()); +} diff --git a/Analyzer/sfilterdlg.h b/Analyzer/sfilterdlg.h index 8ace7ae..5da7ca4 100644 --- a/Analyzer/sfilterdlg.h +++ b/Analyzer/sfilterdlg.h @@ -28,7 +28,7 @@ private slots: void Group_Modify(); void Group_CopyPaste(); void Group_Refresh(); - + void Group_Run(); void GroupItemChanged(QListWidgetItem *, QListWidgetItem *); void ItemChanged(QListWidgetItem*,QListWidgetItem*); diff --git a/Analyzer/sfilterobject.cpp b/Analyzer/sfilterobject.cpp index 6162734..fb7b2f3 100644 --- a/Analyzer/sfilterobject.cpp +++ b/Analyzer/sfilterobject.cpp @@ -36,7 +36,7 @@ QWidget *SFilterObject::setDateWidgets() m_pdeEnd = new QDateEdit(QDate::currentDate()); m_pdeStart->setDateRange(QDate(2003, 5, 20),QDate::currentDate()); - m_pdeEnd->setDateRange(QDate(2003, 5, 20),QDate::currentDate()); + m_pdeEnd->setDateRange(QDate(2003, 5, 20),QDate::currentDate().addYears(1)); QCalendarWidget *pcw = new QCalendarWidget(); m_pdeStart->setCalendarWidget(pcw);