175 lines
4.9 KiB
C++
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;
|
|
}
|