Commit 81769bfc by NitefullWind

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

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