Commit 34f723e0 by unknown

最初版本

parent 418e8eb2
......@@ -18,14 +18,16 @@ SOURCES += main.cpp\
fmvipwnd.cpp \
fmvippanel.cpp \
fmvipfund.cpp \
fmvipdispatcher.cpp
fmvipdispatcher.cpp \
fmvipforward.cpp
HEADERS += fmviporder.h \
fmviplogin.h \
fmvipwnd.h \
fmvippanel.h \
fmvipfund.h \
fmvipdispatcher.h
fmvipdispatcher.h \
fmvipforward.h
FORMS += forms/fmviporder.ui \
forms/fmviplogin.ui \
......
#include "fmvipdispatcher.h"
#include "fmvippanel.h"
#include "fmviplogin.h"
#include "fmvippanel.h"
#include "fmviporder.h"
#include "fmvipfund.h"
#include "fmvipforward.h"
#include <QDebug>
#include <QJsonDocument>
#include <QJsonObject>
#include <QApplication>
#include <QMessageBox>
FMVipDispatcher::FMVipDispatcher(QObject *parent)
: QObject(parent),
FMApiRelay(),
_vindow(0)
{
connect(this, SIGNAL(requested(QByteArray)), SLOT(onRequest(QByteArray)));
connect(this, SIGNAL(requested(QJsonObject)), SLOT(onRequest(QJsonObject)));
connect(this, SIGNAL(responded(QByteArray)), SLOT(onResponse(QByteArray)));
connect(FMVipForward::instance(), SIGNAL(serverResponsed(QByteArray)), SLOT(onServerResponsed(QByteArray)));
}
INT FMVipDispatcher::_ParseRequest(LPSTR data)
{
int res = FMApiRelay::_ParseRequest(data);
qDebug() << __FUNCTION__;
QJsonParseError err;
QJsonDocument json = QJsonDocument::fromJson(data, &err);
if (err.error != QJsonParseError::NoError) {
return FM_API_BADJSON;
}
QByteArray req(_request);
emit requested(req);
_posReqObj = json.object();
return res;
// 唤起客户端界面
emit requested(_posReqObj);
isWindowClosed = false;
isServerResponsed = false; // 重置服务器是否已返回信息的标志
return FM_API_SUCCESS;
}
BOOL FMVipDispatcher::_GetResponse(LPSTR &rsp, UINT &len)
{
BOOL res = FMApiRelay::_GetResponse(rsp, len);
qDebug() << __FUNCTION__;
QByteArray reply(_response);
emit responded(reply);
// QTime dieTime = QTime::currentTime().addMSecs(1000*5);
// 服务器还未返回则一直阻塞
while(isServerResponsed == false && isWindowClosed == false)
QCoreApplication::processEvents(QEventLoop::AllEvents, 100);
rsp = _serverRspData.data();
len = _serverRspData.length();
return res;
return isServerResponsed;
}
void FMVipDispatcher::onRequest(const QByteArray &req)
void FMVipDispatcher::onRequest(const QJsonObject &jsonObj)
{
QJsonDocument json = QJsonDocument::fromJson(req);
if (!json.isNull() && !json.isEmpty()) {
QJsonObject obj = json.object();
if (!obj.isEmpty()) {
QJsonValue v = obj["reqType"];
if (v.toInt() == FM_VIP_QUERY) {
qDebug() << "Query" << req;
if (!_vindow) {
FMVipPanel *panel = new FMVipPanel;
connect(panel, SIGNAL(destroyed(QObject*)), SLOT(onFinished()));
_vindow = panel;
panel->show();
}
}
else if (v.toInt() == FM_VIP_PAY) {
qDebug() << "Payment" << req;
if (!_vindow) {
FMVipOrder *order = new FMVipOrder;
connect(order, SIGNAL(destroyed(QObject*)), SLOT(onFinished()));
_vindow = order;
order->show();
}
}
QString type = jsonObj["fm_cmd"].toString();
if (type == Type_Login) {
FMVipForward::instance()->resetSessionData(jsonObj);
login();
}
else if (type == Type_Pay) {
pay();
}
else if (type == Type_Coupon) {
coupon();
}
else if (type == Type_Fund) {
fund();
}
else if (type == Type_Final) {
final();
}
#ifdef _DEBUG
else if (v.toInt() == -1) {
qDebug() << "Quit";
qApp->quit();
}
#endif
}
else if (type == "") {
qDebug() << "Quit";
qApp->quit();
}
#endif
}
void FMVipDispatcher::onResponse(const QByteArray &)
void FMVipDispatcher::onResponse(const QByteArray &rsp)
{
qDebug() << __FUNCTION__;
Q_UNUSED(rsp)
}
void FMVipDispatcher::onWindowClosed()
{
_serverRspData.clear();
isWindowClosed = true;
}
void FMVipDispatcher::onFinished()
{
qDebug() << __FUNCTION__;
isWindowClosed = true;
_vindow = 0;
}
void FMVipDispatcher::onServerResponsed(const QByteArray &rsp)
{
qDebug() << __FUNCTION__;
_serverRspData = rsp;
isServerResponsed = true; // 重置服务器是否已返回信息的标志
if(_vindow != 0) {
_vindow->deleteLater();
}
}
// 向服务器发送请求
void FMVipDispatcher::onDoPost()
{
FMVipForward::instance()->parseRequest(_posReqObj);
}
void FMVipDispatcher::login()
{
if (!_vindow) {
FMVipLogin *login = new FMVipLogin;
connect(login, SIGNAL(destroyed(QObject*)), SLOT(onFinished()));
connect(login, SIGNAL(doPost()), SLOT(onDoPost()));
_vindow = login;
login->exec();
}
}
void FMVipDispatcher::coupon()
{
onDoPost();
}
void FMVipDispatcher::pay()
{
QJsonObject transactions = _posReqObj["transactions"].toObject();
double order_amount = transactions["order_amount"].toDouble();
double paid_amount = transactions["paid_amount"].toDouble();
double needPay = order_amount - paid_amount;
FMVipForward::instance()->addSessionData("paid_amount", QString::number(paid_amount));
FMVipForward::instance()->addSessionData("needPay", QString::number(needPay));
int canPay = FMVipForward::instance()->sessionDataInt("canPay");
if(canPay != 1) {
onDoPost();
return;
}
if (!_vindow) {
FMVipOrder *order = new FMVipOrder;
connect(order, SIGNAL(destroyed(QObject*)), SLOT(onFinished()));
connect(order, SIGNAL(doPost()), SLOT(onDoPost()));
_vindow = order;
order->exec();
}
}
void FMVipDispatcher::fund()
{
FMVipForward::instance()->addSessionData("charge_amount", QString::number(_posReqObj["charge_amount"].toInt()));
if (!_vindow) {
FMVipFund *fund = new FMVipFund;
connect(fund, SIGNAL(destroyed(QObject*)), SLOT(onFinished()));
connect(fund, SIGNAL(doPost()), SLOT(onDoPost()));
_vindow = fund;
fund->exec();
}
}
void FMVipDispatcher::final()
{
onDoPost();
}
......@@ -2,12 +2,24 @@
#define FMVIPDISPATCHER_H
#include <QObject>
#include <QJsonObject>
#include "fmapirelay.h"
//#include <QNetworkAccessManager>
//#include <QNetworkReply>
#define FM_VIP_QUERY 1001
//#define Type_Login "member_check_rquest"
//#define Type_Coupon "coupon_check_rquest"
//#define Type_Pay "order_request"
//#define Type_Fund "member_charge_rquest"
//#define Type_Final "Integral_request"
#define FM_VIP_LOGIN 1001
#define FM_VIP_FUND 1002
#define FM_VIP_PAY 1003
#define FM_VIP_REVOKE 1004
#define FM_VIP_COUPON 1006
#define FM_VIP_FINAL 1007
#define _DEBUG
class FMVipWnd;
......@@ -18,21 +30,35 @@ class FMVipDispatcher : public QObject, public FMApiRelay
public:
explicit FMVipDispatcher(QObject *parent = 0);
void login();
void pay();
void coupon();
void fund();
void final();
protected:
virtual INT _ParseRequest(LPSTR data);
virtual BOOL _GetResponse(LPSTR &rsp, UINT &len);
signals:
void requested(const QByteArray &);
void requested(const QJsonObject &);
void responded(const QByteArray &);
private slots:
void onRequest(const QByteArray &);
void onResponse(const QByteArray &);
void onRequest(const QJsonObject &jsonObj);
void onResponse(const QByteArray &rsp);
void onFinished();
void onServerResponsed(const QByteArray &rsp);
void onDoPost();
void onWindowClosed();
private:
FMVipWnd *_vindow;
QJsonObject _posReqObj;
BOOL isServerResponsed;
BOOL isWindowClosed;
QByteArray _serverRspData;
};
#endif // FMVIPDISPATCHER_H
#include "fmvipforward.h"
#include <QJsonDocument>
#include <QJsonParseError>
#include <QJsonObject>
#include <QJsonArray>
#include <QDebug>
FMVipForward* FMVipForward::_instance = nullptr;
FMVipForward* FMVipForward::instance()
{
if(_instance == NULL) {
_instance = new FMVipForward();
}
return _instance;
}
FMVipForward::FMVipForward(QObject *parent) : QObject(parent)
{
_urlStr = _cfg.GetTransUrlFormat();
_sessionDataList = QString("operator_id,pos_id,business_date").split(",");
connect(&_nam, SIGNAL(finished(QNetworkReply*)), this, SLOT(onServerFinished(QNetworkReply*)));
}
FMVipForward::~FMVipForward()
{
if(_instance != NULL) {
delete _instance;
_instance = NULL;
}
}
void FMVipForward::parseRequest(const QJsonObject &jsonObj)
{
QString type = jsonObj["fm_cmd"].toString();
QJsonObject fm_jsonObj;
if(type == Type_Login) {
login(jsonObj, fm_jsonObj);
} else if(type == Type_Fund) {
fund(jsonObj, fm_jsonObj);
} else if(type == Type_Coupon) {
coupon(jsonObj, fm_jsonObj);
} else if(type == Type_Pay) {
pay(jsonObj, fm_jsonObj);
} else if(type == Type_Final) {
final(jsonObj, fm_jsonObj);
}
_reqType = fm_jsonObj["reqType"].toInt();
// 固定部分
fm_jsonObj["appId"] = AppId;
fm_jsonObj["partnerId"] = PartnerId;
fm_jsonObj["t"] = QString::number(QDateTime::currentMSecsSinceEpoch());
// 可从请求中提取的部分
FMApiPropMap *pm = _cfg.GetPropsMap();
if (pm && pm->size() > 0) {
FMApiPropMap::iterator iter = pm->begin();
for(; iter != pm->end(); ++iter) {
if(jsonObj.contains(iter->first)) {
QJsonValue v = jsonObj[iter->first];
fm_jsonObj[iter->second] = v;
}
}
}
qDebug() << fm_jsonObj;
// 向服务器发送请求
request(fm_jsonObj);
}
void FMVipForward::request(const QJsonObject &reqJob)
{
qDebug() << __FUNCTION__;
// 设置URL
QString signStr = sign(reqJob);
_req.setUrl(_urlStr.arg(signStr));
QJsonDocument json(reqJob);
QByteArray reqDate = json.toJson(QJsonDocument::Compact);
// 设置请求头
_req.setHeader(QNetworkRequest::ContentTypeHeader, "application/json");
_req.setHeader(QNetworkRequest::ContentLengthHeader, reqDate.length());
_nam.post(_req, reqDate);
// clearSessionData();
}
void FMVipForward::onServerFinished(QNetworkReply *reply)
{
QByteArray data = reply->readAll();
QJsonParseError err;
QJsonDocument jdoc = QJsonDocument::fromJson(data, &err);
if(err.error != QJsonParseError::NoError || !jdoc.isObject()) {
return;
}
QJsonObject serverObj = jdoc.object(), posObj;
posObj["statusCode"] = serverObj["statusCode"];
posObj["msg"] = serverObj["msg"];
switch (_reqType) {
case FM_VIP_LOGIN:
logined(serverObj, posObj);
break;
case FM_VIP_COUPON:
couponed(serverObj, posObj);
break;
case FM_VIP_FUND:
funded(serverObj, posObj);
break;
case FM_VIP_PAY:
payed(serverObj, posObj);
break;
case FM_VIP_FINAL:
finaled(serverObj, posObj);
break;
default:
break;
}
QJsonDocument posDoc(posObj);
QByteArray posData = posDoc.toJson();
emit serverResponsed(posData);
}
void FMVipForward::login(const QJsonObject &job, QJsonObject &fmjob)
{
Q_UNUSED(job);
fmjob["reqType"] = FM_VIP_LOGIN;
fmjob["payCode"] = sessionData("payCode");
fmjob["mobile"] = sessionData("mobile");
}
void FMVipForward::fund(const QJsonObject &job, QJsonObject &fmjob)
{
Q_UNUSED(job);
fmjob["reqType"] = FM_VIP_FUND;
QJsonObject transObj;
transObj["account"] = sessionData("fm_open_id");
transObj["amount"] = sessionData("fundAmount");
transObj["cashAmout"] = sessionData("fundAmount");
transObj["thirdAmout"] = 0;
transObj["thirdPayType"] = 0;
transObj["thirdPayTransId"] = "";
fmjob["transaction"] = transObj;
}
void FMVipForward::coupon(const QJsonObject &job, QJsonObject &fmjob)
{
Q_UNUSED(job);
fmjob["reqType"] = FM_VIP_COUPON;
fmjob["account"] = sessionData("fm_open_id");
}
void FMVipForward::pay(const QJsonObject &job, QJsonObject &fmjob)
{
Q_UNUSED(job);
fmjob["reqType"] = FM_VIP_PAY;
QJsonObject transObj;
transObj["account"] = sessionData("fm_open_id");
transObj["codeAmount"] = sessionDataInt("codeAmount");
transObj["isUseScore"] = sessionDataInt("isUseScore");
fmjob["transaction"] = transObj;
}
void FMVipForward::final(const QJsonObject &job, QJsonObject &fmjob)
{
fmjob["reqType"] = FM_VIP_FINAL;
fmjob["memberTransId"] = sessionData("fm_id");
QJsonObject transObj;
QJsonObject posTransObj = job["transactions"].toObject();
transObj["account"] = sessionData("fm_open_id");
transObj["amount"] = posTransObj["order_amount"];
transObj["payAmount"] = posTransObj["paid_amount"];
transObj["cashAmount"] = 1;
transObj["codeAmount"] = 1;
transObj["scoreAmount"] = 1;
transObj["thirdAmount"] = 1;
transObj["thirdPayType"] = 2;
transObj["thirdPayTransId"] = "";
QJsonArray couponArray;
transObj["coupons"] = couponArray;
QJsonArray posProdArray = posTransObj["products"].toArray();
QJsonArray prodArray;
for(QJsonValue v : posProdArray)
{
QJsonObject po = v.toObject();
QJsonObject o;
o["consumeNum"] = po["consume_num"];
o["price"] = po["price"];
o["productId"] = po["pid"];
prodArray.append(o);
}
transObj["products"] = prodArray;
fmjob["transaction"] = transObj;
}
void FMVipForward::logined(const QJsonObject &serverJob, QJsonObject &posJob)
{
QJsonObject memberObj = serverJob["memberInfo"].toObject();
posJob["fm_open_id"] = memberObj["account"];
addSessionData("fm_open_id", memberObj["account"].toString());
addSessionData("amount", getString(memberObj["amount"].toInt()));
addSessionData("score", getString(memberObj["score"].toInt()));
addSessionData("canPay", getString(memberObj["canPay"].toInt()));
}
void FMVipForward::funded(const QJsonObject &serverJob, QJsonObject &posJob)
{
QJsonObject cardInfo = serverJob["cardInfo"].toObject();
posJob["fm_id"] = cardInfo["memberTransId"];
posJob["fm_open_id"] = sessionData("fm_open_id");
posJob["print"] = "";
}
void FMVipForward::couponed(const QJsonObject &serverJob, QJsonObject &posJob)
{
posJob["pid"] = serverJob["productCode"];
}
void FMVipForward::payed(const QJsonObject &serverJob, QJsonObject &posJob)
{
QString fm_id = serverJob["memberTransId"].toString();
QString codeAmount = getString(serverJob["codeAmount"].toInt());
QString scoreAmount = getString(serverJob["scoreAmount"].toInt());
addSessionData("fm_id", fm_id);
addSessionData("codeAmount", codeAmount);
addSessionData("scoreAmount", scoreAmount);
int paid_total_amount = sessionDataInt("paid_amount") + sessionDataInt("codeAmount") + sessionDataInt("scoreAmount");
addSessionData("paid_total_amount", getString(paid_total_amount));
posJob["fm_open_id"] = sessionData("fm_open_id");
posJob["fm_id"] = fm_id;
posJob["total_amount"] = sessionDataInt("needPay");
posJob["paid_total_amount"] = paid_total_amount;
posJob["invoice_amount"] = paid_total_amount;
posJob["incentives_amount"] = 0;
posJob["print"] = "";
QJsonArray pay_ids;
QJsonObject pay_obj_1, pay_obj_2;
pay_obj_1["pay_id"] = "001";
pay_obj_1["pay_str"] = "会员储值金支付";
pay_obj_1["paid_total_amount"] = serverJob["codeAmount"];
pay_obj_2["pay_id"] = "002";
pay_obj_2["pay_str"] = "会员积分支付";
pay_obj_2["paid_total_amount"] = serverJob["scoreAmount"];
pay_ids.append(pay_obj_1);
pay_ids.append(pay_obj_2);
posJob["pays_ids"] = pay_ids;
QJsonObject forward;
posJob["forward"] = forward;
}
void FMVipForward::finaled(const QJsonObject &serverJob, QJsonObject &posJob)
{
posJob["fm_id"] = serverJob["memberTransId"];
posJob["print"] = "";
}
QString FMVipForward::sign(const QJsonObject &reqJob) const
{
// 解析JSON插入MAP中按字典排序
QMap<QString, QString> mapData;
mapData["appId"] = reqJob.value("appId").toString();
mapData["reqType"] = QString::number(reqJob.value("reqType").toInt());
mapData["storeId"] = reqJob.value("storeId").toString();
mapData["stationId"] = reqJob.value("stationId").toString();
mapData["operatorId"] = reqJob.value("operatorId").toString();
mapData["partnerId"] = reqJob.value("partnerId").toString();
mapData["t"] = reqJob.value("t").toString();
// 使用URL键值对的格式拼接
QString sb = "";
for(QString key : mapData.keys())
{
sb += (key + "=" + mapData.value(key) + "&");
}
sb.remove(sb.length() - 1, 1); // 去掉最后一个&
sb.append(KeyCode);
QByteArray bt;
bt.append(sb);
QByteArray md5Bt = QCryptographicHash::hash(bt, QCryptographicHash::Md5);
return md5Bt.toHex();
}
void FMVipForward::resetSessionData(const QJsonObject &jsonObj)
{
_sessionDataMap.clear();
for (QString sessionData : _sessionDataList)
{
addSessionData(sessionData, jsonObj[sessionData].toString());
}
}
void FMVipForward::addSessionData(const QString key, const QString value)
{
_sessionDataMap.insert(key, value);
}
QString FMVipForward::sessionData(const QString key) const
{
QString value = "";
if (_sessionDataMap.contains(key)) {
value = _sessionDataMap[key];
}
return value;
}
int FMVipForward::sessionDataInt(const QString key) const
{
QString value = sessionData(key);
return value.toInt();
}
#ifndef FMVIPFORWARD_H
#define FMVIPFORWARD_H
#include "fmapicfg.h"
#include <QObject>
#include <QNetworkAccessManager>
#include <QNetworkReply>
#include <QNetworkRequest>
#define AppId "T007"
#define KeyCode "98d094a7-0d07-4cf5-b23b-d18783f0d76a"
#define PartnerId "a8bee0dd-09d1-4fa9-a9eb-80cb36d3d611"
#define Type_Login "member_check_rquest"
#define Type_Coupon "coupon_check_rquest"
#define Type_Pay "order_request"
#define Type_Fund "member_charge_rquest"
#define Type_Final "Integral_request"
#define FM_VIP_LOGIN 1001
#define FM_VIP_FUND 1002
#define FM_VIP_PAY 1003
#define FM_VIP_REVOKE 1004
#define FM_VIP_COUPON 1006
#define FM_VIP_FINAL 1007
class FMVipForward : public QObject
{
Q_OBJECT
public:
static FMVipForward* instance();
~FMVipForward();
void parseRequest(const QJsonObject &jsonObj);
void resetSessionData(const QJsonObject &jsonObj);
void addSessionData(const QString key, const QString value);
QString sessionData(const QString key) const;
int sessionDataInt(const QString key) const;
void clearSessionData() {_sessionDataMap.clear();}
QString getString(int num) { return QString::number(num);}
int getInt(QString num_str) {return num_str.toInt();}
private:
FMVipForward(QObject *parent = 0);
void login(const QJsonObject &job, QJsonObject &fmjob);
void fund(const QJsonObject &job, QJsonObject &fmjob);
void coupon(const QJsonObject &job, QJsonObject &fmjob);
void pay(const QJsonObject &job, QJsonObject &fmjob);
void final(const QJsonObject &job, QJsonObject &fmjob);
void logined(const QJsonObject &serverJob, QJsonObject &posJob);
void funded(const QJsonObject &serverJob, QJsonObject &posJob);
void couponed(const QJsonObject &serverJob, QJsonObject &posJob);
void payed(const QJsonObject &serverJob, QJsonObject &posJob);
void finaled(const QJsonObject &serverJob, QJsonObject &posJob);
void request(const QJsonObject &reqJob);
QString sign(const QJsonObject &reqJob) const;
private:
static FMVipForward* _instance;
FMApiCfg _cfg;
QNetworkAccessManager _nam;
QNetworkRequest _req;
QString _urlStr;
int _reqType;
QMap<QString, QString> _sessionDataMap;
QStringList _sessionDataList;
signals:
void serverResponsed(const QByteArray& rspData);
private slots:
void onServerFinished(QNetworkReply *reply);
};
#endif // FMVIPFORWARD_H
#include "fmvipfund.h"
#include "fmvipforward.h"
#include "ui_fmvipfund.h"
#include <QButtonGroup>
FMVipFund::FMVipFund(QWidget *parent) :
FMVipFund::FMVipFund(QDialog *parent) :
FMVipWnd(parent),
ui(new Ui::FMVipFund),
_digit_group(new QButtonGroup(this))
......@@ -16,6 +17,24 @@ FMVipFund::FMVipFund(QWidget *parent) :
_digit_group->addButton(ui->twenty);
connect(_digit_group, SIGNAL(buttonClicked(QAbstractButton*)), SLOT(onDigitChecked(QAbstractButton*)));
QString operator_id = FMVipForward::instance()->sessionData("operator_id");
QString business_date = FMVipForward::instance()->sessionData("business_date");
QString fm_id = FMVipForward::instance()->sessionData("fm_open_id");
QString amount_str = FMVipForward::instance()->sessionData("amount");
QString charge_amount_str = FMVipForward::instance()->sessionData("charge_amount");
double amount = amount_str.toDouble() / 100.0;
double charge_amount = charge_amount_str.toDouble() / 100.0;
QString show_amount_str = QString::number(amount, 'f', 2);
QString show_charge_amount_str = QString::number(charge_amount, 'f', 2);
ui->operator_label->setText(operator_id);
ui->bd_label->setText(business_date);
ui->id_label->setText(fm_id);
ui->balance_label->setText(show_amount_str);
ui->amount_edit->setText(show_charge_amount_str);
}
FMVipFund::~FMVipFund()
......@@ -26,11 +45,6 @@ FMVipFund::~FMVipFund()
void FMVipFund::show()
{
qDebug() << __FUNCTION__;
ui->id_label->setText(_profile_obj["member_id"].toString());
ui->name_label->setText(_profile_obj["member_name"].toString());
ui->balance_label->setText(QString::number(_profile_obj["balance"].toInt()));
ui->operator_label->setText(_profile_obj["operator_id"].toString());
ui->bd_label->setText(_profile_obj["business_date"].toString());
FMVipWnd::show();
}
......@@ -45,4 +59,7 @@ void FMVipFund::onDigitChecked(QAbstractButton *btn)
void FMVipFund::on_fund_btn_clicked()
{
qDebug() << __FUNCTION__;
double fundAmount = ui->amount_edit->text().toDouble() * 100;
FMVipForward::instance()->addSessionData("fundAmount", QString::number(fundAmount));
emit doPost();
}
......@@ -15,7 +15,7 @@ class FMVipFund : public FMVipWnd
Q_OBJECT
public:
explicit FMVipFund(QWidget *parent = 0);
explicit FMVipFund(QDialog *parent = 0);
~FMVipFund();
......
......@@ -6,12 +6,20 @@
#include <QNetworkRequest>
#include <QNetworkReply>
#include <QNetworkAccessManager>
#include "fmvipforward.h"
#include <QMovie>
FMVipLogin::FMVipLogin(QWidget *parent) :
FMVipLogin::FMVipLogin(QDialog *parent) :
FMVipWnd(parent),
ui(new Ui::FMVipLogin)
{
ui->setupUi(this);
QString operator_id = FMVipForward::instance()->sessionData("operator_id");
QString business_date = FMVipForward::instance()->sessionData("business_date");
ui->operator_label->setText(operator_id);
ui->bd_label->setText(business_date);
}
FMVipLogin::~FMVipLogin()
......@@ -25,11 +33,16 @@ void FMVipLogin::on_login_btn_clicked()
qDebug() << __FUNCTION__;
QString id = ui->login_edit->text();
QNetworkAccessManager *net = new QNetworkAccessManager(this);
connect(net, SIGNAL(finished(QNetworkReply*)), this, SLOT(on_login_result(QNetworkReply*)));
QNetworkRequest req(QUrl("http://jtest.freemudvip.com/member_show/service/restful/pos"));
// 手机号登陆
if(id.length() == 11) {
FMVipForward::instance()->addSessionData("mobile", id);
}
// 支付码登陆
else if(id.length() == 20) {
FMVipForward::instance()->addSessionData("payCode", id);
}
net->get(req);
emit doPost();
}
void FMVipLogin::on_login_result(QNetworkReply *reply)
......
......@@ -14,7 +14,7 @@ class FMVipLogin : public FMVipWnd
Q_OBJECT
public:
explicit FMVipLogin(QWidget *parent = 0);
explicit FMVipLogin(QDialog *parent = 0);
~FMVipLogin();
signals:
void loginSuccess();
......
#include "fmviporder.h"
#include "fmvipforward.h"
#include "ui_fmviporder.h"
#include <QApplication>
#include <QDebug>
FMVipOrder::FMVipOrder(QWidget *parent) :
FMVipOrder::FMVipOrder(QDialog *parent) :
FMVipWnd(parent),
ui(new Ui::FMVipOrder)
{
ui->setupUi(this);
QString operator_id = FMVipForward::instance()->sessionData("operator_id");
QString business_date = FMVipForward::instance()->sessionData("business_date");
QString fm_id = FMVipForward::instance()->sessionData("fm_open_id");
QString amount_str = FMVipForward::instance()->sessionData("amount");
QString score = FMVipForward::instance()->sessionData("score");
QString needPay_str = FMVipForward::instance()->sessionData("needPay");
double amount = amount_str.toInt() / 100.0;
double needPay = needPay_str.toInt() / 100.0;
QString show_amount_str = QString::number(amount, 'f', 2);
QString show_needPay_str = QString::number(needPay, 'f', 2);
ui->operator_label->setText(operator_id);
ui->bd_label->setText(business_date);
ui->id_label->setText(fm_id);
ui->balance_label->setText(show_amount_str);
ui->point_label->setText(score);
ui->price_label->setText(show_needPay_str);
// 如果账户余额充足则默认付全部待付,否则默认付全部余额
if(amount >= needPay) {
ui->pay_edit->setText(show_needPay_str);
}else{
ui->pay_edit->setText(show_amount_str);
}
}
FMVipOrder::~FMVipOrder()
......@@ -28,11 +56,16 @@ void FMVipOrder::on_coupon_next_btn_clicked()
void FMVipOrder::on_pay_btn_clicked()
{
qDebug() << __FUNCTION__;
int codeAmount = ui->pay_edit->text().toDouble() * 100;
FMVipForward::instance()->addSessionData("codeAmount", QString::number(codeAmount));
emit doPost();
}
void FMVipOrder::on_pay_chk_clicked(bool checked)
{
qDebug() << __FUNCTION__ << checked;
int is = checked ? 1 : 0;
FMVipForward::instance()->addSessionData("isUseScore", QString::number(is));
}
......@@ -12,7 +12,7 @@ class FMVipOrder : public FMVipWnd
Q_OBJECT
public:
explicit FMVipOrder(QWidget *parent = 0);
explicit FMVipOrder(QDialog *parent = 0);
~FMVipOrder();
public slots:
......
#include "fmvippanel.h"
#include "fmvipforward.h"
#include "ui_fmvippanel.h"
#include "fmvipfund.h"
#include <QFile>
FMVipPanel::FMVipPanel(QWidget *parent) :
FMVipPanel::FMVipPanel(QDialog *parent) :
FMVipWnd(parent),
ui(new Ui::FMVipPanel)
{
......
......@@ -12,7 +12,7 @@ class FMVipPanel : public FMVipWnd
Q_OBJECT
public:
explicit FMVipPanel(QWidget *parent = 0);
explicit FMVipPanel(QDialog *parent = 0);
~FMVipPanel();
public slots:
......
......@@ -9,10 +9,12 @@
#include <windowsx.h>
#endif
FMVipWnd::FMVipWnd(QWidget *parent) : QWidget(parent)
FMVipWnd::FMVipWnd(QDialog *parent) :
QDialog(parent)
{
setWindowFlags(Qt::FramelessWindowHint);
setAttribute(Qt::WA_QuitOnClose, false);
setIsBusy(false);
}
bool FMVipWnd::setProfile(const QByteArray &d)
......@@ -42,6 +44,11 @@ void FMVipWnd::on_close_btn_clicked()
deleteLater();
}
void FMVipWnd::setIsBusy(const bool isBusy)
{
Q_UNUSED(isBusy);
}
#ifdef Q_OS_WIN
//! Gui class member of platform
bool FMVipWnd::nativeEvent(const QByteArray &eventType, void *message, long *result)
......
#ifndef FMVIPWND_H
#define FMVIPWND_H
#include <QWidget>
#include <QDialog>
#include <QJsonObject>
#include <QMap>
#include <QDebug>
class FMVipWnd : public QWidget
class FMVipWnd : public QDialog
{
Q_OBJECT
public:
explicit FMVipWnd(QWidget *parent = 0);
explicit FMVipWnd(QDialog *parent = 0);
//! Set current user profile (Json data)
bool setProfile(const QByteArray&);
void setIsBusy(const bool isBusy);
signals:
void doPost();
public slots:
void on_close_btn_clicked();
#ifdef Q_OS_WIN
......@@ -25,6 +28,7 @@ protected:
protected:
QJsonObject _profile_obj;
bool _isBusy;
#endif
};
......
......@@ -344,8 +344,8 @@ QPushButton#fund_btn:hover {
<property name="spacing">
<number>14</number>
</property>
<item row="6" column="0">
<widget class="QPushButton" name="ten">
<item row="5" column="0">
<widget class="QPushButton" name="two">
<property name="sizePolicy">
<sizepolicy hsizetype="Preferred" vsizetype="Preferred">
<horstretch>0</horstretch>
......@@ -362,7 +362,7 @@ QPushButton#fund_btn:hover {
<cursorShape>PointingHandCursor</cursorShape>
</property>
<property name="text">
<string>1000</string>
<string>200</string>
</property>
<property name="checkable">
<bool>true</bool>
......@@ -372,8 +372,8 @@ QPushButton#fund_btn:hover {
</property>
</widget>
</item>
<item row="5" column="1">
<widget class="QPushButton" name="five">
<item row="3" column="0">
<widget class="QPushButton" name="half">
<property name="sizePolicy">
<sizepolicy hsizetype="Preferred" vsizetype="Preferred">
<horstretch>0</horstretch>
......@@ -390,18 +390,21 @@ QPushButton#fund_btn:hover {
<cursorShape>PointingHandCursor</cursorShape>
</property>
<property name="text">
<string>¥500</string>
<string>¥50</string>
</property>
<property name="checkable">
<bool>true</bool>
</property>
<property name="checked">
<bool>true</bool>
</property>
<property name="autoExclusive">
<bool>true</bool>
</property>
</widget>
</item>
<item row="5" column="0">
<widget class="QPushButton" name="two">
<item row="6" column="0">
<widget class="QPushButton" name="ten">
<property name="sizePolicy">
<sizepolicy hsizetype="Preferred" vsizetype="Preferred">
<horstretch>0</horstretch>
......@@ -418,7 +421,7 @@ QPushButton#fund_btn:hover {
<cursorShape>PointingHandCursor</cursorShape>
</property>
<property name="text">
<string>200</string>
<string>1000</string>
</property>
<property name="checkable">
<bool>true</bool>
......@@ -428,8 +431,8 @@ QPushButton#fund_btn:hover {
</property>
</widget>
</item>
<item row="3" column="0">
<widget class="QPushButton" name="half">
<item row="5" column="1">
<widget class="QPushButton" name="five">
<property name="sizePolicy">
<sizepolicy hsizetype="Preferred" vsizetype="Preferred">
<horstretch>0</horstretch>
......@@ -446,14 +449,11 @@ QPushButton#fund_btn:hover {
<cursorShape>PointingHandCursor</cursorShape>
</property>
<property name="text">
<string>¥50</string>
<string>¥500</string>
</property>
<property name="checkable">
<bool>true</bool>
</property>
<property name="checked">
<bool>true</bool>
</property>
<property name="autoExclusive">
<bool>true</bool>
</property>
......@@ -487,40 +487,18 @@ QPushButton#fund_btn:hover {
</property>
</widget>
</item>
<item row="8" column="0">
<widget class="QWidget" name="input" native="true">
<layout class="QHBoxLayout" name="horizontalLayout">
<property name="spacing">
<number>0</number>
</property>
<property name="leftMargin">
<number>0</number>
</property>
<property name="topMargin">
<number>0</number>
</property>
<property name="rightMargin">
<number>0</number>
</property>
<property name="bottomMargin">
<number>0</number>
</property>
<item>
<widget class="QLabel" name="currency_label">
<property name="text">
<string></string>
</property>
</widget>
</item>
<item>
<widget class="QLineEdit" name="amount_edit">
<property name="text">
<string>50</string>
</property>
</widget>
</item>
</layout>
</widget>
<item row="7" column="0">
<spacer name="verticalSpacer">
<property name="orientation">
<enum>Qt::Vertical</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>20</width>
<height>40</height>
</size>
</property>
</spacer>
</item>
<item row="8" column="1">
<widget class="QPushButton" name="fund_btn">
......@@ -534,6 +512,9 @@ QPushButton#fund_btn:hover {
</item>
<item row="6" column="1">
<widget class="QPushButton" name="twenty">
<property name="enabled">
<bool>true</bool>
</property>
<property name="sizePolicy">
<sizepolicy hsizetype="Preferred" vsizetype="Preferred">
<horstretch>0</horstretch>
......@@ -560,18 +541,43 @@ QPushButton#fund_btn:hover {
</property>
</widget>
</item>
<item row="7" column="0">
<spacer name="verticalSpacer">
<property name="orientation">
<enum>Qt::Vertical</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>20</width>
<height>40</height>
</size>
</property>
</spacer>
<item row="8" column="0">
<widget class="QWidget" name="input" native="true">
<layout class="QHBoxLayout" name="horizontalLayout">
<property name="spacing">
<number>0</number>
</property>
<property name="leftMargin">
<number>0</number>
</property>
<property name="topMargin">
<number>0</number>
</property>
<property name="rightMargin">
<number>0</number>
</property>
<property name="bottomMargin">
<number>0</number>
</property>
<item>
<widget class="QLabel" name="currency_label">
<property name="text">
<string></string>
</property>
</widget>
</item>
<item>
<widget class="QLineEdit" name="amount_edit">
<property name="text">
<string>50</string>
</property>
<property name="readOnly">
<bool>false</bool>
</property>
</widget>
</item>
</layout>
</widget>
</item>
</layout>
</widget>
......
......@@ -223,7 +223,10 @@
<item>
<widget class="QLabel" name="mobile_label">
<property name="text">
<string>手 机</string>
<string>账号</string>
</property>
<property name="margin">
<number>0</number>
</property>
</widget>
</item>
......@@ -236,7 +239,7 @@
<string/>
</property>
<property name="maxLength">
<number>14</number>
<number>20</number>
</property>
<property name="frame">
<bool>true</bool>
......
......@@ -11,5 +11,6 @@
<file>data/order</file>
<file>data/profile</file>
<file>data/user</file>
<file>loading.gif</file>
</qresource>
</RCC>
18652019275
\ No newline at end of file
13914748163
\ No newline at end of file
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