Commit 5b8f71e5 by xiaoqing.gu

1. 拉取代码。

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