#include "backendapimanager.h" #include #include #include #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()) { QJsonValue value = data.value(key); if (value.isString()) { query.addQueryItem(key, value.toString()); } else if (value.isDouble()) { query.addQueryItem(key, QString::number(value.toDouble())); } else if (value.isBool()) { query.addQueryItem(key, value.toBool() ? "true" : "false"); } else if (value.isArray()) { // 处理数组参数,将数组元素作为多个同名参数 QJsonArray array = value.toArray(); for (const QJsonValue &arrayValue : array) { query.addQueryItem(key, arrayValue.toString()); } } else { // 对于其他复杂类型,转换为JSON字符串 QJsonDocument doc; if (value.isObject()) { doc.setObject(value.toObject()); } else { doc.setArray(value.toArray()); } query.addQueryItem(key, doc.toJson(QJsonDocument::Compact)); } } url.setQuery(query); request.setUrl(url); qDebug() << "GET request URL:" << url.toString(); } 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::getSafetyInspect(QString dateStr) { if (!s_instance) return QJsonObject(); s_instance->requestSuccess = false; QJsonObject params; params.insert("page", 1); params.insert("pageSize", 1); params.insert("dutyDate", dateStr); QNetworkReply *reply = s_instance->sendRequest("h-safety-inspect", 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()); if (response.object()["code"].toInt() != 200) { return QJsonObject(); } result = response.object()["data"].toObject()["list"].toArray().first().toObject(); } reply->deleteLater(); return result; } QJsonObject backendAPIManager::getBlastRecords(int page, int pageSize, QJsonObject params) { if (!s_instance) return QJsonObject(); s_instance->requestSuccess = false; params.insert("page", QString::number(page)); params.insert("pageSize", QString::number(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; } QJsonObject backendAPIManager::getHProjects(int page, int pageSize, QJsonObject extParams) { if (!s_instance) return QJsonObject(); QJsonObject params{ {"page", page}, {"pageSize", pageSize}, {"createdAtOrder", "DESC"}, }; for (const QString &key : extParams.keys()) { params.insert(key, extParams.value(key)); } QNetworkReply *reply = s_instance->sendRequest("h-project", 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(); } reply->deleteLater(); return result; } QJsonArray backendAPIManager::getSysUsers() { if (!s_instance) return QJsonArray(); QJsonObject params = QJsonObject(); params.insert("page", "1"); params.insert("pageSize", "200"); // Assuming a reasonable page size for initial QNetworkReply *reply = s_instance->sendRequest("sys-user", 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"].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; } void backendAPIManager::handleResponseOKFinished(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); }