diff --git a/android/ozon/GetLastTransactionsScript.cpp b/android/ozon/GetLastTransactionsScript.cpp index cab1361..3176d22 100644 --- a/android/ozon/GetLastTransactionsScript.cpp +++ b/android/ozon/GetLastTransactionsScript.cpp @@ -358,12 +358,25 @@ void GetLastTransactionsScript::searchTransaction(const DeviceInfo &device, int if (!txTime.isValid()) txTime = QDateTime::fromString(dtStr, "dd.MM.yyyy,HH:mm"); if (txTime.isValid()) txTime.setTimeZone(msk); - // Проверяем что дата совпадает (тот же день) - if (txTime.isValid() && txTime.date() != searchDate) { - qDebug() << "[FetchTransactions] Wrong date:" << dtStr << "expected" << searchDate; - AdbUtils::goBack(m_deviceId); - QThread::msleep(1000); - continue; + // Проверяем что дата и время совпадают (±1 час от m_searchTime) + if (txTime.isValid()) { + if (txTime.date() != searchDate) { + qDebug() << "[FetchTransactions] Wrong date:" << dtStr << "expected" << searchDate; + AdbUtils::goBack(m_deviceId); + QThread::msleep(1000); + continue; + } + if (m_searchTime.isValid()) { + const qint64 diffSecs = qAbs(txTime.toUTC().secsTo(m_searchTime.toUTC())); + if (diffSecs > 3600) { + qDebug() << "[FetchTransactions] Time mismatch:" << dtStr + << "expected" << searchMsk.toString("dd.MM.yyyy, HH:mm") + << "diff=" << diffSecs << "sec"; + AdbUtils::goBack(m_deviceId); + QThread::msleep(1000); + continue; + } + } } // Нашли! diff --git a/main.cpp b/main.cpp index 3196866..c445940 100644 --- a/main.cpp +++ b/main.cpp @@ -103,7 +103,7 @@ void startEventHandler(const QCoreApplication &app) { QObject::connect(eventHandler, &EventHandler::finished, eventHandler, &QObject::deleteLater); QObject::connect(thread, &QThread::finished, thread, &QThread::deleteLater); QObject::connect(&app, &QCoreApplication::aboutToQuit, [=]() { - eventHandler->stop(); + QMetaObject::invokeMethod(eventHandler, "stop", Qt::BlockingQueuedConnection); }); thread->start(); } diff --git a/services/DeviceScreener.cpp b/services/DeviceScreener.cpp index c85f90c..ba8a707 100644 --- a/services/DeviceScreener.cpp +++ b/services/DeviceScreener.cpp @@ -455,6 +455,8 @@ QByteArray DeviceScreener::takeScreenshot(const QString &deviceId) { if (!process.waitForFinished(5000)) { qWarning() << "ADB скриншот не завершился для" << deviceId; + process.kill(); + process.waitForFinished(1000); return {}; } @@ -477,7 +479,12 @@ QList > DeviceScreener::readAdbDevices() { qWarning() << "[DeviceScreener] Failed to start adb devices:" << process.errorString(); return {}; } - process.waitForFinished(10000); + if (!process.waitForFinished(10000)) { + qWarning() << "[DeviceScreener] adb devices timeout"; + process.kill(); + process.waitForFinished(1000); + return {}; + } const QString output = process.readAllStandardOutput(); QList > devices; diff --git a/services/EventHandler.cpp b/services/EventHandler.cpp index 5edb27e..b5b647d 100644 --- a/services/EventHandler.cpp +++ b/services/EventHandler.cpp @@ -281,26 +281,35 @@ void EventHandler::updateEventThread(const QString &key, const EventInfo &event, QJsonValue taskData; if (event.type == EventType::FetchProfile) { - // Отправляем суммы всех материалов устройства для этого банка - const QList allAccounts = MaterialDAO::getAccounts(event.deviceId, event.bankName); - if (!allAccounts.isEmpty()) { - QJsonArray accountsArr; - for (const auto &acc : allAccounts) { - const int accCurrency = currencyCodes.value(acc.currency.toUpper(), 643); - QJsonObject accObj; - accObj["bank_account_id"] = acc.materialId; - accObj["amount"] = static_cast(acc.amount * 100); - accObj["currency"] = accCurrency; - accountsArr.append(accObj); - } - taskData = accountsArr; - } else { + if (event.bankName == "ozon") { EventDAO::updateEventAmount(event.id, account.amount); QJsonObject obj; obj["bank_account_id"] = account.materialId; obj["amount"] = static_cast(account.amount * 100); obj["currency"] = currencyCode; taskData = obj; + } else { + // Отправляем суммы всех материалов устройства для этого банка + const QList allAccounts = MaterialDAO::getAccounts(event.deviceId, event.bankName); + if (!allAccounts.isEmpty()) { + QJsonArray accountsArr; + for (const auto &acc : allAccounts) { + const int accCurrency = currencyCodes.value(acc.currency.toUpper(), 643); + QJsonObject accObj; + accObj["bank_account_id"] = acc.materialId; + accObj["amount"] = static_cast(acc.amount * 100); + accObj["currency"] = accCurrency; + accountsArr.append(accObj); + } + taskData = accountsArr; + } else { + EventDAO::updateEventAmount(event.id, account.amount); + QJsonObject obj; + obj["bank_account_id"] = account.materialId; + obj["amount"] = static_cast(account.amount * 100); + obj["currency"] = currencyCode; + taskData = obj; + } } } else if (event.type == EventType::FetchTransactions) { QList txList = TransactionDAO::getTransactionsWithinHours(event.accountId, 24);