Commit 0e7142d5 by guanghui.cui

列表展示

parent 9b836681
#include "cquerythread.h"
CQueryThread::CQueryThread(FMPePayPrivate *fmPay)
:_fmPay(fmPay)
: QThread(),
_fmPay(fmPay)
,_iReqCount(0)
,_run(false)
{
}
CQueryThread::~CQueryThread()
{
}
void CQueryThread::run()
{
while (_run) {
......@@ -22,6 +28,7 @@ void CQueryThread::trySend()
QJsonObject outjson;
_query_request["clientReqCount"]=_iReqCount+1;
FMP_INFO() << "QThread trySend:" << _query_request;
_fmPay->HttpPost(outjson, _query_request ,errors);
if(outjson[FMP_RPAY_PAY_RETURN_STATUSCODE].toInt() != 102){
_run=false;
......
......@@ -9,6 +9,7 @@ class CQueryThread:public QThread
{
public:
CQueryThread(FMPePayPrivate *fmPay);
virtual ~CQueryThread();
void run();
void trySend();
......
......@@ -32,7 +32,8 @@
unsigned int FMPePayPrivate::s_ClientReqCount = 10000;
FMPePayPrivate::FMPePayPrivate(FMPePay *parent)
: q_ptr(parent),
: QObject(parent),
q_ptr(parent),
_payDialog(nullptr),
_setting(nullptr),
_network(nullptr),
......@@ -149,7 +150,9 @@ void FMPePayPrivate::Init()
"isrefund boolean, "
"refund_date date,"
"statusCode integer,"
"addtime TIMESTAMP default (datetime('now', 'localtime'))"
"operator_id varchar(40),"
"addtime TIMESTAMP default (datetime('now', 'localtime')),"
"PRIMARY KEY (trans_id)"
")";
FMP_INFO() << " creat table sql:" << sql;
......@@ -289,16 +292,18 @@ QByteArray FMPePayPrivate::DockPayRespond()
_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_DISCOUNT_AMOUNT] = _origin_response["mcoupon_amount"].toInt() + _origin_response["pcoupon_amount"].toInt();
_docked_response[FMP_EPAY_DISCOUNT_AMOUNT] = _origin_response["mcoupon_amount"].toInt();
QJsonArray pay_channels;
QJsonObject pay_ch;
pay_ch[FMP_EPAY_PAY_ID] = _origin_response["pay_ebcode"];
pay_ch[FMP_EPAY_PAY_DESC] = _origin_response["pay_id"];
pay_ch["code"] = _origin_response["code"];
pay_ch["pay_amount"] = _origin_response["total_amount"];
pay_ch["pay_account"] = _origin_response["pay_acount"];
pay_ch["pay_account"] = _origin_response.contains("pay_acount")?_origin_response["pay_acount"] : QJsonValue("");
pay_ch["platform_discount"] = _origin_response["mcoupon_amount"];
pay_ch["merchant_discount"] = _origin_response["pcoupon_amount"];
//pay_ch["merchant_discount"] = _origin_response["pcoupon_amount"];
pay_ch["merchant_discount"] = _origin_response.contains("pcoupon_amount")?_origin_response["pcoupon_amount"] : QJsonValue(0);
if (_origin_response.contains("ext")) {
pay_ch["ext"] = _origin_response["ext"];
}
......@@ -348,7 +353,7 @@ void FMPePayPrivate::ControlPayJson(QString sum, QString code)
Q_Q(FMPePay);
if(_queryThread->isRunning()){
emit error(QString::fromLocal8Bit("由于网络原因,非码收银暂不可用!"));
emit error(QString::fromLocal8Bit("网络异常,请稍后重试!"));
return ;
}
......@@ -390,6 +395,7 @@ void FMPePayPrivate::ControlPayJson(QString sum, QString code)
outjson.insert(SQL_KEY_TRANSID, _docked_request[SQL_KEY_TRANSID].toString());
_origin_response = outjson;
FMP_INFO() << "result json : " << outjson;
writeOrderToSqlite();
// if (_is_api) {
// _origin_response = outjson;
......@@ -482,7 +488,7 @@ bool FMPePayPrivate::HttpPost(QJsonObject& outjson, QJsonObject json, QString &e
if(reply->error() != QNetworkReply::NoError)
{
error = QString::fromLocal8Bit("网络异常");
error = QString::fromLocal8Bit("网络异常,支付失败!");
outjson[FMP_RPAY_PAY_RETURN_STATUSCODE]=102;
outjson[FMP_RPAY_PAY_RETURN_MSG]=error;
return false;
......@@ -490,7 +496,7 @@ bool FMPePayPrivate::HttpPost(QJsonObject& outjson, QJsonObject json, QString &e
if(!CheckReturnJson(reply->readAll(), outjson))
{
error = QString::fromLocal8Bit("返回数据错误");
error = QString::fromLocal8Bit("网络异常,支付失败!");
outjson[FMP_RPAY_PAY_RETURN_STATUSCODE]=102;
outjson[FMP_RPAY_PAY_RETURN_MSG]=error;
return false;
......@@ -550,19 +556,21 @@ void FMPePayPrivate::GetMode()
void FMPePayPrivate::GetApiReqMode(int type)
{
Q_Q(FMPePay);
QString sql;
//QString date=q->_businessdate;
switch (type) {
case ORDER_NEED_PAY:
sql="statusCode=106 or statusCode=105";
sql=QString("addtime like '%1%%' and statusCode=106 or statusCode=105").arg(q->_businessdate);
break;
case ORDER_HAS_ERROR:
sql="statusCode=102";
sql=QString("statusCode=102 and addtime like '%1%%'").arg(q->_businessdate);
break;
case ORDER_PAY_SUCCESS:
sql="statusCode=100";
sql=QString("statusCode=100 and addtime like '%1%%'").arg(q->_businessdate);
break;
case ORDER_DONE:
sql="statusCode=108";
sql=QString("statusCode=108 and addtime like '%1%%'").arg(q->_businessdate);
break;
default:
break;
......@@ -727,7 +735,7 @@ bool FMPePayPrivate::GetPayJson(const QString& sum, const QString& code)
_docked_request.insert( FMP_EPAY_PARTNERID, q->_partner_id.toInt());
_docked_request.insert( FMP_EPAY_CLIENTREQCOUNT, (int)((++s_ClientReqCount)%=10000000));
_docked_request.insert( FMP_EPAY_TRANSID, _origin_request.contains(FMP_EPAY_TRANSID)?_origin_request[FMP_EPAY_TRANSID].toString() : QDateTime::currentDateTime().toString("yyyyMMddhhmmsszzz"));
_docked_request.insert( FMP_EPAY_TRANSID, _origin_request.contains(FMP_EPAY_TRANSID)?_origin_request[FMP_EPAY_TRANSID].toString() : _pos_trans_id);
_docked_request.insert( FMP_EPAY_TRANSTRACTION, transactionarry);
......@@ -820,6 +828,42 @@ void FMPePayPrivate::writeOrderToSqlite()
Q_Q(FMPePay);
QJsonObject _dbWrite=_origin_response;
if(!_is_api){
// 由于从服务端接收到的字段名称和协议中定义的不同,这里需要转换
QJsonObject response;
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_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();
response[FMP_EPAY_ERRORMSG] = _origin_response.contains("msg") ? _origin_response[FMP_EPAY_ERRORMSG] : QJsonValue("");
response["prompt"] = 0;
QJsonArray pay_channels;
QJsonObject pay_ch;
pay_ch[FMP_EPAY_PAY_ID] = _origin_response["pay_ebcode"];
pay_ch[FMP_EPAY_PAY_DESC] = _origin_response["pay_id"];
pay_ch["code"] = _origin_response["code"];
pay_ch["pay_amount"] = _origin_response["total_amount"];
pay_ch["pay_account"] = _origin_response.contains("pay_acount")?_origin_response["pay_acount"] : QJsonValue("");
pay_ch["platform_discount"] = _origin_response["mcoupon_amount"];
pay_ch["merchant_discount"] = _origin_response.contains("pcoupon_amount")?_origin_response["pcoupon_amount"] : QJsonValue(0);
if (_origin_response.contains("ext")) {
pay_ch["ext"] = _origin_response["ext"];
}
pay_channels.append(pay_ch);
response[FMP_EPAY_PAY_IDS] = pay_channels;
QByteArray json = QJsonDocument(response).toJson();
if(!SendToMonitor(json)){
emit error(QString::fromLocal8Bit("数据发送监控程序失败!"));
FMP_ERROR() << "数据发送监控程序失败:" << json;
}
}
if(_dbWrite[FMP_RPAY_PAY_RETURN_STATUSCODE].toInt() == 100){
if (_is_api)
_db->insert(q->_table, _dbWrite.toVariantHash());
......@@ -827,39 +871,48 @@ void FMPePayPrivate::writeOrderToSqlite()
_db->update(q->_table, _dbWrite.toVariantHash(),QString("trans_id = '%1'").arg(_dbWrite[SQL_KEY_TRANSID].toString()));
}
else{
QJsonObject origin_trans = _origin_request["transactions"].toObject();
_dbWrite[FMP_EPAY_TRANSID] = _origin_request.contains(FMP_EPAY_TRANSID)?_origin_request[FMP_EPAY_TRANSID] : QJsonValue("");
if(_is_api){
_dbWrite["total_amount"]=origin_trans["order_amount"];
_dbWrite["business_date"]=_origin_request["business_date"];
_dbWrite[FMP_EPAY_TRANSID] = _origin_request[FMP_EPAY_TRANSID];
_db->insert(q->_table, _dbWrite.toVariantHash());
}
else{
_dbWrite[FMP_EPAY_TRANSID]=_pos_trans_id;
_db->update(q->_table, _dbWrite.toVariantHash(),QString("trans_id = '%1'").arg(_dbWrite[FMP_EPAY_TRANSID].toString()));
}
}
QByteArray json = QJsonDocument(_dbWrite).toJson();
SendToMonitor(json);
FMP_INFO() << "writeOrderToSqlite json : " << _dbWrite;
}
void FMPePayPrivate::updateSqlite(const QJsonObject &json)
{
Q_Q(FMPePay);
_db->update(q->_table, json.toVariantHash(),QString("trans_id = '%1'").arg(json[FMP_EPAY_TRANSID].toString()));
QByteArray byteJson = QJsonDocument(json).toJson();
SendToMonitor(byteJson);
if(!_is_api){
if(!SendToMonitor(byteJson)){
emit error(QString::fromLocal8Bit("数据发送监控程序失败!"));
FMP_ERROR() << "数据发送监控程序失败:" << byteJson;
}
}
_db->update(q->_table, json.toVariantHash(),QString("trans_id = '%1'").arg(json[FMP_EPAY_TRANSID].toString()));
}
void FMPePayPrivate::setPosTransId(QString orderId)
{
_origin_request[FMP_EPAY_TRANSID]=orderId;
_pos_trans_id=orderId;
_origin_response.empty();
}
void FMPePayPrivate::SendToMonitor(const QByteArray &data)
bool FMPePayPrivate::SendToMonitor(const QByteArray &data)
{
FMP_INFO() << "SendToMonitor:" << data;
bool result=true;
QTcpSocket client;
int jsonLength=data.length();
......@@ -883,14 +936,40 @@ void FMPePayPrivate::SendToMonitor(const QByteArray &data)
int rlt= client.write(m_pFmPackage+curSendLength,toSendLength - curSendLength);
client.waitForBytesWritten();
if(rlt==-1){
FMP_DEBUG() << "发送数据失败:" << data;
FMP_ERROR() << "发送数据失败:" << data;
result=false;
break;
}
curSendLength += rlt;
}
}
else{
FMP_DEBUG() << "socket 连接失败!";
FMP_ERROR() << "socket 连接失败!";
result=false;
}
client.close();
return result;
}
void FMPePayPrivate::CheckErrorOrder()
{
Q_Q(FMPePay);
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(102).arg(q->_businessdate)) || !query.next()) {
return;
}
else {
QJsonObject queryJson;
queryJson[FMP_EPAY_TRANSID] = query.value(0).toString();
queryJson[FMP_EPAY_OPERATORID] = query.value(1).toString();
queryJson[FMP_EPAY_STOREID]=q->_store_id;
queryJson[FMP_EPAY_STATIONID]=q->_station_id;
queryJson[FMP_EPAY_PARTNERID]=q->_partner_id;
queryJson[FMP_EPAY_VER]=2;
_queryThread->setReqJson(queryJson);
_queryThread->start();
}
}
......@@ -75,7 +75,12 @@ private:
void clearorder();
void SendToMonitor(const QByteArray &data);
bool SendToMonitor(const QByteArray &data);
void HttpPost(const QString &url, const QByteArray &data, QFutureWatcher<QByteArray> *furture, int timeout = 10);
void CheckErrorOrder(); //查询异常订单,如果有异常订单,则进入查询状态
signals:
void apiError();
void apiFinish();
......@@ -97,12 +102,6 @@ public:
bool _is_api;
CQueryThread *_queryThread;
private:
QJsonObject _origin_request;
QJsonObject _docked_request;
QJsonObject _origin_response;
QJsonObject _docked_response;
bool _reverse_flag;
static unsigned int s_ClientReqCount;
......@@ -112,9 +111,12 @@ private:
QSqlTableModel *_model;
QFutureWatcher<QByteArray> *_watcher;
QJsonObject _origin_request;
QJsonObject _docked_request;
QJsonObject _origin_response;
QJsonObject _docked_response;
void HttpPost(const QString &url, const QByteArray &data, QFutureWatcher<QByteArray> *furture, int timeout = 10);
QString _pos_trans_id;
};
#endif // FMP_EPAY_P_H
......@@ -189,7 +189,7 @@ void FMPPayDialog::setTableHeader()
model_done->setHeaderData(4, Qt::Horizontal, QString::fromLocal8Bit("交易渠道"));
model_done->setHeaderData(6, Qt::Horizontal, QString::fromLocal8Bit("金额(元)"));
model_done->setHeaderData(14, Qt::Horizontal, QString::fromLocal8Bit("状态"));
model_done->setHeaderData(15, Qt::Horizontal, QString::fromLocal8Bit("交易时间"));
model_done->setHeaderData(16, Qt::Horizontal, QString::fromLocal8Bit("交易时间"));
QVector<QTableView*> vecTables;
vecTables.push_back(ui->tableView_Done);
......@@ -210,9 +210,11 @@ void FMPPayDialog::setTableHeader()
vecTables[i]->hideColumn(11);
vecTables[i]->hideColumn(12);
vecTables[i]->hideColumn(13);
vecTables[i]->hideColumn(15);
vecTables[i]->setSelectionMode(QTableView::SingleSelection);
vecTables[i]->setSelectionBehavior(QTableView::SelectRows);
vecTables[i]->setEditTriggers(QTableView::NoEditTriggers);
vecTables[i]->verticalHeader()->setVisible(false);
QHeaderView *header_done = vecTables[i]->horizontalHeader();
......@@ -220,7 +222,7 @@ void FMPPayDialog::setTableHeader()
vecTables[i]->setColumnWidth(4, 150);
vecTables[i]->setColumnWidth(6, 70);
vecTables[i]->setColumnWidth(14, 90);
vecTables[i]->setColumnWidth(15, 160);
vecTables[i]->setColumnWidth(16, 160);
header_done->setVisible(true);
header_done->setStretchLastSection(true);
......@@ -333,14 +335,23 @@ void FMPPayDialog::showErrorMsg(QString errormsg)
if(errormsg == "")
errormsg = QString("");
if(_wait == NULL)
{
_wait = new FMPPayWait(this);
_wait->setModal(true);
}
if(_control->_is_api){
if(_wait)
_wait->hide();
_wait->SetContent(FMPPayWait::ERRORS, errormsg);
FMPPayFailedDialog *_pay_failed=new FMPPayFailedDialog(this);
_pay_failed->setModal(true);
_pay_failed->show();
_pay_failed->SetContent(errormsg,ui->lineedit_num->text());
if(_wait->isHidden())
_wait->show();
// if(_wait)
// _wait->hide();
// FMPPayFailedDialog *_pay_failed=new FMPPayFailedDialog(this);
// _pay_failed->setModal(true);
// _pay_failed->show();
// _pay_failed->SetContent(errormsg,ui->lineedit_num->text());
}
else{
_wait->SetContent(FMPPayWait::ERRORS, errormsg);
......@@ -811,6 +822,10 @@ void FMPPayDialog::on_btn_close_clicked()
_force_close->setModal(true);
_force_close->show();
}
else{
this->close();
_control->Uninit();
}
}
}
......@@ -951,6 +966,7 @@ void FMPPayDialog::on_btn_waitPay_close_clicked()
QJsonObject queryObj;
queryObj[FMP_EPAY_TRANSID]=orderId;
queryObj[FMP_RPAY_PAY_RETURN_STATUSCODE]=108;
queryObj["msg"]=QString::fromLocal8Bit("关闭订单");
_control->updateSqlite(queryObj);
setWaitPayView();
......
......@@ -3268,10 +3268,10 @@ QHeaderView::section {
<zorder>wdg_refund_main</zorder>
<zorder>wdg_done_main</zorder>
<zorder>wdg_hasPay_main</zorder>
<zorder>wdg_pay_main</zorder>
<zorder>wdg_query_main</zorder>
<zorder>wdg_success_main</zorder>
<zorder>wdg_waitPay_main</zorder>
<zorder>wdg_pay_main</zorder>
</widget>
</item>
<item>
......
......@@ -5,7 +5,7 @@
#define VER_MINOR 1
#define VER_REVISION 0
#define VER_BUILD 14
#define VER_BUILD 15
//! 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