Commit d91d29c1 by wuyang.zou

1. 插件订单插PMS数据库的排队list 的处理频率改进为 2s;

Version 4.2020.521.1
parent feeb3bb9
...@@ -104,7 +104,7 @@ FlowControl::FlowControl() ...@@ -104,7 +104,7 @@ FlowControl::FlowControl()
_InitDataBeforeLogin(); _InitDataBeforeLogin();
m_loginTimer->start(6*1000); m_loginTimer->start(6*1000);
m_notifyPmsPullTimer->start(1000*5); m_notifyPmsPullTimer->start(1000*2);
//_TestRedis(); //_TestRedis();
//_TestInsertOrderData(); //_TestInsertOrderData();
...@@ -312,7 +312,7 @@ void FlowControl::_NotifyPmsPullOrder() ...@@ -312,7 +312,7 @@ void FlowControl::_NotifyPmsPullOrder()
QLOG_INFO()<<QString::fromLocal8Bit("[<<<<---:_NotifyPmsPullOrder: m_simValidOrdersList.isEmpty()==%1--->>>>>]").arg(m_simValidOrdersList.isEmpty()); QLOG_INFO()<<QString::fromLocal8Bit("[<<<<---:_NotifyPmsPullOrder: m_simValidOrdersList.isEmpty()==%1--->>>>>]").arg(m_simValidOrdersList.isEmpty());
if(!m_simValidOrdersList.isEmpty()) if(!m_simValidOrdersList.isEmpty())
{ {
m_notifyPmsPullTimer->start(1000*5); m_notifyPmsPullTimer->start(1000*2);
QLOG_INFO()<<QString::fromLocal8Bit("[<<<<---FM插件 向PMS数据库插入数据; 并添加 Redis --->>>>]"); QLOG_INFO()<<QString::fromLocal8Bit("[<<<<---FM插件 向PMS数据库插入数据; 并添加 Redis --->>>>]");
QString listFirstOrderId = m_simValidOrdersList.takeFirst(); QString listFirstOrderId = m_simValidOrdersList.takeFirst();
...@@ -368,8 +368,8 @@ void FlowControl::_NotifyPmsPullOrder() ...@@ -368,8 +368,8 @@ void FlowControl::_NotifyPmsPullOrder()
QLOG_INFO()<<QString::fromLocal8Bit("[<<<<---FlowControl::_NotifyPmsPullOrder Insert Mysql DB orderObject Is Null:--->>>>]"); QLOG_INFO()<<QString::fromLocal8Bit("[<<<<---FlowControl::_NotifyPmsPullOrder Insert Mysql DB orderObject Is Null:--->>>>]");
} }
} else { } else {
//如果订单队列中没有待处理订单,定时器设定为8s; //如果订单队列中没有待处理订单,定时器设定为3s;
m_notifyPmsPullTimer->start(1000*8); m_notifyPmsPullTimer->start(1000*3);
} }
} }
...@@ -439,13 +439,14 @@ void FlowControl::_OrderAnalysis(const QJsonObject& jsonObject) ...@@ -439,13 +439,14 @@ void FlowControl::_OrderAnalysis(const QJsonObject& jsonObject)
orderObject->dataBasePosOrderCheckNo = ""; orderObject->dataBasePosOrderCheckNo = "";
//插件程序内存中没有此订单时需要从数据库中获取该订单标志数据;同时在接受到退单情况时,也需要从数据库中重新获取(防止内存中标志数据未更新[入机后未更新]); //插件程序内存中没有此订单时需要从数据库中获取该订单标志数据;同时在接受到退单情况时,也需要从数据库中重新获取(防止内存中标志数据未更新[入机后未更新]);
//查询此 订单+订单状态 是否已经存在数据库中; //查询此 订单+订单状态+制作状态 是否已经存在数据库中;
bool pmsOrderStatusIsExistRet = PmsOrdersData::getInstance().isOrderAndStatusExist(orderObject->id, orderObject->orderStatus); bool pmsMakeStatusIsExistRet = true;
bool pmsOrderStatusIsExistRet = PmsOrdersData::getInstance().isOrderAndStatusExist(orderObject->id, orderObject->orderStatus, orderObject->makeStatus, pmsMakeStatusIsExistRet );
m_FmOrdersMap.insert(orderObject->id, orderObject); m_FmOrdersMap.insert(orderObject->id, orderObject);
QLOG_INFO() << QString("[<<<<---FmTakeout Valid Orders Map:Insert New Order[%1:%2]--->>>>][data:]") QLOG_INFO() << QString("[<<<<---FmTakeout Valid Orders Map:Insert New Order[ OrderId: %1 OrderDesc: %2 OrderStatus: %3 OrderMakeStatus: %4]--->>>>]")
.arg(orderObject->id,orderObject->getOrderStatusDec()); .arg(orderObject->id).arg( orderObject->getOrderStatusDec() ).arg(orderObject->orderStatus).arg(orderObject->makeStatus);
if(!pmsOrderStatusIsExistRet) { if(!pmsOrderStatusIsExistRet || !pmsMakeStatusIsExistRet) {
//程序刚启动+量大+ 异步也无碍 顾无需加锁; //程序刚启动+量大+ 异步也无碍 顾无需加锁;
m_simValidOrdersList.append(orderObject->id); m_simValidOrdersList.append(orderObject->id);
} }
...@@ -455,11 +456,13 @@ void FlowControl::_OrderAnalysis(const QJsonObject& jsonObject) ...@@ -455,11 +456,13 @@ void FlowControl::_OrderAnalysis(const QJsonObject& jsonObject)
/***<2>:FM插件维护的有效订单容器中存在此订单:更新订单容器中此订单的订单状态***/ /***<2>:FM插件维护的有效订单容器中存在此订单:更新订单容器中此订单的订单状态***/
else { else {
int oldStatus = orderObject->orderStatus; int oldStatus = orderObject->orderStatus;
QString oldMakeStatus = orderObject->makeStatus;
orderObject->FromJson(jsonObject); orderObject->FromJson(jsonObject);
QLOG_INFO() << QString("[<<<<---FmTakeout Valid Order Map:Update orderId:%1 OldStatus:%2: curStatus:%3]--->>>>]") QLOG_INFO() << QString("[<<<<---FmTakeout Valid Order Map:Update orderId:%1 OldStatus:%2: curStatus:%3]--->>>>]")
.arg(orderObject->id).arg(oldStatus).arg(orderObject->orderStatus); .arg(orderObject->id).arg(oldStatus).arg(orderObject->orderStatus);
// 如果订单状态出现变化需添加到队列; // 如果订单状态 和 制作状态 出现变化都需添加到队列;
if(oldStatus != orderObject->orderStatus) { if(oldStatus != orderObject->orderStatus || oldMakeStatus != orderObject->makeStatus) {
bRetOrderEntryMutex =m_OrderEntryMutex.tryLock(VALUE_TRYLOCKMEMTIMEOUT); bRetOrderEntryMutex =m_OrderEntryMutex.tryLock(VALUE_TRYLOCKMEMTIMEOUT);
if(!bRetOrderEntryMutex) { if(!bRetOrderEntryMutex) {
QLOG_INFO() << QString("[<<<<---FmTakeout _OrderAnalysis:orderId:%1 OrderStatus:%2 Change m_OrderEntryMutex.tryLock Failed --->>>>]") QLOG_INFO() << QString("[<<<<---FmTakeout _OrderAnalysis:orderId:%1 OrderStatus:%2 Change m_OrderEntryMutex.tryLock Failed --->>>>]")
...@@ -614,7 +617,7 @@ bool FlowControl::_Login() ...@@ -614,7 +617,7 @@ bool FlowControl::_Login()
m_heartTimer->start(1000*60*5); m_heartTimer->start(1000*60*5);
m_pullTimer->start(1000*5); m_pullTimer->start(1000*5);
m_reportOMSReocrdOrderTimer->start(1000*5); m_reportOMSReocrdOrderTimer->start(1000*5);
m_notifyPmsPullTimer->start(10*1000); m_notifyPmsPullTimer->start(3*1000);
m_remindCasherBlinkFloatTimer->start(5*1000); m_remindCasherBlinkFloatTimer->start(5*1000);
m_cyclePullAllOrderTimer->start(1000*60*10); m_cyclePullAllOrderTimer->start(1000*60*10);
......
...@@ -69,22 +69,16 @@ int PmsOrdersData::convertPosServiceTypeId( const OrderObject* orderObj, const ...@@ -69,22 +69,16 @@ int PmsOrdersData::convertPosServiceTypeId( const OrderObject* orderObj, const
} }
// MOD渠道对应的业务逻辑 ; 星巴克-MOD,百度外卖,饿了么APP,美团外卖,星巴克-MOP; // MOD渠道对应的业务逻辑 ; 星巴克-MOD,百度外卖,饿了么APP,美团外卖,星巴克-MOP;
else if("MOD" == orderObj->channel) { else if("MOD" == orderObj->channel) {
// platformSource:平台来源:1 app;2 ele;3 ors;4 WeChat 【businessType:10-预约 20-WSG, 30-拼团】 ;5 口碑; // platformSource:平台来源:1 app;2 ele;3 ors;4 WeChat ;5 口碑;
if ( "4" == orderObj->platformSource ) { if ( "4" == orderObj->platformSource ) {
tempOrderTypeId = 27;
if ( "20" == orderObj->businessType ) {
tempOrderTypeId = 31;
}else {
tempOrderTypeId = 27;
}
} else { } else {
tempOrderTypeId = 9; tempOrderTypeId = 9;
} }
} // WSG-MOD 渠道对应的业务逻辑 ; } // WSG-MOD 渠道对应的业务逻辑 ;
else if("WSG-MOD" == orderObj->channel) { // 兼容渠道名称不统一问题 else if("WSG-MOD" == orderObj->channel) { // 兼容渠道名称不统一问题
// platformSource:平台来源:1 app;2 ele;3 ors;4 WeChat 【businessType:10-预约, 30-拼团】 ;5 口碑; // platformSource:平台来源:1 app;2 ele;3 ors;4 WeChat ;5 口碑;
if ( "4" == orderObj->platformSource ) { if ( "4" == orderObj->platformSource ) {
tempOrderTypeId = 31; tempOrderTypeId = 31;
} }
...@@ -129,20 +123,16 @@ int PmsOrdersData::convertPosServiceTypeId( const OrderObject* orderObj, const ...@@ -129,20 +123,16 @@ int PmsOrdersData::convertPosServiceTypeId( const OrderObject* orderObj, const
} }
// MOD渠道对应的业务逻辑 ; 星巴克-MOD,百度外卖,饿了么APP,美团外卖,星巴克-MOP; // MOD渠道对应的业务逻辑 ; 星巴克-MOD,百度外卖,饿了么APP,美团外卖,星巴克-MOP;
else if("MOD" == orderObj->channel) { else if("MOD" == orderObj->channel) {
// platformSource:平台来源:1 app;2 ele;3 ors;4 WeChat【businessType:10-预约 20-WSG, 30-拼团】;5 口碑; // platformSource:平台来源:1 app;2 ele;3 ors;4 WeChat; 5 口碑;
if ( "4" == orderObj->platformSource ) { if ( "4" == orderObj->platformSource ) {
if ( "20" == orderObj->businessType ) { tempOrderTypeId = 28;
tempOrderTypeId = 32;
}else {
tempOrderTypeId = 28;
}
} else { } else {
tempOrderTypeId = 17; tempOrderTypeId = 17;
} }
} // WSG-MOD 渠道对应的业务逻辑 ; } // WSG-MOD 渠道对应的业务逻辑 ;
else if("WSG-MOD" == orderObj->channel) { // 兼容渠道名称不统一问题 else if("WSG-MOD" == orderObj->channel) { // 兼容渠道名称不统一问题
// platformSource:平台来源:1 app;2 ele;3 ors;4 WeChat 【businessType:10-预约, 30-拼团】 ;5 口碑; // platformSource:平台来源:1 app;2 ele;3 ors;4 WeChat ;5 口碑;
if ( "4" == orderObj->platformSource ) { if ( "4" == orderObj->platformSource ) {
tempOrderTypeId = 32; tempOrderTypeId = 32;
} }
...@@ -210,7 +200,10 @@ bool PmsOrdersData::insertOrderData(OrderObject* orderObj,QString& pmsOrderRef) ...@@ -210,7 +200,10 @@ bool PmsOrdersData::insertOrderData(OrderObject* orderObj,QString& pmsOrderRef)
query.addBindValue(orderObj->orderStatus); // --订单状态 query.addBindValue(orderObj->orderStatus); // --订单状态
QString updateTimeString = QDateTime::fromSecsSinceEpoch(orderObj->updateTime).toString("yyyy-MM-dd hh:mm:ss"); QString updateTimeString = QDateTime::fromSecsSinceEpoch(orderObj->updateTime).toString("yyyy-MM-dd hh:mm:ss");
query.addBindValue(updateTimeString); // --订单更新时间 query.addBindValue(updateTimeString); // --订单更新时间
query.addBindValue(orderObj->channel); // --订单渠道
QString tempChannel = ("WSG-MOD"==orderObj->channel) ? "MOD" : orderObj->channel;
query.addBindValue(tempChannel); // --订单渠道
query.addBindValue(orderObj->orderType); // --订单类型 query.addBindValue(orderObj->orderType); // --订单类型
int tempOrderTypeId = convertPosServiceTypeId( orderObj, orderObj->orderStatus); int tempOrderTypeId = convertPosServiceTypeId( orderObj, orderObj->orderStatus);
...@@ -269,10 +262,10 @@ bool PmsOrdersData::insertOrderData(OrderObject* orderObj,QString& pmsOrderRef) ...@@ -269,10 +262,10 @@ bool PmsOrdersData::insertOrderData(OrderObject* orderObj,QString& pmsOrderRef)
query.addBindValue(orderObj->makeSource); // --提供制作状态来源 query.addBindValue(orderObj->makeSource); // --提供制作状态来源
query.addBindValue(orderObj->makeDeviceId); // --提供制作状态设备ID query.addBindValue(orderObj->makeDeviceId); // --提供制作状态设备ID
// 与 oms协定此块业务出现 歧异 故在此处转换; // 与 oms协定此块业务出现 歧异 故在此处转换; 【与PMS协定: businessType 10 预约;20 WSG;30 拼团】
int tempBusinessType = orderObj->businessType.toInt(); int tempBusinessType = orderObj->businessType.toInt();
if ( "WSG-MOD" == orderObj->channel && "4" == orderObj->platformSource) if ( "WSG-MOD" == orderObj->channel && "4" == orderObj->platformSource)
tempBusinessType = 30; tempBusinessType = 20;
query.addBindValue( tempBusinessType ); // --订单业务类型 query.addBindValue( tempBusinessType ); // --订单业务类型
query.addBindValue(orderObj->appointedTime); // --订单预约时间 query.addBindValue(orderObj->appointedTime); // --订单预约时间
...@@ -315,9 +308,8 @@ bool PmsOrdersData::insertOrderData(OrderObject* orderObj,QString& pmsOrderRef) ...@@ -315,9 +308,8 @@ bool PmsOrdersData::insertOrderData(OrderObject* orderObj,QString& pmsOrderRef)
QLOG_INFO()<<QString("[<<<<---PmsOrdersData::insertOrderData:Insert OrderId %1 Into PMS Order Success--->>>>]").arg(orderObj->id); QLOG_INFO()<<QString("[<<<<---PmsOrdersData::insertOrderData:Insert OrderId %1 Into PMS Order Success--->>>>]").arg(orderObj->id);
pmsOrderRef = query.lastInsertId().toString(); pmsOrderRef = query.lastInsertId().toString();
QString ProInIdRef; QString ProInIdRef;
// 【businessType:10-预约 20-WSG, 30-拼团】 // 兼容渠道名称不统一问题
if ( ("WSG-MOD" == orderObj->channel && "4" == orderObj->platformSource) || if ( "WSG-MOD" == orderObj->channel && "4" == orderObj->platformSource ) {
( "MOD" == orderObj->channel && "4" == orderObj->platformSource && "20" == orderObj->businessType ) ) {
result = insertConponData(orderObj->coupList, orderObj->id, ProInIdRef); result = insertConponData(orderObj->coupList, orderObj->id, ProInIdRef);
}else { }else {
result = insertProductData(orderObj->proList, orderObj->id, ProInIdRef); result = insertProductData(orderObj->proList, orderObj->id, ProInIdRef);
...@@ -732,20 +724,25 @@ bool PmsOrdersData::updateOrderStatus(OrderObject* orderObj, const int &OrderSta ...@@ -732,20 +724,25 @@ bool PmsOrdersData::updateOrderStatus(OrderObject* orderObj, const int &OrderSta
} }
//查询无需加锁; //查询无需加锁;
bool PmsOrdersData::isOrderAndStatusExist(const QString& orderId, const int &OrderStatus) { bool PmsOrdersData::isOrderAndStatusExist(const QString& orderId, const int &OrderStatus, const QString& makeStatus, bool& pmsMakeStatusIsExistRet) {
bool result = false; bool result = false;
if(!m_sqlDb.open()) { if(!m_sqlDb.open()) {
QLOG_ERROR()<<"[<<<<---PmsOrdersData::isOrderAndStatusExist:Open Failed--->>>>]"<<m_sqlDb.lastError().text(); QLOG_ERROR()<<"[<<<<---PmsOrdersData::isOrderAndStatusExist:Open Failed--->>>>]"<<m_sqlDb.lastError().text();
return false; return false;
} }
QSqlQuery query(m_sqlDb); QSqlQuery query(m_sqlDb);
query.prepare(QString("select order_id from orders where order_id='%1' and order_status='%2'").arg(orderId).arg(OrderStatus)); query.prepare(QString("select order_id, make_status from orders where order_id='%1' and order_status='%2'").arg(orderId).arg(OrderStatus));
if(!query.exec()) { if(!query.exec()) {
QLOG_ERROR()<<"[<<<<---PmsOrdersData::isOrderAndStatusExist: isOrderAndStatusExist Selcet Failed--->>>>]"<<orderId<<query.lastError().text(); QLOG_ERROR()<<"[<<<<---PmsOrdersData::isOrderAndStatusExist: isOrderAndStatusExist Selcet Failed--->>>>]"<<orderId<<query.lastError().text();
result= false; return false;
} }
if(query.first()) { if(query.first()) {
result= true; result= true;
if (makeStatus !=query.value(1).toString()) {
pmsMakeStatusIsExistRet = false;
}
} else { } else {
QLOG_ERROR()<<QString("[<<<<---PmsOrdersData::isOrderAndStatusExist: OrderId:%1 OrderStatus:%2 Not Exist--->>>>]").arg(orderId).arg(OrderStatus); QLOG_ERROR()<<QString("[<<<<---PmsOrdersData::isOrderAndStatusExist: OrderId:%1 OrderStatus:%2 Not Exist--->>>>]").arg(orderId).arg(OrderStatus);
result = false; result = false;
......
...@@ -92,7 +92,7 @@ public: ...@@ -92,7 +92,7 @@ public:
*参数:[1]订单号 [2]订单状态 *参数:[1]订单号 [2]订单状态
*返回:true是,false否 *返回:true是,false否
**/ **/
bool isOrderAndStatusExist(const QString& orderId, const int &OrderStatus); bool isOrderAndStatusExist(const QString& orderId, const int &OrderStatus, const QString& makeStatus, bool& pmsMakeStatusIsExistRet);
/** /**
*功能:查询订单是否存在PMS数据库; *功能:查询订单是否存在PMS数据库;
......
...@@ -7,8 +7,8 @@ IDI_ICON ICON DISCARDABLE "logo.ico" ...@@ -7,8 +7,8 @@ IDI_ICON ICON DISCARDABLE "logo.ico"
#endif #endif
VS_VERSION_INFO VERSIONINFO VS_VERSION_INFO VERSIONINFO
//***每次修改后编译发版必须变更版本号(preDefine.h中APP_VERSION 需要一致)***// //***每次修改后编译发版必须变更版本号(preDefine.h中APP_VERSION 需要一致)***//
FILEVERSION 4,2020,520,1 FILEVERSION 4,2020,521,1
PRODUCTVERSION 4,2020,520,1 PRODUCTVERSION 4,2020,521,1
//*************************************************************************// //*************************************************************************//
FILEFLAGSMASK 0x3fL FILEFLAGSMASK 0x3fL
#ifdef _DEBUG #ifdef _DEBUG
...@@ -31,8 +31,8 @@ VS_VERSION_INFO VERSIONINFO ...@@ -31,8 +31,8 @@ VS_VERSION_INFO VERSIONINFO
VALUE "OriginalFilename", "PmsPlugin.exe" VALUE "OriginalFilename", "PmsPlugin.exe"
VALUE "ProductName", "PMS Plugin" VALUE "ProductName", "PMS Plugin"
//***每次修改后编译发版必须变更版本号(preDefine.h中APP_VERSION 需要一致)***// //***每次修改后编译发版必须变更版本号(preDefine.h中APP_VERSION 需要一致)***//
VALUE "ProductVersion", "4.2020.520.1" VALUE "ProductVersion", "4.2020.521.1"
VALUE "FileVersion", "4.2020.520.1" VALUE "FileVersion", "4.2020.521.1"
//*************************************************************************// //*************************************************************************//
END END
END END
......
...@@ -8,7 +8,8 @@ ...@@ -8,7 +8,8 @@
//#define APP_VERSION "4.2019.1225.1" //#define APP_VERSION "4.2019.1225.1"
//#define APP_VERSION "4.2020.318.1" //#define APP_VERSION "4.2020.318.1"
//#define APP_VERSION "4.2020.423.1" //#define APP_VERSION "4.2020.423.1"
#define APP_VERSION "4.2020.520.1" //#define APP_VERSION "4.2020.520.1"
#define APP_VERSION "4.2020.521.1"
//修正版本号时,切记修正 FmTakeout.rc 中的版本号 //修正版本号时,切记修正 FmTakeout.rc 中的版本号
#define SERVER_PASSWORD "posoperator@freemud.cn" #define SERVER_PASSWORD "posoperator@freemud.cn"
......
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