Commit 5c233792 by NitefullWind

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

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