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
fdda3cd9
Commit
fdda3cd9
authored
Oct 16, 2017
by
guanghui.cui
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
sql执行异常,数据进行回滚
parent
fc7bfe9f
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
77 additions
and
6 deletions
+77
-6
base/MySQLService.cpp
+14
-6
pos_bft/OrderInfo.cpp
+62
-0
pos_bft/OrderInfo.h
+1
-0
No files found.
base/MySQLService.cpp
View file @
fdda3cd9
...
...
@@ -2,7 +2,7 @@
* ServicePool.cpp
*
*/
#include <exception>
#include "../3rdParty/easylogging/easylogging++.h"
#include "MySQLService.h"
...
...
@@ -139,11 +139,19 @@ int MySQLService::query()
}
LOG
(
INFO
)
<<
"SQL : "
<<
sqlStr
;
///执行sql查询
if
(
0
!=
mysql_query
(
&
_connect
,
sqlStr
))
{
LOG
(
ERROR
)
<<
sqlStr
;
LOG
(
ERROR
)
<<
"query sql exception: "
<<
mysql_error
(
&
_connect
);
return
-
1
;
}
try
{
if
(
0
!=
mysql_query
(
&
_connect
,
sqlStr
))
{
LOG
(
ERROR
)
<<
sqlStr
;
LOG
(
ERROR
)
<<
"query sql exception: "
<<
mysql_error
(
&
_connect
);
return
-
1
;
}
}
catch
(
exception
&
e
)
{
LOG
(
ERROR
)
<<
"catch sql exception:"
<<
e
.
what
();
return
-
1
;
}
///保存查询结果
if
(
NULL
==
(
_result
=
mysql_store_result
(
&
_connect
)))
{
...
...
pos_bft/OrderInfo.cpp
View file @
fdda3cd9
...
...
@@ -197,6 +197,7 @@ int COrderInfo::SetTakeawayOrder(TakeawayOrder &order)
nErrCode
=
mysql
->
insert
();
if
(
nErrCode
!=
EC_OK
)
{
rollbackData
(
orderIdStr
);
pthread_mutex_unlock
(
&
mutex
);
//解锁
return
EC_EX_SQL_FAILED
;
}
...
...
@@ -207,6 +208,12 @@ int COrderInfo::SetTakeawayOrder(TakeawayOrder &order)
values('%s',%d,%d,'%s')"
,
\
orderIdStr
,
order
.
vecProducts
[
i
].
consume_num
,
order
.
vecProducts
[
i
].
original_price
,
order
.
vecProducts
[
i
].
pid
.
data
());
nErrCode
=
mysql
->
insert
();
if
(
nErrCode
!=
EC_OK
)
{
rollbackData
(
orderIdStr
);
pthread_mutex_unlock
(
&
mutex
);
//解锁
return
EC_EX_SQL_FAILED
;
}
}
//获取系统时间,添加记录时使用
...
...
@@ -242,6 +249,12 @@ int COrderInfo::SetTakeawayOrder(TakeawayOrder &order)
VALUES('%s',%d,'%s',%d,1,'1',4,'%s',3,99,99,4,'%s',4,99,4,1,'%s',%.2f,%.2f,%.2f,%.2f,'1',0.1,1,'%s')"
,
\
strDate
.
data
(),
orderId
,
orderIdStr
,
iOutlet
,
chTime
,
chTime
,
chTime
,
merchantTot
,
order
.
shop_fee
/
100.00
,
discount
,
merchantTot
,
chTime
);
nErrCode
=
mysql
->
insert
();
if
(
nErrCode
!=
EC_OK
)
{
rollbackData
(
orderIdStr
);
pthread_mutex_unlock
(
&
mutex
);
//解锁
return
EC_EX_SQL_FAILED
;
}
//获取商品详细信息,如果是套餐,把套餐菜品加入vector
std
::
vector
<
DishInfo
>
vecDish
;
...
...
@@ -256,6 +269,12 @@ int COrderInfo::SetTakeawayOrder(TakeawayOrder &order)
int
childCount
=
0
;
snprintf
(
mysql
->
sqlStr
,
SQL_BUFFER_SIZE
,
"SELECT IsSetMenu FROM tbl_Menu WHERE Item='%s';"
,
product
.
pid
.
data
());
nErrCode
=
mysql
->
query
();
if
(
nErrCode
!=
EC_OK
)
{
rollbackData
(
orderIdStr
);
pthread_mutex_unlock
(
&
mutex
);
//解锁
return
EC_EX_SQL_FAILED
;
}
if
(
NULL
!=
(
mysql
->
_row
=
mysql_fetch_row
(
mysql
->
_result
))){
suit
=
atoi
(
mysql
->
_row
[
0
]);
mysql_free_result
(
mysql
->
_result
);
...
...
@@ -263,6 +282,12 @@ int COrderInfo::SetTakeawayOrder(TakeawayOrder &order)
int
pIndex
=
vecDish
.
size
()
+
1
;
snprintf
(
mysql
->
sqlStr
,
SQL_BUFFER_SIZE
,
"SELECT ChildItem,UnitQty FROM tbl_SetMenu WHERE ParentItem='%s';"
,
product
.
pid
.
data
());
nErrCode
=
mysql
->
query
();
if
(
nErrCode
!=
EC_OK
)
{
rollbackData
(
orderIdStr
);
pthread_mutex_unlock
(
&
mutex
);
//解锁
return
EC_EX_SQL_FAILED
;
}
while
((
mysql
->
_row
=
mysql_fetch_row
(
mysql
->
_result
))
!=
NULL
){
DishInfo
childInfo
=
{
0
,
0
,
""
,
0
,
0
,
2
,
"0"
};
childInfo
.
pid
=
mysql
->
_row
[
0
];
...
...
@@ -293,6 +318,12 @@ int COrderInfo::SetTakeawayOrder(TakeawayOrder &order)
//查询商品详细信息
snprintf
(
mysql
->
sqlStr
,
SQL_BUFFER_SIZE
,
"SELECT Name3,PrintQ1,PrintQ2,PrintQ3,PrintQ4,PrintQ5,Category,Dept FROM tbl_Menu WHERE Item='%s';"
,
dish
.
pid
.
data
());
nErrCode
=
mysql
->
query
();
if
(
nErrCode
!=
EC_OK
)
{
rollbackData
(
orderIdStr
);
pthread_mutex_unlock
(
&
mutex
);
//解锁
return
EC_EX_SQL_FAILED
;
}
if
(
NULL
!=
(
mysql
->
_row
=
mysql_fetch_row
(
mysql
->
_result
))){
dish_name
=
mysql
->
_row
[
0
];
print1
=
atoi
(
mysql
->
_row
[
1
]);
...
...
@@ -313,6 +344,12 @@ int COrderInfo::SetTakeawayOrder(TakeawayOrder &order)
print5
,
dish
.
isPrintCheck
.
data
(),
price_product
,
price_product
,
discount_product
,
\
dish
.
consume_num
,
tot_product
,
discount_product
,
tot_product
,
dept
,
cat
,
chTime
,
dish
.
index
,
dish
.
childCount
);
nErrCode
=
mysql
->
insert
();
if
(
nErrCode
!=
EC_OK
)
{
rollbackData
(
orderIdStr
);
pthread_mutex_unlock
(
&
mutex
);
//解锁
return
EC_EX_SQL_FAILED
;
}
}
// //订单商品写入“订单详情表”
...
...
@@ -354,6 +391,12 @@ int COrderInfo::SetTakeawayOrder(TakeawayOrder &order)
VALUES('%s',%d,%d,1,%d,'%s',4,'%s',99,%.2f,1,'',1,'%s')"
,
\
strDate
.
data
(),
orderId
,
iOutlet
,
atoi
(
posTakeway
.
merchantTypeId
.
data
()),
posTakeway
.
strName
.
data
(),
chTime
,
merchantTot
,
chTime
);
nErrCode
=
mysql
->
insert
();
if
(
nErrCode
!=
EC_OK
)
{
rollbackData
(
orderIdStr
);
pthread_mutex_unlock
(
&
mutex
);
//解锁
return
EC_EX_SQL_FAILED
;
}
pthread_mutex_unlock
(
&
mutex
);
//解锁
return
0
;
}
...
...
@@ -647,6 +690,25 @@ void COrderInfo::CleanOldData()
LOG
(
INFO
)
<<
"Clean up more than six months of data"
;
}
void
COrderInfo
::
rollbackData
(
std
::
string
orderid
)
{
int
iOrderId
=
atoi
(
orderid
.
data
());
snprintf
(
mysql
->
sqlStr
,
SQL_BUFFER_SIZE
,
"DELETE FROM fmTakeaway WHERE orderid='%s';"
,
orderid
.
data
());
mysql
->
remove
();
snprintf
(
mysql
->
sqlStr
,
SQL_BUFFER_SIZE
,
"DELETE FROM fmTakeaway_products WHERE orderid='%s';"
,
orderid
.
data
());
mysql
->
remove
();
snprintf
(
mysql
->
sqlStr
,
SQL_BUFFER_SIZE
,
"DELETE FROM tbl_Check WHERE `Check`=%d;"
,
iOrderId
);
mysql
->
remove
();
snprintf
(
mysql
->
sqlStr
,
SQL_BUFFER_SIZE
,
"DELETE FROM tbl_Item WHERE `Check`=%d;"
,
iOrderId
);
mysql
->
remove
();
snprintf
(
mysql
->
sqlStr
,
SQL_BUFFER_SIZE
,
"DELETE FROM tbl_Payment WHERE `Check`=%d;"
,
iOrderId
);
mysql
->
remove
();
}
//需要导出的函数,即用户在外部可以调用的接口
bool
GetOperationObject
(
void
**
_RtObject
)
{
...
...
pos_bft/OrderInfo.h
View file @
fdda3cd9
...
...
@@ -94,6 +94,7 @@ private:
//向数据库总添加:fmTemp表 | 触发器 | fmTakeaway表 | fmTakeaway_products表
int
AddFMTable
();
void
rollbackData
(
std
::
string
orderid
);
pthread_mutex_t
mutex
;
//互斥锁
MySQLService
*
mysql
;
...
...
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