Commit df0cc34f by NitefullWind

1. 修改了支付方式类型。 2. 实现了充值、支付服务端响应超时后自动冲正。

parent ffe2d553
#include "fmnetwork.h" #include "fmnetwork.h"
#include "global.h" #include "global.h"
#include <QNetworkAccessManager> #include <QNetworkAccessManager>
#include <QNetworkReply> #include <QNetworkReply>
......
#ifndef FMNETWORK_H #ifndef FMNETWORK_H
#define FMNETWORK_H #define FMNETWORK_H
#include <QObject> #include <QObject>
......
...@@ -25,11 +25,12 @@ const static QStringList FM_Server_Type = QString( ...@@ -25,11 +25,12 @@ const static QStringList FM_Server_Type = QString(
"member_check_request," "member_check_request,"
"order_request," "order_request,"
"integral_request," "integral_request,"
"order_correct_request," // 冲正 "order_correct_request,"
"order_recharge_request," "order_recharge_request,"
"order_cardlock_request," "order_cardlock_request,"
"order_cardactive_request," "order_cardactive_request,"
"order_coupon_request").split(","); "order_coupon_request,"
"order_refund_request").split(",");
// 请求类型的枚举值 // 请求类型的枚举值
enum FM_TYPE { enum FM_TYPE {
...@@ -42,8 +43,7 @@ enum FM_TYPE { ...@@ -42,8 +43,7 @@ enum FM_TYPE {
FM_Card_Lock, FM_Card_Lock,
FM_Card_Active, FM_Card_Active,
FM_Coupon, FM_Coupon,
FM_Reversal // 充值、支付冲正
FM_Order_Revoke
}; };
enum Member_Type { enum Member_Type {
......
...@@ -28,21 +28,21 @@ void TaskFinal::packageServerReq() ...@@ -28,21 +28,21 @@ void TaskFinal::packageServerReq()
{ {
QJsonObject pay_ob = pay_v.toObject(); QJsonObject pay_ob = pay_v.toObject();
QString type = pay_ob[PosProps.Pay_id].toString(); QString type = pay_ob[PosProps.Pay_id].toString();
if(type == "01") { if(type == "20005") {
cashAmount = pay_ob[PosProps.Paid_total_amount].toInt(); cashAmount = pay_ob[PosProps.Paid_total_amount].toInt();
} else if(type == "24") { } else if(type == "20001") {
codeAmount = pay_ob[PosProps.Paid_total_amount].toInt(); codeAmount = pay_ob[PosProps.Paid_total_amount].toInt();
} else if(type == "25") { } else if(type == "20002") {
scoreAmount = pay_ob[PosProps.Paid_total_amount].toInt(); scoreAmount = pay_ob[PosProps.Paid_total_amount].toInt();
} else if(type == "77") { // 代金券 } else if(type == "20003") { // 代金券
coupons.append(pay_ob[PosProps.Coupon_code].toString()); coupons.append(pay_ob[PosProps.Coupon_code].toString());
} else if(type == "72" || type == "73" || type == "12") { } else if(type == "10001" || type == "10004" || type == "12") {
thirdAmount = pay_ob[PosProps.Paid_total_amount].toInt(); thirdAmount = pay_ob[PosProps.Paid_total_amount].toInt();
trans[ServerProps(PosProps.Pay_transId)] = pay_ob[PosProps.Pay_transId]; trans[ServerProps(PosProps.Pay_transId)] = pay_ob[PosProps.Pay_transId];
if (type == "72") { // 支付宝 if (type == "10001") { // 支付宝
trans[ServerProps(PosProps.Pay_type)] = 1; trans[ServerProps(PosProps.Pay_type)] = 1;
} else if(type == "73") { // 微信 } else if(type == "10004") { // 微信
trans[ServerProps(PosProps.Pay_type)] = 2; trans[ServerProps(PosProps.Pay_type)] = 2;
} else if(type == "12") { // 非码支付 } else if(type == "12") { // 非码支付
trans[ServerProps(PosProps.Pay_type)] = 5; trans[ServerProps(PosProps.Pay_type)] = 5;
...@@ -63,9 +63,11 @@ void TaskFinal::packageServerReq() ...@@ -63,9 +63,11 @@ void TaskFinal::packageServerReq()
{ {
auto po = pValue.toObject(); auto po = pValue.toObject();
QJsonObject spo; QJsonObject spo;
for(auto prop : {PosProps.ConsumeNum, PosProps.Price, PosProps.ProductId}) { for(auto prop : {PosProps.ConsumeNum, PosProps.ProductId}) {
spo[ServerProps(prop)] = po[prop]; spo[ServerProps(prop)] = po[prop];
} }
double price = po[PosProps.Price].toDouble() / po[PosProps.ConsumeNum].toDouble();
spo[ServerProps(PosProps.Price)] = price;
propducts.append(spo); propducts.append(spo);
} }
trans[ServerProps(PosProps.Products)] = propducts; trans[ServerProps(PosProps.Products)] = propducts;
...@@ -111,6 +113,17 @@ void TaskFinal::packagePOSRsp() ...@@ -111,6 +113,17 @@ void TaskFinal::packagePOSRsp()
posRspJsonObj[prop] = getServerJsonValue(prop); posRspJsonObj[prop] = getServerJsonValue(prop);
} }
posRspJsonObj[PosProps.Prompt] = 1; posRspJsonObj[PosProps.Prompt] = 1;
if(posRspJsonObj[PosProps.StatusCode].toInt() != FM_API_SUCCESS) {
posRspJsonObj[PosProps.StatusCode] = FM_API_SUCCESS;
QString fmId = posReqJsonObj[PosProps.Fm_id].toString();
if(fmId == "") {
fmId = posReqJsonObj[PosProps.TransId].toString();
}
posRspJsonObj[PosProps.Fm_id] = fmId;
FMMsgWnd::FailureWnd(QString("非码订单结算时遇到问题,请将此订单退款并重新下单。\n%1")
.arg(posRspJsonObj[PosProps.Msg].toString()));
}
} }
QString TaskFinal::backup() QString TaskFinal::backup()
......
#include "taskfund.h" #include "taskfund.h"
#include "fmvipfund.h" #include "fmvipfund.h"
#include "tasklogin.h" #include "tasklogin.h"
#include "taskothers.h"
#include <QDateTime> #include <QDateTime>
TaskFund::TaskFund(QJsonObject &jsonObj, Session* session, QObject *parent) TaskFund::TaskFund(QJsonObject &jsonObj, Session* session, QObject *parent)
...@@ -56,7 +57,14 @@ void TaskFund::packagePOSRsp() ...@@ -56,7 +57,14 @@ void TaskFund::packagePOSRsp()
void TaskFund::onFund() void TaskFund::onFund()
{ {
sendToServer(false); sendToServer(false);
if(error() != FM_API_SUCCESS) { if(error() != FM_API_SUCCESS) {
// 如果超时错误,则发起冲正
if(error() == FM_API_TIMEOUT) {
posReqJsonObj[PosProps.TransId] = serverReqJsonObj[ServerProps(PosProps.TransId)];
FMTask *reversalTask = new TaskRefundOrder(posReqJsonObj, this);
reversalTask->doTask();
}
QString msg = "充值失败:\n" + errorString(); QString msg = "充值失败:\n" + errorString();
FMMsgWnd::FailureWnd(msg); FMMsgWnd::FailureWnd(msg);
} else if(getServerJsonValue(PosProps.StatusCode).toInt() != FM_API_SUCCESS) { } else if(getServerJsonValue(PosProps.StatusCode).toInt() != FM_API_SUCCESS) {
......
...@@ -21,9 +21,12 @@ void TaskCoupon::packageServerReq() ...@@ -21,9 +21,12 @@ void TaskCoupon::packageServerReq()
{ {
auto po = pValue.toObject(); auto po = pValue.toObject();
QJsonObject spo; QJsonObject spo;
for(auto prop : {PosProps.ConsumeNum, PosProps.Price, PosProps.ProductId}) { for(auto prop : {PosProps.ConsumeNum, PosProps.ProductId}) {
spo[ServerProps(prop)] = po[prop]; spo[ServerProps(prop)] = po[prop];
} }
double price = po[PosProps.Price].toDouble() / po[PosProps.ConsumeNum].toDouble();
spo[ServerProps(PosProps.Price)] = price;
propducts.append(spo); propducts.append(spo);
} }
transaction[ServerProps(PosProps.Products)] = propducts; transaction[ServerProps(PosProps.Products)] = propducts;
...@@ -46,7 +49,7 @@ void TaskCoupon::packagePOSRsp() ...@@ -46,7 +49,7 @@ void TaskCoupon::packagePOSRsp()
QString desc = couponOb[ServerProps(PosProps.Coupon_name)].toString(); QString desc = couponOb[ServerProps(PosProps.Coupon_name)].toString();
double limitAmount = couponOb[ServerProps(PosProps.Coupon_limitAmount)].toInt() / 100.0; double limitAmount = couponOb[ServerProps(PosProps.Coupon_limitAmount)].toInt() / 100.0;
bool isCompatible = (couponOb[ServerProps(PosProps.Coupon_compatible)].toInt() == qrand()%2+1); bool isCompatible = (couponOb[ServerProps(PosProps.Coupon_compatible)].toInt() == 1);
Coupon c(desc, code, amount, limitAmount, isCompatible); Coupon c(desc, code, amount, limitAmount, isCompatible);
QVariant v; QVariant v;
...@@ -56,20 +59,22 @@ void TaskCoupon::packagePOSRsp() ...@@ -56,20 +59,22 @@ void TaskCoupon::packagePOSRsp()
session()->addData(PosProps.CouponMap, couponMap); session()->addData(PosProps.CouponMap, couponMap);
} }
/// 退单
/// 退款 TaskRefundOrder::TaskRefundOrder(QJsonObject &jsonObj, QObject *parent)
TaskRefundPay::TaskRefundPay(QJsonObject &jsonObj, QObject *parent) :FMTaskNoWnd(jsonObj, FM_Order_Refund, 0, parent)
:FMTaskNoWnd(jsonObj, FM_Order_Revoke, 0, parent)
{ {
} }
void TaskRefundPay::packageServerReq() void TaskRefundOrder::packageServerReq()
{ {
serverReqJsonObj[ServerProps(PosProps.Fm_id)] = getPosJsonValue(PosProps.Fm_id); QString transId = getPosJsonValue(PosProps.TransId).toString("");
QString fmId = getPosJsonValue(PosProps.Fm_id).toString("");
serverReqJsonObj[ServerProps(PosProps.TransId)] = transId;
serverReqJsonObj[ServerProps(PosProps.Fm_id)] = fmId;
} }
void TaskRefundPay::packagePOSRsp() void TaskRefundOrder::packagePOSRsp()
{ {
for(auto prop : {PosProps.StatusCode, PosProps.Msg}) { for(auto prop : {PosProps.StatusCode, PosProps.Msg}) {
posRspJsonObj[prop] = getServerJsonValue(ServerProps(prop)); posRspJsonObj[prop] = getServerJsonValue(ServerProps(prop));
...@@ -77,23 +82,18 @@ void TaskRefundPay::packagePOSRsp() ...@@ -77,23 +82,18 @@ void TaskRefundPay::packagePOSRsp()
posRspJsonObj[PosProps.Prompt] = 1; posRspJsonObj[PosProps.Prompt] = 1;
} }
/// 冲正
/// 退单 TaskReversal::TaskReversal(QJsonObject &jsonObj, QObject *parent)
TaskRefundOrder::TaskRefundOrder(QJsonObject &jsonObj, QObject *parent) :FMTaskNoWnd(jsonObj, FM_Reversal, 0, parent)
:FMTaskNoWnd(jsonObj, FM_Order_Refund, 0, parent)
{ {
posReqJsonObj = jsonObj;
} }
void TaskRefundOrder::packageServerReq() void TaskReversal::packageServerReq()
{ {
serverReqJsonObj[ServerProps(PosProps.Fm_id)] = getPosJsonValue(PosProps.Fm_id); serverReqJsonObj[ServerProps(PosProps.TransId)] = getPosJsonValue(PosProps.TransId);
} }
void TaskRefundOrder::packagePOSRsp() void TaskReversal::packagePOSRsp()
{ {
for(auto prop : {PosProps.StatusCode, PosProps.Msg}) {
posRspJsonObj[prop] = getServerJsonValue(ServerProps(prop));
}
posRspJsonObj[PosProps.Prompt] = 1;
} }
...@@ -13,22 +13,22 @@ public: ...@@ -13,22 +13,22 @@ public:
void packagePOSRsp(); void packagePOSRsp();
}; };
// 支付退款 // 整单退款
class TaskRefundPay : public FMTaskNoWnd class TaskRefundOrder : public FMTaskNoWnd
{ {
Q_OBJECT Q_OBJECT
public: public:
explicit TaskRefundPay(QJsonObject &jsonObj, QObject *parent = 0); explicit TaskRefundOrder(QJsonObject &jsonObj, QObject *parent = 0);
void packageServerReq(); void packageServerReq();
void packagePOSRsp(); void packagePOSRsp();
}; };
// 整单退款 // 支付退款
class TaskRefundOrder : public FMTaskNoWnd class TaskReversal : public FMTaskNoWnd
{ {
Q_OBJECT Q_OBJECT
public: public:
explicit TaskRefundOrder(QJsonObject &jsonObj, QObject *parent = 0); explicit TaskReversal(QJsonObject &jsonObj, QObject *parent = 0);
void packageServerReq(); void packageServerReq();
void packagePOSRsp(); void packagePOSRsp();
}; };
......
...@@ -84,14 +84,14 @@ void TaskPay::packagePOSRsp() ...@@ -84,14 +84,14 @@ void TaskPay::packagePOSRsp()
QJsonArray pay_ids; QJsonArray pay_ids;
QJsonObject pay_id; QJsonObject pay_id;
pay_id[PosProps.Pay_id] = "24"; pay_id[PosProps.Pay_id] = "20001";
pay_id[PosProps.Pay_str] = "会员储值金支付"; pay_id[PosProps.Pay_str] = "会员储值金支付";
int codeAmount = getServerJsonValue(PosProps.CodeAmount).toInt(); int codeAmount = getServerJsonValue(PosProps.CodeAmount).toInt();
pay_id[PosProps.Paid_total_amount] = codeAmount; pay_id[PosProps.Paid_total_amount] = codeAmount;
paidTotalAmount += codeAmount; paidTotalAmount += codeAmount;
pay_ids.append(pay_id); pay_ids.append(pay_id);
pay_id[PosProps.Pay_id] = "25"; pay_id[PosProps.Pay_id] = "20002";
pay_id[PosProps.Pay_str] = "会员积分支付"; pay_id[PosProps.Pay_str] = "会员积分支付";
int scoreAmount = getServerJsonValue(PosProps.ScoreAmount).toInt(); int scoreAmount = getServerJsonValue(PosProps.ScoreAmount).toInt();
pay_id[PosProps.Paid_total_amount] = scoreAmount; pay_id[PosProps.Paid_total_amount] = scoreAmount;
...@@ -100,7 +100,7 @@ void TaskPay::packagePOSRsp() ...@@ -100,7 +100,7 @@ void TaskPay::packagePOSRsp()
for(auto coupon : getServerJsonValue(PosProps.Coupons).toArray()) { for(auto coupon : getServerJsonValue(PosProps.Coupons).toArray()) {
QJsonObject cp = coupon.toObject(); QJsonObject cp = coupon.toObject();
pay_id[PosProps.Pay_id] = "77"; pay_id[PosProps.Pay_id] = "20003";
pay_id[PosProps.Pay_str] = "代金券支付"; pay_id[PosProps.Pay_str] = "代金券支付";
int couponAmount = cp[ServerProps(PosProps.Coupon_disAmount)].toInt(); int couponAmount = cp[ServerProps(PosProps.Coupon_disAmount)].toInt();
pay_id[PosProps.Paid_total_amount] = couponAmount; pay_id[PosProps.Paid_total_amount] = couponAmount;
...@@ -119,6 +119,11 @@ void TaskPay::packagePOSRsp() ...@@ -119,6 +119,11 @@ void TaskPay::packagePOSRsp()
void TaskPay::onPay() void TaskPay::onPay()
{ {
sendToServer(); sendToServer();
// 如果超时错误,则发起冲正
if(error() == FM_API_TIMEOUT) {
FMTask *reversalTask = new TaskReversal(posReqJsonObj, this);
reversalTask->doTask();
}
closeWindow(); closeWindow();
} }
......
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