1739 lines
70 KiB
C++
1739 lines
70 KiB
C++
#include "widget.h"
|
|
#include <QVBoxLayout>
|
|
#include <QLabel>
|
|
#include <QSqlDatabase>
|
|
#include <QSqlError>
|
|
#include <QSqlQuery>
|
|
#include <QDebug>
|
|
#include <QPushButton>
|
|
#include <QThread>
|
|
#include <QTime>
|
|
#include <QMessageBox>
|
|
#include <QFile>
|
|
|
|
#include "../json/sjson.h"
|
|
#include "../common.h"
|
|
|
|
#define D_NONE -1
|
|
|
|
#define D_DB_WEB_HOST "db.big-bird.co.kr"
|
|
#define D_DB_WEB_USER "concepters"
|
|
#define D_DB_WEB_PASS "con97996655"
|
|
#define D_DB_WEB_NAME "dbconcepters"
|
|
|
|
//#define D_DB_WEB_HOST "192.168.0.82"
|
|
//#define D_DB_WEB_USER "root"
|
|
//#define D_DB_WEB_PASS "1234"
|
|
//#define D_DB_WEB_NAME "dbconcepters"
|
|
|
|
Widget::Widget(QWidget *parent) : C_MAP_REAL_BODY (0x01) , C_MAP_REAL_REPLY (0x02) , QWidget(parent)
|
|
{
|
|
QVBoxLayout *vMainLayout = new QVBoxLayout;
|
|
{
|
|
{
|
|
QHBoxLayout *hLayout = new QHBoxLayout;
|
|
QStringList strList;
|
|
strList << "Data" << "Filter" << "Company" << "Catalog";
|
|
m_plw = new QListWidget[E_LIST_MAX];
|
|
int i = 0;
|
|
foreach(QString str , strList)
|
|
{
|
|
QVBoxLayout *vLayout = new QVBoxLayout;
|
|
vLayout->addWidget(new QLabel(str));
|
|
vLayout->addWidget(&m_plw[i++]);
|
|
hLayout->addLayout(vLayout);
|
|
}
|
|
connect(&m_plw[E_LIST_COMPANY],SIGNAL(currentItemChanged(QListWidgetItem*,QListWidgetItem*)),this,SLOT(CompanyItemChanged(QListWidgetItem*,QListWidgetItem*)));
|
|
connect(&m_plw[E_LIST_DATA],SIGNAL(itemClicked(QListWidgetItem*)),this,SLOT(DataItemClicked(QListWidgetItem*)));
|
|
vMainLayout->addLayout(hLayout);
|
|
}
|
|
{
|
|
QHBoxLayout *hLayout = new QHBoxLayout;
|
|
{
|
|
QVBoxLayout *vLayout = new QVBoxLayout;
|
|
vLayout->addWidget(new QLabel("Filter Process"));
|
|
m_plwFilterProcess = new QListWidget;
|
|
vLayout->addWidget(m_plwFilterProcess);
|
|
{
|
|
QHBoxLayout *hLayoutEdit = new QHBoxLayout;
|
|
hLayoutEdit->addWidget(new QLabel("Cycle : "));
|
|
m_pleCycle = new QLineEdit;
|
|
hLayoutEdit->addWidget(m_pleCycle);
|
|
m_pleCycle->setText("172800");
|
|
m_pleCycle->setEnabled(false);
|
|
{
|
|
QPushButton *ppbCount = new QPushButton("Influence Count");
|
|
connect(ppbCount, SIGNAL(released()),this, SLOT(on_influence_count()));
|
|
hLayoutEdit->addWidget(ppbCount);
|
|
}
|
|
{
|
|
QPushButton *ppbCount = new QPushButton("Consumer Supervison Count");
|
|
connect(ppbCount, SIGNAL(released()),this, SLOT(on_consumer_supervison_count()));
|
|
hLayoutEdit->addWidget(ppbCount);
|
|
}
|
|
{
|
|
QPushButton *ppbCount = new QPushButton("Spammers Count");
|
|
connect(ppbCount, SIGNAL(released()),this, SLOT(on_spammers_count()));
|
|
hLayoutEdit->addWidget(ppbCount);
|
|
}
|
|
{
|
|
QPushButton *ppbCount = new QPushButton("Power Cafe Count");
|
|
connect(ppbCount, SIGNAL(released()),this, SLOT(on_power_cafe_count()));
|
|
hLayoutEdit->addWidget(ppbCount);
|
|
}
|
|
|
|
QPushButton *ppbInsert = new QPushButton("Insert");
|
|
connect(ppbInsert, SIGNAL(released()),this, SLOT(on_insert()));
|
|
hLayoutEdit->addWidget(ppbInsert);
|
|
QPushButton *ppbSend = new QPushButton("Send");
|
|
connect(ppbSend, SIGNAL(released()),this, SLOT(on_send()));
|
|
hLayoutEdit->addWidget(ppbSend);
|
|
vLayout->addLayout(hLayoutEdit);
|
|
}
|
|
hLayout->addLayout(vLayout);
|
|
}
|
|
{
|
|
QVBoxLayout *vLayout = new QVBoxLayout;
|
|
vLayout->addWidget(new QLabel("Log"));
|
|
m_plwLog = new QListWidget;
|
|
vLayout->addWidget(m_plwLog);
|
|
hLayout->addLayout(vLayout);
|
|
}
|
|
vMainLayout->addLayout(hLayout);
|
|
}
|
|
QPushButton *ppbRefresh = new QPushButton("Refresh");
|
|
connect(ppbRefresh, SIGNAL(released()),this, SLOT(on_refresh()));
|
|
vMainLayout->addWidget(ppbRefresh);
|
|
}
|
|
/*
|
|
QPushButton *ppbSend = new QPushButton("Send");
|
|
vMainLayout->addWidget(ppbSend);
|
|
connect(ppbSend, SIGNAL(released()),this, SLOT(on_send()));
|
|
*/
|
|
//connect(&m_timer, SIGNAL(timeout()), this, SLOT(Update()));
|
|
//m_pThread = new SGetThread;
|
|
setLayout(vMainLayout);
|
|
//m_pPutThread = new SPutThread[QThread::idealThreadCount()];
|
|
m_nMode = 0;
|
|
if (ReloadColumn() == false)
|
|
{
|
|
QMessageBox::critical(this,"Error","column.txt do not find",QMessageBox::Ok);
|
|
exit(0);
|
|
return;
|
|
}
|
|
|
|
db = QSqlDatabase::addDatabase("QMYSQL");
|
|
//m_timer.start(100);
|
|
Refresh();
|
|
FilterProcssRefresh();
|
|
}
|
|
|
|
Widget::~Widget()
|
|
{
|
|
exit(0);
|
|
}
|
|
|
|
void Widget::InsertLog(QString str)
|
|
{
|
|
QTime time = QTime::currentTime();
|
|
QString strOut = time.toString("[hh:mm:ss] ") + str;
|
|
m_plwLog->addItem(strOut);
|
|
|
|
if (m_plwLog->count() > 1024)
|
|
{
|
|
m_plwLog->removeItemWidget(m_plwLog->item(0));
|
|
QListWidgetItem* item = m_plwLog->takeItem(0);
|
|
delete item;
|
|
}
|
|
m_plwLog->setCurrentRow( m_plwLog->count() - 1 );
|
|
m_plwLog->repaint();
|
|
}
|
|
|
|
void Widget::Refresh()
|
|
{
|
|
db.setHostName("bigbird.iptime.org");
|
|
db.setUserName("admin");
|
|
db.setPassword("admin123");
|
|
db.setDatabaseName("concepters");
|
|
if (db.open() == false)
|
|
{
|
|
InsertLog(db.lastError().text());
|
|
return;
|
|
}
|
|
|
|
for (int i = 0; i < E_LIST_MAX ; i++)
|
|
m_plw[i].clear();
|
|
|
|
{
|
|
QSqlQuery query("select id,name from filtergroup");
|
|
while (query.next())
|
|
{
|
|
QListWidgetItem *pItem = new QListWidgetItem(query.value(1).toString(),&m_plw[E_LIST_FILTER]);
|
|
pItem->setData(Qt::UserRole, QVariant(query.value(0)));
|
|
}
|
|
}
|
|
|
|
{
|
|
QSqlQuery query("select id,name FROM datagroup");
|
|
while(query.next())
|
|
{
|
|
QListWidgetItem *pItem = new QListWidgetItem(query.value(1).toString(),&m_plw[E_LIST_DATA]);
|
|
pItem->setData(Qt::UserRole, QVariant(query.value(0)));
|
|
}
|
|
}
|
|
db.close();
|
|
|
|
db.setHostName(D_DB_WEB_HOST);
|
|
db.setUserName(D_DB_WEB_USER);
|
|
db.setPassword(D_DB_WEB_PASS);
|
|
db.setDatabaseName(D_DB_WEB_NAME);
|
|
|
|
if (db.open() == false)
|
|
{
|
|
InsertLog(db.lastError().text());
|
|
return;
|
|
}
|
|
|
|
{
|
|
QSqlQuery query("select num,name FROM company");
|
|
while(query.next())
|
|
{
|
|
QListWidgetItem *pItem = new QListWidgetItem(query.value(1).toString(),&m_plw[E_LIST_COMPANY]);
|
|
pItem->setData(Qt::UserRole, QVariant(query.value(0)));
|
|
}
|
|
}
|
|
db.close();
|
|
}
|
|
|
|
void Widget::CompanyItemChanged(QListWidgetItem* _current,QListWidgetItem*)
|
|
{
|
|
if (_current == 0) return;
|
|
db.setHostName(D_DB_WEB_HOST);
|
|
db.setUserName(D_DB_WEB_USER);
|
|
db.setPassword(D_DB_WEB_PASS);
|
|
db.setDatabaseName(D_DB_WEB_NAME);
|
|
if (db.open() == false)
|
|
{
|
|
InsertLog(db.lastError().text());
|
|
return;
|
|
}
|
|
m_plw[E_LIST_CATALOG].clear();
|
|
QSqlQuery query("select num,name FROM category where company_num = '" +_current->data(Qt::UserRole).toString()+ "'");
|
|
while(query.next())
|
|
{
|
|
QListWidgetItem *pItem = new QListWidgetItem(query.value(1).toString(),&m_plw[E_LIST_CATALOG]);
|
|
pItem->setData(Qt::UserRole, QVariant(query.value(0)));
|
|
}
|
|
db.close();
|
|
}
|
|
|
|
void Widget::on_send()
|
|
{
|
|
foreach (QListWidgetItem *item,m_plw[E_LIST_COMPANY].selectedItems())
|
|
{
|
|
InsertLog("Data Send Run Start : " + item->text());
|
|
DataPut(item->data(Qt::UserRole).toString());
|
|
InsertLog("Data Send Run End ");
|
|
}
|
|
}
|
|
|
|
void Widget::on_insert()
|
|
{
|
|
/*
|
|
int aId[E_LIST_MAX];
|
|
QString aStr[E_LIST_MAX];
|
|
for (int i = 0; i < E_LIST_MAX;i++)
|
|
{
|
|
aId[i] = D_NONE;
|
|
foreach (QListWidgetItem *item,m_plw[i].selectedItems())
|
|
{
|
|
aId[i] = item->data(Qt::UserRole).toInt();
|
|
aStr[i] = item->text();
|
|
}
|
|
if (aId[i] == D_NONE) return;
|
|
}
|
|
QStringList list;
|
|
list.append("0");//0
|
|
list.append(QString::number(aId[E_LIST_DATA]));//1
|
|
list.append(aStr[E_LIST_DATA]);//2
|
|
list.append(QString::number(aId[E_LIST_FILTER]));//3
|
|
list.append(aStr[E_LIST_FILTER]);//4
|
|
list.append(QString::number(aId[E_LIST_COMPANY]));//5
|
|
list.append(aStr[E_LIST_COMPANY]);// company_name 6
|
|
list.append(aStr[E_LIST_CATALOG]);// category_name 7
|
|
list.append(m_pleCycle->text());
|
|
*/
|
|
ReloadData();
|
|
|
|
foreach (QListWidgetItem *item,m_plw[E_LIST_FILTER].selectedItems())
|
|
{
|
|
InsertLog("Data Filter Run Start : " + item->text());
|
|
DataFilter(item->data(Qt::UserRole).toString());
|
|
InsertLog("Data Filter Run End ");
|
|
}
|
|
foreach (QListWidgetItem *item,m_plw[E_LIST_CATALOG].selectedItems())
|
|
{
|
|
InsertLog("Data Make Run Start : " + item->text());
|
|
MakeBuzzy(item->data(Qt::UserRole).toInt());
|
|
DataMake(item->data(Qt::UserRole).toInt());
|
|
InsertLog("Data Make Run End ");
|
|
}
|
|
FilterProcssRefresh();
|
|
}
|
|
|
|
void Widget::on_delete()
|
|
{
|
|
db.setHostName("bigbird.iptime.org");
|
|
db.setUserName("admin");
|
|
db.setPassword("admin123");
|
|
db.setDatabaseName("concepters");
|
|
if (db.open() == false)
|
|
{
|
|
InsertLog(db.lastError().text());
|
|
return;
|
|
}
|
|
foreach (QListWidgetItem *item,m_plwFilterProcess->selectedItems())
|
|
{
|
|
QSqlQuery query;
|
|
QString sql("delete from filterprocess where id = " + item->data(Qt::UserRole).toString());
|
|
if(query.exec(sql) == false)
|
|
{
|
|
InsertLog(query.lastError().text());
|
|
}
|
|
}
|
|
db.close();
|
|
FilterProcssRefresh();
|
|
}
|
|
|
|
void Widget::FilterProcssRefresh()
|
|
{
|
|
db.setHostName("bigbird.iptime.org");
|
|
db.setUserName("admin");
|
|
db.setPassword("admin123");
|
|
db.setDatabaseName("concepters");
|
|
if (db.open() == false)
|
|
{
|
|
InsertLog(db.lastError().text());
|
|
return;
|
|
}
|
|
|
|
QString sql("select id,datagroup_name,filtergroup_name,company_name,category_name,cycletime,lastruntime from filterprocess");
|
|
QSqlQuery query;
|
|
|
|
if(query.exec(sql) == false)
|
|
{
|
|
InsertLog(query.lastError().text());
|
|
}
|
|
m_plwFilterProcess->clear();
|
|
while(query.next())
|
|
{
|
|
QString str;
|
|
str += "(Data : " + query.value(1).toString();
|
|
str += ",Filter : " + query.value(2).toString();
|
|
str += ") -> (Company : " + query.value(3).toString();
|
|
str += ",Category : " + query.value(4).toString();
|
|
str += ") (Cycle : " + query.value(5).toString();
|
|
str += " sec, Last Run Time : " + query.value(6).toString() +")";
|
|
QListWidgetItem *pItem = new QListWidgetItem(str,m_plwFilterProcess);
|
|
pItem->setData(Qt::UserRole, QVariant(query.value(0)));
|
|
}
|
|
db.close();
|
|
//datagroup,filtergroup company category cycletime , lastruntime
|
|
}
|
|
|
|
QString Widget::SqlString(QString _str)
|
|
{
|
|
_str.replace("\\","\\\\");
|
|
_str.replace("'","\\'");
|
|
_str.replace("\"","\\\"");
|
|
_str.replace(",","\\,");
|
|
return _str;
|
|
}
|
|
|
|
void Widget::Update()
|
|
{
|
|
}
|
|
|
|
void Widget::FilterDate(QString _strJson)
|
|
{
|
|
SJson json;
|
|
int nSelect = json.Get(_strJson,"Article").toInt() - 1;
|
|
if (nSelect < 0) return;
|
|
m_bDataFlag[nSelect] = true;
|
|
QVector <QStringList> 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 Widget::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 <QStringList> 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 (nLength == nCurrentLength)
|
|
bFlag = true;
|
|
break;
|
|
}
|
|
if (nFlag == 1) bFlag = !bFlag;
|
|
if (bFlag)
|
|
copyData.push_back(strList);
|
|
}
|
|
m_data[nSelect].clear();
|
|
m_data[nSelect] = copyData;
|
|
}
|
|
|
|
void Widget::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 Widget::FilterSerach(QString _strJson)
|
|
{
|
|
SJson json;
|
|
int nSelect = json.Get(_strJson,"Article").toInt() - 1;
|
|
if (nSelect < 0) return;
|
|
m_bDataFlag[nSelect] = true;
|
|
int nCategory = json.GetNumber(_strJson,"Category");
|
|
int nMethod = json.GetNumber(_strJson,"Method");
|
|
int nKeyword = json.GetNumber(_strJson,"Keyword");
|
|
QStringList strListKeyword = json.Get(_strJson,"String").split(" ");
|
|
|
|
if (nMethod == 1)
|
|
{
|
|
for (int i = 0 ; i < strListKeyword.size(); i++ )
|
|
strListKeyword[i] = " " + strListKeyword[i] + " ";
|
|
}
|
|
|
|
QVector <QStringList> copyData;
|
|
foreach(QStringList strList , m_data[nSelect])
|
|
{
|
|
bool bFlag = false;
|
|
QString strData = strList.at(nCategory);
|
|
switch(nKeyword)
|
|
{
|
|
case 0:
|
|
{
|
|
foreach(QString strKey , strListKeyword)
|
|
if (strData.contains(strKey)){bFlag = true;break;}
|
|
break;
|
|
}
|
|
case 1:
|
|
{
|
|
int nKeyCount = 0;
|
|
foreach(QString strKey , strListKeyword)
|
|
if (strData.contains(strKey)) nKeyCount++;
|
|
if (nKeyCount == strListKeyword.size())
|
|
bFlag = true;
|
|
break;
|
|
}
|
|
case 2:
|
|
{
|
|
bFlag = true;
|
|
foreach(QString strKey , strListKeyword)
|
|
if (strData.contains(strKey)){bFlag = false;break;}
|
|
break;
|
|
}
|
|
case 3:
|
|
{
|
|
foreach(QString strKey , strListKeyword)
|
|
strList[nCategory].replace(strKey,"");
|
|
bFlag = true;
|
|
break;
|
|
}
|
|
}
|
|
if (bFlag) copyData.push_back(strList);
|
|
}
|
|
m_data[nSelect].clear();
|
|
m_data[nSelect] = copyData;
|
|
}
|
|
|
|
void Widget::ReloadData()
|
|
{
|
|
for (int i = 0; i < E_ARTICLE_MAX ; i++)
|
|
{
|
|
m_data[i].clear();
|
|
m_bDataFlag[i] = false;
|
|
}
|
|
|
|
foreach(SBody stBody, m_mapData.values())
|
|
{
|
|
m_data[E_ARTICLE_BODY].push_back(stBody.m_strlist);
|
|
foreach(SReply stReply , stBody.m_vecReply.values())
|
|
{
|
|
m_data[E_ARTICLE_REPLY].push_back(stReply.m_strlist);
|
|
}
|
|
}
|
|
}
|
|
|
|
void Widget::DataFilter(QString _strFilterGroupID)
|
|
{
|
|
db.setHostName("bigbird.iptime.org");
|
|
db.setUserName("admin");
|
|
db.setPassword("admin123");
|
|
db.setDatabaseName("concepters");
|
|
if (db.open() == false)
|
|
{
|
|
InsertLog(db.lastError().text());
|
|
return;
|
|
}
|
|
QString sql = "select type,data from filter where filtergroup_id = " + _strFilterGroupID;
|
|
QSqlQuery query;
|
|
if(query.exec(sql) == false) { InsertLog(query.lastError().text());return;}
|
|
while (query.next())
|
|
{
|
|
switch(query.value(0).toInt())
|
|
{
|
|
case E_FILTER_TYPE_DATE://Date
|
|
FilterDate(query.value(1).toString());
|
|
break;
|
|
case E_FILTER_TYPE_SEARCH:
|
|
FilterSerach(query.value(1).toString());
|
|
break;
|
|
case E_FILTER_TYPE_LENGTH:
|
|
FilterLength(query.value(1).toString());
|
|
break;
|
|
case E_FILTER_TYPE_REPLACE:
|
|
FilterReplace(query.value(1).toString());
|
|
break;
|
|
}
|
|
}
|
|
db.close();
|
|
}
|
|
|
|
void Widget::on_refresh()
|
|
{
|
|
Refresh();
|
|
FilterProcssRefresh();
|
|
}
|
|
|
|
/*
|
|
void Widget::Update()
|
|
{
|
|
switch(m_nMode)
|
|
{
|
|
case 1:
|
|
m_data.clear();
|
|
db.setHostName("bigbird.iptime.org");
|
|
db.setUserName("admin");
|
|
db.setPassword("admin123");
|
|
db.setDatabaseName("concepters");
|
|
if (db.open() == false)
|
|
{
|
|
InsertLog(db.lastError().text());
|
|
return;
|
|
}
|
|
|
|
foreach (QListWidgetItem *item,m_plw[E_LIST_DATA].selectedItems())
|
|
{
|
|
m_pThread->SetData(QString("data_"+item->data(Qt::UserRole).toString()),&m_data);
|
|
}
|
|
m_pThread->start();
|
|
m_nMode = 2;
|
|
InsertLog("Data Read Start");
|
|
break;
|
|
case 2:
|
|
if (m_pThread->isRunning() == false)
|
|
{
|
|
db.close();
|
|
InsertLog("Data Read End");
|
|
InsertLog("Data Write Web Start");
|
|
db.setHostName(D_DB_WEB_HOST);
|
|
db.setUserName(D_DB_WEB_USER);
|
|
db.setPassword(D_DB_WEB_PASS);
|
|
db.setDatabaseName(D_DB_WEB_NAME);
|
|
if (db.open() == false)
|
|
{
|
|
InsertLog(db.lastError().text());
|
|
return;
|
|
}
|
|
db.exec("delete from data");
|
|
qDebug() << QString::number(m_data.size());
|
|
m_pPutThread[0].SetData("data",&m_data,0,m_data.size());
|
|
m_pPutThread[0].start();
|
|
m_nMode = 3;
|
|
}
|
|
break;
|
|
case 3:
|
|
if (m_pPutThread[0].isRunning() == false)
|
|
{
|
|
m_nMode = 0;
|
|
InsertLog("Data Write Web End");
|
|
}
|
|
break;
|
|
}
|
|
}
|
|
*/
|
|
|
|
bool Widget::ReloadColumn()
|
|
{
|
|
QVector <QStringList> 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;
|
|
}
|
|
|
|
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;
|
|
}
|
|
|
|
void Widget::DataItemClicked(QListWidgetItem* item)
|
|
{
|
|
db.setHostName("bigbird.iptime.org");
|
|
db.setUserName("admin");
|
|
db.setPassword("admin123");
|
|
db.setDatabaseName("concepters");
|
|
if (db.open() == false)
|
|
{
|
|
InsertLog(db.lastError().text());
|
|
return;
|
|
}
|
|
|
|
QSqlQuery query;
|
|
QString strSelect;
|
|
strSelect = "select ";
|
|
foreach (QString strColumn,m_listDataBaseColumn)
|
|
strSelect += "CONVERT(" + strColumn + " USING utf8),";
|
|
strSelect = strSelect.left(strSelect.size() - 1);
|
|
strSelect += " from ";
|
|
strSelect += "data_" + item->data(Qt::UserRole).toString();
|
|
|
|
InsertLog("Start Loading data_" + item->data(Qt::UserRole).toString());
|
|
m_strlistOrder.clear();
|
|
m_mapData.clear();
|
|
m_vecMap.clear();
|
|
QString astrWhere[E_ARTICLE_MAX] = {" where article_form = 'body' Order by article_date DESC"," where article_form = 'reply'"};
|
|
for (int i = 0; i < E_ARTICLE_MAX ; i++)
|
|
{
|
|
if(query.exec(QString(strSelect + astrWhere[i]).toUtf8()) == false) {InsertLog(query.lastError().text());return;}
|
|
int nCount = 0;
|
|
while(query.next())
|
|
{
|
|
QStringList strList;
|
|
for(int j = 0; j < m_listDataBaseColumn.size(); j++)
|
|
strList << " " + query.value(j).toString() + " ";
|
|
QString strURL = strList[m_nUrlColumn].trimmed();
|
|
switch(i)
|
|
{
|
|
case E_ARTICLE_BODY:
|
|
{
|
|
if (m_mapData.contains(strURL) == false)
|
|
{
|
|
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;
|
|
SBody stBody;
|
|
stBody.m_nNum = nCount++;
|
|
stBody.m_dtLast = QDateTime::fromString(strList[m_anData[E_DATA_article_date]].trimmed(),"yyyy-MM-dd HH:mm:ss");
|
|
stBody.m_date = QDateTime::fromString(strList[m_anData[E_DATA_article_date]].trimmed(),"yyyy-MM-dd HH:mm:ss").date();
|
|
stBody.m_bSelect = false;
|
|
stBody.m_bReplySelect = false;
|
|
stBody.m_strlist = strList;
|
|
m_mapData.insert(strURL,stBody);
|
|
m_strlistOrder.push_back(strURL);
|
|
}
|
|
}
|
|
break;
|
|
case E_ARTICLE_REPLY:
|
|
{
|
|
if (m_mapData.contains(strURL))
|
|
{
|
|
SReply stReply;
|
|
stReply.m_bSelect = false;
|
|
stReply.m_nOrder = strList[m_nOrderColumn].toInt();
|
|
stReply.m_strlist = strList;
|
|
stReply.m_date = QDateTime::fromString(strList[m_anData[E_DATA_article_date]].trimmed(),"yyyy-MM-dd HH:mm:ss").date();
|
|
QDateTime dtComp = QDateTime::fromString(strList[m_anData[E_DATA_article_date]].trimmed(),"yyyy-MM-dd HH:mm:ss");
|
|
if (m_mapData[strURL].m_dtLast < dtComp)
|
|
m_mapData[strURL].m_dtLast = dtComp;
|
|
m_mapData[strURL].m_vecReply.insert(stReply.m_nOrder,stReply);
|
|
}
|
|
}
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
MakeBuzzyAll();
|
|
InsertLog("End Loading");
|
|
db.close();
|
|
}
|
|
|
|
void Widget::MakeBuzzyAll()
|
|
{
|
|
m_vecBuzzy.clear();
|
|
SBuzzy stBuzzy;
|
|
stBuzzy.m_nCategory = 0;
|
|
foreach(SBody stBody, m_mapData.values())
|
|
{
|
|
if (stBuzzy.m_astArticle[E_ARTICLE_BODY].m_mapCount.contains(stBody.m_date))
|
|
stBuzzy.m_astArticle[E_ARTICLE_BODY].m_mapCount[stBody.m_date]++;
|
|
else
|
|
stBuzzy.m_astArticle[E_ARTICLE_BODY].m_mapCount.insert(stBody.m_date,1);
|
|
foreach(SReply stReply , stBody.m_vecReply.values())
|
|
{
|
|
if (stBuzzy.m_astArticle[E_ARTICLE_REPLY].m_mapCount.contains(stReply.m_date))
|
|
stBuzzy.m_astArticle[E_ARTICLE_REPLY].m_mapCount[stReply.m_date]++;
|
|
else
|
|
stBuzzy.m_astArticle[E_ARTICLE_REPLY].m_mapCount.insert(stReply.m_date,1);
|
|
}
|
|
}
|
|
m_vecBuzzy.push_back(stBuzzy);
|
|
}
|
|
|
|
QVariant Widget::GetWebData(QString _strTable,QString _strColumn,int _nNum)
|
|
{
|
|
QVariant value;
|
|
db.setHostName(D_DB_WEB_HOST);
|
|
db.setUserName(D_DB_WEB_USER);
|
|
db.setPassword(D_DB_WEB_PASS);
|
|
db.setDatabaseName(D_DB_WEB_NAME);
|
|
if (db.open() == false)
|
|
{
|
|
InsertLog(db.lastError().text());
|
|
return value;
|
|
}
|
|
QSqlQuery query("select " + _strColumn + " FROM " + _strTable + " where num = " + QString::number(_nNum));
|
|
qDebug() << "select " + _strColumn + " FROM " + _strTable + " where num = " + QString::number(_nNum);
|
|
if (query.next() == true)
|
|
value = query.value(0);
|
|
db.close();
|
|
return value;
|
|
}
|
|
|
|
void Widget::MakeBuzzy(int _nCategory)
|
|
{
|
|
SBuzzy stBuzzy;
|
|
QVariant value = GetWebData("category","statsColumnNum",_nCategory);
|
|
if (value.isNull())
|
|
{
|
|
InsertLog("Make Buzzy Error : statsColumnNum is null ...");
|
|
return;
|
|
}
|
|
stBuzzy.m_nCategory = value.toInt();
|
|
if (stBuzzy.m_nCategory == -1) return;
|
|
QMap <QString,bool> map;
|
|
if (m_bDataFlag[E_ARTICLE_BODY] == true)
|
|
{
|
|
foreach(QStringList strList,m_data[E_ARTICLE_BODY])
|
|
{
|
|
QString strURL = strList[m_nUrlColumn].trimmed();
|
|
if(map.contains(strURL) == false)
|
|
{
|
|
QDate date = QDateTime::fromString(strList[m_anData[E_DATA_article_date]].trimmed(),"yyyy-MM-dd HH:mm:ss").date();
|
|
if (stBuzzy.m_astArticle[E_ARTICLE_BODY].m_mapCount.contains(date))
|
|
stBuzzy.m_astArticle[E_ARTICLE_BODY].m_mapCount[date]++;
|
|
else
|
|
stBuzzy.m_astArticle[E_ARTICLE_BODY].m_mapCount.insert(date,1);
|
|
map.insert(strURL,true);
|
|
}
|
|
}
|
|
}
|
|
map.clear();
|
|
if (m_bDataFlag[E_ARTICLE_REPLY] == true)
|
|
{
|
|
foreach(QStringList strList,m_data[E_ARTICLE_REPLY])
|
|
{
|
|
QString strURL = strList[m_nUrlColumn].trimmed();
|
|
strURL += "\\";
|
|
strURL += strList[m_nOrderColumn].trimmed();
|
|
if(map.contains(strURL) == false)
|
|
{
|
|
QDate date = QDateTime::fromString(strList[m_anData[E_DATA_article_date]].trimmed(),"yyyy-MM-dd HH:mm:ss").date();
|
|
if (stBuzzy.m_astArticle[E_ARTICLE_REPLY].m_mapCount.contains(date))
|
|
stBuzzy.m_astArticle[E_ARTICLE_REPLY].m_mapCount[date]++;
|
|
else
|
|
stBuzzy.m_astArticle[E_ARTICLE_REPLY].m_mapCount.insert(date,1);
|
|
map.insert(strURL,true);
|
|
}
|
|
}
|
|
}
|
|
m_vecBuzzy.push_back(stBuzzy);
|
|
}
|
|
|
|
void Widget::DataMake(int _nCategory)
|
|
{
|
|
QMap <QString,int> mapData;
|
|
|
|
if (m_bDataFlag[E_ARTICLE_BODY] == true)
|
|
{
|
|
foreach(QStringList strList,m_data[E_ARTICLE_BODY])
|
|
{
|
|
QString strURL = strList[m_nUrlColumn].trimmed();
|
|
if (m_mapData.contains(strURL))
|
|
{
|
|
m_mapData[strURL].m_bSelect = true;
|
|
m_mapData[strURL].m_vecCategory.push_back(_nCategory);
|
|
if (mapData.contains(strURL))
|
|
mapData[strURL] |= C_MAP_REAL_BODY;
|
|
else
|
|
mapData.insert(strURL,C_MAP_REAL_BODY);
|
|
}
|
|
}
|
|
}
|
|
|
|
if (m_bDataFlag[E_ARTICLE_REPLY] == true)
|
|
{
|
|
foreach(QStringList strList,m_data[E_ARTICLE_REPLY])
|
|
{
|
|
QString strURL = strList[m_nUrlColumn].trimmed();
|
|
if (m_mapData.contains(strURL))
|
|
{
|
|
m_mapData[strURL].m_bReplySelect = true;
|
|
int nSelect = strList[m_nOrderColumn].trimmed().toInt();
|
|
if (m_mapData[strURL].m_vecReply.contains(nSelect))
|
|
{
|
|
m_mapData[strURL].m_vecReply[nSelect].m_bSelect = true;
|
|
m_mapData[strURL].m_vecReply[nSelect].m_vecCategory.push_back(_nCategory);
|
|
if (mapData.contains(strURL))
|
|
mapData[strURL] |= C_MAP_REAL_REPLY;
|
|
else
|
|
mapData.insert(strURL,C_MAP_REAL_REPLY);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
foreach(QString strUrl , m_strlistOrder )
|
|
{
|
|
if (mapData.contains(strUrl))
|
|
{
|
|
if (mapData.value(strUrl) != 0)
|
|
{
|
|
SMap stMap;
|
|
stMap.m_nBody = m_mapData[strUrl].m_nNum;
|
|
stMap.m_nCategory = _nCategory;
|
|
stMap.m_nRealIn = mapData.value(strUrl);
|
|
stMap.m_strURL = strUrl;
|
|
m_vecMap.push_back(stMap);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
QString Widget::GetVectorToString(QVector <int> _vecCategory,QString _strDelimiter)
|
|
{
|
|
QString str;
|
|
if (_vecCategory.isEmpty()) return QString(" ");
|
|
foreach (int n , _vecCategory )
|
|
str += QString::number(n) + _strDelimiter;
|
|
return str.left(str.length() - _strDelimiter.length());
|
|
}
|
|
|
|
void Widget::DataPut(QString _strCompanyNum)
|
|
{
|
|
db.setHostName(D_DB_WEB_HOST);
|
|
db.setUserName(D_DB_WEB_USER);
|
|
db.setPassword(D_DB_WEB_PASS);
|
|
db.setDatabaseName(D_DB_WEB_NAME);
|
|
if (db.open() == false)
|
|
{
|
|
InsertLog(db.lastError().text());
|
|
return;
|
|
}
|
|
|
|
QSqlQuery query;
|
|
QString strQuery;
|
|
|
|
strQuery = "delete from body_" + _strCompanyNum;
|
|
if(query.exec(strQuery.toUtf8()) == false) {InsertLog(query.lastError().text());return;}
|
|
|
|
strQuery = "delete from reply_" + _strCompanyNum;
|
|
if(query.exec(strQuery.toUtf8()) == false) {InsertLog(query.lastError().text());return;}
|
|
|
|
strQuery = "delete from body_category_map_" + _strCompanyNum;
|
|
if(query.exec(strQuery.toUtf8()) == false) {InsertLog(query.lastError().text());return;}
|
|
|
|
strQuery = "delete from stats_articlebuzzbyday where company_num = " + _strCompanyNum;
|
|
if(query.exec(strQuery.toUtf8()) == false) {InsertLog(query.lastError().text());return;}
|
|
|
|
QString strReplyQuery = QString("insert into reply_" + _strCompanyNum + " (num,id,nickname,parent,data,date,body_num,realbycategorynum) VALUES (:NUM,:ID,:NICKNAME,:PARENT,:DATA,:DATE,:BODY_NUM,:REALBYCATEGORYNUM)").toUtf8();
|
|
QString strBodyQuery = QString("insert into body_" + _strCompanyNum + " (num,platformname,platformform,platformtitle,id,nickname,title,data,profileurl,url,view,date,reply_startnum,reply_endnum,lastupdate,realbycategorynum,profile) VALUES (:NUM,:PLATFORMNAME,:PLATFORMFORM,:PLATFORMTITLE,:ID,:NICKNAME,:TITLE,:DATA,:PROFILEURL,:URL,:VIEW,:DATE,:REPLY_STARTNUM,:REPLY_ENDNUM,:LASTUPDATE,:REALBYCATEGORYNUM,:PROFILE)").toUtf8();
|
|
QString strMapQuery = QString("insert into body_category_map_" + _strCompanyNum + " (num,body_num,category_num,realin) VALUES (:NUM,:BODY_NUM,:CATEGORY_NUM,:REALIN)").toUtf8();
|
|
|
|
int nReplyCount = 0;
|
|
foreach(QString strUrl , m_strlistOrder )
|
|
{
|
|
int nReplyStart = nReplyCount;
|
|
foreach(SReply stReply,m_mapData[strUrl].m_vecReply)
|
|
{
|
|
query.prepare(strReplyQuery);
|
|
query.bindValue(":NUM",nReplyCount);
|
|
query.bindValue(":ID",stReply.m_strlist[m_anData[E_DATA_article_id]].trimmed().toUtf8());
|
|
query.bindValue(":NICKNAME",stReply.m_strlist[m_anData[E_DATA_article_nickname]].trimmed().toUtf8());
|
|
query.bindValue(":PARENT",stReply.m_strlist[m_anData[E_DATA_article_parent]].trimmed().toUtf8());
|
|
query.bindValue(":DATA",SqlString(stReply.m_strlist[m_anData[E_DATA_article_data]].trimmed()).toUtf8());
|
|
query.bindValue(":DATE",stReply.m_strlist[m_anData[E_DATA_article_date]].trimmed().toUtf8());
|
|
query.bindValue(":BODY_NUM",m_mapData[strUrl].m_nNum);
|
|
query.bindValue(":REALBYCATEGORYNUM",GetVectorToString(stReply.m_vecCategory," "));
|
|
if (query.exec()==false){InsertLog(query.lastError().text());return;}
|
|
nReplyCount++;
|
|
}
|
|
query.prepare(strBodyQuery);
|
|
query.bindValue(":NUM",m_mapData[strUrl].m_nNum);
|
|
query.bindValue(":PLATFORMNAME",m_mapData[strUrl].m_strlist[m_anData[E_DATA_platform_name]].trimmed());
|
|
query.bindValue(":PLATFORMFORM",m_mapData[strUrl].m_strlist[m_anData[E_DATA_platform_form]].trimmed());
|
|
query.bindValue(":PLATFORMTITLE",SqlString(m_mapData[strUrl].m_strlist[m_anData[E_DATA_platform_title]]).trimmed());
|
|
query.bindValue(":ID",m_mapData[strUrl].m_strlist[m_anData[E_DATA_article_id]].trimmed());
|
|
query.bindValue(":NICKNAME",m_mapData[strUrl].m_strlist[m_anData[E_DATA_article_nickname]].trimmed());
|
|
query.bindValue(":TITLE",SqlString(m_mapData[strUrl].m_strlist[m_anData[E_DATA_article_title]]).trimmed());
|
|
query.bindValue(":PROFILE",SqlString(m_mapData[strUrl].m_strlist[m_anData[E_DATA_article_profile]]).trimmed());
|
|
QString strData = m_mapData[strUrl].m_strlist[m_anData[E_DATA_article_data]];
|
|
strData=strData.replace(QChar(160),"");
|
|
bool bQuit = true;
|
|
while(bQuit)
|
|
{
|
|
if (strData.contains("\n\n\n"))
|
|
strData=strData.replace("\n\n\n","");
|
|
else
|
|
bQuit = false;
|
|
}
|
|
//strData=SeqDelString(strData,QChar('\n'),2);
|
|
query.bindValue(":DATA",SqlString(strData.replace(QString("\n"),QString("<br>"))).trimmed());
|
|
query.bindValue(":PROFILEURL",SqlString(m_mapData[strUrl].m_strlist[m_anData[E_DATA_article_profileurl]]).trimmed());
|
|
QString strArticleUrl = m_mapData[strUrl].m_strlist[m_anData[E_DATA_article_url]].trimmed();
|
|
query.bindValue(":URL",strArticleUrl.right(strArticleUrl.length() - QString("http://").length()));
|
|
if (m_mapData[strUrl].m_strlist[m_anData[E_DATA_article_hit]].trimmed().isEmpty())
|
|
query.bindValue(":VIEW","-1");
|
|
else
|
|
query.bindValue(":VIEW",m_mapData[strUrl].m_strlist[m_anData[E_DATA_article_hit]]);
|
|
query.bindValue(":DATE",m_mapData[strUrl].m_strlist[m_anData[E_DATA_article_date]].trimmed());
|
|
if (m_mapData[strUrl].m_vecReply.size() == 0)
|
|
{
|
|
query.bindValue(":REPLY_STARTNUM",-1);
|
|
query.bindValue(":REPLY_ENDNUM",-1);
|
|
}
|
|
else
|
|
{
|
|
query.bindValue(":REPLY_STARTNUM",nReplyStart);
|
|
query.bindValue(":REPLY_ENDNUM",nReplyCount-1);
|
|
}
|
|
QString strDate = m_mapData[strUrl].m_dtLast.toString("yyyy-MM-dd HH:mm:ss");
|
|
if (strDate.trimmed().isEmpty())
|
|
query.bindValue(":LASTUPDATE","1900-01-01 00:00:00");
|
|
else
|
|
query.bindValue(":LASTUPDATE",strDate);
|
|
|
|
query.bindValue(":REALBYCATEGORYNUM",GetVectorToString(m_mapData[strUrl].m_vecCategory," "));
|
|
if (query.exec()==false) {InsertLog(query.lastError().text());return; }
|
|
}
|
|
query.prepare(strMapQuery);
|
|
int nCount = 0;
|
|
foreach(SMap stMap,m_vecMap)
|
|
{
|
|
query.bindValue(":NUM",nCount++);
|
|
query.bindValue(":BODY_NUM",stMap.m_nBody);
|
|
query.bindValue(":CATEGORY_NUM",stMap.m_nCategory);
|
|
query.bindValue(":REALIN",stMap.m_nRealIn);
|
|
if (query.exec()==false)
|
|
{
|
|
InsertLog(query.lastError().text());return;
|
|
}
|
|
}
|
|
|
|
QDate date = QDate::currentDate().addDays(-60);
|
|
QString astrOrderBy[D_ARTICLE_MAX] = {"body","reply","all"};
|
|
while(date <= QDate::currentDate())
|
|
{
|
|
QVector <SBuzzyCount> vecCount;
|
|
foreach(SBuzzy stBuzzy,m_vecBuzzy)
|
|
{
|
|
SBuzzyCount stCount;
|
|
memset(&stCount.m_anCount,0,sizeof(int)*D_ARTICLE_MAX);
|
|
stCount.m_nCategory = stBuzzy.m_nCategory;
|
|
if (stBuzzy.m_astArticle[E_ARTICLE_BODY].m_mapCount.contains(date))
|
|
stCount.m_anCount[0] = stBuzzy.m_astArticle[E_ARTICLE_BODY].m_mapCount[date];
|
|
if (stBuzzy.m_astArticle[E_ARTICLE_REPLY].m_mapCount.contains(date))
|
|
stCount.m_anCount[1] = stBuzzy.m_astArticle[E_ARTICLE_REPLY].m_mapCount[date];
|
|
stCount.m_anCount[2] = stCount.m_anCount[0] + stCount.m_anCount[1];
|
|
vecCount.push_back(stCount);
|
|
}
|
|
for (int i = 0; i < D_ARTICLE_MAX ; i++)
|
|
{
|
|
strQuery = "insert stats_articlebuzzbyday set ";
|
|
foreach(SBuzzyCount stCount,vecCount)
|
|
{
|
|
strQuery += "category_";
|
|
//if (stCount.m_nCategory)
|
|
strQuery += QString::number(stCount.m_nCategory);
|
|
//else
|
|
//strQuery += "all";
|
|
strQuery += " = ";
|
|
strQuery += QString::number(stCount.m_anCount[i]);
|
|
strQuery += ",";
|
|
}
|
|
strQuery += "date = '";
|
|
strQuery += date.toString("yyyy-MM-dd");
|
|
strQuery += "', subject = '";
|
|
strQuery += astrOrderBy[i];
|
|
strQuery += "',company_num = ";
|
|
strQuery += _strCompanyNum;
|
|
if (query.exec(strQuery.toUtf8())==false) { InsertLog(query.lastError().text()); }
|
|
}
|
|
date = date.addDays(1);
|
|
}
|
|
db.close();
|
|
}
|
|
|
|
bool QSortPowerCafe(const SPowerCafeCount &st1, const SPowerCafeCount &st2)
|
|
{
|
|
return st1.m_ncAll > st2.m_ncAll;
|
|
}
|
|
|
|
bool QSortPowerCafeReal(const SPowerCafeCount &st1, const SPowerCafeCount &st2)
|
|
{
|
|
return st1.m_ncAllReal > st2.m_ncAllReal;
|
|
}
|
|
|
|
void Widget::on_power_cafe_count()
|
|
{
|
|
ReloadData();
|
|
foreach (QListWidgetItem *item,m_plw[E_LIST_FILTER].selectedItems())
|
|
{
|
|
InsertLog("Power Cafe Data Filter Run Start : " + item->text());
|
|
DataFilter(item->data(Qt::UserRole).toString());
|
|
InsertLog("Power Cafe Data Filter Run End ");
|
|
}
|
|
QMap <QString,SPowerCafeCount> mapRealCount;
|
|
QMap <QString,SPowerCafeCount> mapAllCount;
|
|
foreach (QListWidgetItem *item,m_plw[E_LIST_COMPANY].selectedItems())
|
|
{
|
|
InsertLog("Power Cafe Rank Count Make Start " + item->text());
|
|
// real make
|
|
if (m_bDataFlag[E_ARTICLE_BODY] == true)
|
|
{
|
|
foreach(QStringList strlist,m_data[E_ARTICLE_BODY])
|
|
{
|
|
if (strlist[m_anData[E_DATA_platform_form]].trimmed().compare(QString("cafe")) != 0) continue;
|
|
QString strKey = strlist[m_anData[E_DATA_platform_id]].trimmed();
|
|
if (mapRealCount.contains(strKey)==false)
|
|
{
|
|
SPowerCafeCount stPowerCafe;
|
|
stPowerCafe.m_strCafeID = strKey;
|
|
stPowerCafe.m_strTitle = strlist[m_anData[E_DATA_platform_title]];
|
|
mapRealCount.insert(strKey,stPowerCafe);
|
|
}
|
|
mapRealCount[strKey].m_ncBodyReal++;
|
|
mapRealCount[strKey].m_ncAllReal++;
|
|
if (mapRealCount[strKey].m_mapUser.contains(strlist[m_anData[E_DATA_article_id]].trimmed())==false)
|
|
mapRealCount[strKey].m_mapUser.insert(strlist[m_anData[E_DATA_article_id]].trimmed(),true);
|
|
}
|
|
}
|
|
if (m_bDataFlag[E_ARTICLE_REPLY] == true)
|
|
{
|
|
foreach(QStringList strlist,m_data[E_ARTICLE_REPLY])
|
|
{
|
|
if (strlist[m_anData[E_DATA_platform_form]].trimmed().compare(QString("cafe")) != 0) continue;
|
|
QString strKey = strlist[m_anData[E_DATA_platform_id]].trimmed();
|
|
if (mapRealCount.contains(strKey)==false)
|
|
{
|
|
SPowerCafeCount stPowerCafe;
|
|
stPowerCafe.m_strCafeID = strKey;
|
|
stPowerCafe.m_strTitle = strlist[m_anData[E_DATA_platform_title]];
|
|
mapRealCount.insert(strKey,stPowerCafe);
|
|
}
|
|
mapRealCount[strKey].m_ncReplyReal++;
|
|
mapRealCount[strKey].m_ncAllReal++;
|
|
if (mapRealCount[strKey].m_mapUser.contains(strlist[m_anData[E_DATA_article_id]].trimmed())==false)
|
|
mapRealCount[strKey].m_mapUser.insert(strlist[m_anData[E_DATA_article_id]].trimmed(),true);
|
|
}
|
|
}
|
|
// all make
|
|
foreach(SBody stBody, m_mapData.values())
|
|
{
|
|
if (stBody.m_strlist[m_anData[E_DATA_platform_form]].trimmed().compare(QString("cafe")) != 0) continue;
|
|
QString strKey = stBody.m_strlist[m_anData[E_DATA_platform_id]].trimmed();
|
|
if (mapAllCount.contains(strKey)==false)
|
|
{
|
|
SPowerCafeCount stPowerCafe;
|
|
stPowerCafe.m_strCafeID = strKey;
|
|
stPowerCafe.m_strTitle = stBody.m_strlist[m_anData[E_DATA_platform_title]];
|
|
mapAllCount.insert(strKey,stPowerCafe);
|
|
}
|
|
mapAllCount[strKey].m_ncBodyAll++;
|
|
if (mapAllCount[strKey].m_mapUser.contains(stBody.m_strlist[m_anData[E_DATA_article_id]].trimmed())==false)
|
|
mapAllCount[strKey].m_mapUser.insert(stBody.m_strlist[m_anData[E_DATA_article_id]].trimmed(),true);
|
|
|
|
foreach(SReply stReply , stBody.m_vecReply.values())
|
|
{
|
|
if (stReply.m_strlist[m_anData[E_DATA_article_id]].compare(strKey) != 0)
|
|
mapAllCount[strKey].m_ncReplyAll++;
|
|
if (mapAllCount[strKey].m_mapUser.contains(stReply.m_strlist[m_anData[E_DATA_article_id]].trimmed())==false)
|
|
mapAllCount[strKey].m_mapUser.insert(stReply.m_strlist[m_anData[E_DATA_article_id]].trimmed(),true);
|
|
}
|
|
}
|
|
foreach (SPowerCafeCount stPowerCafe,mapAllCount.values())
|
|
mapAllCount[stPowerCafe.m_strCafeID].m_ncAll = stPowerCafe.m_ncBodyAll + stPowerCafe.m_ncReplyAll;
|
|
|
|
foreach(SPowerCafeCount st,mapRealCount)
|
|
{
|
|
if (mapAllCount.contains(st.m_strCafeID))
|
|
{
|
|
mapRealCount[st.m_strCafeID].m_ncBodyAll = mapAllCount[st.m_strCafeID].m_ncBodyAll;
|
|
mapRealCount[st.m_strCafeID].m_ncReplyAll = mapAllCount[st.m_strCafeID].m_ncReplyAll;
|
|
mapRealCount[st.m_strCafeID].m_ncAll = mapAllCount[st.m_strCafeID].m_ncAll;
|
|
mapRealCount[st.m_strCafeID].m_ncUserAll = mapAllCount[st.m_strCafeID].m_mapUser.size();
|
|
}
|
|
}
|
|
InsertLog("Power Cafe Rank Count Make End");
|
|
InsertLog("Power Cafe Rank Send Start " + item->text());
|
|
{
|
|
db.setHostName(D_DB_WEB_HOST);
|
|
db.setUserName(D_DB_WEB_USER);
|
|
db.setPassword(D_DB_WEB_PASS);
|
|
db.setDatabaseName(D_DB_WEB_NAME);
|
|
if (db.open() == false)
|
|
{
|
|
InsertLog(db.lastError().text());
|
|
return;
|
|
}
|
|
QSqlQuery query;
|
|
QString strQuery;
|
|
QString strCompanyNum = item->data(Qt::UserRole).toString();
|
|
strQuery = "delete from powercafe where company_num = " + strCompanyNum;
|
|
if(query.exec(strQuery.toUtf8()) == false) {InsertLog(query.lastError().text());return;}
|
|
strQuery = "delete from stats_powercaferank where company_num = " + strCompanyNum;
|
|
if(query.exec(strQuery.toUtf8()) == false) {InsertLog(query.lastError().text());return;}
|
|
QList<SPowerCafeCount> list = mapRealCount.values();
|
|
qSort(list.begin(),list.end(),QSortPowerCafeReal);
|
|
|
|
strQuery = "insert into powercafe (company_num,rank,id,title,url,bodycountall,replycountall,allcountall,usercountall,bodycountreal,replycountreal,allcountreal,usercountreal)"
|
|
" VALUES (" + strCompanyNum + ",0,:ID,:TITLE,:URL,:BODY_ALL,:REPLY_ALL,:COUNT_ALL,:USER_ALL,:BODY_REAL,:REPLY_REAL,:ALL_REAL,:USER_REAL)";
|
|
|
|
query.prepare(strQuery.toUtf8());
|
|
foreach(SPowerCafeCount stIn,list)
|
|
{
|
|
if (stIn.m_strCafeID.trimmed().isEmpty()) continue;
|
|
if (stIn.m_strTitle.trimmed().isEmpty()) continue;
|
|
query.bindValue(":ID",stIn.m_strCafeID.trimmed().toUtf8());
|
|
query.bindValue(":TITLE",stIn.m_strTitle.trimmed().toUtf8());
|
|
query.bindValue(":URL",QString("cafe.naver.com/" + stIn.m_strCafeID.trimmed()).toUtf8());
|
|
query.bindValue(":BODY_ALL",stIn.m_ncBodyAll);
|
|
query.bindValue(":REPLY_ALL",stIn.m_ncReplyAll);
|
|
query.bindValue(":COUNT_ALL",stIn.m_ncAll);
|
|
query.bindValue(":USER_ALL",stIn.m_ncUserAll);
|
|
query.bindValue(":BODY_REAL",stIn.m_ncBodyReal);
|
|
query.bindValue(":REPLY_REAL",stIn.m_ncReplyReal);
|
|
query.bindValue(":ALL_REAL",stIn.m_ncAllReal);
|
|
query.bindValue(":USER_REAL",stIn.m_mapUser.size());
|
|
if(query.exec() == false) {InsertLog(query.lastError().text());return;}
|
|
}
|
|
int nCount = 0;
|
|
strQuery = "insert into stats_powercaferank (rank,articlecountall,usercountreal,subject,company_num,id,title,articlecountreal)"
|
|
" VALUES (0,0,0,'articlecountreal'," + strCompanyNum + ",:ID,:TITLE,:COUNT_ALL)";
|
|
query.prepare(strQuery.toUtf8());
|
|
foreach(SPowerCafeCount stIn,list)
|
|
{
|
|
if (stIn.m_strCafeID.trimmed().isEmpty()) continue;
|
|
if (stIn.m_strTitle.trimmed().isEmpty()) continue;
|
|
if (nCount >= 10) break; nCount++;
|
|
query.bindValue(":ID",stIn.m_strCafeID.trimmed().toUtf8());
|
|
query.bindValue(":TITLE",stIn.m_strTitle.trimmed().toUtf8());
|
|
query.bindValue(":COUNT_ALL",stIn.m_ncAllReal);
|
|
if(query.exec() == false) {InsertLog(query.lastError().text());return;}
|
|
}
|
|
|
|
QList<SPowerCafeCount> listAll = mapAllCount.values();
|
|
qSort(listAll.begin(),listAll.end(),QSortPowerCafe);
|
|
|
|
nCount = 0;
|
|
strQuery = "insert into stats_powercaferank (rank,articlecountreal,usercountreal,subject,company_num,id,title,articlecountall)"
|
|
" VALUES (0,0,0,'articlecountall'," + strCompanyNum + ",:ID,:TITLE,:COUNT_ALL)";
|
|
query.prepare(strQuery.toUtf8());
|
|
foreach(SPowerCafeCount stIn,listAll)
|
|
{
|
|
if (stIn.m_strCafeID.trimmed().isEmpty()) continue;
|
|
if (stIn.m_strTitle.trimmed().isEmpty()) continue;
|
|
if (nCount >= 10) break; nCount++;
|
|
query.bindValue(":ID",stIn.m_strCafeID.trimmed().toUtf8());
|
|
query.bindValue(":TITLE",stIn.m_strTitle.trimmed().toUtf8());
|
|
query.bindValue(":COUNT_ALL",stIn.m_ncAll);
|
|
if(query.exec() == false) {
|
|
InsertLog(query.lastError().text());return;}
|
|
}
|
|
db.close();
|
|
InsertLog("Power Cafe Rank Send End");
|
|
}
|
|
}
|
|
}
|
|
|
|
bool QSortBody(const SInfluenceCount &stInflunce1, const SInfluenceCount &stInflunce2)
|
|
{
|
|
return stInflunce1.m_ncBody > stInflunce2.m_ncBody;
|
|
}
|
|
|
|
bool QSortReply(const SInfluenceCount &stInflunce1, const SInfluenceCount &stInflunce2)
|
|
{
|
|
return stInflunce1.m_ncReply > stInflunce2.m_ncReply;
|
|
}
|
|
|
|
bool QSortInfulrence(const SInfluenceCount &stInflunce1, const SInfluenceCount &stInflunce2)
|
|
{
|
|
return stInflunce1.m_dinfulrence > stInflunce2.m_dinfulrence;
|
|
}
|
|
|
|
void Widget::InfluenceCount()
|
|
{
|
|
QMap <QString,SInfluenceCount> mapCount;
|
|
foreach (QListWidgetItem *item,m_plw[E_LIST_COMPANY].selectedItems())
|
|
{
|
|
InsertLog("Influence Rank Count Make Start " + item->text());
|
|
QString strCompanyNum = item->data(Qt::UserRole).toString();
|
|
foreach(SBody stBody, m_mapData.values())
|
|
{
|
|
if (stBody.m_strlist[m_anData[E_DATA_platform_form]].trimmed().compare(QString("blog")) != 0) continue;
|
|
QString strKey = stBody.m_strlist[m_anData[E_DATA_article_id]];
|
|
if (mapCount.contains(strKey)==false)
|
|
{
|
|
SInfluenceCount stInfluence;
|
|
stInfluence.m_ncBody = 0;
|
|
stInfluence.m_ncReply = 0;
|
|
stInfluence.m_strID = strKey;
|
|
stInfluence.m_strNick = stBody.m_strlist[m_anData[E_DATA_article_nickname]];
|
|
stInfluence.m_strTitle = stBody.m_strlist[m_anData[E_DATA_platform_title]];
|
|
stInfluence.m_strProfileUrl = stBody.m_strlist[m_anData[E_DATA_article_profileurl]];
|
|
stInfluence.m_strProfile = stBody.m_strlist[m_anData[E_DATA_article_profile]];
|
|
mapCount.insert(strKey,stInfluence);
|
|
}
|
|
mapCount[strKey].m_ncBody++;
|
|
foreach(SReply stReply , stBody.m_vecReply.values())
|
|
{
|
|
if (stReply.m_strlist[m_anData[E_DATA_article_id]].compare(strKey) != 0)
|
|
mapCount[strKey].m_ncReply++;
|
|
}
|
|
}
|
|
|
|
foreach (SInfluenceCount stInfluence,mapCount.values())
|
|
{
|
|
mapCount[stInfluence.m_strID].m_dinfulrence = ((double)stInfluence.m_ncBody * 0.4) + ((double)stInfluence.m_ncReply * 0.6);
|
|
}
|
|
InsertLog("Influence Rank Count Make End");
|
|
{
|
|
db.setHostName(D_DB_WEB_HOST);
|
|
db.setUserName(D_DB_WEB_USER);
|
|
db.setPassword(D_DB_WEB_PASS);
|
|
db.setDatabaseName(D_DB_WEB_NAME);
|
|
if (db.open() == false)
|
|
{
|
|
InsertLog(db.lastError().text());
|
|
return;
|
|
}
|
|
|
|
InsertLog("Influence Rank Count Send Start");
|
|
QSqlQuery query;
|
|
QString strQuery;
|
|
strQuery = "delete from stats_influencerrank where company_num = " + strCompanyNum;
|
|
if(query.exec(strQuery.toUtf8()) == false) {InsertLog(query.lastError().text());return;}
|
|
strQuery = "delete from influencer where company_num = " + strCompanyNum;
|
|
if(query.exec(strQuery.toUtf8()) == false) {InsertLog(query.lastError().text());return;}
|
|
QList<SInfluenceCount> list = mapCount.values();
|
|
qSort(list.begin(),list.end(),QSortInfulrence);
|
|
|
|
strQuery = "insert into influencer (cost,company_num,id,nickname,title,profileurl,bodycount,replycount,influencevalue,profile)"
|
|
" VALUES (0," + strCompanyNum + ",:ID,:NICKNAME,:TITLE,:PROFILE_URL,:BODY_COUNT,:REPLY_COUNT,:INPL,:PROFILE)";
|
|
|
|
query.prepare(strQuery.toUtf8());
|
|
foreach(SInfluenceCount stIn,list)
|
|
{
|
|
if (stIn.m_strID.length() > 42) continue;
|
|
query.bindValue(":ID",stIn.m_strID.trimmed().toUtf8());
|
|
query.bindValue(":NICKNAME",stIn.m_strNick.trimmed().toUtf8());
|
|
query.bindValue(":TITLE",stIn.m_strTitle.trimmed().toUtf8());
|
|
query.bindValue(":PROFILE_URL",stIn.m_strProfileUrl.trimmed().toUtf8());
|
|
query.bindValue(":BODY_COUNT",stIn.m_ncBody);
|
|
query.bindValue(":REPLY_COUNT",stIn.m_ncReply);
|
|
query.bindValue(":INPL",QString::number(stIn.m_dinfulrence,'g',3));
|
|
query.bindValue(":PROFILE",stIn.m_strProfile.trimmed());
|
|
if(query.exec() == false) {InsertLog(query.lastError().text());return;}
|
|
}
|
|
|
|
int nCount = 0;
|
|
foreach(SInfluenceCount stIn,list)
|
|
{
|
|
if (nCount >= 10) break; nCount++;
|
|
strQuery = MakeInfluencerrankQuery(stIn,"influencevalue",strCompanyNum);
|
|
if(query.exec(strQuery.toUtf8()) == false) {InsertLog(query.lastError().text());return;}
|
|
}
|
|
nCount = 0;
|
|
qSort(list.begin(),list.end(),QSortBody);
|
|
foreach(SInfluenceCount stIn,list)
|
|
{
|
|
if (nCount >= 10) break; nCount++;
|
|
strQuery = MakeInfluencerrankQuery(stIn,"bodycount",strCompanyNum);
|
|
if(query.exec(strQuery.toUtf8()) == false) {InsertLog(query.lastError().text());return;}
|
|
}
|
|
|
|
qSort(list.begin(),list.end(),QSortReply);
|
|
nCount = 0;
|
|
foreach(SInfluenceCount stIn,list)
|
|
{
|
|
if (nCount >= 10) break; nCount++;
|
|
strQuery = MakeInfluencerrankQuery(stIn,"replycount",strCompanyNum);
|
|
if(query.exec(strQuery.toUtf8()) == false) {InsertLog(query.lastError().text());return;}
|
|
}
|
|
db.close();
|
|
InsertLog("Influence Rank Count Send End");
|
|
}
|
|
}
|
|
}
|
|
|
|
struct SMaketer
|
|
{
|
|
int m_nBodyCount;
|
|
int m_nReplyCount;
|
|
int m_nAllCount;
|
|
QString m_strID;
|
|
QString m_strPlatformName;
|
|
|
|
SMaketer()
|
|
{
|
|
m_nBodyCount=0;
|
|
m_nReplyCount=0;
|
|
}
|
|
};
|
|
|
|
bool QSortMarketer(const SMaketer &stMaketer1, const SMaketer &stMaketer2)
|
|
{
|
|
return stMaketer1.m_nAllCount > stMaketer2.m_nAllCount;
|
|
}
|
|
|
|
void Widget::ConsumerSupervisionCount()
|
|
{
|
|
db.setHostName(D_DB_WEB_HOST);
|
|
db.setUserName(D_DB_WEB_USER);
|
|
db.setPassword(D_DB_WEB_PASS);
|
|
db.setDatabaseName(D_DB_WEB_NAME);
|
|
if (db.open() == false)
|
|
{
|
|
InsertLog(db.lastError().text());
|
|
return;
|
|
}
|
|
QMap <QString,SMaketer> mapMaketer;
|
|
QMap <QString,SMaketer> mapCafe;
|
|
|
|
foreach (QListWidgetItem *item,m_plw[E_LIST_COMPANY].selectedItems())
|
|
{
|
|
InsertLog("Markter Rank Count Make Start " + item->text());
|
|
QString strCompanyNum = item->data(Qt::UserRole).toString();
|
|
|
|
QSqlQuery query;
|
|
QString strQuery;
|
|
strQuery = "delete from stats_response where company_num = " + strCompanyNum;
|
|
if(query.exec(strQuery.toUtf8()) == false) {InsertLog(query.lastError().text());return;}
|
|
|
|
strQuery = "select id,platformname from marketer where company_num = " + strCompanyNum;
|
|
if(query.exec(strQuery.toUtf8()) == false) {InsertLog(query.lastError().text());return;}
|
|
while(query.next())
|
|
{
|
|
SMaketer stMaketer;
|
|
stMaketer.m_strID = query.value(0).toString();
|
|
stMaketer.m_strPlatformName = query.value(1).toString();
|
|
mapMaketer.insert(stMaketer.m_strID,stMaketer);
|
|
}
|
|
|
|
foreach(SBody stBody, m_mapData.values())
|
|
{
|
|
QString strKey = stBody.m_strlist[m_anData[E_DATA_article_id]].trimmed();
|
|
if (mapMaketer.contains(strKey))
|
|
{
|
|
if (stBody.m_strlist[m_anData[E_DATA_platform_name]].trimmed().compare(mapMaketer[strKey].m_strPlatformName) == 0)
|
|
{
|
|
mapMaketer[strKey].m_nBodyCount++;
|
|
QString strCafe = stBody.m_strlist[m_anData[E_DATA_platform_id]].trimmed();
|
|
if (stBody.m_strlist[m_anData[E_DATA_platform_form]].trimmed().compare("cafe") == 0)
|
|
{
|
|
if (mapCafe.contains(strCafe) == false)
|
|
{
|
|
SMaketer stCafe;
|
|
stCafe.m_strID = strCafe;
|
|
mapCafe.insert(strCafe,stCafe);
|
|
}
|
|
mapCafe[strCafe].m_nBodyCount++;
|
|
}
|
|
}
|
|
}
|
|
|
|
foreach(SReply stReply , stBody.m_vecReply.values())
|
|
{
|
|
strKey = stReply.m_strlist[m_anData[E_DATA_article_id]].trimmed();
|
|
if (mapMaketer.contains(strKey))
|
|
{
|
|
if (stReply.m_strlist[m_anData[E_DATA_platform_name]].trimmed().compare(mapMaketer[strKey].m_strPlatformName) == 0)
|
|
{
|
|
mapMaketer[strKey].m_nReplyCount++;
|
|
QString strCafe = stBody.m_strlist[m_anData[E_DATA_platform_id]].trimmed();
|
|
if (stBody.m_strlist[m_anData[E_DATA_platform_form]].trimmed().compare("cafe") == 0)
|
|
{
|
|
if (mapCafe.contains(strCafe) == false)
|
|
{
|
|
SMaketer stCafe;
|
|
stCafe.m_strID = strCafe;
|
|
mapCafe.insert(strCafe,stCafe);
|
|
}
|
|
mapCafe[strCafe].m_nReplyCount++;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
foreach (SMaketer stMaketer,mapMaketer.values())
|
|
mapMaketer[stMaketer.m_strID].m_nAllCount = stMaketer.m_nBodyCount + stMaketer.m_nReplyCount;
|
|
|
|
foreach (SMaketer stCafe,mapCafe.values())
|
|
mapCafe[stCafe.m_strID].m_nAllCount = stCafe.m_nBodyCount + stCafe.m_nReplyCount;
|
|
{
|
|
QList<SMaketer> list = mapMaketer.values();
|
|
qSort(list.begin(),list.end(),QSortMarketer);
|
|
InsertLog("Markter Rank Count Make End");
|
|
{
|
|
InsertLog("Markter Rank Count Send Start");
|
|
foreach(SMaketer stMaket,list)
|
|
{
|
|
strQuery = "insert into stats_response (rank,platformid,subject,marketerid,marketernickname,bodycount,replycount,company_num) values (0,' ' , 'marketerid' , ";
|
|
strQuery += "'" + stMaket.m_strID + "',";
|
|
strQuery += "' ',";
|
|
strQuery += QString::number(stMaket.m_nBodyCount) + ",";
|
|
strQuery += QString::number(stMaket.m_nReplyCount) + ",";
|
|
strQuery += strCompanyNum + ")";
|
|
if(query.exec(strQuery.toUtf8()) == false) {InsertLog(query.lastError().text());return;}
|
|
}
|
|
InsertLog("Markter Rank Count Send End");
|
|
}
|
|
}
|
|
{
|
|
QList<SMaketer> list = mapCafe.values();
|
|
qSort(list.begin(),list.end(),QSortMarketer);
|
|
{
|
|
InsertLog("Maketer in Cafe Rank Count Send Start");
|
|
foreach(SMaketer stMaket,list)
|
|
{
|
|
if (stMaket.m_nAllCount == 0) break;
|
|
strQuery = "insert into stats_response (rank,marketerid,subject,platformid,marketernickname,bodycount,replycount,company_num) values (0,' ' , 'platformid' , ";
|
|
strQuery += "'" + stMaket.m_strID + "',";
|
|
strQuery += "' ',";
|
|
strQuery += QString::number(stMaket.m_nBodyCount) + ",";
|
|
strQuery += QString::number(stMaket.m_nReplyCount) + ",";
|
|
strQuery += strCompanyNum + ")";
|
|
if(query.exec(strQuery.toUtf8()) == false) {InsertLog(query.lastError().text());return;}
|
|
}
|
|
InsertLog("Maketer in Cafe Rank Count Send End");
|
|
}
|
|
}
|
|
}
|
|
db.close();
|
|
}
|
|
|
|
void Widget::on_influence_count()
|
|
{
|
|
InfluenceCount();
|
|
}
|
|
|
|
QString Widget::MakeInfluencerrankQuery(SInfluenceCount &_stIn,QString _strOrder,QString _strCompanyNum)
|
|
{
|
|
QString strOut;
|
|
strOut = "insert into stats_influencerrank(rank,id,nickname,bodycount,replycount,influencevalue,subject,company_num) VALUES (0,";
|
|
strOut += "'" + _stIn.m_strID.trimmed() + "',";
|
|
strOut += "'" + _stIn.m_strNick.trimmed() + "',";
|
|
strOut += QString::number(_stIn.m_ncBody) + ",";
|
|
strOut += QString::number(_stIn.m_ncReply) + ",";
|
|
strOut += QString::number(_stIn.m_dinfulrence,'g',3)+ ",";
|
|
strOut += "'" + _strOrder + "',";
|
|
strOut += _strCompanyNum + ")";
|
|
return strOut;
|
|
}
|
|
|
|
void Widget::on_consumer_supervison_count()
|
|
{
|
|
ConsumerSupervisionCount();
|
|
}
|
|
|
|
QString Widget::SeqDelString(QString _strData,QChar _chChar,int _nMax)
|
|
{
|
|
static const int C_SEQ_FIND = 0;
|
|
static const int C_SEQ_DEL = 1;
|
|
|
|
QString strOut;
|
|
int nMode = C_SEQ_FIND,nCount=0;
|
|
for (int i = 0 ; i < _strData.length(); i++)
|
|
{
|
|
switch(nMode)
|
|
{
|
|
case C_SEQ_FIND:
|
|
if (_strData[i] == _chChar)
|
|
nCount++;
|
|
else
|
|
nCount = 0;
|
|
strOut += _strData[i];
|
|
if (nCount >= _nMax)
|
|
nMode = C_SEQ_DEL;
|
|
break;
|
|
case C_SEQ_DEL:
|
|
nCount = 0;
|
|
if (_strData[i] != _chChar)
|
|
{
|
|
strOut += _strData[i];
|
|
nMode = C_SEQ_FIND;
|
|
}
|
|
break;
|
|
}
|
|
}
|
|
return strOut;
|
|
}
|
|
|
|
struct SSpamer
|
|
{
|
|
QString m_strKey;
|
|
QString m_strTitle;
|
|
QString m_strNickname;
|
|
double m_dBodycount;
|
|
double m_dReplycount;
|
|
double m_dSpammerValue;
|
|
SSpamer()
|
|
{
|
|
m_dBodycount = 0.0;
|
|
m_dReplycount = 0.0;
|
|
}
|
|
QSet <QString> m_setNick;
|
|
};
|
|
|
|
bool QSortSpamer(const SSpamer &st1, const SSpamer &st2)
|
|
{
|
|
return st1.m_dSpammerValue > st2.m_dSpammerValue;
|
|
}
|
|
|
|
void Widget::on_spammers_count()
|
|
{
|
|
QFile inputFile("spammers.txt");
|
|
double dRead[E_SPAMER_MAX];
|
|
/*
|
|
Body_Count_Cut = 5
|
|
Body_Count_Ratio = 0.7
|
|
Nick_Count_Cut = 10
|
|
Nick_Count_Ratio = 0.3
|
|
*/
|
|
//id,platformname,platformform
|
|
//nickname,platformtitle,nicknamecount,bodycount,spammervalue,company_num,
|
|
|
|
if (inputFile.open(QIODevice::ReadOnly))
|
|
{
|
|
QTextStream in(&inputFile);
|
|
while (!in.atEnd())
|
|
{
|
|
QString line = in.readLine();
|
|
QStringList list = line.split("=");
|
|
if (list.size() < 2) continue;
|
|
if (list[0].trimmed().compare("Body_Count_Cut") == 0) dRead[E_SPAMER_BODY_COUNT_CUT]=list[1].toDouble();
|
|
if (list[0].trimmed().compare("Body_Count_Ratio") == 0) dRead[E_SPAMER_BODY_COUNT_RATIO]=list[1].toDouble();
|
|
if (list[0].trimmed().compare("Nick_Count_Cut") == 0) dRead[E_SPAMER_NICK_COUNT_CUT]=list[1].toDouble();
|
|
if (list[0].trimmed().compare("Nick_Count_Ratio") == 0) dRead[E_SPAMER_NICK_COUNT_RATIO]=list[1].toDouble();
|
|
}
|
|
inputFile.close();
|
|
}
|
|
QMap<QString,SSpamer> mapSpamer;
|
|
foreach (QListWidgetItem *item,m_plw[E_LIST_COMPANY].selectedItems())
|
|
{
|
|
InsertLog("Spamer Rank Count Make Start " + item->text());
|
|
foreach(SBody stBody, m_mapData.values())
|
|
{
|
|
if (stBody.m_strlist[m_anData[E_DATA_article_id]].trimmed().isEmpty()) continue;
|
|
QString strKey = stBody.m_strlist[m_anData[E_DATA_platform_name]].trimmed() + QString(",");
|
|
strKey += stBody.m_strlist[m_anData[E_DATA_platform_form]].trimmed() + QString(",");
|
|
strKey += stBody.m_strlist[m_anData[E_DATA_article_id]].trimmed();
|
|
if (mapSpamer.contains(strKey) == false)
|
|
{
|
|
SSpamer stSpamer;
|
|
stSpamer.m_strKey = strKey;
|
|
stSpamer.m_strNickname = stBody.m_strlist[m_anData[E_DATA_article_nickname]].trimmed();
|
|
mapSpamer.insert(strKey,stSpamer);
|
|
}
|
|
mapSpamer[strKey].m_dBodycount+=1.0;
|
|
mapSpamer[strKey].m_setNick.insert(stBody.m_strlist[m_anData[E_DATA_article_nickname]].trimmed());
|
|
foreach(SReply stReply , stBody.m_vecReply.values())
|
|
{
|
|
QString strKey = stReply.m_strlist[m_anData[E_DATA_platform_name]].trimmed() + QString(",");
|
|
strKey += stReply.m_strlist[m_anData[E_DATA_platform_form]].trimmed() + QString(",");
|
|
strKey += stReply.m_strlist[m_anData[E_DATA_article_id]].trimmed();
|
|
if (mapSpamer.contains(strKey) == false)
|
|
{
|
|
SSpamer stSpamer;
|
|
stSpamer.m_strKey = strKey;
|
|
stSpamer.m_strNickname = stReply.m_strlist[m_anData[E_DATA_article_nickname]].trimmed();
|
|
mapSpamer.insert(strKey,stSpamer);
|
|
}
|
|
mapSpamer[strKey].m_dReplycount+=1.0;
|
|
QString strReKey = stReply.m_strlist[m_anData[E_DATA_article_nickname]].trimmed();
|
|
if (mapSpamer[strKey].m_setNick.contains(strReKey) == false)
|
|
mapSpamer[strKey].m_setNick.insert(strReKey);
|
|
}
|
|
}
|
|
|
|
QList <SSpamer> list;
|
|
foreach(SSpamer stSpamer,mapSpamer.values())
|
|
{
|
|
bool bFlag = false;
|
|
if (stSpamer.m_dBodycount > dRead[E_SPAMER_BODY_COUNT_CUT])
|
|
bFlag = true;
|
|
if ((double)stSpamer.m_setNick.size() > dRead[E_SPAMER_BODY_COUNT_CUT])
|
|
bFlag = true;
|
|
if (bFlag)
|
|
{
|
|
stSpamer.m_dSpammerValue = (dRead[E_SPAMER_BODY_COUNT_RATIO]*stSpamer.m_dBodycount)+
|
|
(dRead[E_SPAMER_NICK_COUNT_RATIO]*(double)stSpamer.m_setNick.size());
|
|
list.push_back(stSpamer);
|
|
}
|
|
}
|
|
qSort(list.begin(),list.end(),QSortSpamer);
|
|
|
|
InsertLog("Spamer Rank Count Make End ");
|
|
InsertLog("Spamer Rank Count Send Start ");
|
|
db.setHostName(D_DB_WEB_HOST);
|
|
db.setUserName(D_DB_WEB_USER);
|
|
db.setPassword(D_DB_WEB_PASS);
|
|
db.setDatabaseName(D_DB_WEB_NAME);
|
|
if (db.open() == false)
|
|
{
|
|
InsertLog(db.lastError().text());
|
|
return;
|
|
}
|
|
QSqlQuery query;
|
|
QString strQuery;
|
|
QString strCompanyNum = item->data(Qt::UserRole).toString();
|
|
strQuery = "delete from stats_spammerrank where company_num = " + strCompanyNum;
|
|
if(query.exec(strQuery.toUtf8()) == false) {InsertLog(query.lastError().text());return;}
|
|
strQuery = "delete from spammer where company_num = " + strCompanyNum;
|
|
if(query.exec(strQuery.toUtf8()) == false) {InsertLog(query.lastError().text());return;}
|
|
|
|
int nCount = 0;
|
|
foreach(SSpamer stIn,list)
|
|
{
|
|
QStringList strList = stIn.m_strKey.split(",");
|
|
if (strList[2].trimmed().isEmpty()) continue;
|
|
|
|
QString strValue = "0,'";
|
|
strValue += strList[0] + "','";
|
|
strValue += strList[1] + "','";
|
|
strValue += strList[2] + "','";
|
|
strValue += stIn.m_strNickname + "',";
|
|
strValue += QString::number(stIn.m_setNick.size()) + ",";
|
|
strValue += QString::number((int)stIn.m_dBodycount) + ",";
|
|
strValue += QString::number((int)stIn.m_dReplycount) + ",";
|
|
strValue += QString::number(stIn.m_dSpammerValue,'g',3) + ",";
|
|
strValue += strCompanyNum;
|
|
strQuery = "insert into spammer (rank,platformname,platformform,id,nickname,nicknamecount,bodycount,replycount,spammervalue,company_num) VALUES (";
|
|
strQuery += strValue + ")";
|
|
if(query.exec(strQuery.toUtf8()) == false) {qDebug() << strQuery;InsertLog(query.lastError().text());return;}
|
|
if (nCount < 20)
|
|
{
|
|
strQuery = "insert into stats_spammerrank (rank,platformname,platformform,id,nickname,nicknamecount,bodycount,replycount,spammervalue,company_num,subject) VALUES (";
|
|
strQuery += strValue + ",'spammervalue')";
|
|
if(query.exec(strQuery.toUtf8()) == false) {qDebug() << strQuery;InsertLog(query.lastError().text());return;}
|
|
}
|
|
nCount++;
|
|
}
|
|
db.close();
|
|
InsertLog("Spamer Rank Count Send End ");
|
|
}
|
|
}
|