Commit a6e5dea9 by wuyang.zou

1、转移 Plugin 发送心跳后,立即监听心跳返回的 block 动作,防止丢消息

2、更新订单制作时间时 也更新 预约时间

Version: 4.2021.12.10
parent 941e58fa
...@@ -377,7 +377,7 @@ void SocketCommunicate::acceptTcpSvrSendMsg() ...@@ -377,7 +377,7 @@ void SocketCommunicate::acceptTcpSvrSendMsg()
data.clear(); data.clear();
QJsonObject inputJsonObj; QJsonObject inputJsonObj;
//<1.1> Case: Recv HeartBeat Msg; //<1.1> Case: Recv PosAgent Service HeartBeat Request Msg;
if(outDataHead.type == CMD_RECV_HEARTBEAT_REQ) if(outDataHead.type == CMD_RECV_HEARTBEAT_REQ)
{ {
( _sslSocket && ( QAbstractSocket::ConnectedState == _sslSocket->state() ) ) ? _sslSocket->read(outDataHead.length) : ""; ( _sslSocket && ( QAbstractSocket::ConnectedState == _sslSocket->state() ) ) ? _sslSocket->read(outDataHead.length) : "";
...@@ -411,7 +411,15 @@ void SocketCommunicate::acceptTcpSvrSendMsg() ...@@ -411,7 +411,15 @@ void SocketCommunicate::acceptTcpSvrSendMsg()
<< ( _isTimeout ? " TimeOut" : " Success")<< " syncHeartBeatStamp: "<<_socketHeartBeatDateTime.toString("yyyy-MM-dd hh:mm:ss"); << ( _isTimeout ? " TimeOut" : " Success")<< " syncHeartBeatStamp: "<<_socketHeartBeatDateTime.toString("yyyy-MM-dd hh:mm:ss");
continue; continue;
} }
//<1.2> Case: Recv Push OrderStatus Msg; //<1.2> Case: Recv PosAgent Service Response Plugin'self heartbeat Msg;
else if ( outDataHead.type == CMD_RECV_HEARTBEAT_RESP )
{
QByteArray msgData = ( _sslSocket && ( QAbstractSocket::ConnectedState == _sslSocket->state() ) ) ? _sslSocket->read(outDataHead.length) : "";
QLOG_INFO() << "acceptTcpSvrSendMsg:: Recv HeartBeat Response From PosAgnet Success, Sequence: " << outDataHead.sequence << " Msg: " << msgData.data();
_socketHeartBeatDateTime = QDateTime::currentDateTime();
continue;
}
//<1.3> Case: Recv Push OrderStatus Msg;
else if(outDataHead.type == CMD_RECV_MSG_REQ) else if(outDataHead.type == CMD_RECV_MSG_REQ)
{ {
// Recv Server Push OrderStatus Msg; // Recv Server Push OrderStatus Msg;
...@@ -456,7 +464,7 @@ void SocketCommunicate::acceptTcpSvrSendMsg() ...@@ -456,7 +464,7 @@ void SocketCommunicate::acceptTcpSvrSendMsg()
continue; continue;
} }
//<1.3> Case: Recv Auth Login Resp Msg [ impossible]; //<1.4> Case: Recv Auth Login Resp Msg [ impossible];
else if(outDataHead.type == CMD_AUTH_LOGIN_RESP) else if(outDataHead.type == CMD_AUTH_LOGIN_RESP)
{ {
// Recv Server Response Msg Of Self Login Request ; // Recv Server Response Msg Of Self Login Request ;
...@@ -502,7 +510,7 @@ void SocketCommunicate::acceptTcpSvrSendMsg() ...@@ -502,7 +510,7 @@ void SocketCommunicate::acceptTcpSvrSendMsg()
continue; continue;
} }
//<1.4> Case: Recv Socket Msg Type No Process , DataHead.type Havn't Match Success [ Maybe ]; Need Response, Or POS Agent Will Still Push; //<1.5> Case: Recv Socket Msg Type No Process , DataHead.type Havn't Match Success [ Maybe ]; Need Response, Or POS Agent Will Still Push;
else { else {
// Recv Pos Agent Pushed Undefine Action Id Msg; // Recv Pos Agent Pushed Undefine Action Id Msg;
QByteArray msgData = ( _sslSocket && ( QAbstractSocket::ConnectedState == _sslSocket->state() ) ) ? _sslSocket->read(outDataHead.length) : "" ; QByteArray msgData = ( _sslSocket && ( QAbstractSocket::ConnectedState == _sslSocket->state() ) ) ? _sslSocket->read(outDataHead.length) : "" ;
...@@ -697,46 +705,9 @@ bool SocketCommunicate::sendSocketHeart() ...@@ -697,46 +705,9 @@ bool SocketCommunicate::sendSocketHeart()
return false; return false;
} else { } else {
QLOG_INFO() << "sendSocketHeart:: Send HeartBeat To PosAgnet Success , len: "<< len ; QLOG_INFO() << "sendSocketHeart:: Send HeartBeat To PosAgnet Success , len: "<< len ;
_socketHeartBeatDateTime = QDateTime::currentDateTime();
} }
_isTimeout = true;
{
QEventLoop loop;
QTimer timer;
connect(this, &SocketCommunicate::quit, &loop, &QEventLoop::quit);
connect(&timer, &QTimer::timeout, &loop, &QEventLoop::quit);
connect(this, &SocketCommunicate::readReady, &loop, &QEventLoop::quit);
timer.start(30*1000);
loop.exec();
}
// <2.1> Read HeartBeat Response Faild;
if ( _isTimeout ) {
QLOG_ERROR() << "sendSocketHeart:: Receive HeartBeat Response From PosAgnet Failed, TimeOut: " << ( _sslSocket ? _sslSocket->errorString() : " _sslSocket Is Null ");
if ( _sslSocket ) _sslSocket->disconnectFromHost();
_needTcpLogin = 1;
return false;
}
// <2.2> Read HeartBeat Response Success;
QByteArray headByteData = ( _sslSocket && ( QAbstractSocket::ConnectedState == _sslSocket->state() ) ) ? _sslSocket->read( sizeof(Data_Head) ) : "" ;
Data_Head outDataHead = {0};
if ( !SocketCommuProcess::getHeadAllData( headByteData, outDataHead ) )
{
QLOG_ERROR() << "sendSocketHeart:: Receive HeartBeat Head Failed / Msg Too Short Or Msg Type Not Match";
( _sslSocket && ( QAbstractSocket::ConnectedState == _sslSocket->state() ) ) ? _sslSocket->readAll() : "" ;
if ( _sslSocket ) _sslSocket->disconnectFromHost();
_needTcpLogin = 1;
return false;
}
// <2.3> Compare Recv HeartBeat Response Body, Maybe Recv Other Normal Type Msg, Will Miss Msg;
QByteArray body = ( _sslSocket && ( QAbstractSocket::ConnectedState == _sslSocket->state() ) ) ? _sslSocket->read(outDataHead.length) : "" ;
QLOG_INFO() << "sendSocketHeart:: Receive HeartBeat Response From PosAgnet: " << body;
// <3> To be confirmed Something;
_socketHeartBeatDateTime = QDateTime::currentDateTime();
return true; return true;
} }
......
...@@ -750,11 +750,11 @@ bool PmsOrdersData::updateOrderStatus(OrderObject* orderObj, const int &OrderSta ...@@ -750,11 +750,11 @@ bool PmsOrdersData::updateOrderStatus(OrderObject* orderObj, const int &OrderSta
int tempOrderTypeId = convertPosServiceTypeId( orderObj, orderObj->orderStatus); int tempOrderTypeId = convertPosServiceTypeId( orderObj, orderObj->orderStatus);
// 预约时间 & 街送小票时间 & 车牌号 & 隐私号 PCS 使用不到, 故没有进行更新. // 预约时间 & 街送小票时间 & 车牌号 & 隐私号 PCS 使用不到, 故没有进行更新.
query.prepare(QString("update orders set order_status=%1,order_type_id=%2, global_service_type=%3, global_order_type=%4, make_status='%5'," query.prepare( QString("update orders set order_status=%1,order_type_id=%2, global_service_type=%3, global_order_type=%4, make_status='%5',"
" make_source='%6', make_device_id='%7', appointed_remind_template ='%8' where order_id='%9'") " make_source='%6', make_device_id='%7', appointed_remind_template ='%8', appointed_time ='%9' where order_id='%10'")
.arg( QString::number(OrderStatus), QString::number(tempOrderTypeId), QString::number(orderObj->globalServiceType), .arg( QString::number(OrderStatus) ).arg( QString::number(tempOrderTypeId) ).arg( QString::number(orderObj->globalServiceType) )
QString::number(orderObj->globalOrderType) ,makeStatus, orderObj->makeSource, orderObj->makeDeviceId, .arg( QString::number(orderObj->globalOrderType) ).arg( makeStatus ).arg( orderObj->makeSource ).arg( orderObj->makeDeviceId )
QString::number(orderObj->inAdvanceTakemeal) +';'+ orderObj->reserveMakeTime, orderObj->id)); .arg( QString::number(orderObj->inAdvanceTakemeal) +';'+ orderObj->reserveMakeTime ).arg( orderObj->expectDate ).arg( orderObj->id ) );
if(!query.exec()) { if(!query.exec()) {
QLOG_ERROR()<<query.lastError().text()<<"[<<<<---PmsOrdersData::update Order Status Failed--->>>>]"; QLOG_ERROR()<<query.lastError().text()<<"[<<<<---PmsOrdersData::update Order Status Failed--->>>>]";
......
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