Commit c03b2439 by NitefullWind

1. 修复按Alt+F4关闭窗口后卡死问题。 2. 按Ecs可关闭窗口。

parent 68b29731
......@@ -2,7 +2,6 @@
#include <QDateTime>
#include <fmp_settings_i.h>
#include <QCoreApplication>
#include <ctkPluginContext.h>
#include <ctkServiceReference.h>
#include "fmp_epay_p.h"
#include "fmp_epay_def.h"
......@@ -28,62 +27,41 @@
#include <fmp_home_i.h>
unsigned int FMPePayPrivate::s_ClientReqCount = 10000;
FMPePayPrivate::FMPePayPrivate(FMPePay *parent)
: q_ptr(parent),
_payDialog(nullptr),
_setting(nullptr),
_network(nullptr),
_model(nullptr),
_db(nullptr),
_watcher(nullptr),
_reverse_flag(false),
_is_api(false)
_is_api(false),
_api_abort(false)
{
FMPLoggerInterface::InitContext(q_ptr->_ctx);
_watcher = new QFutureWatcher<QByteArray>();
connect( _watcher, SIGNAL( finished() ), this, SLOT( witedata() ) );
}
FMPePayPrivate::~FMPePayPrivate()
{
if(_watcher != nullptr){
delete _watcher;
}
if(_payDialog != nullptr) {
delete _payDialog;
_payDialog = nullptr;
}
if(_model != nullptr){
delete _model;
}
if(_db != nullptr){
delete _db;
}
Uninit();
}
void FMPePayPrivate::Uninit()
{
if (_is_api && _origin_response.isEmpty()) {
if (_is_api && _docked_response.isEmpty()) {
QJsonParseError err;
QByteArray json = "{\"statusCode\":106, \"msg\":\"\347\252\227\345\217\243\345\267\262\345\205\263\351\227\255\357\274\214\344\272\244\346\230\223\345\217\226\346\266\210\", \"prompt\":0}";
QJsonDocument d = QJsonDocument::fromJson(json, &err);
_origin_response = d.object();
_docked_response = d.object();
_api_abort = true;
emit apiError();
QEventLoop evt;
connect(this, SIGNAL(apiFinish()), &evt, SLOT(quit()));
evt.exec();
}
else if (_is_api) {
else if (_is_api){
_api_abort = true;
emit apiError();
QEventLoop evt;
connect(this, SIGNAL(apiFinish()), &evt, SLOT(quit()));
evt.exec();
}
Q_Q(FMPePay);
......@@ -117,11 +95,6 @@ void FMPePayPrivate::Init()
clearorder();
if(_network == nullptr)
{
_network = q->GetService<FMPNetworkInterface>(q->_ctx);
}
if(_db == nullptr)
{
_db = new FMPDataBase(q->_databasename);
......@@ -158,8 +131,6 @@ void FMPePayPrivate::Init()
_model->setEditStrategy(QSqlTableModel::OnManualSubmit);
}
if(_payDialog == nullptr) {
QVariantHash hash;
_setting = q->GetService<FMPSettingsInterface>(q->_ctx);
......@@ -214,8 +185,12 @@ void FMPePayPrivate::Init()
hash["products"] = products;
}
if(_payDialog == nullptr) {
_payDialog = new FMPPayDialog(this, hash);
}
else {
_payDialog->setBasicInfo(hash);
}
_payDialog->show();
}
......@@ -247,6 +222,7 @@ QSqlTableModel *FMPePayPrivate::model() const
void FMPePayPrivate::DockPayRequest(const QByteArray &json)
{
_is_api = true;
_api_abort = false;
_origin_request = QJsonDocument::fromJson(json).object();
}
......@@ -263,11 +239,13 @@ void FMPePayPrivate::DockPayRequest(const QByteArray &json)
QByteArray FMPePayPrivate::DockPayRespond()
{
QByteArray json = "{\"statusCode\":106, \"msg\":\"\347\252\227\345\217\243\345\267\262\345\205\263\351\227\255\357\274\214\344\272\244\346\230\223\345\217\226\346\266\210\", \"prompt\":0}";
QEventLoop evt;
connect(this, SIGNAL(finished(QJsonObject)), &evt, SLOT(quit()));
connect(this, SIGNAL(apiError()), &evt, SLOT(quit()));
evt.exec();
if (!_api_abort) {
_docked_response = QJsonObject();
_docked_response[FMP_EPAY_STATUSCODE] = _origin_response[FMP_EPAY_STATUSCODE];
_docked_response[FMP_EPAY_ERRORMSG] = _origin_response.contains("msg") ? _origin_response[FMP_EPAY_ERRORMSG] : QJsonValue("");
......@@ -296,7 +274,12 @@ QByteArray FMPePayPrivate::DockPayRespond()
}
_origin_response = QJsonObject();
QByteArray json = QJsonDocument(_docked_response).toJson();
json = QJsonDocument(_docked_response).toJson();
}
if (_is_api) {
Uninit();
}
return json;
}
......@@ -304,18 +287,20 @@ QByteArray FMPePayPrivate::DockPayRespond()
void FMPePayPrivate::DockRefundRequest(const QByteArray &json)
{
_is_api = true;
_api_abort = false;
_origin_request = QJsonDocument::fromJson(json).object();
}
QByteArray FMPePayPrivate::DockRefundRespond()
{
QByteArray json = "{\"statusCode\":106, \"msg\":\"\347\252\227\345\217\243\345\267\262\345\205\263\351\227\255\357\274\214\344\272\244\346\230\223\345\217\226\346\266\210\", \"prompt\":0}";
QEventLoop evt;
connect(this, SIGNAL(finished(QJsonObject)), &evt, SLOT(quit()));
connect(this, SIGNAL(apiError()), &evt, SLOT(quit()));
evt.exec();
QByteArray json;
//!
if (!_api_abort) {
_docked_response = QJsonObject();
_docked_response["statusCode"] = _origin_response["statusCode"];
if (_origin_response.contains("msg")) {
......@@ -326,8 +311,12 @@ QByteArray FMPePayPrivate::DockRefundRespond()
}
_origin_response = QJsonObject();
json = QJsonDocument(_docked_response).toJson();
}
if (_is_api) {
Uninit();
}
emit apiFinish();
return json;
}
......@@ -341,12 +330,20 @@ void FMPePayPrivate::ControlPayJson(QString sum, QString code)
if(_reverse_flag)
{
emit error(QString::fromLocal8Bit("网络连接异常(冲正...)"));
_origin_response["statusCode"] = 104;
_origin_response["msg"] = QString::fromLocal8Bit("网络连接异常");
_origin_response["prompt"] = 0;
emit apiError();
return ;
}
if(!GetPayJson(sum, code))
{
emit error(QString::fromLocal8Bit("获取门店信息失败"));
_origin_response["statusCode"] = 109;
_origin_response["msg"] = QString::fromLocal8Bit("获取门店信息失败");
_origin_response["prompt"] = 0;
emit apiError();
return ;
}
......@@ -357,8 +354,9 @@ void FMPePayPrivate::ControlPayJson(QString sum, QString code)
if(!HttpPost(outjson, _docked_request ,errors, q->_time_out))
{
emit error(errors);
_origin_response = outjson;
emit error(errors);
emit apiError();
}
else
{
......@@ -529,6 +527,10 @@ void FMPePayPrivate::ControlRefundJson(const QJsonObject &trans)
bool dock_success = false;
if(_reverse_flag) {
emit error(QString::fromLocal8Bit("网络连接异常(冲正...)"));
_origin_response["statusCode"] = 104;
_origin_response["msg"] = QString::fromLocal8Bit("网络连接异常");
_origin_response["prompt"] = 0;
emit apiError();
return ;
}
......@@ -537,7 +539,11 @@ void FMPePayPrivate::ControlRefundJson(const QJsonObject &trans)
QJsonObject t = trans;
if (!payTransId.isEmpty()) {
if(!_db->find(q->_table, query, keylist, QString(QString(SQL_KEY_PAYTRANSID) + " = '%1'").arg(payTransId)) || !query.next()) {
_origin_response["statusCode"] = 108;
_origin_response["msg"] = QString::fromLocal8Bit("交易记录不存在");
_origin_response["prompt"] = 0;
emit error(QString::fromLocal8Bit("交易记录不存在"));
emit apiError();
return;
}
else {
......@@ -548,6 +554,10 @@ void FMPePayPrivate::ControlRefundJson(const QJsonObject &trans)
if(!GetRefundJson(t)) {
emit error(QString::fromLocal8Bit("获取门店信息失败"));
_origin_response["statusCode"] = 109;
_origin_response["msg"] = QString::fromLocal8Bit("获取门店信息失败");
_origin_response["prompt"] = 0;
emit apiError();
return;
}
......@@ -640,7 +650,7 @@ bool FMPePayPrivate::GetPayJson(const QString& sum, const QString& code)
transaction.insert(FMP_EPAY_TRANSTRACTION_CODE, code);
if (_is_api) {
QJsonObject origin_trans = _origin_request["transactions"].toObject();
transaction[FMP_EPAY_TRANSTRACTION_AMOUNT] = origin_trans["order_amount"];
transaction[FMP_EPAY_TRANSTRACTION_AMOUNT] = (int)(origin_trans["order_amount"].toDouble() + 0.005);
QJsonArray pos_products = _origin_request["products"].toArray();
QJsonArray products;
int i = 1;
......@@ -697,17 +707,17 @@ bool FMPePayPrivate::GetRefundJson(const QJsonObject &trans)
transaction.insert(FMP_EPAY_REFUND_TRANSTRACTION_FMID, trans[FMP_JKEY_FM_ORDERID]);
if (_is_api) {
QJsonObject orig_trans = _origin_request["transactions"].toObject();
transaction.insert(FMP_EPAY_REFUND_TRANSTRACTION_AMOUNT, (int)orig_trans["refund_amount"].toDouble());
transaction.insert(FMP_EPAY_REFUND_TRANSTRACTION_AMOUNT, (int)(orig_trans["refund_amount"].toDouble() + 0.005));
}
else {
transaction.insert(FMP_EPAY_REFUND_TRANSTRACTION_AMOUNT, (int)trans[FMP_JKEY_REFUND_AMOUNT].toDouble());
transaction.insert(FMP_EPAY_REFUND_TRANSTRACTION_AMOUNT, (int)(trans[FMP_JKEY_REFUND_AMOUNT].toDouble() + 0.005));
}
_docked_request.insert(FMP_EPAY_TRANSID, QDateTime::currentDateTime().toString("yyyyMMddhhmmsszzz"));
}
else {
transaction.insert(FMP_EPAY_REFUND_TRANSTRACTION_EBCODE, trans[FMP_JKEY_PAY_EBCODE]);
transaction.insert(FMP_EPAY_REFUND_TRANSTRACTION_TRANSID, trans[FMP_JKEY_PAY_TRANSID]);
transaction.insert(FMP_EPAY_REFUND_TRANSTRACTION_AMOUNT, (int)trans[FMP_JKEY_REFUND_AMOUNT].toDouble());
transaction.insert(FMP_EPAY_REFUND_TRANSTRACTION_AMOUNT, (int)(trans[FMP_JKEY_REFUND_AMOUNT].toDouble() + 0.005));
_docked_request.insert(FMP_EPAY_TRANSID, trans[FMP_JKEY_POS_TRANSID]);
}
......
......@@ -4,7 +4,9 @@
#include "fmp_epay.h"
#include <QObject>
#include <QFuture>
#include <QFutureWatcher>
#include <QJsonObject>
#include <QEventLoop>
class FMPPayDialog;
class FMPSettingsInterface;
......@@ -59,7 +61,6 @@ private:
void clearorder();
signals:
void apiError();
void apiFinish();
void error(QString errormsg);
void finished(QJsonObject json);
......@@ -74,8 +75,6 @@ public:
FMPSettingsInterface *_setting;
FMPNetworkInterface *_network;
private:
QJsonObject _origin_request;
QJsonObject _docked_request;
......@@ -83,6 +82,7 @@ private:
QJsonObject _docked_response;
bool _is_api;
bool _api_abort;
bool _reverse_flag;
static unsigned int s_ClientReqCount;
......
......@@ -92,7 +92,6 @@ FMPPayDialog::FMPPayDialog(FMPePayPrivate *control, QVariantHash basicinfo, QWid
connect(_control, &FMPePayPrivate::error, this, &FMPPayDialog::showErrorMsg);
connect(_control, &FMPePayPrivate::finished, this, &FMPPayDialog::showSuccessMsg);
ui->lineedit_num->setFocus();
_current_LineEdit = ui->lineedit_num;
......@@ -314,7 +313,7 @@ void FMPPayDialog::onSelectionChanged(QModelIndex idx)
void FMPPayDialog::keyPressEvent(QKeyEvent *e)
{
return QDialog::keyPressEvent(e);
}
void FMPPayDialog::mousePressEvent(QMouseEvent *event)
......@@ -570,6 +569,7 @@ void FMPPayDialog::onBtnConfirmClicked()
{
_wait = new FMPPayWait(this);
_wait->setModal(true);
_wait->setFocus();
}
......@@ -587,6 +587,7 @@ void FMPPayDialog::onBtnConfirmClicked()
ui->lineedit_code_refund->clear();
_wait->SetContent(FMPPayWait::ERRORS, QString::fromLocal8Bit("金额或条码错误\n请重新输入"));
_wait->show();
_current_LineEdit->setFocus();
return;
}
......@@ -607,6 +608,7 @@ void FMPPayDialog::onBtnConfirmClicked()
}
_wait->show();
_current_LineEdit->setFocus();
}
......@@ -622,6 +624,10 @@ void FMPPayDialog::on_btn_clear_clicked()
}
}
void FMPPayDialog::reject()
{
on_btn_close_clicked();
}
void FMPPayDialog::on_btn_close_clicked()
{
......
......@@ -50,6 +50,7 @@ public slots:
void setBasicInfo(QVariantHash basicinfo);
protected:
void keyPressEvent(QKeyEvent *);
void mousePressEvent(QMouseEvent *);
......@@ -83,6 +84,7 @@ private slots:
void on_lineEdit_textChanged(const QString &arg1);
void reject();
public:
void setPayView();
......
......@@ -2841,9 +2841,9 @@ QHeaderView::section {
</layout>
</widget>
<zorder>wdg_success_main</zorder>
<zorder>wdg_pay_main</zorder>
<zorder>wdg_refund_main</zorder>
<zorder>wdg_query_main</zorder>
<zorder>wdg_pay_main</zorder>
</widget>
</item>
<item>
......
......@@ -13,7 +13,7 @@ FMPPayWait::FMPPayWait(QWidget *parent) : QDialog(parent), ui(new Ui::FMPPayWait
ui->widget->setWindowOpacity(1);
setGeometry(parent->geometry());
this->move(parent->pos());
setWindowFlags(Qt::FramelessWindowHint| Qt::Tool );
setWindowFlags(windowFlags() | Qt::FramelessWindowHint | Qt::WindowStaysOnTopHint);
connect(ui->btn_confirm, &QPushButton::clicked, this, &FMPPayWait::accept);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment