|
|
@@ -13,33 +13,36 @@
|
|
|
namespace TC {
|
|
|
|
|
|
extern std::optional<QJsonValue> sendRequest(QNetworkAccessManager::Operation op,
|
|
|
- const QString &url,
|
|
|
- const QByteArray &postData);
|
|
|
+ const QString &url,
|
|
|
+ const QByteArray &postData);
|
|
|
+
|
|
|
+extern std::optional<QJsonValue> sendRawRequest(QNetworkAccessManager::Operation op,
|
|
|
+ const QString &url,
|
|
|
+ const QByteArray &postData);
|
|
|
|
|
|
GradesUpdate::GradesUpdate()
|
|
|
: QObject()
|
|
|
- , url("/score-api/grades/update")
|
|
|
+ , url("/score-api/grades/create")
|
|
|
{}
|
|
|
|
|
|
-GradesUpdate::GradesUpdate(const QString &answerFileName,
|
|
|
- const QString &checkinNumber,
|
|
|
- int endTime,
|
|
|
- const QString &examRoom,
|
|
|
- const QString &examSessions,
|
|
|
- const QString &examText,
|
|
|
- const QString &examineNumber,
|
|
|
- const QString &groupName,
|
|
|
- const QString &id,
|
|
|
- const QString &name,
|
|
|
- int onlineStatus,
|
|
|
- const QString &schoolAddress,
|
|
|
- const QString &schoolName,
|
|
|
- int sex,
|
|
|
- int startTime,
|
|
|
- int status,
|
|
|
- const QString &swId)
|
|
|
+GradesUpdate::GradesUpdate(const QString &answerFileName,
|
|
|
+ const QString &checkinNumber,
|
|
|
+ int endTime,
|
|
|
+ const QString &examRoom,
|
|
|
+ const QString &examSessions,
|
|
|
+ const QString &examText,
|
|
|
+ const QString &examineNumber,
|
|
|
+ const QString &groupName,
|
|
|
+ const QString &name,
|
|
|
+ int onlineStatus,
|
|
|
+ const QString &schoolAddress,
|
|
|
+ const QString &schoolName,
|
|
|
+ int sex,
|
|
|
+ int startTime,
|
|
|
+ int status,
|
|
|
+ const QString &swId)
|
|
|
: QObject()
|
|
|
- , url("/score-api/grades/update")
|
|
|
+ , url("/score-api/grades/create")
|
|
|
{
|
|
|
QJsonObject json;
|
|
|
json["answerFileName"] = answerFileName;
|
|
|
@@ -50,7 +53,6 @@ GradesUpdate::GradesUpdate(const QString &answerFileName,
|
|
|
json["examText"] = examText;
|
|
|
json["examineNumber"] = examineNumber;
|
|
|
json["groupName"] = groupName;
|
|
|
- json["id"] = id;
|
|
|
json["name"] = name;
|
|
|
json["onlineStatus"] = onlineStatus;
|
|
|
json["schoolAddress"] = schoolAddress;
|
|
|
@@ -90,4 +92,75 @@ GradesUpdate::Data GradesUpdate::post()
|
|
|
return ret;
|
|
|
}
|
|
|
|
|
|
+// 添加异步版本的 post 方法
|
|
|
+void GradesUpdate::postAsync(std::function<void(const Data&)> callback, int maxRetries)
|
|
|
+{
|
|
|
+ // 创建任务并添加到线程池
|
|
|
+ std::shared_ptr<GradesUpdateTask> task = std::make_shared<GradesUpdateTask>(url, postData, callback);
|
|
|
+ task->setMaxRetries(maxRetries);
|
|
|
+ RequestThreadPool::instance()->addTask(task);
|
|
|
+}
|
|
|
+
|
|
|
+// GradesUpdateTask 实现
|
|
|
+GradesUpdateTask::GradesUpdateTask(const QString &url, const QByteArray &postData, std::function<void(const GradesUpdate::Data&)> callback)
|
|
|
+ : m_url(url)
|
|
|
+ , m_postData(postData)
|
|
|
+ , m_callback(callback)
|
|
|
+{
|
|
|
+}
|
|
|
+
|
|
|
+void GradesUpdateTask::run()
|
|
|
+{
|
|
|
+ // 执行请求
|
|
|
+ std::optional<QJsonValue> data = sendRawRequest(QNetworkAccessManager::PostOperation,
|
|
|
+ m_url,
|
|
|
+ m_postData);
|
|
|
+
|
|
|
+ GradesUpdate::Data ret;
|
|
|
+ ret.success = false;
|
|
|
+ ret.message = "Failed to update grades";
|
|
|
+
|
|
|
+ bool success = false;
|
|
|
+
|
|
|
+ if (data.has_value()) {
|
|
|
+ const QJsonObject &object = data.value().toObject();
|
|
|
+ qDebug() << object << object.isEmpty() << object.empty();
|
|
|
+
|
|
|
+ if (object.contains("code")) {
|
|
|
+ int code = object.value("code").toInt();
|
|
|
+ if (code == 0) {
|
|
|
+ ret.success = true;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if (object.contains("msg")) {
|
|
|
+ ret.message = object.value("msg").toString();
|
|
|
+ }
|
|
|
+
|
|
|
+ // 如果成功,触发考试更新事件
|
|
|
+ if (ret.success) {
|
|
|
+ AppEvent::instance()->examsTestUpdate();
|
|
|
+ success = true;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ // 调用回调函数
|
|
|
+ if (m_callback) {
|
|
|
+ m_callback(ret);
|
|
|
+ }
|
|
|
+
|
|
|
+ // 发送任务完成信号
|
|
|
+ emit taskCompleted(success);
|
|
|
+
|
|
|
+ // 如果失败,发送失败信号,可能会触发重试
|
|
|
+ if (!success) {
|
|
|
+ emit taskFailed();
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+bool GradesUpdateTask::retry()
|
|
|
+{
|
|
|
+ // 这里可以添加重试前的准备工作,如果需要的话
|
|
|
+ return true; // 返回 true 表示可以重试
|
|
|
+}
|
|
|
+
|
|
|
} // namespace TC
|