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
xiaojing.zhang
fmp_vip
Commits
3ad0cb12
Commit
3ad0cb12
authored
Nov 02, 2017
by
NitefullWind
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
1. 修改支付、结算。支持混合支付。
parent
3ff6ecbf
Hide whitespace changes
Inline
Side-by-side
Showing
12 changed files
with
101 additions
and
100 deletions
+101
-100
fmvip/database/dbop.cpp
+1
-1
fmvip/fmvipdispatcher.cpp
+5
-1
fmvip/global.h
+2
-0
fmvip/items/pay.h
+1
-1
fmvip/task/taskfinal.cpp
+52
-75
fmvip/task/taskfund.cpp
+1
-1
fmvip/task/taskpay.cpp
+29
-17
fmvip/task/taskpay.h
+6
-0
fmvip/task/taskrefund.cpp
+1
-1
fmvip/windows/fmviporder.cpp
+1
-1
tests/testitem/tst_testitem.cpp
+1
-1
version.h
+1
-1
No files found.
fmvip/database/dbop.cpp
View file @
3ad0cb12
...
...
@@ -54,7 +54,7 @@ bool DBOP::CreateTable(const QString &tableName)
"[undis_amount] INT DEFAULT 0, "
"[fm_open_id] VARCHAR(50), "
"[products] TEXT,"
"[settle] BOOL DEFAULT 0,"
"[settle
d
] BOOL DEFAULT 0,"
"[storeInfoDBID] INTEGER DEFAULT 0"
");"
;
QString
tablePaySql
=
"CREATE TABLE [Pay]("
...
...
fmvip/fmvipdispatcher.cpp
View file @
3ad0cb12
...
...
@@ -42,7 +42,11 @@ void FMVipDispatcher::doTask(const QByteArray &reqData, QByteArray &rspData)
QJsonParseError
error
;
QJsonDocument
doc
=
QJsonDocument
::
fromJson
(
reqData
,
&
error
);
qDebug
()
<<
error
.
errorString
();
if
(
error
.
error
!=
QJsonParseError
::
NoError
)
{
FMP_ERROR
()
<<
"Parse req json error: "
<<
error
.
errorString
();
rspData
=
QString
::
fromLocal8Bit
(
"{
\"
msg:
\"
:
\"
请求数据解析失败:
\"
}"
).
arg
(
error
.
errorString
()).
toUtf8
();
return
;
}
QJsonObject
jsonObj
=
doc
.
object
();
FM_TYPE
type
=
(
FM_TYPE
)
jsonObj
[
"fm_cmd"
].
toInt
();
...
...
fmvip/global.h
View file @
3ad0cb12
...
...
@@ -113,6 +113,7 @@ struct PP{
Transaction
=
"transactions"
;
OrderAmount
=
"order_amount"
;
PaidAmount
=
"paid_amount"
;
TransAmount
=
"trans_amount"
;
DisAmount
=
"dis_amount"
;
UndisAmount
=
"undis_amount"
;
NeedAmount
=
"need_amount"
;
...
...
@@ -198,6 +199,7 @@ struct PP{
QString
OrderAmount
;
QString
NeedAmount
;
QString
PaidAmount
;
QString
TransAmount
;
QString
DisAmount
;
QString
UndisAmount
;
QString
StandardAmount
;
...
...
fmvip/items/pay.h
View file @
3ad0cb12
...
...
@@ -16,7 +16,7 @@ namespace FMItem {
Q_PROPERTY
(
int
dis_amount
READ
disAmount
WRITE
setDisAmount
)
Q_PROPERTY
(
QString
account
READ
account
WRITE
setAccount
)
Q_PROPERTY
(
QString
trans_id
READ
transId
WRITE
setTransId
)
Q_PROPERTY
(
QString
fm
TransI
d
READ
fmTransId
WRITE
setFmTransId
)
Q_PROPERTY
(
QString
fm
_trans_i
d
READ
fmTransId
WRITE
setFmTransId
)
Q_PROPERTY
(
int
orderDBID
READ
orderDBID
WRITE
setOrderDBID
)
public
:
explicit
Pay
(
QObject
*
parent
=
0
);
...
...
fmvip/task/taskfinal.cpp
View file @
3ad0cb12
...
...
@@ -36,6 +36,15 @@ void TaskFinal::packagePOSReq()
posReqJsonObj
=
storeInfo
.
toJson
(
QStringList
(),
posReqJsonObj
);
_order
->
setStoreInfoDBID
(
storeInfo
.
DBID
());
}
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
);
}
}
void
TaskFinal
::
packageServerReq
()
...
...
@@ -79,100 +88,52 @@ void TaskFinal::packageServerReq()
// }
// Pays
QJsonArray
payArray
;
// 从数据库读取支付信息
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
(
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
(
new
FMItem
::
Pay
());
cashPay
->
setPayId
(
"20005"
);
cashPay
->
setPayStr
(
QString
::
fromLocal8Bit
(
"现金支付(默认)"
));
cashPay
->
setPayAmount
(
_order
->
orderAmount
()
-
_order
->
paidAmount
());
cashPay
->
setTransId
(
_order
->
orderId
());
payList
.
append
(
cashPay
);
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
();
QString
typeModeFlag
=
it
->
data
()
->
payId
();
if
(
typeModeFlag
==
"20005"
)
{
//现金支付
payObj
[
"typeModeFlag"
]
=
"20005"
;
}
else
if
(
typeModeFlag
==
"20010"
)
{
payObj
[
"typeModeFlag"
]
=
"20010"
;
}
else
if
(
typeModeFlag
==
"10011"
)
{
payObj
[
"typeModeFlag"
]
=
"10011"
;
}
else
{
payObj
[
"typeModeFlag"
]
=
typeModeFlag
;
}
payObj
[
"typeModeFlag"
]
=
it
->
data
()
->
payId
();
payArray
.
append
(
payObj
);
}
dataObj
[
ServerProps
(
PosProps
.
Pay_list
)]
=
payArray
;
serverReqJsonObj
[
"data"
]
=
dataObj
;
// QJsonObject transData;
// std::vector<QString> p;
// p.push_back(PosProps.BussinessDate);
// p.push_back(PosProps.TransId);
// p.push_back(PosProps.Fm_id);
// p.push_back(PosProps.Fm_open_id);
// p.push_back(PosProps.OrderAmount);
// p.push_back(PosProps.PaidAmount);
// foreach(auto prop , p) {
// transData[ServerProps(prop)] = getPosJsonValue(prop);
// }
// if (transData[ServerProps(PosProps.PaidAmount)].toInt() == 0) {
// transData[ServerProps(PosProps.PaidAmount)] = transData[ServerProps(PosProps.OrderAmount)];
// }
// // 产品列表
// QJsonArray products;
// foreach(auto p , getPosJsonValue("products").toArray())
// {
// QJsonObject product;
// product["consumNum"] = p.toObject()["consume_num"];
// int price = p.toObject()["price"].toDouble()*100;
// product["price"] = price;
// product["productId"] = p.toObject()["pid"];
// products.append(product);
// }
// transData["productList"] = products;
// QJsonArray payList;
// foreach(auto p, getPosJsonValue(PosProps.Pay_ids).toArray())
// {
// QJsonObject pay;
// pay["amount"] = p.toObject()["pay_amount"];
// pay["thirdPayTransId"] = p.toObject()["pay_transId"].toString();
// pay["code"] = p.toObject()["code"].toString();
// pay[ServerProps(PosProps.TransId)] = getPosJsonValue(PosProps.TransId);
// QString typeModeFlag = p.toObject()["pay_id"].toString();
// if(typeModeFlag == "0101") {
// //现金支付
// pay["typeModeFlag"] = "20005";
// } else if (typeModeFlag == "0103") {
// pay["typeModeFlag"] = "20010";
// } else if(typeModeFlag == "0301") {
// pay["typeModeFlag"] = "10011";
// } else if(typeModeFlag == "0302") {
// pay["typeModeFlag"] = "10011";
// } else if(typeModeFlag == "0303") {
// pay["typeModeFlag"] = "10011";
// } else {
// pay["typeModeFlag"] = typeModeFlag;
// }
// payList.append(pay);
// }
// transData["payList"] = payList;
// serverReqJsonObj["data"] = transData;
}
bool
TaskFinal
::
sendToServer
(
bool
isShowMsg
)
...
...
@@ -218,7 +179,23 @@ void TaskFinal::packagePOSRsp()
ext
[
PosProps
.
Print
]
=
getServerJsonValue
(
PosProps
.
Print1
);
posRspJsonObj
[
"ext"
]
=
ext
;
if
(
getServerJsonValue
(
PosProps
.
StatusCode
).
toInt
()
==
FM_API_SUCCESS
)
{
// 保存其它支付方式
foreach
(
QJsonValue
payVluae
,
getPosJsonValue
(
PosProps
.
Pay_list
).
toArray
())
{
QJsonObject
pay_id
=
payVluae
.
toObject
();
int
amount
=
pay_id
[
PosProps
.
Pay_amount
].
toInt
();
if
(
amount
!=
0
)
{
FMItem
::
Pay
*
pay
=
new
FMItem
::
Pay
(
this
);
pay
->
SetPropertiesByJson
(
pay_id
);
pay
->
setOrderDBID
(
_order
->
DBID
());
DBOP
::
Save
(
pay
);
delete
pay
;
}
}
_order
->
setFmOrderId
(
getServerJsonValue
(
PosProps
.
Fm_order_id
).
toString
());
_order
->
setSettled
(
true
);
DBOP
::
Save
(
_order
);
}
...
...
fmvip/task/taskfund.cpp
View file @
3ad0cb12
...
...
@@ -21,7 +21,7 @@ void TaskFund::packagePOSReq()
preTask
->
session
()
->
addData
(
PosProps
.
FM_Type
,
FM_Fund
);
preTask
->
doTask
();
if
(
preTask
->
error
()
!=
FM_API_SUCCESS
)
{
setError
(
preTask
->
error
());
this
->
setError
(
preTask
->
error
(),
preTask
->
errorString
());
}
}
...
...
fmvip/task/taskpay.cpp
View file @
3ad0cb12
...
...
@@ -16,15 +16,30 @@ using namespace FMItem;
TaskPay
::
TaskPay
(
QJsonObject
&
jsonObj
,
Session
*
session
,
QObject
*
parent
)
:
FMTask
(
jsonObj
,
FM_Pay
,
session
,
parent
)
,
_order
(
new
Order
(
this
))
{
}
TaskPay
::~
TaskPay
()
{
delete
_order
;
}
void
TaskPay
::
packagePOSReq
()
{
FMItem
::
StoreInfo
storeInfo
;
DBOP
::
GetLastItem
(
&
storeInfo
);
posReqJsonObj
=
storeInfo
.
toJson
(
QStringList
(),
posReqJsonObj
);
// 检查订单是否已结算
QString
orderId
=
getPosJsonValue
(
PosProps
.
OrderId
).
toString
();
DBOP
::
GetOrderByOrderId
(
orderId
,
_order
);
if
(
_order
->
settled
())
{
QString
info
=
QString
::
fromLocal8Bit
(
"订单已结算,不能再进行支付."
);
FMP_WARN
()
<<
info
;
setError
(
FM_API_ERROR
,
info
);
return
;
}
QString
fm_open_id_pos
=
getPosJsonValue
(
PosProps
.
Fm_open_id
).
toString
();
QString
fm_open_id_session
=
session
()
->
data
(
PosProps
.
Fm_open_id
).
toString
();
...
...
@@ -33,18 +48,19 @@ void TaskPay::packagePOSReq()
preTask
->
session
()
->
addData
(
PosProps
.
FM_Type
,
FM_Pay
);
preTask
->
doTask
();
if
(
preTask
->
error
()
!=
FM_API_SUCCESS
)
{
setError
(
preTask
->
error
());
this
->
setError
(
preTask
->
error
(),
preTask
->
errorString
());
}
this
->
_session
=
preTask
->
session
();
}
session
()
->
addData
(
PosProps
.
OrderAmount
,
getPosJsonValue
(
PosProps
.
OrderAmount
).
toInt
());
session
()
->
addData
(
PosProps
.
PaidAmount
,
getPosJsonValue
(
PosProps
.
Paid
Amount
).
toInt
());
session
()
->
addData
(
PosProps
.
TransAmount
,
getPosJsonValue
(
PosProps
.
Trans
Amount
).
toInt
());
session
()
->
addData
(
PosProps
.
UndisAmount
,
getPosJsonValue
(
PosProps
.
UndisAmount
).
toInt
());
couponThread
=
new
TaskCouponThread
(
posReqJsonObj
,
_session
,
this
);
couponThread
->
start
();
connect
(
couponThread
,
SIGNAL
(
finished
(
Session
*
)),
SLOT
(
onGetCoupons
(
Session
*
)));
//! FIXME 启用couponThread线程后,网络异常时setError函数崩溃
// couponThread = new TaskCouponThread(posReqJsonObj, _session, this);
// couponThread->start();
// connect(couponThread, SIGNAL(finished(Session*)), SLOT(onGetCoupons(Session*)));
}
void
TaskPay
::
onGetCoupons
(
Session
*
session
)
...
...
@@ -174,18 +190,16 @@ void TaskPay::packagePOSRsp()
posRspJsonObj
[
PosProps
.
Fm_order_id
]
=
fm_order_id
;
posRspJsonObj
[
PosProps
.
Fm_trans_id
]
=
fm_order_id
;
Order
*
order
=
new
Order
(
this
);
DBOP
::
GetOrderByOrderId
(
orderId
,
order
);
// 如果订单是新的,则保存在数据库中
if
(
isOk
&&
order
->
isNew
())
{
order
->
SetPropertiesByJson
(
posReqJsonObj
);
order
->
SetPropertiesByJson
(
posRspJsonObj
);
if
(
isOk
&&
_
order
->
isNew
())
{
_
order
->
SetPropertiesByJson
(
posReqJsonObj
);
_
order
->
SetPropertiesByJson
(
posRspJsonObj
);
FMItem
::
StoreInfo
storeInfo
;
DBOP
::
GetLastItem
(
&
storeInfo
);
order
->
setStoreInfoDBID
(
storeInfo
.
DBID
());
_
order
->
setStoreInfoDBID
(
storeInfo
.
DBID
());
isOk
=
DBOP
::
Save
(
order
);
isOk
=
DBOP
::
Save
(
_
order
);
}
QJsonArray
servPayArray
=
getServerJsonValue
(
"payList"
).
toArray
();
...
...
@@ -216,20 +230,18 @@ void TaskPay::packagePOSRsp()
Pay
*
pay
=
new
Pay
(
this
);
pay
->
SetPropertiesByJson
(
pay_id
);
pay
->
setTransId
(
transId
);
pay
->
setOrderDBID
(
order
->
DBID
());
pay
->
setOrderDBID
(
_
order
->
DBID
());
pay
->
setAccount
(
fm_open_id
);
pay
->
setFmTransId
(
transId
);
DBOP
::
Save
(
pay
);
order
->
setPaidAmount
(
order
->
paidAmount
()
+
amount
);
DBOP
::
Save
(
order
);
_order
->
setPaidAmount
(
_
order
->
paidAmount
()
+
amount
);
DBOP
::
Save
(
_
order
);
delete
pay
;
}
}
posRspJsonObj
[
PosProps
.
PaidAmount
]
=
totalPaid
;
posRspJsonObj
[
PosProps
.
Pay_list
]
=
pay_ids
;
posRspJsonObj
[
PosProps
.
DisAmount
]
=
0
;
delete
order
;
}
void
TaskPay
::
onPay
()
...
...
fmvip/task/taskpay.h
View file @
3ad0cb12
...
...
@@ -6,11 +6,16 @@
class
TaskCouponThread
;
namespace
FMItem
{
class
Order
;
}
class
TaskPay
:
public
FMTask
{
Q_OBJECT
public
:
explicit
TaskPay
(
QJsonObject
&
jsonObj
,
Session
*
session
=
0
,
QObject
*
parent
=
0
);
~
TaskPay
();
void
packagePOSReq
();
void
setWindow
();
...
...
@@ -23,6 +28,7 @@ private slots:
private
:
TaskCouponThread
*
couponThread
;
FMItem
::
Order
*
_order
;
};
// 加载代金券的线程类
...
...
fmvip/task/taskrefund.cpp
View file @
3ad0cb12
...
...
@@ -62,7 +62,7 @@ void TaskRefund::onRefundPay(int DBID)
posReqJsonObj
=
orderPointer
->
toJson
(
QStringList
(),
posReqJsonObj
);
posReqJsonObj
[
PosProps
.
TransId
]
=
orderPointer
->
order
Id
();
posReqJsonObj
[
PosProps
.
TransId
]
=
payPointer
->
fmTrans
Id
();
TaskRefundPay
refundPay
(
posReqJsonObj
,
this
);
QByteArray
rspData
=
refundPay
.
doTask
();
...
...
fmvip/windows/fmviporder.cpp
View file @
3ad0cb12
...
...
@@ -36,7 +36,7 @@ bool FMVipOrder::initWnd(Session *session)
QString
score_str
=
QString
::
number
(
session
->
data
(
PosProps
.
Score
).
toInt
());
int
orderAmount
=
session
->
data
(
PosProps
.
OrderAmount
).
toInt
();
int
needPay
=
orderAmount
-
session
->
data
(
PosProps
.
Paid
Amount
).
toInt
();
int
needPay
=
session
->
data
(
PosProps
.
Trans
Amount
).
toInt
();
session
->
addData
(
PosProps
.
NeedAmount
,
needPay
);
QString
needPay_str
=
QString
::
number
(
needPay
);
...
...
tests/testitem/tst_testitem.cpp
View file @
3ad0cb12
...
...
@@ -159,7 +159,7 @@ void TestItem::test_PropertyNames_data()
<<
"fm_open_id"
<<
"products"
<<
"settled"
<<
"storeInfoDBID"
;
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"
<<
"fm
TransI
d"
<<
"orderDBID"
;
payPNames
<<
"objectName"
<<
"DBID"
<<
"pay_id"
<<
"pay_str"
<<
"pay_amount"
<<
"refund_amount"
<<
"dis_amount"
<<
"account"
<<
"trans_id"
<<
"fm
_trans_i
d"
<<
"orderDBID"
;
QTest
::
newRow
(
"Pay"
)
<<
gPay
<<
payPNames
.
length
()
<<
payPNames
;
productPNames
<<
"objectName"
<<
"DBID"
<<
"id"
<<
"quantity"
<<
"price"
<<
"name"
;
...
...
version.h
View file @
3ad0cb12
...
...
@@ -5,7 +5,7 @@
#define VER_MINOR 1
#define VER_REVISION 0
#define VER_BUILD 1
7
#define VER_BUILD 1
8
//! 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