Commit c906f78f by gujin.wang

修改一些崩溃bug

parent e6812a0b
...@@ -35,6 +35,7 @@ void CQueryThread::trySend() ...@@ -35,6 +35,7 @@ void CQueryThread::trySend()
//write sqlite //write sqlite
outjson[FMP_EPAY_TRANSID]=_reqJson[FMP_EPAY_TRANSID]; outjson[FMP_EPAY_TRANSID]=_reqJson[FMP_EPAY_TRANSID];
_fmPay->updateSqlite(outjson); _fmPay->updateSqlite(outjson);
_fmPay->UpdateViewDetail();
} }
} }
......
...@@ -9,7 +9,12 @@ ...@@ -9,7 +9,12 @@
FMPDataBase::FMPDataBase(QString dbname, QString connectname, QObject *parent) : QObject(parent) FMPDataBase::FMPDataBase(QString dbname, QString connectname, QObject *parent) : QObject(parent)
{ {
if (!QSqlDatabase::contains(connectname)) {
_db = QSqlDatabase::addDatabase("QSQLITE", connectname); _db = QSqlDatabase::addDatabase("QSQLITE", connectname);
}
else {
_db = QSqlDatabase::database(connectname);
}
_db.setDatabaseName(dbname); _db.setDatabaseName(dbname);
_isopen = _db.open(); _isopen = _db.open();
} }
......
...@@ -48,8 +48,13 @@ public: ...@@ -48,8 +48,13 @@ public:
} }
} }
if (QSqlTableModel::hasIndex(idx.row(), idx.column())) {
return QSqlTableModel::data(idx, role); return QSqlTableModel::data(idx, role);
} }
else {
return QVariant();
}
}
}; };
class FMPPayItemDelegate : public QStyledItemDelegate class FMPPayItemDelegate : public QStyledItemDelegate
......
...@@ -9,6 +9,7 @@ ...@@ -9,6 +9,7 @@
#include "fmp_pe_handlers.h" #include "fmp_pe_handlers.h"
#include "fmp_epayview_dialog.h" #include "fmp_epayview_dialog.h"
#include "fmp_network_i.h" #include "fmp_network_i.h"
#include "fmp_vip_i.h"
#include "fmp_database.h" #include "fmp_database.h"
#include "fmp_epay_checkmodel.h" #include "fmp_epay_checkmodel.h"
...@@ -22,6 +23,8 @@ ...@@ -22,6 +23,8 @@
#include <QtConcurrent> #include <QtConcurrent>
#include <QTimer> #include <QTimer>
#include <QFuture> #include <QFuture>
#include <QTcpSocket>
#include <QHostAddress>
#include <QSqlQuery> #include <QSqlQuery>
...@@ -98,13 +101,6 @@ FMPePayPrivate::FMPePayPrivate(FMPePay *parent) ...@@ -98,13 +101,6 @@ FMPePayPrivate::FMPePayPrivate(FMPePay *parent)
if(_queryThread==nullptr) if(_queryThread==nullptr)
_queryThread=new CQueryThread(this); _queryThread=new CQueryThread(this);
if(_reverseThread == nullptr)
{
_reverseThread = new ReverseThread(this);
connect(_reverseThread, &ReverseThread::finished, _reverseThread, &ReverseThread::deleteLater);
_reverseThread->start();
}
//读取配置文件信息 //读取配置文件信息
QString apppath=QCoreApplication::applicationDirPath(); QString apppath=QCoreApplication::applicationDirPath();
QSettings *settings = new QSettings(QString("%1/FreemudPOS.ini").arg(apppath), QSettings::IniFormat); QSettings *settings = new QSettings(QString("%1/FreemudPOS.ini").arg(apppath), QSettings::IniFormat);
...@@ -128,6 +124,13 @@ FMPePayPrivate::FMPePayPrivate(FMPePay *parent) ...@@ -128,6 +124,13 @@ FMPePayPrivate::FMPePayPrivate(FMPePay *parent)
//检查异常订单 //检查异常订单
CheckErrorOrder(); CheckErrorOrder();
if(_reverseThread == nullptr)
{
_reverseThread = new ReverseThread(this);
connect(_reverseThread, &ReverseThread::finished, _reverseThread, &ReverseThread::deleteLater);
_reverseThread->start();
}
} }
FMPePayPrivate::~FMPePayPrivate() FMPePayPrivate::~FMPePayPrivate()
...@@ -216,6 +219,7 @@ void FMPePayPrivate::Init() ...@@ -216,6 +219,7 @@ void FMPePayPrivate::Init()
_model = new FMPPayCheckModel(NULL, _db->getDb()); _model = new FMPPayCheckModel(NULL, _db->getDb());
_model->setTable(q->_table); _model->setTable(q->_table);
_model->setEditStrategy(QSqlTableModel::OnManualSubmit); _model->setEditStrategy(QSqlTableModel::OnManualSubmit);
_model->setSort(16, Qt::DescendingOrder);
} }
if(_payDialog == nullptr) { if(_payDialog == nullptr) {
...@@ -238,8 +242,8 @@ void FMPePayPrivate::Init() ...@@ -238,8 +242,8 @@ void FMPePayPrivate::Init()
} }
else if (_is_api && !_origin_request.isEmpty()) { else if (_is_api && !_origin_request.isEmpty()) {
hash["fm_cmd"] = _origin_request["fm_cmd"].toVariant(); hash["fm_cmd"] = _origin_request["fm_cmd"].toVariant();
hash[FMP_EPAY_STOREID] = _origin_request[FMP_EPAY_STOREID].toVariant(); hash[FMP_EPAY_STOREID] = q->_store_id;
hash[FMP_EPAY_STATIONID] = _origin_request["pos_id"].toVariant(); hash[FMP_EPAY_STATIONID] = q->_station_id;
hash[FMP_EPAY_OPERATORID] = _origin_request[FMP_EPAY_OPERATORID].toVariant(); hash[FMP_EPAY_OPERATORID] = _origin_request[FMP_EPAY_OPERATORID].toVariant();
hash[FMP_EPAY_BUSINESSDATE] = _origin_request[FMP_EPAY_BUSINESSDATE].toVariant(); hash[FMP_EPAY_BUSINESSDATE] = _origin_request[FMP_EPAY_BUSINESSDATE].toVariant();
QJsonObject trans = _origin_request["transactions"].toObject(); QJsonObject trans = _origin_request["transactions"].toObject();
...@@ -257,6 +261,7 @@ void FMPePayPrivate::Init() ...@@ -257,6 +261,7 @@ void FMPePayPrivate::Init()
return; return;
} }
} }
//QJsonArray pos_products = _origin_request["products"].toArray();
QJsonArray pos_products = trans["products"].toArray(); QJsonArray pos_products = trans["products"].toArray();
QJsonArray products; QJsonArray products;
int i = 1; int i = 1;
...@@ -269,16 +274,17 @@ void FMPePayPrivate::Init() ...@@ -269,16 +274,17 @@ void FMPePayPrivate::Init()
} }
FMP_INFO() << "++++++++++++++++++request JOSN" <<hash; FMP_INFO() << "++++++++++++++++++request JOSN" <<hash;
_payDialog = new FMPPayDialog(this, hash); _payDialog = new FMPPayDialog(this, hash);
connect(_payDialog, SIGNAL(apiFinished()), SIGNAL(apiFinished()));
} }
_payDialog->show(); _payDialog->show();
} }
void FMPePayPrivate::clearorder() void FMPePayPrivate::clearorder()
{ {
QtConcurrent::run( [&, this]()
{
Q_Q(FMPePay); Q_Q(FMPePay);
QtConcurrent::run( [q, this]()
{
FMPDataBase db(q->_databasename, QString("fmp_pay_clean")) ; FMPDataBase db(q->_databasename, QString("fmp_pay_clean")) ;
QDateTime date = QDateTime::currentDateTime(); QDateTime date = QDateTime::currentDateTime();
...@@ -299,6 +305,14 @@ QSqlTableModel *FMPePayPrivate::model() const ...@@ -299,6 +305,14 @@ QSqlTableModel *FMPePayPrivate::model() const
void FMPePayPrivate::DockPayRequest(const QByteArray &json) void FMPePayPrivate::DockPayRequest(const QByteArray &json)
{ {
Q_Q(FMPePay);
if(_payDialog != nullptr) {
_payDialog->close();
q->_inited = false;
delete _payDialog;
_payDialog = nullptr;
}
_is_api = true; _is_api = true;
_origin_request = QJsonDocument::fromJson(json).object(); _origin_request = QJsonDocument::fromJson(json).object();
_pos_trans_id=_origin_request[FMP_EPAY_TRANSID].toString(); _pos_trans_id=_origin_request[FMP_EPAY_TRANSID].toString();
...@@ -319,7 +333,7 @@ void FMPePayPrivate::DockPayRequest(const QByteArray &json) ...@@ -319,7 +333,7 @@ void FMPePayPrivate::DockPayRequest(const QByteArray &json)
QByteArray FMPePayPrivate::DockPayRespond() QByteArray FMPePayPrivate::DockPayRespond()
{ {
QEventLoop evt; QEventLoop evt;
connect(this, SIGNAL(finished(QJsonObject)), &evt, SLOT(quit())); connect(this, SIGNAL(apiFinished()), &evt, SLOT(quit()));
connect(this, SIGNAL(apiError()), &evt, SLOT(quit())); connect(this, SIGNAL(apiError()), &evt, SLOT(quit()));
evt.exec(); evt.exec();
...@@ -332,7 +346,7 @@ QByteArray FMPePayPrivate::DockPayRespond() ...@@ -332,7 +346,7 @@ QByteArray FMPePayPrivate::DockPayRespond()
_docked_response["fm_transId"] = _origin_response["pay_transId"]; _docked_response["fm_transId"] = _origin_response["pay_transId"];
_docked_response[FMP_EPAY_FMID] = _origin_response["fmId"]; _docked_response[FMP_EPAY_FMID] = _origin_response["fmId"];
_docked_response[FMP_EPAY_PAYED_AMOUNT] = _origin_response["total_amount"]; _docked_response[FMP_EPAY_PAYED_AMOUNT] = _origin_response["total_amount"];
_docked_response[FMP_EPAY_INVOICE_AMOUNT] = _origin_response[FMP_EPAY_INVOICE_AMOUNT]; _docked_response[FMP_EPAY_INVOICE_AMOUNT] = _origin_response[FMP_EPAY_INVOICE_AMOUNT].toInt();
_docked_response[FMP_EPAY_DISCOUNT_AMOUNT] = _origin_response["mcoupon_amount"].toInt(); _docked_response[FMP_EPAY_DISCOUNT_AMOUNT] = _origin_response["mcoupon_amount"].toInt();
QJsonArray pay_channels; QJsonArray pay_channels;
QJsonObject pay_ch; QJsonObject pay_ch;
...@@ -382,7 +396,7 @@ void FMPePayPrivate::DockRefundRequest(const QByteArray &json) ...@@ -382,7 +396,7 @@ void FMPePayPrivate::DockRefundRequest(const QByteArray &json)
QByteArray FMPePayPrivate::DockRefundRespond() QByteArray FMPePayPrivate::DockRefundRespond()
{ {
QEventLoop evt; QEventLoop evt;
connect(this, SIGNAL(finished(QJsonObject)), &evt, SLOT(quit())); connect(this, SIGNAL(apiFinished()), &evt, SLOT(quit()));
connect(this, SIGNAL(apiError()), &evt, SLOT(quit())); connect(this, SIGNAL(apiError()), &evt, SLOT(quit()));
evt.exec(); evt.exec();
...@@ -399,22 +413,22 @@ QByteArray FMPePayPrivate::DockRefundRespond() ...@@ -399,22 +413,22 @@ QByteArray FMPePayPrivate::DockRefundRespond()
_origin_response = QJsonObject(); _origin_response = QJsonObject();
json = QJsonDocument(_docked_response).toJson(); json = QJsonDocument(_docked_response).toJson();
emit apiFinish();
return json; return json;
} }
void FMPePayPrivate::ControlPayJson(QString sum, QString code) void FMPePayPrivate::ControlPayJson(QString sum, QString code)
{ {
Q_Q(FMPePay); _origin_response = QJsonObject();
if(_queryThread->isRunning()){ if(_queryThread->isRunning()){
emit error(QString::fromLocal8Bit("网络异常,请稍后重试!")); emit error(QString::fromLocal8Bit("网络异常,请稍后重试!"));
_origin_response[FMP_RPAY_PAY_RETURN_STATUSCODE]=105;
writeOrderToSqlite();
return ; return ;
} }
_origin_response = QJsonObject(); QtConcurrent::run( [&, sum, code, this ]()
QtConcurrent::run( [q, sum, code, this ]()
{ {
Q_Q(FMPePay);
if(_reverse_flag) if(_reverse_flag)
{ {
emit error(QString::fromLocal8Bit("网络连接异常(冲正...)")); emit error(QString::fromLocal8Bit("网络连接异常(冲正...)"));
...@@ -444,14 +458,14 @@ void FMPePayPrivate::ControlPayJson(QString sum, QString code) ...@@ -444,14 +458,14 @@ void FMPePayPrivate::ControlPayJson(QString sum, QString code)
} }
else else
{ {
_payDialog->_pay_total += outjson["total_amount"].toInt();
outjson.insert(SQL_KEY_ISREFUND, false); outjson.insert(SQL_KEY_ISREFUND, false);
outjson.insert(SQL_KEY_CODE, code); outjson.insert(SQL_KEY_CODE, code);
outjson.insert(SQL_KEY_BUSSINEDATE, q->_businessdate); outjson.insert(SQL_KEY_BUSSINEDATE, q->_businessdate);
outjson.insert(SQL_KEY_TRANSID, _docked_request[SQL_KEY_TRANSID].toString()); outjson.insert(SQL_KEY_TRANSID, _docked_request[SQL_KEY_TRANSID].toString());
_origin_response = outjson; _origin_response = outjson;
_origin_response["pay_total"] = _payDialog->_pay_total + _origin_response["total_amount"].toInt();
FMP_INFO() << "result json : " << outjson; FMP_INFO() << "result json : " << outjson;
writeOrderToSqlite(); writeOrderToSqlite();
// if (_is_api) { // if (_is_api) {
...@@ -460,6 +474,18 @@ void FMPePayPrivate::ControlPayJson(QString sum, QString code) ...@@ -460,6 +474,18 @@ void FMPePayPrivate::ControlPayJson(QString sum, QString code)
// } // }
// else // else
// _db->update(q->_table, outjson.toVariantHash(),QString("trans_id = '%1'").arg(_docked_request[SQL_KEY_TRANSID].toString())); // _db->update(q->_table, outjson.toVariantHash(),QString("trans_id = '%1'").arg(_docked_request[SQL_KEY_TRANSID].toString()));
//若支付请求中有会员账号,则发送会员结算进行积分
if(!_origin_request["fm_open_id"].toString().isEmpty())
{
vipFinal();
}
//如果是微信支付且不是会员,发送支付即会员请求
if(_origin_request["fm_open_id"].toString().isEmpty() && _origin_response["pay_ebcode"].toString() == "10004")
{
payVip();
}
emit finished(outjson); emit finished(outjson);
} }
}); });
...@@ -638,12 +664,12 @@ void FMPePayPrivate::GetApiReqMode(int type) ...@@ -638,12 +664,12 @@ void FMPePayPrivate::GetApiReqMode(int type)
void FMPePayPrivate::ControlRefundJson(const QJsonObject &trans) void FMPePayPrivate::ControlRefundJson(const QJsonObject &trans)
{ {
Q_Q(FMPePay);
_origin_response = QJsonObject(); _origin_response = QJsonObject();
FMP_INFO() << "RefundJson trans: " << trans; FMP_INFO() << "RefundJson trans: " << trans;
QtConcurrent::run( [q, trans, this ]() QtConcurrent::run( [&, trans, this ]()
{ {
Q_Q(FMPePay);
QStringList keylist; QStringList keylist;
QSqlQuery query; QSqlQuery query;
keylist.append(SQL_KEY_EBCODE); keylist.append(SQL_KEY_EBCODE);
...@@ -717,9 +743,6 @@ void FMPePayPrivate::ControlRefundJson(const QJsonObject &trans) ...@@ -717,9 +743,6 @@ void FMPePayPrivate::ControlRefundJson(const QJsonObject &trans)
FMP_INFO() << "refund success view json : " << outjson; FMP_INFO() << "refund success view json : " << outjson;
_model->setFilter(QString(""));
_model->select();
if (_is_api) { if (_is_api) {
_origin_response = outjson; _origin_response = outjson;
} }
...@@ -767,12 +790,15 @@ void FMPePayPrivate::ControlRefundJson(const QJsonObject &trans) ...@@ -767,12 +790,15 @@ void FMPePayPrivate::ControlRefundJson(const QJsonObject &trans)
} }
emit finished(outjson); emit finished(outjson);
FMP_INFO() << "finished(outjson)";
} }
if (!dock_success) { if (!dock_success) {
emit apiError(); emit apiError();
FMP_INFO() << "emit apiError()";
} }
}); });
FMP_INFO() << "Refund done";
} }
void FMPePayPrivate::ControlReverseJson() void FMPePayPrivate::ControlReverseJson()
...@@ -804,10 +830,11 @@ bool FMPePayPrivate::GetPayJson(const QString& sum, const QString& code) ...@@ -804,10 +830,11 @@ bool FMPePayPrivate::GetPayJson(const QString& sum, const QString& code)
transaction.insert(FMP_EPAY_TRANSTRACTION_CODE, code); transaction.insert(FMP_EPAY_TRANSTRACTION_CODE, code);
if (_is_api) { if (_is_api) {
//QJsonObject origin_trans = _origin_request["transactions"].toObject(); QJsonObject origin_trans = _origin_request["transactions"].toObject();
//transaction[FMP_EPAY_TRANSTRACTION_AMOUNT] = origin_trans["order_amount"]; //transaction[FMP_EPAY_TRANSTRACTION_AMOUNT] = origin_trans["order_amount"];
transaction[FMP_EPAY_TRANSTRACTION_AMOUNT] = (int)(sum.toDouble() * 100); transaction.insert(FMP_EPAY_TRANSTRACTION_AMOUNT, (int)((sum.toDouble() + 0.005) * 100));
QJsonArray pos_products = _origin_request["products"].toArray(); //QJsonArray pos_products = _origin_request["products"].toArray();
QJsonArray pos_products = origin_trans["products"].toArray();
QJsonArray products; QJsonArray products;
int i = 1; int i = 1;
foreach (QJsonValue v, pos_products) { foreach (QJsonValue v, pos_products) {
...@@ -920,10 +947,11 @@ void FMPePayPrivate::ClosePayWindow(int type) ...@@ -920,10 +947,11 @@ void FMPePayPrivate::ClosePayWindow(int type)
_origin_response[FMP_EPAY_ERRORMSG]=QString::fromLocal8Bit("支付失败,默认现金收银(已结算)"); _origin_response[FMP_EPAY_ERRORMSG]=QString::fromLocal8Bit("支付失败,默认现金收银(已结算)");
} }
else if(type==DIALOG_FORCE_CLOSE){ else if(type==DIALOG_FORCE_CLOSE){
if(_queryThread->isRunning()) //如果是异常订单,不用重写数据库
return;
_origin_response[FMP_EPAY_STATUSCODE]=106; _origin_response[FMP_EPAY_STATUSCODE]=106;
_origin_response[FMP_EPAY_ERRORMSG]=QString::fromLocal8Bit("程序运行时被关闭"); _origin_response[FMP_EPAY_ERRORMSG]=QString::fromLocal8Bit("程序运行时被关闭");
} }
writeOrderToSqlite();
} }
void FMPePayPrivate::writeOrderToSqlite(const QJsonObject &response) void FMPePayPrivate::writeOrderToSqlite(const QJsonObject &response)
...@@ -943,7 +971,7 @@ void FMPePayPrivate::writeOrderToSqlite() ...@@ -943,7 +971,7 @@ void FMPePayPrivate::writeOrderToSqlite()
response["fm_transId"] = _origin_response["pay_transId"]; response["fm_transId"] = _origin_response["pay_transId"];
response[FMP_EPAY_FMID] = _origin_response["fmId"]; response[FMP_EPAY_FMID] = _origin_response["fmId"];
response[FMP_EPAY_PAYED_AMOUNT] = _origin_response["total_amount"]; response[FMP_EPAY_PAYED_AMOUNT] = _origin_response["total_amount"];
response[FMP_EPAY_INVOICE_AMOUNT] = _origin_response.contains(FMP_EPAY_INVOICE_AMOUNT)?_origin_response[FMP_EPAY_INVOICE_AMOUNT] : QJsonValue(0); response[FMP_EPAY_INVOICE_AMOUNT] = _origin_response.contains(FMP_EPAY_INVOICE_AMOUNT)?_origin_response[FMP_EPAY_INVOICE_AMOUNT].toInt() : QJsonValue(0);
response[FMP_EPAY_DISCOUNT_AMOUNT] = _origin_response["mcoupon_amount"].toInt(); response[FMP_EPAY_DISCOUNT_AMOUNT] = _origin_response["mcoupon_amount"].toInt();
response[FMP_EPAY_TRANSID]=_pos_trans_id; response[FMP_EPAY_TRANSID]=_pos_trans_id;
response[FMP_RPAY_PAY_RETURN_STATUSCODE]=_dbWrite[FMP_RPAY_PAY_RETURN_STATUSCODE].toInt(); response[FMP_RPAY_PAY_RETURN_STATUSCODE]=_dbWrite[FMP_RPAY_PAY_RETURN_STATUSCODE].toInt();
...@@ -980,12 +1008,14 @@ void FMPePayPrivate::writeOrderToSqlite() ...@@ -980,12 +1008,14 @@ void FMPePayPrivate::writeOrderToSqlite()
response[FMP_EPAY_PAY_IDS] = pay_channels; response[FMP_EPAY_PAY_IDS] = pay_channels;
QByteArray json = QJsonDocument(response).toJson(); QByteArray json = QJsonDocument(response).toJson();
if(!SendToMonitor(json)){ if(!SendToMonitor(json)){
emit error(QString::fromLocal8Bit("数据发送监控程序失败!")); emit error(QString::fromLocal8Bit("数据发送监控程序失败!"));
FMP_ERROR() << "数据发送监控程序失败:" << json; FMP_ERROR() << "数据发送监控程序失败:" << json;
} }
} }
_dbWrite[FMP_EPAY_TRANSID]=_pos_trans_id; _dbWrite[FMP_EPAY_TRANSID]=_pos_trans_id;
_dbWrite["pay_total"] = _payDialog->_pay_total/100; //分->元
if(_dbWrite[FMP_RPAY_PAY_RETURN_STATUSCODE].toInt() == 100){ if(_dbWrite[FMP_RPAY_PAY_RETURN_STATUSCODE].toInt() == 100){
if (!_db->isRecordExist(q->_table,_pos_trans_id)){ if (!_db->isRecordExist(q->_table,_pos_trans_id)){
_dbWrite[FMP_EPAY_OPERATORID] = _origin_request[FMP_EPAY_OPERATORID]; _dbWrite[FMP_EPAY_OPERATORID] = _origin_request[FMP_EPAY_OPERATORID];
...@@ -995,7 +1025,7 @@ void FMPePayPrivate::writeOrderToSqlite() ...@@ -995,7 +1025,7 @@ void FMPePayPrivate::writeOrderToSqlite()
_db->update(q->_table, _dbWrite.toVariantHash(),QString("trans_id = '%1'").arg(_dbWrite[SQL_KEY_TRANSID].toString())); _db->update(q->_table, _dbWrite.toVariantHash(),QString("trans_id = '%1'").arg(_dbWrite[SQL_KEY_TRANSID].toString()));
} }
else{ else{
//支付失败,将pay_total置为order_amount //支付失败,将pay_total置为0
_dbWrite["pay_total"] = 0; _dbWrite["pay_total"] = 0;
if(!_db->isRecordExist(q->_table,_pos_trans_id)){ if(!_db->isRecordExist(q->_table,_pos_trans_id)){
...@@ -1049,6 +1079,13 @@ void FMPePayPrivate::updateSqlite(const QJsonObject &json) ...@@ -1049,6 +1079,13 @@ void FMPePayPrivate::updateSqlite(const QJsonObject &json)
} }
void FMPePayPrivate::UpdateViewDetail()
{
if(_payDialog!=NULL && !_is_api){
_payDialog->WidgetChange();
}
}
void FMPePayPrivate::setPosTransId(QString orderId) void FMPePayPrivate::setPosTransId(QString orderId)
{ {
_pos_trans_id=orderId; _pos_trans_id=orderId;
...@@ -1104,10 +1141,12 @@ void FMPePayPrivate::CheckErrorOrder() ...@@ -1104,10 +1141,12 @@ void FMPePayPrivate::CheckErrorOrder()
QStringList keylist; QStringList keylist;
QSqlQuery query; QSqlQuery query;
keylist <<FMP_EPAY_TRANSID << FMP_EPAY_OPERATORID; keylist <<FMP_EPAY_TRANSID << FMP_EPAY_OPERATORID;
if(!_db->find(q->_table, query, keylist, QString("statusCode = %1 and business_date= '%2'").arg(ERROR_ORDER_STATUS).arg(q->_businessdate)) || !query.next()) { FMP_INFO() << QString::fromLocal8Bit("检查异常订单");
if(!_db->find(q->_table, query, keylist, QString("statusCode = %1 and addtime like '%2%%'").arg(ERROR_ORDER_STATUS).arg(q->_businessdate)) || !query.next()) {
return; return;
} }
else { else {
FMP_INFO() << QString::fromLocal8Bit("异常订单号:")<<query.value(0).toString();
QJsonObject queryJson; QJsonObject queryJson;
queryJson[FMP_EPAY_TRANSID] = query.value(0).toString(); queryJson[FMP_EPAY_TRANSID] = query.value(0).toString();
queryJson[FMP_EPAY_OPERATORID] = query.value(1).toString(); queryJson[FMP_EPAY_OPERATORID] = query.value(1).toString();
...@@ -1130,7 +1169,7 @@ void FMPePayPrivate::GetDailyBillData(QVector<PayDetail> &vecPay) ...@@ -1130,7 +1169,7 @@ void FMPePayPrivate::GetDailyBillData(QVector<PayDetail> &vecPay)
PayDetail pay; PayDetail pay;
//支付宝查询 //支付宝查询
if(!_db->find(q->_table, query, keylist, QString("statusCode = %1 and addtime like '%2%%' and pay_ebcode='%3'").arg(100).arg(q->_businessdate).arg("10001")) || !query.next()) { if(!_db->find(q->_table, query, keylist, QString("statusCode = %1 and addtime like '%2%%' and pay_ebcode='%3'").arg(100).arg(q->_businessdate).arg("10001")) || !query.next()) {
FMP_ERROR() << "查询支付宝数据错误!"; FMP_ERROR() << QString::fromLocal8Bit("查询支付宝数据错误!");
} }
else { else {
pay.name=QString::fromLocal8Bit("支付宝"); pay.name=QString::fromLocal8Bit("支付宝");
...@@ -1141,7 +1180,7 @@ void FMPePayPrivate::GetDailyBillData(QVector<PayDetail> &vecPay) ...@@ -1141,7 +1180,7 @@ void FMPePayPrivate::GetDailyBillData(QVector<PayDetail> &vecPay)
} }
//微信查询 //微信查询
if(!_db->find(q->_table, query, keylist, QString("statusCode = %1 and addtime like '%2%%' and pay_ebcode='%3'").arg(100).arg(q->_businessdate).arg("10004")) || !query.next()) { if(!_db->find(q->_table, query, keylist, QString("statusCode = %1 and addtime like '%2%%' and pay_ebcode='%3'").arg(100).arg(q->_businessdate).arg("10004")) || !query.next()) {
FMP_ERROR() << "查询微信数据错误!"; FMP_ERROR() << QString::fromLocal8Bit("查询微信数据错误!");
} }
else { else {
pay.name=QString::fromLocal8Bit("微信"); pay.name=QString::fromLocal8Bit("微信");
...@@ -1152,7 +1191,7 @@ void FMPePayPrivate::GetDailyBillData(QVector<PayDetail> &vecPay) ...@@ -1152,7 +1191,7 @@ void FMPePayPrivate::GetDailyBillData(QVector<PayDetail> &vecPay)
} }
//全部查询 //全部查询
if(!_db->find(q->_table, query, keylist, QString("statusCode = %1 and addtime like '%2%%'").arg(100).arg(q->_businessdate)) || !query.next()) { if(!_db->find(q->_table, query, keylist, QString("statusCode = %1 and addtime like '%2%%'").arg(100).arg(q->_businessdate)) || !query.next()) {
FMP_ERROR() << "查询全部支付数据错误!"; FMP_ERROR() << QString::fromLocal8Bit("查询全部支付数据错误!");
} }
else { else {
pay.name=QString::fromLocal8Bit("全部"); pay.name=QString::fromLocal8Bit("全部");
...@@ -1163,9 +1202,9 @@ void FMPePayPrivate::GetDailyBillData(QVector<PayDetail> &vecPay) ...@@ -1163,9 +1202,9 @@ void FMPePayPrivate::GetDailyBillData(QVector<PayDetail> &vecPay)
} }
//QString::number(json[FMP_RPAY_PAY_RETURN_TOTAL].toDouble()/100) //QString::number(json[FMP_RPAY_PAY_RETURN_TOTAL].toDouble()/100)
//未成功支付 //未成功支付
FMP_INFO() << "未成功支付查询!"; FMP_INFO() << QString::fromLocal8Bit("未成功支付查询!");
if(!_db->find(q->_table, query, keylist, QString("statusCode != %1 and addtime like '%2%%'").arg(100).arg(q->_businessdate)) || !query.next()) { if(!_db->find(q->_table, query, keylist, QString("statusCode != %1 and addtime like '%2%%'").arg(100).arg(q->_businessdate)) || !query.next()) {
FMP_ERROR() << "查询未成功支付数据错误!"; FMP_ERROR() << QString::fromLocal8Bit("查询未成功支付数据错误!");
} }
else { else {
pay.name=QString::fromLocal8Bit(""); pay.name=QString::fromLocal8Bit("");
...@@ -1175,3 +1214,218 @@ void FMPePayPrivate::GetDailyBillData(QVector<PayDetail> &vecPay) ...@@ -1175,3 +1214,218 @@ void FMPePayPrivate::GetDailyBillData(QVector<PayDetail> &vecPay)
vecPay.push_back(pay); vecPay.push_back(pay);
} }
} }
//支付即会员
void FMPePayPrivate::payVip()
{
/*QJsonObject final;
final["pos_ver"] = _docked_request["ver"].toInt();
final["operator_id"] = _docked_request["operator_id"].toString();
final["fm_cmd"] = 1007;
final["pos_id"] = _docked_request["station_id"].toString();
final["store_id"] = _docked_request["store_id"].toString();
final["business_date"] = _docked_request["business_date"].toString();
final["trans_id"] = _docked_request["trans_id"].toString();
final["fm_open_id"] = "";
QJsonObject transactions;
transactions["order_amount"] = _docked_request["transactions"].toArray()[0].toObject()["amount"].toInt();
transactions["paid_amount"] = _origin_response["total_amount"].toInt();
QJsonArray pay_ids;
QJsonObject pay_id;
pay_id["pay_id"] = _origin_response["pay_ebcode"].toString();
pay_id["pay_str"] = _origin_response["pay_id"].toString();
pay_id["pay_amount"] = _origin_response["total_amount"].toInt();
pay_id["pay_transId"] = _origin_response["pay_transId"].toString();
pay_ids.append(pay_id);
transactions["pay_ids"] = pay_ids;
QJsonArray products;
foreach(auto p , _docked_request["transactions"].toArray()[0].toObject()["products"].toArray())
{
QJsonObject product;
product["consume_num"] = p.toObject()["consume_num"].toInt();
product["price"] = p.toObject()["price"].toInt();
product["pid"] = p.toObject()["pid"];
product["disAmount"] = p.toObject()["dis_amount"].toInt();
products.append(product);
}
transactions["products"] = products;
final["transactions"] = transactions;
final["from_pay"] = 1; //表示该结算请求是来自于支付模块,会员模块可以此区分
FMP_DEBUG() << QString::fromLocal8Bit("支付即会员_docked_request: ") << _docked_request;
FMP_DEBUG() << QString::fromLocal8Bit("支付即会员_origin_respons: ") << _origin_response;
FMP_DEBUG() << QString::fromLocal8Bit("支付即会员 Json: ") << final;
QTcpSocket socket;
socket.connectToHost(QHostAddress::LocalHost, 23770);
if(!socket.waitForConnected())
{
FMP_ERROR() << QString::fromLocal8Bit("支付即会员失败! ") << socket.errorString();
}
else
{
socket.write(QJsonDocument(final).toJson(QJsonDocument::Compact));
if(!socket.waitForBytesWritten())
{
FMP_ERROR() << QString::fromLocal8Bit("支付即会员失败! ") << socket.errorString();
}
else
{
if(!socket.waitForReadyRead())
{
FMP_ERROR() << QString::fromLocal8Bit("支付即会员失败! ") << socket.errorString();
}
else
{
QByteArray result = socket.readAll();
FMP_DEBUG() << QString::fromLocal8Bit("支付即会员: ") << result;
}
}
socket.disconnectFromHost();
socket.close();
}*/
QString result = final();
FMP_DEBUG() << QString::fromLocal8Bit("支付即会员: ") << result;
}
//结算进行积分
void FMPePayPrivate::vipFinal()
{
/*QJsonObject final;
final["pos_ver"] = _docked_request["ver"].toInt();
final["operator_id"] = _docked_request["operator_id"].toString();
final["fm_cmd"] = 1007;
final["pos_id"] = _docked_request["station_id"].toString();
final["store_id"] = _docked_request["store_id"].toString();
final["business_date"] = _docked_request["business_date"].toString();
final["trans_id"] = _docked_request["trans_id"].toString();
final["fm_open_id"] = _origin_request["fm_open_id"].toString();
QJsonObject transactions;
transactions["order_amount"] = _docked_request["transactions"].toArray()[0].toObject()["amount"].toInt();
transactions["paid_amount"] = _origin_response["total_amount"].toInt();
QJsonArray pay_ids;
QJsonObject pay_id;
pay_id["pay_id"] = _origin_response["pay_ebcode"].toString();
pay_id["pay_str"] = _origin_response["pay_id"].toString();
pay_id["pay_amount"] = _origin_response["total_amount"].toInt();
pay_id["pay_transId"] = _origin_response["pay_transId"].toString();
pay_ids.append(pay_id);
transactions["pay_ids"] = pay_ids;
QJsonArray products;
foreach(auto p , _docked_request["transactions"].toArray()[0].toObject()["products"].toArray())
{
QJsonObject product;
product["consume_num"] = p.toObject()["consume_num"].toInt();
product["price"] = p.toObject()["price"].toInt();
product["pid"] = p.toObject()["pid"];
product["disAmount"] = p.toObject()["dis_amount"].toInt();
products.append(product);
}
transactions["products"] = products;
final["transactions"] = transactions;
final["from_pay"] = 1; //表示该结算请求是来自于支付模块,会员模块可以此区分
FMP_DEBUG() << QString::fromLocal8Bit("结算进行积分_docked_request: ") << _docked_request;
FMP_DEBUG() << QString::fromLocal8Bit("结算进行积分_origin_respons: ") << _origin_response;
FMP_DEBUG() << QString::fromLocal8Bit("结算进行积分 Json: ") << final;
QTcpSocket socket;
socket.connectToHost(QHostAddress::LocalHost, 23770);
if(!socket.waitForConnected())
{
FMP_ERROR() << QString::fromLocal8Bit("虚拟支付结算积分失败! ") << socket.errorString();
}
else
{
socket.write(QJsonDocument(final).toJson(QJsonDocument::Compact));
if(!socket.waitForBytesWritten())
{
FMP_ERROR() << QString::fromLocal8Bit("虚拟支付结算积分失败! ") << socket.errorString();
}
else
{
if(!socket.waitForReadyRead())
{
FMP_ERROR() << QString::fromLocal8Bit("虚拟支付结算积分失败! ") << socket.errorString();
}
else
{
QByteArray result = socket.readAll();
FMP_DEBUG() << QString::fromLocal8Bit("虚拟支付结算积分: ") << result;
}
}
socket.disconnectFromHost();
socket.close();
}*/
QString fm_open_id = _origin_request["fm_open_id"].toString();
QString result = final(fm_open_id);
FMP_DEBUG() << QString::fromLocal8Bit("虚拟支付结算积分: ") << result;
}
QString FMPePayPrivate::final(QString fm_open_id)
{
QJsonObject final;
final["pos_ver"] = _docked_request["ver"].toInt();
final["operator_id"] = _docked_request["operator_id"].toString();
final["fm_cmd"] = 1007;
final["pos_id"] = _docked_request["station_id"].toString();
final["store_id"] = _docked_request["store_id"].toString();
final["business_date"] = _docked_request["business_date"].toString();
final["trans_id"] = _docked_request["trans_id"].toString();
final["fm_open_id"] = fm_open_id;
QJsonObject transactions;
transactions["order_amount"] = _docked_request["transactions"].toArray()[0].toObject()["amount"].toInt();
transactions["paid_amount"] = _origin_response["total_amount"].toInt();
QJsonArray pay_ids;
QJsonObject pay_id;
pay_id["pay_id"] = _origin_response["pay_ebcode"].toString();
pay_id["pay_str"] = _origin_response["pay_id"].toString();
pay_id["pay_amount"] = _origin_response["total_amount"].toInt();
pay_id["pay_transId"] = _origin_response["pay_transId"].toString();
pay_ids.append(pay_id);
transactions["pay_ids"] = pay_ids;
QJsonArray products;
foreach(auto p , _docked_request["transactions"].toArray()[0].toObject()["products"].toArray())
{
QJsonObject product;
product["consume_num"] = p.toObject()["consume_num"].toInt();
product["price"] = p.toObject()["price"].toInt();
product["pid"] = p.toObject()["pid"];
product["disAmount"] = p.toObject()["dis_amount"].toInt();
products.append(product);
}
transactions["products"] = products;
final["transactions"] = transactions;
final["from_pay"] = 1; //表示该结算请求是来自于支付模块,会员模块可以此区分
QString result;
QTcpSocket socket;
socket.connectToHost(QHostAddress::LocalHost, 23770);
if(!socket.waitForConnected())
{
result = socket.errorString();
}
else
{
socket.write(QJsonDocument(final).toJson(QJsonDocument::Compact));
if(!socket.waitForBytesWritten())
{
result = socket.errorString();
}
else
{
if(!socket.waitForReadyRead())
{
result = socket.errorString();
}
else
{
result = socket.readAll();
}
}
socket.disconnectFromHost();
socket.close();
}
return result;
}
...@@ -73,6 +73,8 @@ public: ...@@ -73,6 +73,8 @@ public:
void GetDailyBillData(QVector<PayDetail> &vecPay); void GetDailyBillData(QVector<PayDetail> &vecPay);
void UpdateViewDetail(); //更新列表显示
void WriteRedeemToSqlite(QJsonObject redeemInfo); void WriteRedeemToSqlite(QJsonObject redeemInfo);
FMPDataBase* GetDB()const; FMPDataBase* GetDB()const;
...@@ -98,14 +100,18 @@ private: ...@@ -98,14 +100,18 @@ private:
void CheckErrorOrder(); //查询异常订单,如果有异常订单,则进入查询状态 void CheckErrorOrder(); //查询异常订单,如果有异常订单,则进入查询状态
signals: signals:
void apiFinished();
void apiError(); void apiError();
void apiFinish();
void error(QString errormsg); void error(QString errormsg);
void finished(QJsonObject json); void finished(QJsonObject json);
protected slots: protected slots:
void witedata(); void witedata();
void payVip();
void vipFinal();
QString final(QString fm_open_id = QString());
public: public:
FMPePay *q_ptr; FMPePay *q_ptr;
...@@ -119,6 +125,7 @@ public: ...@@ -119,6 +125,7 @@ public:
CQueryThread *_queryThread; CQueryThread *_queryThread;
ReverseThread *_reverseThread; ReverseThread *_reverseThread;
QString _pos_trans_id; QString _pos_trans_id;
QJsonObject _origin_request;
private: private:
bool _reverse_flag; bool _reverse_flag;
...@@ -129,7 +136,7 @@ private: ...@@ -129,7 +136,7 @@ private:
QSqlTableModel *_model; QSqlTableModel *_model;
QFutureWatcher<QByteArray> *_watcher; QFutureWatcher<QByteArray> *_watcher;
QJsonObject _origin_request;
QJsonObject _docked_request; QJsonObject _docked_request;
QJsonObject _origin_response; QJsonObject _origin_response;
QJsonObject _docked_response; QJsonObject _docked_response;
......
...@@ -9,6 +9,7 @@ ...@@ -9,6 +9,7 @@
#include "fmp_home_i.h" #include "fmp_home_i.h"
#include "fmp_detaildialog.h" #include "fmp_detaildialog.h"
#include "fmp_database.h" #include "fmp_database.h"
#include "fmp_vip_i.h"
#include <QDebug> #include <QDebug>
#include <fmp_settings_i.h> #include <fmp_settings_i.h>
...@@ -27,6 +28,8 @@ ...@@ -27,6 +28,8 @@
#include <QTableWidget> #include <QTableWidget>
#include <QSqlQuery> #include <QSqlQuery>
#include <QMessageBox> #include <QMessageBox>
#include <QTcpSocket>
#include <QHostAddress>
FMPPayDialog::FMPPayDialog(FMPePayPrivate *control, QVariantHash basicinfo, QWidget *parent) : FMPPayDialog::FMPPayDialog(FMPePayPrivate *control, QVariantHash basicinfo, QWidget *parent) :
_control(control), _control(control),
...@@ -274,6 +277,19 @@ void FMPPayDialog::show() ...@@ -274,6 +277,19 @@ void FMPPayDialog::show()
return QDialog::show(); return QDialog::show();
} }
void FMPPayDialog::WidgetChange()
{
//异常订单查询到支付结果后,更新列显示
if(_curt_btn->property("index").toInt() == 3)
setWaitPayView();
if(_curt_btn->property("index").toInt() == 4)
setErrorOrderView();
if(_curt_btn->property("index").toInt() == 5)
setSuccessView();
}
void FMPPayDialog::onWidgetChange() void FMPPayDialog::onWidgetChange()
{ {
QPushButton *tmpcur = _curt_btn; QPushButton *tmpcur = _curt_btn;
...@@ -498,6 +514,7 @@ void FMPPayDialog::setPaySuccessView(QJsonObject json) ...@@ -498,6 +514,7 @@ void FMPPayDialog::setPaySuccessView(QJsonObject json)
_success_flag = true; _success_flag = true;
PlayAnimation(findChild<QWidget *>(_curt_btn->property("pageName").toString()), ui->wdg_success_main, RightToLeft); PlayAnimation(findChild<QWidget *>(_curt_btn->property("pageName").toString()), ui->wdg_success_main, RightToLeft);
ui->btn_pay->setEnabled(false);
} }
void FMPPayDialog::setRefundSuccessView(QJsonObject json) void FMPPayDialog::setRefundSuccessView(QJsonObject json)
...@@ -901,10 +918,12 @@ void FMPPayDialog::onBtnConfirmClicked() ...@@ -901,10 +918,12 @@ void FMPPayDialog::onBtnConfirmClicked()
return; return;
} }
if(ui->btn_pay->isChecked()) if(ui->btn_pay->isChecked())
{ {
_wait->SetContent(FMPPayWait::LOADING, QString::fromLocal8Bit("支付中...")); _wait->SetContent(FMPPayWait::LOADING, QString::fromLocal8Bit("支付中..."));
_control->ControlPayJson(ui->lineedit_num->text(), ui->lineedit_code->text()); _control->ControlPayJson(ui->lineedit_num->text(), ui->lineedit_code->text());
} }
else else
{ {
...@@ -939,14 +958,14 @@ void FMPPayDialog::on_btn_close_clicked() ...@@ -939,14 +958,14 @@ void FMPPayDialog::on_btn_close_clicked()
_control->Uninit(); _control->Uninit();
} }
else{ else{
if(!_success_flag){ if(!_success_flag &&!_control->_queryThread->isRunning()){
fmp_forceClose_dialog *_force_close=new fmp_forceClose_dialog(this); fmp_forceClose_dialog *_force_close=new fmp_forceClose_dialog(this);
_force_close->setModal(true); _force_close->setModal(true);
_force_close->show(); _force_close->show();
} }
else{ else{
this->close(); this->close();
_control->Uninit(); //_control->Uninit();
} }
} }
} }
...@@ -993,10 +1012,10 @@ void FMPPayDialog::on_btn_success_confirm_clicked() ...@@ -993,10 +1012,10 @@ void FMPPayDialog::on_btn_success_confirm_clicked()
QWidget *nextwdg = findChild<QWidget *>(_curt_btn->property("pageName").toString()); QWidget *nextwdg = findChild<QWidget *>(_curt_btn->property("pageName").toString());
PlayAnimation(ui->wdg_success_main, nextwdg, LeftToRight); PlayAnimation(ui->wdg_success_main, nextwdg, LeftToRight);
if(_control->_is_api) if(_control->_is_api) {
emit apiFinished();
on_btn_close_clicked(); on_btn_close_clicked();
}
_success_flag = false;
} }
void FMPPayDialog::on_btn_paycheck_clicked() void FMPPayDialog::on_btn_paycheck_clicked()
......
...@@ -62,7 +62,11 @@ public slots: ...@@ -62,7 +62,11 @@ public slots:
void setBasicInfo(QVariantHash basicinfo); void setBasicInfo(QVariantHash basicinfo);
void on_cash_pay(); void on_cash_pay();
void on_force_close(); void on_force_close();
void WidgetChange();
protected: protected:
void keyPressEvent(QKeyEvent *); void keyPressEvent(QKeyEvent *);
...@@ -103,6 +107,7 @@ private slots: ...@@ -103,6 +107,7 @@ private slots:
void redeem(); void redeem();
void ShowPayDetail(const QModelIndex& index); void ShowPayDetail(const QModelIndex& index);
public: public:
void setPayView(); void setPayView();
...@@ -113,6 +118,9 @@ public: ...@@ -113,6 +118,9 @@ public:
void Reverse(); void Reverse();
void Reverse(const QJsonObject& reverseReq); void Reverse(const QJsonObject& reverseReq);
signals:
void apiFinished();
private: private:
void setCheckView(); void setCheckView();
...@@ -141,6 +149,7 @@ public: ...@@ -141,6 +149,7 @@ public:
int _pay_total; //一笔订单的支付总额,包括 扫码支付额、卡券支付额...... int _pay_total; //一笔订单的支付总额,包括 扫码支付额、卡券支付额......
QStringList couponDes; QStringList couponDes;
QVector<QJsonObject> _redeem_results; //保存每张券的核销结果 QVector<QJsonObject> _redeem_results; //保存每张券的核销结果
private: private:
Ui::FMPPayDialog *ui; Ui::FMPPayDialog *ui;
......
...@@ -5,7 +5,7 @@ ...@@ -5,7 +5,7 @@
#define VER_MINOR 1 #define VER_MINOR 1
#define VER_REVISION 0 #define VER_REVISION 0
#define VER_BUILD 19 #define VER_BUILD 26
//! Convert version numbers to string //! Convert version numbers to string
#define _STR(S) #S #define _STR(S) #S
......
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