Daily commit
This commit is contained in:
parent
cd4d6c7e89
commit
ea986addb7
@ -190,14 +190,20 @@ bool CommonScript::goToAllProducts(
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool CommonScript::readTransactionData() {
|
bool CommonScript::findAndTapOnAccount(const QString &deviceId, const QString &accountNumbers) {
|
||||||
|
QList<QPair<AccountInfo, Node> > accounts = xmlScreenParser.parseAccountsInfo();
|
||||||
|
for (auto &[account, node]: accounts) {
|
||||||
|
// FIXME будем считать что числа последние везде уникальные
|
||||||
|
if (accountNumbers == account.lastNumbers) {
|
||||||
|
qDebug() << "findAndTapOnAccount: " << accountNumbers;
|
||||||
|
AdbUtils::makeTap(deviceId, node.x(), node.y());
|
||||||
|
QThread::msleep(1000);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
// 1. топаем на домашнюю
|
|
||||||
// 2. распарсить мои карты и вернуть данные
|
|
||||||
// 3. синхронизировать историю транзакций (с домашней)
|
|
||||||
|
|
||||||
|
|
||||||
void CommonScript::stop() {
|
void CommonScript::stop() {
|
||||||
m_running = false;
|
m_running = false;
|
||||||
|
|||||||
@ -23,6 +23,8 @@ protected:
|
|||||||
int height
|
int height
|
||||||
);
|
);
|
||||||
|
|
||||||
|
bool findAndTapOnAccount(const QString &deviceId, const QString &accountNumbers);
|
||||||
|
|
||||||
Node swipeToButton(
|
Node swipeToButton(
|
||||||
const QString &deviceId,
|
const QString &deviceId,
|
||||||
const QString &text,
|
const QString &text,
|
||||||
@ -41,14 +43,13 @@ protected:
|
|||||||
const QString &deviceId, int width, int height
|
const QString &deviceId, int width, int height
|
||||||
);
|
);
|
||||||
|
|
||||||
bool readTransactionData();
|
|
||||||
|
|
||||||
bool m_running = true;
|
bool m_running = true;
|
||||||
ScreenXmlParser xmlScreenParser;
|
ScreenXmlParser xmlScreenParser;
|
||||||
int m_counter = 0;
|
int m_counter = 0;
|
||||||
|
|
||||||
signals:
|
signals:
|
||||||
void finished();
|
void finished();
|
||||||
|
void finishedWithResult(const QString &result);
|
||||||
|
|
||||||
public slots:
|
public slots:
|
||||||
virtual void start() final;
|
virtual void start() final;
|
||||||
|
|||||||
@ -2,16 +2,13 @@
|
|||||||
|
|
||||||
#include <QRandomGenerator>
|
#include <QRandomGenerator>
|
||||||
#include <QThread>
|
#include <QThread>
|
||||||
#include <QTimeZone>
|
|
||||||
#include <utility>
|
#include <utility>
|
||||||
|
|
||||||
#include "DatabaseManager.h"
|
#include "DatabaseManager.h"
|
||||||
#include "adb/AdbUtils.h"
|
#include "adb/AdbUtils.h"
|
||||||
#include "dao/AccountDAO.h"
|
#include "dao/AccountDAO.h"
|
||||||
#include "dao/ApplicationDAO.h"
|
|
||||||
#include "dao/DeviceDAO.h"
|
#include "dao/DeviceDAO.h"
|
||||||
#include "dao/TransactionDAO.h"
|
#include "dao/TransactionDAO.h"
|
||||||
#include "db/ApplicationInfo.h"
|
|
||||||
#include "db/DeviceInfo.h"
|
#include "db/DeviceInfo.h"
|
||||||
#include "time/DateUtils.h"
|
#include "time/DateUtils.h"
|
||||||
|
|
||||||
@ -33,11 +30,19 @@ QList<TransactionInfo> findSavedTransaction(
|
|||||||
|
|
||||||
for (const TransactionInfo &info: transactions) {
|
for (const TransactionInfo &info: transactions) {
|
||||||
QDateTime timestamp = info.timestamp;
|
QDateTime timestamp = info.timestamp;
|
||||||
|
QString shortDescription = parsed.shortDescription;
|
||||||
// если тот же день
|
// если тот же день
|
||||||
if (dateTime.date() == timestamp.date() && parsed.amount == info.amount) {
|
if (dateTime.date() == timestamp.date() && parsed.amount == info.amount) {
|
||||||
// Перевод Надежда Юрьевна К** в Альфа-Банк через СБП, по номеру телефона +79641815...
|
// Перевод Надежда Юрьевна К** в Альфа-Банк через СБП, по номеру телефона +79641815...
|
||||||
if (parsed.shortDescription.contains(info.name)) {
|
if (shortDescription.contains("Перевод")) {
|
||||||
txs.append(info);
|
if (shortDescription.contains(info.name)) {
|
||||||
|
txs.append(info);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
// Перевод по карте
|
||||||
|
if (shortDescription == info.shortDescription) {
|
||||||
|
txs.append(info);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -45,16 +50,16 @@ QList<TransactionInfo> findSavedTransaction(
|
|||||||
return txs;
|
return txs;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool isSingle(const TransactionInfo &transaction, const QList<TransactionInfo> &transactions) {
|
int countSimilar(const TransactionInfo &transaction, const QList<TransactionInfo> &transactions) {
|
||||||
int count = 0;
|
int count = 0;
|
||||||
for (const TransactionInfo &info: transactions) {
|
for (const TransactionInfo &info: transactions) {
|
||||||
if (info.amount == transaction.amount
|
if (info.amount == transaction.amount
|
||||||
&& info.shortDescription == transaction.shortDescription
|
&& info.shortDescription == transaction.shortDescription
|
||||||
&& info.bankTime == transaction.bankTime) {
|
&& info.bankTime == transaction.bankTime) {
|
||||||
count++;
|
++count;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return count == 1;
|
return count;
|
||||||
}
|
}
|
||||||
|
|
||||||
QString formatPrice(const double value) {
|
QString formatPrice(const double value) {
|
||||||
@ -141,16 +146,7 @@ void GetLastDaysHistoryScript::doStart() {
|
|||||||
if (xmlScreenParser.isHomeScreen()) {
|
if (xmlScreenParser.isHomeScreen()) {
|
||||||
// парсим все транзакции
|
// парсим все транзакции
|
||||||
if (goToAllProducts(device.id, device.screenWidth, device.screenHeight)) {
|
if (goToAllProducts(device.id, device.screenWidth, device.screenHeight)) {
|
||||||
QList<QPair<AccountInfo, Node> > accounts = xmlScreenParser.parseAccountsInfo();
|
findAndTapOnAccount(device.id, m_account.lastNumbers);
|
||||||
for (auto &[account, node]: accounts) {
|
|
||||||
// FIXME будем считать что числа последние везде уникальные
|
|
||||||
if (m_account.lastNumbers == account.lastNumbers) {
|
|
||||||
qDebug() << "Tap by card";
|
|
||||||
AdbUtils::makeTap(device.id, node.x(), node.y());
|
|
||||||
QThread::msleep(1000);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
xmlScreenParser.parseAndSaveXml(AdbUtils::getScreenDumpAsXml(m_account.deviceId, ++m_counter));
|
xmlScreenParser.parseAndSaveXml(AdbUtils::getScreenDumpAsXml(m_account.deviceId, ++m_counter));
|
||||||
Node filterBtn = xmlScreenParser.findButtonNode("РСХБ Онлайн", false);
|
Node filterBtn = xmlScreenParser.findButtonNode("РСХБ Онлайн", false);
|
||||||
@ -185,52 +181,55 @@ void GetLastDaysHistoryScript::doStart() {
|
|||||||
|
|
||||||
qDebug() << "--- parsedTransactions: " << parsedTransactions.length();
|
qDebug() << "--- parsedTransactions: " << parsedTransactions.length();
|
||||||
// localTransactions
|
// localTransactions
|
||||||
|
QList<TransactionInfo> updatedTransactions;
|
||||||
for (TransactionInfo &transaction: parsedTransactions) {
|
for (TransactionInfo &transaction: parsedTransactions) {
|
||||||
// если shortDescription + сумма + день и Complete совпадает и одна
|
// если shortDescription + сумма + день и Complete совпадает и одна
|
||||||
bool single = isSingle(transaction, parsedTransactions);
|
int cSimilar = countSimilar(transaction, parsedTransactions);
|
||||||
QList<TransactionInfo> txs = findSavedTransaction(localTransactions, transaction);
|
QList<TransactionInfo> txs = findSavedTransaction(localTransactions, transaction);
|
||||||
|
|
||||||
if (single && txs.length() < 2) {
|
if (cSimilar == 1 && txs.length() < 2) {
|
||||||
if (txs.length() == 1) {
|
if (txs.length() == 1) {
|
||||||
// смотрим, надо ли обновление
|
// смотрим, надо ли обновление
|
||||||
if (txs[0].status != TransactionStatus::Complete || txs[0].shortDescription.isEmpty()) {
|
if (txs[0].status != TransactionStatus::Complete || txs[0].shortDescription.isEmpty()) {
|
||||||
txs[0].shortDescription = transaction.shortDescription;
|
txs[0].shortDescription = transaction.shortDescription;
|
||||||
openAndSaveDitailInfo(txs[0], device.screenWidth, device.screenHeight);
|
openAndSaveDitailInfo(txs[0], device.screenWidth, device.screenHeight);
|
||||||
|
updatedTransactions.append(txs[0]);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
// создаем новую
|
// создаем новую
|
||||||
openAndSaveDitailInfo(transaction, device.screenWidth, device.screenHeight);
|
openAndSaveDitailInfo(transaction, device.screenWidth, device.screenHeight);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
// в списке за день нашли более чем 1 одинаковых транзакций
|
if (cSimilar == txs.length()) {
|
||||||
// FIXME - что то делать если две одинаковые
|
// одинаковые транзакции (2 - 2)
|
||||||
}
|
for (TransactionInfo &tx: txs) {
|
||||||
|
if (!updatedTransactions.contains(tx)) {
|
||||||
|
openAndSaveDitailInfo(tx, device.screenWidth, device.screenHeight);
|
||||||
|
updatedTransactions.append(tx);
|
||||||
if (txs.length() == 1) {
|
break;
|
||||||
qDebug() << "--- one transaction with same amount";
|
}
|
||||||
qDebug().noquote().nospace() << convertTransactionToString(transaction);
|
}
|
||||||
|
} else if (cSimilar < txs.length()) {
|
||||||
if (transaction.status == TransactionStatus::Complete && !transaction.shortDescription.isEmpty()) {
|
// Дубликаты транзакций или название изменилось (1 - 2)
|
||||||
continue;
|
qDebug() << "--- Дубликаты транзакций или название изменилось (1 - 2)!!!!!!!!!!!!";
|
||||||
|
// FIXME alert!!!
|
||||||
|
} else {
|
||||||
|
// нужно создать новую транзакцию, которой не было (2 - 1)
|
||||||
|
bool updated = false;
|
||||||
|
for (TransactionInfo &tx: txs) {
|
||||||
|
if (!updatedTransactions.contains(tx)) {
|
||||||
|
openAndSaveDitailInfo(tx, device.screenWidth, device.screenHeight);
|
||||||
|
updatedTransactions.append(tx);
|
||||||
|
updated = true;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (!updated) {
|
||||||
|
// создаем новую, так как у нас появилась одинаковая транзакция
|
||||||
|
openAndSaveDitailInfo(transaction, device.screenWidth, device.screenHeight);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
// посмотреть подробности и обновить статус и описание
|
|
||||||
} else if (txs.length() > 1) {
|
|
||||||
// FIXME - что то делать если две одинаковые
|
|
||||||
// Alert !!!
|
|
||||||
qDebug() << "--- two transactions with same amount";
|
|
||||||
} else {
|
|
||||||
// Создаем новую, так как не найдено в БД
|
|
||||||
qDebug() << "--- new transaction";
|
|
||||||
qDebug().noquote().nospace() << convertTransactionToString(transaction);
|
|
||||||
|
|
||||||
// посмотреть подробности и создать
|
|
||||||
}
|
}
|
||||||
// qDebug() << transaction.amount;
|
|
||||||
// qDebug() << transaction.shortDescription;
|
|
||||||
// qDebug().noquote().nospace() << convertTransactionToString(transaction);
|
|
||||||
// TODO вот мы дошли до списка транзакций
|
|
||||||
|
|
||||||
xmlScreenParser.parseAndSaveXml(AdbUtils::getScreenDumpAsXml(m_account.deviceId, ++m_counter));
|
xmlScreenParser.parseAndSaveXml(AdbUtils::getScreenDumpAsXml(m_account.deviceId, ++m_counter));
|
||||||
}
|
}
|
||||||
|
|||||||
@ -40,7 +40,9 @@ void PayByPhoneScript::makePayment(
|
|||||||
AdbUtils::makeTap(deviceId, payBtn.x(), payBtn.y());
|
AdbUtils::makeTap(deviceId, payBtn.x(), payBtn.y());
|
||||||
QThread::msleep(1000);
|
QThread::msleep(1000);
|
||||||
} else {
|
} else {
|
||||||
qWarning() << "--- payBtn not found";
|
m_error = "Кнопка 'Оплатить' не нашлась";
|
||||||
|
qDebug() << m_error;
|
||||||
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
xmlScreenParser.parseAndSaveXml(AdbUtils::getScreenDumpAsXml(deviceId, ++m_counter));
|
xmlScreenParser.parseAndSaveXml(AdbUtils::getScreenDumpAsXml(deviceId, ++m_counter));
|
||||||
@ -52,10 +54,14 @@ void PayByPhoneScript::makePayment(
|
|||||||
AdbUtils::makeTap(deviceId, payByPhoneBtn.x(), payByPhoneBtn.y());
|
AdbUtils::makeTap(deviceId, payByPhoneBtn.x(), payByPhoneBtn.y());
|
||||||
QThread::msleep(1000);
|
QThread::msleep(1000);
|
||||||
} else {
|
} else {
|
||||||
qWarning() << "--- payByPhoneBtn not found";
|
m_error = "Не смогли найти пункт 'По номеру телефона В РСХБ и через'";
|
||||||
|
qDebug() << m_error;
|
||||||
|
return;
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
qWarning() << "--- payTitle not found";
|
m_error = "Не смогли перейти на экран 'Платежи и переводы'";
|
||||||
|
qDebug() << m_error;
|
||||||
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -69,7 +75,9 @@ void PayByPhoneScript::makePayment(
|
|||||||
AdbUtils::inputText(deviceId, m_phone);
|
AdbUtils::inputText(deviceId, m_phone);
|
||||||
QThread::msleep(1000);
|
QThread::msleep(1000);
|
||||||
} else {
|
} else {
|
||||||
qWarning() << "--- payByPhoneTitle not found (no continueBtn)";
|
m_error = "Не смогли найти пункт 'Перевод по телефону'";
|
||||||
|
qDebug() << m_error;
|
||||||
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
xmlScreenParser.parseAndSaveXml(AdbUtils::getScreenDumpAsXml(deviceId, ++m_counter));
|
xmlScreenParser.parseAndSaveXml(AdbUtils::getScreenDumpAsXml(deviceId, ++m_counter));
|
||||||
@ -80,7 +88,9 @@ void PayByPhoneScript::makePayment(
|
|||||||
AdbUtils::makeTap(deviceId, payOtherBankBtn.x(), payOtherBankBtn.y());
|
AdbUtils::makeTap(deviceId, payOtherBankBtn.x(), payOtherBankBtn.y());
|
||||||
QThread::msleep(1000);
|
QThread::msleep(1000);
|
||||||
} else {
|
} else {
|
||||||
qWarning() << "--- payOtherBankBtn not found";
|
m_error = "Не смогли нажать на первичный выбор банка";
|
||||||
|
qDebug() << m_error;
|
||||||
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
xmlScreenParser.parseAndSaveXml(AdbUtils::getScreenDumpAsXml(deviceId, ++m_counter));
|
xmlScreenParser.parseAndSaveXml(AdbUtils::getScreenDumpAsXml(deviceId, ++m_counter));
|
||||||
@ -96,7 +106,7 @@ void PayByPhoneScript::makePayment(
|
|||||||
QThread::msleep(1000);
|
QThread::msleep(1000);
|
||||||
break;
|
break;
|
||||||
} else {
|
} else {
|
||||||
qWarning() << "--- allBanksTitle not found, i: " << i;
|
qDebug() << "--- allBanksTitle not found, i: " << i;
|
||||||
}
|
}
|
||||||
QThread::msleep(1000);
|
QThread::msleep(1000);
|
||||||
xmlScreenParser.parseAndSaveXml(AdbUtils::getScreenDumpAsXml(deviceId, ++m_counter));
|
xmlScreenParser.parseAndSaveXml(AdbUtils::getScreenDumpAsXml(deviceId, ++m_counter));
|
||||||
@ -110,7 +120,7 @@ void PayByPhoneScript::makePayment(
|
|||||||
QThread::msleep(1000);
|
QThread::msleep(1000);
|
||||||
break;
|
break;
|
||||||
} else {
|
} else {
|
||||||
qWarning() << "--- bankNameListItem not found, i: " << i;
|
qDebug() << "--- bankNameListItem not found, i: " << i;
|
||||||
}
|
}
|
||||||
QThread::msleep(1000);
|
QThread::msleep(1000);
|
||||||
xmlScreenParser.parseAndSaveXml(AdbUtils::getScreenDumpAsXml(deviceId, ++m_counter));
|
xmlScreenParser.parseAndSaveXml(AdbUtils::getScreenDumpAsXml(deviceId, ++m_counter));
|
||||||
@ -136,16 +146,23 @@ void PayByPhoneScript::makePayment(
|
|||||||
AdbUtils::makeTap(deviceId, continuePayBtn.x(), continuePayBtn.y());
|
AdbUtils::makeTap(deviceId, continuePayBtn.x(), continuePayBtn.y());
|
||||||
QThread::msleep(1000);
|
QThread::msleep(1000);
|
||||||
} else {
|
} else {
|
||||||
qWarning() << "--- readyBtn not found";
|
m_error = "Не смогли нажать 'Готово'";
|
||||||
|
qDebug() << m_error;
|
||||||
|
return;
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
qWarning() << "--- sumBtn not found";
|
m_error = "Не смогли нажать 'Продолжить'";
|
||||||
|
qDebug() << m_error;
|
||||||
|
return;
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
qWarning() << "--- payByPhoneScreenTitle not found";
|
m_error = "Не смогли найти 'Перевод по телефону'";
|
||||||
|
qDebug() << m_error;
|
||||||
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
xmlScreenParser.parseAndSaveXml(AdbUtils::getScreenDumpAsXml(deviceId, ++m_counter));
|
xmlScreenParser.parseAndSaveXml(AdbUtils::getScreenDumpAsXml(deviceId, ++m_counter));
|
||||||
|
bool inputedPinCode = false;
|
||||||
for (int i = 0; i < 5; ++i) {
|
for (int i = 0; i < 5; ++i) {
|
||||||
// TODO кнопка содержит "Перевести 10 ₽" если будет от 1000 то скорее всвего будет "Перевести 1 000 ₽",
|
// TODO кнопка содержит "Перевести 10 ₽" если будет от 1000 то скорее всвего будет "Перевести 1 000 ₽",
|
||||||
// TODO не ясно как форматирование будет, поэтому пока на начало зашьем
|
// TODO не ясно как форматирование будет, поэтому пока на начало зашьем
|
||||||
@ -158,6 +175,7 @@ void PayByPhoneScript::makePayment(
|
|||||||
if (const QList<Node> pincode = xmlScreenParser.tryToFindPinCode(pinCode, "Введите код доступа");
|
if (const QList<Node> pincode = xmlScreenParser.tryToFindPinCode(pinCode, "Введите код доступа");
|
||||||
pincode.size() == 4) {
|
pincode.size() == 4) {
|
||||||
inputPinCode(deviceId, pincode);
|
inputPinCode(deviceId, pincode);
|
||||||
|
inputedPinCode = true;
|
||||||
// После ввода пин-кода, ждем 3с
|
// После ввода пин-кода, ждем 3с
|
||||||
QThread::msleep(3000);
|
QThread::msleep(3000);
|
||||||
}
|
}
|
||||||
@ -169,9 +187,14 @@ void PayByPhoneScript::makePayment(
|
|||||||
xmlScreenParser.parseAndSaveXml(AdbUtils::getScreenDumpAsXml(deviceId, ++m_counter));
|
xmlScreenParser.parseAndSaveXml(AdbUtils::getScreenDumpAsXml(deviceId, ++m_counter));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (!inputedPinCode) {
|
||||||
|
m_error = "Не смогли ввести пин-код!'";
|
||||||
|
qDebug() << m_error;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
xmlScreenParser.parseAndSaveXml(AdbUtils::getScreenDumpAsXml(deviceId, ++m_counter));
|
xmlScreenParser.parseAndSaveXml(AdbUtils::getScreenDumpAsXml(deviceId, ++m_counter));
|
||||||
|
|
||||||
bool isPaymentCompleted = false;
|
|
||||||
for (int i = 0; i < 10; ++i) {
|
for (int i = 0; i < 10; ++i) {
|
||||||
Node moreDetailBtn = xmlScreenParser.findButtonNode("Детали операции", false);
|
Node moreDetailBtn = xmlScreenParser.findButtonNode("Детали операции", false);
|
||||||
if (!moreDetailBtn.isEmpty()) {
|
if (!moreDetailBtn.isEmpty()) {
|
||||||
@ -194,7 +217,6 @@ void PayByPhoneScript::makePayment(
|
|||||||
for (int k = 0; k < 10; ++k) {
|
for (int k = 0; k < 10; ++k) {
|
||||||
Node paymentCompleted = xmlScreenParser.findTextNode("Исполнен", 0, 0, width, height / 2);
|
Node paymentCompleted = xmlScreenParser.findTextNode("Исполнен", 0, 0, width, height / 2);
|
||||||
if (!paymentCompleted.isEmpty()) {
|
if (!paymentCompleted.isEmpty()) {
|
||||||
isPaymentCompleted = true;
|
|
||||||
if (!TransactionDAO::updateTransactionStatus(transaction.id, TransactionStatus::Complete)) {
|
if (!TransactionDAO::updateTransactionStatus(transaction.id, TransactionStatus::Complete)) {
|
||||||
qDebug() << "Not updated: " << transaction.id;
|
qDebug() << "Not updated: " << transaction.id;
|
||||||
}
|
}
|
||||||
@ -215,9 +237,7 @@ void PayByPhoneScript::makePayment(
|
|||||||
|
|
||||||
Node homeBtn = xmlScreenParser.findButtonNode("Вернуться на главную", false);
|
Node homeBtn = xmlScreenParser.findButtonNode("Вернуться на главную", false);
|
||||||
AdbUtils::makeTap(deviceId, homeBtn.x(), homeBtn.y());
|
AdbUtils::makeTap(deviceId, homeBtn.x(), homeBtn.y());
|
||||||
if (!isPaymentCompleted) {
|
QThread::msleep(1000);
|
||||||
qDebug() << "--- payment not completed";
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void PayByPhoneScript::doStart() {
|
void PayByPhoneScript::doStart() {
|
||||||
@ -253,9 +273,13 @@ void PayByPhoneScript::doStart() {
|
|||||||
qDebug() << "======== 3. Make payment";
|
qDebug() << "======== 3. Make payment";
|
||||||
makePayment(device.id, app.pinCode, device.screenWidth, device.screenHeight);
|
makePayment(device.id, app.pinCode, device.screenWidth, device.screenHeight);
|
||||||
} else {
|
} else {
|
||||||
qDebug() << "Не смогли открыть 'Все продукты'";
|
m_error = "Не смогли открыть 'Все продукты'";
|
||||||
|
qDebug() << m_error;
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
qDebug() << "Не смогли дойти до домашней страницы....";
|
m_error = "Не смогли дойти до домашней страницы....";
|
||||||
|
qDebug() << m_error;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
emit finishedWithResult(m_error);
|
||||||
}
|
}
|
||||||
|
|||||||
@ -23,6 +23,7 @@ private:
|
|||||||
const QString m_phone;
|
const QString m_phone;
|
||||||
const QString m_bankName;
|
const QString m_bankName;
|
||||||
const double m_amount;
|
const double m_amount;
|
||||||
|
QString m_error;
|
||||||
|
|
||||||
void makePayment(
|
void makePayment(
|
||||||
const QString &deviceId,
|
const QString &deviceId,
|
||||||
|
|||||||
47
main.cpp
47
main.cpp
@ -56,24 +56,53 @@ void setupScriptAutoPaymentAndThread(QCoreApplication &app) {
|
|||||||
const QString phoneNumber = "79641815146";
|
const QString phoneNumber = "79641815146";
|
||||||
const QString bankName = "Альфа-Банк";
|
const QString bankName = "Альфа-Банк";
|
||||||
// const QString bankName = "Сбербанк";
|
// const QString bankName = "Сбербанк";
|
||||||
const double ammount = 310;
|
const double amount = 310;
|
||||||
|
|
||||||
AccountInfo account = AccountDAO::findAppAccount(appName, cardNumber);
|
AccountInfo account = AccountDAO::findAppAccount(appName, cardNumber);
|
||||||
if (account.id != -1) {
|
if (account.id != -1) {
|
||||||
auto *thread = new QThread;
|
// Функция для подключения потоков к завершению приложения
|
||||||
auto *scriptWorker = new GetLastDaysHistoryScript(account);
|
auto connectStopOnQuit = [&](QObject *worker, QThread *thread) {
|
||||||
// auto *scriptWorker = new PayByPhoneScript(account, phoneNumber, bankName, ammount);
|
QObject::connect(&app, &QCoreApplication::aboutToQuit, worker, &QObject::deleteLater);
|
||||||
|
QObject::connect(&app, &QCoreApplication::aboutToQuit, thread, &QThread::quit);
|
||||||
|
QObject::connect(&app, &QCoreApplication::aboutToQuit, thread, &QThread::deleteLater);
|
||||||
|
};
|
||||||
|
|
||||||
|
// Первый поток
|
||||||
|
auto *thread = new QThread;
|
||||||
|
auto *scriptWorker = new PayByPhoneScript(account, phoneNumber, bankName, amount);
|
||||||
scriptWorker->moveToThread(thread);
|
scriptWorker->moveToThread(thread);
|
||||||
QObject::connect(thread, &QThread::started, scriptWorker, &GetLastDaysHistoryScript::start);
|
|
||||||
QObject::connect(scriptWorker, &GetLastDaysHistoryScript::finished, thread, &QThread::quit);
|
// Запуск первого потока
|
||||||
QObject::connect(scriptWorker, &GetLastDaysHistoryScript::finished, scriptWorker, &QObject::deleteLater);
|
QObject::connect(thread, &QThread::started, scriptWorker, &PayByPhoneScript::start);
|
||||||
|
QObject::connect(scriptWorker, &PayByPhoneScript::finished, thread, &QThread::quit);
|
||||||
|
QObject::connect(scriptWorker, &PayByPhoneScript::finished, scriptWorker, &QObject::deleteLater);
|
||||||
QObject::connect(thread, &QThread::finished, thread, &QThread::deleteLater);
|
QObject::connect(thread, &QThread::finished, thread, &QThread::deleteLater);
|
||||||
|
|
||||||
QObject::connect(&app, &QCoreApplication::aboutToQuit, [=]() {
|
// Обработка результата первого потока
|
||||||
scriptWorker->stop();
|
QObject::connect(scriptWorker, &PayByPhoneScript::finishedWithResult, &app, [&](const QString &result) {
|
||||||
|
qDebug() << "Получен результат: [" << result << "]";
|
||||||
|
|
||||||
|
// Создаем второй поток после завершения первого
|
||||||
|
auto *thread2 = new QThread;
|
||||||
|
auto *scriptWorker2 = new GetLastDaysHistoryScript(account);
|
||||||
|
scriptWorker2->moveToThread(thread2);
|
||||||
|
|
||||||
|
// Запуск второго потока
|
||||||
|
QObject::connect(thread2, &QThread::started, scriptWorker2, &GetLastDaysHistoryScript::start);
|
||||||
|
QObject::connect(scriptWorker2, &GetLastDaysHistoryScript::finished, thread2, &QThread::quit);
|
||||||
|
QObject::connect(scriptWorker2, &GetLastDaysHistoryScript::finished, scriptWorker2, &QObject::deleteLater);
|
||||||
|
QObject::connect(thread2, &QThread::finished, thread2, &QThread::deleteLater);
|
||||||
|
|
||||||
|
// Остановка второго потока при завершении приложения
|
||||||
|
connectStopOnQuit(scriptWorker2, thread2);
|
||||||
|
|
||||||
|
thread2->start();
|
||||||
});
|
});
|
||||||
|
|
||||||
|
// Остановка первого потока при завершении приложения
|
||||||
|
connectStopOnQuit(scriptWorker, thread);
|
||||||
|
|
||||||
|
// Запуск первого потока
|
||||||
thread->start();
|
thread->start();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user