git-svn-id: svn://192.168.0.12/source@344 8346c931-da38-4b9b-9d4c-e48b93cbd075
This commit is contained in:
215
FilterProcess/sconsumerstatistics.cpp
Normal file
215
FilterProcess/sconsumerstatistics.cpp
Normal file
@@ -0,0 +1,215 @@
|
||||
#include "sconsumerstatistics.h"
|
||||
#include <QJsonArray>
|
||||
#include <QJsonObject>
|
||||
#include <QJsonValue>
|
||||
#include <QDate>
|
||||
#include <QDebug>
|
||||
#include <QFile>
|
||||
|
||||
SCousumerStatistics::SCousumerStatistics(QString _strBodyJson, QString _strReplyJson, QString _strAllJson)
|
||||
{
|
||||
m_BodyJsonArray = convertStringToJsonArray(_strBodyJson);
|
||||
m_ReplyJsonArray = convertStringToJsonArray(_strReplyJson);
|
||||
m_AllJsonArray = convertStringToJsonArray(_strAllJson);
|
||||
|
||||
setBanCategoryName();
|
||||
makeConsumerStatistics();
|
||||
}
|
||||
|
||||
void SCousumerStatistics::setBanCategoryName()
|
||||
{
|
||||
m_listBanCategoryName.append("ALLCATEGORY");
|
||||
m_listBanCategoryName.append("ALL");
|
||||
}
|
||||
|
||||
QJsonArray SCousumerStatistics::convertStringToJsonArray(QString _strJson)
|
||||
{
|
||||
QJsonDocument jdoc = QJsonDocument::fromJson(_strJson.toUtf8());
|
||||
|
||||
return getDataArrayFromJsonDocument(jdoc);
|
||||
}
|
||||
|
||||
void SCousumerStatistics::makeConsumerStatistics()
|
||||
{
|
||||
makeBodyStatistics();
|
||||
makeReplyStatistics();
|
||||
makeAllStatistics();
|
||||
}
|
||||
|
||||
QString SCousumerStatistics::getCategoryNameFromJsonObject(QJsonObject _jsonObject)
|
||||
{
|
||||
return _jsonObject["name"].toString().toUtf8();
|
||||
}
|
||||
|
||||
QJsonArray SCousumerStatistics::getDataArrayFromJsonDocument(QJsonDocument _jsonDocument)
|
||||
{
|
||||
return _jsonDocument.object()["data"].toArray();
|
||||
}
|
||||
|
||||
QJsonArray SCousumerStatistics::getValueArrayFromJsonObject(QJsonObject _jsonObject)
|
||||
{
|
||||
return _jsonObject["value"].toArray();
|
||||
}
|
||||
|
||||
void SCousumerStatistics::makeBodyStatistics()
|
||||
{
|
||||
for (int i=0; i < m_BodyJsonArray.count(); i++)
|
||||
{
|
||||
QJsonObject categoryObject = m_BodyJsonArray.at(i).toObject();
|
||||
QString strCategoryName = getCategoryNameFromJsonObject(categoryObject);
|
||||
|
||||
if (isBanCategory(strCategoryName))
|
||||
continue;
|
||||
|
||||
stConsumerCategoryStatistics& consumerCategoryStatistics = getCategory(strCategoryName);
|
||||
QJsonArray valueArray = getValueArrayFromJsonObject(categoryObject);
|
||||
for (int j=0; j < valueArray.count(); j++)
|
||||
{
|
||||
QJsonObject valueObject = valueArray.at(j).toObject();
|
||||
|
||||
QString strDate = valueObject["date"].toString();
|
||||
QDate date = QDate::fromString(strDate, "yyyyMMdd");
|
||||
int nCount = valueObject["count"].toInt();
|
||||
|
||||
consumerCategoryStatistics.mapCountInfoOfDate[strDate].bodyCount = nCount;
|
||||
consumerCategoryStatistics.mapCountInfoOfDate[date.toString("yyyyMM")].bodyCount += nCount;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void SCousumerStatistics::makeReplyStatistics()
|
||||
{
|
||||
for (int i=0; i < m_ReplyJsonArray.count(); i++)
|
||||
{
|
||||
QJsonObject categoryObject = m_ReplyJsonArray.at(i).toObject();
|
||||
QString strCategoryName = getCategoryNameFromJsonObject(categoryObject);
|
||||
|
||||
if (isBanCategory(strCategoryName))
|
||||
continue;
|
||||
|
||||
stConsumerCategoryStatistics& consumerCategoryStatistics = getCategory(strCategoryName);
|
||||
QJsonArray valueArray = getValueArrayFromJsonObject(categoryObject);
|
||||
for (int j=0; j < valueArray.count(); j++)
|
||||
{
|
||||
QJsonObject valueObject = valueArray.at(j).toObject();
|
||||
|
||||
QString strDate = valueObject["date"].toString();
|
||||
QDate date = QDate::fromString(strDate, "yyyyMMdd");
|
||||
int nCount = valueObject["count"].toInt();
|
||||
|
||||
consumerCategoryStatistics.mapCountInfoOfDate[strDate].replyCount = nCount;
|
||||
consumerCategoryStatistics.mapCountInfoOfDate[date.toString("yyyyMM")].replyCount += nCount;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void SCousumerStatistics::makeAllStatistics()
|
||||
{
|
||||
for (QList<stConsumerCategoryStatistics>::iterator iter = m_listConsumerCategoryStatistics.begin(); iter != m_listConsumerCategoryStatistics.end(); iter++)
|
||||
{
|
||||
stConsumerCategoryStatistics& consumerCategoryStatistics = (*iter);
|
||||
sumBodyAndReplyCount(consumerCategoryStatistics);
|
||||
}
|
||||
}
|
||||
|
||||
void SCousumerStatistics::sumBodyAndReplyCount(stConsumerCategoryStatistics& _consumerCategoryStatistics)
|
||||
{
|
||||
for (QMap<QString, stCountInfo>::iterator iter = _consumerCategoryStatistics.mapCountInfoOfDate.begin(); iter != _consumerCategoryStatistics.mapCountInfoOfDate.end(); iter++)
|
||||
{
|
||||
iter->allCount = iter->bodyCount + iter->replyCount;
|
||||
}
|
||||
}
|
||||
|
||||
stConsumerCategoryStatistics& SCousumerStatistics::getCategory(QString _strCategoryName)
|
||||
{
|
||||
if (!hasCategory(_strCategoryName))
|
||||
m_listConsumerCategoryStatistics.append(createCategory(_strCategoryName));
|
||||
|
||||
for (QList<stConsumerCategoryStatistics>::iterator iter = m_listConsumerCategoryStatistics.begin(); iter != m_listConsumerCategoryStatistics.end(); iter++)
|
||||
{
|
||||
if (iter->categoryName == _strCategoryName)
|
||||
return *iter;
|
||||
}
|
||||
}
|
||||
|
||||
bool SCousumerStatistics::hasCategory(QString _strCategoryName)
|
||||
{
|
||||
foreach (stConsumerCategoryStatistics consumerCategoryStatistics, m_listConsumerCategoryStatistics)
|
||||
{
|
||||
if (consumerCategoryStatistics.categoryName == _strCategoryName)
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
stConsumerCategoryStatistics SCousumerStatistics::createCategory(QString _strCategoryName)
|
||||
{
|
||||
stConsumerCategoryStatistics consumerCategoryStatistics;
|
||||
consumerCategoryStatistics.categoryName = _strCategoryName;
|
||||
|
||||
return consumerCategoryStatistics;
|
||||
}
|
||||
|
||||
bool SCousumerStatistics::isLastDayOfMonth(QString _strDate)
|
||||
{
|
||||
QDate date = QDate::fromString(_strDate, "yyyyMMdd");
|
||||
if (date.day() == date.daysInMonth())
|
||||
return true;
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
bool SCousumerStatistics::isBanCategory(QString _strCategoryName)
|
||||
{
|
||||
return m_listBanCategoryName.contains(_strCategoryName);
|
||||
}
|
||||
|
||||
void SCousumerStatistics::print()
|
||||
{
|
||||
foreach (stConsumerCategoryStatistics a, m_listConsumerCategoryStatistics)
|
||||
{
|
||||
QString category = a.categoryName;
|
||||
for(QMap<QString, stCountInfo>::const_iterator v = a.mapCountInfoOfDate.constBegin(); v!=a.mapCountInfoOfDate.constEnd(); v++)
|
||||
{
|
||||
QString date = v.key();
|
||||
int count = v.value().bodyCount;
|
||||
|
||||
//qDebug() << category << " : " << date << " : " << QString::number(count) << endl;
|
||||
qDebug() << QString::number(count) << QString::number(v.value().replyCount) << QString::number(v.value().allCount);
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
bool SCousumerStatistics::saveCousumerStatisticsToExcelFile(int _nCompany)
|
||||
{
|
||||
QString strFileName = QString::number(_nCompany) + "_Consumer_" + QDate::currentDate().toString("yyyyMMdd") + ".csv";
|
||||
QFile statisticsFile(strFileName);
|
||||
if (!statisticsFile.open(QFile::WriteOnly | QFile::Truncate))
|
||||
{
|
||||
//process
|
||||
return false;
|
||||
}
|
||||
|
||||
QTextStream stream(&statisticsFile);
|
||||
stream.setAutoDetectUnicode(true);
|
||||
stream << "Category Name" << "," << "All" << "," << "Body" << "," << "Reply" << "," << "Date" << "\n";
|
||||
|
||||
foreach (stConsumerCategoryStatistics consumerCategoryStatistics, m_listConsumerCategoryStatistics)
|
||||
{
|
||||
QString strCategoryName = consumerCategoryStatistics.categoryName;
|
||||
stream << strCategoryName.toUtf8();
|
||||
|
||||
QMapIterator<QString, stCountInfo> iter(consumerCategoryStatistics.mapCountInfoOfDate);
|
||||
while (iter.hasNext())
|
||||
{
|
||||
iter.next();
|
||||
stream << "," << iter.value().allCount << "," << iter.value().bodyCount << "," << iter.value().replyCount << "," << iter.key() << "\n";
|
||||
}
|
||||
}
|
||||
|
||||
statisticsFile.close();
|
||||
|
||||
return true;
|
||||
}
|
||||
Reference in New Issue
Block a user