Commit 5d1e0b74 by NitefullWind

1. 实现支付和结算时存取订单和支付信息。

parent 0bd7a869
...@@ -62,8 +62,8 @@ RESOURCES += \ ...@@ -62,8 +62,8 @@ RESOURCES += \
win32 { win32 {
RC_FILE += $$PWD/../res/$${ORIGIN_TARGET}.rc RC_FILE += $$PWD/../res/$${ORIGIN_TARGET}.rc
system($$PWD/../../fmprc.bat $$PWD/version.h $$ORIGIN_TARGET) system($$PWD/../../fmprc.bat $$PWD/../version.h $$ORIGIN_TARGET)
} }
else { else {
system($$PWD/../../fmprc.sh $$PWD/version.h $$ORIGIN_TARGET) system($$PWD/../../fmprc.sh $$PWD/../version.h $$ORIGIN_TARGET)
} }
...@@ -7,14 +7,14 @@ ...@@ -7,14 +7,14 @@
// 商家信息 // 商家信息
//! 绿篮子 //! 绿篮子
//#define APP_ID "T013" #define APP_ID "T013"
//#define KEY_CODE "a35e33c8-e6f2-4107-8670-a69a85adf85b" #define KEY_CODE "a35e33c8-e6f2-4107-8670-a69a85adf85b"
//#define PARTNER_ID "f92b8997-40c7-4622-af3b-512fd49d6113" #define PARTNER_ID "f92b8997-40c7-4622-af3b-512fd49d6113"
////! 一茶一座 ////! 一茶一座
#define APP_ID "T014" //#define APP_ID "T014"
#define KEY_CODE "a440d553-87d3-4fcd-b59a-5ec9ce7c4157" //#define KEY_CODE "a440d553-87d3-4fcd-b59a-5ec9ce7c4157"
#define PARTNER_ID "df2f90b0-eece-402c-820d-ba8ac56c4687" //#define PARTNER_ID "df2f90b0-eece-402c-820d-ba8ac56c4687"
...@@ -242,7 +242,7 @@ const PropsMap::value_type PropsMapPairs[] = ...@@ -242,7 +242,7 @@ const PropsMap::value_type PropsMapPairs[] =
PropsMap::value_type(PosProps.Fm_id, "memberTransId"), PropsMap::value_type(PosProps.Fm_id, "memberTransId"),
PropsMap::value_type(PosProps.Fm_open_id, "account"), PropsMap::value_type(PosProps.Fm_open_id, "account"),
PropsMap::value_type(PosProps.Account, "memberNo"), PropsMap::value_type(PosProps.Account, "memberNo"),
PropsMap::value_type(PosProps.CouponList, "data"), PropsMap::value_type(PosProps.CouponList, "coupon_list"),
PropsMap::value_type(PosProps.Coupon_code, "coupon_code"), PropsMap::value_type(PosProps.Coupon_code, "coupon_code"),
PropsMap::value_type(PosProps.Coupon_type, "coupon_type"), PropsMap::value_type(PosProps.Coupon_type, "coupon_type"),
PropsMap::value_type(PosProps.Coupon_disAmount, "coupon_discount_amount"), PropsMap::value_type(PosProps.Coupon_disAmount, "coupon_discount_amount"),
...@@ -250,7 +250,11 @@ const PropsMap::value_type PropsMapPairs[] = ...@@ -250,7 +250,11 @@ const PropsMap::value_type PropsMapPairs[] =
PropsMap::value_type(PosProps.OrderAmount, "totalAmount"), PropsMap::value_type(PosProps.OrderAmount, "totalAmount"),
PropsMap::value_type(PosProps.Pay_id, "typeModeFlag"), PropsMap::value_type(PosProps.Pay_id, "typeModeFlag"),
PropsMap::value_type(PosProps.Pay_amount, "amount"), PropsMap::value_type(PosProps.Pay_amount, "amount"),
PropsMap::value_type(PosProps.Pay_ids, "payList"),
PropsMap::value_type(PosProps.Products, "productList"),
PropsMap::value_type(PosProps.ProductId, "productId"),
PropsMap::value_type(PosProps.ConsumeNum, "consumeNum"), PropsMap::value_type(PosProps.ConsumeNum, "consumeNum"),
PropsMap::value_type(PosProps.Price, "price"),
}; };
static PropsMap PosToServerProps(PropsMapPairs, PropsMapPairs + (sizeof(PropsMapPairs)/sizeof(PropsMapPairs[0]))); static PropsMap PosToServerProps(PropsMapPairs, PropsMapPairs + (sizeof(PropsMapPairs)/sizeof(PropsMapPairs[0])));
......
#include "item.h" #include "item.h"
#include "global.h" #include "global.h"
#include <QMetaProperty> #include <QMetaProperty>
#include <QJsonArray> #include <QJsonArray>
......
#ifndef ITEM_H #ifndef ITEM_H
#define ITEM_H #define ITEM_H
#include <QObject> #include <QObject>
......
...@@ -4,6 +4,9 @@ ...@@ -4,6 +4,9 @@
#include "fmp_logger_i.h" #include "fmp_logger_i.h"
#include "fmmsgwnd.h" #include "fmmsgwnd.h"
#include "fmp_vip_settings.h" #include "fmp_vip_settings.h"
#include "dbop.h"
#include "items/order.h"
#include "items/pay.h"
#include <QDateTime> #include <QDateTime>
#include <QJsonDocument> #include <QJsonDocument>
#include <QJsonArray> #include <QJsonArray>
...@@ -11,90 +14,158 @@ ...@@ -11,90 +14,158 @@
TaskFinal::TaskFinal(QJsonObject &jsonObj, Session *session, QObject *parent) TaskFinal::TaskFinal(QJsonObject &jsonObj, Session *session, QObject *parent)
:FMTaskNoWnd(jsonObj, FM_Final, session, parent) :FMTaskNoWnd(jsonObj, FM_Final, session, parent)
,_order(new FMItem::Order(this))
,isUseVipPay(false)
{ {
} }
TaskFinal::~TaskFinal()
{
delete _order;
}
void TaskFinal::packageServerReq() void TaskFinal::packageServerReq()
{ {
isUseVipPay = false; QString transId = getPosJsonValue(PosProps.TransId).toString();
QJsonObject transData; DBOP::GetOrderByTransId(transId, _order);
std::vector<QString> p;
p.push_back(PosProps.BussinessDate); QStringList keys;
p.push_back(PosProps.TransId); keys << PosProps.OperatorId << PosProps.PosId << PosProps.StoreId;
p.push_back(PosProps.Fm_id); QMap<QString,QString> key2proMap;
p.push_back(PosProps.Fm_open_id); foreach (QString key, keys) {
foreach(auto prop , p) { key2proMap[ServerProps(key)] = key;
transData[ServerProps(prop)] = getPosJsonValue(prop);
} }
serverReqJsonObj = _order->toJson(key2proMap, serverReqJsonObj);
// 产品列表 QJsonObject dataObj;
QJsonArray products; keys.clear();
foreach(auto p , getPosJsonValue("products").toArray()) keys << PosProps.Fm_open_id << PosProps.OrderAmount << PosProps.PaidAmount << PosProps.Fm_id << PosProps.BussinessDate << PosProps.TransId;
{ key2proMap.clear();
QJsonObject product; foreach (QString key, keys) {
product[ServerProps(PosProps.ConsumeNum)] = p.toObject()[PosProps.ConsumeNum]; key2proMap[ServerProps(key)] = key;
int price = p.toObject()["price"].toInt();
product["price"] = price;
product["productId"] = p.toObject()["pid"];
products.append(product);
} }
transData["productList"] = products; dataObj = _order->toJson(key2proMap, dataObj);
int orderAmount = getPosJsonValue(PosProps.OrderAmount).toInt(); // Products
int paidAmount = getPosJsonValue(PosProps.PaidAmount).toInt(); QString productText = _order->productText();
QStringList proKeys;
QJsonArray payList; proKeys << PosProps.ConsumeNum << PosProps.ProductId << PosProps.Price;
foreach (const QString &proKey, proKeys) {
// QString fmId = getPosJsonValue(PosProps.Fm_id).toString(); productText = productText.replace(proKey, ServerProps(proKey));
// QByteArray orderContent = FMBackup::instance()->getOrderByFmId(fmId); dataObj[ServerProps(PosProps.PaidAmount)] = _order->orderAmount();
// QJsonObject orderObject = QJsonDocument::fromJson(orderContent).object(); }
// QJsonArray payArray = searchJsonValue(orderObject, "payList").toArray(); QJsonArray proArray = QJsonDocument::fromJson(_order->productText().toUtf8()).array();
// foreach (auto pay_v, payArray) { dataObj[ServerProps(PosProps.Products)] = proArray;
// QJsonObject pay_ob = pay_v.toObject();
// if(pay_ob["typeModeFlag"].toString() == "20003") { // QJsonArray proArray = QJsonDocument::fromJson(_order->productText().toUtf8()).array();
// payList.append(pay_ob); // foreach (QJsonValue proValue, proArray) {
// isUseVipPay = true; // QJsonObject proObj;
// int pay_amount = pay_ob["amount"].toInt(); // QStringList proKeys;
// orderAmount += pay_amount; // proKeys << PosProps.ConsumeNum << PosProps.ProductId << PosProps.Price;
// paidAmount += pay_amount; // foreach (const QString &proKey, proKeys) {
// proObj[ServerProps(proKey)] = proValue.toObject()[proKey];
// } // }
// } // }
transData[ServerProps(PosProps.OrderAmount)] = orderAmount;
transData[ServerProps(PosProps.PaidAmount)] = paidAmount;
foreach(auto p, getPosJsonValue(PosProps.Pay_ids).toArray()) // Pays
{ QJsonArray payArray;
QJsonObject pay; QList<QSharedPointer<FMItem::Pay> > payList = DBOP::GetPaysByOrderId(_order->DBID());
pay["amount"] = p.toObject()["pay_amount"];
pay["thirdPayTransId"] = p.toObject()["pay_transId"].toString(); if(_order->orderAmount() > _order->paidAmount()) {
pay["code"] = p.toObject()["code"].toString(); QSharedPointer<FMItem::Pay> cashPay(new FMItem::Pay());
pay[ServerProps(PosProps.TransId)] = getPosJsonValue(PosProps.TransId); cashPay->setPayId("0101");
QString typeModeFlag = p.toObject()["pay_id"].toString(); cashPay->setPayAmount(_order->orderAmount() - _order->paidAmount());
cashPay->setTransId(_order->transId());
payList.append(cashPay);
}
for (QList<QSharedPointer<FMItem::Pay> >::const_iterator it = payList.constBegin(); it!=payList.constEnd(); it++) {
QJsonObject payObj;
payObj[ServerProps(PosProps.Amount)] = it->data()->payAmount();
payObj[ServerProps(PosProps.TransId)] = it->data()->transId();
payObj["thirdPayTransId"] = it->data()->payTransId();
QString typeModeFlag = it->data()->payId();
if(typeModeFlag == "0101") { if(typeModeFlag == "0101") {
//现金支付 //现金支付
pay["typeModeFlag"] = "20005"; payObj["typeModeFlag"] = "20005";
} else if (typeModeFlag == "0103") {
payObj["typeModeFlag"] = "20010";
} else if(typeModeFlag == "0301") { } else if(typeModeFlag == "0301") {
pay["typeModeFlag"] = "10011"; payObj["typeModeFlag"] = "10011";
} else if(typeModeFlag == "0302") { } else if(typeModeFlag == "0302") {
pay["typeModeFlag"] = "10011"; payObj["typeModeFlag"] = "10011";
} else if(typeModeFlag == "0303") { } else if(typeModeFlag == "0303") {
pay["typeModeFlag"] = "10011"; payObj["typeModeFlag"] = "10011";
} else { } else {
pay["typeModeFlag"] = typeModeFlag; payObj["typeModeFlag"] = typeModeFlag;
}
if(typeModeFlag.compare("20001")==0 || typeModeFlag.compare("20002")==0 || typeModeFlag.compare("20003")==0) {
isUseVipPay = true;
} }
payArray.append(payObj);
payList.append(pay);
} }
dataObj[ServerProps(PosProps.Pay_ids)] = payArray;
serverReqJsonObj["data"] = dataObj;
// QJsonObject transData;
// std::vector<QString> p;
// p.push_back(PosProps.BussinessDate);
// p.push_back(PosProps.TransId);
// p.push_back(PosProps.Fm_id);
// p.push_back(PosProps.Fm_open_id);
// p.push_back(PosProps.OrderAmount);
// p.push_back(PosProps.PaidAmount);
// foreach(auto prop , p) {
// transData[ServerProps(prop)] = getPosJsonValue(prop);
// }
transData["payList"] = payList; // if (transData[ServerProps(PosProps.PaidAmount)].toInt() == 0) {
serverReqJsonObj["data"] = transData; // transData[ServerProps(PosProps.PaidAmount)] = transData[ServerProps(PosProps.OrderAmount)];
// }
// // 产品列表
// QJsonArray products;
// foreach(auto p , getPosJsonValue("products").toArray())
// {
// QJsonObject product;
// product["consumNum"] = p.toObject()["consume_num"];
// int price = p.toObject()["price"].toDouble()*100;
// product["price"] = price;
// product["productId"] = p.toObject()["pid"];
// products.append(product);
// }
// transData["productList"] = products;
// QJsonArray payList;
// foreach(auto p, getPosJsonValue(PosProps.Pay_ids).toArray())
// {
// QJsonObject pay;
// pay["amount"] = p.toObject()["pay_amount"];
// pay["thirdPayTransId"] = p.toObject()["pay_transId"].toString();
// pay["code"] = p.toObject()["code"].toString();
// pay[ServerProps(PosProps.TransId)] = getPosJsonValue(PosProps.TransId);
// QString typeModeFlag = p.toObject()["pay_id"].toString();
// if(typeModeFlag == "0101") {
// //现金支付
// pay["typeModeFlag"] = "20005";
// } else if (typeModeFlag == "0103") {
// pay["typeModeFlag"] = "20010";
// } else if(typeModeFlag == "0301") {
// pay["typeModeFlag"] = "10011";
// } else if(typeModeFlag == "0302") {
// pay["typeModeFlag"] = "10011";
// } else if(typeModeFlag == "0303") {
// pay["typeModeFlag"] = "10011";
// } else {
// pay["typeModeFlag"] = typeModeFlag;
// }
// payList.append(pay);
// }
// transData["payList"] = payList;
// serverReqJsonObj["data"] = transData;
} }
bool TaskFinal::sendToServer(bool isShowMsg) bool TaskFinal::sendToServer(bool isShowMsg)
......
...@@ -2,11 +2,16 @@ ...@@ -2,11 +2,16 @@
#define TASKFINAL_H #define TASKFINAL_H
#include "fmtasknownd.h" #include "fmtasknownd.h"
namespace FMItem {
class Order;
}
class TaskFinal : public FMTaskNoWnd class TaskFinal : public FMTaskNoWnd
{ {
Q_OBJECT Q_OBJECT
public: public:
explicit TaskFinal(QJsonObject &jsonObj, Session *session = 0, QObject *parent = 0); explicit TaskFinal(QJsonObject &jsonObj, Session *session = 0, QObject *parent = 0);
~TaskFinal();
void packageServerReq(); void packageServerReq();
bool sendToServer(bool isShowMsg = true); bool sendToServer(bool isShowMsg = true);
...@@ -14,6 +19,8 @@ public: ...@@ -14,6 +19,8 @@ public:
private: private:
QString backup(); QString backup();
FMItem::Order *_order;
bool isUseVipPay; bool isUseVipPay;
}; };
......
...@@ -29,8 +29,6 @@ void TaskCoupon::packageServerReq() ...@@ -29,8 +29,6 @@ void TaskCoupon::packageServerReq()
void TaskCoupon::packagePOSRsp() void TaskCoupon::packagePOSRsp()
{ {
int canDisAmount = session()->data(PosProps.OrderAmount).toInt() - session()->data(PosProps.PaidAmount).toInt() - session()->data(PosProps.UndisAmount).toInt();
QMap<QString, QVariant> couponMap; QMap<QString, QVariant> couponMap;
foreach (auto value, getServerJsonValue(PosProps.CouponList).toArray()) foreach (auto value, getServerJsonValue(PosProps.CouponList).toArray())
{ {
......
...@@ -4,11 +4,15 @@ ...@@ -4,11 +4,15 @@
#include "fmp_logger_i.h" #include "fmp_logger_i.h"
#include "fmp_vip_settings.h" #include "fmp_vip_settings.h"
#include "fmnetwork.h" #include "fmnetwork.h"
#include "fmbackup.h" #include "dbop.h"
#include "items/order.h"
#include "items/pay.h"
#include <QJsonDocument> #include <QJsonDocument>
#include <QJsonObject> #include <QJsonObject>
#include <QCryptographicHash> #include <QCryptographicHash>
using namespace FMItem;
TaskPay::TaskPay(QJsonObject &jsonObj, Session *session, QObject *parent) TaskPay::TaskPay(QJsonObject &jsonObj, Session *session, QObject *parent)
:FMTask(jsonObj, FM_Pay, session, parent) :FMTask(jsonObj, FM_Pay, session, parent)
{ {
...@@ -153,13 +157,28 @@ void TaskPay::packageServerReq() ...@@ -153,13 +157,28 @@ void TaskPay::packageServerReq()
void TaskPay::packagePOSRsp() void TaskPay::packagePOSRsp()
{ {
posRspJsonObj[PosProps.StatusCode] = getServerJsonValue(PosProps.StatusCode); int status = getServerJsonValue(PosProps.StatusCode).toInt();
QString transId = getPosJsonValue(PosProps.TransId).toString();
QString fmId = getServerJsonValue(PosProps.Fm_id).toString();
QString fm_open_id = session()->data(PosProps.Fm_open_id).toString();
bool isOk = (status == FM_API_SUCCESS);
posRspJsonObj[PosProps.StatusCode] = status;
posRspJsonObj[PosProps.Msg] = getServerJsonValue(PosProps.Msg); posRspJsonObj[PosProps.Msg] = getServerJsonValue(PosProps.Msg);
posRspJsonObj[PosProps.Prompt] = 0; posRspJsonObj[PosProps.Prompt] = 0;
posRspJsonObj[PosProps.Settlement] = 1; posRspJsonObj[PosProps.Settlement] = 1;
posRspJsonObj[PosProps.Fm_open_id] = session()->data(PosProps.Fm_open_id).toString(); posRspJsonObj[PosProps.Fm_open_id] = fm_open_id;
posRspJsonObj[PosProps.Fm_id] = getServerJsonValue(PosProps.Fm_id).toString(); posRspJsonObj[PosProps.Fm_id] = fmId;
posRspJsonObj[PosProps.Fm_transId] = getServerJsonValue(PosProps.TransId).toString();
Order *order = new Order(this);
DBOP::GetOrderByTransId(transId, order);
// 如果订单是新的,则保存在数据库中
if(isOk && order->isNew()) {
order->SetPropertiesByJson(posReqJsonObj);
order->SetPropertiesByJson(posRspJsonObj);
isOk = DBOP::Save(order);
}
QJsonArray servPayArray = getServerJsonValue("payList").toArray(); QJsonArray servPayArray = getServerJsonValue("payList").toArray();
//支付方式描述 //支付方式描述
...@@ -176,29 +195,32 @@ void TaskPay::packagePOSRsp() ...@@ -176,29 +195,32 @@ void TaskPay::packagePOSRsp()
for(int i = 0; i < servPayArray.size(); i++) for(int i = 0; i < servPayArray.size(); i++)
{ {
QJsonObject pay_id; QJsonObject pay_id;
QString payId = servPayArray[i].toObject()[ServerProps(PosProps.Pay_id)].toString(); int amount = servPayArray[i].toObject()[ServerProps(PosProps.Pay_amount)].toInt();
if(payId == "20003") { pay_id[PosProps.Pay_id] = servPayArray[i].toObject()[ServerProps(PosProps.Pay_id)].toString();
pay_id[PosProps.Pay_amount] = 0;
pay_id["merchant_discount"] = servPayArray[i].toObject()[ServerProps(PosProps.Pay_amount)].toInt();
} else {
pay_id[PosProps.Pay_amount] = servPayArray[i].toObject()[ServerProps(PosProps.Pay_amount)].toInt();
}
pay_id[PosProps.Pay_id] = payId;
pay_id[PosProps.Pay_str] = description[servPayArray[i].toObject()["typeModeFlag"].toString()]; pay_id[PosProps.Pay_str] = description[servPayArray[i].toObject()["typeModeFlag"].toString()];
pay_id[PosProps.Coupon_code] = servPayArray[i].toObject()["code"].toString(); pay_id[PosProps.Pay_amount] = amount;
pay_id[PosProps.Coupon_code] = servPayArray[i].toObject()[ServerProps(PosProps.Coupon_code)].toString();
pay_ids.push_back(pay_id); pay_ids.push_back(pay_id);
totalPaid += pay_id[PosProps.Pay_amount].toInt(); totalPaid += pay_id[PosProps.Pay_amount].toInt();
if(isOk && amount!=0) {
Pay *pay = new Pay(this);
pay->SetPropertiesByJson(pay_id);
pay->setTransId(transId);
pay->setOrderId(order->DBID());
pay->setAccount(fm_open_id);
pay->setPayTransId(fmId);
DBOP::Save(pay);
order->setPaidAmount(order->paidAmount()+amount);
DBOP::Save(order);
delete pay;
}
} }
posRspJsonObj[PosProps.Paid_total_amount] = totalPaid; posRspJsonObj[PosProps.Paid_total_amount] = totalPaid;
posRspJsonObj[PosProps.Pay_ids] = pay_ids; posRspJsonObj[PosProps.Pay_ids] = pay_ids;
// if(getServerJsonValue(PosProps.StatusCode) == FM_API_SUCCESS) delete order;
// {
// QJsonDocument json(serverRspJsonObj);
// QByteArray orderContent = json.toJson(QJsonDocument::Compact);
// FMBackup::instance()->insertNewOrder(getServerJsonValue(PosProps.Fm_id).toString(), orderContent);
// }
} }
void TaskPay::onPay() void TaskPay::onPay()
......
#ifndef TASKPAY_H #ifndef TASKPAY_H
#define TASKPAY_H #define TASKPAY_H
#include "fmtask.h" #include "fmtask.h"
#include "taskothers.h" #include "taskothers.h"
......
...@@ -51,7 +51,7 @@ QString FMVipLogin::getVersionInfo() ...@@ -51,7 +51,7 @@ QString FMVipLogin::getVersionInfo()
void FMVipLogin::on_login_btn_clicked() void FMVipLogin::on_login_btn_clicked()
{ {
QString id = ui->login_edit->text(); QString id = ui->login_edit->text().trimmed();
_session->addData(PosProps.Member_sign, id); _session->addData(PosProps.Member_sign, id);
......
...@@ -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 11 #define VER_BUILD 12
//! 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