Commit 5c233792 by NitefullWind

1. 新会员功能基本实现。

parent fa12d19d
......@@ -37,7 +37,7 @@ void DBOP::InserTable(const QString &tableName, const QString &transId, const QS
{
QVariantHash hash;
hash[PosProps.TransId] = transId;
hash[PosProps.Fm_id] = fmId;
hash[PosProps.Fm_order_id] = fmId;
hash["reqData"] = reqData;
hash["rspData"] = rspData;
Instance()->_db->insert(tableName, hash);
......@@ -53,9 +53,9 @@ bool DBOP::CreateTable(const QString &tableName)
"[paid_amount] INT DEFAULT 0, "
"[undis_amount] INT DEFAULT 0, "
"[fm_open_id] VARCHAR(50), "
"[products] TEXT"
"[products] TEXT,"
"[settle] BOOL DEFAULT 0,"
"[storeInfoId] INTEGER"
"[storeInfoDBID] INTEGER DEFAULT 0"
");";
QString tablePaySql = "CREATE TABLE [Pay]("
"[id] INTEGER PRIMARY KEY autoincrement, "
......@@ -67,7 +67,7 @@ bool DBOP::CreateTable(const QString &tableName)
"[account] VARCHAR(50), "
"[trans_id] VARCHAR(50), "
"[fm_trans_id] VARCHAR(50),"
"[orderDBID] INTEGER"
"[orderDBID] INTEGER DEFAULT 0"
");";
QString tableStoreInfoSql = "CREATE TABLE [StoreInfo]("
"[id] INTEGER PRIMARY KEY autoincrement, "
......@@ -219,7 +219,7 @@ QSharedPointer<FMItem::Pay> DBOP::GetPayByDBId(unsigned int DBID)
return pay;
}
void DBOP::GetLastItem(Item *item)
bool DBOP::GetLastItem(Item *item)
{
Q_ASSERT(item != nullptr);
......@@ -231,6 +231,7 @@ void DBOP::GetLastItem(Item *item)
} else {
FMP_WARN() << "Dont't find last item in table: " << item->ShortClassName();
}
return isOk;
}
//template<typename T>
......@@ -241,3 +242,17 @@ void DBOP::GetLastItem(Item *item)
// return itemPointer;
//}
bool DBOP::GetItemByDBID(unsigned int DBID, Item *item)
{
Q_ASSERT(item != NULL);
QSqlQuery query;
QString condition = QString("id == '%1'").arg(DBID);
bool isOk = Instance()->_db->find(item->ShortClassName(), query, QStringList(), condition);
if(isOk && query.next()) {
item->SetPropertiesBySqlRecord(query.record());
} else {
FMP_WARN() << "Don't find item by DBID: " << DBID;
}
return isOk;
}
......@@ -37,10 +37,12 @@ public:
static void GetPayByDBId(unsigned int DBID, FMItem::Pay *pay);
static QSharedPointer<FMItem::Pay> GetPayByDBId(unsigned int DBID);
static void GetLastItem(FMItem::Item *item);
static bool GetLastItem(FMItem::Item *item);
// template<typename T>
// static QSharedPointer<T> GetLastItem();
static bool GetItemByDBID(unsigned int DBID, FMItem::Item *item);
private:
DBOP();
FMPDataBase *_db;
......
......@@ -75,6 +75,9 @@ struct PP{
Fm_cmd = "fm_cmd";
FM_Type = "FM_Type";
TransId = "trans_id";
OrderId = "order_id";
fmTransId = "fm_trans_id";
Fm_order_id = "fm_order_id";
Member_sign = "member_sign";
Account = "account";
Type_code = "type_code";
......@@ -155,6 +158,9 @@ struct PP{
QString Fm_cmd ;
QString FM_Type ;
QString TransId ;
QString OrderId ;
QString fmTransId ;
QString Fm_order_id ;
QString Member_sign ;
QString Account ;
QString Type_code ;
......@@ -246,7 +252,7 @@ const PropsMap::value_type PropsMapPairs[] =
PropsMap::value_type(PosProps.TransId, "transId"),
PropsMap::value_type(PosProps.Coupon, "couponCode"),
PropsMap::value_type(PosProps.BussinessDate,"businessDate"),
PropsMap::value_type(PosProps.Fm_id, "memberTransId"),
PropsMap::value_type(PosProps.Fm_order_id, "memberTransId"),
PropsMap::value_type(PosProps.Fm_open_id, "account"),
PropsMap::value_type(PosProps.Account, "memberNo"),
PropsMap::value_type(PosProps.CouponList, "coupon_list"),
......
......@@ -68,6 +68,10 @@ QJsonObject Item::toJson(QStringList keys, QJsonObject json)
{
if(keys.isEmpty()) {
foreach (const QString &property, this->PropertyNames()) {
//! 跳过DBID属性,避免误设置item的数据库id
if(property.compare("DBID") == 0) {
continue;
}
QVariant value = this->property(property.toUtf8().data());
json[property] = QJsonValue::fromVariant(value);
}
......
......@@ -12,15 +12,12 @@ Order::Order(QObject *parent)
,_orderAmount(0)
,_paidAmount(0)
,_undisAmount(0)
,_storeId("")
,_posId("")
,_operatorId("")
,_businessDate("")
,_fmOpenId("")
,_payList(ItemList())
,_productList(ProductList())
,_productText("")
,_settled(false)
,_storeInfoDBID(0)
{
}
......@@ -75,46 +72,6 @@ void Order::setUndisAmount(int undisAmount)
_undisAmount = undisAmount;
}
QString Order::storeId() const
{
return _storeId;
}
void Order::setStoreId(const QString &storeId)
{
_storeId = storeId;
}
QString Order::posId() const
{
return _posId;
}
void Order::setPosId(const QString &posId)
{
_posId = posId;
}
QString Order::operatorId() const
{
return _operatorId;
}
void Order::setOperatorId(const QString &operatorId)
{
_operatorId = operatorId;
}
QString Order::businessDate() const
{
return _businessDate;
}
void Order::setBusinessDate(const QString &businessDate)
{
_businessDate = businessDate;
}
QString Order::fmOpenId() const
{
return _fmOpenId;
......@@ -164,3 +121,13 @@ void Order::setSettled(bool settled)
{
_settled = settled;
}
int Order::storeInfoDBID() const
{
return _storeInfoDBID;
}
void Order::setStoreInfoDBID(int storeInfoDBID)
{
_storeInfoDBID = storeInfoDBID;
}
......@@ -22,13 +22,10 @@ namespace FMItem {
Q_PROPERTY(int order_amount READ orderAmount WRITE setOrderAmount)
Q_PROPERTY(int paid_amount READ paidAmount WRITE setPaidAmount)
Q_PROPERTY(int undis_amount READ undisAmount WRITE setUndisAmount)
Q_PROPERTY(QString store_id READ storeId WRITE setStoreId)
Q_PROPERTY(QString pos_id READ posId WRITE setPosId)
Q_PROPERTY(QString operator_id READ operatorId WRITE setOperatorId)
Q_PROPERTY(QString business_date READ businessDate WRITE setBusinessDate)
Q_PROPERTY(QString fm_open_id READ fmOpenId WRITE setFmOpenId)
Q_PROPERTY(QString products READ productText WRITE setProductText)
Q_PROPERTY(bool settled READ settled WRITE setSettled)
Q_PROPERTY(int storeInfoDBID READ storeInfoDBID WRITE setStoreInfoDBID)
// Q_PROPERTY(ItemList payList READ payList WRITE setPayList)
// Q_PROPERTY(ProductList productList READ productList WRITE setProductList)
public:
......@@ -49,18 +46,6 @@ namespace FMItem {
int undisAmount() const;
void setUndisAmount(int undisAmount);
QString storeId() const;
void setStoreId(const QString &storeId);
QString posId() const;
void setPosId(const QString &posId);
QString operatorId() const;
void setOperatorId(const QString &operatorId);
QString businessDate() const;
void setBusinessDate(const QString &businessDate);
QString fmOpenId() const;
void setFmOpenId(const QString &fmOpenId);
......@@ -76,6 +61,9 @@ namespace FMItem {
bool settled() const;
void setSettled(bool settled);
int storeInfoDBID() const;
void setStoreInfoDBID(int storeInfoDBID);
private:
QString _orderId;
QString _fmOrderId;
......@@ -83,16 +71,14 @@ namespace FMItem {
int _paidAmount;
int _undisAmount;
QString _storeId;
QString _posId;
QString _operatorId;
QString _businessDate;
QString _fmOpenId;
QString _productText;
bool _settled;
int _storeInfoDBID;
ItemList _payList;
ProductList _productList;
};
......
......@@ -252,10 +252,14 @@ bool FMTask::checkReqJson()
QJsonObject optionalFieldObj = _checkJsonObj[PosProps.OptionalField].toObject();
QStringList checkKeys = mandatoryFieldObj.keys() + optionalFieldObj.keys();
foreach (const QString &checkKey, checkKeys) {
if(!posReqJsonObj.contains(checkKey) && mandatoryFieldObj.contains(checkKey)) {
isOk = false;
setError(FM_API_BADJSON, QString::fromLocal8Bit("请求不合法,需要[%1]字段。").arg(checkKey));
break;
if(!posReqJsonObj.contains(checkKey)) {
if(mandatoryFieldObj.contains(checkKey)) {
isOk = false;
setError(FM_API_BADJSON, QString::fromLocal8Bit("请求不合法,需要[%1]字段。").arg(checkKey));
break;
} else if(optionalFieldObj.contains(checkKey)) {
break;
}
}
QVariant expectValue;
......
......@@ -7,6 +7,7 @@
#include "dbop.h"
#include "items/order.h"
#include "items/pay.h"
#include "items/storeinfo.h"
#include <QDateTime>
#include <QJsonDocument>
#include <QJsonArray>
......@@ -24,27 +25,37 @@ TaskFinal::~TaskFinal()
delete _order;
}
void TaskFinal::packageServerReq()
void TaskFinal::packagePOSReq()
{
QString transId = getPosJsonValue(PosProps.TransId).toString();
DBOP::GetOrderByOrderId(transId, _order);
QString orderId = getPosJsonValue(PosProps.OrderId).toString();
DBOP::GetOrderByOrderId(orderId, _order);
QStringList keys;
keys << PosProps.OperatorId << PosProps.PosId << PosProps.StoreId;
QMap<QString,QString> key2proMap;
foreach (QString key, keys) {
key2proMap[ServerProps(key)] = key;
FMItem::StoreInfo storeInfo;
bool isOk = DBOP::GetLastItem(&storeInfo);
if(isOk) {
posReqJsonObj = storeInfo.toJson(QStringList(), posReqJsonObj);
_order->setStoreInfoDBID(storeInfo.DBID());
}
serverReqJsonObj = _order->toJson(key2proMap, serverReqJsonObj);
}
void TaskFinal::packageServerReq()
{
QMap<QString, QString> key2proMap;
QStringList keys;
QJsonObject dataObj;
keys.clear();
keys << PosProps.Fm_open_id << PosProps.OrderAmount << PosProps.PaidAmount << PosProps.Fm_id << PosProps.BussinessDate << PosProps.TransId;
keys << PosProps.Fm_open_id << PosProps.OrderAmount << PosProps.PaidAmount << PosProps.Fm_order_id << PosProps.TransId;
key2proMap.clear();
foreach (QString key, keys) {
key2proMap[ServerProps(key)] = key;
}
dataObj = _order->toJson(key2proMap, dataObj);
dataObj[ServerProps(PosProps.TransId)] = getPosJsonValue(PosProps.OrderId);
FMItem::StoreInfo storeInfo;
bool isOk = DBOP::GetItemByDBID(_order->storeInfoDBID(), &storeInfo);
if(isOk) {
dataObj[ServerProps(PosProps.BussinessDate)] = storeInfo.businessDate();
}
// Products
QString productText = _order->productText();
......@@ -74,7 +85,7 @@ void TaskFinal::packageServerReq()
if(_order->orderAmount() > _order->paidAmount()) {
QSharedPointer<FMItem::Pay> cashPay(new FMItem::Pay());
cashPay->setPayId("0101");
cashPay->setPayId("20005");
cashPay->setPayAmount(_order->orderAmount() - _order->paidAmount());
cashPay->setTransId(_order->orderId());
payList.append(cashPay);
......@@ -87,16 +98,12 @@ void TaskFinal::packageServerReq()
payObj["thirdPayTransId"] = it->data()->fmTransId();
QString typeModeFlag = it->data()->payId();
if(typeModeFlag == "0101") {
if(typeModeFlag == "20005") {
//现金支付
payObj["typeModeFlag"] = "20005";
} else if (typeModeFlag == "0103") {
} else if (typeModeFlag == "20010") {
payObj["typeModeFlag"] = "20010";
} else if(typeModeFlag == "0301") {
payObj["typeModeFlag"] = "10011";
} else if(typeModeFlag == "0302") {
payObj["typeModeFlag"] = "10011";
} else if(typeModeFlag == "0303") {
} else if(typeModeFlag == "10011") {
payObj["typeModeFlag"] = "10011";
} else {
payObj["typeModeFlag"] = typeModeFlag;
......@@ -181,7 +188,7 @@ bool TaskFinal::sendToServer(bool isShowMsg)
setError(FM_API_SUCCESS);
serverRspJsonObj[ServerProps(PosProps.StatusCode)] = FM_API_SUCCESS;
serverRspJsonObj[ServerProps(PosProps.Msg)] = QString::fromLocal8Bit("结算成功");
serverRspJsonObj[ServerProps(PosProps.Fm_id)] = fm_id;
serverRspJsonObj[ServerProps(PosProps.Fm_order_id)] = fm_id;
serverRspJsonObj[ServerProps(PosProps.Prompt)] = 1;
serverRspJsonObj[ServerProps(PosProps.Print1)] = "";
serverRspJsonObj[ServerProps(PosProps.Print2)] = "";
......@@ -201,7 +208,7 @@ void TaskFinal::packagePOSRsp()
std::vector<QString> p;
p.push_back(PosProps.StatusCode);
p.push_back(PosProps.Msg);
p.push_back(PosProps.Fm_id);
p.push_back(PosProps.Fm_order_id);
p.push_back(PosProps.Print1);
p.push_back(PosProps.Print2);
foreach(auto prop , p)
......@@ -209,6 +216,11 @@ void TaskFinal::packagePOSRsp()
posRspJsonObj[prop] = getServerJsonValue(prop);
}
posRspJsonObj[PosProps.Prompt] = 1;
if(getServerJsonValue(PosProps.StatusCode).toInt() == FM_API_SUCCESS) {
_order->setSettled(true);
DBOP::Save(_order);
}
}
QString TaskFinal::backup()
......
......@@ -13,6 +13,7 @@ public:
explicit TaskFinal(QJsonObject &jsonObj, Session *session = 0, QObject *parent = 0);
~TaskFinal();
void packagePOSReq();
void packageServerReq();
bool sendToServer(bool isShowMsg = true);
void packagePOSRsp();
......
......@@ -43,7 +43,7 @@ void TaskFund::packagePOSRsp()
std::vector<QString> p;
p.push_back(PosProps.StatusCode);
p.push_back(PosProps.Msg);
p.push_back(PosProps.Fm_id);
p.push_back(PosProps.Fm_order_id);
p.push_back(PosProps.Print);
foreach (QString prop , p) {
posRspJsonObj[prop] = getServerJsonValue(prop);
......
......@@ -83,8 +83,8 @@ TaskRefundOrder::TaskRefundOrder(QJsonObject &jsonObj, QObject *parent)
void TaskRefundOrder::packageServerReq()
{
QJsonObject transData;
transData[ServerProps(PosProps.Fm_id)] = getPosJsonValue(PosProps.Fm_id);
transData[ServerProps(PosProps.TransId)] = getPosJsonValue(PosProps.TransId);
transData[ServerProps(PosProps.Fm_order_id)] = getPosJsonValue(PosProps.Fm_order_id);
transData[ServerProps(PosProps.OrderId)] = getPosJsonValue(PosProps.OrderId);
serverReqJsonObj["data"] = transData;
}
......
......@@ -7,6 +7,7 @@
#include "dbop.h"
#include "items/order.h"
#include "items/pay.h"
#include "items/storeinfo.h"
#include <QJsonDocument>
#include <QJsonObject>
#include <QCryptographicHash>
......@@ -18,18 +19,21 @@ TaskPay::TaskPay(QJsonObject &jsonObj, Session *session, QObject *parent)
{
}
QByteArray TaskPay::doTask()
{
FMP_DEBUG() << __FUNCTION__;
void TaskPay::packagePOSReq()
{
FMItem::StoreInfo storeInfo;
DBOP::GetLastItem(&storeInfo);
posReqJsonObj = storeInfo.toJson(QStringList(), posReqJsonObj);
QString fm_open_id_pos = getPosJsonValue(PosProps.Fm_open_id).toString();
QString fm_open_id_session = session()->data(PosProps.Fm_open_id).toString();
if(fm_open_id_session == "" || fm_open_id_pos!=fm_open_id_session || session()->data(PosProps.CanPay).toBool() == false) {
preTask = new TaskLogin(posReqJsonObj, _session, this);
preTask->session()->addData(PosProps.FM_Type, FM_Pay);
QByteArray loginRst = preTask->doTask();
preTask->doTask();
if(preTask->error() != FM_API_SUCCESS) {
return loginRst;
setError(preTask->error());
}
this->_session = preTask->session();
}
......@@ -41,7 +45,6 @@ QByteArray TaskPay::doTask()
couponThread = new TaskCouponThread(posReqJsonObj, _session, this);
couponThread->start();
connect(couponThread, SIGNAL(finished(Session*)), SLOT(onGetCoupons(Session*)));
return FMTask::doTask();
}
void TaskPay::onGetCoupons(Session* session)
......@@ -69,8 +72,8 @@ void TaskPay::packageServerReq()
QJsonObject transData;
transData[ServerProps(PosProps.TransId)] = getPosJsonValue(PosProps.TransId);
transData[ServerProps(PosProps.Fm_id)] = getPosJsonValue(PosProps.Fm_id);
transData[ServerProps(PosProps.Fm_id)] = "";
transData[ServerProps(PosProps.Fm_order_id)] = getPosJsonValue(PosProps.Fm_order_id);
transData[ServerProps(PosProps.Fm_order_id)] = "";
transData[ServerProps(PosProps.Fm_open_id)] = session()->data(PosProps.Fm_open_id).toString();
QJsonArray products;
......@@ -158,8 +161,9 @@ void TaskPay::packageServerReq()
void TaskPay::packagePOSRsp()
{
int status = getServerJsonValue(PosProps.StatusCode).toInt();
QString orderId = getPosJsonValue(PosProps.OrderId).toString();
QString transId = getPosJsonValue(PosProps.TransId).toString();
QString fmId = getServerJsonValue(PosProps.Fm_id).toString();
QString fm_order_id = getServerJsonValue(PosProps.Fm_order_id).toString();
QString fm_open_id = session()->data(PosProps.Fm_open_id).toString();
bool isOk = (status == FM_API_SUCCESS);
......@@ -169,14 +173,19 @@ void TaskPay::packagePOSRsp()
posRspJsonObj[PosProps.Prompt] = 0;
posRspJsonObj[PosProps.Settlement] = 1;
posRspJsonObj[PosProps.Fm_open_id] = fm_open_id;
posRspJsonObj[PosProps.Fm_id] = fmId;
posRspJsonObj[PosProps.Fm_order_id] = fm_order_id;
Order *order = new Order(this);
DBOP::GetOrderByOrderId(transId, order);
DBOP::GetOrderByOrderId(orderId, order);
// 如果订单是新的,则保存在数据库中
if(isOk && order->isNew()) {
order->SetPropertiesByJson(posReqJsonObj);
order->SetPropertiesByJson(posRspJsonObj);
FMItem::StoreInfo storeInfo;
DBOP::GetLastItem(&storeInfo);
order->setStoreInfoDBID(storeInfo.DBID());
isOk = DBOP::Save(order);
}
......@@ -210,7 +219,7 @@ void TaskPay::packagePOSRsp()
pay->setTransId(transId);
pay->setOrderDBID(order->DBID());
pay->setAccount(fm_open_id);
pay->setFmTransId(fmId);
pay->setFmTransId(transId);
DBOP::Save(pay);
order->setPaidAmount(order->paidAmount()+amount);
DBOP::Save(order);
......
......@@ -11,8 +11,8 @@ class TaskPay : public FMTask
Q_OBJECT
public:
explicit TaskPay(QJsonObject &jsonObj, Session *session = 0, QObject *parent = 0);
QByteArray doTask();
void packagePOSReq();
void setWindow();
void packageServerReq();
void packagePOSRsp();
......
......@@ -4,9 +4,11 @@
#include "items/item.h"
#include "items/order.h"
#include "items/pay.h"
#include "items/storeinfo.h"
#include "taskothers.h"
#include <QSharedPointer>
#include <QJsonDocument>
#include "fmmsgwnd.h"
TaskRefund::TaskRefund(QJsonObject &jsonObj, Session *session, QObject *parent)
: FMTask(jsonObj, FM_Refund, session, parent)
......@@ -19,20 +21,25 @@ TaskRefund::~TaskRefund()
}
void TaskRefund::packagePOSReq()
{
QString orderId = getPosJsonValue(PosProps.OrderId).toString();
session()->addData(PosProps.OrderId, orderId);
//! TODO 需要从其他数据库查询营业日、门店信息等。
FMItem::StoreInfo storeInfo;
bool isOk = DBOP::GetLastItem(&storeInfo);
if(isOk) {
posReqJsonObj = storeInfo.toJson(QStringList(), posReqJsonObj);
}
}
void TaskRefund::setWindow()
{
_window = new FMVipRefund();
connect(qobject_cast<FMVipRefund*>(_window), &FMVipRefund::refundPay, this, &TaskRefund::onRefundPay);
QString fmId = getPosJsonValue(PosProps.Fm_id).toString();
QString transId = getPosJsonValue(PosProps.TransId).toString();
session()->addData(PosProps.Fm_id, fmId);
session()->addData(PosProps.TransId, transId);
//! TODO 需要从其他数据库查询营业日、门店信息等。
auto orderPointer = DBOP::GetOrderByOrderId(transId);
posReqJsonObj = orderPointer->toJson(QStringList(), posReqJsonObj);
connect(qobject_cast<FMVipRefund*>(_window), &FMVipRefund::refundOrder, this, &TaskRefund::onRefundOrder);
}
void TaskRefund::packageServerReq()
......@@ -53,6 +60,7 @@ void TaskRefund::onRefundPay(int DBID)
posReqJsonObj = orderPointer->toJson(QStringList(), posReqJsonObj);
posReqJsonObj[PosProps.TransId] = orderPointer->orderId();
TaskRefundPay refundPay(posReqJsonObj, this);
QByteArray rspData = refundPay.doTask();
......@@ -71,3 +79,22 @@ void TaskRefund::onRefundPay(int DBID)
FMMsgWnd::FailureWnd(msg, _window);
}
}
void TaskRefund::onRefundOrder(int DBID)
{
QSharedPointer<FMItem::Order> orderPointer = DBOP::GetOrderByDBId(DBID);
posReqJsonObj[PosProps.Fm_order_id] = orderPointer->fmOrderId();
posReqJsonObj[PosProps.OrderId] = orderPointer->orderId();
TaskRefundOrder refundOrder(posReqJsonObj, this);
QByteArray rspData = refundOrder.doTask();
QJsonObject rspObj = QJsonDocument::fromJson(rspData).object();
if(rspObj[PosProps.StatusCode].toInt() == FM_API_SUCCESS) {
orderPointer->setPaidAmount(0);
DBOP::Save(orderPointer.data());
qobject_cast<FMVipRefund*>(_window)->refresh();
} else {
QString msg = searchJsonValue(rspObj, PosProps.Msg).toString();
FMMsgWnd::FailureWnd(msg, _window);
}
}
......@@ -10,12 +10,14 @@ public:
~TaskRefund();
private:
void packagePOSReq();
void setWindow() override;
void packageServerReq();
void packagePOSRsp();
private:
void onRefundPay(int DBID);
void onRefundOrder(int DBID);
};
#endif // TASKREFUND_H
......@@ -8,6 +8,7 @@
#include "dbop.h"
#include "items/order.h"
#include "items/pay.h"
#include "items/storeinfo.h"
FMVipRefund::FMVipRefund(QDialog *parent) :
FMVipWnd(parent),
......@@ -33,21 +34,29 @@ bool FMVipRefund::initWnd(Session *session)
ui->operator_label->setText(session->data(PosProps.OperatorId).toString());
ui->bd_label->setText(session->data(PosProps.BussinessDate).toString());
QString transId = session->data(PosProps.TransId).toString();
DBOP::GetOrderByOrderId(transId, order);
QString orderId = session->data(PosProps.OrderId).toString();
DBOP::GetOrderByOrderId(orderId, order);
FMItem::StoreInfo storeInfo;
DBOP::GetItemByDBID(order->storeInfoDBID(), &storeInfo);
if(order->isNew()) {
ui->textEdit_order->setText(QString::fromLocal8Bit("未找到transId为 %1 的订单! ").arg(transId));
ui->textEdit_order->setText(QString::fromLocal8Bit("未找到orderId为 %1 的订单! ").arg(orderId));
} else {
QString orderInfo = QString::fromLocal8Bit("POS流水号:%1\n"
QString orderInfo = QString::fromLocal8Bit("POS订单号:%1\n"
"非码订单号:%2\n"
"订单总额:%3 \t 已付金额:%4\n"
"营业日:%5 \t 收银员:%6\n"
"门店号:%7 \t POS号:%8\n")
.arg(order->orderId()).arg(order->fmOrderId())
.arg(order->orderAmount()/100.0).arg(order->paidAmount()/100.0)
.arg(order->businessDate()).arg(order->operatorId())
.arg(order->storeId()).arg(order->posId());
.arg(storeInfo.businessDate()).arg(storeInfo.operatorId())
.arg(storeInfo.storeId()).arg(storeInfo.posId());
if(order->settled()) {
orderInfo += QString::fromLocal8Bit("订单已结算,可以退整单\n");
} else {
orderInfo += QString::fromLocal8Bit("订单还未结算,可以选择退某笔支付\n");
}
ui->textEdit_order->setText(orderInfo);
pays = DBOP::GetPaysByOrderDBId(order->DBID());
......@@ -105,3 +114,8 @@ void FMVipRefund::refresh()
{
initWnd(this->session());
}
void FMVipRefund::on_btn_refund_order_clicked()
{
emit refundOrder(order->DBID());
}
......@@ -27,10 +27,13 @@ public:
signals:
void refundPay(int);
void refundOrder(int);
private slots:
void onBtnRefundClicked();
void on_btn_refund_order_clicked();
private:
Ui::FMVipRefund *ui;
......
......@@ -209,6 +209,13 @@
</property>
</widget>
</item>
<item>
<widget class="QPushButton" name="btn_refund_order">
<property name="text">
<string>退整单</string>
</property>
</widget>
</item>
</layout>
</widget>
</item>
......
......@@ -156,7 +156,7 @@ void TestItem::test_PropertyNames_data()
QTest::newRow("Item") << gItem << itemPNames.length() << itemPNames;
orderPNames << "objectName" << "DBID" <<"order_id" << "fm_order_id" << "order_amount" << "paid_amount" << "undis_amount"
<< "store_id" << "pos_id" << "operator_id" << "business_date" << "fm_open_id" << "products" << "settled";
<< "fm_open_id" << "products" << "settled" << "storeInfoDBID";
QTest::newRow("Order") << qobject_cast<Item*>(gOrder) << orderPNames.length() << orderPNames;
payPNames << "objectName" << "DBID" <<"pay_id" << "pay_str" << "pay_amount" << "refund_amount" << "dis_amount" << "account" << "trans_id" << "fmTransId" << "orderDBID";
......
......@@ -46,13 +46,36 @@ void TestPlugin::test_dotask_data()
{
QTest::addColumn<QByteArray>("reqData");
// QTest::newRow("Refund") << QByteArray("{\"fm_cmd\": 1004,\"trans_id\": \"12345\"}");
// QTest::newRow("Refund not") << QByteArray("{\"fm_cmd\": 1004,\"trans_id\": \"123456\"}");
// QTest::newRow("SetStoreInfo") << QByteArray("{\"fm_cmd\": 1000,\"store_id\": \"fm9999\",\"pos_id\": \"1\",\"business_date\": \"20171016\",\"operator_id\": \"001\"}");
// QTest::newRow("SetStoreInfo_need_posId") << QByteArray("{\"fm_cmd\": 1000,\"store_id\": \"fm9999\",\"pos_id\": \"\",\"business_date\": \"20171016\",\"operator_id\": \"001\"}");
// QTest::newRow("SetStoreInfo_notnull_posId") << QByteArray("{\"fm_cmd\": 1000,\"store_id\": \"fm9999\",\"business_date\": \"20171016\",\"operator_id\": \"001\"}");
// QTest::newRow("SetStoreInfo_error_type") << QByteArray("{\"fm_cmd\": 1000,\"store_id\": \"fm9999\",\"pos_id\": 1,\"business_date\": \"20171016\",\"operator_id\": \"001\"}");
QTest::newRow("Refund") << QByteArray("{\"fm_cmd\": 1004,\"order_id\": \"20171018001\"}");
QTest::newRow("Refund not") << QByteArray("{\"fm_cmd\": 1004,\"order_id\": \"12345\"}");
QTest::newRow("SetStoreInfo") << QByteArray("{\"fm_cmd\": 1000,\"store_id\": \"99999\",\"pos_id\": \"1\",\"business_date\": \"20171016\",\"operator_id\": \"001\"}");
QTest::newRow("SetStoreInfo_need_posId") << QByteArray("{\"fm_cmd\": 1000,\"store_id\": \"fm9999\",\"pos_id\": \"\",\"business_date\": \"20171016\",\"operator_id\": \"001\"}");
QTest::newRow("SetStoreInfo_notnull_posId") << QByteArray("{\"fm_cmd\": 1000,\"store_id\": \"fm9999\",\"business_date\": \"20171016\",\"operator_id\": \"001\"}");
QTest::newRow("SetStoreInfo_error_type") << QByteArray("{\"fm_cmd\": 1000,\"store_id\": \"fm9999\",\"pos_id\": 1,\"business_date\": \"20171016\",\"operator_id\": \"001\"}");
QTest::newRow("Login") << QByteArray("{\"fm_cmd\": 1001,\"member_sign\": \"12345\"}");
QTest::newRow("Pay") << QByteArray("{"
" \"fm_cmd\": 1003,"
" \"order_amount\":9000,"
" \"trans_amount\": 8000,"
" \"undis_amount\": 8000,"
" \"order_id\": \"20171018001\","
" \"trans_id\": \"100001\","
" \"products\": ["
" {"
" \"pid\": \"0079020\","
" \"name\": \"测试商品1\","
" \"price\": 1000,"
" \"consume_num\": 1"
" },"
" { "
" \"pid\": \"0077842\","
" \"name\": \"测试商品2\","
" \"price\": 8000,"
" \"consume_num\": 2"
" }"
" ]"
"}");
QTest::newRow("Order") << QByteArray("{\"fm_cmd\": 1007,\"order_id\": \"20171018001\"}");
}
void TestPlugin::test_dotask()
......
......@@ -5,7 +5,7 @@
#define VER_MINOR 1
#define VER_REVISION 0
#define VER_BUILD 14
#define VER_BUILD 16
//! 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