Commit 62e0fa72 by NitefullWind

1. 实现退款退单。

parent a77fbb94
#include "taskrefund.h" #include "taskrefund.h"
#include "fmviprefund.h" #include "fmviprefund.h"
#include "database/dbop.h"
//#include "items/item.h"
//#include "items/order.h"
//#include "items/pay.h"
//#include "items/storeinfo.h"
#include "taskothers.h" #include "taskothers.h"
#include <QSharedPointer> #include <QSharedPointer>
#include <QJsonDocument> #include <QJsonDocument>
#include "fmmsgwnd.h" #include "fmmsgwnd.h"
using namespace DB;
TaskRefund::TaskRefund(QJsonObject &jsonObj, Session *session, QObject *parent) TaskRefund::TaskRefund(QJsonObject &jsonObj, Session *session, QObject *parent)
: FMTask(jsonObj, FM_Refund, session, parent) : FMTask(jsonObj, FM_Refund, session, parent)
, _refundAmount(0) , _refundAmount(0)
// , _order(new FMItem::Order(this)) , _order(new Order())
{ {
} }
TaskRefund::~TaskRefund() TaskRefund::~TaskRefund()
{ {
// delete _order;
} }
void TaskRefund::packagePOSReq() void TaskRefund::packagePOSReq()
{ {
// QString orderId = getPosJsonValue(PosProps.OrderId).toString(); QString orderId = getPosJsonValue(PosProps.OrderId).toString();
// session()->addData(PosProps.OrderId, orderId); session()->addData(PosProps.OrderId, orderId);
// FMItem::StoreInfo storeInfo; QSharedPointer<StoreInfo> storeInfo = GetLastStoreInfo();
// bool isOk = DBOP::GetLastItem(&storeInfo); if(storeInfo == nullptr) {
// if(isOk) { QString info = QString::fromLocal8Bit("未设置门店信息,不能进行支付.");
// posReqJsonObj = storeInfo.toJson(QStringList(), posReqJsonObj); setError(FM_API_ERROR, info);
// } else { return;
// QString info = QString::fromLocal8Bit("未设置门店信息,不能进行退款."); }
// FMP_WARN() << info;
// setError(FM_API_ERROR, info); posReqJsonObj[PosProps.StoreId] = storeInfo->storeId();
// return; posReqJsonObj[PosProps.PosId] = storeInfo->posId();
// } posReqJsonObj[PosProps.BusinessDate] = storeInfo->businessDate();
posReqJsonObj[PosProps.OperatorId] = storeInfo->operatorId();
// DBOP::GetOrderByOrderId(orderId, _order);
// if(_order->isNew()) { try {
// QString info = QString::fromLocal8Bit("未找到订单信息,不能进行退款."); // _transactionPay.reset(DBSP()->begin());
// FMP_WARN() << info; transaction t(DBSP()->begin());
// setError(FM_API_ERROR, info); // 检查订单是否已存在
// return; odb::result<Order> r = DBSP()->query<Order>(query<Order>::orderId == orderId);
// } else if(DBOP::GetPaysByOrderDBId(_order->DBID()).isEmpty()) {
// QString info = QString::fromLocal8Bit("订单中没有可以进行退款的支付."); if(r.empty()) {
// FMP_WARN() << info; QString info = QString::fromLocal8Bit("未找到订单信息,不能进行退款.");
// setError(FM_API_ERROR, info); FMP_ERROR() << info;
// return; setError(FM_API_ERROR, info);
// } } else {
_order = DBSP()->load<Order>(r.begin()->id());
// 检查订单是否已结算
if(_order->payList().isEmpty()) {
QString info = QString::fromLocal8Bit("订单中没有可以进行退款的支付.");
FMP_ERROR() << info;
setError(FM_API_ERROR, info);
return;
}
session()->addData("RefundOrderDBID", (qulonglong)(_order->id()));
}
} catch (const odb::exception &e) {
QString info = QString::fromLocal8Bit("查询订单时异常:%1").arg(e.what());
FMP_ERROR() << info;
setError(FM_API_ERROR, info);
return;
}
} }
void TaskRefund::setWindow() void TaskRefund::setWindow()
{ {
// // 已结算则直接退订单 // 已结算则直接退订单
// if(_order->settled()) { if(_order->settled()) {
// onRefundOrder(_order->DBID()); onRefundOrder(_order->id());
// } }
// // 未结算,仅有一笔支付则直接退该笔支付 // 未结算,仅有一笔支付则直接退该笔支付
//// else if(_order->payList().size() == 1) { else if(_order->payList().size() == 1) {
//// onRefundPay(_order->payList().first()->DBID()); QSharedPointer<Pay> firstPay = _order->payList().first().load();
//// } onRefundPay(firstPay->id());
// // 其他情况显示界面 }
// else { // 其他情况显示界面
// _window = new FMVipRefund(); else {
_window = new FMVipRefund();
// connect(qobject_cast<FMVipRefund*>(_window), &FMVipRefund::refundPay, this, &TaskRefund::onRefundPay);
// connect(qobject_cast<FMVipRefund*>(_window), &FMVipRefund::refundOrder, this, &TaskRefund::onRefundOrder); connect(qobject_cast<FMVipRefund*>(_window), &FMVipRefund::refundPay, this, &TaskRefund::onRefundPay);
// } connect(qobject_cast<FMVipRefund*>(_window), &FMVipRefund::refundOrder, this, &TaskRefund::onRefundOrder);
}
} }
void TaskRefund::packageServerReq() void TaskRefund::packageServerReq()
...@@ -83,60 +99,80 @@ void TaskRefund::packagePOSRsp() ...@@ -83,60 +99,80 @@ void TaskRefund::packagePOSRsp()
posRspJsonObj["refund_amount"] = _refundAmount; posRspJsonObj["refund_amount"] = _refundAmount;
} }
void TaskRefund::onRefundPay(int DBID) void TaskRefund::onRefundPay(unsigned long DBID)
{ {
// posReqJsonObj[PosProps.TransId] = session()->data(PosProps.TransId).toString(); posReqJsonObj[PosProps.TransId] = session()->data(PosProps.TransId).toString();
// QSharedPointer<FMItem::Pay> payPointer = DBOP::GetPayByDBId(DBID); try {
// QSharedPointer<FMItem::Order> orderPointer = DBOP::GetOrderByDBId(payPointer->orderDBID()); odb::transaction t(DBSP()->begin());
QSharedPointer<Pay> payPointer = DBSP()->load<Pay>(DBID);
// posReqJsonObj = orderPointer->toJson(QStringList(), posReqJsonObj);
posReqJsonObj[PosProps.TransId] = payPointer->fmTransId();
// posReqJsonObj[PosProps.TransId] = payPointer->fmTransId(); TaskRefundPay refundPay(posReqJsonObj, this);
// TaskRefundPay refundPay(posReqJsonObj, this); QByteArray rspData = refundPay.doTask();
// QByteArray rspData = refundPay.doTask();
QJsonObject rspObj = QJsonDocument::fromJson(rspData).object();
// QJsonObject rspObj = QJsonDocument::fromJson(rspData).object(); if(rspObj[PosProps.StatusCode].toInt() == FM_API_SUCCESS) {
// if(rspObj[PosProps.StatusCode].toInt() == FM_API_SUCCESS) { payPointer->setRefundAmount(payPointer->payAmount());
// payPointer->setRefundAmount(payPointer->payAmount());
// bool isOk = DBOP::Save(payPointer.data()); DBSP()->persist(payPointer);
// if(isOk) {
// orderPointer->setPaidAmount(orderPointer->paidAmount() - payPointer->refundAmount()); _order->setPaidAmount(_order->paidAmount() - payPointer->refundAmount());
// isOk = DBOP::Save(orderPointer.data()); DBSP()->persist(_order);
// _refundAmount += payPointer->payAmount();
// } _refundAmount += payPointer->payAmount();
// if(_window!=nullptr) { if(_window!=nullptr) {
// qobject_cast<FMVipRefund*>(_window)->refresh(); qobject_cast<FMVipRefund*>(_window)->refresh();
// qobject_cast<FMVipRefund*>(_window)->setIsRefundSuccess(true); qobject_cast<FMVipRefund*>(_window)->setIsRefundSuccess(true);
// } }
// } else { } else {
// QString msg = searchJsonValue(rspObj, PosProps.Msg).toString(); QString msg = searchJsonValue(rspObj, PosProps.Msg).toString();
// FMMsgWnd::FailureWnd(msg, _window); FMMsgWnd::FailureWnd(msg, _window);
// } }
} catch (const odb::exception &e) {
QString info = QString::fromLocal8Bit("支付退款失败:%1").arg(e.what());
FMP_ERROR() << info;
setError(FM_API_ERROR, info);
return;
}
} }
void TaskRefund::onRefundOrder(int DBID) void TaskRefund::onRefundOrder(unsigned long DBID)
{ {
// QSharedPointer<FMItem::Order> orderPointer = DBOP::GetOrderByDBId(DBID); Q_UNUSED(DBID);
// posReqJsonObj[PosProps.Fm_order_id] = orderPointer->fmOrderId(); try {
// posReqJsonObj[PosProps.OrderId] = orderPointer->orderId(); odb::transaction t(DBSP()->begin());
// TaskRefundOrder refundOrder(posReqJsonObj, this);
// QByteArray rspData = refundOrder.doTask(); posReqJsonObj[PosProps.Fm_order_id] = _order->fmOrderId();
posReqJsonObj[PosProps.OrderId] = _order->orderId();
// QJsonObject rspObj = QJsonDocument::fromJson(rspData).object(); TaskRefundOrder refundOrder(posReqJsonObj, this);
// if(rspObj[PosProps.StatusCode].toInt() == FM_API_SUCCESS) { QByteArray rspData = refundOrder.doTask();
// orderPointer->setRefunded(true);
// DBOP::Save(orderPointer.data()); QJsonObject rspObj = QJsonDocument::fromJson(rspData).object();
// if(_window!=nullptr) { if(rspObj[PosProps.StatusCode].toInt() == FM_API_SUCCESS) {
// qobject_cast<FMVipRefund*>(_window)->refresh(); _order->setRefunded(true);
// qobject_cast<FMVipRefund*>(_window)->setIsRefundSuccess(true);
// } DBSP()->persist(_order);
// _refundAmount = orderPointer->paidAmount(); if(_window!=nullptr) {
// } else { qobject_cast<FMVipRefund*>(_window)->refresh();
// QString msg = searchJsonValue(rspObj, PosProps.Msg).toString(); qobject_cast<FMVipRefund*>(_window)->setIsRefundSuccess(true);
// FMMsgWnd::FailureWnd(msg, _window); }
// }
_refundAmount = _order->paidAmount();
} else {
QString msg = searchJsonValue(rspObj, PosProps.Msg).toString();
FMMsgWnd::FailureWnd(msg, _window);
}
t.commit();
} catch (const odb::exception &e) {
QString info = QString::fromLocal8Bit("订单退款失败:%1").arg(e.what());
FMP_ERROR() << info;
setError(FM_API_ERROR, info);
return;
}
} }
#ifndef TASKREFUND_H #ifndef TASKREFUND_H
#define TASKREFUND_H #define TASKREFUND_H
#include "fmtask.h" #include "fmtask.h"
#include "database.h"
//namespace FMItem {
//class Order;
//}
class TaskRefund : public FMTask class TaskRefund : public FMTask
{ {
...@@ -20,11 +17,11 @@ private: ...@@ -20,11 +17,11 @@ private:
void packagePOSRsp(); void packagePOSRsp();
private: private:
void onRefundPay(int DBID); void onRefundPay(unsigned long DBID);
void onRefundOrder(int DBID); void onRefundOrder(unsigned long DBID);
int _refundAmount; int _refundAmount;
// FMItem::Order *_order; QSharedPointer<DB::Order> _order;
}; };
#endif // TASKREFUND_H #endif // TASKREFUND_H
...@@ -5,15 +5,13 @@ ...@@ -5,15 +5,13 @@
#include <QMutex> #include <QMutex>
#include "fmloading.h" #include "fmloading.h"
#include "fmmsgwnd.h" #include "fmmsgwnd.h"
//#include "dbop.h"
//#include "items/order.h" using namespace DB;
//#include "items/pay.h"
//#include "items/storeinfo.h"
FMVipRefund::FMVipRefund(QDialog *parent) : FMVipRefund::FMVipRefund(QDialog *parent) :
FMVipWnd(parent), FMVipWnd(parent),
ui(new Ui::FMVipRefund), ui(new Ui::FMVipRefund),
// order(new FMItem::Order(this)) , _order(new Order()) ,
_isRefundSuccess(false) _isRefundSuccess(false)
{ {
ui->setupUi(this); ui->setupUi(this);
...@@ -22,89 +20,93 @@ FMVipRefund::FMVipRefund(QDialog *parent) : ...@@ -22,89 +20,93 @@ FMVipRefund::FMVipRefund(QDialog *parent) :
FMVipRefund::~FMVipRefund() FMVipRefund::~FMVipRefund()
{ {
delete ui; delete ui;
// delete order;
// pays.clear();
} }
bool FMVipRefund::initWnd(Session *session) bool FMVipRefund::initWnd(Session *session)
{ {
// this->_session = session; this->_session = session;
// ui->store_label->setText(session->data(PosProps.StoreId).toString()); ui->store_label->setText(session->data(PosProps.StoreId).toString());
// ui->pos_label->setText(session->data(PosProps.PosId).toString()); ui->pos_label->setText(session->data(PosProps.PosId).toString());
// ui->operator_label->setText(session->data(PosProps.OperatorId).toString()); ui->operator_label->setText(session->data(PosProps.OperatorId).toString());
// ui->bd_label->setText(session->data(PosProps.BussinessDate).toString()); ui->bd_label->setText(session->data(PosProps.BusinessDate).toString());
// QString orderId = session->data(PosProps.OrderId).toString(); unsigned long orderDBID = session->data("RefundOrderDBID").toULongLong();
// DBOP::GetOrderByOrderId(orderId, order);
try {
// FMItem::StoreInfo storeInfo; odb::transaction t(DBSP()->begin());
// DBOP::GetItemByDBID(order->storeInfoDBID(), &storeInfo);
_order = DBSP()->load<Order>(orderDBID);
// if(order->isNew()) {
// ui->textEdit_order->setText(QString::fromLocal8Bit("未找到orderId为 %1 的订单! ").arg(orderId)); QSharedPointer<StoreInfo> storeInfo = _order->storeInfo().load();
// } else {
// QString orderInfo = QString::fromLocal8Bit("POS订单号:%1\n" QString orderInfo = QString::fromLocal8Bit("POS订单号:%1\n"
// "非码订单号:%2\n" "非码订单号:%2\n"
// "订单总额:%3 \t 已付金额:%4\n" "订单总额:%3 \t 已付金额:%4\n"
// "营业日:%5 \t 收银员:%6\n" "营业日:%5 \t 收银员:%6\n"
// "门店号:%7 \t POS号:%8\n") "门店号:%7 \t POS号:%8\n")
// .arg(order->orderId()).arg(order->fmOrderId()) .arg(_order->orderId()).arg(_order->fmOrderId())
// .arg(order->orderAmount()/100.0).arg(order->paidAmount()/100.0) .arg(_order->orderAmount()/100.0).arg(_order->paidAmount()/100.0)
// .arg(storeInfo.businessDate()).arg(storeInfo.operatorId()) .arg(storeInfo->businessDate()).arg(storeInfo->operatorId())
// .arg(storeInfo.storeId()).arg(storeInfo.posId()); .arg(storeInfo->storeId()).arg(storeInfo->posId());
// if(order->refunded()) { if(_order->refunded()) {
// orderInfo += QString::fromLocal8Bit("订单已退款\n"); orderInfo += QString::fromLocal8Bit("订单已退款\n");
// ui->btn_refund_order->setEnabled(false); ui->btn_refund_order->setEnabled(false);
// } else if (order->settled()) { } else if (_order->settled()) {
// orderInfo += QString::fromLocal8Bit("订单已结算,可以退整单\n"); orderInfo += QString::fromLocal8Bit("订单已结算,可以退整单\n");
// ui->btn_refund_order->setEnabled(true); ui->btn_refund_order->setEnabled(true);
// } else { } else {
// orderInfo += QString::fromLocal8Bit("订单还未结算,可以选择退某笔支付\n"); orderInfo += QString::fromLocal8Bit("订单还未结算,可以选择退某笔支付\n");
// ui->btn_refund_order->setEnabled(false); ui->btn_refund_order->setEnabled(false);
// } }
// ui->textEdit_order->setText(orderInfo); ui->textEdit_order->setText(orderInfo);
// pays = DBOP::GetPaysByOrderDBId(order->DBID()); foreach(auto payLazyPointer, _order->payList()) {
_pays.append(payLazyPointer.load());
// int row = 0, col = 0; }
// foreach (auto payPointer, pays) { } catch (const odb::exception &e) {
// if(row == 0) { QString info = QString::fromLocal8Bit("查询订单时异常:%1").arg(e.what());
// QStringList headerLabels; qDebug() << info;
// headerLabels << QString::fromLocal8Bit("支付方式") << QString::fromLocal8Bit("支付金额") << QString::fromLocal8Bit("已退金额") << QString::fromLocal8Bit("操作"); return false;
// ui->tableWidget_pays->setRowCount(pays.length()); }
// ui->tableWidget_pays->setColumnCount(headerLabels.length());
// ui->tableWidget_pays->setHorizontalHeaderLabels(headerLabels); int row = 0, col = 0;
// int tableWidth = ui->tableWidget_pays->width(); foreach (auto payPointer, _pays) {
// ui->tableWidget_pays->setColumnWidth(0, tableWidth*0.4); if(row == 0) {
// ui->tableWidget_pays->setColumnWidth(1, tableWidth*0.2); QStringList headerLabels;
// ui->tableWidget_pays->setColumnWidth(2, tableWidth*0.2); headerLabels << QString::fromLocal8Bit("支付方式") << QString::fromLocal8Bit("支付金额") << QString::fromLocal8Bit("已退金额") << QString::fromLocal8Bit("操作");
// ui->tableWidget_pays->setColumnWidth(3, tableWidth*0.17); ui->tableWidget_pays->setRowCount(_pays.length());
// } ui->tableWidget_pays->setColumnCount(headerLabels.length());
ui->tableWidget_pays->setHorizontalHeaderLabels(headerLabels);
// QStringList payInfo; int tableWidth = ui->tableWidget_pays->width();
// payInfo << payPointer->payStr() << QString::number(payPointer->payAmount() / 100.0) << QString::number(payPointer->refundAmount() / 100.0); ui->tableWidget_pays->setColumnWidth(0, tableWidth*0.4);
// foreach (const QString payInfoItem, payInfo) { ui->tableWidget_pays->setColumnWidth(1, tableWidth*0.2);
// ui->tableWidget_pays->setItem(row, col, new QTableWidgetItem(payInfoItem)); ui->tableWidget_pays->setColumnWidth(2, tableWidth*0.2);
// col ++; ui->tableWidget_pays->setColumnWidth(3, tableWidth*0.17);
// } }
// if(payPointer->payAmount() > 0) {
// auto btn = new QPushButton(QString::fromLocal8Bit("退款"), ui->tableWidget_pays); QStringList payInfo;
// btn->setProperty("DBID", payPointer->DBID()); payInfo << payPointer->payStr() << QString::number(payPointer->payAmount() / 100.0) << QString::number(payPointer->refundAmount() / 100.0);
// connect(btn, &QPushButton::clicked, this, &FMVipRefund::onBtnRefundClicked); foreach (const QString payInfoItem, payInfo) {
// ui->tableWidget_pays->setCellWidget(row, col, btn); ui->tableWidget_pays->setItem(row, col, new QTableWidgetItem(payInfoItem));
// btn->setCursor(QCursor(Qt::PointingHandCursor)); col ++;
}
// if((payPointer->payAmount() <= payPointer->refundAmount()) || order->settled() || order->refunded() if(payPointer->payAmount() > 0) {
// || payPointer->payId()!="20001") { auto btn = new QPushButton(QString::fromLocal8Bit("退款"), ui->tableWidget_pays);
// btn->setEnabled(false); btn->setProperty("DBID", (qulonglong)payPointer->id());
// } connect(btn, &QPushButton::clicked, this, &FMVipRefund::onBtnRefundClicked);
// } ui->tableWidget_pays->setCellWidget(row, col, btn);
btn->setCursor(QCursor(Qt::PointingHandCursor));
// row++;
// col = 0; if((payPointer->payAmount() <= payPointer->refundAmount()) || _order->settled() || _order->refunded()
// } || payPointer->payId()!="20001") {
// } btn->setEnabled(false);
}
}
row++;
col = 0;
}
return true; return true;
} }
......
...@@ -2,17 +2,12 @@ ...@@ -2,17 +2,12 @@
#define FMVIPREFUND_H #define FMVIPREFUND_H
#include "fmvipwnd.h" #include "fmvipwnd.h"
#include "database.h"
namespace Ui { namespace Ui {
class FMVipRefund; class FMVipRefund;
} }
//namespace FMItem {
//class Order;
//class Pay;
//}
class FMVipRefund : public FMVipWnd class FMVipRefund : public FMVipWnd
{ {
Q_OBJECT Q_OBJECT
...@@ -42,8 +37,8 @@ private slots: ...@@ -42,8 +37,8 @@ private slots:
private: private:
Ui::FMVipRefund *ui; Ui::FMVipRefund *ui;
// FMItem::Order *order; QSharedPointer<DB::Order> _order;
// QList<QSharedPointer<FMItem::Pay> > pays; QList<QSharedPointer<DB::Pay> > _pays;
bool _isRefundSuccess; bool _isRefundSuccess;
}; };
......
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