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 @@
...
@@ -4,141 +4,180 @@
#include "fmp_logger_i.h"
#include "fmp_logger_i.h"
#include "fmmsgwnd.h"
#include "fmmsgwnd.h"
#include "fmp_vip_settings.h"
#include "fmp_vip_settings.h"
//#include "dbop.h"
//#include "items/order.h"
//#include "items/pay.h"
//#include "items/storeinfo.h"
#include <QDateTime>
#include <QDateTime>
#include <QJsonDocument>
#include <QJsonDocument>
#include <QJsonArray>
#include <QJsonArray>
#include <QCryptographicHash>
#include <QCryptographicHash>
using
namespace
DB
;
TaskFinal
::
TaskFinal
(
QJsonObject
&
jsonObj
,
Session
*
session
,
QObject
*
parent
)
TaskFinal
::
TaskFinal
(
QJsonObject
&
jsonObj
,
Session
*
session
,
QObject
*
parent
)
:
FMTaskNoWnd
(
jsonObj
,
FM_Final
,
session
,
parent
)
:
FMTaskNoWnd
(
jsonObj
,
FM_Final
,
session
,
parent
)
// ,_order(new FMItem::Order(this
))
,
_order
(
new
Order
(
))
,
isUseVipPay
(
false
)
,
isUseVipPay
(
false
)
{
{
}
}
TaskFinal
::~
TaskFinal
()
TaskFinal
::~
TaskFinal
()
{
{
// delete _order;
}
}
void
TaskFinal
::
packagePOSReq
()
void
TaskFinal
::
packagePOSReq
()
{
{
// FMItem::StoreInfo storeInfo;
QSharedPointer
<
StoreInfo
>
storeInfo
=
GetLastStoreInfo
();
// bool isOk = DBOP::GetLastItem(&storeInfo);
if
(
storeInfo
==
nullptr
)
{
// if(isOk) {
QString
info
=
QString
::
fromLocal8Bit
(
"未设置门店信息,不能进行支付."
);
// posReqJsonObj = storeInfo.toJson(QStringList(), posReqJsonObj);
setError
(
FM_API_ERROR
,
info
);
// _order->setStoreInfoDBID(storeInfo.DBID());
return
;
// } else {
}
// QString info = QString::fromLocal8Bit("未设置门店信息,不能进行结算.");
// FMP_WARN() << info;
posReqJsonObj
[
PosProps
.
StoreId
]
=
storeInfo
->
storeId
();
// setError(FM_API_ERROR, info);
posReqJsonObj
[
PosProps
.
PosId
]
=
storeInfo
->
posId
();
// return;
posReqJsonObj
[
PosProps
.
BusinessDate
]
=
storeInfo
->
businessDate
();
// }
posReqJsonObj
[
PosProps
.
OperatorId
]
=
storeInfo
->
operatorId
();
// QString orderId = getPosJsonValue(PosProps.OrderId).toString();
QString
orderId
=
getPosJsonValue
(
PosProps
.
OrderId
).
toString
();
// DBOP::GetOrderByOrderId(orderId, _order);
try
{
// if(_order->isNew()) {
// _transactionPay.reset(DBSP()->begin());
// _order->SetPropertiesByJson(posReqJsonObj);
transaction
t
(
DBSP
()
->
begin
());
// DBOP::Save(_order);
// 检查订单是否已存在
// } else if(_order->settled()) {
odb
::
result
<
Order
>
r
=
DBSP
()
->
query
<
Order
>
(
query
<
Order
>::
orderId
==
orderId
);
// QString info = QString::fromLocal8Bit("订单已结算,不能重复结算.");
// FMP_WARN() << info;
if
(
r
.
empty
())
{
// setError(FM_API_ERROR, info);
_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
()
void
TaskFinal
::
packageServerReq
()
{
{
// QMap<QString, QString> key2proMap;
QJsonObject
dataObj
;
// QStringList keys;
dataObj
[
ServerProps
(
PosProps
.
Fm_order_id
)]
=
_order
->
fmOrderId
();
// QJsonObject dataObj;
dataObj
[
ServerProps
(
PosProps
.
Fm_open_id
)]
=
_order
->
fmOpenId
();
// keys << PosProps.Fm_open_id << PosProps.OrderAmount << PosProps.PaidAmount << PosProps.Fm_order_id << PosProps.TransId;
dataObj
[
ServerProps
(
PosProps
.
OrderAmount
)]
=
_order
->
orderAmount
();
// key2proMap.clear();
dataObj
[
ServerProps
(
PosProps
.
PaidAmount
)]
=
_order
->
paidAmount
();
// foreach (QString key, keys) {
dataObj
[
ServerProps
(
PosProps
.
TransId
)]
=
getPosJsonValue
(
PosProps
.
OrderId
);
// key2proMap[ServerProps(key)] = key;
// }
try
{
// dataObj = _order->toJson(key2proMap, dataObj);
transaction
t
(
DBSP
()
->
begin
());
// dataObj[ServerProps(PosProps.TransId)] = getPosJsonValue(PosProps.OrderId);
QSharedPointer
<
StoreInfo
>
storeInfo
=
_order
->
storeInfo
().
load
();
// FMItem::StoreInfo storeInfo;
dataObj
[
ServerProps
(
PosProps
.
StoreId
)]
=
storeInfo
->
storeId
();
// bool isOk = DBOP::GetItemByDBID(_order->storeInfoDBID(), &storeInfo);
dataObj
[
ServerProps
(
PosProps
.
PosId
)]
=
storeInfo
->
posId
();
// if(isOk) {
dataObj
[
ServerProps
(
PosProps
.
BusinessDate
)]
=
storeInfo
->
businessDate
();
// dataObj[ServerProps(PosProps.BussinessDate)] = storeInfo.businessDate();
dataObj
[
ServerProps
(
PosProps
.
OperatorId
)]
=
storeInfo
->
operatorId
();
// }
// Products
// // Products
QString
productText
=
_order
->
productText
();
// QString productText = _order->productText();
QStringList
proKeys
;
// QStringList proKeys;
proKeys
<<
PosProps
.
ConsumeNum
<<
PosProps
.
ProductId
<<
PosProps
.
Price
;
// proKeys << PosProps.ConsumeNum << PosProps.ProductId << PosProps.Price;
foreach
(
const
QString
&
proKey
,
proKeys
)
{
// foreach (const QString &proKey, proKeys) {
productText
=
productText
.
replace
(
proKey
,
ServerProps
(
proKey
));
// productText = productText.replace(proKey, ServerProps(proKey));
dataObj
[
ServerProps
(
PosProps
.
PaidAmount
)]
=
_order
->
orderAmount
();
// dataObj[ServerProps(PosProps.PaidAmount)] = _order->orderAmount();
}
// }
QJsonArray
proArray
=
QJsonDocument
::
fromJson
(
_order
->
productText
().
toUtf8
()).
array
();
// QJsonArray proArray = QJsonDocument::fromJson(_order->productText().toUtf8()).array();
dataObj
[
ServerProps
(
PosProps
.
Products
)]
=
proArray
;
// dataObj[ServerProps(PosProps.Products)] = proArray;
// QJsonArray proArray = QJsonDocument::fromJson(_order->productText().toUtf8()).array();
//// QJsonArray proArray = QJsonDocument::fromJson(_order->productText().toUtf8()).array();
// foreach (QJsonValue proValue, proArray) {
//// foreach (QJsonValue proValue, proArray) {
// QJsonObject proObj;
//// QJsonObject proObj;
// QStringList proKeys;
//// QStringList proKeys;
// proKeys << PosProps.ConsumeNum << PosProps.ProductId << PosProps.Price;
//// proKeys << PosProps.ConsumeNum << PosProps.ProductId << PosProps.Price;
// foreach (const QString &proKey, proKeys) {
//// foreach (const QString &proKey, proKeys) {
// proObj[ServerProps(proKey)] = proValue.toObject()[proKey];
//// proObj[ServerProps(proKey)] = proValue.toObject()[proKey];
// }
//// }
// }
//// }
// 将POS新传的支付方式加入已付到金额中
// // 从数据库读取支付信息
foreach
(
QJsonValue
payValue
,
getPosJsonValue
(
PosProps
.
Pay_list
).
toArray
())
{
// QList<QSharedPointer<FMItem::Pay> > payList = DBOP::GetPaysByOrderDBId(_order->DBID());
QJsonObject
pay_id
=
payValue
.
toObject
();
QSharedPointer
<
Pay
>
payPointer
(
new
Pay
());
// // 将POS新传的支付方式加入已付到金额中
payPointer
->
setPayId
(
pay_id
[
PosProps
.
Pay_id
].
toString
());
// foreach (QJsonValue payValue, getPosJsonValue(PosProps.Pay_list).toArray()) {
if
(
payPointer
->
payId
()
==
"20001"
||
payPointer
->
payId
()
==
"10001"
||
payPointer
->
payId
()
==
"10004"
)
{
// QJsonObject pay_id = payValue.toObject();
FMP_WARN
()
<<
QString
::
fromLocal8Bit
(
"POS无需传会员支付和非码支付信息."
);
// QSharedPointer<FMItem::Pay> payPointer = QSharedPointer<FMItem::Pay>(new FMItem::Pay(this));
continue
;
// payPointer->SetPropertiesByJson(pay_id);
}
else
{
// payPointer->setOrderDBID(_order->DBID());
payPointer
->
setPayStr
(
pay_id
[
PosProps
.
Pay_str
].
toString
());
// if(payPointer->payId() == "20001" || payPointer->payId() == "10001" || payPointer->payId() == "10004") {
payPointer
->
setPayAmount
(
pay_id
[
PosProps
.
Pay_amount
].
toInt
());
// FMP_WARN() << QString::fromLocal8Bit("POS无需传会员支付和非码支付信息.");
payPointer
->
setDisAmount
(
pay_id
[
PosProps
.
DisAmount
].
toInt
());
// continue;
payPointer
->
setOrder
(
_order
);
// } else {
// _order->setPaidAmount(_order->paidAmount() + payPointer->payAmount());
DBSP
()
->
persist
(
payPointer
);
// payList.append(payPointer);
// }
_order
->
setPaidAmount
(
_order
->
paidAmount
()
+
payPointer
->
payAmount
());
// }
}
}
// // 如果订单还未付完,默认以现金补全
// if(_order->orderAmount() > _order->paidAmount()) {
// 如果订单还未付完,默认以现金补全
// QSharedPointer<FMItem::Pay> cashPay = QSharedPointer<FMItem::Pay>(new FMItem::Pay());
if
(
_order
->
orderAmount
()
>
_order
->
paidAmount
())
{
// cashPay->setPayId("20005");
QSharedPointer
<
Pay
>
cashPay
(
new
Pay
());
// cashPay->setPayStr(QString::fromLocal8Bit("现金支付(默认)"));
cashPay
->
setPayId
(
"20005"
);
// cashPay->setPayAmount(_order->orderAmount() - _order->paidAmount());
cashPay
->
setPayStr
(
QString
::
fromLocal8Bit
(
"现金支付(默认)"
));
// cashPay->setOrderDBID(_order->DBID());
cashPay
->
setPayAmount
(
_order
->
orderAmount
()
-
_order
->
paidAmount
());
// bool isOk = DBOP::Save(cashPay.data());
cashPay
->
setOrder
(
_order
);
// if(isOk) {
// _order->setPaidAmount(_order->orderAmount());
DBSP
()
->
persist
(
cashPay
);
// payList.append(cashPay);
// }
_order
->
setPaidAmount
(
_order
->
orderAmount
());
// }
}
// // 转成服务端需要的payArray
DBSP
()
->
persist
(
_order
);
// QJsonArray payArray;
// for (QList<QSharedPointer<FMItem::Pay> >::const_iterator it = payList.constBegin(); it!=payList.constEnd(); it++) {
// 从数据库读取支付信息
// QJsonObject payObj;
PayList
payList
=
_order
->
payList
();
// payObj[ServerProps(PosProps.Amount)] = it->data()->payAmount();
// payObj[ServerProps(PosProps.TransId)] = it->data()->transId();
// 转成服务端需要的payArray
// payObj["thirdPayTransId"] = it->data()->fmTransId();
QJsonArray
payArray
;
// payObj["typeModeFlag"] = it->data()->payId();
for
(
PayList
::
const_iterator
it
=
payList
.
constBegin
();
it
!=
payList
.
constEnd
();
it
++
)
{
// payArray.append(payObj);
QJsonObject
payObj
;
// }
payObj
[
ServerProps
(
PosProps
.
Amount
)]
=
it
->
load
()
->
payAmount
();
payObj
[
ServerProps
(
PosProps
.
TransId
)]
=
it
->
load
()
->
transId
();
// dataObj[ServerProps(PosProps.Pay_list)] = payArray;
payObj
[
"thirdPayTransId"
]
=
it
->
load
()
->
fmTransId
();
payObj
[
"typeModeFlag"
]
=
it
->
load
()
->
payId
();
// serverReqJsonObj["data"] = dataObj;
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
)
bool
TaskFinal
::
sendToServer
(
bool
isShowMsg
)
...
@@ -171,21 +210,21 @@ bool TaskFinal::sendToServer(bool isShowMsg)
...
@@ -171,21 +210,21 @@ bool TaskFinal::sendToServer(bool isShowMsg)
void
TaskFinal
::
packagePOSRsp
()
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_order_id);
p
.
push_back
(
PosProps
.
Fm_order_id
);
//
foreach(auto prop , p)
foreach
(
auto
prop
,
p
)
//
{
{
//
posRspJsonObj[prop] = getServerJsonValue(prop);
posRspJsonObj
[
prop
]
=
getServerJsonValue
(
prop
);
//
}
}
//
QJsonObject ext;
QJsonObject
ext
;
//
ext[PosProps.Print] = getServerJsonValue(PosProps.Print1);
ext
[
PosProps
.
Print
]
=
getServerJsonValue
(
PosProps
.
Print1
);
//
posRspJsonObj["ext"] = ext;
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()) {
// foreach(QJsonValue payVluae, getPosJsonValue(PosProps.Pay_list).toArray()) {
...
@@ -200,10 +239,18 @@ void TaskFinal::packagePOSRsp()
...
@@ -200,10 +239,18 @@ void TaskFinal::packagePOSRsp()
// }
// }
// }
// }
// _order->setFmOrderId(getServerJsonValue(PosProps.Fm_order_id).toString());
try
{
// _order->setSettled(true);
transaction
t
(
DBSP
()
->
begin
());
// DBOP::Save(_order);
_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
()
QString
TaskFinal
::
backup
()
...
...
fmvip/task/taskfinal.h
View file @
a77fbb94
#ifndef TASKFINAL_H
#ifndef TASKFINAL_H
#define TASKFINAL_H
#define TASKFINAL_H
#include "fmtasknownd.h"
#include "fmtasknownd.h"
#include "database.h"
//namespace FMItem {
//class Order;
//}
class
TaskFinal
:
public
FMTaskNoWnd
class
TaskFinal
:
public
FMTaskNoWnd
{
{
...
@@ -21,7 +18,7 @@ public:
...
@@ -21,7 +18,7 @@ public:
private
:
private
:
QString
backup
();
QString
backup
();
// FMItem::Order *
_order;
QSharedPointer
<
DB
::
Order
>
_order
;
bool
isUseVipPay
;
bool
isUseVipPay
;
};
};
...
...
tests/autotest/tst_db_query.h
View file @
a77fbb94
...
@@ -26,6 +26,22 @@ protected:
...
@@ -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
)
TEST_F
(
TestDBQuery
,
Query
)
{
{
...
...
version.h
View file @
a77fbb94
...
@@ -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 4
2
#define VER_BUILD 4
3
//! Convert version numbers to string
//! Convert version numbers to string
#define _STR(S) #S
#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