Files
clients/EffectProcess/seffectstatistics.cpp

175 lines
4.9 KiB
C++

#include "seffectstatistics.h"
#include <QSet>
#include <QDate>
#include <QDateTime>
#include <QJsonDocument>
#include <QJsonObject>
#include <QJsonValue>
#include <QJsonArray>
#include <QDebug>
int getInteractionCount(const EffectData& _data)
{
QSet<QString> set_id;
foreach (const DataForm& row, _data.reply)
{
if (_data.body.data[ARTICLE_ID].trimmed() != row.data[ARTICLE_ID].trimmed())
set_id.insert(row.data[ARTICLE_ID].trimmed());
}
return set_id.size();
}
int getReplyCount(const EffectData &_data)
{
return _data.reply.size();
}
int getlikeCount(const EffectData& _data)
{
//qDebug() << "getlikeCount:" << _data.body.data[REPLY_URL];
return _data.body.data[REPLY_URL].toInt();
}
int getViewCount(const EffectData& _data)
{
return _data.body.data[ARTICLE_HIT].trimmed().replace(",","").toInt();
}
QString getViewBuzz(const EffectData& _data)
{
QString str;
return str;
}
QString getReplyBuzz(const EffectData& _data)
{
QMap<QDate, int> mapDate;
QDate firstDate = QDateTime::fromString(_data.body.data[ARTICLE_DATE].trimmed().replace("T", " ").replace(".","-").replace("- "," "), "yyyy-MM-dd hh:mm:ss").date();
QDate lastDate = QDate::currentDate();
for (QDate date = firstDate; date <= lastDate; date = date.addDays(1))
{
mapDate.insert(date, 0);
}
foreach (auto &row, _data.reply)
{
// qDebug() << row.data[ARTICLE_DATE].trimmed();
QDate date = QDateTime::fromString(row.data[ARTICLE_DATE].trimmed().replace("T", " ").replace(".","-").replace("- "," "), "yyyy-MM-dd hh:mm:ss").date();
if (!mapDate.contains(date))
//mapDate.insert(date, 0);
continue;
mapDate[date]++;
}
QJsonArray jArray;
for (auto iter = mapDate.cbegin(); iter != mapDate.cend(); ++iter)
{
QJsonObject jObj;
jObj["date"] = iter.key().toString("MM-dd-yyyy");
jObj["value"] = iter.value();
jArray.append(jObj);
}
QJsonDocument jDoc(jArray);
QString result = jDoc.toJson(QJsonDocument::Compact);
return result;
}
QJsonArray getReplyBuzz(const EffectData& _data, const QString& _startdate)
{
QMap<QDate, int> mapDate;
QDate firstDate = QDateTime::fromString(_startdate, "yyyy-MM-dd").date();
QDate lastDate = QDate::currentDate();
for (QDate date = firstDate; date <= lastDate; date = date.addDays(1))
{
mapDate.insert(date, 0);
}
foreach (auto &row, _data.reply)
{
// qDebug() << row.data[ARTICLE_DATE].trimmed();
QDate date = QDateTime::fromString(row.data[ARTICLE_DATE].trimmed().replace("T", " ").replace(".","-").replace("- "," "), "yyyy-MM-dd hh:mm:ss").date();
if (!mapDate.contains(date))
//mapDate.insert(date, 0);
continue;
mapDate[date]++;
}
QJsonArray jArray;
int nAccReplyCount = 0;
for (auto iter = mapDate.cbegin(); iter != mapDate.cend(); ++iter)
{
int nValue = iter.value();
nAccReplyCount += nValue;
QJsonObject jObj;
jObj["date"] = iter.key().toString("yyyyMMdd");
jObj["reply_day"] = nValue;
jObj["reply_acc"] = nAccReplyCount;
jArray.append(jObj);
}
return jArray;
}
QJsonArray getLikeBuzz(const EffectData& _data, const QString& _startdate)
{
QMap<QString, int> mapDate;
QDate firstDate = QDateTime::fromString(_startdate, "yyyy-MM-dd").date();
QDate lastDate = QDate::currentDate();
for (QDate date = firstDate; date <= lastDate; date = date.addDays(1))
{
mapDate.insert(date.toString("yyyyMMdd"), 0);
}
QMapIterator<QString, int> iter(_data.like);
while (iter.hasNext())
{
iter.next();
QString date = iter.key();
mapDate[date] = iter.value();
}
QJsonArray jArray;
int nAccLikeCount = 0;
for (auto iter = mapDate.cbegin(); iter != mapDate.cend(); ++iter)
{
int nValue = iter.value();
nAccLikeCount += nValue;
QJsonObject jObj;
jObj["date"] = iter.key();
jObj["like_day"] = nValue;
jObj["like_acc"] = nAccLikeCount;
jArray.append(jObj);
}
return jArray;
}
QString summaryLikeAndReply(QJsonArray _replyBuzz, QJsonArray _likeBuzz)
{
QJsonArray jArray;
for (int i=0; i<_replyBuzz.count(); i++)
{
QJsonObject jObj;
jObj["date"] = _replyBuzz.at(i).toObject()["date"];
jObj["reply_day"] = _replyBuzz.at(i).toObject()["reply_day"];
jObj["reply_acc"] = _replyBuzz.at(i).toObject()["reply_acc"];
jObj["like_day"] = _likeBuzz.at(i).toObject()["like_day"];
jObj["like_acc"] = _likeBuzz.at(i).toObject()["like_acc"];
jArray.append(jObj);
}
QJsonDocument jDoc(jArray);
QString result = jDoc.toJson(QJsonDocument::Compact);
return result;
}