From 73461b93bfeded8aa28fc0f28fe5ab58f4b13a39 Mon Sep 17 00:00:00 2001 From: slava Date: Mon, 6 Apr 2026 20:57:48 +0700 Subject: [PATCH] - Add OCR-based fallback logic to extract `bankTrExternalId` in `GetLastTransactionsScript` when missing. - Copy required images, trained data, and config files to the build directory during the CMake process. --- CMakeLists.txt | 8 ++++++ android/ozon/GetLastTransactionsScript.cpp | 32 ++++++++++++++++++++++ 2 files changed, 40 insertions(+) diff --git a/CMakeLists.txt b/CMakeLists.txt index 8d4266a..3e7e9ee 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -221,6 +221,14 @@ elseif (APPLE) tesseract leptonica ) + + # Копирование изображений в директорию сборки + file(COPY "${CMAKE_CURRENT_SOURCE_DIR}/tutorials" DESTINATION "${CMAKE_BINARY_DIR}") + file(COPY "${CMAKE_CURRENT_SOURCE_DIR}/images" DESTINATION "${CMAKE_BINARY_DIR}") + file(COPY "${CMAKE_CURRENT_SOURCE_DIR}/rus.traineddata" DESTINATION "${CMAKE_BINARY_DIR}") + file(COPY "${CMAKE_CURRENT_SOURCE_DIR}/eng.traineddata" DESTINATION "${CMAKE_BINARY_DIR}") + file(COPY "${CMAKE_CURRENT_SOURCE_DIR}/config.ini" DESTINATION "${CMAKE_BINARY_DIR}") + file(COPY "${CMAKE_CURRENT_SOURCE_DIR}/no_devices.png" DESTINATION "${CMAKE_BINARY_DIR}") endif () target_include_directories(ARC PRIVATE diff --git a/android/ozon/GetLastTransactionsScript.cpp b/android/ozon/GetLastTransactionsScript.cpp index 73a11a4..7b80735 100644 --- a/android/ozon/GetLastTransactionsScript.cpp +++ b/android/ozon/GetLastTransactionsScript.cpp @@ -401,6 +401,38 @@ void GetLastTransactionsScript::scanRecentTransactions(const DeviceInfo &device, tx.bankName = m_appCode; tx.bankTime = detail.bankTime; tx.bankTrExternalId = detail.bankTrExternalId; + + // Если ID не найден в XML — пробуем через "Документы" + OCR + if (tx.bankTrExternalId.isEmpty()) { + Node docBtn = xmlScreenParser.findButtonNode("Документы", false); + if (!docBtn.isEmpty()) { + AdbUtils::makeTap(m_deviceId, docBtn.x(), docBtn.y()); + QThread::msleep(2000); + bool docLoaded = false; + for (int da = 0; da < 15; ++da) { + xmlScreenParser.parseAndSaveXml(AdbUtils::getScreenDumpAsXml(m_deviceId, ++m_counter)); + if (!xmlScreenParser.findNodeByContentDesc("Поделиться").isEmpty()) { + docLoaded = true; + break; + } + QThread::msleep(1500); + } + if (docLoaded) { + QThread::msleep(500); + const QByteArray screenshot = AdbUtils::captureScreenshotBytes(m_deviceId); + if (!screenshot.isEmpty()) { + const QString ocrText = recognizeTextFromImage(screenshot); + if (!ocrText.isEmpty()) { + tx.bankTrExternalId = extractTransactionId(ocrText); + qDebug() << "[GetLastTransactions] OCR extracted ID:" << tx.bankTrExternalId; + } + } + } + AdbUtils::goBack(m_deviceId); + QThread::msleep(1000); + } + } + tx.status = TransactionStatus::Complete; tx.timestamp = DateUtils::getUtcNow(); if (!detail.name.isEmpty()) tx.name = detail.name;