123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273 |
- #include "backendapimanager.h"
- #include <QtCore/qlogging.h>
- #include <QEventLoop>
- #include <QUrlQuery>
- #include "logger.h"
- backendAPIManager *backendAPIManager::s_instance = nullptr;
- void backendAPIManager::initialize(const QString &backendUrl) {
- if (!s_instance) {
- s_instance = new backendAPIManager(backendUrl);
- }
- }
- void backendAPIManager::cleanup() {
- if (s_instance) {
- delete s_instance;
- s_instance = nullptr;
- }
- }
- void backendAPIManager::setAuthToken(const QString &token) {
- if (s_instance) {
- s_instance->authToken = token;
- }
- }
- backendAPIManager::backendAPIManager(const QString &backendUrl, QObject *parent)
- : QObject(parent), backendUrl(backendUrl), requestSuccess(false) {
- networkManager = new QNetworkAccessManager(this);
- }
- backendAPIManager::~backendAPIManager() {
- if (networkManager) {
- delete networkManager;
- networkManager = nullptr;
- }
- }
- void backendAPIManager::setupRequest(QNetworkRequest &request, const QString &endpoint) {
- request.setUrl(QUrl(backendUrl + endpoint));
- request.setHeader(QNetworkRequest::ContentTypeHeader, "application/json");
- if (!s_instance->authToken.isEmpty()) {
- request.setRawHeader("Authorization", s_instance->authToken.toUtf8());
- }
- }
- QNetworkReply *backendAPIManager::sendRequest(const QString &endpoint, const QJsonObject &data, const QString &method) {
- QNetworkRequest request;
- setupRequest(request, endpoint);
- QJsonDocument doc(data);
- QByteArray jsonData = doc.toJson();
- QNetworkReply *reply = nullptr;
- if (method == "GET") {
- if (!data.isEmpty()) {
- QUrl url = request.url();
- QUrlQuery query;
- for (const QString &key : data.keys()) {
- query.addQueryItem(key, data.value(key).toString());
- }
- url.setQuery(query);
- request.setUrl(url);
- }
- reply = networkManager->get(request);
- } else if (method == "POST") {
- reply = networkManager->post(request, jsonData);
- } else if (method == "PUT") {
- reply = networkManager->put(request, jsonData);
- } else if (method == "DELETE") {
- reply = networkManager->deleteResource(request);
- }
- return reply;
- }
- QJsonObject backendAPIManager::getBlastRecords(int page, int pageSize, QJsonObject params) {
- if (!s_instance) return QJsonObject();
- s_instance->requestSuccess = false;
- params.insert("page", page);
- params.insert("pageSize", pageSize);
- QNetworkReply *reply = s_instance->sendRequest("blastrecord", params, "GET");
- QEventLoop loop;
- QObject::connect(reply, &QNetworkReply::finished, &loop, &QEventLoop::quit);
- loop.exec();
- QJsonObject result;
- if (reply->error() == QNetworkReply::NoError) {
- QJsonDocument response = QJsonDocument::fromJson(reply->readAll());
- result = response.object()["data"].toObject();
- }
- reply->deleteLater();
- return result;
- }
- // TODO: not use any more 上传爆破记录完整记录. 包含设备和雷管记录
- bool backendAPIManager::uploadBlastProjectFull(const QJsonObject &projectData) {
- if (!s_instance) return false;
- s_instance->requestSuccess = false;
- QNetworkReply *reply = s_instance->sendRequest("blastrecord/pc", projectData, "POST");
- // 使用事件循环等待响应
- QEventLoop loop;
- QObject::connect(reply, &QNetworkReply::finished, &loop, &QEventLoop::quit);
- loop.exec();
- if (reply->error() == QNetworkReply::NoError) {
- QJsonDocument response = QJsonDocument::fromJson(reply->readAll());
- s_instance->handleReponseOKFinished(response, reply->url());
- } else {
- Logger::getInstance().error(QString("UploadBlastProjectFull request failed. uuid: %1 error message: %2")
- .arg(projectData.value("uuid").toString())
- .arg(reply->errorString()));
- s_instance->handleResponseError(reply->errorString());
- }
- reply->deleteLater();
- return s_instance->requestSuccess;
- }
- QJsonArray backendAPIManager::getSysUsers() {
- if (!s_instance) return QJsonArray();
- QNetworkReply *reply = s_instance->sendRequest("sys-user", QJsonObject(), "GET");
- QEventLoop loop;
- QObject::connect(reply, &QNetworkReply::finished, &loop, &QEventLoop::quit);
- loop.exec();
- QJsonArray result;
- if (reply->error() == QNetworkReply::NoError) {
- QJsonDocument response = QJsonDocument::fromJson(reply->readAll());
- result = response.object()["data"].toObject()["list"].toArray();
- }
- reply->deleteLater();
- return result;
- }
- QJsonArray backendAPIManager::getDailyBlastedCount(int days) {
- if (!s_instance) return QJsonArray();
- QJsonObject params;
- params.insert("days", QString::number(days));
- QNetworkReply *reply = s_instance->sendRequest("blastrecord/daily_counts", params, "GET");
- QEventLoop loop;
- QObject::connect(reply, &QNetworkReply::finished, &loop, &QEventLoop::quit);
- loop.exec();
- QJsonArray result;
- if (reply->error() == QNetworkReply::NoError) {
- QJsonDocument response = QJsonDocument::fromJson(reply->readAll());
- result = response.object()["data"].toArray();
- } else {
- Logger::getInstance().error(
- QString("GetDailyBlastedCount request failed. error message: %1").arg(reply->errorString()));
- }
- reply->deleteLater();
- return result;
- }
- QJsonArray backendAPIManager::getHAddresses() {
- if (!s_instance) return QJsonArray();
- QNetworkReply *reply = s_instance->sendRequest("h-address/pc", QJsonObject(), "GET");
- QEventLoop loop;
- QObject::connect(reply, &QNetworkReply::finished, &loop, &QEventLoop::quit);
- loop.exec();
- QJsonArray result;
- if (reply->error() == QNetworkReply::NoError) {
- QJsonDocument response = QJsonDocument::fromJson(reply->readAll());
- result = response.object()["data"].toArray();
- }
- reply->deleteLater();
- return result;
- }
- bool backendAPIManager::uploadBlastProject(const QJsonObject &projectData) {
- if (!s_instance) return false;
- s_instance->requestSuccess = false;
- QNetworkReply *reply = s_instance->sendRequest("blastrecord", projectData, "POST");
- // 使用事件循环等待响应
- QEventLoop loop;
- QObject::connect(reply, &QNetworkReply::finished, &loop, &QEventLoop::quit);
- loop.exec();
- if (reply->error() == QNetworkReply::NoError) {
- QJsonDocument response = QJsonDocument::fromJson(reply->readAll());
- s_instance->handleReponseOKFinished(response, reply->url());
- } else {
- s_instance->handleResponseError(reply->errorString());
- }
- reply->deleteLater();
- return s_instance->requestSuccess;
- }
- bool backendAPIManager::uploadBlastProjectDets(const QJsonObject &detsData) {
- if (!s_instance) return false;
- s_instance->requestSuccess = false;
- QNetworkReply *reply = s_instance->sendRequest("blastrecorddet/batch", detsData, "POST");
- // 使用事件循环等待响应
- QEventLoop loop;
- QObject::connect(reply, &QNetworkReply::finished, &loop, &QEventLoop::quit);
- loop.exec();
- if (reply->error() == QNetworkReply::NoError) {
- QJsonDocument response = QJsonDocument::fromJson(reply->readAll());
- s_instance->handleReponseOKFinished(response, reply->url());
- } else {
- s_instance->handleResponseError(reply->errorString());
- }
- reply->deleteLater();
- return s_instance->requestSuccess;
- }
- bool backendAPIManager::uploadBlastEquipments(const QJsonObject ®DetsData) {
- if (!s_instance) return false;
- s_instance->requestSuccess = false;
- QNetworkReply *reply = s_instance->sendRequest("blastrecordequipment", regDetsData, "POST");
- // 使用事件循环等待响应
- QEventLoop loop;
- QObject::connect(reply, &QNetworkReply::finished, &loop, &QEventLoop::quit);
- loop.exec();
- if (reply->error() == QNetworkReply::NoError) {
- QJsonDocument response = QJsonDocument::fromJson(reply->readAll());
- s_instance->handleReponseOKFinished(response, reply->url());
- } else {
- s_instance->handleResponseError(reply->errorString());
- }
- reply->deleteLater();
- return s_instance->requestSuccess;
- }
- void backendAPIManager::handleReponseOKFinished(const QJsonDocument &response, const QUrl &url) {
- // Check response status
- if (response.object().contains("code")) {
- int code = response.object()["code"].toInt();
- requestSuccess = (code == 200);
- } else {
- requestSuccess = false;
- }
- emit uploadFinished(response);
- }
- void backendAPIManager::handleResponseError(const QString &error) {
- requestSuccess = false;
- emit uploadError(error);
- }
|