Commit c906f78f by gujin.wang

修改一些崩溃bug

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