Commit 3ff6ecbf by NitefullWind

1. 对接服务端充值接口。 2. 修改各接口返回字段。

parent 5c233792
......@@ -13,6 +13,7 @@
#include "taskothers.h"
#include "taskfinal.h"
#include "taskrefund.h"
#include "taskfund.h"
#include "tasksetstoreinfo.h"
#include <ctkPluginContext.h>
#undef StartService
......@@ -105,6 +106,11 @@ void FMVipDispatcher::doTask(const QByteArray &reqData, QByteArray &rspData)
session.clear();
break;
}
case FM_Fund: {
TaskFund taskFund(jsonObj);
rspData = taskFund.doTask();
break;
}
default:
rspData = QString::fromLocal8Bit("{\"msg:\":\"未知的请求类型\"}").toUtf8();
break;
......
......@@ -7,26 +7,30 @@
// 商家信息
//! 绿篮子
#define APP_ID "T013"
#define KEY_CODE "a35e33c8-e6f2-4107-8670-a69a85adf85b"
#define PARTNER_ID "f92b8997-40c7-4622-af3b-512fd49d6113"
//#define APP_ID "T013"
//#define KEY_CODE "a35e33c8-e6f2-4107-8670-a69a85adf85b"
//#define PARTNER_ID "f92b8997-40c7-4622-af3b-512fd49d6113"
////! 一茶一座
//#define APP_ID "T014"
//#define KEY_CODE "a440d553-87d3-4fcd-b59a-5ec9ce7c4157"
//#define PARTNER_ID "df2f90b0-eece-402c-820d-ba8ac56c4687"
//! 加移
#define APP_ID "T019"
#define KEY_CODE "059e15e7-19a6-480f-8b5f-3a082a5b553e"
#define PARTNER_ID "c3e82ff2-6285-4823-8e3f-7ec880ae7119"
// 请求类型的枚举值
enum FM_TYPE {
FM_Set_Store_Info = 1000,
FM_Login = 1001,
FM_Fund = 1002,
FM_Pay = 1003,
FM_Refund = 1004,
FM_Final = 1007,
FM_Coupon = 1009,
FM_Fund,
FM_Order_Revoke,
FM_QR_Pay = 10031,
FM_QR_Refund = 10041,
......@@ -53,7 +57,8 @@ const FMReqUrlMap::value_type FMReqUrlMapPairs[] =
FMReqUrlMap::value_type(FM_Final, "order"),
FMReqUrlMap::value_type(FM_Refund_Pay, "refund"),
FMReqUrlMap::value_type(FM_Refund_Order, "correct"),
FMReqUrlMap::value_type(FM_Coupon, "ordercoupon")
FMReqUrlMap::value_type(FM_Coupon, "ordercoupon"),
FMReqUrlMap::value_type(FM_Fund, "recharge")
};
const FMReqUrlMap ReqUrl(FMReqUrlMapPairs, FMReqUrlMapPairs + (sizeof FMReqUrlMapPairs / sizeof FMReqUrlMapPairs[0]));
#endif
......@@ -76,7 +81,6 @@ struct PP{
FM_Type = "FM_Type";
TransId = "trans_id";
OrderId = "order_id";
fmTransId = "fm_trans_id";
Fm_order_id = "fm_order_id";
Member_sign = "member_sign";
Account = "account";
......@@ -96,7 +100,7 @@ struct PP{
Score = "score";
StatusCode = "statusCode";
StatusCode = "status_code";
Msg = "msg";
Prompt = "prompt";
......@@ -109,16 +113,17 @@ struct PP{
Transaction = "transactions";
OrderAmount = "order_amount";
PaidAmount = "paid_amount";
DisAmount = "dis_amount";
UndisAmount = "undis_amount";
NeedAmount = "need_amount";
StandardAmount = "standard_amount";
Fm_id = "fm_id";
Settlement = "settlement";
Fm_transId = "fm_transId";
Fm_trans_id = "fm_trans_id";
Pro_amount = "pro_amount";
Pay_amount = "pay_amount";
Pay_ids = "pay_ids";
Pay_list = "pay_list";
Pay_id = "pay_id";
Pay_str = "pay_str";
Paid_total_amount= "paid_total_amount";
......@@ -159,7 +164,6 @@ struct PP{
QString FM_Type ;
QString TransId ;
QString OrderId ;
QString fmTransId ;
QString Fm_order_id ;
QString Member_sign ;
QString Account ;
......@@ -194,17 +198,18 @@ struct PP{
QString OrderAmount ;
QString NeedAmount ;
QString PaidAmount ;
QString DisAmount ;
QString UndisAmount ;
QString StandardAmount ;
QString Fm_id ;
QString Settlement ;
QString Fm_transId ;
QString Fm_trans_id ;
QString Pro_amount ;
QString Pay_amount ;
// 支付方式
QString Pay_ids ;
QString Pay_list ;
QString Pay_id ;
QString Pay_str ;
QString Paid_total_amount ;
......@@ -243,6 +248,7 @@ const static PP PosProps;
typedef std::map<QString, QString> PropsMap;
const PropsMap::value_type PropsMapPairs[] =
{
PropsMap::value_type(PosProps.StatusCode, "statusCode"),
PropsMap::value_type(PosProps.Fm_cmd, "reqType"),
PropsMap::value_type(PosProps.Member_sign, "code"),
PropsMap::value_type(PosProps.StoreId, "storeId"),
......@@ -263,11 +269,12 @@ const PropsMap::value_type PropsMapPairs[] =
PropsMap::value_type(PosProps.OrderAmount, "totalAmount"),
PropsMap::value_type(PosProps.Pay_id, "typeModeFlag"),
PropsMap::value_type(PosProps.Pay_amount, "amount"),
PropsMap::value_type(PosProps.Pay_ids, "payList"),
PropsMap::value_type(PosProps.Pay_list, "payList"),
PropsMap::value_type(PosProps.Products, "productList"),
PropsMap::value_type(PosProps.ProductId, "productId"),
PropsMap::value_type(PosProps.ConsumeNum, "consumeNum"),
PropsMap::value_type(PosProps.Price, "price"),
PropsMap::value_type(PosProps.ChargeAmount, "payAmount"),
};
static PropsMap PosToServerProps(PropsMapPairs, PropsMapPairs + (sizeof(PropsMapPairs)/sizeof(PropsMapPairs[0])));
......@@ -328,7 +335,7 @@ enum {
};
// 返回错误信息的json
#define ErrorMsgJson "{\"statusCode\":%1,\"msg\":\"%2\",\"prompt\":0}"
#define ErrorMsgJson "{\"status_code\":%1,\"msg\":\"%2\",\"prompt\":0}"
#define ErrorNeedPayCode "fmv:请使用支付码付款"
typedef std::map<const int, const char*> FMErrorMap;
......
......@@ -117,7 +117,7 @@ bool FMTask::sendToServer(bool isShowMsg)
QByteArray data = json.toJson(QJsonDocument::Compact);
#ifdef FMTEST
url = "http://micro-service.sandload.cn/member-pos/pos/member/" + ReqUrl.at(FM_Type());
url = "http://115.159.124.30:8732/pos/member/" + ReqUrl.at(FM_Type());
#else
url = FMPVipSettings::instance()->getServerUrl() + "/" + ReqUrl.at(FM_Type());
#endif
......
......@@ -111,7 +111,7 @@ void TaskFinal::packageServerReq()
payArray.append(payObj);
}
dataObj[ServerProps(PosProps.Pay_ids)] = payArray;
dataObj[ServerProps(PosProps.Pay_list)] = payArray;
serverReqJsonObj["data"] = dataObj;
......@@ -209,13 +209,14 @@ void TaskFinal::packagePOSRsp()
p.push_back(PosProps.StatusCode);
p.push_back(PosProps.Msg);
p.push_back(PosProps.Fm_order_id);
p.push_back(PosProps.Print1);
p.push_back(PosProps.Print2);
foreach(auto prop , p)
{
posRspJsonObj[prop] = getServerJsonValue(prop);
}
posRspJsonObj[PosProps.Prompt] = 1;
QJsonObject ext;
ext[PosProps.Print] = getServerJsonValue(PosProps.Print1);
posRspJsonObj["ext"] = ext;
if(getServerJsonValue(PosProps.StatusCode).toInt() == FM_API_SUCCESS) {
_order->setSettled(true);
......
#include "taskfund.h"
#include "fmvipfund.h"
#include "tasklogin.h"
#include "items/storeinfo.h"
#include "dbop.h"
TaskFund::TaskFund(QJsonObject &jsonObj, QObject *parent)
:FMTask(jsonObj, FM_Fund, 0, parent)
......@@ -8,15 +10,19 @@ TaskFund::TaskFund(QJsonObject &jsonObj, QObject *parent)
}
QByteArray TaskFund::doTask()
void TaskFund::packagePOSReq()
{
FMItem::StoreInfo storeInfo;
DBOP::GetLastItem(&storeInfo);
posReqJsonObj = storeInfo.toJson(QStringList(), posReqJsonObj);
preTask = new TaskLogin(posReqJsonObj, _session, this);
preTask->session()->addData(PosProps.FM_Type, FM_Fund);
QByteArray loginRst = preTask->doTask();
preTask->doTask();
if(preTask->error() != FM_API_SUCCESS) {
return loginRst;
setError(preTask->error());
}
return FMTask::doTask();
}
void TaskFund::setWindow()
......@@ -30,12 +36,18 @@ void TaskFund::setWindow()
void TaskFund::packageServerReq()
{
serverReqJsonObj[ServerProps(PosProps.TransId)] = getPosJsonValue(PosProps.TransId);
serverReqJsonObj[ServerProps(PosProps.TransId)] = getPosJsonValue(PosProps.OrderId);
QJsonObject trans;
trans[ServerProps(PosProps.Fm_open_id)] = session()->data(PosProps.Fm_open_id).toString();
trans[ServerProps(PosProps.ChargeAmount)] = session()->data(PosProps.ChargeAmount).toInt();
trans[ServerProps(PosProps.CashAmount)] = session()->data(PosProps.ChargeAmount).toInt();
serverReqJsonObj[ServerProps(PosProps.Transaction)] = trans;
QJsonObject payCash;
payCash[ServerProps(PosProps.Amount)] = session()->data(PosProps.ChargeAmount).toInt();
payCash[ServerProps(PosProps.TransId)] = getPosJsonValue(PosProps.OrderId);
payCash[ServerProps(PosProps.Type_code)] = "10001";
QJsonArray payList;
payList.append(payCash);
trans[ServerProps(PosProps.Pay_list)] = payList;
serverReqJsonObj["data"] = trans;
}
void TaskFund::packagePOSRsp()
......@@ -48,12 +60,11 @@ void TaskFund::packagePOSRsp()
foreach (QString prop , p) {
posRspJsonObj[prop] = getServerJsonValue(prop);
}
posRspJsonObj[PosProps.Prompt] = 1;
posRspJsonObj[PosProps.Fm_open_id] = session()->data(PosProps.Fm_open_id).toString();
}
void TaskFund::onFund()
{
sendToServer();
_window->close();
_window->accept();
}
......@@ -8,7 +8,7 @@ class TaskFund : public FMTask
public:
explicit TaskFund(QJsonObject &jsonObj, QObject* parent=0);
QByteArray doTask();
void packagePOSReq();
void setWindow();
void packageServerReq();
void packagePOSRsp();
......
......@@ -39,10 +39,16 @@ void TaskLogin::packagePOSRsp()
p.push_back(PosProps.StatusCode);
p.push_back(PosProps.Msg);
p.push_back(PosProps.Fm_open_id);
p.push_back(PosProps.Amount);
p.push_back(PosProps.Score);
p.push_back(PosProps.Sex);
p.push_back(PosProps.Birthday);
p.push_back(PosProps.Phone);
p.push_back(PosProps.Address);
p.push_back(PosProps.Email);
foreach (QString prop , p) {
posRspJsonObj[prop] = getServerJsonValue(prop);
}
posRspJsonObj[PosProps.Prompt] = 0;
}
void TaskLogin::onLogin()
......
......@@ -170,10 +170,9 @@ void TaskPay::packagePOSRsp()
posRspJsonObj[PosProps.StatusCode] = status;
posRspJsonObj[PosProps.Msg] = getServerJsonValue(PosProps.Msg);
posRspJsonObj[PosProps.Prompt] = 0;
posRspJsonObj[PosProps.Settlement] = 1;
posRspJsonObj[PosProps.Fm_open_id] = fm_open_id;
posRspJsonObj[PosProps.Fm_order_id] = fm_order_id;
posRspJsonObj[PosProps.Fm_trans_id] = fm_order_id;
Order *order = new Order(this);
DBOP::GetOrderByOrderId(orderId, order);
......@@ -226,8 +225,9 @@ void TaskPay::packagePOSRsp()
delete pay;
}
}
posRspJsonObj[PosProps.Paid_total_amount] = totalPaid;
posRspJsonObj[PosProps.Pay_ids] = pay_ids;
posRspJsonObj[PosProps.PaidAmount] = totalPaid;
posRspJsonObj[PosProps.Pay_list] = pay_ids;
posRspJsonObj[PosProps.DisAmount] = 0;
delete order;
}
......
......@@ -12,6 +12,7 @@
TaskRefund::TaskRefund(QJsonObject &jsonObj, Session *session, QObject *parent)
: FMTask(jsonObj, FM_Refund, session, parent)
, _refundAmount(0)
{
}
......@@ -26,7 +27,6 @@ void TaskRefund::packagePOSReq()
QString orderId = getPosJsonValue(PosProps.OrderId).toString();
session()->addData(PosProps.OrderId, orderId);
//! TODO 需要从其他数据库查询营业日、门店信息等。
FMItem::StoreInfo storeInfo;
bool isOk = DBOP::GetLastItem(&storeInfo);
if(isOk) {
......@@ -48,7 +48,9 @@ void TaskRefund::packageServerReq()
void TaskRefund::packagePOSRsp()
{
posRspJsonObj[PosProps.StatusCode] = FM_API_SUCCESS;
posRspJsonObj[PosProps.Msg] = "Success";
posRspJsonObj["refund_amount"] = _refundAmount;
}
void TaskRefund::onRefundPay(int DBID)
......@@ -71,6 +73,7 @@ void TaskRefund::onRefundPay(int DBID)
if(isOk) {
orderPointer->setPaidAmount(orderPointer->paidAmount() - payPointer->refundAmount());
isOk = DBOP::Save(orderPointer.data());
_refundAmount += payPointer->payAmount();
}
qobject_cast<FMVipRefund*>(_window)->refresh();
......@@ -93,6 +96,8 @@ void TaskRefund::onRefundOrder(int DBID)
orderPointer->setPaidAmount(0);
DBOP::Save(orderPointer.data());
qobject_cast<FMVipRefund*>(_window)->refresh();
_refundAmount = orderPointer->paidAmount();
} else {
QString msg = searchJsonValue(rspObj, PosProps.Msg).toString();
FMMsgWnd::FailureWnd(msg, _window);
......
......@@ -18,6 +18,8 @@ private:
private:
void onRefundPay(int DBID);
void onRefundOrder(int DBID);
int _refundAmount;
};
#endif // TASKREFUND_H
......@@ -592,6 +592,11 @@ QPushButton#fund_btn:hover {
</layout>
</widget>
<layoutdefault spacing="6" margin="11"/>
<tabstops>
<tabstop>amount_edit</tabstop>
<tabstop>fund_btn</tabstop>
<tabstop>close_btn</tabstop>
</tabstops>
<resources/>
<connections/>
</ui>
#include <QtTest>
#include <QCoreApplication>
#include <QMessageBox>
#include "fmvipdispatcher.h"
......@@ -52,7 +53,7 @@ void TestPlugin::test_dotask_data()
QTest::newRow("SetStoreInfo_need_posId") << QByteArray("{\"fm_cmd\": 1000,\"store_id\": \"fm9999\",\"pos_id\": \"\",\"business_date\": \"20171016\",\"operator_id\": \"001\"}");
QTest::newRow("SetStoreInfo_notnull_posId") << QByteArray("{\"fm_cmd\": 1000,\"store_id\": \"fm9999\",\"business_date\": \"20171016\",\"operator_id\": \"001\"}");
QTest::newRow("SetStoreInfo_error_type") << QByteArray("{\"fm_cmd\": 1000,\"store_id\": \"fm9999\",\"pos_id\": 1,\"business_date\": \"20171016\",\"operator_id\": \"001\"}");
QTest::newRow("Login") << QByteArray("{\"fm_cmd\": 1001,\"member_sign\": \"12345\"}");
QTest::newRow("Login") << QByteArray("{\"fm_cmd\": 1001}");
QTest::newRow("Pay") << QByteArray("{"
" \"fm_cmd\": 1003,"
" \"order_amount\":9000,"
......@@ -76,6 +77,7 @@ void TestPlugin::test_dotask_data()
" ]"
"}");
QTest::newRow("Order") << QByteArray("{\"fm_cmd\": 1007,\"order_id\": \"20171018001\"}");
QTest::newRow("Fund") << QByteArray("{\"fm_cmd\": 1002,\"order_id\": \"20171018001\"}");
}
void TestPlugin::test_dotask()
......@@ -86,6 +88,8 @@ void TestPlugin::test_dotask()
fmvip.doTask(reqData, rspData);
qDebug() << "RspData: " << rspData.data();
QMessageBox::information(nullptr, "Return to POS", QString(rspData));
}
QTEST_MAIN(TestPlugin)
......
......@@ -5,7 +5,7 @@
#define VER_MINOR 1
#define VER_REVISION 0
#define VER_BUILD 16
#define VER_BUILD 17
//! 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