#include "sconsumerstatistics.h" #include #include #include #include #include #include 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::iterator iter = m_listConsumerCategoryStatistics.begin(); iter != m_listConsumerCategoryStatistics.end(); iter++) { stConsumerCategoryStatistics& consumerCategoryStatistics = (*iter); sumBodyAndReplyCount(consumerCategoryStatistics); } } void SCousumerStatistics::sumBodyAndReplyCount(stConsumerCategoryStatistics& _consumerCategoryStatistics) { for (QMap::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::iterator iter = m_listConsumerCategoryStatistics.begin(); iter != m_listConsumerCategoryStatistics.end(); iter++) { if (iter->categoryName == _strCategoryName) return *iter; } static stConsumerCategoryStatistics empty; return empty; } 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::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 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; }