Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
F
FMDbMonitor_linux
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
guanghui.cui
FMDbMonitor_linux
Commits
d49d5be4
Commit
d49d5be4
authored
Sep 22, 2017
by
guanghui.cui
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
添加守护进程及菜单缓存
parent
93479b9a
Hide whitespace changes
Inline
Side-by-side
Showing
9 changed files
with
269 additions
and
80 deletions
+269
-80
base/CommonStruct.h
+56
-42
base/IOperation.h
+18
-15
bin/daemon_monitor.sh
+55
-0
bin/monitor.ini
+14
-2
pos_bft/OrderInfo.cpp
+71
-0
pos_bft/OrderInfo.h
+10
-2
src/PayProcess.cpp
+12
-1
src/json.cpp
+28
-15
src/json.h
+5
-3
No files found.
base/CommonStruct.h
View file @
d49d5be4
/*
定义订单信息结构
/*
定义订单信息结构
*/
*/
...
@@ -8,63 +8,76 @@
...
@@ -8,63 +8,76 @@
#include <string>
#include <string>
#include <vector>
#include <vector>
//
商品信息
//
商品信息
struct
GOODS_INFO
struct
GOODS_INFO
{
{
std
::
string
strId
;
//
商品
id
std
::
string
strId
;
//
商品i
d
std
::
string
strPrice
;
//
商品价格
std
::
string
strPrice
;
//
商品价格
std
::
string
strNum
;
//
商品数量
std
::
string
strNum
;
//
商品数量
};
};
//
订单信息
//
订单信息
struct
FM_ORDER_INFO
struct
FM_ORDER_INFO
{
{
std
::
string
store
;
//
门店号
std
::
string
store
;
//
门店号
std
::
string
pos
;
//pos
机号
std
::
string
pos
;
//pos
机号
std
::
string
operater
;
//
操作员
std
::
string
operater
;
//
操作员
std
::
string
date
;
//
营业日
std
::
string
date
;
//
营业日
std
::
string
payTotal
;
//
订单总额
std
::
string
payTotal
;
//
订单总额
std
::
string
transId
;
//
交易号
std
::
string
transId
;
//
交易号
std
::
vector
<
GOODS_INFO
>
vecGoods
;
//
商品信息
std
::
vector
<
GOODS_INFO
>
vecGoods
;
//
商品信息
};
};
//
外卖商品
//
外卖商品
struct
TakeawayProduct
struct
TakeawayProduct
{
{
int
consume_num
;
//
数量
int
consume_num
;
//
数量
int
original_price
;
//
商品编码
int
original_price
;
//
商品编码
std
::
string
pid
;
//
外卖平台上的单价
std
::
string
pid
;
//
外卖平台上的单价
};
};
//
外卖销售单
//
外卖销售单
struct
TakeawayOrder
struct
TakeawayOrder
{
{
std
::
string
fm_cmd
;
//
外卖订单写入确认
std
::
string
fm_cmd
;
//
外卖订单写入确认
std
::
string
fm_ver
;
//
接口版本
std
::
string
fm_ver
;
//
接口版本
std
::
string
pay_id
;
//
支付方式
std
::
string
pay_id
;
//
支付方式
std
::
string
pay_str
;
//
支付方式说明
std
::
string
pay_str
;
//
支付方式说明
std
::
string
pay_ebcode
;
//
支付方式中的类型&渠道
std
::
string
pay_ebcode
;
//
支付方式中的类型&渠道
std
::
string
pay_ebcode_str
;
//
支付方式中的类型&渠道说明
std
::
string
pay_ebcode_str
;
//
支付方式中的类型&渠道说明
int
shop_fee
;
//
门店能够从平台拿到的钱(已除去费务服
)
int
shop_fee
;
//
门店能够从平台拿到的钱(已除去费务服)
int
service_fee
;
//
平台收取的佣金
int
service_fee
;
//
平台收取的佣金
int
products_fee
;
//
商品金额
int
products_fee
;
//
商品金额
int
discount_fee
;
//
优惠总额
int
discount_fee
;
//
优惠总额
int
dis_shop_fee
;
//
商家承担的优惠总额
int
dis_shop_fee
;
//
商家承担的优惠总额
int
dis_platform_fee
;
//
平台承担的优惠总额
int
dis_platform_fee
;
//
平台承担的优惠总额
int
send_fee
;
//
配送费
int
send_fee
;
//
配送费
int
package_fee
;
//
打包费
int
package_fee
;
//
打包费
int
invoice_amount
;
//
发票金额
int
invoice_amount
;
//
发票金额
std
::
string
paid_trans_id
;
//
外卖平台的交易号 订单号
std
::
string
paid_trans_id
;
//
外卖平台的交易号 订单号
std
::
string
fm_id
;
//
非码交易号
std
::
string
fm_id
;
//
非码交易号
std
::
string
customer_address
;
//
顾客地址
std
::
string
customer_address
;
//
顾客地址
std
::
string
customer_name
;
//
顾客名称
std
::
string
customer_name
;
//
顾客名称
std
::
string
customer_phone
;
//
顾客手机号
std
::
string
customer_phone
;
//
顾客手机号
int
delivery_time
;
//
送达时间
int
delivery_time
;
//
送达时间
int
order_index
;
//
平台序号
int
order_index
;
//
平台序号
std
::
string
remark
;
//
备注
std
::
string
remark
;
//
备注
std
::
vector
<
TakeawayProduct
>
vecProducts
;
//商品信息
std
::
vector
<
TakeawayProduct
>
vecProducts
;
//商品信息
};
struct
PrinterMenu
{
std
::
string
idMenu
;
int
idPrinter
;
std
::
string
device
;
};
struct
PrintDevice
{
int
id
;
std
::
string
device
;
};
};
#endif
#endif
\ No newline at end of file
base/IOperation.h
View file @
d49d5be4
...
@@ -10,42 +10,45 @@
...
@@ -10,42 +10,45 @@
class
IOperation
class
IOperation
{
{
public
:
public
:
//
初始化操作
//
初始化操作
virtual
int
DBConnect
()
=
0
;
virtual
int
DBConnect
()
=
0
;
virtual
int
Init
()
=
0
;
virtual
int
Init
()
=
0
;
//
根据订单id从数据库中查找订单信息
//
根据订单id从数据库中查找订单信息
virtual
int
GetOrderInfo
(
IN
std
::
string
&
strOrderId
,
virtual
int
GetOrderInfo
(
IN
std
::
string
&
strOrderId
,
OUT
FM_ORDER_INFO
**
pFMOrderInfo
)
=
0
;
OUT
FM_ORDER_INFO
**
pFMOrderInfo
)
=
0
;
//
监测是否有新订单产生
//
监测是否有新订单产生
virtual
int
MonitorNewOrder
(
OUT
std
::
string
&
strNewOrderId
)
=
0
;
virtual
int
MonitorNewOrder
(
OUT
std
::
string
&
strNewOrderId
)
=
0
;
//
向数据库中写入支付结果信息
//
向数据库中写入支付结果信息
virtual
int
SetPayResult
(
IN
std
::
string
&
strOrderId
,
//
订单
id
virtual
int
SetPayResult
(
IN
std
::
string
&
strOrderId
,
//
订单i
d
IN
std
::
string
&
strStatusCode
,
//
错误码
IN
std
::
string
&
strStatusCode
,
//
错误码
IN
std
::
string
&
strPayType
)
=
0
;
//
支付类型
IN
std
::
string
&
strPayType
)
=
0
;
//
支付类型
//
所有的清除操作
//
所有的清除操作
virtual
void
UnInit
()
=
0
;
virtual
void
UnInit
()
=
0
;
//
释放为订单数据结构申请的内存
//
释放为订单数据结构申请的内存
//
在GetOrderInfo()函数中申请
//
在GetOrderInfo()函数中申请
virtual
void
FreeOrderBuf
(
FM_ORDER_INFO
*
pbuf
)
=
0
;
virtual
void
FreeOrderBuf
(
FM_ORDER_INFO
*
pbuf
)
=
0
;
//
设置 非码-商户 支付类型对照表
//
设置 非码-商户 支付类型对照表
virtual
void
SetPayTypes
(
std
::
vector
<
fmPOSType
>
&
vecPay
)
=
0
;
virtual
void
SetPayTypes
(
std
::
vector
<
fmPOSType
>
&
vecPay
)
=
0
;
//
设置 非码-商户 外卖类型对照表
//
设置 非码-商户 外卖类型对照表
virtual
void
SetTakewayTypes
(
std
::
vector
<
fmPOSType
>
&
vecTakeway
)
=
0
;
virtual
void
SetTakewayTypes
(
std
::
vector
<
fmPOSType
>
&
vecTakeway
)
=
0
;
//////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////
//
外卖订单相关操作
//
外卖订单相关操作
//
设置外卖订单信息数据表
//
设置外卖订单信息数据表
virtual
int
SetTakeawayOrder
(
TakeawayOrder
&
order
)
=
0
;
virtual
int
SetTakeawayOrder
(
TakeawayOrder
&
order
)
=
0
;
//
外卖退单数据库操作
//
外卖退单数据库操作
virtual
int
CancleTakeaway
(
TakeawayOrder
&
order
)
=
0
;
virtual
int
CancleTakeaway
(
TakeawayOrder
&
order
)
=
0
;
//获取POS菜单
virtual
std
::
vector
<
PrinterMenu
>&
GetPOSMenu
()
=
0
;
};
};
#ifdef WIN32
#ifdef WIN32
...
...
bin/daemon_monitor.sh
0 → 100644
View file @
d49d5be4
#!/bin/bash
CMDClient
=
"/home/fm/monitor"
PIDClient
=
"./pidClient.txt"
# ---------------------------------------------------
# 启动函数
function
startClient
{
$CMDClient
2>&1 &
mypgmpid
=
$!
echo
$mypgmpid
>
$PIDClient
echo
"startClient [ok]"
}
# 停止函数
function
stopClient
{
kill
`
cat
$PIDClient
`
rm
$PIDClient
echo
"stopClient [ok]"
}
# --------------------------------------------------
echo
"
$CMDClient
$1
"
case
"
$1
"
in
start
)
startClient
;;
restart
)
if
[
-f
$PIDClient
]
;
then
stopClient
sleep 4
fi
startClient
;;
stop
)
stopClient
exit
0
;;
esac
for
((
c
=
0
;
;
c++
))
do
if
[
-f
$PIDClient
]
;
then
mypgmpid
=
`
cat
$PIDClient
`
cmdex
=
"ps uh -p
$mypgmpid
"
psrtn
=
`
$cmdex
`
if
[
-z
"
$psrtn
"
]
;
then
# 进程挂掉自动重启
echo
"
`
date
'+%Y/%m/%d %H:%M:%S'
`
FATALERROR RESTART SERVICE"
startClient
elif
((
$c
%20
==
0
))
;
then
# 记录进程运行状态
echo
"
`
date
'+%Y/%m/%d %H:%M:%S'
`
PSINFO
$psrtn
"
c
=
0
fi
sleep 3
else
break
fi
done
bin/monitor.ini
View file @
d49d5be4
...
@@ -4,6 +4,18 @@ dbName=pos
...
@@ -4,6 +4,18 @@ dbName=pos
user
=
root
user
=
root
password
=
123
password
=
123
#打印机数据库
[PRINTER_DB]
ip
=
localhost
dbName
=
pserver
user
=
root
password
=
123
[SYS]
[SYS]
pos
=
bifengtang
pos
=
bifengtang
serverip
=
192.168.0.111
serverip
=
192.168.0.102
\ No newline at end of file
#守护进程脚本
[SH]
monitor
=
/home/fm/daemon_monitor.sh start &
takeout
=
/home/fm/daemon_takeout.sh start &
\ No newline at end of file
pos_bft/OrderInfo.cpp
View file @
d49d5be4
...
@@ -27,6 +27,9 @@ COrderInfo::COrderInfo()
...
@@ -27,6 +27,9 @@ COrderInfo::COrderInfo()
db
.
timeout
=
5
;
db
.
timeout
=
5
;
db
.
interactive_timeout
=
5
;
db
.
interactive_timeout
=
5
;
mysql
=
new
MySQLService
(
&
db
);
mysql
=
new
MySQLService
(
&
db
);
strMonitorDeamon
=
ZIni
::
readString
(
"SH"
,
"monitor"
,
""
,
strIniPath
.
c_str
());
strTakeoutDeamon
=
ZIni
::
readString
(
"SH"
,
"takeout"
,
""
,
strIniPath
.
c_str
());
}
}
pthread_mutex_init
(
&
mutex
,
NULL
);
//初始化互斥锁
pthread_mutex_init
(
&
mutex
,
NULL
);
//初始化互斥锁
}
}
...
@@ -359,6 +362,11 @@ int COrderInfo::AddFMTable()
...
@@ -359,6 +362,11 @@ int COrderInfo::AddFMTable()
original_price INT,\
original_price INT,\
pid VARCHAR(20))"
);
pid VARCHAR(20))"
);
nErrCode
=
mysql
->
exec_proc
();
nErrCode
=
mysql
->
exec_proc
();
//设置“非码外卖按钮”
snprintf
(
mysql
->
sqlStr
,
SQL_BUFFER_SIZE
,
"UPDATE tbl_FuncType SET Name1='fmTakeout',Name2='·ÇÂëÍâÂô',Name3='·ÇÂëÍâÂô',Param1='%s' WHERE FuncNo=28;"
,
strTakeoutDeamon
.
data
());
nErrCode
=
mysql
->
update
();
return
nErrCode
;
return
nErrCode
;
}
}
...
@@ -423,6 +431,69 @@ char* COrderInfo::UTF8ToLatin1(const char *str)
...
@@ -423,6 +431,69 @@ char* COrderInfo::UTF8ToLatin1(const char *str)
return
_tempLatin1
;
return
_tempLatin1
;
}
}
bool
COrderInfo
::
GetMenuPrinter
()
{
LOG
(
INFO
)
<<
"---------------------get printer service--------------------"
;
vecPrinterMenus
.
clear
();
std
::
vector
<
PrintDevice
>
vecDevices
;
int
nErrCode
=
0
;
//打印机数据库
DB
dbDevice
;
std
::
string
strIniPath
=
GetProcDir
();
strIniPath
.
append
(
"monitor.ini"
);
dbDevice
.
server
=
ZIni
::
readString
(
"PRINTER_DB"
,
"ip"
,
""
,
strIniPath
.
c_str
());
dbDevice
.
db
=
ZIni
::
readString
(
"PRINTER_DB"
,
"dbName"
,
""
,
strIniPath
.
c_str
());
dbDevice
.
user
=
ZIni
::
readString
(
"PRINTER_DB"
,
"user"
,
""
,
strIniPath
.
c_str
());
dbDevice
.
passwd
=
ZIni
::
readString
(
"PRINTER_DB"
,
"password"
,
""
,
strIniPath
.
c_str
());
dbDevice
.
timeout
=
5
;
dbDevice
.
interactive_timeout
=
5
;
MySQLService
*
mysqlDevice
=
new
MySQLService
(
&
dbDevice
);
sprintf
(
mysqlDevice
->
sqlStr
,
"%s"
,
"SELECT Printer,Device FROM tbl_PrintDevice;"
);
nErrCode
=
mysqlDevice
->
query
();
while
((
mysqlDevice
->
_row
=
mysql_fetch_row
(
mysqlDevice
->
_result
))
!=
NULL
){
PrintDevice
device
;
device
.
id
=
atoi
(
mysqlDevice
->
_row
[
0
]);
device
.
device
=
mysqlDevice
->
_row
[
1
];
vecDevices
.
push_back
(
device
);
}
mysql_free_result
(
mysqlDevice
->
_result
);
delete
mysqlDevice
;
if
(
nErrCode
==-
1
)
return
false
;
//查询菜单数据
sprintf
(
mysql
->
sqlStr
,
"%s"
,
"SELECT Item,PrintQ1 FROM tbl_Menu;"
);
nErrCode
=
mysql
->
query
();
while
((
mysql
->
_row
=
mysql_fetch_row
(
mysql
->
_result
))
!=
NULL
){
PrinterMenu
menu
;
menu
.
idMenu
=
mysql
->
_row
[
0
];
menu
.
idPrinter
=
atoi
(
mysql
->
_row
[
1
]);
for
(
auto
dev
:
vecDevices
){
if
(
menu
.
idPrinter
==
dev
.
id
){
menu
.
device
=
dev
.
device
;
}
}
vecPrinterMenus
.
push_back
(
menu
);
}
mysql_free_result
(
mysql
->
_result
);
if
(
nErrCode
==-
1
)
return
false
;
// for(auto menu:vecPrinterMenus){
// LOG(INFO)<<"idMenu"<<menu.idMenu<<" idPrinter:"<<menu.idPrinter<<" device:"<<menu.device;
// }
return
true
;
}
std
::
vector
<
PrinterMenu
>&
COrderInfo
::
GetPOSMenu
()
{
if
(
!
GetMenuPrinter
())
LOG
(
INFO
)
<<
"Get menu info failed!"
;
return
vecPrinterMenus
;
}
//需要导出的函数,即用户在外部可以调用的接口
//需要导出的函数,即用户在外部可以调用的接口
bool
GetOperationObject
(
void
**
_RtObject
)
bool
GetOperationObject
(
void
**
_RtObject
)
{
{
...
...
pos_bft/OrderInfo.h
View file @
d49d5be4
...
@@ -54,6 +54,8 @@ public:
...
@@ -54,6 +54,8 @@ public:
//外卖退单数据库操作
//外卖退单数据库操作
int
CancleTakeaway
(
TakeawayOrder
&
order
);
int
CancleTakeaway
(
TakeawayOrder
&
order
);
//////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////
std
::
vector
<
PrinterMenu
>&
GetPOSMenu
();
std
::
string
m_FMPay
;
std
::
string
m_FMPay
;
...
@@ -64,11 +66,15 @@ private:
...
@@ -64,11 +66,15 @@ private:
void
GetPosPayType
(
IN
std
::
string
fmPayType
,
OUT
fmPOSType
&
payType
);
void
GetPosPayType
(
IN
std
::
string
fmPayType
,
OUT
fmPOSType
&
payType
);
void
GetTakewayType
(
IN
std
::
string
strType
,
OUT
fmPOSType
&
takewayType
);
void
GetTakewayType
(
IN
std
::
string
strType
,
OUT
fmPOSType
&
takewayType
);
std
::
vector
<
fmPOSType
>
vecPayTypes
;
//非码-商户 支付类型对应表
std
::
vector
<
fmPOSType
>
vecPayTypes
;
//非码-商户 支付类型对应表
std
::
vector
<
fmPOSType
>
vecTakewayTypes
;
//非码-商户 外卖类型对应表
std
::
vector
<
fmPOSType
>
vecTakewayTypes
;
//非码-商户 外卖类型对应表
std
::
vector
<
PrinterMenu
>
vecPrinterMenus
;
//菜单-打印机 类型对应表
char
*
UTF8ToLatin1
(
const
char
*
str
);
char
*
UTF8ToLatin1
(
const
char
*
str
);
//获取菜品对应打印机及打印设备
bool
GetMenuPrinter
();
//向数据库总添加:fmTemp表 | 触发器 | fmTakeaway表 | fmTakeaway_products表
//向数据库总添加:fmTemp表 | 触发器 | fmTakeaway表 | fmTakeaway_products表
int
AddFMTable
();
int
AddFMTable
();
...
@@ -76,6 +82,8 @@ private:
...
@@ -76,6 +82,8 @@ private:
MySQLService
*
mysql
;
MySQLService
*
mysql
;
DB
db
;
DB
db
;
char
*
_tempLatin1
;
//utf8转换为Latin1后,存放在此变量中
char
*
_tempLatin1
;
//utf8转换为Latin1后,存放在此变量中
std
::
string
strMonitorDeamon
;
//monitor守护进程脚本文件路径
std
::
string
strTakeoutDeamon
;
//takeout守护进程脚本文件路径
};
};
#endif
#endif
src/PayProcess.cpp
View file @
d49d5be4
...
@@ -256,6 +256,16 @@ void *FunTakeaway(void* lpParamter)
...
@@ -256,6 +256,16 @@ void *FunTakeaway(void* lpParamter)
msg
=
"refund order:write error"
;
msg
=
"refund order:write error"
;
}
}
}
}
else
if
(
order
.
fm_cmd
==
"get_menu"
){
LOG
(
INFO
)
<<
"------get pos menu------"
;
std
::
vector
<
PrinterMenu
>
&
vecMenu
=
dbOperation
->
GetPOSMenu
();
LOG
(
INFO
)
<<
"------get pos menu------111111"
;
// for(auto menu:vecMenu){
// LOG(INFO)<<"idMenu"<<menu.idMenu<<" idPrinter:"<<menu.idPrinter<<" device:"<<menu.device;
// }
std
::
string
resJson
=
GetPOSMenuJson
(
vecMenu
);
socketSendData
(
resJson
.
data
(),
connect_fd
);
}
LOG
(
INFO
)
<<
"外卖:"
<<
order
.
order_index
<<
" 写数据库:"
<<
statusCode
;
LOG
(
INFO
)
<<
"外卖:"
<<
order
.
order_index
<<
" 写数据库:"
<<
statusCode
;
//delete[] strGBK;
//delete[] strGBK;
...
@@ -263,7 +273,8 @@ void *FunTakeaway(void* lpParamter)
...
@@ -263,7 +273,8 @@ void *FunTakeaway(void* lpParamter)
{
{
std
::
string
strReturnJson
=
GetTakeawayResultJson
(
statusCode
,
msg
.
data
());
std
::
string
strReturnJson
=
GetTakeawayResultJson
(
statusCode
,
msg
.
data
());
//发送返回数据
//发送返回数据
int
result
=
send
(
connect_fd
,
strReturnJson
.
data
(),
strReturnJson
.
length
(),
0
);
//int result = send(connect_fd, strReturnJson.data(), strReturnJson.length(), 0);
int
result
=
socketSendData
(
strReturnJson
.
data
(),
connect_fd
);
LOG
(
INFO
)
<<
"外卖发送处理结果:"
<<
strReturnJson
.
c_str
();
LOG
(
INFO
)
<<
"外卖发送处理结果:"
<<
strReturnJson
.
c_str
();
}
}
close
(
connect_fd
);
close
(
connect_fd
);
...
...
src/json.cpp
View file @
d49d5be4
// json.cpp :
定义控制台应用程序的入口点。
// json.cpp :
定义控制台应用程序的入口点。
//
//
#include "json.h"
#include "json.h"
#include <iostream>
#include <iostream>
#include "../3rdParty/easylogging/easylogging++.h"
//
将支付订单信息结构组合为json字串
//
将支付订单信息结构组合为json字串
std
::
string
GetPayJson
(
FM_ORDER_INFO
&
OrderInfo
)
std
::
string
GetPayJson
(
FM_ORDER_INFO
&
OrderInfo
)
{
{
rapidjson
::
StringBuffer
buffer
;
rapidjson
::
StringBuffer
buffer
;
...
@@ -60,7 +61,7 @@ std::string GetPayJson(FM_ORDER_INFO &OrderInfo)
...
@@ -60,7 +61,7 @@ std::string GetPayJson(FM_ORDER_INFO &OrderInfo)
writer
.
Key
(
"products"
);
writer
.
Key
(
"products"
);
writer
.
StartArray
();
writer
.
StartArray
();
//-----------------start
单个商品
------------------
//-----------------start
单个商品--
----------------
for
(
unsigned
int
i
=
0
;
i
<
OrderInfo
.
vecGoods
.
size
();
i
++
)
for
(
unsigned
int
i
=
0
;
i
<
OrderInfo
.
vecGoods
.
size
();
i
++
)
{
{
writer
.
StartObject
();
writer
.
StartObject
();
...
@@ -75,7 +76,7 @@ std::string GetPayJson(FM_ORDER_INFO &OrderInfo)
...
@@ -75,7 +76,7 @@ std::string GetPayJson(FM_ORDER_INFO &OrderInfo)
writer
.
EndObject
();
writer
.
EndObject
();
}
}
//-----------------end
单个商品
------------------
//-----------------end
单个商品--
----------------
writer
.
EndArray
();
writer
.
EndArray
();
//-----------------end products--------------------
//-----------------end products--------------------
writer
.
EndObject
();
writer
.
EndObject
();
...
@@ -86,17 +87,17 @@ std::string GetPayJson(FM_ORDER_INFO &OrderInfo)
...
@@ -86,17 +87,17 @@ std::string GetPayJson(FM_ORDER_INFO &OrderInfo)
return
buffer
.
GetString
();
return
buffer
.
GetString
();
}
}
//
通过json字串获取外卖订单信息
//
通过json字串获取外卖订单信息
bool
GetTakeawayOrder
(
const
char
*
lpJson
,
TakeawayOrder
&
order
)
bool
GetTakeawayOrder
(
const
char
*
lpJson
,
TakeawayOrder
&
order
)
{
{
rapidjson
::
Document
document
;
//
定义一个Document对象
rapidjson
::
Document
document
;
//
定义一个Document对象
document
.
Parse
(
lpJson
);
//
解析,Parse()无返回值,也不会抛异常
document
.
Parse
(
lpJson
);
//
解析,Parse()无返回值,也不会抛异常
if
(
document
.
HasParseError
())
//
通过HasParseError()来判断解析是否成功
if
(
document
.
HasParseError
())
//
通过HasParseError()来判断解析是否成功
{
{
//
可通过GetParseError()取得出错代码,
//
可通过GetParseError()取得出错代码,
//
注意GetParseError()返回的是一个rapidjson::ParseErrorCode类型的枚举值
//
注意GetParseError()返回的是一个rapidjson::ParseErrorCode类型的枚举值
//
使用函数rapidjson::GetParseError_En()得到错误码的字符串说明,这里的En为English简写
//
使用函数rapidjson::GetParseError_En()得到错误码的字符串说明,这里的En为English简写
//
函数GetErrorOffset()返回出错发生的位置
//
函数GetErrorOffset()返回出错发生的位置
//LOG_ERROR("TakeawayOrder JSON parse error: (%d:%d)", document.GetParseError(), document.GetErrorOffset())
//LOG_ERROR("TakeawayOrder JSON parse error: (%d:%d)", document.GetParseError(), document.GetErrorOffset())
}
}
else
else
...
@@ -110,6 +111,9 @@ bool GetTakeawayOrder(const char* lpJson, TakeawayOrder &order)
...
@@ -110,6 +111,9 @@ bool GetTakeawayOrder(const char* lpJson, TakeawayOrder &order)
rapidjson
::
Value
&
fm_id
=
document
[
"fm_id"
];
rapidjson
::
Value
&
fm_id
=
document
[
"fm_id"
];
order
.
fm_id
=
fm_id
.
GetString
();
order
.
fm_id
=
fm_id
.
GetString
();
}
}
else
if
(
order
.
fm_cmd
==
"get_menu"
){
}
else
else
{
{
rapidjson
::
Value
&
pay_id_obj
=
document
[
"pay_id"
];
rapidjson
::
Value
&
pay_id_obj
=
document
[
"pay_id"
];
...
@@ -178,9 +182,9 @@ bool GetTakeawayOrder(const char* lpJson, TakeawayOrder &order)
...
@@ -178,9 +182,9 @@ bool GetTakeawayOrder(const char* lpJson, TakeawayOrder &order)
return
true
;
return
true
;
}
}
//
获取外卖订单返回结果的json字串
//
获取外卖订单返回结果的json字串
// statuscode
状态码
// statuscode
状态码
// msg
状态信息
// msg
状态信息
std
::
string
GetTakeawayResultJson
(
const
int
statuscode
,
const
char
*
msg
)
std
::
string
GetTakeawayResultJson
(
const
int
statuscode
,
const
char
*
msg
)
{
{
rapidjson
::
StringBuffer
buffer
;
rapidjson
::
StringBuffer
buffer
;
...
@@ -197,3 +201,11 @@ std::string GetTakeawayResultJson(const int statuscode,const char* msg)
...
@@ -197,3 +201,11 @@ std::string GetTakeawayResultJson(const int statuscode,const char* msg)
return
buffer
.
GetString
();
return
buffer
.
GetString
();
}
}
std
::
string
GetPOSMenuJson
(
std
::
vector
<
PrinterMenu
>
&
vecMenu
)
{
for
(
auto
menu
:
vecMenu
){
LOG
(
INFO
)
<<
"idMenu"
<<
menu
.
idMenu
<<
" idPrinter:"
<<
menu
.
idPrinter
<<
" device:"
<<
menu
.
device
;
}
return
"123456"
;
}
\ No newline at end of file
src/json.h
View file @
d49d5be4
...
@@ -5,13 +5,15 @@
...
@@ -5,13 +5,15 @@
#include "../base/CommonStruct.h"
#include "../base/CommonStruct.h"
//
将支付订单信息结构组合为json字串
//
将支付订单信息结构组合为json字串
std
::
string
GetPayJson
(
FM_ORDER_INFO
&
OrderInfo
);
std
::
string
GetPayJson
(
FM_ORDER_INFO
&
OrderInfo
);
//
通过json字串获取外卖订单信息
//
通过json字串获取外卖订单信息
bool
GetTakeawayOrder
(
const
char
*
json
,
TakeawayOrder
&
order
);
bool
GetTakeawayOrder
(
const
char
*
json
,
TakeawayOrder
&
order
);
//
获取外卖订单返回结果的json字串
//
获取外卖订单返回结果的json字串
std
::
string
GetTakeawayResultJson
(
const
int
statuscode
,
const
char
*
msg
);
std
::
string
GetTakeawayResultJson
(
const
int
statuscode
,
const
char
*
msg
);
std
::
string
GetPOSMenuJson
(
std
::
vector
<
PrinterMenu
>
&
vecMenu
);
#endif
#endif
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