#pragma once #include "CommonScript.h" #include #include #include #include #include #include "db/DeviceInfo.h" #include "db/BankProfileInfo.h" namespace Ozon { class GetLastTransactionsScript final : public CommonScript { Q_OBJECT signals: // Испускается на КАЖДУЮ найденную транзакцию из списка целей. void transactionParsed(const QJsonObject &tx); public: // Снимок глобального кэша найденных транзакций (от EventHandler). // Ключи: "real_created_at|abs_amount_cents". Транзакции из этого набора // пропускаются при поиске, чтобы одна и та же TX не подтверждала два задания. void setFoundCache(const QSet &cache) { m_foundCache = cache; } public: explicit GetLastTransactionsScript( QString deviceId, QString appCode, int maxCount = 0, QList> targets = {}, QString materialId = {}, QObject *parent = nullptr ); ~GetLastTransactionsScript() override; protected: void doStart() override; private: // Навигация до экрана "Операции", возвращает true если успешно bool navigateToTransactionList(const DeviceInfo &device, const BankProfileInfo &app); // Сканирование последних транзакций (для UI: 24ч или maxCount) void scanRecentTransactions(const DeviceInfo &device, int accountId); // Поиск одной конкретной транзакции по сумме и времени (FETCH_TRANSACTIONS). // Возвращает true и эмитит transactionParsed, если нашли; false — если нет. bool searchOne(const DeviceInfo &device, int accountId, double searchAmount, const QDateTime &searchTime); // Быстрый возврат к началу списка операций (между поисками целей) void scrollListToTop(const DeviceInfo &device); QString m_deviceId; const QString m_appCode; const int m_maxCount; // 0 = фильтр по 24ч, >0 = N последних // Список целей поиска: пары (сумма в рублях со знаком, примерное время UTC). // Пустой список → режим сканирования последних (scanRecentTransactions). const QList> m_targets; const QString m_materialId; // UUID задачи (для сохранения дампов) QString m_error; QSet m_foundCache; // снимок глобального кэша (от EventHandler) }; } // namespace Ozon