Commit f90ca410 by wuyang.zou

Support OMS Push Order Include callBackUrl, For 获取订单详情,订单入机汇报,订单退款; 双活模式

Version: 4.2022.1.18
parent f579cf79
...@@ -35,6 +35,9 @@ FlowControl &FlowControl::GetInstance() ...@@ -35,6 +35,9 @@ FlowControl &FlowControl::GetInstance()
FlowControl::FlowControl() FlowControl::FlowControl()
{ {
m_bLoginResult =false; m_bLoginResult =false;
m_loginErrorCount = 0;
m_sendHeartErrorCount = 0;
m_bCreateSelfCheckOrderError = false;
m_openTcpChannel = false; m_openTcpChannel = false;
m_bFirstRecvInfo = true; m_bFirstRecvInfo = true;
m_bFloatFromLockSt = false; m_bFloatFromLockSt = false;
...@@ -60,6 +63,7 @@ FlowControl::FlowControl() ...@@ -60,6 +63,7 @@ FlowControl::FlowControl()
m_pullDishesSocket = nullptr; m_pullDishesSocket = nullptr;
m_pullOrderListSocket = nullptr; m_pullOrderListSocket = nullptr;
m_orderCount = 0; m_orderCount = 0;
m_serviceCallBackUrl = "";
m_clearTimer=new QTimer(this); m_clearTimer=new QTimer(this);
m_heartTimer=new QTimer(this); m_heartTimer=new QTimer(this);
...@@ -204,6 +208,7 @@ void FlowControl::_AddOrderPull(const QString &orderId, const QString &channel, ...@@ -204,6 +208,7 @@ void FlowControl::_AddOrderPull(const QString &orderId, const QString &channel,
orderPull->channel=channel; orderPull->channel=channel;
orderPull->pageNumber=pageNumber; orderPull->pageNumber=pageNumber;
orderPull->pageSize=pageSize; orderPull->pageSize=pageSize;
orderPull->pullErrorCount = 0;
QLOG_INFO()<<QString::fromLocal8Bit("[<<<<---FlowControl::_AddOrderPull orderId:%1--->>>>]").arg(orderId); QLOG_INFO()<<QString::fromLocal8Bit("[<<<<---FlowControl::_AddOrderPull orderId:%1--->>>>]").arg(orderId);
m_orderPullList.append(orderPull); m_orderPullList.append(orderPull);
m_PullOrderDataMutex.unlock(); m_PullOrderDataMutex.unlock();
...@@ -213,7 +218,7 @@ void FlowControl::_AddOrderPull(const QString &orderId, const QString &channel, ...@@ -213,7 +218,7 @@ void FlowControl::_AddOrderPull(const QString &orderId, const QString &channel,
} }
bool FlowControl::_TryAddOrderPull(const QString &orderId, const QString &channel, const int &pageNumber, const int &pageSize) bool FlowControl::_TryAddOrderPull(const QString &orderId, const QString &channel, const QString &callBackUrl, const int &pageNumber, const int &pageSize)
{ {
bool btryLock = m_PullOrderDataMutex.tryLock(VALUE_TRYLOCKNETTIMEOUT); bool btryLock = m_PullOrderDataMutex.tryLock(VALUE_TRYLOCKNETTIMEOUT);
if (btryLock) { if (btryLock) {
...@@ -246,8 +251,10 @@ bool FlowControl::_TryAddOrderPull(const QString &orderId, const QString &channe ...@@ -246,8 +251,10 @@ bool FlowControl::_TryAddOrderPull(const QString &orderId, const QString &channe
PullOrderInfo* orderPull = new PullOrderInfo(); PullOrderInfo* orderPull = new PullOrderInfo();
orderPull->orderId=orderId; orderPull->orderId=orderId;
orderPull->channel=channel; orderPull->channel=channel;
orderPull->callBackUrl = callBackUrl;
orderPull->pageNumber=pageNumber; orderPull->pageNumber=pageNumber;
orderPull->pageSize=pageSize; orderPull->pageSize=pageSize;
orderPull->pullErrorCount = 0;
m_orderPullList.append(orderPull); m_orderPullList.append(orderPull);
m_PullOrderDataMutex.unlock(); m_PullOrderDataMutex.unlock();
...@@ -258,7 +265,6 @@ bool FlowControl::_TryAddOrderPull(const QString &orderId, const QString &channe ...@@ -258,7 +265,6 @@ bool FlowControl::_TryAddOrderPull(const QString &orderId, const QString &channe
} }
//避免 此槽函数 与 拉单定时器触发的槽函数mutex阻塞挂住:因此不调用 emit doPullOrder函数; //避免 此槽函数 与 拉单定时器触发的槽函数mutex阻塞挂住:因此不调用 emit doPullOrder函数;
//void FlowControl::_GetReadyForPullOrder(const QString &orderId, const QString &channel){} //void FlowControl::_GetReadyForPullOrder(const QString &orderId, const QString &channel){}
...@@ -508,6 +514,7 @@ void FlowControl::_OrderAnalysis(const QJsonObject& jsonObject) ...@@ -508,6 +514,7 @@ void FlowControl::_OrderAnalysis(const QJsonObject& jsonObject)
orderObject->globalServiceType = 0; orderObject->globalServiceType = 0;
orderObject->globalOrderType = 0; orderObject->globalOrderType = 0;
orderObject->isGiftitForward = 0 ; orderObject->isGiftitForward = 0 ;
orderObject->callBackUrl = "";
orderObject->FromJson(jsonObject); orderObject->FromJson(jsonObject);
orderObject->pushOrderType=0; orderObject->pushOrderType=0;
...@@ -669,6 +676,7 @@ bool FlowControl::_Login() ...@@ -669,6 +676,7 @@ bool FlowControl::_Login()
_GetIpAddress(); _GetIpAddress();
QString error; QString error;
QString url;
bool result; bool result;
QJsonObject sendJson; QJsonObject sendJson;
QJsonObject recvJson; QJsonObject recvJson;
...@@ -685,26 +693,33 @@ bool FlowControl::_Login() ...@@ -685,26 +693,33 @@ bool FlowControl::_Login()
emit showAlert(AlertForm::LOADING, QString::fromLocal8Bit("正在登录......")); emit showAlert(AlertForm::LOADING, QString::fromLocal8Bit("正在登录......"));
QLOG_INFO() << QString("[<<<<---Login--->>>>][requestData:%1]")<<sendJson;
if(ConfigManger::GetInstance().GetLoginSslConfig()) { if(ConfigManger::GetInstance().GetLoginSslConfig()) {
m_loginSocket->SetSslConfig(); m_loginSocket->SetSslConfig();
QLOG_INFO() << QString("[<<<<---_Login Set ssl Config--->>>>]"); QLOG_INFO() << QString("[<<<<---_Login Set ssl Config--->>>>]");
} }
QLOG_INFO()<<ConfigManger::GetInstance().GetLoginServerUrl()+ // 如果前3次使用初始地址登录失败 3 次, 则切换使用 备用地址 再尝试3次, 合计超过6次,则切回初始地址继续登录;
ConfigManger::GetInstance().GetInterfaceName(INI_INTERFACE_ILOGIN); if ( m_serviceCallBackUrl.length() && m_loginErrorCount > 2 && m_loginErrorCount < 6 ) {
QUrl TempQUrl = ConfigManger::GetInstance().GetLoginServerUrl()+ url = m_serviceCallBackUrl + "/pos/" + ConfigManger::GetInstance().GetInterfaceName(INI_INTERFACE_ILOGIN);
ConfigManger::GetInstance().GetInterfaceName(INI_INTERFACE_ILOGIN); sendJson.remove(JSON_PLUGINVERSIONCOMMENTS);
sendJson.insert(JSON_PLUGINVERSIONCOMMENTS, m_serviceCallBackUrl);
} else {
url = ConfigManger::GetInstance().GetLoginServerUrl() + ConfigManger::GetInstance().GetInterfaceName(INI_INTERFACE_ILOGIN);
}
QUrl TempQUrl = url;
m_loginSocket->SetUrl(TempQUrl); m_loginSocket->SetUrl(TempQUrl);
QLOG_INFO() << QString("[<<<<---_Login Qurl: --->>>>]")<<m_loginSocket->GetUrl(); QLOG_INFO() << QString("[<<<<---_Login Qurl: %1 --->>>>][requestData: ]").arg(url) << sendJson;
result = m_loginSocket->PostRequest(sendJson, recvJson, error); result = m_loginSocket->PostRequest(sendJson, recvJson, error);
QLOG_INFO() << QString("[<<<<---Login Finshed--->>>>][result:%1][msg:%2][recvData:").arg(result).arg(error)<<recvJson; QLOG_INFO() << QString("[<<<<---Login Finshed--->>>>][result:%1][msg:%2][recvData:").arg(result).arg(error)<<recvJson;
if(!result) { if(!result) {
emit showAlert(AlertForm::MSGERROR, QString::fromLocal8Bit("登录失败![网络错误]")); emit showAlert(AlertForm::MSGERROR, QString::fromLocal8Bit("登录失败![网络错误]"));
m_loginErrorCount++;
} else { } else {
if(JSON_STATUSCODE_OK != recvJson[JSON_LOGINCODE].toInt()) { if(JSON_STATUSCODE_OK != recvJson[JSON_LOGINCODE].toInt()) {
result = false; result = false;
emit showAlert(AlertForm::MSGERROR, QString::fromLocal8Bit("登录失败![%1]").arg(recvJson[JSON_MESSAGE].toString())); emit showAlert(AlertForm::MSGERROR, QString::fromLocal8Bit("登录失败![%1]").arg(recvJson[JSON_MESSAGE].toString()));
m_loginErrorCount++;
} else { } else {
m_storeName = recvJson[JSON_STORENAME].toString(); m_storeName = recvJson[JSON_STORENAME].toString();
m_openTcpChannel = recvJson[JSON_OPEN_TCP_CHANNEL].toBool(); m_openTcpChannel = recvJson[JSON_OPEN_TCP_CHANNEL].toBool();
...@@ -727,6 +742,7 @@ bool FlowControl::_Login() ...@@ -727,6 +742,7 @@ bool FlowControl::_Login()
emit doUpdateStoreStatus(m_eleStoreStatus,m_modStoreStatus,m_mopStoreStatus); emit doUpdateStoreStatus(m_eleStoreStatus,m_modStoreStatus,m_mopStoreStatus);
//***********************登陆时获取门店的营业状态 end ************************// //***********************登陆时获取门店的营业状态 end ************************//
m_bLoginResult= true; m_bLoginResult= true;
m_loginErrorCount = 0;
m_bFirstRecvInfo =false; m_bFirstRecvInfo =false;
m_clearTimer->start(1000*60*60*2); // 5分钟执行一次清理任务:正式上线需要两小时清理一次; m_clearTimer->start(1000*60*60*2); // 5分钟执行一次清理任务:正式上线需要两小时清理一次;
//m_clearTimer->start(1000*60*5); // 5分钟执行一次清理任务:正式上线需要两小时清理一次; //m_clearTimer->start(1000*60*5); // 5分钟执行一次清理任务:正式上线需要两小时清理一次;
...@@ -752,6 +768,7 @@ bool FlowControl::_Login() ...@@ -752,6 +768,7 @@ bool FlowControl::_Login()
} }
} }
} }
if(!result) { if(!result) {
QLOG_INFO() << QString("[<<<<---Login Retry--->>>>] %1 msec after login...").arg(VALUE_RELOGINTIME); QLOG_INFO() << QString("[<<<<---Login Retry--->>>>] %1 msec after login...").arg(VALUE_RELOGINTIME);
QTimer::singleShot(VALUE_RELOGINTIME, this, &FlowControl::_Login); QTimer::singleShot(VALUE_RELOGINTIME, this, &FlowControl::_Login);
...@@ -776,7 +793,7 @@ void FlowControl::_PullOrderData() ...@@ -776,7 +793,7 @@ void FlowControl::_PullOrderData()
{ {
QLOG_INFO()<<"[<<<<----FlowControl::_PullOrderData ---->>>>>]"; QLOG_INFO()<<"[<<<<----FlowControl::_PullOrderData ---->>>>>]";
if(m_orderPullList.isEmpty()) if(m_orderPullList.isEmpty())
return ; return;
emit hideAlert(); emit hideAlert();
bool btryLock = m_PullOrderDataMutex.tryLock(VALUE_TRYLOCKNETTIMEOUT); bool btryLock = m_PullOrderDataMutex.tryLock(VALUE_TRYLOCKNETTIMEOUT);
...@@ -784,29 +801,50 @@ void FlowControl::_PullOrderData() ...@@ -784,29 +801,50 @@ void FlowControl::_PullOrderData()
QLOG_ERROR()<<"[<<<<----FlowControl::_PullOrderData Try Lock Failed ---->>>>>]"; QLOG_ERROR()<<"[<<<<----FlowControl::_PullOrderData Try Lock Failed ---->>>>>]";
return; return;
} }
PullOrderInfo* info = m_orderPullList.takeFirst(); PullOrderInfo* info = m_orderPullList.takeFirst();
if ( info->pullErrorCount > 2 ) {
QLOG_INFO()<<QString( "[<<<<----FlowControl::_PullOrderData orderId:%1,Channel:%2,PullErrorCount:%3, CallBackUrl:%4, Pull Faild More Than 3 Times, Abandon This Item ---->>>>>]" )
.arg(info->orderId).arg(info->channel).arg(info->pullErrorCount).arg(info->callBackUrl);
m_orderPullList.removeOne(info);
// 特殊处理: 获取订单列表接口, 默认接口地址拉取失败,则尝试一次从备用OMS 回调地址在此进行拉取;
if ( info->orderId.isEmpty() && m_serviceCallBackUrl.length() && info->callBackUrl != m_serviceCallBackUrl ) {
info->callBackUrl = m_serviceCallBackUrl;
info->pullErrorCount = 0; // Pull Error Must Rest Zero, Or No Change Goto Pull All Order;
m_orderPullList.append(info);
} else {
delete info;
}
m_PullOrderDataMutex.unlock();
return;
}
if(info->orderId.isEmpty()) { if(info->orderId.isEmpty()) {
// 调换拉取订单列表频率 4S 一页 30笔; // 调换拉取订单列表频率 4S 一页 30笔;
m_pullTimer->start(1000*4); m_pullTimer->start(1000*4);
if ( _PullOrderList(info->pageSize,info->pageNumber) ) { if ( _PullOrderList( info->pageSize, info->pageNumber, info->callBackUrl ) ) {
QLOG_INFO()<<"[<<<<----FlowControl::_PullOrderData _PullOrderList successful---->>>>>]"; QLOG_INFO()<<"[<<<<----FlowControl::_PullOrderData _PullOrderList successful---->>>>>]";
m_orderPullList.removeOne(info); m_orderPullList.removeOne(info);
delete info; delete info;
} else { } else {
QLOG_INFO()<<"[<<<<----FlowControl::_PullOrderData _PullOrderList failed---->>>>>]"; QLOG_INFO()<<"[<<<<----FlowControl::_PullOrderData _PullOrderList failed---->>>>>]";
m_orderPullList.removeOne(info); m_orderPullList.removeOne(info);
info->pullErrorCount++;
m_orderPullList.append(info); m_orderPullList.append(info);
} }
} else { } else {
if (_PullOrderDetail(info->orderId,info->channel) ) { if ( _PullOrderDetail( info->orderId, info->channel, info->callBackUrl ) ) {
QLOG_INFO()<<"[<<<<----FlowControl::_PullOrderData _PullOrderDetail successful---->>>>>]"; QLOG_INFO()<<"[<<<<----FlowControl::_PullOrderData _PullOrderDetail successful---->>>>>]";
m_orderPullList.removeOne(info); m_orderPullList.removeOne(info);
delete info; delete info;
} else { } else {
QLOG_INFO()<<"[<<<<----FlowControl::_PullOrderData _PullOrderDetail fail---->>>>>]"; QLOG_INFO()<<"[<<<<----FlowControl::_PullOrderData _PullOrderDetail fail---->>>>>]";
m_orderPullList.removeOne(info); m_orderPullList.removeOne(info);
info->pullErrorCount++;
m_orderPullList.append(info); m_orderPullList.append(info);
} }
} }
...@@ -815,11 +853,12 @@ void FlowControl::_PullOrderData() ...@@ -815,11 +853,12 @@ void FlowControl::_PullOrderData()
return ; return ;
} }
bool FlowControl::_PullOrderDetail(const QString& orderId, const QString& channel) bool FlowControl::_PullOrderDetail(const QString& orderId, const QString& channel, const QString &callBackUrl )
{ {
if(m_pullOrderSocket==nullptr) if(m_pullOrderSocket==nullptr)
m_pullOrderSocket =new BillSocket(this); m_pullOrderSocket =new BillSocket(this);
QString error; QString error;
QString url;
bool result; bool result;
QJsonObject recvJson; QJsonObject recvJson;
...@@ -829,8 +868,12 @@ bool FlowControl::_PullOrderDetail(const QString& orderId, const QString& channe ...@@ -829,8 +868,12 @@ bool FlowControl::_PullOrderDetail(const QString& orderId, const QString& channe
} else { } else {
QLOG_INFO()<<"FlowControl::_PullOrderDetail load not ssl"; QLOG_INFO()<<"FlowControl::_PullOrderDetail load not ssl";
} }
QString url = ConfigManger::GetInstance().GetOrderServerUrl()+
ConfigManger::GetInstance().GetInterfaceName(INI_INTERFACE_PULLORDER); if ( callBackUrl.length() ) {
url = callBackUrl + "/order/" + ConfigManger::GetInstance().GetInterfaceName(INI_INTERFACE_PULLORDER);
} else {
url = ConfigManger::GetInstance().GetOrderServerUrl() + ConfigManger::GetInstance().GetInterfaceName(INI_INTERFACE_PULLORDER);
}
// 拉取订单详情接口:订单编号 // 拉取订单详情接口:订单编号
url.append(orderId); url.append(orderId);
...@@ -859,6 +902,9 @@ bool FlowControl::_PullOrderDetail(const QString& orderId, const QString& channe ...@@ -859,6 +902,9 @@ bool FlowControl::_PullOrderDetail(const QString& orderId, const QString& channe
result=false; result=false;
} else { } else {
QJsonObject order = recvJson[JSON_DATA].toObject(); QJsonObject order = recvJson[JSON_DATA].toObject();
if ( !order.contains("callBackUrl") ) {
order.insert( "callBackUrl", callBackUrl );
}
_OrderAnalysis(order); _OrderAnalysis(order);
} }
} }
...@@ -872,12 +918,13 @@ bool FlowControl::_PullOrderDetail(const QString& orderId, const QString& channe ...@@ -872,12 +918,13 @@ bool FlowControl::_PullOrderDetail(const QString& orderId, const QString& channe
return result; return result;
} }
bool FlowControl::_PullOrderList(const int &pageSize, const int &pageNo) bool FlowControl::_PullOrderList(const int &pageSize, const int &pageNo, const QString &callBackUrl )
{ {
if(m_pullOrderListSocket==nullptr) { if(m_pullOrderListSocket==nullptr) {
m_pullOrderListSocket =new BillSocket(this); m_pullOrderListSocket =new BillSocket(this);
} }
QString error; QString error;
QString url;
bool result; bool result;
QJsonObject sendJson; QJsonObject sendJson;
QJsonObject recvJson; QJsonObject recvJson;
...@@ -888,15 +935,21 @@ bool FlowControl::_PullOrderList(const int &pageSize, const int &pageNo) ...@@ -888,15 +935,21 @@ bool FlowControl::_PullOrderList(const int &pageSize, const int &pageNo)
if(ConfigManger::GetInstance().GetOrderSslConfig()) { if(ConfigManger::GetInstance().GetOrderSslConfig()) {
m_pullOrderListSocket->SetSslConfig(); m_pullOrderListSocket->SetSslConfig();
} }
QUrl TempQUrl = ConfigManger::GetInstance().GetOrderServerUrl()+
ConfigManger::GetInstance().GetInterfaceName(INI_INTERFACE_PULLORDERLIST); if ( callBackUrl.length() ) {
m_pullOrderListSocket->SetUrl(TempQUrl); url = callBackUrl + "/order/" + ConfigManger::GetInstance().GetInterfaceName(INI_INTERFACE_PULLORDERLIST);
QLOG_INFO()<<ConfigManger::GetInstance().GetOrderServerUrl()+ } else {
ConfigManger::GetInstance().GetInterfaceName(INI_INTERFACE_PULLORDERLIST)<< " requestData: " <<sendJson; url = ConfigManger::GetInstance().GetOrderServerUrl() + ConfigManger::GetInstance().GetInterfaceName(INI_INTERFACE_PULLORDERLIST);
}
QUrl TempQUrl = url;
m_pullOrderListSocket->SetUrl( TempQUrl );
QLOG_INFO()<< url << " requestData: " <<sendJson;
result = m_pullOrderListSocket->PostRequest(sendJson, recvJson, error); result = m_pullOrderListSocket->PostRequest(sendJson, recvJson, error);
QLOG_INFO() << QString("[<<<<---FlowControl::_PullOrderList:Pull Order List Finish.--->>>>][result:%1][msg:%2]") QLOG_INFO() << QString("[<<<<---FlowControl::_PullOrderList:Pull Order List Finish.--->>>>][result:%1][msg:%2]").arg(result).arg(error)<<recvJson;
.arg(result).arg(error)<<recvJson;
if(!result) { if ( !result ) {
emit setNetStatus(QString::fromLocal8Bit("<font color='#ff0000'>网络不稳定,正在重试</font>")); emit setNetStatus(QString::fromLocal8Bit("<font color='#ff0000'>网络不稳定,正在重试</font>"));
// refresh gui defaultStoreStatus; // refresh gui defaultStoreStatus;
emit doUpdateStoreStatus(0,0,0); emit doUpdateStoreStatus(0,0,0);
...@@ -926,6 +979,8 @@ bool FlowControl::_PullOrderList(const int &pageSize, const int &pageNo) ...@@ -926,6 +979,8 @@ bool FlowControl::_PullOrderList(const int &pageSize, const int &pageNo)
orderPull->channel=QString(); orderPull->channel=QString();
orderPull->pageNumber=pageNo+1; orderPull->pageNumber=pageNo+1;
orderPull->pageSize=pageSize; orderPull->pageSize=pageSize;
orderPull->pullErrorCount = 0;
orderPull->callBackUrl = callBackUrl;
QLOG_INFO()<<QString::fromLocal8Bit("[<<<<---FlowControl::_PullOrderList: Next Page Order List :pageNo:%1 pageSize:%2--->>>>]").arg(pageNo+1).arg(pageSize); QLOG_INFO()<<QString::fromLocal8Bit("[<<<<---FlowControl::_PullOrderList: Next Page Order List :pageNo:%1 pageSize:%2--->>>>]").arg(pageNo+1).arg(pageSize);
m_orderPullList.append(orderPull); m_orderPullList.append(orderPull);
//避免出现存在多页数据,导致出现死锁; //避免出现存在多页数据,导致出现死锁;
...@@ -947,6 +1002,7 @@ bool FlowControl::_PullOrderList(const int &pageSize, const int &pageNo) ...@@ -947,6 +1002,7 @@ bool FlowControl::_PullOrderList(const int &pageSize, const int &pageNo)
bool FlowControl::_SendHeart() bool FlowControl::_SendHeart()
{ {
QString error; QString error;
QString url;
bool result; bool result;
QJsonObject sendJson; QJsonObject sendJson;
QJsonObject recvJson; QJsonObject recvJson;
...@@ -958,29 +1014,38 @@ bool FlowControl::_SendHeart() ...@@ -958,29 +1014,38 @@ bool FlowControl::_SendHeart()
sendJson.insert(JSON_POS_HOST_NAME, m_posHostName); sendJson.insert(JSON_POS_HOST_NAME, m_posHostName);
sendJson.insert(JSON_POS_MAC_ADDRESS, m_posMacAddress); sendJson.insert(JSON_POS_MAC_ADDRESS, m_posMacAddress);
QLOG_INFO() << QString("[<<<<---Send Heart--->>>>][requestData:%1]")<<sendJson; // 如果前3次使用初始地址心跳失败 3 次, 则切换使用 备用地址 再尝试3次, 合计超过6次,则切回初始地址继续心跳;
QUrl TempQUrl = ConfigManger::GetInstance().GetLoginServerUrl()+ if ( m_serviceCallBackUrl.length() && m_sendHeartErrorCount > 2 && m_sendHeartErrorCount < 6 ) {
ConfigManger::GetInstance().GetInterfaceName(INI_INTERFACE_HEART); url = m_serviceCallBackUrl + "/pos/" + ConfigManger::GetInstance().GetInterfaceName(INI_INTERFACE_HEART);
sendJson.remove(JSON_PLUGINVERSIONCOMMENTS);
sendJson.insert(JSON_PLUGINVERSIONCOMMENTS, m_serviceCallBackUrl);
} else {
url = ConfigManger::GetInstance().GetLoginServerUrl() + ConfigManger::GetInstance().GetInterfaceName(INI_INTERFACE_HEART);
}
QUrl TempQUrl = url;
m_loginSocket->SetUrl(TempQUrl); m_loginSocket->SetUrl(TempQUrl);
QLOG_INFO() << QString("[<<<<---Send Heart--->>>>][Url: %1, RequestData: ]").arg(url) << sendJson;
result = m_loginSocket->PostRequest(sendJson, recvJson, error); result = m_loginSocket->PostRequest(sendJson, recvJson, error);
QLOG_INFO() << QString("[<<<<---Send Heart Finish--->>>>][result:%1][msg:%2][recvData:%3]") QLOG_INFO() << QString("[<<<<---Send Heart Finish--->>>>][result:%1][msg:%2][recvData:%3]").arg(result).arg(error)<<recvJson;
.arg(result).arg(error)<<recvJson;
if(!result) if( !result ) {
{
m_bLastHeartIsError = true; m_bLastHeartIsError = true;
m_sendHeartErrorCount++;
emit setNetStatus(QString::fromLocal8Bit("<font color='#ff0000'>网络不稳定,正在重试</font>")); emit setNetStatus(QString::fromLocal8Bit("<font color='#ff0000'>网络不稳定,正在重试</font>"));
// refresh gui defaultStoreStatus; // refresh gui defaultStoreStatus;
emit doUpdateStoreStatus(0,0,0); emit doUpdateStoreStatus(0,0,0);
}else } else {
{
QLOG_INFO() << QString("[<<<<---Send Heart Finish: code:%1--->>>>]").arg(recvJson[JSON_LOGINCODE].toInt()); QLOG_INFO() << QString("[<<<<---Send Heart Finish: code:%1--->>>>]").arg(recvJson[JSON_LOGINCODE].toInt());
if(JSON_STATUSCODE_OK != recvJson[JSON_LOGINCODE].toInt()) if(JSON_STATUSCODE_OK != recvJson[JSON_LOGINCODE].toInt())
{ {
result = false; result = false;
m_bLastHeartIsError = true; m_bLastHeartIsError = true;
m_sendHeartErrorCount++;
emit setNetStatus(QString::fromLocal8Bit("<font color='#ff0000'>网络不稳定,正在重试</font>")); emit setNetStatus(QString::fromLocal8Bit("<font color='#ff0000'>网络不稳定,正在重试</font>"));
emit doUpdateStoreStatus(0,0,0); emit doUpdateStoreStatus(0,0,0);
}else{ } else {
result = true; result = true;
emit setNetStatus(QString::fromLocal8Bit("<font color='#f5f5f5'>正常</font>")); emit setNetStatus(QString::fromLocal8Bit("<font color='#f5f5f5'>正常</font>"));
if( recvJson.contains(JSON_ELESTORESTS) ){ if( recvJson.contains(JSON_ELESTORESTS) ){
...@@ -1084,72 +1149,6 @@ bool FlowControl::_ConfirmOrder(const QString &orderId) ...@@ -1084,72 +1149,6 @@ bool FlowControl::_ConfirmOrder(const QString &orderId)
return result; return result;
} }
bool FlowControl::_RefuseOrder(const QString &orderId, int refuseCode,const QString reason)
{
Q_UNUSED(reason);
QString error;
bool result;
QJsonObject sendJson;
QJsonObject recvJson;
sendJson = DataManger::GetInstance().GetRefuseOrderData(refuseCode, orderId);
emit showAlert(AlertForm::LOADING, QString::fromLocal8Bit("正在通信......"));
QLOG_INFO() << QString("[<<<<---Refuse Order Begin--->>>>][requestData:%1]")<<sendJson;
result = m_procOrderSocket->PostRequest(sendJson, recvJson, error);
QLOG_INFO() << QString("[<<<<---Refuse Order Finish--->>>>][result:%1][msg:%2][recvData:%3]")
.arg(result).arg(error)<<recvJson;
if(!result)
{
emit showAlert(AlertForm::MSGERROR, QString::fromLocal8Bit("拒单失败![网络错误]"));
}else
{
if(JSON_STATUSCODE_OK != recvJson[JSON_STATUSCODE].toInt())
{
result = false;
emit showAlert(AlertForm::MSGERROR, QString::fromLocal8Bit("拒单失败![%1]").arg(recvJson[JSON_MESSAGE].toString()));
}else
{
emit showAlert(AlertForm::SUCCESS, QString::fromLocal8Bit("拒单成功!"));
// 通知主界面移动订单
OrderObject *orderObject = m_FmOrdersMap.value(orderId);
int oldStatus = orderObject->orderStatus;
orderObject->orderStatus = recvJson[JSON_STATUS].toInt();
emit changeOrderStatus(orderObject, oldStatus);
//取消订单(星巴克只有退单)后,将此订单加入到simphony 模拟点单列表中;
if (OrderObject::Refunded == orderObject->orderStatus){
//if(!orderObject->isCancle) //内存中数据存在BUG:需要中数据库中读取准确标识;
//存在两种Case:正常退货单没有入机成功 && 非预约日期(录配送费判断)/默认值是初始化0; || 预约实物退货单没有入机 && 预约实物送达日期[此函数调用几率是0,暂不改动]
if(!SimProcOrderDB::getInstance().isRefundOrder(orderObject->id))
{
// 判断Simphony 队列中的订单是否已经存在:不存在(Simphony已经点单完成后会移除)则添加; 如果存在(说明此订单还没有模拟点单),则需要直接向现存在Sim有效队列中的记录移除;
m_OrderEntryMutex.lock();
if(!m_simValidOrdersList.contains(orderObject->id))
{
m_simValidOrdersList.insert(0,orderObject->id);
}else{
if(!PrintSumBillPosDB::getInstance().isOrderSumBillExist(orderObject->id)){
m_simValidOrdersList.removeOne(orderObject->id);
}
}
orderObject->isCancle=true;
orderObject->pushOrderType=0;
orderObject->isORSCancle=true;
orderObject->orsPushOrderType=0;
m_OrderEntryMutex.unlock();
QLOG_INFO() << QString("[<<<<---FmTakeout _RefuseOrder: m_simValidOrdersList.num:%1 --->>>>]")<< m_simValidOrdersList.count();
QLOG_INFO() << QString("[<<<<---FmTakeout _RefuseOrder: m_simValidOrdersList:%1 --->>>>]")<< m_simValidOrdersList;
}
}
}
}
return result;
}
bool FlowControl::_SendOrder(const QString& orderId) bool FlowControl::_SendOrder(const QString& orderId)
{ {
...@@ -1229,52 +1228,14 @@ bool FlowControl::_CompleteOrder(const QString& orderId) ...@@ -1229,52 +1228,14 @@ bool FlowControl::_CompleteOrder(const QString& orderId)
return result; return result;
} }
bool FlowControl::_RefuseRefund(const QString& orderId)
{
QString error;
bool result;
QJsonObject sendJson;
QJsonObject recvJson;
sendJson = DataManger::GetInstance().GetRefuseRefundData(VALUE_REFUSEREFUND_REASON,orderId);
emit showAlert(AlertForm::LOADING, QString::fromLocal8Bit("正在通信......"));
QLOG_INFO() << QString("[<<<<---RefuseRefund Order Begin--->>>>][requestData:]")<<sendJson;
result = m_procOrderSocket->PostRequest(sendJson, recvJson, error);
QLOG_INFO() << QString("[<<<<---RefuseRefund Order Finish--->>>>][result:%1][msg:%2][recvData:]")
.arg(result).arg(error)<<recvJson;
if(!result)
{
emit showAlert(AlertForm::MSGERROR, QString::fromLocal8Bit("拒绝退单失败![网络错误]"));
}else
{
if(JSON_STATUSCODE_OK != recvJson[JSON_STATUSCODE].toInt())
{
result = false;
emit showAlert(AlertForm::MSGERROR, QString::fromLocal8Bit("拒绝退单失败![%1]").arg(recvJson[JSON_MESSAGE].toString()));
}else
{
emit showAlert(AlertForm::SUCCESS, QString::fromLocal8Bit("拒绝退单成功!"));
// 通知主界面移动订单
OrderObject *orderObject = m_FmOrdersMap.value(orderId);
int oldStatus = orderObject->orderStatus;
orderObject->orderStatus = recvJson[JSON_STATUS].toInt();
// TODO 服务器端现还未开发
// orderObject->status_desc = recvJson[JSON_STATUSDESC].toString();
emit changeOrderStatus(orderObject, oldStatus);
}
}
return result;
}
bool FlowControl::_RefundOrder(const QString &orderId,int reasonCode,const QString& reason,const QString& dishesListString) bool FlowControl::_RefundOrder(const QString &orderId,int reasonCode,const QString& reason,const QString& dishesListString)
{ {
QLOG_INFO() << QString("[<<<<---FlowControl::_RefundOrder--->>>>][orderId:%1 reasonCode:%2 reason:%3 dishesListString:]").arg(orderId).arg(reasonCode).arg(reason).arg(dishesListString); QLOG_INFO() << QString("[<<<<---FlowControl::_RefundOrder--->>>>][orderId:%1 reasonCode:%2 reason:%3 dishesListString:]").arg(orderId).arg(reasonCode).arg(reason).arg(dishesListString);
QString error; QString error;
QString url;
QString callBackUrl = "";
bool result; bool result;
QJsonObject sendJson; QJsonObject sendJson;
QJsonObject recvJson; QJsonObject recvJson;
...@@ -1282,7 +1243,17 @@ bool FlowControl::_RefundOrder(const QString &orderId,int reasonCode,const QStri ...@@ -1282,7 +1243,17 @@ bool FlowControl::_RefundOrder(const QString &orderId,int reasonCode,const QStri
emit showAlert(AlertForm::LOADING, QString::fromLocal8Bit("正在通信......")); emit showAlert(AlertForm::LOADING, QString::fromLocal8Bit("正在通信......"));
QLOG_INFO() << QString("[<<<<---Refund Order Begin--->>>>][requestData:%1]")<<sendJson; QLOG_INFO() << QString("[<<<<---Refund Order Begin--->>>>][requestData:%1]")<<sendJson;
// 如果退款原因:商品已售完,使用下面接口; // 如果退款原因:其他,都同意使用一个接口; // 如果退款原因:商品已售完,使用下面接口; // 如果退款原因:其他,都同意使用一个接口;
QUrl TempQUrl = ConfigManger::GetInstance().GetOrderServerUrl() + ConfigManger::GetInstance().GetInterfaceName(INI_INTERFACE_CANCLE); if ( m_FmOrdersMap.value(orderId) ) {
callBackUrl = m_FmOrdersMap.value(orderId)->callBackUrl;
}
if ( callBackUrl.length() ) {
url = callBackUrl + "/order/" + ConfigManger::GetInstance().GetInterfaceName(INI_INTERFACE_CANCLE);
} else {
url = ConfigManger::GetInstance().GetOrderServerUrl() + ConfigManger::GetInstance().GetInterfaceName(INI_INTERFACE_CANCLE);
}
QUrl TempQUrl = url;
m_procOrderSocket->SetUrl(TempQUrl); m_procOrderSocket->SetUrl(TempQUrl);
QLOG_INFO() << QString("[<<<<<-----_RefundOrder: orderId:%1 URL: ----->>>>>]").arg(orderId)<< m_procOrderSocket->GetUrl(); QLOG_INFO() << QString("[<<<<<-----_RefundOrder: orderId:%1 URL: ----->>>>>]").arg(orderId)<< m_procOrderSocket->GetUrl();
...@@ -1381,13 +1352,12 @@ bool FlowControl::_RefundOrder(const QString &orderId,int reasonCode,const QStri ...@@ -1381,13 +1352,12 @@ bool FlowControl::_RefundOrder(const QString &orderId,int reasonCode,const QStri
} }
void FlowControl::_AddOrderInfo2ReportList(const OrderObject* orderObject,const QString& operatStatus, void FlowControl::_AddOrderInfo2ReportList( const OrderObject* orderObject, const QString& operatStatus, const QString& remarkMessage )
const QString& remarkMessage)
{ {
// 将订单 添加到 向OMS汇报入机情况的队列中: 防止出现 m_RepOMSRecordOrderMutex 把整个 FlowControl 主进程死锁; // 将订单 添加到 向OMS汇报入机情况的队列中: 防止出现 m_RepOMSRecordOrderMutex 把整个 FlowControl 主进程死锁;
//m_RepOMSRecordOrderMutex.lock(); //m_RepOMSRecordOrderMutex.lock();
bool btryLock = m_RepOMSRecordOrderMutex.tryLock(VALUE_TRYLOCKNETTIMEOUT); bool btryLock = m_RepOMSRecordOrderMutex.tryLock(VALUE_TRYLOCKNETTIMEOUT);
if(!btryLock){ //加锁失败后,直接return; if ( !btryLock ) { //加锁失败后,直接return;
return ; return ;
} }
...@@ -1422,8 +1392,10 @@ void FlowControl::_AddOrderInfo2ReportList(const OrderObject* orderObject,const ...@@ -1422,8 +1392,10 @@ void FlowControl::_AddOrderInfo2ReportList(const OrderObject* orderObject,const
repOMSRecordOrder->checkNo = QString("PMSNoCheckNo"); repOMSRecordOrder->checkNo = QString("PMSNoCheckNo");
m_orderRecordRepOMSList.append(repOMSRecordOrder); m_orderRecordRepOMSList.append(repOMSRecordOrder);
m_RepOMSRecordOrderMutex.unlock(); m_RepOMSRecordOrderMutex.unlock();
} }
void FlowControl::_ReportOMSRecordOrderInfo() void FlowControl::_ReportOMSRecordOrderInfo()
{ {
if(m_orderRecordRepOMSList.isEmpty()) if(m_orderRecordRepOMSList.isEmpty())
...@@ -1456,6 +1428,8 @@ void FlowControl::_ReportOMSRecordOrderInfo() ...@@ -1456,6 +1428,8 @@ void FlowControl::_ReportOMSRecordOrderInfo()
if(m_reportOMSRecordOrderSocket==nullptr) if(m_reportOMSRecordOrderSocket==nullptr)
m_reportOMSRecordOrderSocket =new BillSocket(this); m_reportOMSRecordOrderSocket =new BillSocket(this);
QString error; QString error;
QString url;
QString callBackUrl;
bool result; bool result;
QJsonObject sendJson; QJsonObject sendJson;
QJsonObject recvJson; QJsonObject recvJson;
...@@ -1480,11 +1454,20 @@ void FlowControl::_ReportOMSRecordOrderInfo() ...@@ -1480,11 +1454,20 @@ void FlowControl::_ReportOMSRecordOrderInfo()
QString orderNoTemp = RepOMSRecOrderIn->orderNo; QString orderNoTemp = RepOMSRecOrderIn->orderNo;
QLOG_INFO() << QString("[<<<<---_ReportOMSRecordOrderInfo:Begin--->>>>][requestData:%1]")<<sendJson; QLOG_INFO() << QString("[<<<<---_ReportOMSRecordOrderInfo:Begin--->>>>][requestData:%1]")<<sendJson;
QUrl TempQUrl = ConfigManger::GetInstance().GetLoginServerUrl()+ // 查找到 orderObject point 后,查找到 callBackUrl ;
ConfigManger::GetInstance().GetInterfaceName(INI_INTERFACE_REPORTOMSRECORDORDER); if ( m_FmOrdersMap.value( RepOMSRecOrderIn->orderNo ) ) {
callBackUrl = m_FmOrdersMap.value( RepOMSRecOrderIn->orderNo )->callBackUrl;
}
if ( callBackUrl.length() ) {
url = callBackUrl + "/pos/" + ConfigManger::GetInstance().GetInterfaceName(INI_INTERFACE_REPORTOMSRECORDORDER);
} else {
url = ConfigManger::GetInstance().GetLoginServerUrl() + ConfigManger::GetInstance().GetInterfaceName(INI_INTERFACE_REPORTOMSRECORDORDER);
}
QUrl TempQUrl = url;
m_reportOMSRecordOrderSocket->SetUrl(TempQUrl); m_reportOMSRecordOrderSocket->SetUrl(TempQUrl);
QLOG_INFO()<<QString("[<<<<---Report OMS Record Order Entry POS Info--->>>>][requestUrl:]") << ConfigManger::GetInstance().GetLoginServerUrl() + QLOG_INFO()<<QString("[<<<<---Report OMS Record Order Entry POS Info--->>>>][requestUrl:]") << url;
ConfigManger::GetInstance().GetInterfaceName(INI_INTERFACE_REPORTOMSRECORDORDER);
result = m_reportOMSRecordOrderSocket->PostRequest(sendJson, recvJson, error); result = m_reportOMSRecordOrderSocket->PostRequest(sendJson, recvJson, error);
QLOG_INFO() << QString("[<<<<---Report OMS Record Order Entry POS Info Finish--->>>>][result:%1][msg:%2][orderId:%3]") QLOG_INFO() << QString("[<<<<---Report OMS Record Order Entry POS Info Finish--->>>>][result:%1][msg:%2][orderId:%3]")
.arg(result).arg(error).arg(orderNoTemp)<<recvJson; .arg(result).arg(error).arg(orderNoTemp)<<recvJson;
...@@ -1525,6 +1508,7 @@ void FlowControl::_ReportOMSRecordOrderInfo() ...@@ -1525,6 +1508,7 @@ void FlowControl::_ReportOMSRecordOrderInfo()
} }
m_RepOMSRecordOrderMutex.unlock(); m_RepOMSRecordOrderMutex.unlock();
} }
//减少此锁的加锁时间范围; //减少此锁的加锁时间范围;
//m_RepOMSRecordOrderMutex.unlock(); //m_RepOMSRecordOrderMutex.unlock();
...@@ -1729,6 +1713,7 @@ void FlowControl::onSendSelfCheck() ...@@ -1729,6 +1713,7 @@ void FlowControl::onSendSelfCheck()
return; return;
} }
QString error; QString error;
QString url;
bool result; bool result;
QJsonObject sendJson; QJsonObject sendJson;
QJsonObject recvJson; QJsonObject recvJson;
...@@ -1741,21 +1726,30 @@ void FlowControl::onSendSelfCheck() ...@@ -1741,21 +1726,30 @@ void FlowControl::onSendSelfCheck()
} else { } else {
QLOG_INFO()<<"load not ssl"; QLOG_INFO()<<"load not ssl";
} }
QString url = ConfigManger::GetInstance().GetOrderServerUrl()+ "pos/create/checkOrder";
QLOG_INFO() << QString("[<<<<---FlowControl::onSendSelfCheck Begin--->>>>][ requestUrl:%1 ]").arg(url)<<QString("[ requestData:%2 ]")<<sendJson; if ( m_serviceCallBackUrl.length() && m_bCreateSelfCheckOrderError ) {
url = m_serviceCallBackUrl + "/order/"+ "pos/create/checkOrder";
} else {
url = ConfigManger::GetInstance().GetOrderServerUrl()+ "pos/create/checkOrder";
}
QLOG_INFO() << QString("[<<<<---FlowControl::onSendSelfCheck Begin--->>>>][ requestUrl:%1 , requestData:] ").arg(url) << sendJson;
QUrl TempQUrl = url; QUrl TempQUrl = url;
m_procOrderSocket->SetUrl(TempQUrl); m_procOrderSocket->SetUrl(TempQUrl);
result = m_procOrderSocket->PostRequest(sendJson, recvJson, error); result = m_procOrderSocket->PostRequest(sendJson, recvJson, error);
QLOG_INFO() << QString("[<<<<---Get onSendSelfCheck:Finish--->>>>][result:%1][msg:%2][recvData:%3]") QLOG_INFO() << QString("[<<<<---Get onSendSelfCheck:Finish--->>>>][result:%1][msg:%2][recvData:%3]").arg(result).arg(error)<<recvJson;
.arg(result).arg(error)<<recvJson;
if(!result) { if ( !result ) {
emit showAlert(AlertForm::MSGERROR, QString::fromLocal8Bit("发送自测请求失败![网络错误]")); emit showAlert(AlertForm::MSGERROR, QString::fromLocal8Bit("发送自测请求失败![网络错误]"));
m_bCreateSelfCheckOrderError ? m_bCreateSelfCheckOrderError = false : m_bCreateSelfCheckOrderError = true; // 一次失败一次切换主备地址;
} else { } else {
if(JSON_STATUSCODE_OK != recvJson[JSON_ERRCODE].toInt()) { if(JSON_STATUSCODE_OK != recvJson[JSON_ERRCODE].toInt()) {
result = false; result = false;
m_bCreateSelfCheckOrderError ? m_bCreateSelfCheckOrderError = false : m_bCreateSelfCheckOrderError = true; // 一次失败一次切换主备地址;
emit showAlert(AlertForm::MSGERROR, QString::fromLocal8Bit("发送自测请求失败![%1]").arg(recvJson[JSON_MESSAGE].toString())); emit showAlert(AlertForm::MSGERROR, QString::fromLocal8Bit("发送自测请求失败![%1]").arg(recvJson[JSON_MESSAGE].toString()));
} else { } else {
emit showAlert(AlertForm::SUCCESS, QString::fromLocal8Bit("发送自测请求成功")); emit showAlert(AlertForm::SUCCESS, QString::fromLocal8Bit("发送自测请求成功"));
m_bCreateSelfCheckOrderError = false;
} }
} }
} }
...@@ -1827,8 +1821,6 @@ void FlowControl::_CrondClearExpireOrder() ...@@ -1827,8 +1821,6 @@ void FlowControl::_CrondClearExpireOrder()
qint64 days = createDate.daysTo(currentDate); qint64 days = createDate.daysTo(currentDate);
//QLOG_INFO()<<QString::fromLocal8Bit("[<<<<---_CrondClearExpireOrder: ClearExpireOrder: 相差多少秒:%1--->>>>]").arg(seconds); //--按秒数来验证ok-- //QLOG_INFO()<<QString::fromLocal8Bit("[<<<<---_CrondClearExpireOrder: ClearExpireOrder: 相差多少秒:%1--->>>>]").arg(seconds); //--按秒数来验证ok--
QLOG_INFO()<<QString::fromLocal8Bit("[<<<<---_CrondClearExpireOrder: ClearExpireOrder: 相差多少天:%1--->>>>]").arg(days); QLOG_INFO()<<QString::fromLocal8Bit("[<<<<---_CrondClearExpireOrder: ClearExpireOrder: 相差多少天:%1--->>>>]").arg(days);
//创建订单时间,超过当前时间 三十分就进行清理;
//if(seconds>=60*5) //--按秒数来验证ok--
if(days>=1) if(days>=1)
{ {
QLOG_INFO()<<QString("[<<<<---_CrondClearExpireOrder: ClearExpireOrder: Emit Signal:Clear Order orderID:%1--->>>>]").arg(order->id); QLOG_INFO()<<QString("[<<<<---_CrondClearExpireOrder: ClearExpireOrder: Emit Signal:Clear Order orderID:%1--->>>>]").arg(order->id);
...@@ -1841,6 +1833,32 @@ void FlowControl::_CrondClearExpireOrder() ...@@ -1841,6 +1833,32 @@ void FlowControl::_CrondClearExpireOrder()
} }
m_OrderEntryMutex.unlock(); m_OrderEntryMutex.unlock();
// 清理汇报入机结果的列表;
if ( !m_orderRecordRepOMSList.isEmpty() ) {
bool btryLock = m_RepOMSRecordOrderMutex.tryLock(VALUE_TRYLOCKNETTIMEOUT);
if ( !btryLock ) { //加锁失败后,直接return;
QLOG_INFO()<<"[<<<<----FlowControl::_ReportOMSRecordOrderInfo tryLock Failed ---->>>>>]";
} else {
RepOMSRecordOrderInfo* RepOMSRecOrderIn = nullptr;
foreach ( RepOMSRecOrderIn, m_orderRecordRepOMSList ) {
if ( RepOMSRecOrderIn ) {
QDate recordDate = QDate::fromString( (RepOMSRecOrderIn->recordDate ).mid(0,10),"yyyy-MM-dd");
qint64 recordDays = recordDate.daysTo(currentDate);
QLOG_INFO()<<QString::fromLocal8Bit("[<<<<---_CrondClearExpireOrder: ClearExpireRecordOrderInfo: 相差多少天:%1--->>>>]").arg(recordDays);
if ( recordDays >= 1 ) {
m_orderRecordRepOMSList.removeOne( RepOMSRecOrderIn );
delete RepOMSRecOrderIn;
RepOMSRecOrderIn = nullptr;
}
} else {
m_orderRecordRepOMSList.removeOne( RepOMSRecOrderIn );
}
}
m_RepOMSRecordOrderMutex.unlock();
}
}
SimProcOrderDB::getInstance().deleteOrderRecord(QDate::currentDate().addDays(-45).toString("yyyyMMdd")); SimProcOrderDB::getInstance().deleteOrderRecord(QDate::currentDate().addDays(-45).toString("yyyyMMdd"));
} }
...@@ -1958,13 +1976,15 @@ bool FlowControl::_ResponseOMS11Request(const QJsonObject &content, QJsonObject ...@@ -1958,13 +1976,15 @@ bool FlowControl::_ResponseOMS11Request(const QJsonObject &content, QJsonObject
Q_UNUSED(data); Q_UNUSED(data);
QLOG_INFO()<<__FUNCTION__; QLOG_INFO()<<__FUNCTION__;
bool result=true; bool result=true;
if(!m_bLoginResult){ if ( !m_bLoginResult ) {
error = QString::fromLocal8Bit("FMOMS未登录"); error = QString::fromLocal8Bit("FMOMS未登录");
return false; if ( content[JSON_CALL_BACK_URL].toString().length() ) {
m_serviceCallBackUrl = content[JSON_CALL_BACK_URL].toString(); // https://delposserviceapi.starbucks.net/backstage : 域名/backstage
} }
else{ return false;
if(content[JSON_ORDER_ID].toString().isEmpty())
{ } else {
if ( content[JSON_ORDER_ID].toString().isEmpty() ) {
error =QString::fromLocal8Bit("订单号不能为空"); error =QString::fromLocal8Bit("订单号不能为空");
return false; return false;
} else { } else {
...@@ -1978,8 +1998,14 @@ bool FlowControl::_ResponseOMS11Request(const QJsonObject &content, QJsonObject ...@@ -1978,8 +1998,14 @@ bool FlowControl::_ResponseOMS11Request(const QJsonObject &content, QJsonObject
} }
} }
QString omsCallBackUrl= content[JSON_CALL_BACK_URL].toString(); // https://delposserviceapi.starbucks.net/backstage : 域名/backstage
if ( omsCallBackUrl.length() ) {
m_serviceCallBackUrl = omsCallBackUrl;
}
// 接受到非码oms插过来的订单,进行向队列中进行添加; // 接受到非码oms插过来的订单,进行向队列中进行添加;
result = _TryAddOrderPull(content[JSON_ORDER_ID].toString(),content[JSON_CHANNEL].toString()); result = _TryAddOrderPull( content[JSON_ORDER_ID].toString(), content[JSON_CHANNEL].toString(), omsCallBackUrl );
/***组装从FM外卖service端的拉单请求参数***/ /***组装从FM外卖service端的拉单请求参数***/
if (result) { if (result) {
error = QString("success"); error = QString("success");
...@@ -2203,8 +2229,6 @@ void FlowControl::onGetBusinessStatus() ...@@ -2203,8 +2229,6 @@ void FlowControl::onGetBusinessStatus()
} }
void FlowControl::onGetOMSAllOrders() void FlowControl::onGetOMSAllOrders()
{ {
QLOG_INFO()<<__FUNCTION__; QLOG_INFO()<<__FUNCTION__;
...@@ -2220,7 +2244,6 @@ void FlowControl::onGetOMSAllOrders() ...@@ -2220,7 +2244,6 @@ void FlowControl::onGetOMSAllOrders()
} }
void FlowControl::onProcessOrder(const QString &operation, const QString &orderId) void FlowControl::onProcessOrder(const QString &operation, const QString &orderId)
{ {
if(!operation.compare(OPERATION_GETDELIVERS)) if(!operation.compare(OPERATION_GETDELIVERS))
...@@ -2239,7 +2262,7 @@ void FlowControl::onProcessOrder(const QString &operation, const QString &orderI ...@@ -2239,7 +2262,7 @@ void FlowControl::onProcessOrder(const QString &operation, const QString &orderI
_CompleteOrder(orderId); _CompleteOrder(orderId);
}else if(!operation.compare(OPERATION_REFUSEREFUND)) }else if(!operation.compare(OPERATION_REFUSEREFUND))
{ {
_RefuseRefund(orderId); // _RefuseRefund(orderId);
}else if(!operation.compare(OPERATION_REFUNDORDER)) }else if(!operation.compare(OPERATION_REFUNDORDER))
{ {
_RefundOrder(orderId,5,QString::fromLocal8Bit("同意退款"),QString()); _RefundOrder(orderId,5,QString::fromLocal8Bit("同意退款"),QString());
...@@ -2307,7 +2330,9 @@ void FlowControl::onSerachOrder(const QString &text) ...@@ -2307,7 +2330,9 @@ void FlowControl::onSerachOrder(const QString &text)
void FlowControl::onProcessRejectOrder(const QString &orderId, const int &reasonCode,const QString &reason) void FlowControl::onProcessRejectOrder(const QString &orderId, const int &reasonCode,const QString &reason)
{ {
_RefuseOrder(orderId, reasonCode,reason); Q_UNUSED(orderId);
Q_UNUSED(reasonCode);
Q_UNUSED(reason);
} }
...@@ -2340,6 +2365,8 @@ void FlowControl::onProcessReTryInputOrder(const QString &orderId) ...@@ -2340,6 +2365,8 @@ void FlowControl::onProcessReTryInputOrder(const QString &orderId)
orderPull->channel=TempOrderObject->channel; orderPull->channel=TempOrderObject->channel;
orderPull->pageNumber=1; orderPull->pageNumber=1;
orderPull->pageSize=30; orderPull->pageSize=30;
orderPull->pullErrorCount = 0;
orderPull->callBackUrl = TempOrderObject->callBackUrl;
m_orderPullList.append(orderPull); m_orderPullList.append(orderPull);
m_PullOrderDataMutex.unlock(); m_PullOrderDataMutex.unlock();
} }
......
...@@ -65,6 +65,8 @@ private: ...@@ -65,6 +65,8 @@ private:
int pageNumber; int pageNumber;
QString channel; QString channel;
QString orderId; QString orderId;
int pullErrorCount;
QString callBackUrl;
}PullOrderInfo; }PullOrderInfo;
typedef struct ORDER_OPERATION typedef struct ORDER_OPERATION
...@@ -139,12 +141,14 @@ private: ...@@ -139,12 +141,14 @@ private:
// 是否第一次获取到门店信息 // 是否第一次获取到门店信息
bool m_bFirstRecvInfo; bool m_bFirstRecvInfo;
bool m_bLoginResult; bool m_bLoginResult;
int m_loginErrorCount;
int m_sendHeartErrorCount;
bool m_bCreateSelfCheckOrderError;
bool m_openTcpChannel; bool m_openTcpChannel;
bool m_bOperateResult; bool m_bOperateResult;
// 标记目前悬浮框是否 锁住状态[false:悬浮框解锁状态; true:悬浮框锁住状态]; // 标记目前悬浮框是否 锁住状态[false:悬浮框解锁状态; true:悬浮框锁住状态];
bool m_bFloatFromLockSt; bool m_bFloatFromLockSt;
// HttpServer // HttpServer
// JQHttpServer::TcpServerManage* m_tcpServerManage;
LocalHttpServer* localHttpServer; LocalHttpServer* localHttpServer;
// QtRedis Operat Process // QtRedis Operat Process
...@@ -178,6 +182,9 @@ private: ...@@ -178,6 +182,9 @@ private:
bool m_initPmsOrdersDataRet; bool m_initPmsOrdersDataRet;
bool m_initPmsRedisRet; bool m_initPmsRedisRet;
// 新增: 记录OMS备用服务的 CallBackUrl 地址; 便于OMS服务异常时,具备热切换功能: 登录 + 订单列表 + 心跳 + 自检单;
QString m_serviceCallBackUrl;
signals: signals:
// 发送信号给自己 做登陆 // 发送信号给自己 做登陆
// void doLogin(); // void doLogin();
...@@ -328,12 +335,12 @@ public slots: ...@@ -328,12 +335,12 @@ public slots:
* 参数:[1]订单编号 * 参数:[1]订单编号
* 返回:是否成功 * 返回:是否成功
* */ * */
bool _PullOrderDetail(const QString &orderId, const QString& channel); bool _PullOrderDetail(const QString &orderId, const QString& channel, const QString &callBackUrl);
/* 功能:拉取订单 /* 功能:拉取订单
* 参数:NULL * 参数:NULL
* 返回:是否成功 * 返回:是否成功
* */ * */
bool _PullOrderList(const int &pageSize, const int &pageNo); bool _PullOrderList(const int &pageSize, const int &pageNo, const QString &callBackUrl);
/* 功能:发送心跳 /* 功能:发送心跳
* 参数:NULL * 参数:NULL
* 返回:是否成功 * 返回:是否成功
...@@ -344,11 +351,7 @@ public slots: ...@@ -344,11 +351,7 @@ public slots:
* 返回:是否成功 * 返回:是否成功
* */ * */
bool _ConfirmOrder(const QString& orderId); bool _ConfirmOrder(const QString& orderId);
/* 功能:拒绝订单
* 参数:[1]订单编号[2]拒单原因
* 返回:是否成功
* */
bool _RefuseOrder(const QString& orderId, int refuseCode, const QString reason);
/* 功能:送出订单 /* 功能:送出订单
* 参数:[1]订单编号 * 参数:[1]订单编号
* 返回:是否成功 * 返回:是否成功
...@@ -359,11 +362,7 @@ public slots: ...@@ -359,11 +362,7 @@ public slots:
* 返回:是否成功 * 返回:是否成功
* */ * */
bool _CompleteOrder(const QString& orderId); bool _CompleteOrder(const QString& orderId);
/* 功能:拒绝退单
* 参数:NULL
* 返回:是否成功
* */
bool _RefuseRefund(const QString& orderId);
/* 功能:退单 /* 功能:退单
* 参数:NULL * 参数:NULL
* 返回:是否成功 * 返回:是否成功
...@@ -406,7 +405,7 @@ public slots: ...@@ -406,7 +405,7 @@ public slots:
void _GetIpAddress(); void _GetIpAddress();
void _AddOrderPull(const QString& orderId=0,const QString& channel=0,const int& pageNumber=1,const int& pageSize=30); void _AddOrderPull(const QString& orderId=0,const QString& channel=0,const int& pageNumber=1,const int& pageSize=30);
// 避免获取较多历史订单的同时,OMS又有推单过来,导致死锁; // 避免获取较多历史订单的同时,OMS又有推单过来,导致死锁;
bool _TryAddOrderPull(const QString &orderId=0, const QString &channel=0, const int &pageNumber=1, const int &pageSize=30); bool _TryAddOrderPull(const QString &orderId=0, const QString &channel=0, const QString &callBackUrl="", const int &pageNumber=1, const int &pageSize=30);
//点击屏幕指定区域 //点击屏幕指定区域
void _ClickOMSAssignArea(); void _ClickOMSAssignArea();
......
...@@ -103,6 +103,7 @@ class OrderObject : public QObject ...@@ -103,6 +103,7 @@ class OrderObject : public QObject
Q_PROPERTY (QString remindTicketTime READ getRemindTicketTime WRITE setRemindTicketTime ) Q_PROPERTY (QString remindTicketTime READ getRemindTicketTime WRITE setRemindTicketTime )
Q_PROPERTY (QString carNumber READ getCarNumber WRITE setCarNumber) Q_PROPERTY (QString carNumber READ getCarNumber WRITE setCarNumber)
Q_PROPERTY (QString privacyPhone READ getPrivacyPhone WRITE setPrivacyPhone) Q_PROPERTY (QString privacyPhone READ getPrivacyPhone WRITE setPrivacyPhone)
Q_PROPERTY (QString callBackUrl READ getCallBackUrl WRITE setCallBackUrl)
public: public:
OrderObject(QObject *parent=0) OrderObject(QObject *parent=0)
...@@ -215,6 +216,7 @@ public: ...@@ -215,6 +216,7 @@ public:
QString remindTicketTime; // 提醒小票时间 QString remindTicketTime; // 提醒小票时间
QString carNumber; // 车牌号 QString carNumber; // 车牌号
QString privacyPhone; // 隐私号 QString privacyPhone; // 隐私号
QString callBackUrl; // 为阿里云配置新域名, 用于获取订单详情, 和汇报订单入机情况: 拉取订单详情成功时手动添加到订单json报文体中为了入机汇报接口;
int deliveryStatus = 0; int deliveryStatus = 0;
int payStatus = 0; int payStatus = 0;
...@@ -495,6 +497,9 @@ public: ...@@ -495,6 +497,9 @@ public:
inline QString getPrivacyPhone()const{return privacyPhone;} inline QString getPrivacyPhone()const{return privacyPhone;}
inline void setPrivacyPhone(const QString& v){privacyPhone = v;} inline void setPrivacyPhone(const QString& v){privacyPhone = v;}
inline QString getCallBackUrl()const{return callBackUrl;}
inline void setCallBackUrl(const QString& v){callBackUrl = v;}
}; };
#endif // ORDEROBJECT_H #endif // ORDEROBJECT_H
...@@ -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,2021,12,10 FILEVERSION 4,2022,1,18
PRODUCTVERSION 4,2021,12,10 PRODUCTVERSION 4,2022,1,18
//*************************************************************************// //*************************************************************************//
FILEFLAGSMASK 0x3fL FILEFLAGSMASK 0x3fL
#ifdef _DEBUG #ifdef _DEBUG
...@@ -27,12 +27,12 @@ VS_VERSION_INFO VERSIONINFO ...@@ -27,12 +27,12 @@ VS_VERSION_INFO VERSIONINFO
VALUE "CompanyName", "ShangHai.Freemud Co., Ltd." VALUE "CompanyName", "ShangHai.Freemud Co., Ltd."
VALUE "FileDescription", "PMS Plugin Application" VALUE "FileDescription", "PMS Plugin Application"
VALUE "InternalName", "PmsPlugin.exe" VALUE "InternalName", "PmsPlugin.exe"
VALUE "LegalCopyright", "Copyright (C)2014-2021" VALUE "LegalCopyright", "Copyright (C)2014-2022"
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.2021.12.10" VALUE "ProductVersion", "4.2022.1.18"
VALUE "FileVersion", "4.2021.12.10" VALUE "FileVersion", "4.2022.1.18"
//*************************************************************************// //*************************************************************************//
END END
END END
......
...@@ -15,7 +15,8 @@ ...@@ -15,7 +15,8 @@
//#define APP_VERSION "4.2020.8.10" //#define APP_VERSION "4.2020.8.10"
//#define APP_VERSION "4.2021.1.8" //#define APP_VERSION "4.2021.1.8"
//#define APP_VERSION "4.2021.5.10" //#define APP_VERSION "4.2021.5.10"
#define APP_VERSION "4.2021.12.10" //#define APP_VERSION "4.2021.12.10"
#define APP_VERSION "4.2022.1.18"
//修正版本号时,切记修正 FmTakeout.rc 中的版本号 //修正版本号时,切记修正 FmTakeout.rc 中的版本号
#define SERVER_PASSWORD "posoperator@freemud.cn" #define SERVER_PASSWORD "posoperator@freemud.cn"
...@@ -126,6 +127,7 @@ ...@@ -126,6 +127,7 @@
#define JSON_SHOPCODE "storeId" #define JSON_SHOPCODE "storeId"
#define JSON_POSIPADDRESS "posAddress" #define JSON_POSIPADDRESS "posAddress"
#define JSON_CHANNEL "channel" #define JSON_CHANNEL "channel"
#define JSON_CALL_BACK_URL "callBackUrl"
#define JSON_BUSINESSSTATUS "business_status" #define JSON_BUSINESSSTATUS "business_status"
#define JSON_CODE "code" #define JSON_CODE "code"
#define JSON_PAGENUMBER "pageNo" #define JSON_PAGENUMBER "pageNo"
......
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