Commit 5d1e0b74 by NitefullWind

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

parent 0bd7a869
......@@ -62,8 +62,8 @@ RESOURCES += \
win32 {
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 {
system($$PWD/../../fmprc.sh $$PWD/version.h $$ORIGIN_TARGET)
system($$PWD/../../fmprc.sh $$PWD/../version.h $$ORIGIN_TARGET)
}
......@@ -7,14 +7,14 @@
// 商家信息
//! 绿篮子
//#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 "T014"
//#define KEY_CODE "a440d553-87d3-4fcd-b59a-5ec9ce7c4157"
//#define PARTNER_ID "df2f90b0-eece-402c-820d-ba8ac56c4687"
......@@ -242,7 +242,7 @@ const PropsMap::value_type PropsMapPairs[] =
PropsMap::value_type(PosProps.Fm_id, "memberTransId"),
PropsMap::value_type(PosProps.Fm_open_id, "account"),
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_type, "coupon_type"),
PropsMap::value_type(PosProps.Coupon_disAmount, "coupon_discount_amount"),
......@@ -250,7 +250,11 @@ 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.Products, "productList"),
PropsMap::value_type(PosProps.ProductId, "productId"),
PropsMap::value_type(PosProps.ConsumeNum, "consumeNum"),
PropsMap::value_type(PosProps.Price, "price"),
};
static PropsMap PosToServerProps(PropsMapPairs, PropsMapPairs + (sizeof(PropsMapPairs)/sizeof(PropsMapPairs[0])));
......
#include "item.h"
#include "item.h"
#include "global.h"
#include <QMetaProperty>
#include <QJsonArray>
......
#ifndef ITEM_H
#ifndef ITEM_H
#define ITEM_H
#include <QObject>
......
......@@ -4,6 +4,9 @@
#include "fmp_logger_i.h"
#include "fmmsgwnd.h"
#include "fmp_vip_settings.h"
#include "dbop.h"
#include "items/order.h"
#include "items/pay.h"
#include <QDateTime>
#include <QJsonDocument>
#include <QJsonArray>
......@@ -11,90 +14,158 @@
TaskFinal::TaskFinal(QJsonObject &jsonObj, Session *session, QObject *parent)
:FMTaskNoWnd(jsonObj, FM_Final, session, parent)
,_order(new FMItem::Order(this))
,isUseVipPay(false)
{
}
TaskFinal::~TaskFinal()
{
delete _order;
}
void TaskFinal::packageServerReq()
{
isUseVipPay = false;
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);
foreach(auto prop , p) {
transData[ServerProps(prop)] = getPosJsonValue(prop);
QString transId = getPosJsonValue(PosProps.TransId).toString();
DBOP::GetOrderByTransId(transId, _order);
QStringList keys;
keys << PosProps.OperatorId << PosProps.PosId << PosProps.StoreId;
QMap<QString,QString> key2proMap;
foreach (QString key, keys) {
key2proMap[ServerProps(key)] = key;
}
serverReqJsonObj = _order->toJson(key2proMap, serverReqJsonObj);
// 产品列表
QJsonArray products;
foreach(auto p , getPosJsonValue("products").toArray())
{
QJsonObject product;
product[ServerProps(PosProps.ConsumeNum)] = p.toObject()[PosProps.ConsumeNum];
int price = p.toObject()["price"].toInt();
product["price"] = price;
product["productId"] = p.toObject()["pid"];
products.append(product);
QJsonObject dataObj;
keys.clear();
keys << PosProps.Fm_open_id << PosProps.OrderAmount << PosProps.PaidAmount << PosProps.Fm_id << PosProps.BussinessDate << PosProps.TransId;
key2proMap.clear();
foreach (QString key, keys) {
key2proMap[ServerProps(key)] = key;
}
transData["productList"] = products;
int orderAmount = getPosJsonValue(PosProps.OrderAmount).toInt();
int paidAmount = getPosJsonValue(PosProps.PaidAmount).toInt();
QJsonArray payList;
// QString fmId = getPosJsonValue(PosProps.Fm_id).toString();
// QByteArray orderContent = FMBackup::instance()->getOrderByFmId(fmId);
// QJsonObject orderObject = QJsonDocument::fromJson(orderContent).object();
// QJsonArray payArray = searchJsonValue(orderObject, "payList").toArray();
// foreach (auto pay_v, payArray) {
// QJsonObject pay_ob = pay_v.toObject();
// if(pay_ob["typeModeFlag"].toString() == "20003") {
// payList.append(pay_ob);
// isUseVipPay = true;
// int pay_amount = pay_ob["amount"].toInt();
// orderAmount += pay_amount;
// paidAmount += pay_amount;
dataObj = _order->toJson(key2proMap, dataObj);
// Products
QString productText = _order->productText();
QStringList proKeys;
proKeys << PosProps.ConsumeNum << PosProps.ProductId << PosProps.Price;
foreach (const QString &proKey, proKeys) {
productText = productText.replace(proKey, ServerProps(proKey));
dataObj[ServerProps(PosProps.PaidAmount)] = _order->orderAmount();
}
QJsonArray proArray = QJsonDocument::fromJson(_order->productText().toUtf8()).array();
dataObj[ServerProps(PosProps.Products)] = proArray;
// QJsonArray proArray = QJsonDocument::fromJson(_order->productText().toUtf8()).array();
// foreach (QJsonValue proValue, proArray) {
// QJsonObject proObj;
// QStringList proKeys;
// proKeys << PosProps.ConsumeNum << PosProps.ProductId << PosProps.Price;
// 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())
{
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();
// Pays
QJsonArray payArray;
QList<QSharedPointer<FMItem::Pay> > payList = DBOP::GetPaysByOrderId(_order->DBID());
if(_order->orderAmount() > _order->paidAmount()) {
QSharedPointer<FMItem::Pay> cashPay(new FMItem::Pay());
cashPay->setPayId("0101");
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") {
//现金支付
pay["typeModeFlag"] = "20005";
payObj["typeModeFlag"] = "20005";
} else if (typeModeFlag == "0103") {
payObj["typeModeFlag"] = "20010";
} else if(typeModeFlag == "0301") {
pay["typeModeFlag"] = "10011";
payObj["typeModeFlag"] = "10011";
} else if(typeModeFlag == "0302") {
pay["typeModeFlag"] = "10011";
payObj["typeModeFlag"] = "10011";
} else if(typeModeFlag == "0303") {
pay["typeModeFlag"] = "10011";
payObj["typeModeFlag"] = "10011";
} else {
pay["typeModeFlag"] = typeModeFlag;
}
if(typeModeFlag.compare("20001")==0 || typeModeFlag.compare("20002")==0 || typeModeFlag.compare("20003")==0) {
isUseVipPay = true;
payObj["typeModeFlag"] = typeModeFlag;
}
payList.append(pay);
payArray.append(payObj);
}
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;
serverReqJsonObj["data"] = transData;
// if (transData[ServerProps(PosProps.PaidAmount)].toInt() == 0) {
// 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)
......
......@@ -2,11 +2,16 @@
#define TASKFINAL_H
#include "fmtasknownd.h"
namespace FMItem {
class Order;
}
class TaskFinal : public FMTaskNoWnd
{
Q_OBJECT
public:
explicit TaskFinal(QJsonObject &jsonObj, Session *session = 0, QObject *parent = 0);
~TaskFinal();
void packageServerReq();
bool sendToServer(bool isShowMsg = true);
......@@ -14,6 +19,8 @@ public:
private:
QString backup();
FMItem::Order *_order;
bool isUseVipPay;
};
......
......@@ -29,8 +29,6 @@ void TaskCoupon::packageServerReq()
void TaskCoupon::packagePOSRsp()
{
int canDisAmount = session()->data(PosProps.OrderAmount).toInt() - session()->data(PosProps.PaidAmount).toInt() - session()->data(PosProps.UndisAmount).toInt();
QMap<QString, QVariant> couponMap;
foreach (auto value, getServerJsonValue(PosProps.CouponList).toArray())
{
......
......@@ -4,11 +4,15 @@
#include "fmp_logger_i.h"
#include "fmp_vip_settings.h"
#include "fmnetwork.h"
#include "fmbackup.h"
#include "dbop.h"
#include "items/order.h"
#include "items/pay.h"
#include <QJsonDocument>
#include <QJsonObject>
#include <QCryptographicHash>
using namespace FMItem;
TaskPay::TaskPay(QJsonObject &jsonObj, Session *session, QObject *parent)
:FMTask(jsonObj, FM_Pay, session, parent)
{
......@@ -153,13 +157,28 @@ void TaskPay::packageServerReq()
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.Prompt] = 0;
posRspJsonObj[PosProps.Settlement] = 1;
posRspJsonObj[PosProps.Fm_open_id] = session()->data(PosProps.Fm_open_id).toString();
posRspJsonObj[PosProps.Fm_id] = getServerJsonValue(PosProps.Fm_id).toString();
posRspJsonObj[PosProps.Fm_transId] = getServerJsonValue(PosProps.TransId).toString();
posRspJsonObj[PosProps.Fm_open_id] = fm_open_id;
posRspJsonObj[PosProps.Fm_id] = fmId;
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();
//支付方式描述
......@@ -176,29 +195,32 @@ void TaskPay::packagePOSRsp()
for(int i = 0; i < servPayArray.size(); i++)
{
QJsonObject pay_id;
QString payId = servPayArray[i].toObject()[ServerProps(PosProps.Pay_id)].toString();
if(payId == "20003") {
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;
int amount = servPayArray[i].toObject()[ServerProps(PosProps.Pay_amount)].toInt();
pay_id[PosProps.Pay_id] = servPayArray[i].toObject()[ServerProps(PosProps.Pay_id)].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);
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.Pay_ids] = pay_ids;
// if(getServerJsonValue(PosProps.StatusCode) == FM_API_SUCCESS)
// {
// QJsonDocument json(serverRspJsonObj);
// QByteArray orderContent = json.toJson(QJsonDocument::Compact);
// FMBackup::instance()->insertNewOrder(getServerJsonValue(PosProps.Fm_id).toString(), orderContent);
// }
delete order;
}
void TaskPay::onPay()
......
#ifndef TASKPAY_H
#ifndef TASKPAY_H
#define TASKPAY_H
#include "fmtask.h"
#include "taskothers.h"
......
......@@ -51,7 +51,7 @@ QString FMVipLogin::getVersionInfo()
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);
......
......@@ -5,7 +5,7 @@
#define VER_MINOR 1
#define VER_REVISION 0
#define VER_BUILD 11
#define VER_BUILD 12
//! 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