Commit 5b8f71e5 by xiaoqing.gu

1. 拉取代码。

parents cef05731 3434814d
...@@ -12,6 +12,12 @@ ...@@ -12,6 +12,12 @@
#include "item.h" #include "item.h"
#include <QDebug> #include <QDebug>
#if defined(FM_TEST)
#define DBFileName "Test.db"
#else
#define DBFileName "FreemudPOS.db"
#endif
#if defined(DATABASE_MYSQL) #if defined(DATABASE_MYSQL)
# include <odb/mysql/database.hxx> # include <odb/mysql/database.hxx>
#elif defined(DATABASE_SQLITE) #elif defined(DATABASE_SQLITE)
...@@ -142,7 +148,7 @@ public: ...@@ -142,7 +148,7 @@ public:
private: private:
DBConnect() : DBConnect() :
_dbName("Test.db") _dbName(DBFileName)
{ {
_db_pointer = std::make_shared<odb::sqlite::database>(_dbName, SQLITE_OPEN_READWRITE | SQLITE_OPEN_CREATE); _db_pointer = std::make_shared<odb::sqlite::database>(_dbName, SQLITE_OPEN_READWRITE | SQLITE_OPEN_CREATE);
OpenDatabase(); OpenDatabase();
...@@ -162,24 +168,17 @@ inline std::shared_ptr<odb::database> DBSP() { ...@@ -162,24 +168,17 @@ inline std::shared_ptr<odb::database> DBSP() {
inline QSharedPointer<StoreInfo> GetLastStoreInfo() inline QSharedPointer<StoreInfo> GetLastStoreInfo()
{ {
QSharedPointer<StoreInfo> storeInfoP(new StoreInfo()); QSharedPointer<StoreInfo> storeInfoP;
try { try {
odb::transaction t (DBSP()->begin ()); odb::transaction t (DBSP()->begin ());
odb::result<StoreInfo_last> sl(DBSP()->query<StoreInfo_last>()); odb::result<StoreInfo> sl(DBSP()->query<StoreInfo>("order by id desc limit 0,1"));
if(!sl.empty()) { if(!sl.empty()) {
storeInfoP->setId(sl.begin()->_id); storeInfoP = sl.begin().load();
storeInfoP->setStoreId(sl.begin()->_storeId);
storeInfoP->setPosId(sl.begin()->_posId);
storeInfoP->setBusinessDate(sl.begin()->_businessDate);
storeInfoP->setOperatorId(sl.begin()->_operatorId);
} else {
storeInfoP.clear();
} }
t.commit (); t.commit ();
} catch (const odb::exception &e) { } catch (const odb::exception &e) {
storeInfoP.clear();
qDebug() << "Exception: Get last store info: " << e.what(); qDebug() << "Exception: Get last store info: " << e.what();
} }
return storeInfoP; return storeInfoP;
......
#include "item.h" #include "item.h"
#include "database.h"
namespace DB { namespace DB {
Item::Item() Item::Item()
...@@ -123,21 +123,34 @@ void Order::setRefunded(bool refunded) ...@@ -123,21 +123,34 @@ void Order::setRefunded(bool refunded)
_refunded = refunded; _refunded = refunded;
} }
PayList &Order::payList() LazyPayList &Order::payList()
{ {
return _payList; return _payList;
} }
const PayList &Order::payList() const const LazyPayList &Order::payList() const
{ {
return _payList; return _payList;
} }
void Order::setPayList(const PayList &payList) void Order::setPayList(const LazyPayList &payList)
{ {
_payList = payList; _payList = payList;
} }
PayList Order::getCanRefundPatList()
{
PayList canRefundPays;
for(LazyPayList::iterator it(_payList.begin()); it!=_payList.end(); it++) {
QLazySharedPointer<Pay>& lsp(*it);
auto sp = lsp.load();
if(sp->payAmount() > sp->refundAmount()) {
canRefundPays.append(sp);
}
}
return canRefundPays;
}
QLazySharedPointer<StoreInfo> &Order::storeInfo() QLazySharedPointer<StoreInfo> &Order::storeInfo()
{ {
return _storeInfo; return _storeInfo;
......
...@@ -24,7 +24,8 @@ class Order; ...@@ -24,7 +24,8 @@ class Order;
class Pay; class Pay;
class StoreInfo; class StoreInfo;
typedef QList<QLazySharedPointer<Pay> > PayList; typedef QList<QLazySharedPointer<Pay> > LazyPayList;
typedef QList<QSharedPointer<Pay> > PayList;
// 可为空 // 可为空
#pragma db value(int) null #pragma db value(int) null
...@@ -81,9 +82,11 @@ public: ...@@ -81,9 +82,11 @@ public:
bool refunded() const; bool refunded() const;
void setRefunded(bool refunded); void setRefunded(bool refunded);
PayList &payList(); LazyPayList &payList();
const PayList &payList() const; const LazyPayList &payList() const;
void setPayList(const PayList &payList); void setPayList(const LazyPayList &payList);
PayList getCanRefundPatList();
QLazySharedPointer<StoreInfo> &storeInfo(); QLazySharedPointer<StoreInfo> &storeInfo();
const QLazySharedPointer<StoreInfo> &storeInfo() const; const QLazySharedPointer<StoreInfo> &storeInfo() const;
...@@ -112,7 +115,7 @@ private: ...@@ -112,7 +115,7 @@ private:
bool _refunded; bool _refunded;
#pragma db inverse(_order) #pragma db inverse(_order)
PayList _payList; LazyPayList _payList;
#pragma db not_null #pragma db not_null
QLazySharedPointer<StoreInfo> _storeInfo; QLazySharedPointer<StoreInfo> _storeInfo;
...@@ -218,21 +221,21 @@ private: ...@@ -218,21 +221,21 @@ private:
QString _businessDate; QString _businessDate;
}; };
#pragma db view object(StoreInfo) \ //#pragma db view object(StoreInfo) \
query((?) + "order by id desc limit 0,1") // query((?) + "order by id desc limit 0,1")
struct StoreInfo_last //struct StoreInfo_last
{ //{
#pragma db column(StoreInfo::_id) //#pragma db column(StoreInfo::_id)
unsigned long _id; // unsigned long _id;
#pragma db column(StoreInfo::_storeId) //#pragma db column(StoreInfo::_storeId)
QString _storeId; // QString _storeId;
#pragma db column(StoreInfo::_posId) //#pragma db column(StoreInfo::_posId)
QString _posId; // QString _posId;
#pragma db column(StoreInfo::_operatorId) //#pragma db column(StoreInfo::_operatorId)
QString _operatorId; // QString _operatorId;
#pragma db column(StoreInfo::_businessDate) //#pragma db column(StoreInfo::_businessDate)
QString _businessDate; // QString _businessDate;
}; //};
} }
......
...@@ -168,11 +168,11 @@ void TaskFinal::packageServerReq() ...@@ -168,11 +168,11 @@ void TaskFinal::packageServerReq()
DBSP()->reload<Order>(_order); DBSP()->reload<Order>(_order);
// 从数据库读取支付信息 // 从数据库读取支付信息
PayList payList = _order->payList(); LazyPayList payList = _order->payList();
// 转成服务端需要的payArray // 转成服务端需要的payArray
QJsonArray payArray; QJsonArray payArray;
for (PayList::const_iterator it = payList.constBegin(); it!=payList.constEnd(); it++) { for (LazyPayList::const_iterator it = payList.constBegin(); it!=payList.constEnd(); it++) {
QJsonObject payObj; QJsonObject payObj;
payObj[ServerProps(PosProps.Amount)] = it->load()->payAmount(); payObj[ServerProps(PosProps.Amount)] = it->load()->payAmount();
payObj[ServerProps(PosProps.TransId)] = it->load()->transId(); payObj[ServerProps(PosProps.TransId)] = it->load()->transId();
......
...@@ -20,7 +20,7 @@ void TaskQRPay::packagePOSReq() ...@@ -20,7 +20,7 @@ void TaskQRPay::packagePOSReq()
QSharedPointer<StoreInfo> storeInfo = GetLastStoreInfo(); QSharedPointer<StoreInfo> storeInfo = GetLastStoreInfo();
QSharedPointer<Order> _order; QSharedPointer<Order> _order(new Order());
try { try {
// _transactionPay.reset(DBSP()->begin()); // _transactionPay.reset(DBSP()->begin());
transaction t(DBSP()->begin()); transaction t(DBSP()->begin());
...@@ -29,7 +29,7 @@ void TaskQRPay::packagePOSReq() ...@@ -29,7 +29,7 @@ void TaskQRPay::packagePOSReq()
odb::result<Order> r = DBSP()->query<Order>(query<Order>::orderId == orderId); odb::result<Order> r = DBSP()->query<Order>(query<Order>::orderId == orderId);
if(r.empty()) { if(r.empty()) {
QSharedPointer<StoreInfo> transStoreInfo; QSharedPointer<StoreInfo> transStoreInfo(new StoreInfo());
transStoreInfo->setStoreId(getPosJsonValue(PosProps.StoreId).toString()); transStoreInfo->setStoreId(getPosJsonValue(PosProps.StoreId).toString());
transStoreInfo->setPosId(getPosJsonValue(PosProps.PosId).toString()); transStoreInfo->setPosId(getPosJsonValue(PosProps.PosId).toString());
transStoreInfo->setBusinessDate(getPosJsonValue(PosProps.BusinessDate).toString()); transStoreInfo->setBusinessDate(getPosJsonValue(PosProps.BusinessDate).toString());
...@@ -41,7 +41,7 @@ void TaskQRPay::packagePOSReq() ...@@ -41,7 +41,7 @@ void TaskQRPay::packagePOSReq()
_order->setStoreInfo(storeInfo); _order->setStoreInfo(storeInfo);
} }
_order->setOrderId(getPosJsonValue(PosProps.OrderId).toString()); _order->setOrderId(orderId);
_order->setOrderAmount(getPosJsonValue(PosProps.OrderAmount).toInt()); _order->setOrderAmount(getPosJsonValue(PosProps.OrderAmount).toInt());
_order->setUndisAmount(getPosJsonValue(PosProps.UndisAmount).toInt()); _order->setUndisAmount(getPosJsonValue(PosProps.UndisAmount).toInt());
...@@ -50,8 +50,6 @@ void TaskQRPay::packagePOSReq() ...@@ -50,8 +50,6 @@ void TaskQRPay::packagePOSReq()
_order->setProductText(productText); _order->setProductText(productText);
DBSP()->persist(_order); DBSP()->persist(_order);
t.commit();
} else { } else {
_order = DBSP()->load<Order>(r.begin()->id()); _order = DBSP()->load<Order>(r.begin()->id());
...@@ -62,7 +60,9 @@ void TaskQRPay::packagePOSReq() ...@@ -62,7 +60,9 @@ void TaskQRPay::packagePOSReq()
setError(FM_API_ERROR, info); setError(FM_API_ERROR, info);
return; return;
} }
_order->setOrderAmount(getPosJsonValue(PosProps.OrderAmount).toInt());
//! 目前接口中支付时OrderAmount可能和会员的不同,暂时不修改订单金额。
// _order->setOrderAmount(getPosJsonValue(PosProps.OrderAmount).toInt());
_order->setUndisAmount(getPosJsonValue(PosProps.UndisAmount).toInt()); _order->setUndisAmount(getPosJsonValue(PosProps.UndisAmount).toInt());
QJsonArray productArray = getPosJsonValue(PosProps.Products).toArray(); QJsonArray productArray = getPosJsonValue(PosProps.Products).toArray();
...@@ -96,11 +96,10 @@ void TaskQRPay::packagePOSReq() ...@@ -96,11 +96,10 @@ void TaskQRPay::packagePOSReq()
_order->setPaidAmount(_order->paidAmount()+pay->payAmount()); _order->setPaidAmount(_order->paidAmount()+pay->payAmount());
} }
}
DBSP()->update(_order); DBSP()->update(_order);
t.commit(); t.commit();
}
} catch (const odb::exception &e) { } catch (const odb::exception &e) {
QString info = QString::fromLocal8Bit("存储支付信息时异常:%1").arg(e.what()); QString info = QString::fromLocal8Bit("存储支付信息时异常:%1").arg(e.what());
FMP_ERROR() << info; FMP_ERROR() << info;
......
...@@ -34,20 +34,20 @@ void TaskQRRefund::packagePOSReq() ...@@ -34,20 +34,20 @@ void TaskQRRefund::packagePOSReq()
} else { } else {
_order = DBSP()->load<Order>(r.begin()->id()); _order = DBSP()->load<Order>(r.begin()->id());
// 检查订单是否已结算 // // 检查订单是否已结算
if(_order->settled()) { // if(_order->settled()) {
QString info = QString::fromLocal8Bit("订单已结算,不能再进行支付."); // QString info = QString::fromLocal8Bit("订单已结算,不能进行退款.");
FMP_ERROR() << info; // FMP_ERROR() << info;
setError(FM_API_ERROR, info); // setError(FM_API_ERROR, info);
return; // return;
} // }
} }
QSharedPointer<Pay> refundPay; QSharedPointer<Pay> refundPay;
PayList pays = _order->payList(); LazyPayList pays = _order->payList();
foreach (auto payLazyPointer, pays) { foreach (auto payLazyPointer, pays) {
//! WARNING: 临时的找第三方支付的方法 //! WARNING: 临时的找第三方支付的方法
if(payLazyPointer.load()->transId() != orderId) { if(payLazyPointer.load()->thirdTransId()!="") {
refundPay = payLazyPointer.getEager(); refundPay = payLazyPointer.getEager();
break; break;
} }
......
...@@ -1073,6 +1073,17 @@ font: 13px &quot;微软雅黑&quot;; ...@@ -1073,6 +1073,17 @@ font: 13px &quot;微软雅黑&quot;;
</layout> </layout>
</widget> </widget>
<layoutdefault spacing="6" margin="11"/> <layoutdefault spacing="6" margin="11"/>
<tabstops>
<tabstop>pay_edit</tabstop>
<tabstop>pay_btn</tabstop>
<tabstop>coupon_page</tabstop>
<tabstop>coupon_prev_btn</tabstop>
<tabstop>coupon_next_btn</tabstop>
<tabstop>close_btn</tabstop>
<tabstop>pay_key</tabstop>
<tabstop>score_edit</tabstop>
<tabstop>score_key</tabstop>
</tabstops>
<resources/> <resources/>
<connections/> <connections/>
</ui> </ui>
...@@ -43,6 +43,29 @@ TEST_F(TestDBQuery, Load) ...@@ -43,6 +43,29 @@ TEST_F(TestDBQuery, Load)
} }
} }
TEST_F(TestDBQuery, QueryAll)
{
try {
transaction t(DBSP()->begin());
result<Order> r(DBSP()->query<Order>());
ASSERT_FALSE(r.empty());
QSharedPointer<Order> firstOrder = r.begin().load();
EXPECT_EQ(firstOrder->id(), 1);
for(result<Order>::iterator it(r.begin()); it!=r.end(); ++it) {
EXPECT_NE(it->orderId(), "");
}
t.commit();
} catch (const odb::exception& e) {
FAIL() << "Exception: " << e.what() << std::endl;
}
}
TEST_F(TestDBQuery, Query) TEST_F(TestDBQuery, Query)
{ {
try { try {
...@@ -103,4 +126,46 @@ TEST_F(TestDBQuery, T_GetLastStoreInfo) ...@@ -103,4 +126,46 @@ TEST_F(TestDBQuery, T_GetLastStoreInfo)
EXPECT_EQ(newLastSi->businessDate(), newSi.businessDate()); EXPECT_EQ(newLastSi->businessDate(), newSi.businessDate());
} }
TEST_F(TestDBQuery, GetCanRefund)
{
try {
odb::transaction t(DBSP()->begin());
QSharedPointer<StoreInfo> storeInfo(new StoreInfo);
storeInfo->setStoreId("99999");
DBSP()->persist(storeInfo);
ASSERT_NE(storeInfo->id(), 1);
QSharedPointer<Order> order(new Order());
order->setOrderAmount(500);
order->setPaidAmount(350);
order->setStoreInfo(storeInfo);
DBSP()->persist(order);
ASSERT_NE(order->id(), 1);
// 插入5个支付,其中一个已经全部退款
for(int i=0; i<5; i++) {
QSharedPointer<Pay> pay(new Pay());
pay->setOrder(order);
pay->setPayAmount(100);
if(i==0) {
pay->setRefundAmount(100);
} else if(i==1) {
pay->setRefundAmount(50);
}
DBSP()->persist(pay);
ASSERT_NE(pay->id(), 1);
}
DBSP()->reload(order);
ASSERT_EQ(order->payList().size(), 5);
PayList pays = order->getCanRefundPatList();
ASSERT_EQ(pays.size(), 4);
EXPECT_EQ(pays.first()->refundAmount(), 50);
t.commit();
} catch (const odb::exception& e) {
FAIL() << "Exception: " << e.what() << std::endl;
}
}
#endif // TST_DB_QUERY_H #endif // TST_DB_QUERY_H
...@@ -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 49 #define VER_BUILD 52
//! 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