Commit a6e5dea9 by wuyang.zou

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

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

Version: 4.2021.12.10
parent 941e58fa
......@@ -377,7 +377,7 @@ void SocketCommunicate::acceptTcpSvrSendMsg()
data.clear();
QJsonObject inputJsonObj;
//<1.1> Case: Recv HeartBeat Msg;
//<1.1> Case: Recv PosAgent Service HeartBeat Request Msg;
if(outDataHead.type == CMD_RECV_HEARTBEAT_REQ)
{
( _sslSocket && ( QAbstractSocket::ConnectedState == _sslSocket->state() ) ) ? _sslSocket->read(outDataHead.length) : "";
......@@ -411,7 +411,15 @@ void SocketCommunicate::acceptTcpSvrSendMsg()
<< ( _isTimeout ? " TimeOut" : " Success")<< " syncHeartBeatStamp: "<<_socketHeartBeatDateTime.toString("yyyy-MM-dd hh:mm:ss");
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)
{
// Recv Server Push OrderStatus Msg;
......@@ -456,7 +464,7 @@ void SocketCommunicate::acceptTcpSvrSendMsg()
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)
{
// Recv Server Response Msg Of Self Login Request ;
......@@ -502,7 +510,7 @@ void SocketCommunicate::acceptTcpSvrSendMsg()
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 {
// Recv Pos Agent Pushed Undefine Action Id Msg;
QByteArray msgData = ( _sslSocket && ( QAbstractSocket::ConnectedState == _sslSocket->state() ) ) ? _sslSocket->read(outDataHead.length) : "" ;
......@@ -697,45 +705,8 @@ bool SocketCommunicate::sendSocketHeart()
return false;
} else {
QLOG_INFO() << "sendSocketHeart:: Send HeartBeat To PosAgnet Success , len: "<< len ;
}
_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;
}
......
......@@ -750,11 +750,11 @@ bool PmsOrdersData::updateOrderStatus(OrderObject* orderObj, const int &OrderSta
int tempOrderTypeId = convertPosServiceTypeId( orderObj, orderObj->orderStatus);
// 预约时间 & 街送小票时间 & 车牌号 & 隐私号 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',"
" make_source='%6', make_device_id='%7', appointed_remind_template ='%8' where order_id='%9'")
.arg( QString::number(OrderStatus), QString::number(tempOrderTypeId), QString::number(orderObj->globalServiceType),
QString::number(orderObj->globalOrderType) ,makeStatus, orderObj->makeSource, orderObj->makeDeviceId,
QString::number(orderObj->inAdvanceTakemeal) +';'+ orderObj->reserveMakeTime, orderObj->id));
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', appointed_time ='%9' where order_id='%10'")
.arg( QString::number(OrderStatus) ).arg( QString::number(tempOrderTypeId) ).arg( QString::number(orderObj->globalServiceType) )
.arg( QString::number(orderObj->globalOrderType) ).arg( makeStatus ).arg( orderObj->makeSource ).arg( orderObj->makeDeviceId )
.arg( QString::number(orderObj->inAdvanceTakemeal) +';'+ orderObj->reserveMakeTime ).arg( orderObj->expectDate ).arg( orderObj->id ) );
if(!query.exec()) {
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