Commit 81769bfc by NitefullWind

1. 修改非码支付退款等。

parent 62e0fa72
......@@ -3,8 +3,8 @@
#include <string>
#include <memory> // std::auto_ptr
#include <cstdlib> // std::exit
#include <iostream>
//#include <cstdlib> // std::exit
//#include <iostream>
#include <fstream>
#include <odb/database.hxx>
......
......@@ -359,5 +359,14 @@ void StoreInfo::setId(unsigned long id)
_id = id;
}
bool StoreInfo::isEqual(const StoreInfo &other)
{
bool isOk = ((this->storeId()==other.storeId())&&
(this->posId()==other.posId())&&
(this->businessDate()==other.businessDate())&&
(this->operatorId()==other.operatorId()));
return isOk;
}
}
......@@ -202,6 +202,8 @@ public:
unsigned long id() const;
void setId(unsigned long id);
bool isEqual(const StoreInfo &other);
private:
friend class odb::access;
......
#include "taskfund.h"
#include "fmvipfund.h"
#include "tasklogin.h"
//#include "items/storeinfo.h"
//#include "dbop.h"
#include "database.h"
using namespace DB;
TaskFund::TaskFund(QJsonObject &jsonObj, QObject *parent)
:FMTask(jsonObj, FM_Fund, 0, parent)
......@@ -12,23 +13,25 @@ TaskFund::TaskFund(QJsonObject &jsonObj, QObject *parent)
void TaskFund::packagePOSReq()
{
// FMItem::StoreInfo storeInfo;
// bool isOk = DBOP::GetLastItem(&storeInfo);
// if(!isOk) {
// QString info = QString::fromLocal8Bit("未设置门店信息,不能进行充值.");
// FMP_WARN() << info;
// setError(FM_API_ERROR, info);
// return;
// }
// posReqJsonObj = storeInfo.toJson(QStringList(), posReqJsonObj);
QSharedPointer<StoreInfo> storeInfo = GetLastStoreInfo();
if(storeInfo == nullptr) {
QString info = QString::fromLocal8Bit("未设置门店信息,不能进行充值.");
setError(FM_API_ERROR, info);
return;
}
posReqJsonObj[PosProps.StoreId] = storeInfo->storeId();
posReqJsonObj[PosProps.PosId] = storeInfo->posId();
posReqJsonObj[PosProps.BusinessDate] = storeInfo->businessDate();
posReqJsonObj[PosProps.OperatorId] = storeInfo->operatorId();
// preTask = new TaskLogin(posReqJsonObj, _session, this);
// preTask->session()->addData(PosProps.FM_Type, FM_Fund);
// preTask->doTask();
// if(preTask->error() != FM_API_SUCCESS) {
// this->setError(preTask->error(), preTask->errorString());
// }
preTask = new TaskLogin(posReqJsonObj, _session, this);
preTask->session()->addData(PosProps.FM_Type, FM_Fund);
preTask->doTask();
if(preTask->error() != FM_API_SUCCESS) {
this->setError(preTask->error(), preTask->errorString());
}
}
void TaskFund::setWindow()
......
#include "taskqrpay.h"
//#include "items/order.h"
//#include "items/pay.h"
//#include "items/storeinfo.h"
//#include "dbop.h"
#include "database.h"
#include <QJsonDocument>
#undef StartService
using namespace DB;
TaskQRPay::TaskQRPay(QJsonObject &jsonObj, FMPePayInterface *epay, Session *session, QObject *parent)
:FMTaskSimple(jsonObj, FM_QR_Pay, session, parent) ,
_epay(epay)
......@@ -14,55 +15,92 @@ TaskQRPay::TaskQRPay(QJsonObject &jsonObj, FMPePayInterface *epay, Session *sess
void TaskQRPay::packagePOSReq()
{
// //! WARNING: 现在接口支付传来的POS订单号是transId
// QString orderId = getPosJsonValue(PosProps.TransId).toString();
// FMItem::Order *order = new FMItem::Order();
// DBOP::GetOrderByOrderId(orderId, order);
// if(order->settled()) {
// QString info = QString::fromLocal8Bit("订单已结算,不能再进行支付.");
// FMP_WARN() << info;
// setError(FM_API_ERROR, info);
// return;
// }
// if(order->isNew()) {
// order->SetPropertiesByJson(posReqJsonObj);
// order->setOrderId(orderId);
// DBOP::Save(order);
// }
// QByteArray reqData = QJsonDocument(posReqJsonObj).toJson(QJsonDocument::Compact);
// _epay->DockPayRequest(reqData);
// _epay->StartService();
// QByteArray rspData = _epay->DockPayRespond();
// _epay->StopService();
// QJsonDocument json = QJsonDocument::fromJson(rspData);
// posRspJsonObj = json.object();
// if(posRspJsonObj["statusCode"] == FM_API_SUCCESS) {
// QJsonArray payIds = posRspJsonObj["pay_ids"].toArray();
// foreach (QJsonValue payValue, payIds) {
// QJsonObject payObj = payValue.toObject();
// FMItem::Pay *pay = new FMItem::Pay();
// pay->setPayId(payObj["pay_id"].toString());
// pay->setPayStr(payObj["pay_str"].toString());
// pay->setPayAmount(posRspJsonObj["paid_total_amount"].toInt());
// pay->setAccount(payObj["pay_account"].toString());
// pay->setTransId(posReqJsonObj["trans_id"].toString());
// pay->setFmTransId(posRspJsonObj["fm_id"].toString());
// pay->setThirdTransId(posRspJsonObj["fm_transId"].toString());
// pay->setOrderDBID(order->DBID());
// bool isOk = DBOP::Save(pay);
// if(isOk) {
// order->setPaidAmount(order->paidAmount()+pay->payAmount());
// }
// delete pay;
// }
// }
// DBOP::Save(order);
// delete order;
//! WARNING: 现在接口支付传来的POS订单号是transId
QString orderId = getPosJsonValue(PosProps.TransId).toString();
QSharedPointer<StoreInfo> storeInfo = GetLastStoreInfo();
QSharedPointer<Order> _order;
try {
// _transactionPay.reset(DBSP()->begin());
transaction t(DBSP()->begin());
// 检查订单是否已存在
odb::result<Order> r = DBSP()->query<Order>(query<Order>::orderId == orderId);
if(r.empty()) {
QSharedPointer<StoreInfo> transStoreInfo;
transStoreInfo->setStoreId(getPosJsonValue(PosProps.StoreId).toString());
transStoreInfo->setPosId(getPosJsonValue(PosProps.PosId).toString());
transStoreInfo->setBusinessDate(getPosJsonValue(PosProps.BusinessDate).toString());
transStoreInfo->setOperatorId(getPosJsonValue(PosProps.OperatorId).toString());
if(storeInfo == nullptr || !storeInfo->isEqual(*transStoreInfo)) {
DBSP()->persist(transStoreInfo);
_order->setStoreInfo(transStoreInfo);
} else {
_order->setStoreInfo(storeInfo);
}
_order->setOrderId(getPosJsonValue(PosProps.OrderId).toString());
_order->setOrderAmount(getPosJsonValue(PosProps.OrderAmount).toInt());
_order->setUndisAmount(getPosJsonValue(PosProps.UndisAmount).toInt());
QJsonObject productObj = getPosJsonValue(PosProps.Products).toObject();
QString productText = QJsonDocument(productObj).toJson(QJsonDocument::Compact);
_order->setProductText(productText);
DBSP()->persist(_order);
t.commit();
} else {
_order = DBSP()->load<Order>(r.begin()->id());
// 检查订单是否已结算
if(_order->settled()) {
QString info = QString::fromLocal8Bit("订单已结算,不能再进行支付.");
FMP_ERROR() << info;
setError(FM_API_ERROR, info);
return;
}
}
QByteArray reqData = QJsonDocument(posReqJsonObj).toJson(QJsonDocument::Compact);
_epay->DockPayRequest(reqData);
_epay->StartService();
QByteArray rspData = _epay->DockPayRespond();
_epay->StopService();
QJsonDocument json = QJsonDocument::fromJson(rspData);
posRspJsonObj = json.object();
if(posRspJsonObj["statusCode"] == FM_API_SUCCESS) {
QJsonArray payIds = posRspJsonObj["pay_ids"].toArray();
foreach (QJsonValue payValue, payIds) {
QJsonObject payObj = payValue.toObject();
QSharedPointer<Pay> pay(new Pay());
pay->setPayId(payObj["pay_id"].toString());
pay->setPayStr(payObj["pay_str"].toString());
pay->setPayAmount(posRspJsonObj["paid_total_amount"].toInt());
pay->setAccount(payObj["pay_account"].toString());
pay->setTransId(posReqJsonObj["trans_id"].toString());
pay->setFmTransId(posRspJsonObj["fm_id"].toString());
pay->setThirdTransId(posRspJsonObj["fm_transId"].toString());
pay->setOrder(_order);
DBSP()->persist(pay);
_order->setPaidAmount(_order->paidAmount()+pay->payAmount());
}
}
DBSP()->persist(_order);
t.commit();
} catch (const odb::exception &e) {
QString info = QString::fromLocal8Bit("存储支付信息时异常:%1").arg(e.what());
FMP_ERROR() << info;
setError(FM_API_ERROR, info);
return;
}
}
void TaskQRPay::packagePOSRsp()
......
#include "taskqrrefund.h"
//#include "items/order.h"
//#include "items/pay.h"
//#include "items/storeinfo.h"
//#include "dbop.h"
#include "database.h"
#include <QJsonDocument>
#undef StartService
using namespace DB;
TaskQRRefund::TaskQRRefund(QJsonObject &jsonObj, FMPePayInterface *epay, Session *session, QObject *parent)
:FMTaskSimple(jsonObj, FM_QR_Refund, session, parent) ,
_epay(epay)
......@@ -15,38 +16,67 @@ TaskQRRefund::TaskQRRefund(QJsonObject &jsonObj, FMPePayInterface *epay, Session
void TaskQRRefund::packagePOSReq()
{
//! WARNING: 现在接口支付传来的POS订单号是transId
// QString orderId = getPosJsonValue(PosProps.TransId).toString();
// FMItem::Order *order = new FMItem::Order();
// DBOP::GetOrderByOrderId(orderId, order);
// QSharedPointer<FMItem::Pay> refundPay;
// QList<QSharedPointer<FMItem::Pay> > pays = DBOP::GetPaysByOrderDBId(order->DBID());
// foreach (QSharedPointer<FMItem::Pay> payPointer, pays) {
// //! WARNING: 临时的找第三方支付的方法
// if(payPointer->transId() == orderId) {
// refundPay = payPointer;
// break;
// }
// }
// QByteArray reqData = QJsonDocument(posReqJsonObj).toJson(QJsonDocument::Compact);
// _epay->DockRefundRequest(reqData);
// _epay->StartService();
// QByteArray rspData = _epay->DockRefundRespond();
// _epay->StopService();
// QJsonDocument json = QJsonDocument::fromJson(rspData);
// posRspJsonObj = json.object();
// if(posRspJsonObj["statusCode"] == FM_API_SUCCESS && refundPay!=nullptr) {
// refundPay->setRefundAmount(refundPay->payAmount());
// bool isOk = DBOP::Save(refundPay.data());
// if(isOk) {
// order->setPaidAmount(order->paidAmount()-refundPay->refundAmount());
// }
// }
// DBOP::Save(order);
// delete order;
QString orderId = getPosJsonValue(PosProps.TransId).toString();
QSharedPointer<Order> _order;
try {
// _transactionPay.reset(DBSP()->begin());
transaction t(DBSP()->begin());
// 检查订单是否已存在
odb::result<Order> r = DBSP()->query<Order>(query<Order>::orderId == orderId);
if(r.empty()) {
QString info = QString::fromLocal8Bit("未找到订单信息,不能进行退款.");
FMP_ERROR() << info;
setError(FM_API_ERROR, info);
return;
} else {
_order = DBSP()->load<Order>(r.begin()->id());
// 检查订单是否已结算
if(_order->settled()) {
QString info = QString::fromLocal8Bit("订单已结算,不能再进行支付.");
FMP_ERROR() << info;
setError(FM_API_ERROR, info);
return;
}
}
QSharedPointer<Pay> refundPay;
PayList pays = _order->payList();
foreach (auto payLazyPointer, pays) {
//! WARNING: 临时的找第三方支付的方法
if(payLazyPointer.load()->transId() != orderId) {
refundPay = payLazyPointer.getEager();
break;
}
}
QByteArray reqData = QJsonDocument(posReqJsonObj).toJson(QJsonDocument::Compact);
_epay->DockRefundRequest(reqData);
_epay->StartService();
QByteArray rspData = _epay->DockRefundRespond();
_epay->StopService();
QJsonDocument json = QJsonDocument::fromJson(rspData);
posRspJsonObj = json.object();
if(posRspJsonObj["statusCode"] == FM_API_SUCCESS && refundPay!=nullptr) {
refundPay->setRefundAmount(refundPay->payAmount());
DBSP()->persist(refundPay);
_order->setPaidAmount(_order->paidAmount()-refundPay->refundAmount());
}
DBSP()->persist(_order);
t.commit();
} catch (const odb::exception &e) {
QString info = QString::fromLocal8Bit("存储退款信息时异常:%1").arg(e.what());
FMP_ERROR() << info;
setError(FM_API_ERROR, info);
return;
}
}
void TaskQRRefund::packagePOSRsp()
......
......@@ -26,7 +26,7 @@ void TaskRefund::packagePOSReq()
QSharedPointer<StoreInfo> storeInfo = GetLastStoreInfo();
if(storeInfo == nullptr) {
QString info = QString::fromLocal8Bit("未设置门店信息,不能进行支付.");
QString info = QString::fromLocal8Bit("未设置门店信息,不能进行退款.");
setError(FM_API_ERROR, info);
return;
}
......
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