Commit fdda3cd9 by guanghui.cui

sql执行异常,数据进行回滚

parent fc7bfe9f
...@@ -2,7 +2,7 @@ ...@@ -2,7 +2,7 @@
* ServicePool.cpp * ServicePool.cpp
* *
*/ */
#include <exception>
#include "../3rdParty/easylogging/easylogging++.h" #include "../3rdParty/easylogging/easylogging++.h"
#include "MySQLService.h" #include "MySQLService.h"
...@@ -139,11 +139,19 @@ int MySQLService::query() ...@@ -139,11 +139,19 @@ int MySQLService::query()
} }
LOG(INFO) << "SQL : " << sqlStr; LOG(INFO) << "SQL : " << sqlStr;
///执行sql查询 ///执行sql查询
try
{
if (0 != mysql_query(&_connect, sqlStr)) { if (0 != mysql_query(&_connect, sqlStr)) {
LOG(ERROR) << sqlStr; LOG(ERROR) << sqlStr;
LOG(ERROR) << "query sql exception: " << mysql_error(&_connect); LOG(ERROR) << "query sql exception: " << mysql_error(&_connect);
return -1; return -1;
} }
}
catch (exception& e)
{
LOG(ERROR) << "catch sql exception:" << e.what();
return -1;
}
///保存查询结果 ///保存查询结果
if (NULL == (_result = mysql_store_result(&_connect))) { if (NULL == (_result = mysql_store_result(&_connect))) {
......
...@@ -197,6 +197,7 @@ int COrderInfo::SetTakeawayOrder(TakeawayOrder &order) ...@@ -197,6 +197,7 @@ int COrderInfo::SetTakeawayOrder(TakeawayOrder &order)
nErrCode = mysql->insert(); nErrCode = mysql->insert();
if(nErrCode != EC_OK) if(nErrCode != EC_OK)
{ {
rollbackData(orderIdStr);
pthread_mutex_unlock(&mutex); //解锁 pthread_mutex_unlock(&mutex); //解锁
return EC_EX_SQL_FAILED; return EC_EX_SQL_FAILED;
} }
...@@ -207,6 +208,12 @@ int COrderInfo::SetTakeawayOrder(TakeawayOrder &order) ...@@ -207,6 +208,12 @@ int COrderInfo::SetTakeawayOrder(TakeawayOrder &order)
values('%s',%d,%d,'%s')", \ values('%s',%d,%d,'%s')", \
orderIdStr,order.vecProducts[i].consume_num,order.vecProducts[i].original_price,order.vecProducts[i].pid.data()); orderIdStr,order.vecProducts[i].consume_num,order.vecProducts[i].original_price,order.vecProducts[i].pid.data());
nErrCode = mysql->insert(); 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) ...@@ -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')", \ 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); strDate.data(),orderId,orderIdStr,iOutlet,chTime,chTime,chTime,merchantTot,order.shop_fee/100.00,discount,merchantTot,chTime);
nErrCode = mysql->insert(); nErrCode = mysql->insert();
if(nErrCode != EC_OK)
{
rollbackData(orderIdStr);
pthread_mutex_unlock(&mutex); //解锁
return EC_EX_SQL_FAILED;
}
//获取商品详细信息,如果是套餐,把套餐菜品加入vector //获取商品详细信息,如果是套餐,把套餐菜品加入vector
std::vector<DishInfo> vecDish; std::vector<DishInfo> vecDish;
...@@ -256,6 +269,12 @@ int COrderInfo::SetTakeawayOrder(TakeawayOrder &order) ...@@ -256,6 +269,12 @@ int COrderInfo::SetTakeawayOrder(TakeawayOrder &order)
int childCount=0; int childCount=0;
snprintf(mysql->sqlStr,SQL_BUFFER_SIZE,"SELECT IsSetMenu FROM tbl_Menu WHERE Item='%s';",product.pid.data()); snprintf(mysql->sqlStr,SQL_BUFFER_SIZE,"SELECT IsSetMenu FROM tbl_Menu WHERE Item='%s';",product.pid.data());
nErrCode = mysql->query(); 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))){ if (NULL != (mysql->_row = mysql_fetch_row(mysql->_result))){
suit=atoi(mysql->_row[0]); suit=atoi(mysql->_row[0]);
mysql_free_result(mysql->_result); mysql_free_result(mysql->_result);
...@@ -263,6 +282,12 @@ int COrderInfo::SetTakeawayOrder(TakeawayOrder &order) ...@@ -263,6 +282,12 @@ int COrderInfo::SetTakeawayOrder(TakeawayOrder &order)
int pIndex=vecDish.size()+1; int pIndex=vecDish.size()+1;
snprintf(mysql->sqlStr,SQL_BUFFER_SIZE,"SELECT ChildItem,UnitQty FROM tbl_SetMenu WHERE ParentItem='%s';",product.pid.data()); snprintf(mysql->sqlStr,SQL_BUFFER_SIZE,"SELECT ChildItem,UnitQty FROM tbl_SetMenu WHERE ParentItem='%s';",product.pid.data());
nErrCode = mysql->query(); 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){ while ((mysql->_row = mysql_fetch_row(mysql->_result)) != NULL){
DishInfo childInfo={0,0,"",0,0,2,"0"}; DishInfo childInfo={0,0,"",0,0,2,"0"};
childInfo.pid=mysql->_row[0]; childInfo.pid=mysql->_row[0];
...@@ -293,6 +318,12 @@ int COrderInfo::SetTakeawayOrder(TakeawayOrder &order) ...@@ -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()); 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(); 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))){ if (NULL != (mysql->_row = mysql_fetch_row(mysql->_result))){
dish_name=mysql->_row[0]; dish_name=mysql->_row[0];
print1=atoi(mysql->_row[1]); print1=atoi(mysql->_row[1]);
...@@ -313,6 +344,12 @@ int COrderInfo::SetTakeawayOrder(TakeawayOrder &order) ...@@ -313,6 +344,12 @@ int COrderInfo::SetTakeawayOrder(TakeawayOrder &order)
print5,dish.isPrintCheck.data(),price_product,price_product,discount_product,\ 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); dish.consume_num,tot_product,discount_product,tot_product,dept,cat,chTime,dish.index,dish.childCount);
nErrCode = mysql->insert(); 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) ...@@ -354,6 +391,12 @@ int COrderInfo::SetTakeawayOrder(TakeawayOrder &order)
VALUES('%s',%d,%d,1,%d,'%s',4,'%s',99,%.2f,1,'',1,'%s')", \ 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); strDate.data(),orderId,iOutlet,atoi(posTakeway.merchantTypeId.data()),posTakeway.strName.data(),chTime,merchantTot,chTime);
nErrCode = mysql->insert(); nErrCode = mysql->insert();
if(nErrCode != EC_OK)
{
rollbackData(orderIdStr);
pthread_mutex_unlock(&mutex); //解锁
return EC_EX_SQL_FAILED;
}
pthread_mutex_unlock(&mutex); //解锁 pthread_mutex_unlock(&mutex); //解锁
return 0; return 0;
} }
...@@ -647,6 +690,25 @@ void COrderInfo::CleanOldData() ...@@ -647,6 +690,25 @@ void COrderInfo::CleanOldData()
LOG(INFO)<<"Clean up more than six months of data"; 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) bool GetOperationObject(void** _RtObject)
{ {
......
...@@ -94,6 +94,7 @@ private: ...@@ -94,6 +94,7 @@ private:
//向数据库总添加:fmTemp表 | 触发器 | fmTakeaway表 | fmTakeaway_products表 //向数据库总添加:fmTemp表 | 触发器 | fmTakeaway表 | fmTakeaway_products表
int AddFMTable(); int AddFMTable();
void rollbackData(std::string orderid);
pthread_mutex_t mutex; //互斥锁 pthread_mutex_t mutex; //互斥锁
MySQLService *mysql; MySQLService *mysql;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment