Commit 0d349395 by xiaoqing.gu

fastpay功能:1、会员支付界面添加扫一扫功能 2、对接华润通会员验证和单张券查询接口

parent 86b307be
...@@ -13,7 +13,7 @@ greaterThan(QT_MAJOR_VERSION, 4): QT += widgets ...@@ -13,7 +13,7 @@ greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
CONFIG += c++11 CONFIG += c++11
DEFINES += FM_DEBUG DEFINES += FM_DEBUG FASTPAY
SOURCES += \ SOURCES += \
fmp_vip.cpp \ fmp_vip.cpp \
......
...@@ -21,7 +21,7 @@ int FMPVipPrivate::Init() ...@@ -21,7 +21,7 @@ int FMPVipPrivate::Init()
Q_Q(FMPVip); Q_Q(FMPVip);
FMPHomeInterface *home = q->GetService<FMPHomeInterface>(q->_ctx); FMPHomeInterface *home = q->GetService<FMPHomeInterface>(q->_ctx);
if(q->_inited) { if(q->_inited) {
home->notification(QString::fromLocal8Bit("[非码会员]已在运行!")); // home->notification(QString::fromLocal8Bit("[非码会员]已在运行!"));
} else { } else {
_settings = q->GetService<FMPSettingsInterface>(q->_ctx); _settings = q->GetService<FMPSettingsInterface>(q->_ctx);
FMPVipSettings::instance()->init(_settings); FMPVipSettings::instance()->init(_settings);
...@@ -37,6 +37,8 @@ int FMPVipPrivate::Init() ...@@ -37,6 +37,8 @@ int FMPVipPrivate::Init()
FMP_INFO() << "Vip start"; FMP_INFO() << "Vip start";
} }
fastPay();
return FMP_SUCCESS; return FMP_SUCCESS;
} }
...@@ -48,3 +50,10 @@ int FMPVipPrivate::Uninit() ...@@ -48,3 +50,10 @@ int FMPVipPrivate::Uninit()
q->_inited = false; q->_inited = false;
return FMP_SUCCESS; return FMP_SUCCESS;
} }
void FMPVipPrivate::fastPay()
{
QByteArray rspData;
FMPVipServer::instance()->callVipPay("{\"fm_cmd\":1003}",rspData);
}
...@@ -20,6 +20,8 @@ public: ...@@ -20,6 +20,8 @@ public:
FMPVip *q_ptr; FMPVip *q_ptr;
private: private:
FMPSettingsInterface *_settings; FMPSettingsInterface *_settings;
void fastPay();
}; };
#endif // FMP_VIP_P_H #endif // FMP_VIP_P_H
...@@ -123,3 +123,9 @@ void FMPVipServer::onReadyRead() ...@@ -123,3 +123,9 @@ void FMPVipServer::onReadyRead()
socket->close(); socket->close();
} }
} }
void FMPVipServer::callVipPay(const QByteArray &reqData, QByteArray &rspData)
{
dispatcher->doTask(reqData,rspData);
}
...@@ -26,6 +26,8 @@ public: ...@@ -26,6 +26,8 @@ public:
void SetPluginContext(ctkPluginContext *ctx); void SetPluginContext(ctkPluginContext *ctx);
void callVipPay(const QByteArray &reqData, QByteArray &rspData);
signals: signals:
void SocketDisconnected(); void SocketDisconnected();
......
...@@ -22,6 +22,19 @@ ...@@ -22,6 +22,19 @@
#define PARTNER_ID "c3e82ff2-6285-4823-8e3f-7ec880ae7119" #define PARTNER_ID "c3e82ff2-6285-4823-8e3f-7ec880ae7119"
//! 华润通
#define H_PARTNER_ID "Z1017000"
#define API_VERSION "2.0.0"
#define APP_SUB_ID "Z101700101RU"
#define FORMAT "json"
#define GETCOUPONDETAIL_API_ID "crt.cp.public.getCouponDetail"
#define APP_TOKEN "1f8f8fbd063f4fe4980d747b03eff5a8"
#define APP_PUB_ID "T000000803LL"
#define SIGN_METHOD "rsa"
#define SIGN "m6V7kNYkUcSREMLtm61aZgP69Ym85K/Jid9e0n2M0a2H4PKLFamk1wkRBjr8M+Y8czn9h3LQv3yZeJJBpaH9aeY5sNkCeI5IZ1lmNVMnb+7LsfQRA3S4soq0kbPcGaSsXnx9kQ854xDUSTDupLMHegAQl54RSrU9hcMMz7GhLc5P1JylADfjZS6WCdjJZU5Jc5y3YYdDdVjOypiNfcPtsq4ob4lAjnEHvIngROBNU1Yh4u5/v/Pw9OFfYTjG347tyG77a7RJEiziT8Eyt3S9YSob4Rdq5ufSm/VQPp/2ZPgPOLf4NMgodTLicT47aCg5Cl+/AB1OZ2NoSTNIB2mrtA=="
#define SYS_ID "Z1017001"
// 请求类型的枚举值 // 请求类型的枚举值
enum FM_TYPE { enum FM_TYPE {
FM_Set_Store_Info = 1000, FM_Set_Store_Info = 1000,
...@@ -153,6 +166,26 @@ struct PP{ ...@@ -153,6 +166,26 @@ struct PP{
MandatoryField = "MandatoryField"; MandatoryField = "MandatoryField";
OptionalField = "OptionalField"; OptionalField = "OptionalField";
#ifdef FASTPAY
MerchantCode = "merchantCode";
RequestData = "REQUEST_DATA";
HrtAttrs = "HRT_ATTRS";
_PartnerId = "Partner_ID";
ApiVersion = "Api_Version";
AppSubID = "App_Sub_ID";
Format = "Format";
TimeStamp = "Time_Stamp";
ApiID = "Api_ID";
AppToken = "App_Token";
AppPubID = "App_Pub_ID";
SignMethod = "Sign_Method";
_Sign = "Sign";
SysID = "Sys_ID";
TransactionUnid = "transactionUuid";
MemberVerifyCode = "memberVerifyCode";
#endif
} }
QString AppId ; QString AppId ;
...@@ -241,6 +274,27 @@ struct PP{ ...@@ -241,6 +274,27 @@ struct PP{
QString MandatoryField; QString MandatoryField;
QString OptionalField; QString OptionalField;
#ifdef FASTPAY
QString MerchantCode;
QString RequestData;
QString HrtAttrs;
QString _PartnerId;
QString ApiVersion;
QString AppSubID;
QString Format;
QString TimeStamp;
QString ApiID;
QString AppToken;
QString AppPubID;
QString SignMethod;
QString _Sign;
QString SysID;
QString TransactionUnid;
QString MemberVerifyCode;
#endif
}; };
const static PP PosProps; const static PP PosProps;
...@@ -252,6 +306,10 @@ const static PP PosProps; ...@@ -252,6 +306,10 @@ const static PP PosProps;
typedef std::map<QString, QString> PropsMap; typedef std::map<QString, QString> PropsMap;
const PropsMap::value_type PropsMapPairs[] = const PropsMap::value_type PropsMapPairs[] =
{ {
#ifdef FASTPAY
PropsMap::value_type(PosProps.Coupon_code, "couponId"),
PropsMap::value_type(PosProps.Fm_open_id, "openid"),
#else
PropsMap::value_type(PosProps.StatusCode, "statusCode"), PropsMap::value_type(PosProps.StatusCode, "statusCode"),
PropsMap::value_type(PosProps.Fm_cmd, "reqType"), PropsMap::value_type(PosProps.Fm_cmd, "reqType"),
PropsMap::value_type(PosProps.Member_sign, "code"), PropsMap::value_type(PosProps.Member_sign, "code"),
...@@ -280,6 +338,7 @@ const PropsMap::value_type PropsMapPairs[] = ...@@ -280,6 +338,7 @@ const PropsMap::value_type PropsMapPairs[] =
PropsMap::value_type(PosProps.Price, "price"), PropsMap::value_type(PosProps.Price, "price"),
PropsMap::value_type(PosProps.ChargeAmount, "payAmount"), PropsMap::value_type(PosProps.ChargeAmount, "payAmount"),
PropsMap::value_type(PosProps.PartnerId, "partnerId"), PropsMap::value_type(PosProps.PartnerId, "partnerId"),
#endif
}; };
static PropsMap PosToServerProps(PropsMapPairs, PropsMapPairs + (sizeof(PropsMapPairs)/sizeof(PropsMapPairs[0]))); static PropsMap PosToServerProps(PropsMapPairs, PropsMapPairs + (sizeof(PropsMapPairs)/sizeof(PropsMapPairs[0])));
......
...@@ -12,6 +12,11 @@ class Coupon ...@@ -12,6 +12,11 @@ class Coupon
public: public:
explicit Coupon(QString name="", QString code="", QString type="", double disAmount=0, double limitAmount=0, QString limitTime="", bool isCompatible=true); explicit Coupon(QString name="", QString code="", QString type="", double disAmount=0, double limitAmount=0, QString limitTime="", bool isCompatible=true);
bool operator ==(const Coupon &rhs)
{
return (this->code().compare(rhs.code())==0);
}
void paint(QPainter *painter, const QRect &rect, void paint(QPainter *painter, const QRect &rect,
const QPalette &palette) const; const QPalette &palette) const;
QSize sizeHint() const; QSize sizeHint() const;
......
...@@ -44,7 +44,11 @@ QByteArray FMTask::doTask() ...@@ -44,7 +44,11 @@ QByteArray FMTask::doTask()
#endif #endif
RunFunction(packagePOSReq); RunFunction(packagePOSReq);
#ifdef FASTPAY
#else
RunFunction(copyPros); RunFunction(copyPros);
#endif
RunFunction(setWindow); RunFunction(setWindow);
RunFunction(showWindow); RunFunction(showWindow);
RunFunction(packagePOSRsp); RunFunction(packagePOSRsp);
...@@ -104,7 +108,31 @@ void FMTask::showWindow() ...@@ -104,7 +108,31 @@ void FMTask::showWindow()
bool FMTask::sendToServer(bool isShowMsg) bool FMTask::sendToServer(bool isShowMsg)
{ {
FMP_DEBUG() << __FUNCTION__; FMP_DEBUG() << __FUNCTION__;
url = FMPVipSettings::instance()->getServerUrl();
// 固定部分 // 固定部分
#ifdef FASTPAY
QJsonObject hrtAttrs;
hrtAttrs[ServerProps(PosProps._PartnerId)] = H_PARTNER_ID;
hrtAttrs[ServerProps(PosProps.ApiVersion)] = API_VERSION;
hrtAttrs[ServerProps(PosProps.AppSubID)] = APP_SUB_ID;
hrtAttrs[ServerProps(PosProps.Format)] = FORMAT;
hrtAttrs[ServerProps(PosProps.TimeStamp)] = QDateTime::currentDateTime().toString("yyyy-MM-dd hh:mm:ss:zzz");
hrtAttrs[ServerProps(PosProps.AppToken)] = APP_TOKEN;
hrtAttrs[ServerProps(PosProps.SignMethod)] = SIGN_METHOD;
hrtAttrs[ServerProps(PosProps._Sign)] = SIGN;
hrtAttrs[ServerProps(PosProps.SysID)] = SYS_ID;
QJsonObject request;
request[ServerProps(PosProps.HrtAttrs)] = hrtAttrs;
serverReqJsonObj["REQUEST"] = request;
packageServerReq();
qDebug() << serverReqJsonObj;
#else
serverReqJsonObj[PosProps.AppId] = APP_ID; serverReqJsonObj[PosProps.AppId] = APP_ID;
serverReqJsonObj[ServerProps(PosProps.PartnerId)] = PARTNER_ID; serverReqJsonObj[ServerProps(PosProps.PartnerId)] = PARTNER_ID;
serverReqJsonObj[PosProps.T] = QString::number(QDateTime::currentMSecsSinceEpoch()); serverReqJsonObj[PosProps.T] = QString::number(QDateTime::currentMSecsSinceEpoch());
...@@ -114,10 +142,12 @@ bool FMTask::sendToServer(bool isShowMsg) ...@@ -114,10 +142,12 @@ bool FMTask::sendToServer(bool isShowMsg)
packageServerReq(); packageServerReq();
serverReqJsonObj[PosProps.Sign] = sign(); serverReqJsonObj[PosProps.Sign] = sign();
url = url + "/" + ReqUrl.at(FM_Type());
#endif
QJsonDocument json(serverReqJsonObj); QJsonDocument json(serverReqJsonObj);
QByteArray data = json.toJson(QJsonDocument::Compact); QByteArray data = json.toJson(QJsonDocument::Compact);
url = FMPVipSettings::instance()->getServerUrl() + "/" + ReqUrl.at(FM_Type());
QByteArray rspData; QByteArray rspData;
FMNetwork net; FMNetwork net;
......
...@@ -16,7 +16,10 @@ QByteArray FMTaskNoWnd::doTask() ...@@ -16,7 +16,10 @@ QByteArray FMTaskNoWnd::doTask()
} }
#endif #endif
RunFunction(packagePOSReq); RunFunction(packagePOSReq);
#ifdef FASTPAY
#else
RunFunction(copyPros); RunFunction(copyPros);
#endif
bool isOk = sendToServer(); bool isOk = sendToServer();
if(!isOk) { if(!isOk) {
FMP_WARN() << QString("Task error %1: %2").arg(error()).arg(errorString()); FMP_WARN() << QString("Task error %1: %2").arg(error()).arg(errorString());
......
...@@ -17,7 +17,13 @@ ...@@ -17,7 +17,13 @@
//FMTask* TaskFactory::Task(QByteArray data) //FMTask* TaskFactory::Task(QByteArray data)
//{ //{
// QJsonParseError error; // QJsonParseError error;askRefundOrder(jsonObj);
// break;
// }
// case FM_Order_Revoke: {
// task = new TaskRefundPay(jsonObj);
// break;
// }
// QJsonDocument doc = QJsonDocument::fromJson(data, &error); // QJsonDocument doc = QJsonDocument::fromJson(data, &error);
// QJsonObject jsonObj = doc.object(); // QJsonObject jsonObj = doc.object();
...@@ -46,13 +52,7 @@ ...@@ -46,13 +52,7 @@
// break; // break;
// } // }
// case FM_Order_Refund: { // case FM_Order_Refund: {
// task = new TaskRefundOrder(jsonObj); // task = new T
// break;
// }
// case FM_Order_Revoke: {
// task = new TaskRefundPay(jsonObj);
// break;
// }
// case FM_Charge_Refund: { // case FM_Charge_Refund: {
// task = new TaskRefundOrder(jsonObj); // task = new TaskRefundOrder(jsonObj);
// break; // break;
......
...@@ -28,13 +28,36 @@ void TaskLogin::setWindow() ...@@ -28,13 +28,36 @@ void TaskLogin::setWindow()
void TaskLogin::packageServerReq() void TaskLogin::packageServerReq()
{ {
#ifdef FASTPAY
QJsonObject requestData;
requestData[ServerProps(PosProps.TransactionUnid)] = session()->data(PosProps.TransactionUnid).toString();
requestData[ServerProps(PosProps.MemberVerifyCode)] = session()->data(PosProps.Member_sign).toString();
requestData[ServerProps(PosProps.MerchantCode)] = getPosJsonValue(PosProps.MerchantCode);
QJsonObject request = serverReqJsonObj["REQUEST"].toObject();
request[ServerProps(PosProps.RequestData)] = requestData;
QJsonObject hrtObj = request[ServerProps(PosProps.HrtAttrs)].toObject();
hrtObj[ServerProps(PosProps.ApiID)] = "crt.mb.public.VerifyMemberInfoForOut";
hrtObj[ServerProps(PosProps.AppPubID)] = "T000000305EH";
serverReqJsonObj["REQUEST"] = request;
#else
QJsonObject code; QJsonObject code;
code[ServerProps(PosProps.Member_sign)] = session()->data(PosProps.Member_sign).toString(); code[ServerProps(PosProps.Member_sign)] = session()->data(PosProps.Member_sign).toString();
serverReqJsonObj["data"] = code; serverReqJsonObj["data"] = code;
#endif
} }
void TaskLogin::packagePOSRsp() void TaskLogin::packagePOSRsp()
{ {
/*会员验证完服务器返回的信息收集*/
#ifdef FASTPAY
QJsonValue rspJson = getServerJsonValue("RETURN_CODE");
QJsonValue rsp = getServerJsonValue("RETURN_DATA");
QJsonObject rspData = rsp.toObject();
QString code = rspData["openid"].toString();
double points = rspData["points"].toDouble();
#else
std::vector<QString> p; std::vector<QString> p;
p.push_back(PosProps.StatusCode); p.push_back(PosProps.StatusCode);
p.push_back(PosProps.Msg); p.push_back(PosProps.Msg);
...@@ -49,6 +72,7 @@ void TaskLogin::packagePOSRsp() ...@@ -49,6 +72,7 @@ void TaskLogin::packagePOSRsp()
foreach (QString prop , p) { foreach (QString prop , p) {
posRspJsonObj[prop] = getServerJsonValue(prop); posRspJsonObj[prop] = getServerJsonValue(prop);
} }
#endif
} }
void TaskLogin::onLogin() void TaskLogin::onLogin()
......
...@@ -8,6 +8,22 @@ TaskCoupon::TaskCoupon(QJsonObject &jsonObj, Session *session, QObject *parent) ...@@ -8,6 +8,22 @@ TaskCoupon::TaskCoupon(QJsonObject &jsonObj, Session *session, QObject *parent)
void TaskCoupon::packageServerReq() void TaskCoupon::packageServerReq()
{ {
#ifdef FASTPAY
QJsonObject requestData;
requestData[ServerProps(PosProps.Fm_open_id)] = session()->data(PosProps.Fm_open_id).toString();
requestData[ServerProps(PosProps.Coupon_code)] = getPosJsonValue(PosProps.Coupon_code);
requestData[ServerProps(PosProps.MerchantCode)] = getPosJsonValue(PosProps.MerchantCode);
QJsonObject request = serverReqJsonObj["REQUEST"].toObject();
request[ServerProps(PosProps.RequestData)] = requestData;
QJsonObject hrtObj = request[ServerProps(PosProps.HrtAttrs)].toObject();
hrtObj[ServerProps(PosProps.ApiID)] = "crt.cp.public.syncCoupon";
hrtObj[ServerProps(PosProps.AppPubID)] = APP_PUB_ID;
request[ServerProps(PosProps.HrtAttrs)] = hrtObj;
serverReqJsonObj["REQUEST"] = request;
#else
QJsonObject data; QJsonObject data;
data[ServerProps(PosProps.Fm_open_id)] = session()->data(PosProps.Fm_open_id).toString(); data[ServerProps(PosProps.Fm_open_id)] = session()->data(PosProps.Fm_open_id).toString();
// data[ServerProps(PosProps.Fm_open_id)] = "6524402960"; // data[ServerProps(PosProps.Fm_open_id)] = "6524402960";
...@@ -25,10 +41,42 @@ void TaskCoupon::packageServerReq() ...@@ -25,10 +41,42 @@ void TaskCoupon::packageServerReq()
} }
data[ServerProps(PosProps.Products)] = propducts; data[ServerProps(PosProps.Products)] = propducts;
serverReqJsonObj["data"] = data; serverReqJsonObj["data"] = data;
#endif
} }
void TaskCoupon::packagePOSRsp() void TaskCoupon::packagePOSRsp()
{ {
/*单张券查询服务器返回的信息*/
#ifdef FASTPAY
QJsonValue rspJson = getServerJsonValue("RETURN_CODE");
qDebug() << "*******************" << rspJson.toString();
QJsonValue rsp = getServerJsonValue("RETURN_DATA");
QJsonObject rspData = rsp.toObject();
QString code = rspData["couponId"].toString();
QString desc = rspData["couponName"].toString();
QString type = rspData["couponType"].toString();
QString amount = rspData["cpValue"].toString();
double _amount = amount.toDouble();
QString ableUsed = rspData["ableUsed"].toString();
QString beginDate = rspData["beginDate"].toString();
QString couponStatus = rspData["couponStatus"].toString();
QString endDate = rspData["endDate"].toString();
QString ownerShopName = rspData["ownerShopName"].toString();
QString useCondition = rspData["useCondition"].toString();
double _useCondition = useCondition.toDouble();
QString openid = rspData["openid"].toString();
code = getPosJsonValue(PosProps.Coupon_code).toString();
desc = code;
qDebug() << code;
Coupon c(desc,code,type,_amount,_useCondition,endDate);
QVariant v;
v.setValue(c);
QMap<QString, QVariant> couponMap;
couponMap[code] = v;
session()->addData(PosProps.CouponMap, couponMap);
#else
QMap<QString, QVariant> couponMap; QMap<QString, QVariant> couponMap;
foreach (auto value, getServerJsonValue(PosProps.CouponList).toArray()) foreach (auto value, getServerJsonValue(PosProps.CouponList).toArray())
{ {
...@@ -45,6 +93,7 @@ void TaskCoupon::packagePOSRsp() ...@@ -45,6 +93,7 @@ void TaskCoupon::packagePOSRsp()
couponMap[code] = v; couponMap[code] = v;
} }
session()->addData(PosProps.CouponMap, couponMap); session()->addData(PosProps.CouponMap, couponMap);
#endif
} }
TaskRefundPay::TaskRefundPay(QJsonObject &jsonObj, QObject *parent) TaskRefundPay::TaskRefundPay(QJsonObject &jsonObj, QObject *parent)
......
...@@ -18,6 +18,7 @@ TaskPay::TaskPay(QJsonObject &jsonObj, Session *session, QObject *parent) ...@@ -18,6 +18,7 @@ TaskPay::TaskPay(QJsonObject &jsonObj, Session *session, QObject *parent)
:FMTask(jsonObj, FM_Pay, session, parent) :FMTask(jsonObj, FM_Pay, session, parent)
, _order(new Order(this)) , _order(new Order(this))
{ {
} }
TaskPay::~TaskPay() TaskPay::~TaskPay()
...@@ -49,15 +50,15 @@ void TaskPay::packagePOSReq() ...@@ -49,15 +50,15 @@ void TaskPay::packagePOSReq()
QString fm_open_id_pos = getPosJsonValue(PosProps.Fm_open_id).toString(); QString fm_open_id_pos = getPosJsonValue(PosProps.Fm_open_id).toString();
QString fm_open_id_session = session()->data(PosProps.Fm_open_id).toString(); QString fm_open_id_session = session()->data(PosProps.Fm_open_id).toString();
if(fm_open_id_session == "" || fm_open_id_pos!=fm_open_id_session || session()->data(PosProps.CanPay).toBool() == false) { // if(fm_open_id_session == "" || fm_open_id_pos!=fm_open_id_session || session()->data(PosProps.CanPay).toBool() == false) {
preTask = new TaskLogin(posReqJsonObj, _session, this); // preTask = new TaskLogin(posReqJsonObj, _session, this);
preTask->session()->addData(PosProps.FM_Type, FM_Pay); // preTask->session()->addData(PosProps.FM_Type, FM_Pay);
preTask->doTask(); // preTask->doTask();
if(preTask->error() != FM_API_SUCCESS) { // if(preTask->error() != FM_API_SUCCESS) {
this->setError(preTask->error(), preTask->errorString()); // this->setError(preTask->error(), preTask->errorString());
} // }
this->_session = preTask->session(); // this->_session = preTask->session();
} // }
session()->addData(PosProps.OrderAmount, getPosJsonValue(PosProps.OrderAmount).toInt()); session()->addData(PosProps.OrderAmount, getPosJsonValue(PosProps.OrderAmount).toInt());
session()->addData(PosProps.TransAmount, getPosJsonValue(PosProps.TransAmount).toInt()); session()->addData(PosProps.TransAmount, getPosJsonValue(PosProps.TransAmount).toInt());
...@@ -81,11 +82,35 @@ void TaskPay::onGetCoupons(Session* session) ...@@ -81,11 +82,35 @@ void TaskPay::onGetCoupons(Session* session)
} }
} }
#ifdef FASTPAY
void TaskPay::onCouponReq(const QString &code)
{
posReqJsonObj[PosProps.Coupon_code] = code;
TaskCoupon couponTask(posReqJsonObj, this->session());
qDebug() << couponTask.doTask();
_session->addData(PosProps.CouponMap, this->session()->getCouponMap(PosProps.CouponMap));
if(_window != nullptr) {
qobject_cast<FMVipOrder*>(_window)->initCouponItems();
_window->setIsBusy(false);
_window->setEnabled(true);
}
// qDebug() << couponTask->getServerJsonValue("");
}
#endif
void TaskPay::setWindow() void TaskPay::setWindow()
{ {
_window = new FMVipOrder; _window = new FMVipOrder;
connect(qobject_cast<FMVipOrder*>(_window), SIGNAL(pay()), this, SLOT(onPay())); connect(qobject_cast<FMVipOrder*>(_window), SIGNAL(pay()), this, SLOT(onPay()));
#ifdef FASTPAY
connect(qobject_cast<FMVipOrder*>(_window),SIGNAL(couponReq(const QString &)),this,SLOT(onCouponReq(const QString &)));
#endif
} }
void TaskPay::packageServerReq() void TaskPay::packageServerReq()
...@@ -135,6 +160,7 @@ void TaskPay::packageServerReq() ...@@ -135,6 +160,7 @@ void TaskPay::packageServerReq()
//代金券/商品券支付详情 //代金券/商品券支付详情
QMap<QString, QVariant> coupons = session()->data("payCouponMap").toMap(); QMap<QString, QVariant> coupons = session()->data("payCouponMap").toMap();
// 将代金券按金额从小到大排序 // 将代金券按金额从小到大排序
QList<Coupon> couponList; QList<Coupon> couponList;
for(QMap<QString, QVariant>::const_iterator it = coupons.constBegin(); it != coupons.constEnd(); it++) for(QMap<QString, QVariant>::const_iterator it = coupons.constBegin(); it != coupons.constEnd(); it++)
...@@ -151,10 +177,13 @@ void TaskPay::packageServerReq() ...@@ -151,10 +177,13 @@ void TaskPay::packageServerReq()
int couponAmount = 0; int couponAmount = 0;
foreach(Coupon c, couponList) foreach(Coupon c, couponList)
{ {
QJsonObject coupon;
#ifdef FASTPAY
int couponDisAmount = c.disAmount() * 100;
#else
if(needCouponAmount <= 0) { if(needCouponAmount <= 0) {
break; break;
} }
QJsonObject coupon;
int couponDisAmount = c.disAmount() * 100; int couponDisAmount = c.disAmount() * 100;
if(couponDisAmount <= needCouponAmount) { if(couponDisAmount <= needCouponAmount) {
couponDisAmount = couponDisAmount; couponDisAmount = couponDisAmount;
...@@ -164,6 +193,7 @@ void TaskPay::packageServerReq() ...@@ -164,6 +193,7 @@ void TaskPay::packageServerReq()
needCouponAmount = 0; needCouponAmount = 0;
} }
couponAmount += couponDisAmount; couponAmount += couponDisAmount;
#endif
coupon["amount"] = couponDisAmount; coupon["amount"] = couponDisAmount;
coupon["transId"] = getPosJsonValue(PosProps.TransId); coupon["transId"] = getPosJsonValue(PosProps.TransId);
......
...@@ -26,6 +26,10 @@ private slots: ...@@ -26,6 +26,10 @@ private slots:
void onPay(); void onPay();
void onGetCoupons(Session* session); void onGetCoupons(Session* session);
#ifdef FASTPAY
void onCouponReq(const QString &code);
#endif // ifdef FASTPAY
private: private:
TaskCouponThread *couponThread; TaskCouponThread *couponThread;
FMItem::Order *_order; FMItem::Order *_order;
......
...@@ -37,11 +37,17 @@ Coupon CouponModel::coupon(const QModelIndex &index) ...@@ -37,11 +37,17 @@ Coupon CouponModel::coupon(const QModelIndex &index)
return couponList.at(index.row()); return couponList.at(index.row());
} }
void CouponModel::push_back(Coupon coupon) QModelIndex CouponModel::push_back(Coupon coupon)
{ {
int rowNum = rowCount(); int rowNum = rowCount();
QModelIndex beginIndex = index(rowNum); QModelIndex beginIndex = index(rowNum);
beginInsertRows(beginIndex, rowNum, rowNum); beginInsertRows(beginIndex, rowNum, rowNum);
couponList.append(coupon); couponList.append(coupon);
endInsertRows(); endInsertRows();
return this->index(rowNum);
}
bool CouponModel::contains(const Coupon &coupon)
{
return couponList.contains(coupon);
} }
...@@ -16,7 +16,9 @@ public: ...@@ -16,7 +16,9 @@ public:
QVariant data(const QModelIndex &index, int role=Qt::DisplayRole) const override; QVariant data(const QModelIndex &index, int role=Qt::DisplayRole) const override;
Coupon coupon(const QModelIndex &index); Coupon coupon(const QModelIndex &index);
void push_back(Coupon coupon); QModelIndex push_back(Coupon coupon);
bool contains(const Coupon &coupon);
private: private:
QList<Coupon> couponList; QList<Coupon> couponList;
......
...@@ -6,6 +6,7 @@ ...@@ -6,6 +6,7 @@
#include "fmnumpad.h" #include "fmnumpad.h"
#include <QScrollBar> #include <QScrollBar>
#include <QItemSelectionModel> #include <QItemSelectionModel>
#include <QLabel>
FMVipOrder::FMVipOrder(QDialog *parent) : FMVipOrder::FMVipOrder(QDialog *parent) :
FMVipWnd(parent), FMVipWnd(parent),
...@@ -21,6 +22,36 @@ FMVipOrder::FMVipOrder(QDialog *parent) : ...@@ -21,6 +22,36 @@ FMVipOrder::FMVipOrder(QDialog *parent) :
connect(this, &FMVipOrder::accepted, [=](){ connect(this, &FMVipOrder::accepted, [=](){
_numpad->close(); _numpad->close();
}); });
/*条件为1时,表示使用快速支付功能,将原界面price窗口中的控件全部关闭,
* 然后添加label和lineEdit控件,用于扫描优惠券*/
#ifdef FASTPAY
ui->price_desc_label->close();
ui->price_label->close();
ui->undis_desc_label->close();
ui->undis_label->close();
scanfLabel = new QLabel(ui->price);
scanfLabel->setText(QString::fromLocal8Bit("券码扫一扫:"));
scanfLabel->adjustSize();
scanfLabel->move(100,20);
scanfLabel->show();
scanfLe = new QLineEdit(ui->price);
scanfLe->setMinimumSize(350,30);
scanfLe->move(230,21);
scanfLe->show();
ui->pay_edit->setFocus();
connect(scanfLe,SIGNAL(returnPressed()),this,SLOT(on_scanfLe_returnPressed()));
#endif
} }
FMVipOrder::~FMVipOrder() FMVipOrder::~FMVipOrder()
...@@ -28,6 +59,11 @@ FMVipOrder::~FMVipOrder() ...@@ -28,6 +59,11 @@ FMVipOrder::~FMVipOrder()
del_p(orderInfo); del_p(orderInfo);
delete ui; delete ui;
delete _numpad; delete _numpad;
#ifdef FASTPAY
delete scanfLabel;
delete scanfLe;
#endif
} }
bool FMVipOrder::initWnd(Session *session) bool FMVipOrder::initWnd(Session *session)
...@@ -145,11 +181,18 @@ void FMVipOrder::initCouponItems() ...@@ -145,11 +181,18 @@ void FMVipOrder::initCouponItems()
foreach(Coupon coupon, orderInfo->couponMap().values()) foreach(Coupon coupon, orderInfo->couponMap().values())
{ {
couponModel->push_back(coupon); if(!couponModel->contains(coupon)) {
QModelIndex inserIndex = couponModel->push_back(coupon);
qDebug() << inserIndex;
#ifdef FASTPAY
selectionModel->select(inserIndex, QItemSelectionModel::Select);
qDebug() << selectionModel->currentIndex() << selectionModel->selectedRows();
#endif
}
} }
ui->pay_edit->setFocus(); // ui->pay_edit->setFocus();
ui->pay_edit->selectAll(); // ui->pay_edit->selectAll();
} }
void FMVipOrder::onSelectionChanged(const QItemSelection &selected, const QItemSelection &deselected) void FMVipOrder::onSelectionChanged(const QItemSelection &selected, const QItemSelection &deselected)
...@@ -191,6 +234,8 @@ void FMVipOrder::on_coupon_next_btn_clicked() ...@@ -191,6 +234,8 @@ void FMVipOrder::on_coupon_next_btn_clicked()
void FMVipOrder::on_pay_edit_textChanged(const QString &text) void FMVipOrder::on_pay_edit_textChanged(const QString &text)
{ {
#ifdef FASTPAY
#else
double num = text.toDouble(); double num = text.toDouble();
double maxPay = orderInfo->getMaxWillPay(); double maxPay = orderInfo->getMaxWillPay();
...@@ -206,6 +251,7 @@ void FMVipOrder::on_pay_edit_textChanged(const QString &text) ...@@ -206,6 +251,7 @@ void FMVipOrder::on_pay_edit_textChanged(const QString &text)
ui->pay_max->setText(""); ui->pay_max->setText("");
ui->pay_edit->setText(text); ui->pay_edit->setText(text);
} }
#endif
} }
void FMVipOrder::on_score_edit_textChanged(const QString &scoreStr) void FMVipOrder::on_score_edit_textChanged(const QString &scoreStr)
...@@ -237,3 +283,12 @@ void FMVipOrder::on_pay_key_clicked() ...@@ -237,3 +283,12 @@ void FMVipOrder::on_pay_key_clicked()
_numpad->exec(); _numpad->exec();
} }
} }
#ifdef FASTPAY
void FMVipOrder::on_scanfLe_returnPressed()
{
emit couponReq(scanfLe->text());
scanfLe->clear();
}
#endif
...@@ -2,6 +2,7 @@ ...@@ -2,6 +2,7 @@
#define FMVIPORDER_H #define FMVIPORDER_H
#include <QListWidgetItem> #include <QListWidgetItem>
#include <QModelIndex> #include <QModelIndex>
#include <QLabel>
#include "fmvipwnd.h" #include "fmvipwnd.h"
#include "global.h" #include "global.h"
...@@ -32,6 +33,10 @@ public: ...@@ -32,6 +33,10 @@ public:
signals: signals:
void pay(); void pay();
#ifdef FASTPAY
void couponReq(const QString &code);
#endif
public slots: public slots:
void on_pay_btn_clicked(); void on_pay_btn_clicked();
...@@ -49,6 +54,12 @@ private slots: ...@@ -49,6 +54,12 @@ private slots:
void on_pay_key_clicked(); void on_pay_key_clicked();
#ifdef FASTPAY
void on_scanfLe_returnPressed();
#endif
private: private:
class OrderInfo class OrderInfo
{ {
...@@ -193,9 +204,18 @@ private: ...@@ -193,9 +204,18 @@ private:
QItemSelectionModel *selectionModel; QItemSelectionModel *selectionModel;
CouponModel *couponModel; CouponModel *couponModel;
QModelIndex selectedIndex;
FMNumPad *_numpad; FMNumPad *_numpad;
QLineEdit *le;
QWidget * w;
#ifdef FASTPAY
QLabel *scanfLabel;
QLineEdit *scanfLe;
QJsonObject *_json;
#endif
}; };
#endif // FMVIPORDER_H #endif // FMVIPORDER_H
...@@ -7,7 +7,7 @@ ...@@ -7,7 +7,7 @@
<x>0</x> <x>0</x>
<y>0</y> <y>0</y>
<width>786</width> <width>786</width>
<height>624</height> <height>626</height>
</rect> </rect>
</property> </property>
<property name="maximumSize"> <property name="maximumSize">
...@@ -748,7 +748,7 @@ ...@@ -748,7 +748,7 @@
<item> <item>
<widget class="QLabel" name="pay_max"> <widget class="QLabel" name="pay_max">
<property name="text"> <property name="text">
<string>余额最多支付 0.00 元</string> <string/>
</property> </property>
<property name="alignment"> <property name="alignment">
<set>Qt::AlignBottom|Qt::AlignHCenter</set> <set>Qt::AlignBottom|Qt::AlignHCenter</set>
...@@ -920,6 +920,9 @@ font: 13px &quot;微软雅黑&quot;; ...@@ -920,6 +920,9 @@ font: 13px &quot;微软雅黑&quot;;
<property name="cursor"> <property name="cursor">
<cursorShape>PointingHandCursor</cursorShape> <cursorShape>PointingHandCursor</cursorShape>
</property> </property>
<property name="focusPolicy">
<enum>Qt::NoFocus</enum>
</property>
<property name="text"> <property name="text">
<string>支 付</string> <string>支 付</string>
</property> </property>
...@@ -1073,6 +1076,17 @@ font: 13px &quot;微软雅黑&quot;; ...@@ -1073,6 +1076,17 @@ font: 13px &quot;微软雅黑&quot;;
</layout> </layout>
</widget> </widget>
<layoutdefault spacing="6" margin="11"/> <layoutdefault spacing="6" margin="11"/>
<tabstops>
<tabstop>pay_edit</tabstop>
<tabstop>pay_btn</tabstop>
<tabstop>coupon_page</tabstop>
<tabstop>coupon_prev_btn</tabstop>
<tabstop>coupon_next_btn</tabstop>
<tabstop>close_btn</tabstop>
<tabstop>pay_key</tabstop>
<tabstop>score_edit</tabstop>
<tabstop>score_key</tabstop>
</tabstops>
<resources/> <resources/>
<connections/> <connections/>
</ui> </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 36 #define VER_BUILD 37
//! 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