You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

270 lines
8.2 KiB

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

#include "ruoyidatamanager.h"
#include <QNetworkAccessManager>
#include <QNetworkRequest>
#include <QUrlQuery>
#include <QNetworkReply>
#include <QJsonDocument>
#include <QJsonParseError>
#include <QJsonObject>
#include <QJsonArray>
#include <QEventLoop>
#include <QTimer>
RuoyiDataManager::RuoyiDataManager()
{
m_pNetworkManager = new QNetworkAccessManager;
//服务器地址
m_sUrl = "http://top.365rise.top";
}
RuoyiDataManager::~RuoyiDataManager()
{
if(m_pNetworkManager)
{
m_pNetworkManager->deleteLater();
m_pNetworkManager = nullptr;
}
}
QPixmap RuoyiDataManager::GetVerificationCode()
{
QNetworkRequest request;
QString urlStr(m_sUrl + "/prod-api/captchaImage");
QUrl url = QUrl(urlStr);
request.setUrl(url);
QNetworkReply *reply = m_pNetworkManager->get(request);
reply->setProperty("msgType",QVariant(int(GETVERIFICATIONCODE)));
connect(reply,&QNetworkReply::finished,this,&RuoyiDataManager::RequestFinished);
QEventLoop loop;
connect(this, SIGNAL(ParseReplyFinished()), &loop, SLOT(quit()));
loop.exec();
return m_userInfo.codePix;
}
UserInfo RuoyiDataManager::Login(const QString &userName, const QString &password, const QString &code)
{
m_userInfo.userName = userName;
QNetworkRequest request;
QString urlStr(m_sUrl + "/prod-api/login");
QJsonDocument doc;
QJsonObject rootObject;
rootObject.insert("username",userName);
rootObject.insert("password",password);
rootObject.insert("code",code);
rootObject.insert("uuid",m_userInfo.uuid);
doc.setObject(rootObject);
qDebug() << __FUNCTION__ << " login json: " << doc.toJson();
QUrl url = QUrl(urlStr);
request.setUrl(url);
request.setHeader(QNetworkRequest::ContentTypeHeader,"application/json;charset=UTF-8");
QNetworkReply *reply = m_pNetworkManager->post(request,doc.toJson());
reply->setProperty("msgType",QVariant(int(LOGIN)));
connect(reply,&QNetworkReply::finished,this,&RuoyiDataManager::RequestFinished);
QEventLoop loop;
connect(this, SIGNAL(ParseReplyFinished()), &loop, SLOT(quit()));
loop.exec();
return m_userInfo;
}
QList<QList<QString> > RuoyiDataManager::GetTrends(QDate date,const QString& token)
{
QNetworkRequest request;
QString urlStr(m_sUrl + "/prod-api/stocksystem/trends/listSection");
QUrl url = QUrl(urlStr);
QUrlQuery query;
query.addQueryItem("Token", token.toUtf8());
query.addQueryItem("pageNum", "1");
query.addQueryItem("pageSize", "10");
query.addQueryItem("tradeDay", "2023-12-07");
query.addQueryItem("type", "20");
url.setQuery(query);
request.setUrl(url);
request.setHeader(QNetworkRequest::ContentTypeHeader,"application/json;charset=UTF-8");
request.setRawHeader("Authorization",QString("Bearer %1").arg(token).toLocal8Bit());
qDebug() << __FUNCTION__ << " rawHeader: " << QString("Bearer %1").arg(token).toLocal8Bit();
QNetworkReply *reply = m_pNetworkManager->get(request);
reply->setProperty("msgType",QVariant(int(GETTRENDS)));
connect(reply,&QNetworkReply::finished,this,&RuoyiDataManager::RequestFinished);
QEventLoop loop;
connect(this, SIGNAL(ParseReplyFinished()), &loop, SLOT(quit()));
loop.exec();
return m_TrendsList;
}
void RuoyiDataManager::RequestFinished()
{
QNetworkReply *reply = dynamic_cast< QNetworkReply* >(sender());
MsgType type =(MsgType) reply->property("msgType").toInt();
if(type == GETVERIFICATIONCODE)
{
ParseVerificationCode(reply);
}
else if(type == LOGIN)
{
ParseLogin(reply);
}
else if(type == GETTRENDS)
{
ParseTrends(reply);
}
emit ParseReplyFinished();
}
void RuoyiDataManager::ParseVerificationCode(QNetworkReply *reply)
{
QByteArray readAllArray;
QVariant statusCode = reply->attribute(QNetworkRequest::HttpStatusCodeAttribute);
if(statusCode.isValid())
{
qDebug() << "status code=" << statusCode.toInt();
}
QNetworkReply::NetworkError err = reply->error();
if(err != QNetworkReply::NoError)
{
qDebug() << "Failed: " << reply->errorString();
}
else
{
readAllArray = reply->readAll();
QJsonParseError jsonError;
QJsonDocument document = QJsonDocument::fromJson(readAllArray,&jsonError);
if(jsonError.error == QJsonParseError::NoError && !document.isNull())
{
QJsonObject root = document.object();
if(root.contains("img"))
{
QPixmap pix;
bool ret = pix.loadFromData(QByteArray::fromBase64(root["img"].toString().toUtf8()));
m_userInfo.codePix = pix;
}
m_userInfo.uuid = root["uuid"].toString();
}
else
{
qDebug() << __FUNCTION__ << __LINE__ << jsonError.errorString();
}
}
}
void RuoyiDataManager::ParseLogin(QNetworkReply *reply)
{
QByteArray readAllArray;
QVariant statusCode = reply->attribute(QNetworkRequest::HttpStatusCodeAttribute);
if(statusCode.isValid())
{
qDebug() << "status code=" << statusCode.toInt();
}
QNetworkReply::NetworkError err = reply->error();
if(err != QNetworkReply::NoError)
{
qDebug() << "Failed: " << reply->errorString();
m_userInfo.token = "";
}
else
{
readAllArray = reply->readAll();
QJsonParseError jsonError;
QJsonDocument document = QJsonDocument::fromJson(readAllArray,&jsonError);
if(jsonError.error == QJsonParseError::NoError && !document.isNull())
{
QJsonObject root = document.object();
if(root.contains("token") && root["code"].toInt() == 200)
{
m_userInfo.token = root["token"].toString();
}
}
else
{
qDebug() << __FUNCTION__ << __LINE__ << jsonError.errorString();
m_userInfo.token = "";
}
}
}
void RuoyiDataManager::ParseTrends(QNetworkReply *reply)
{
QByteArray readAllArray;
QVariant statusCode = reply->attribute(QNetworkRequest::HttpStatusCodeAttribute);
if(statusCode.isValid())
{
qDebug() << "status code=" << statusCode.toInt();
}
QNetworkReply::NetworkError err = reply->error();
if(err != QNetworkReply::NoError)
{
qDebug() << "Failed: " << reply->errorString();
}
else
{
readAllArray = reply->readAll();
// qDebug() << __FUNCTION__ << readAllArray;
/**
* total:
* rows:[{title:2级行业,sortDataList:["煤炭","营销服务"]},{title:2023-12-07,sortDataList:["1","2"]}]
* msg:""
*
* 第0行是第一列行业title是列名
*/
QJsonParseError jsonError;
QJsonDocument document = QJsonDocument::fromJson(readAllArray,&jsonError);
if(jsonError.error == QJsonParseError::NoError && !document.isNull())
{
// QList< QList<QString> > rowsList;
QList<QString> dates;
int rowCounts = 0;
QJsonObject root = document.object();
if(root.contains("total"))
{
qDebug() << __FUNCTION__ << root["total"];
rowCounts = root["total"].toInt();
}
if(root.contains("rows"))
{
m_TrendsList.clear();
QJsonArray rows = root["rows"].toArray();
for(int i = 0 ; i < rowCounts; i++)
{
QJsonObject obj = rows[i].toObject();
if(obj.contains("title"))
{
dates.append(obj["title"].toString());
}
if(obj.contains("sortDataList"))
{
QList<QString> datasList;
QJsonArray datas = obj["sortDataList"].toArray();
for(int c = 0 ; c < datas.count(); c++)
{
datasList.append(datas[c].toString());
}
m_TrendsList.append(datasList);
}
}
m_TrendsList.prepend(dates);
}
// qDebug() << __FUNCTION__ << m_TrendsList;
}
else
{
qDebug() << __FUNCTION__ << __LINE__ << jsonError.errorString();
}
}
}