Commit 7e3fe794 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
...@@ -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