Commit 05bdde09 by wuyang.zou

增强 Aliy 双活备用功能:插件登录 & 列表获取 & 心跳 & 自检单 的双活尝试;

增强 Aliy 推单指定 callBackUrl : 拉单详情 & 退单 & 订单入机汇报 使用 callBackUrl;
优化 拉单详情获取 3次失败则放弃, 获取订单列表 3次失败后,切备用地址再尝试3次, 依旧失败则丢弃;

Version: 2.2022.1.18
parent 0fa7e499
...@@ -52,6 +52,9 @@ FlowControl::~FlowControl() ...@@ -52,6 +52,9 @@ FlowControl::~FlowControl()
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;
...@@ -80,6 +83,7 @@ FlowControl::FlowControl() ...@@ -80,6 +83,7 @@ FlowControl::FlowControl()
m_orderCount = 0; m_orderCount = 0;
m_clickPosCount = 0; m_clickPosCount = 0;
m_hurryPrintSum = 0; m_hurryPrintSum = 0;
m_serviceCallBackUrl = "";
m_clearTimer=new QTimer(this); m_clearTimer=new QTimer(this);
m_heartTimer=new QTimer(this); m_heartTimer=new QTimer(this);
...@@ -203,6 +207,7 @@ void FlowControl::_AddOrderPull(const QString &orderId, const QString &channel, ...@@ -203,6 +207,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();
...@@ -212,7 +217,7 @@ void FlowControl::_AddOrderPull(const QString &orderId, const QString &channel, ...@@ -212,7 +217,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) {
...@@ -245,8 +250,10 @@ bool FlowControl::_TryAddOrderPull(const QString &orderId, const QString &channe ...@@ -245,8 +250,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();
...@@ -624,7 +631,7 @@ void FlowControl::_ScanDelayGetRefundDetailList() { ...@@ -624,7 +631,7 @@ void FlowControl::_ScanDelayGetRefundDetailList() {
QLOG_ERROR()<< QString("[<<<<---_ScanDelayGetRefundDetailList: m_delayGetRefundDetailList's Fisrt Item delayPullOrder_p Is empty(3 list All Empty)--->>>>>]"); QLOG_ERROR()<< QString("[<<<<---_ScanDelayGetRefundDetailList: m_delayGetRefundDetailList's Fisrt Item delayPullOrder_p Is empty(3 list All Empty)--->>>>>]");
continue; continue;
} }
if ( _TryAddOrderPull(delayPullOrder_p->orderId,delayPullOrder_p->channel) ) { if ( _TryAddOrderPull( delayPullOrder_p->orderId, delayPullOrder_p->channel, delayPullOrder_p->callBackUrl ) ) {
delete delayPullOrder_p; delete delayPullOrder_p;
delayPullOrder_p = nullptr; delayPullOrder_p = nullptr;
} else { } else {
...@@ -692,7 +699,7 @@ void FlowControl::_ScanDelayGetRefundDetailList() { ...@@ -692,7 +699,7 @@ void FlowControl::_ScanDelayGetRefundDetailList() {
} }
// Case4: 筛选出来 无需延迟获取退单详情的订单 需要添加到 正常的获取订单详情的队列中; // Case4: 筛选出来 无需延迟获取退单详情的订单 需要添加到 正常的获取订单详情的队列中;
if ( _TryAddOrderPull(delayPullOrder_p->orderId,delayPullOrder_p->channel) ) { if ( _TryAddOrderPull( delayPullOrder_p->orderId, delayPullOrder_p->channel, delayPullOrder_p->callBackUrl ) ) {
delete delayPullOrder_p; delete delayPullOrder_p;
delayPullOrder_p = nullptr; delayPullOrder_p = nullptr;
} else { } else {
...@@ -777,6 +784,7 @@ void FlowControl::_OrderAnalysis(const QJsonObject& jsonObject) ...@@ -777,6 +784,7 @@ void FlowControl::_OrderAnalysis(const QJsonObject& jsonObject)
orderObject->dataBaseIsORSPushInt = 0; orderObject->dataBaseIsORSPushInt = 0;
orderObject->dataBaseIsORSCancleInt = 0; orderObject->dataBaseIsORSCancleInt = 0;
orderObject->dataBasePosOrderCheckNo = ""; orderObject->dataBasePosOrderCheckNo = "";
orderObject->callBackUrl = "";
//插件程序内存中没有此订单时需要从数据库中获取该订单标志数据;同时在接受到退单情况时,也需要从数据库中重新获取(防止内存中标志数据未更新[入机后未更新]); //插件程序内存中没有此订单时需要从数据库中获取该订单标志数据;同时在接受到退单情况时,也需要从数据库中重新获取(防止内存中标志数据未更新[入机后未更新]);
bool retGetDbOrderAllFlag = SimProcOrderDB::getInstance().getDbOrderAllFlag(orderObject->id,orderObject->dataBaseIsOrderExistInt,orderObject->dataBaseIsPushInt, bool retGetDbOrderAllFlag = SimProcOrderDB::getInstance().getDbOrderAllFlag(orderObject->id,orderObject->dataBaseIsOrderExistInt,orderObject->dataBaseIsPushInt,
...@@ -1088,6 +1096,7 @@ bool FlowControl::_SimValidOrdersListIsEmpty(){ ...@@ -1088,6 +1096,7 @@ bool FlowControl::_SimValidOrdersListIsEmpty(){
bool FlowControl::_Login() bool FlowControl::_Login()
{ {
QString error; QString error;
QString url;
bool result; bool result;
QJsonObject sendJson; QJsonObject sendJson;
QJsonObject recvJson; QJsonObject recvJson;
...@@ -1105,7 +1114,6 @@ bool FlowControl::_Login() ...@@ -1105,7 +1114,6 @@ bool FlowControl::_Login()
} }
m_puginVersionComments = ConfigManger::GetInstance().GetOrderServerUrl(); m_puginVersionComments = ConfigManger::GetInstance().GetOrderServerUrl();
sendJson = DataManger::GetInstance().GetLoginData(ConfigManger::GetInstance().GetPartnerId(),m_storeId, sendJson = DataManger::GetInstance().GetLoginData(ConfigManger::GetInstance().GetPartnerId(),m_storeId,
m_password, m_posId, m_cashierId, m_ipPortAddress, m_puginVersionComments); m_password, m_posId, m_cashierId, m_ipPortAddress, m_puginVersionComments);
// 登录新增Pos相关属性字段; // 登录新增Pos相关属性字段;
...@@ -1115,26 +1123,34 @@ bool FlowControl::_Login() ...@@ -1115,26 +1123,34 @@ bool FlowControl::_Login()
sendJson.insert(JSON_POS_MAC_ADDRESS, m_posMacAddress); sendJson.insert(JSON_POS_MAC_ADDRESS, m_posMacAddress);
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 ) {
m_loginSocket->SetUrl(QUrl(ConfigManger::GetInstance().GetLoginServerUrl()+ url = m_serviceCallBackUrl + "/pos/" + ConfigManger::GetInstance().GetInterfaceName(INI_INTERFACE_ILOGIN);
ConfigManger::GetInstance().GetInterfaceName(INI_INTERFACE_ILOGIN))); sendJson.remove(JSON_PLUGINVERSIONCOMMENTS);
QLOG_INFO() << QString("[<<<<---_Login Qurl: --->>>>]")<<m_loginSocket->GetUrl(); sendJson.insert(JSON_PLUGINVERSIONCOMMENTS, m_serviceCallBackUrl);
} else {
url = ConfigManger::GetInstance().GetLoginServerUrl() + ConfigManger::GetInstance().GetInterfaceName(INI_INTERFACE_ILOGIN);
}
m_loginSocket->SetUrl(QUrl( url ));
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();
...@@ -1163,6 +1179,7 @@ bool FlowControl::_Login() ...@@ -1163,6 +1179,7 @@ bool FlowControl::_Login()
m_pullTimer->start(1000*5); m_pullTimer->start(1000*5);
m_reportOMSReocrdOrderTimer->start(1000*10); m_reportOMSReocrdOrderTimer->start(1000*10);
m_clickPosCount = 0; m_clickPosCount = 0;
m_loginErrorCount = 0;
m_notifySimPullTimer->start(7*1000); m_notifySimPullTimer->start(7*1000);
m_storageOrderTimer->start(10*1000); m_storageOrderTimer->start(10*1000);
m_delayGetRefundDetailTimer->start(15*1000); m_delayGetRefundDetailTimer->start(15*1000);
...@@ -1211,7 +1228,7 @@ void FlowControl::_PullOrderData() ...@@ -1211,7 +1228,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);
...@@ -1219,26 +1236,46 @@ void FlowControl::_PullOrderData() ...@@ -1219,26 +1236,46 @@ 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()) {
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);
} }
} }
...@@ -1247,11 +1284,12 @@ void FlowControl::_PullOrderData() ...@@ -1247,11 +1284,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==NULL) if(m_pullOrderSocket==NULL)
m_pullOrderSocket =new BillSocket(this); m_pullOrderSocket =new BillSocket(this);
QString error; QString error;
QString url;
bool result; bool result;
QJsonObject recvJson; QJsonObject recvJson;
...@@ -1261,8 +1299,12 @@ bool FlowControl::_PullOrderDetail(const QString& orderId, const QString& channe ...@@ -1261,8 +1299,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);
...@@ -1289,6 +1331,10 @@ bool FlowControl::_PullOrderDetail(const QString& orderId, const QString& channe ...@@ -1289,6 +1331,10 @@ 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);
} }
} }
...@@ -1303,12 +1349,13 @@ bool FlowControl::_PullOrderDetail(const QString& orderId, const QString& channe ...@@ -1303,12 +1349,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==NULL) { if(m_pullOrderListSocket==NULL) {
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;
...@@ -1322,13 +1369,19 @@ bool FlowControl::_PullOrderList(const int &pageSize, const int &pageNo) ...@@ -1322,13 +1369,19 @@ bool FlowControl::_PullOrderList(const int &pageSize, const int &pageNo)
} else { } else {
QLOG_INFO()<<"FlowControl::_PullOrderList load not ssl"; QLOG_INFO()<<"FlowControl::_PullOrderList load not ssl";
} }
m_pullOrderListSocket->SetUrl(QUrl(ConfigManger::GetInstance().GetOrderServerUrl()+
ConfigManger::GetInstance().GetInterfaceName(INI_INTERFACE_PULLORDERLIST))); if ( callBackUrl.length() ) {
QLOG_INFO()<<ConfigManger::GetInstance().GetOrderServerUrl()+ url = callBackUrl + "/order/" + ConfigManger::GetInstance().GetInterfaceName(INI_INTERFACE_PULLORDERLIST);
ConfigManger::GetInstance().GetInterfaceName(INI_INTERFACE_PULLORDERLIST)<< " requestData: " <<sendJson; } else {
url = ConfigManger::GetInstance().GetOrderServerUrl() + ConfigManger::GetInstance().GetInterfaceName(INI_INTERFACE_PULLORDERLIST);
}
m_pullOrderListSocket->SetUrl(QUrl( url ));
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>"));
} else { } else {
...@@ -1358,6 +1411,8 @@ bool FlowControl::_PullOrderList(const int &pageSize, const int &pageNo) ...@@ -1358,6 +1411,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);
//避免出现存在多页数据,导致出现死锁; //避免出现存在多页数据,导致出现死锁;
...@@ -1381,6 +1436,7 @@ bool FlowControl::_PullOrderList(const int &pageSize, const int &pageNo) ...@@ -1381,6 +1436,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;
...@@ -1392,27 +1448,36 @@ bool FlowControl::_SendHeart() ...@@ -1392,27 +1448,36 @@ 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次,则切回初始地址继续心跳;
m_loginSocket->SetUrl(QUrl(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);
}
m_loginSocket->SetUrl(QUrl( url ) );
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>"));
emit doUpdateStoreStatus(0, 0, 0, 0); //NetWork Is Error , Refresh Store Default Status; emit doUpdateStoreStatus(0, 0, 0, 0); //NetWork Is Error , Refresh Store Default Status;
}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, 0); //Interface Return Error , Refresh Store Default Status; emit doUpdateStoreStatus(0, 0, 0, 0); //Interface Return Error , Refresh Store Default Status;
}else{ } else {
result = true; result = true;
emit setNetStatus(QString::fromLocal8Bit("<font color='#f5f5f5'>正常</font>")); emit setNetStatus(QString::fromLocal8Bit("<font color='#f5f5f5'>正常</font>"));
//只有上一次心跳是异常:才根据心跳来展示门店营业状态 [数据延迟比较严重:同时也需要通过OMS推门店状态给插件] //只有上一次心跳是异常:才根据心跳来展示门店营业状态 [数据延迟比较严重:同时也需要通过OMS推门店状态给插件]
...@@ -1446,14 +1511,6 @@ bool FlowControl::_ConfirmOrder(const QString &orderId) ...@@ -1446,14 +1511,6 @@ bool FlowControl::_ConfirmOrder(const QString &orderId)
return result; return result;
} }
bool FlowControl::_RefuseOrder(const QString &orderId, int refuseCode,const QString reason)
{
Q_UNUSED(orderId);
Q_UNUSED(refuseCode);
Q_UNUSED(reason);
bool result = false;
return result;
}
bool FlowControl::_SendOrder(const QString& orderId) bool FlowControl::_SendOrder(const QString& orderId)
{ {
...@@ -1469,18 +1526,14 @@ bool FlowControl::_CompleteOrder(const QString& orderId) ...@@ -1469,18 +1526,14 @@ bool FlowControl::_CompleteOrder(const QString& orderId)
return result; return result;
} }
bool FlowControl::_RefuseRefund(const QString& orderId)
{
Q_UNUSED(orderId);
bool result = false;
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;
...@@ -1488,7 +1541,17 @@ bool FlowControl::_RefundOrder(const QString &orderId,int reasonCode,const QStri ...@@ -1488,7 +1541,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;
// 如果退款原因:商品已售完,使用下面接口; // 如果退款原因:其他,都同意使用一个接口; // 如果退款原因:商品已售完,使用下面接口; // 如果退款原因:其他,都同意使用一个接口;
m_procOrderSocket->SetUrl(QUrl(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);
}
m_procOrderSocket->SetUrl(QUrl( url ) );
QLOG_INFO() << QString("[<<<<<-----_RefundOrder: orderId:%1 URL: ----->>>>>]").arg(orderId)<< m_procOrderSocket->GetUrl(); QLOG_INFO() << QString("[<<<<<-----_RefundOrder: orderId:%1 URL: ----->>>>>]").arg(orderId)<< m_procOrderSocket->GetUrl();
if(ConfigManger::GetInstance().GetOrderSslConfig()) { if(ConfigManger::GetInstance().GetOrderSslConfig()) {
...@@ -1645,7 +1708,10 @@ void FlowControl::_ReportOMSRecordOrderInfo() ...@@ -1645,7 +1708,10 @@ void FlowControl::_ReportOMSRecordOrderInfo()
//准备https请求,准备向OMS汇报订单的入机情况; //准备https请求,准备向OMS汇报订单的入机情况;
if(m_reportOMSRecordOrderSocket==NULL) if(m_reportOMSRecordOrderSocket==NULL)
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;
...@@ -1668,10 +1734,20 @@ void FlowControl::_ReportOMSRecordOrderInfo() ...@@ -1668,10 +1734,20 @@ void FlowControl::_ReportOMSRecordOrderInfo()
sendJson.insert(JSON_POS_PLUGIN_VERSION, RepOMSRecOrderIn->posPluginVersion); sendJson.insert(JSON_POS_PLUGIN_VERSION, RepOMSRecOrderIn->posPluginVersion);
QLOG_INFO() << QString("[<<<<---_ReportOMSRecordOrderInfo:Begin--->>>>][requestData:%1]")<<sendJson; QLOG_INFO() << QString("[<<<<---_ReportOMSRecordOrderInfo:Begin--->>>>][requestData:%1]")<<sendJson;
m_reportOMSRecordOrderSocket->SetUrl(QUrl(ConfigManger::GetInstance().GetLoginServerUrl()+ // 查找到 orderObject point 后,查找到 callBackUrl ;
ConfigManger::GetInstance().GetInterfaceName(INI_INTERFACE_REPORTOMSRECORDORDER))); if ( m_FmOrdersMap.value( RepOMSRecOrderIn->orderNo ) ) {
QLOG_INFO()<<QString("[<<<<---Report OMS Record Order Entry POS Info--->>>>][requestUrl:]") << ConfigManger::GetInstance().GetLoginServerUrl() + callBackUrl = m_FmOrdersMap.value( RepOMSRecOrderIn->orderNo )->callBackUrl;
ConfigManger::GetInstance().GetInterfaceName(INI_INTERFACE_REPORTOMSRECORDORDER); }
if ( callBackUrl.length() ) {
url = callBackUrl + "/pos/" + ConfigManger::GetInstance().GetInterfaceName(INI_INTERFACE_REPORTOMSRECORDORDER);
} else {
url = ConfigManger::GetInstance().GetLoginServerUrl() + ConfigManger::GetInstance().GetInterfaceName(INI_INTERFACE_REPORTOMSRECORDORDER);
}
m_reportOMSRecordOrderSocket->SetUrl( QUrl( url ) );
QLOG_INFO()<<QString("[<<<<---Report OMS Record Order Entry POS Info--->>>>][requestUrl:]") << url;
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( RepOMSRecOrderIn->orderNo )<<recvJson; .arg(result).arg(error).arg( RepOMSRecOrderIn->orderNo )<<recvJson;
...@@ -1704,6 +1780,7 @@ void FlowControl::_ReportOMSRecordOrderInfo() ...@@ -1704,6 +1780,7 @@ void FlowControl::_ReportOMSRecordOrderInfo()
} }
} }
m_RepOMSRecordOrderMutex.unlock(); m_RepOMSRecordOrderMutex.unlock();
} }
...@@ -1838,6 +1915,7 @@ void FlowControl::onSendSelfCheck() ...@@ -1838,6 +1915,7 @@ void FlowControl::onSendSelfCheck()
return; return;
} }
QString error; QString error;
QString url;
bool result; bool result;
QJsonObject sendJson; QJsonObject sendJson;
QJsonObject recvJson; QJsonObject recvJson;
...@@ -1850,20 +1928,29 @@ void FlowControl::onSendSelfCheck() ...@@ -1850,20 +1928,29 @@ void FlowControl::onSendSelfCheck()
} else { } else {
QLOG_INFO()<<"load not ssl"; QLOG_INFO()<<"load not ssl";
} }
QString url = ConfigManger::GetInstance().GetOrderServerUrl()+ "pos/create/checkOrder";
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; QLOG_INFO() << QString("[<<<<---FlowControl::onSendSelfCheck Begin--->>>>][ requestUrl:%1 , requestData:] ").arg(url) << sendJson;
m_procOrderSocket->SetUrl(QUrl(url)); m_procOrderSocket->SetUrl(QUrl(url));
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:] ") QLOG_INFO() << QString("[<<<<---Get onSendSelfCheck:Finish--->>>>][result:%1][msg:%2] [recvData:] ").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;
// Test Modify Time // Test Modify Time
//emit showAlert(AlertForm::WARNNING, QString::fromLocal8Bit("用户修改 MOP 预约时间;订单尾号: 12345;" //emit showAlert(AlertForm::WARNNING, QString::fromLocal8Bit("用户修改 MOP 预约时间;订单尾号: 12345;"
// " 订单号: 9876543210012345678; 新预约时间: 18:00; 原预约时间: 17:30")); // " 订单号: 9876543210012345678; 新预约时间: 18:00; 原预约时间: 17:30"));
...@@ -2468,6 +2555,9 @@ bool FlowControl::_ResponseOMS11Request(const QJsonObject &content, QJsonObject ...@@ -2468,6 +2555,9 @@ bool FlowControl::_ResponseOMS11Request(const QJsonObject &content, QJsonObject
if ( !m_bLoginResult ) { if ( !m_bLoginResult ) {
error = QString::fromLocal8Bit("FMOMS未登录"); error = QString::fromLocal8Bit("FMOMS未登录");
if ( content[JSON_CALL_BACK_URL].toString().length() ) {
m_serviceCallBackUrl = content[JSON_CALL_BACK_URL].toString(); // https://delposserviceapi.starbucks.net/backstage : 域名/backstage
}
return false; return false;
} else { } else {
if ( content[JSON_ORDER_ID].toString().isEmpty() ) { if ( content[JSON_ORDER_ID].toString().isEmpty() ) {
...@@ -2476,8 +2566,13 @@ bool FlowControl::_ResponseOMS11Request(const QJsonObject &content, QJsonObject ...@@ -2476,8 +2566,13 @@ bool FlowControl::_ResponseOMS11Request(const QJsonObject &content, QJsonObject
} else { } else {
QString omsPushOrderId = content[JSON_ORDER_ID].toString(); QString omsPushOrderId = content[JSON_ORDER_ID].toString();
QString omsPushOrderChannel = content[JSON_CHANNEL].toString(); QString omsPushOrderChannel = content[JSON_CHANNEL].toString();
QString omsCallBackUrl= content[JSON_CALL_BACK_URL].toString(); // https://delposserviceapi.starbucks.net/backstage : 域名/backstage
int omsPushOrderStatus = content[JSON_STATUS].toInt(); int omsPushOrderStatus = content[JSON_STATUS].toInt();
if ( omsCallBackUrl.length() ) {
m_serviceCallBackUrl = omsCallBackUrl;
}
if ( 6 == omsPushOrderStatus ) { if ( 6 == omsPushOrderStatus ) {
// 避免小概率事件:①重复录单 ②单边账; // 避免小概率事件:①重复录单 ②单边账;
bool bRetDelayGetRefundDetailMutex =m_delayGetRefundDetailMutex.tryLock(VALUE_TRYLOCKMEMTIMEOUT); bool bRetDelayGetRefundDetailMutex =m_delayGetRefundDetailMutex.tryLock(VALUE_TRYLOCKMEMTIMEOUT);
...@@ -2496,6 +2591,7 @@ bool FlowControl::_ResponseOMS11Request(const QJsonObject &content, QJsonObject ...@@ -2496,6 +2591,7 @@ bool FlowControl::_ResponseOMS11Request(const QJsonObject &content, QJsonObject
} }
delayOrderPull_p->orderId=omsPushOrderId; delayOrderPull_p->orderId=omsPushOrderId;
delayOrderPull_p->channel=omsPushOrderChannel; delayOrderPull_p->channel=omsPushOrderChannel;
delayOrderPull_p->callBackUrl = omsCallBackUrl;
m_delayGetRefundDetailList.append(delayOrderPull_p); m_delayGetRefundDetailList.append(delayOrderPull_p);
QLOG_INFO()<<QString("[<<<<---_ResponseOMS11Request: orderId: %1 Append Success, m_delayGetRefundDetailList size: %2 And FirstOne: %3 --->>>>>]") QLOG_INFO()<<QString("[<<<<---_ResponseOMS11Request: orderId: %1 Append Success, m_delayGetRefundDetailList size: %2 And FirstOne: %3 --->>>>>]")
.arg( omsPushOrderId ).arg( m_delayGetRefundDetailList.size() ).arg( m_delayGetRefundDetailList.isEmpty()? " " : m_delayGetRefundDetailList.first()->orderId ); .arg( omsPushOrderId ).arg( m_delayGetRefundDetailList.size() ).arg( m_delayGetRefundDetailList.isEmpty()? " " : m_delayGetRefundDetailList.first()->orderId );
...@@ -2504,7 +2600,7 @@ bool FlowControl::_ResponseOMS11Request(const QJsonObject &content, QJsonObject ...@@ -2504,7 +2600,7 @@ bool FlowControl::_ResponseOMS11Request(const QJsonObject &content, QJsonObject
} else { } else {
// 接受到非码oms插过来的订单,进行向队列中进行添加; // 接受到非码oms插过来的订单,进行向队列中进行添加;
// Case3: 添加前 筛选是否已经存在待拉取的状态; // Case3: 添加前 筛选是否已经存在待拉取的状态;
result = _TryAddOrderPull( omsPushOrderId, omsPushOrderChannel ); result = _TryAddOrderPull( omsPushOrderId, omsPushOrderChannel, omsCallBackUrl );
} }
} }
...@@ -3417,7 +3513,7 @@ void FlowControl::onProcessOrder(const QString &operation, const QString &orderI ...@@ -3417,7 +3513,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);
}else if(!operation.compare(OPERATION_REFUNDORDER)) }else if(!operation.compare(OPERATION_REFUNDORDER))
{ {
_RefundOrder(orderId,5,QString::fromLocal8Bit("同意退款"),QString()); _RefundOrder(orderId,5,QString::fromLocal8Bit("同意退款"),QString());
...@@ -3477,6 +3573,7 @@ void FlowControl::onGetEcMopOrderDetails(const QString& orderId, const QString& ...@@ -3477,6 +3573,7 @@ void FlowControl::onGetEcMopOrderDetails(const QString& orderId, const QString&
emit showAlert(AlertForm::MSGERROR, QString::fromLocal8Bit("扫描订单号异常") ); emit showAlert(AlertForm::MSGERROR, QString::fromLocal8Bit("扫描订单号异常") );
return; return;
} else { } else {
QString callBackUrl = "";
// 入参有效; // 入参有效;
// 判断插件是否登录成功了,没有登录成功,弹框提示; // 判断插件是否登录成功了,没有登录成功,弹框提示;
if ( !m_bLoginResult ) { if ( !m_bLoginResult ) {
...@@ -3484,11 +3581,16 @@ void FlowControl::onGetEcMopOrderDetails(const QString& orderId, const QString& ...@@ -3484,11 +3581,16 @@ void FlowControl::onGetEcMopOrderDetails(const QString& orderId, const QString&
return; return;
} }
// 组装请求报文 [ 含门店编号:便于 OMS 校验此订单是否属于本门店 ] , 获取订单详情数据 ;[ 失败则弹框提示] // 组装请求报文 [ 含门店编号:便于 OMS 校验此订单是否属于本门店 ] , 获取订单详情数据 ;[ 失败则弹框提示]
bool pullOrderDetailRet = _PullOrderDetail( orderId, channel); if ( m_FmOrdersMap.value(orderId) ) {
callBackUrl = m_FmOrdersMap.value(orderId)->callBackUrl;
}
bool pullOrderDetailRet = _PullOrderDetail( orderId, channel , callBackUrl );
if ( pullOrderDetailRet ) { if ( pullOrderDetailRet ) {
// 展示跳转订单详情页面; // 同一线程, 理论无需 Sleep // 展示跳转订单详情页面; // 同一线程, 理论无需 Sleep
Sleep(1000*3); Sleep(1000*3);
emit showOrderDetails(m_FmOrdersMap.value(orderId)); emit showOrderDetails( m_FmOrdersMap.value(orderId) );
} }
} }
...@@ -3529,7 +3631,6 @@ void FlowControl::onSerachOrder(const QString &text) ...@@ -3529,7 +3631,6 @@ 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);
} }
...@@ -3562,6 +3663,8 @@ void FlowControl::onProcessReTryInputOrder(const QString &orderId) ...@@ -3562,6 +3663,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();
} }
......
...@@ -66,12 +66,15 @@ private: ...@@ -66,12 +66,15 @@ private:
int pageNumber; int pageNumber;
QString channel; QString channel;
QString orderId; QString orderId;
int pullErrorCount;
QString callBackUrl;
}PullOrderInfo; }PullOrderInfo;
typedef struct TO_DELAY_PULL_ORDER typedef struct TO_DELAY_PULL_ORDER
{ {
QString channel; QString channel;
QString orderId; QString orderId;
QString callBackUrl;
}DelayPullOrderInfo; }DelayPullOrderInfo;
typedef struct ORDER_OPERATION typedef struct ORDER_OPERATION
...@@ -152,12 +155,14 @@ private: ...@@ -152,12 +155,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;
LoaclHttpServer* loaclHttpServer; LoaclHttpServer* loaclHttpServer;
QMap<QString, QMultiMap<QString, dishesObject> >m_dishesMap; QMap<QString, QMultiMap<QString, dishesObject> >m_dishesMap;
...@@ -201,6 +206,9 @@ private: ...@@ -201,6 +206,9 @@ private:
bool m_initPrintOrderPromotionDBRet; bool m_initPrintOrderPromotionDBRet;
bool m_initCheckPoskeyExistPosDBRet; bool m_initCheckPoskeyExistPosDBRet;
// 新增: 记录OMS备用服务的 CallBackUrl 地址; 便于OMS服务异常时,具备热切换功能: 登录 + 订单列表 + 心跳 + 自检单;
QString m_serviceCallBackUrl;
signals: signals:
// 发送信号给自己 做登陆 // 发送信号给自己 做登陆
void doLogin(); void doLogin();
...@@ -336,12 +344,12 @@ private slots: ...@@ -336,12 +344,12 @@ private 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
* 返回:是否成功 * 返回:是否成功
...@@ -352,11 +360,7 @@ private slots: ...@@ -352,11 +360,7 @@ private 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]订单编号
* 返回:是否成功 * 返回:是否成功
...@@ -367,11 +371,7 @@ private slots: ...@@ -367,11 +371,7 @@ private slots:
* 返回:是否成功 * 返回:是否成功
* */ * */
bool _CompleteOrder(const QString& orderId); bool _CompleteOrder(const QString& orderId);
/* 功能:拒绝退单
* 参数:NULL
* 返回:是否成功
* */
bool _RefuseRefund(const QString& orderId);
/* 功能:退单 /* 功能:退单
* 参数:NULL * 参数:NULL
* 返回:是否成功 * 返回:是否成功
...@@ -405,7 +405,7 @@ private slots: ...@@ -405,7 +405,7 @@ private 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();
......
...@@ -109,6 +109,7 @@ class OrderObject : public QObject ...@@ -109,6 +109,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)
...@@ -235,6 +236,7 @@ public: ...@@ -235,6 +236,7 @@ public:
QString remindTicketTime; // 提醒小票时间 QString remindTicketTime; // 提醒小票时间
QString carNumber; // 车牌号 QString carNumber; // 车牌号
QString privacyPhone; // 隐私号 QString privacyPhone; // 隐私号
QString callBackUrl; // 为阿里云配置新域名, 用于获取订单详情, 和汇报订单入机情况: 拉取订单详情成功时手动添加到订单json报文体中为了入机汇报接口;
int forwardPosStatus; // 正向单入机状态: 0:未知 1: 成功 2:失败; int forwardPosStatus; // 正向单入机状态: 0:未知 1: 成功 2:失败;
int negativePosStatus; // 负向单同上; int negativePosStatus; // 负向单同上;
...@@ -537,6 +539,9 @@ public: ...@@ -537,6 +539,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
...@@ -158,6 +158,7 @@ ...@@ -158,6 +158,7 @@
#define JSON_STORE_ID "storeId" #define JSON_STORE_ID "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