backendapimanager.cpp 5.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193
  1. #include "backendapimanager.h"
  2. #include <QEventLoop>
  3. backendAPIManager *backendAPIManager::s_instance = nullptr;
  4. void backendAPIManager::initialize(const QString &backendUrl)
  5. {
  6. if (!s_instance)
  7. {
  8. s_instance = new backendAPIManager(backendUrl);
  9. }
  10. }
  11. void backendAPIManager::cleanup()
  12. {
  13. if (s_instance)
  14. {
  15. delete s_instance;
  16. s_instance = nullptr;
  17. }
  18. }
  19. void backendAPIManager::setAuthToken(const QString &token)
  20. {
  21. qDebug() << "Setting auth token:" << token << s_instance;
  22. if (s_instance)
  23. {
  24. s_instance->authToken = token;
  25. }
  26. }
  27. backendAPIManager::backendAPIManager(const QString &backendUrl, QObject *parent)
  28. : QObject(parent), backendUrl(backendUrl), requestSuccess(false)
  29. {
  30. networkManager = new QNetworkAccessManager(this);
  31. }
  32. backendAPIManager::~backendAPIManager()
  33. {
  34. if (networkManager)
  35. {
  36. delete networkManager;
  37. networkManager = nullptr;
  38. }
  39. }
  40. void backendAPIManager::setupRequest(QNetworkRequest &request, const QString &endpoint)
  41. {
  42. request.setUrl(QUrl(backendUrl + endpoint));
  43. request.setHeader(QNetworkRequest::ContentTypeHeader, "application/json");
  44. if (!s_instance->authToken.isEmpty())
  45. {
  46. request.setRawHeader("Authorization", s_instance->authToken.toUtf8());
  47. }
  48. }
  49. QNetworkReply *backendAPIManager::sendRequest(const QString &endpoint,
  50. const QJsonObject &data,
  51. const QString &method)
  52. {
  53. QNetworkRequest request;
  54. setupRequest(request, endpoint);
  55. QJsonDocument doc(data);
  56. QByteArray jsonData = doc.toJson();
  57. QNetworkReply *reply = nullptr;
  58. if (method == "GET")
  59. {
  60. reply = networkManager->get(request);
  61. }
  62. else if (method == "POST")
  63. {
  64. reply = networkManager->post(request, jsonData);
  65. }
  66. else if (method == "PUT")
  67. {
  68. reply = networkManager->put(request, jsonData);
  69. }
  70. else if (method == "DELETE")
  71. {
  72. reply = networkManager->deleteResource(request);
  73. }
  74. return reply;
  75. }
  76. bool backendAPIManager::uploadBlastProject(const QJsonObject &projectData)
  77. {
  78. if (!s_instance)
  79. return false;
  80. s_instance->requestSuccess = false;
  81. QNetworkReply *reply = s_instance->sendRequest("blastrecord/pc", projectData, "POST");
  82. // 使用事件循环等待响应
  83. QEventLoop loop;
  84. QObject::connect(reply, &QNetworkReply::finished, &loop, &QEventLoop::quit);
  85. loop.exec();
  86. if (reply->error() == QNetworkReply::NoError)
  87. {
  88. QJsonDocument response = QJsonDocument::fromJson(reply->readAll());
  89. qDebug() << "Upload response:" << response;
  90. s_instance->handleUploadFinished(response, reply->url());
  91. }
  92. else
  93. {
  94. qDebug() << "Upload error:" << reply->errorString();
  95. s_instance->handleUploadError(reply->errorString());
  96. }
  97. reply->deleteLater();
  98. qDebug() << "Uploading blast project data:" << projectData << "result" << s_instance->requestSuccess;
  99. return s_instance->requestSuccess;
  100. }
  101. bool backendAPIManager::uploadBlastDet(const QJsonObject &detsData)
  102. {
  103. if (!s_instance)
  104. return false;
  105. s_instance->requestSuccess = false;
  106. QNetworkReply *reply = s_instance->sendRequest("/blastrecorddet", detsData, "POST");
  107. // 使用事件循环等待响应
  108. QEventLoop loop;
  109. QObject::connect(reply, &QNetworkReply::finished, &loop, &QEventLoop::quit);
  110. loop.exec();
  111. if (reply->error() == QNetworkReply::NoError)
  112. {
  113. QJsonDocument response = QJsonDocument::fromJson(reply->readAll());
  114. s_instance->handleUploadFinished(response, reply->url());
  115. }
  116. else
  117. {
  118. s_instance->handleUploadError(reply->errorString());
  119. }
  120. reply->deleteLater();
  121. return s_instance->requestSuccess;
  122. }
  123. bool backendAPIManager::uploadBlastEquipments(const QJsonObject &regDetsData)
  124. {
  125. if (!s_instance)
  126. return false;
  127. s_instance->requestSuccess = false;
  128. QNetworkReply *reply = s_instance->sendRequest("/blastrecorddet", regDetsData, "POST");
  129. // 使用事件循环等待响应
  130. QEventLoop loop;
  131. QObject::connect(reply, &QNetworkReply::finished, &loop, &QEventLoop::quit);
  132. loop.exec();
  133. if (reply->error() == QNetworkReply::NoError)
  134. {
  135. QJsonDocument response = QJsonDocument::fromJson(reply->readAll());
  136. s_instance->handleUploadFinished(response, reply->url());
  137. }
  138. else
  139. {
  140. s_instance->handleUploadError(reply->errorString());
  141. }
  142. reply->deleteLater();
  143. return s_instance->requestSuccess;
  144. }
  145. void backendAPIManager::handleUploadFinished(const QJsonDocument &response, const QUrl &url)
  146. {
  147. // Check response status
  148. if (response.object().contains("code"))
  149. {
  150. int code = response.object()["code"].toInt();
  151. requestSuccess = (code == 200);
  152. }
  153. else
  154. {
  155. requestSuccess = false;
  156. }
  157. emit uploadFinished(response);
  158. }
  159. void backendAPIManager::handleUploadError(const QString &error)
  160. {
  161. requestSuccess = false;
  162. emit uploadError(error);
  163. }