Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
F
fmp_vip
Overview
Overview
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
zhenfei.zhang
fmp_vip
Commits
a77fbb94
Commit
a77fbb94
authored
Jan 31, 2018
by
NitefullWind
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
1. 实现订单结算。
parent
26d61fae
Hide whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
196 additions
and
136 deletions
+196
-136
fmvip/task/taskfinal.cpp
+177
-130
fmvip/task/taskfinal.h
+2
-5
tests/autotest/tst_db_query.h
+16
-0
version.h
+1
-1
No files found.
fmvip/task/taskfinal.cpp
View file @
a77fbb94
...
...
@@ -4,141 +4,180 @@
#include "fmp_logger_i.h"
#include "fmmsgwnd.h"
#include "fmp_vip_settings.h"
//#include "dbop.h"
//#include "items/order.h"
//#include "items/pay.h"
//#include "items/storeinfo.h"
#include <QDateTime>
#include <QJsonDocument>
#include <QJsonArray>
#include <QCryptographicHash>
using
namespace
DB
;
TaskFinal
::
TaskFinal
(
QJsonObject
&
jsonObj
,
Session
*
session
,
QObject
*
parent
)
:
FMTaskNoWnd
(
jsonObj
,
FM_Final
,
session
,
parent
)
// ,_order(new FMItem::Order(this
))
,
_order
(
new
Order
(
))
,
isUseVipPay
(
false
)
{
}
TaskFinal
::~
TaskFinal
()
{
// delete _order;
}
void
TaskFinal
::
packagePOSReq
()
{
// FMItem::StoreInfo storeInfo;
// bool isOk = DBOP::GetLastItem(&storeInfo);
// if(isOk) {
// posReqJsonObj = storeInfo.toJson(QStringList(), posReqJsonObj);
// _order->setStoreInfoDBID(storeInfo.DBID());
// } else {
// QString info = QString::fromLocal8Bit("未设置门店信息,不能进行结算.");
// FMP_WARN() << info;
// setError(FM_API_ERROR, info);
// return;
// }
// QString orderId = getPosJsonValue(PosProps.OrderId).toString();
// DBOP::GetOrderByOrderId(orderId, _order);
// if(_order->isNew()) {
// _order->SetPropertiesByJson(posReqJsonObj);
// DBOP::Save(_order);
// } else if(_order->settled()) {
// QString info = QString::fromLocal8Bit("订单已结算,不能重复结算.");
// FMP_WARN() << info;
// setError(FM_API_ERROR, info);
// }
QSharedPointer
<
StoreInfo
>
storeInfo
=
GetLastStoreInfo
();
if
(
storeInfo
==
nullptr
)
{
QString
info
=
QString
::
fromLocal8Bit
(
"未设置门店信息,不能进行支付."
);
setError
(
FM_API_ERROR
,
info
);
return
;
}
posReqJsonObj
[
PosProps
.
StoreId
]
=
storeInfo
->
storeId
();
posReqJsonObj
[
PosProps
.
PosId
]
=
storeInfo
->
posId
();
posReqJsonObj
[
PosProps
.
BusinessDate
]
=
storeInfo
->
businessDate
();
posReqJsonObj
[
PosProps
.
OperatorId
]
=
storeInfo
->
operatorId
();
QString
orderId
=
getPosJsonValue
(
PosProps
.
OrderId
).
toString
();
try
{
// _transactionPay.reset(DBSP()->begin());
transaction
t
(
DBSP
()
->
begin
());
// 检查订单是否已存在
odb
::
result
<
Order
>
r
=
DBSP
()
->
query
<
Order
>
(
query
<
Order
>::
orderId
==
orderId
);
if
(
r
.
empty
())
{
_order
->
setStoreInfo
(
storeInfo
);
_order
->
setOrderId
(
getPosJsonValue
(
PosProps
.
OrderId
).
toString
());
_order
->
setOrderAmount
(
getPosJsonValue
(
PosProps
.
OrderAmount
).
toInt
());
_order
->
setUndisAmount
(
getPosJsonValue
(
PosProps
.
UndisAmount
).
toInt
());
QJsonObject
productObj
=
getPosJsonValue
(
PosProps
.
Products
).
toObject
();
QString
productText
=
QJsonDocument
(
productObj
).
toJson
(
QJsonDocument
::
Compact
);
_order
->
setProductText
(
productText
);
DBSP
()
->
persist
(
_order
);
t
.
commit
();
}
else
{
_order
=
DBSP
()
->
load
<
Order
>
(
r
.
begin
()
->
id
());
// 检查订单是否已结算
if
(
_order
->
settled
())
{
QString
info
=
QString
::
fromLocal8Bit
(
"订单已结算,不能重复结算."
);
FMP_ERROR
()
<<
info
;
setError
(
FM_API_ERROR
,
info
);
return
;
}
}
}
catch
(
const
odb
::
exception
&
e
)
{
QString
info
=
QString
::
fromLocal8Bit
(
"查询订单时异常:%1"
).
arg
(
e
.
what
());
FMP_ERROR
()
<<
info
;
setError
(
FM_API_ERROR
,
info
);
return
;
}
}
void
TaskFinal
::
packageServerReq
()
{
// QMap<QString, QString> key2proMap;
// QStringList keys;
// QJsonObject dataObj;
// 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();
// QStringList proKeys;
// proKeys << PosProps.ConsumeNum << PosProps.ProductId << PosProps.Price;
// foreach (const QString &proKey, proKeys) {
// productText = productText.replace(proKey, ServerProps(proKey));
// dataObj[ServerProps(PosProps.PaidAmount)] = _order->orderAmount();
// }
// QJsonArray proArray = QJsonDocument::fromJson(_order->productText().toUtf8()).array();
// dataObj[ServerProps(PosProps.Products)] = proArray;
//// QJsonArray proArray = QJsonDocument::fromJson(_order->productText().toUtf8()).array();
//// foreach (QJsonValue proValue, proArray) {
//// QJsonObject proObj;
//// QStringList proKeys;
//// proKeys << PosProps.ConsumeNum << PosProps.ProductId << PosProps.Price;
//// foreach (const QString &proKey, proKeys) {
//// proObj[ServerProps(proKey)] = proValue.toObject()[proKey];
//// }
//// }
// // 从数据库读取支付信息
// QList<QSharedPointer<FMItem::Pay> > payList = DBOP::GetPaysByOrderDBId(_order->DBID());
// // 将POS新传的支付方式加入已付到金额中
// foreach (QJsonValue payValue, getPosJsonValue(PosProps.Pay_list).toArray()) {
// QJsonObject pay_id = payValue.toObject();
// QSharedPointer<FMItem::Pay> payPointer = QSharedPointer<FMItem::Pay>(new FMItem::Pay(this));
// payPointer->SetPropertiesByJson(pay_id);
// payPointer->setOrderDBID(_order->DBID());
// if(payPointer->payId() == "20001" || payPointer->payId() == "10001" || payPointer->payId() == "10004") {
// FMP_WARN() << QString::fromLocal8Bit("POS无需传会员支付和非码支付信息.");
// continue;
// } else {
// _order->setPaidAmount(_order->paidAmount() + payPointer->payAmount());
// payList.append(payPointer);
// }
// }
// // 如果订单还未付完,默认以现金补全
// if(_order->orderAmount() > _order->paidAmount()) {
// QSharedPointer<FMItem::Pay> cashPay = QSharedPointer<FMItem::Pay>(new FMItem::Pay());
// cashPay->setPayId("20005");
// cashPay->setPayStr(QString::fromLocal8Bit("现金支付(默认)"));
// cashPay->setPayAmount(_order->orderAmount() - _order->paidAmount());
// cashPay->setOrderDBID(_order->DBID());
// bool isOk = DBOP::Save(cashPay.data());
// if(isOk) {
// _order->setPaidAmount(_order->orderAmount());
// payList.append(cashPay);
// }
// }
// // 转成服务端需要的payArray
// QJsonArray payArray;
// for (QList<QSharedPointer<FMItem::Pay> >::const_iterator it = payList.constBegin(); it!=payList.constEnd(); it++) {
// QJsonObject payObj;
// payObj[ServerProps(PosProps.Amount)] = it->data()->payAmount();
// payObj[ServerProps(PosProps.TransId)] = it->data()->transId();
// payObj["thirdPayTransId"] = it->data()->fmTransId();
// payObj["typeModeFlag"] = it->data()->payId();
// payArray.append(payObj);
// }
// dataObj[ServerProps(PosProps.Pay_list)] = payArray;
// serverReqJsonObj["data"] = dataObj;
QJsonObject
dataObj
;
dataObj
[
ServerProps
(
PosProps
.
Fm_order_id
)]
=
_order
->
fmOrderId
();
dataObj
[
ServerProps
(
PosProps
.
Fm_open_id
)]
=
_order
->
fmOpenId
();
dataObj
[
ServerProps
(
PosProps
.
OrderAmount
)]
=
_order
->
orderAmount
();
dataObj
[
ServerProps
(
PosProps
.
PaidAmount
)]
=
_order
->
paidAmount
();
dataObj
[
ServerProps
(
PosProps
.
TransId
)]
=
getPosJsonValue
(
PosProps
.
OrderId
);
try
{
transaction
t
(
DBSP
()
->
begin
());
QSharedPointer
<
StoreInfo
>
storeInfo
=
_order
->
storeInfo
().
load
();
dataObj
[
ServerProps
(
PosProps
.
StoreId
)]
=
storeInfo
->
storeId
();
dataObj
[
ServerProps
(
PosProps
.
PosId
)]
=
storeInfo
->
posId
();
dataObj
[
ServerProps
(
PosProps
.
BusinessDate
)]
=
storeInfo
->
businessDate
();
dataObj
[
ServerProps
(
PosProps
.
OperatorId
)]
=
storeInfo
->
operatorId
();
// Products
QString
productText
=
_order
->
productText
();
QStringList
proKeys
;
proKeys
<<
PosProps
.
ConsumeNum
<<
PosProps
.
ProductId
<<
PosProps
.
Price
;
foreach
(
const
QString
&
proKey
,
proKeys
)
{
productText
=
productText
.
replace
(
proKey
,
ServerProps
(
proKey
));
dataObj
[
ServerProps
(
PosProps
.
PaidAmount
)]
=
_order
->
orderAmount
();
}
QJsonArray
proArray
=
QJsonDocument
::
fromJson
(
_order
->
productText
().
toUtf8
()).
array
();
dataObj
[
ServerProps
(
PosProps
.
Products
)]
=
proArray
;
// QJsonArray proArray = QJsonDocument::fromJson(_order->productText().toUtf8()).array();
// foreach (QJsonValue proValue, proArray) {
// QJsonObject proObj;
// QStringList proKeys;
// proKeys << PosProps.ConsumeNum << PosProps.ProductId << PosProps.Price;
// foreach (const QString &proKey, proKeys) {
// proObj[ServerProps(proKey)] = proValue.toObject()[proKey];
// }
// }
// 将POS新传的支付方式加入已付到金额中
foreach
(
QJsonValue
payValue
,
getPosJsonValue
(
PosProps
.
Pay_list
).
toArray
())
{
QJsonObject
pay_id
=
payValue
.
toObject
();
QSharedPointer
<
Pay
>
payPointer
(
new
Pay
());
payPointer
->
setPayId
(
pay_id
[
PosProps
.
Pay_id
].
toString
());
if
(
payPointer
->
payId
()
==
"20001"
||
payPointer
->
payId
()
==
"10001"
||
payPointer
->
payId
()
==
"10004"
)
{
FMP_WARN
()
<<
QString
::
fromLocal8Bit
(
"POS无需传会员支付和非码支付信息."
);
continue
;
}
else
{
payPointer
->
setPayStr
(
pay_id
[
PosProps
.
Pay_str
].
toString
());
payPointer
->
setPayAmount
(
pay_id
[
PosProps
.
Pay_amount
].
toInt
());
payPointer
->
setDisAmount
(
pay_id
[
PosProps
.
DisAmount
].
toInt
());
payPointer
->
setOrder
(
_order
);
DBSP
()
->
persist
(
payPointer
);
_order
->
setPaidAmount
(
_order
->
paidAmount
()
+
payPointer
->
payAmount
());
}
}
// 如果订单还未付完,默认以现金补全
if
(
_order
->
orderAmount
()
>
_order
->
paidAmount
())
{
QSharedPointer
<
Pay
>
cashPay
(
new
Pay
());
cashPay
->
setPayId
(
"20005"
);
cashPay
->
setPayStr
(
QString
::
fromLocal8Bit
(
"现金支付(默认)"
));
cashPay
->
setPayAmount
(
_order
->
orderAmount
()
-
_order
->
paidAmount
());
cashPay
->
setOrder
(
_order
);
DBSP
()
->
persist
(
cashPay
);
_order
->
setPaidAmount
(
_order
->
orderAmount
());
}
DBSP
()
->
persist
(
_order
);
// 从数据库读取支付信息
PayList
payList
=
_order
->
payList
();
// 转成服务端需要的payArray
QJsonArray
payArray
;
for
(
PayList
::
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
();
payObj
[
"thirdPayTransId"
]
=
it
->
load
()
->
fmTransId
();
payObj
[
"typeModeFlag"
]
=
it
->
load
()
->
payId
();
payArray
.
append
(
payObj
);
}
dataObj
[
ServerProps
(
PosProps
.
Pay_list
)]
=
payArray
;
t
.
commit
();
}
catch
(
const
odb
::
exception
&
e
)
{
QString
info
=
QString
::
fromLocal8Bit
(
"保存订单信息时出错:"
).
arg
(
e
.
what
());
FMP_ERROR
()
<<
info
;
qDebug
()
<<
info
;
setError
(
FM_API_ERROR
,
info
);
}
serverReqJsonObj
[
"data"
]
=
dataObj
;
}
bool
TaskFinal
::
sendToServer
(
bool
isShowMsg
)
...
...
@@ -171,21 +210,21 @@ bool TaskFinal::sendToServer(bool isShowMsg)
void
TaskFinal
::
packagePOSRsp
()
{
//
std::vector<QString> p;
//
p.push_back(PosProps.StatusCode);
//
p.push_back(PosProps.Msg);
//
p.push_back(PosProps.Fm_order_id);
//
foreach(auto prop , p)
//
{
//
posRspJsonObj[prop] = getServerJsonValue(prop);
//
}
std
::
vector
<
QString
>
p
;
p
.
push_back
(
PosProps
.
StatusCode
);
p
.
push_back
(
PosProps
.
Msg
);
p
.
push_back
(
PosProps
.
Fm_order_id
);
foreach
(
auto
prop
,
p
)
{
posRspJsonObj
[
prop
]
=
getServerJsonValue
(
prop
);
}
//
QJsonObject ext;
//
ext[PosProps.Print] = getServerJsonValue(PosProps.Print1);
//
posRspJsonObj["ext"] = ext;
QJsonObject
ext
;
ext
[
PosProps
.
Print
]
=
getServerJsonValue
(
PosProps
.
Print1
);
posRspJsonObj
[
"ext"
]
=
ext
;
//
if(getServerJsonValue(PosProps.StatusCode).toInt() == FM_API_SUCCESS) {
if
(
getServerJsonValue
(
PosProps
.
StatusCode
).
toInt
()
==
FM_API_SUCCESS
)
{
// // 保存其它支付方式
// foreach(QJsonValue payVluae, getPosJsonValue(PosProps.Pay_list).toArray()) {
...
...
@@ -200,10 +239,18 @@ void TaskFinal::packagePOSRsp()
// }
// }
// _order->setFmOrderId(getServerJsonValue(PosProps.Fm_order_id).toString());
// _order->setSettled(true);
// DBOP::Save(_order);
// }
try
{
transaction
t
(
DBSP
()
->
begin
());
_order
->
setFmOrderId
(
getServerJsonValue
(
PosProps
.
Fm_order_id
).
toString
());
_order
->
setSettled
(
true
);
DBSP
()
->
update
(
_order
);
t
.
commit
();
}
catch
(
const
exception
&
e
)
{
QString
info
=
QString
::
fromLocal8Bit
(
"保存订单信息时出错:"
).
arg
(
e
.
what
());
FMP_ERROR
()
<<
info
;
setError
(
FM_API_ERROR
,
info
);
}
}
}
QString
TaskFinal
::
backup
()
...
...
fmvip/task/taskfinal.h
View file @
a77fbb94
#ifndef TASKFINAL_H
#define TASKFINAL_H
#include "fmtasknownd.h"
//namespace FMItem {
//class Order;
//}
#include "database.h"
class
TaskFinal
:
public
FMTaskNoWnd
{
...
...
@@ -21,7 +18,7 @@ public:
private
:
QString
backup
();
// FMItem::Order *
_order;
QSharedPointer
<
DB
::
Order
>
_order
;
bool
isUseVipPay
;
};
...
...
tests/autotest/tst_db_query.h
View file @
a77fbb94
...
...
@@ -26,6 +26,22 @@ protected:
}
};
TEST_F
(
TestDBQuery
,
Load
)
{
try
{
transaction
t
(
DBSP
()
->
begin
());
QSharedPointer
<
Order
>
order
=
DBSP
()
->
load
<
Order
>
(
1
);
EXPECT_NE
(
order
,
nullptr
);
order
->
storeInfo
().
load
();
EXPECT_EQ
(
order
->
storeInfo
()
->
storeId
(),
"fm9999"
);
}
catch
(
const
odb
::
exception
&
e
)
{
FAIL
()
<<
"Exception: "
<<
e
.
what
();
}
}
TEST_F
(
TestDBQuery
,
Query
)
{
...
...
version.h
View file @
a77fbb94
...
...
@@ -5,7 +5,7 @@
#define VER_MINOR 1
#define VER_REVISION 0
#define VER_BUILD 4
2
#define VER_BUILD 4
3
//! Convert version numbers to string
#define _STR(S) #S
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment