Commit 3977e516 by unknown

1.使用QMutex和QWaitCondition控制进程阻塞。2.修复充值金额总为0的bug

parent bc4c83aa
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE QtCreatorProject>
<!-- Written by QtCreator 4.0.2, 2016-09-07T11:12:17. -->
<!-- Written by QtCreator 4.0.2, 2016-09-07T16:39:03. -->
<qtcreator>
<data>
<variable>EnvironmentId</variable>
......@@ -292,7 +292,7 @@
<value type="QString" key="Qt4ProjectManager.Qt4RunConfiguration.ProFile">FMVip.pro</value>
<value type="bool" key="Qt4ProjectManager.Qt4RunConfiguration.UseDyldImageSuffix">false</value>
<value type="QString" key="Qt4ProjectManager.Qt4RunConfiguration.UserWorkingDirectory"></value>
<value type="QString" key="Qt4ProjectManager.Qt4RunConfiguration.UserWorkingDirectory.default"></value>
<value type="QString" key="Qt4ProjectManager.Qt4RunConfiguration.UserWorkingDirectory.default">C:/Users/zzf/Documents/Qt/FMVip/build-FMVip-Desktop_Qt_5_7_0_MinGW_32bit-Debug</value>
<value type="uint" key="RunConfiguration.QmlDebugServerPort">3768</value>
<value type="bool" key="RunConfiguration.UseCppDebugger">false</value>
<value type="bool" key="RunConfiguration.UseCppDebuggerAuto">true</value>
......
......@@ -59,8 +59,6 @@ INT FMVipDispatcher::_ParseRequest(LPSTR data)
FMVipForward::instance()->resetSessionData(_posReqObj);
isLastOne = true;
canBeContinue = false;
isServerResponsed = false; // 重置服务器是否已返回信息的标志
// 唤起客户端界面
emit requested(_posReqObj);
......@@ -73,18 +71,21 @@ BOOL FMVipDispatcher::_GetResponse(LPSTR &rsp, UINT &len)
{
qDebug() << __FUNCTION__;
// QTime dieTime = QTime::currentTime().addMSecs(1000*5);
// 服务器还未返回则一直阻塞
while(isServerResponsed == false && canBeContinue == false)
QCoreApplication::processEvents(QEventLoop::AllEvents, 100);
mutex.lock();
serverIsBusy.wait(&mutex);
rsp = _serverRspData.data();
len = _serverRspData.length();
mutex.unlock();
return isServerResponsed;
return 1;
}
void FMVipDispatcher::onRequest(const QJsonObject &jsonObj)
{
_windowReturn = 1;
QString type = jsonObj["fm_cmd"].toString();
if (type == Type_Login) {
......@@ -96,7 +97,6 @@ void FMVipDispatcher::onRequest(const QJsonObject &jsonObj)
#ifdef _DEBUG
else if (type == "-1") {
qDebug() << "Quit";
canBeContinue = true;
jsonObj["reqType"] = -1;
QJsonDocument d = QJsonDocument(jsonObj);
_serverRspData = d.toJson();
......@@ -104,6 +104,7 @@ void FMVipDispatcher::onRequest(const QJsonObject &jsonObj)
}
#endif
else {
requestSuccess = true;
// 支付、充值、结算先检查登陆状态。
QJsonObject copyJsonObj(jsonObj);
if (!isLogined()) {
......@@ -111,20 +112,18 @@ void FMVipDispatcher::onRequest(const QJsonObject &jsonObj)
isLastOne = false;
login();
}
if (canBeContinue || _windowReturn == -1) {
if (requestSuccess == false || _windowReturn == -1) {
_serverRspData.clear();
canBeContinue = true;
serverIsBusy.wakeAll();
return;
}
_posReqObj = copyJsonObj;
isLastOne = true;
if (type == Type_Pay) {
pay();
canBeContinue = true;
}
else if (type == Type_Fund) {
fund();
canBeContinue = true;
}
else if (type == Type_Final) {
final();
......@@ -146,6 +145,10 @@ void FMVipDispatcher::onFinished()
{
qDebug() << __FUNCTION__;
if(_windowReturn == -1){
serverIsBusy.wakeAll();
}
_vindow = 0;
}
......@@ -159,7 +162,7 @@ void FMVipDispatcher::onServerResponsed(const QJsonObject &rspObj)
QJsonDocument rspDoc(rspObj);
QByteArray rspData = rspDoc.toJson();
_serverRspData = rspData;
isServerResponsed = true; // 重置服务器是否已返回信息的标志
serverIsBusy.wakeAll();
}
int status = rspObj["statusCode"].toInt();
......@@ -172,10 +175,6 @@ void FMVipDispatcher::onServerResponsed(const QJsonObject &rspObj)
msgBox.setAttribute(Qt::WA_QuitOnClose, false);
msgBox.exec();
}
else {
// 可以继续下一步操作
canBeContinue = false;
}
}
else {
QString msg = rspObj["msg"].toString();
......@@ -186,7 +185,7 @@ void FMVipDispatcher::onServerResponsed(const QJsonObject &rspObj)
msgBox.setAttribute(Qt::WA_QuitOnClose, false);
msgBox.exec();
canBeContinue = true;
requestSuccess = false;
_vindow = 0;
}
}
......@@ -194,13 +193,11 @@ void FMVipDispatcher::onServerResponsed(const QJsonObject &rspObj)
// 向服务器发送请求
void FMVipDispatcher::onDoPost()
{
isServerResponsed = false;
FMVipForward::instance()->parseRequest(_posReqObj);
}
void FMVipDispatcher::login()
{
if (!_vindow) {
FMVipLogin *login = new FMVipLogin;
connect(login, SIGNAL(destroyed(QObject*)), SLOT(onFinished()));
......
......@@ -5,6 +5,8 @@
#include <QJsonObject>
#include <QSystemTrayIcon>
#include "fmapirelay.h"
#include <QMutex>
#include <QWaitCondition>
//#include <QNetworkAccessManager>
//#include <QNetworkReply>
......@@ -60,13 +62,15 @@ private slots:
private:
FMVipWnd *_vindow;
QJsonObject _posReqObj;
BOOL isServerResponsed;
BOOL canBeContinue;
QByteArray _serverRspData;
BOOL isLastOne;
int _windowReturn;
QSystemTrayIcon *_sysIcon;
QMutex mutex;
QWaitCondition serverIsBusy;
BOOL requestSuccess;
};
#endif // FMVIPDISPATCHER_H
......@@ -147,8 +147,8 @@ void FMVipForward::fund(const QJsonObject &job, QJsonObject &fmjob)
QJsonObject transObj;
transObj["account"] = sessionData("fm_open_id");
transObj["amount"] = sessionData("fundAmount");
transObj["cashAmout"] = sessionData("fundAmount");
transObj["thirdAmout"] = 0;
transObj["cashAmount"] = sessionData("fundAmount");
transObj["thirdAmount"] = 0;
transObj["thirdPayType"] = 0;
transObj["thirdPayTransId"] = "";
......@@ -325,10 +325,8 @@ QString FMVipForward::sign(const QJsonObject &reqJob) const
void FMVipForward::resetSessionData(const QJsonObject &jsonObj)
{
// _sessionDataMap.clear();
foreach (QString sessionData, _sessionDataList)
{
qDebug() << sessionData;
addSessionData(sessionData, jsonObj[sessionData].toString());
}
}
......
......@@ -8,6 +8,8 @@
#include <QNetworkAccessManager>
#include "fmvipforward.h"
#include <QMovie>
#include <QPixmap>
#include <QBitmap>
FMVipLogin::FMVipLogin(QDialog *parent) :
FMVipWnd(parent),
......@@ -20,6 +22,11 @@ FMVipLogin::FMVipLogin(QDialog *parent) :
ui->operator_label->setText(operator_id);
ui->bd_label->setText(business_date);
QLabel topLevelLabel;
QPixmap pixmap(":/img_logo.png");
topLevelLabel.setPixmap(pixmap);
topLevelLabel.setMask(pixmap.mask());
}
FMVipLogin::~FMVipLogin()
......
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