Commit a428c627 by wuyang.zou

fix

   优化 10分钟 循环拉取订单列表功能;
   依据 心跳接口 返回的 orderCount 进行漏单检查
parent 5c2dc1cd
......@@ -62,12 +62,12 @@ FlowControl::FlowControl()
m_reportOMSReocrdOrderTimer = new QTimer(this);
m_loginTimer=new QTimer(this);
m_notifyPmsPullTimer = new QTimer(this);
m_cyclePullAllOrderTimer = new QTimer(this);
//m_cyclePullAllOrderTimer = new QTimer(this);
m_remindCasherBlinkFloatTimer = new QTimer(this);
connect(m_loginTimer,&QTimer::timeout,this,&FlowControl::_ClickToLogin);
connect(m_notifyPmsPullTimer,&QTimer::timeout,this,&FlowControl::_NotifyPmsPullOrder);
connect(m_cyclePullAllOrderTimer,&QTimer::timeout,this,&FlowControl::_NotifyCyclePullAllOrder);
//connect(m_cyclePullAllOrderTimer,&QTimer::timeout,this,&FlowControl::_NotifyCyclePullAllOrder);
connect(m_remindCasherBlinkFloatTimer,&QTimer::timeout,this,&FlowControl::_RemindCasherBlinkFloatForm);
connect(m_pullTimer,&QTimer::timeout,this,&FlowControl::_PullOrderData);
connect(m_reportOMSReocrdOrderTimer,&QTimer::timeout,this,&FlowControl::_ReportOMSRecordOrderInfo);
......@@ -383,7 +383,7 @@ void FlowControl::_NotifyCyclePullAllOrder()
onGetOMSAllOrders();
//定期拉取OMS门店全部有效订单 间隔为:10分钟;
m_cyclePullAllOrderTimer->start(1000*60*10);
//m_cyclePullAllOrderTimer->start(1000*60*10);
QLOG_INFO()<<QString::fromLocal8Bit("[<<<<---FlowControl::_NotifyCyclePullAllOrder Next Pull All Order Time: %1--->>>>]")
.arg(QDateTime::currentDateTime().addSecs(60*10).toString("yyyy-MM-dd hh:mm:ss"));
......@@ -633,7 +633,7 @@ bool FlowControl::_Login()
m_notifyPmsPullTimer->start(3*1000);
m_remindCasherBlinkFloatTimer->start(5*1000);
m_cyclePullAllOrderTimer->start(1000*60*10);
//m_cyclePullAllOrderTimer->start(1000*60*10);
QLOG_INFO()<<QString::fromLocal8Bit("[<<<<---FlowControl::_Login Next Pull All Order Time: %1--->>>>]")
.arg(QDateTime::currentDateTime().addSecs(60*10).toString("yyyy-MM-dd hh:mm:ss"));
......@@ -883,6 +883,17 @@ bool FlowControl::_SendHeart()
emit doUpdateStoreStatus(m_eleStoreStatus,m_modStoreStatus,m_mopStoreStatus);
//还原并标记上一次心跳为正常状态;
m_bLastHeartIsError = false;
// 根据 心跳接口 判断是否存在漏单,如果存在漏单,则进行订单列表拉取 操作;
if ( recvJson.contains(JSON_ORDERCOUNT) ) {
int OmsOrderCount = recvJson[JSON_ORDERCOUNT].toInt();
if ( m_FmOrdersMap.count() < OmsOrderCount ) {
QLOG_INFO()<<QString("[<<<<---FlowControl::_SendHeart onGetOMSAllOrders() Memory Order Count:%1; OMS Order Count:%2; --->>>>]")
.arg( m_FmOrdersMap.count() ).arg( OmsOrderCount );
onGetOMSAllOrders();
}
}
}
}
return result;
......@@ -1788,20 +1799,10 @@ bool FlowControl::_ResponseHttpRequest(const QJsonObject &content,QJsonObject &d
bool FlowControl::_ResponseSimphony01Request(const QJsonObject &content, QJsonObject &data, QString &error)
{
QLOG_INFO()<<__FUNCTION__;
bool result=true;
if(!m_bLoginResult&&content.contains("storeId")) {
result=_ResponseSimReqTryLogin(content,error);
}
if(result/*&&content.contains("orderId")*/){
result=_ResponseSimReqFristOrderData(content, data,error,content["orderId"].toString());
} else {
result = false;
if(error.isEmpty()) {
error=QString::fromLocal8Bit("Response Simphony_Script Request 01: Login Store Failed");
}
}
return result;
Q_UNUSED(content);
Q_UNUSED(data);
Q_UNUSED(error);
return true;
}
bool FlowControl::_ResponseSimphony02Request(const QJsonObject &content, QJsonObject &data, QString &error)
......@@ -1821,215 +1822,20 @@ bool FlowControl::_ResponseSimphony03Request(const QJsonObject &content, QJsonOb
bool FlowControl::_ResponseSimphony04Request(const QJsonObject &content, QJsonObject &data, QString &error)
{
QLOG_INFO()<<__FUNCTION__;
bool result=true;
if(m_bLoginResult&&content.contains("orderId")){
QString orderId=content["orderId"].toString();
QString posCheckNo=content["posSaleId"].toString();
if(posCheckNo.isEmpty()) {
posCheckNo=m_orderIdToPosCheckNoMap.value(orderId);
}
if(!posCheckNo.isEmpty()&&!orderId.isEmpty()) {
if(!m_orderIdToPosCheckNoMap.contains(orderId)) {
QLOG_INFO()<<QString::fromLocal8Bit("[<<<<---Simphony_Script请求[ACTION:04:汇报小票号] 订单:%1 , 汇报小票号:%2:--->>>>]").arg(orderId,posCheckNo);
m_orderIdToPosCheckNoMap.insert(orderId,posCheckNo);
}
OrderObject* order_p = m_FmOrdersMap.value(orderId);
if (!order_p) {
QLOG_ERROR()<<QString::fromLocal8Bit("[<<<<---%1订单并不存在m_FmOrdersMap[键值对]中;m_FmOrdersMap.size()=%2--->>>>]").arg(orderId).arg(m_FmOrdersMap.size());
error=QString::fromLocal8Bit("Request Action04: %1 Delivery Order Don't Exist In m_FmOrdersMap[key-map] m_FmOrdersMap.size()=%2").arg(orderId).arg(m_FmOrdersMap.size());
emit doUnLockFloatFrom();//****************解锁悬浮框**************//
if(m_bFloatFromLockSt){
m_bFloatFromLockSt = false; //更新悬浮框的锁定状态 =false;
}
return false;
}
if(m_simValidOrdersList.contains(orderId)) {
/***** 汇报POS小票号是否成功;begin:*********/
bool bRetReportCheckNo = false;
if(order_p->pushOrderType==1) {
SimProcOrderDB::getInstance().updatePushOrderStatus(orderId,1);
order_p->isPush= true;
} else if(0 == order_p->pushOrderType) {
SimProcOrderDB::getInstance().updateRefundOrderStatus(orderId,1);
order_p->isCancle = true;
}
//处理预约实物入机后数据库更新;
if(order_p->orsPushOrderType==1 && order_p->appointmentDayFlag) {
SimProcOrderDB::getInstance().updateORSPushOrderStatus(orderId,1);
order_p->isORSPush= true;
} else if(0 == order_p->orsPushOrderType && order_p->appointmentDayFlag) {
SimProcOrderDB::getInstance().updateORSCancleOrderStatus(orderId,1);
//避免重复退预约配送费订单
SimProcOrderDB::getInstance().updateRefundOrderStatus(orderId,1);
order_p->isCancle = true;
order_p->isORSCancle = true;
}
bRetReportCheckNo = SimProcOrderDB::getInstance().updatePosOrderCheckNo(orderId,posCheckNo);
/***** 解析 汇报POS小票号是否成功:bRetReportCheckNo:true->成功********/
QJsonObject rObj, cObj;
rObj.insert("fm_cmd", "");
rObj.insert("fm_ver", "1.0");
cObj.insert("pay_id", "002");
cObj.insert("pay_str", QString::fromLocal8Bit("非码外卖"));
cObj.insert("paid_trans_id",orderId);
if(bRetReportCheckNo){ //已经汇报完小票号,因此必须从 m_simValidOrdersList 列表中移除;
cObj.insert("reqResult",1); // 汇报POS小票号结果:[1:成功;0:失败]
rObj.insert("pay_id", cObj);
data = rObj;
m_OrderEntryMutex.lock();
m_simValidOrdersList.removeOne(orderId);
m_OrderEntryMutex.unlock();
} /***** 解析 汇报POS小票号是否成功:bRetReportCheckNo:true->成功*****/
else{
result=false;
error=QString::fromLocal8Bit("Report POS Check Num Failed");
// 即使汇报小票号失败,同样也必须将此订单从 m_simValidOrdersList 列表中移除:【汇报小票号的前提条件就是:POS已经结单完成】;
cObj.insert("reqResult",0); // 汇报POS小票号结果:[1:成功;0:失败]
rObj.insert("pay_id", cObj);
data = rObj;
m_OrderEntryMutex.lock();
m_simValidOrdersList.removeOne(orderId);
m_OrderEntryMutex.unlock();
}
//新增业务逻辑,针对汇报小票号成功的订单需要;添加到 向OMS汇报入机情况的队列中;
m_RepOMSRecordOrderMutex.lock();
RepOMSRecordOrderInfo* repOMSRecordOrder = nullptr;
if(!m_orderRecordRepOMSList.isEmpty()){
QList<RepOMSRecordOrderInfo*>::iterator i;
for (i = m_orderRecordRepOMSList.begin(); i != m_orderRecordRepOMSList.end(); ++i) {
repOMSRecordOrder = (*i); //*i 使用*运算符获取遍历容器中所指的元素;
if (orderId == repOMSRecordOrder->orderNo) {
break;
} else {
repOMSRecordOrder = nullptr;
}
}
}
if (!repOMSRecordOrder){
repOMSRecordOrder = new RepOMSRecordOrderInfo();
repOMSRecordOrder->reqResult = 0;
} else {
//不管之前入机是什么报错,目前入机成功,必须再次汇报;
m_orderRecordRepOMSList.removeOne(repOMSRecordOrder); //剔除已经存在的,更新完数据后,在添加进来;
repOMSRecordOrder->reqResult = 0;
}
repOMSRecordOrder->orderNo = orderId;
repOMSRecordOrder->channel = order_p->channel;
repOMSRecordOrder->type = (6 == order_p->orderStatus)?QString::fromLocal8Bit("6"):QString::fromLocal8Bit("3");
repOMSRecordOrder->status = QString::fromLocal8Bit("1");
repOMSRecordOrder->opUser = m_cashierName;
repOMSRecordOrder->recordDate = QDateTime::currentDateTime().toString("yyyy-MM-dd hh:mm:ss");;
repOMSRecordOrder->storeId = m_storeId;
repOMSRecordOrder->remark = QString::fromLocal8Bit("入机成功");
repOMSRecordOrder->checkNo = posCheckNo;
QLOG_INFO()<<QString::fromLocal8Bit("[<<<<---FlowControl::_ResponseSimphony04Request:m_orderRecordRepOMSList.append() orderId:%1 orderStatus:%2 checkNo:%3--->>>>]").arg(orderId).arg(repOMSRecordOrder->type).arg(posCheckNo);
m_orderRecordRepOMSList.append(repOMSRecordOrder);
m_RepOMSRecordOrderMutex.unlock();
}
/* 汇报完小票号后,就必须将其从 m_simValidOrdersList 列表中移除;
else {
} */
} else {
result=false;
error=QString::fromLocal8Bit("Request Action04: Delivery OrderId Or Check Num Can't Empty");
}
} else {
result=false;
error=QString::fromLocal8Bit("Request Action04: Request Pragram Error");
}
emit doUnLockFloatFrom();//****************解锁悬浮框**************//
if(m_bFloatFromLockSt){
m_bFloatFromLockSt = false; //更新悬浮框的锁定状态 =false;
}
//为了避免压测插件时,高频的加锁悬浮框 与 高频点击POS机;所以将 及时点击POS机右下角按钮放到上次录单成功后再触发下一次录单事件;
_ClickOMSAssignArea();
return result;
Q_UNUSED(content);
Q_UNUSED(data);
Q_UNUSED(error);
return true;
}
bool FlowControl::_ResponseSimphony05Request(const QJsonObject &content, QJsonObject &data, QString &error)
{
QLOG_INFO()<<__FUNCTION__;
bool result=true;
if(m_bLoginResult&&content.contains("orderId")){
QString orderId=content["orderId"].toString();
QString posCheckNo=content["posSaleId"].toString();
if(posCheckNo.isEmpty())
{
error=QString::fromLocal8Bit("Request Action05: %1 Delivery Order: Check Num Can't Empty").arg(orderId);
return false;
}
if(!posCheckNo.isEmpty()&&!orderId.isEmpty())
{
OrderObject* order_p = m_FmOrdersMap.value(orderId);
if (!order_p){
QLOG_ERROR()<<QString::fromLocal8Bit("[<<<<---%1订单并不存在m_FmOrdersMap[键值对]中;m_FmOrdersMap.size()=%2--->>>>]").arg(orderId).arg(m_FmOrdersMap.size());
error=QString::fromLocal8Bit("Request Action05: %1 Delivery Order Don't Exist In m_FmOrdersMap[key-map] m_FmOrdersMap.size()=%2").arg(orderId).arg(m_FmOrdersMap.size());
return false;
}
//更新小票号;
if(!m_orderIdToPosCheckNoMap.contains(orderId))
{
QLOG_INFO()<<QString::fromLocal8Bit("[<<<<---Simphony_Script请求[ACTION:05: 更新POS本地数据库打印信息] %1订单已经成功推送给simphony:--->>>>]").arg(orderId);
m_orderIdToPosCheckNoMap.insert(orderId,posCheckNo);
} else {
if(OrderObject::Refunded==order_p->orderStatus){
if(posCheckNo != m_orderIdToPosCheckNoMap.value(order_p->id)){
m_orderIdToPosCheckNoMap.remove(order_p->id);
m_orderIdToPosCheckNoMap.insert(orderId,posCheckNo);
}
}
}
if(m_simValidOrdersList.contains(orderId))
{
/***** 更新 POS本地数据库的打印信息是否成功;begin:*********/
int retSyncOrderPrintInfo = 0; //默认是同步POS本地数据失败;
bool bRet = PrintSumBillPosDB::getInstance().isOrderAndCknoSumBillExist(orderId,posCheckNo);
if (bRet){
retSyncOrderPrintInfo = 1;
} /*****POS本地数据库不存在 orderId &&posCheckNo*********/
else{
bRet = PrintSumBillPosDB::getInstance().insertOrderSumBill(order_p,posCheckNo);
if (bRet){
retSyncOrderPrintInfo = 1;
}
} /***** 更新 POS本地数据库的打印信息是否成功;end:********/
/***** 解析 同步更新POS本地数据库是否成功:retSyncOrderPrintInfo:1->成功********/
if(retSyncOrderPrintInfo){
// 还没汇报完小票号,因此还不能从 m_simValidOrdersList 列表中移除;
QJsonObject rObj, cObj;
rObj.insert("fm_cmd", "");
rObj.insert("fm_ver", "1.0");
cObj.insert("pay_id", "002");
cObj.insert("pay_str", QString::fromLocal8Bit("FmTakeout"));
cObj.insert("reqResult",retSyncOrderPrintInfo); //同步POS本地数据库打印信息结果:[1:同步成功;0:同步失败]
cObj.insert("paid_trans_id",orderId);
rObj.insert("pay_id", cObj);
data = rObj;
} /***** 解析 同步更新POS本地数据库是否成功:retSyncOrderPrintInfo:0->失败*****/
else{
result=false;
error=QString::fromLocal8Bit("Request Action05:Sync POS Local DataBase-PrintInfo Failed");
}
} else {
m_OrderEntryMutex.lock();
m_simValidOrdersList.append(orderId);
m_OrderEntryMutex.unlock();
}
} else {
result=false;
error=QString::fromLocal8Bit("Request Action05: Delivery OrderId And Check Num Can't Empty");
}
} else {
result=false;
error=QString::fromLocal8Bit("Request Action05: Pragram Error");
}
return result;
Q_UNUSED(content);
Q_UNUSED(data);
Q_UNUSED(error);
return true;
}
......@@ -2037,199 +1843,10 @@ bool FlowControl::_ResponseSimphony05Request(const QJsonObject &content, QJsonOb
bool FlowControl::_ResponseSimphony06Request(const QJsonObject &content, QJsonObject &data, QString &error)
{
QLOG_INFO()<<__FUNCTION__;
bool result=true;
if(m_bLoginResult&&content.contains("orderId")){
QString orderId=content["orderId"].toString();
QString simExceptCode=content["simExceptCode"].toString();
QString simExceptMsg=content["simExceptMsg"].toString();
if(!simExceptCode.isEmpty()&&!orderId.isEmpty()) {
//*********** 新增一种优化case: 门店店员正在操作POS,从而阻塞插件程序录外卖订单,此时必须解锁悬浮框,从而减少Simphony队列中first出现OMS退单的请求; begin ***********//
//此时的订单号时固定给的620620 [action:6,simExceptCode=20]
if( 20 == simExceptCode.toInt() ){
error=QString::fromLocal8Bit("Request Action06: Partner is serving Offline Customer ");
QLOG_INFO()<<QString::fromLocal8Bit("[<<<<---_ResponseSimphony06Request::%1--->>>>>]").arg(error);
emit doUnLockFloatFrom(); //****************解锁悬浮框*****************//
if(m_bFloatFromLockSt){
m_bFloatFromLockSt = false; //更新悬浮框的锁定状态 =false;
}
//为了避免压测插件时,高频的加锁悬浮框 与 高频点击POS机; _ClickOMSAssignArea();
//由于上面出现了异常;不能也不需要及时点击POS机按钮触发下一次的录单事件
QJsonObject rObj, cObj;
rObj.insert("fm_cmd", "");
rObj.insert("fm_ver", "1.0");
cObj.insert("pay_id", "002");
cObj.insert("pay_str", QString::fromLocal8Bit("FmTakeout"));
cObj.insert("reqResult",1); //响应SIM汇报异常结果:[1:处理异常成功;0:处理异常失败]
cObj.insert("paid_trans_id",orderId);
rObj.insert("pay_id", cObj);
data = rObj;
//新增业务逻辑,针对汇报异常的订单需要;添加到 向OMS汇报入机情况的队列中;
if(!m_simValidOrdersList.empty()){
m_RepOMSRecordOrderMutex.lock();
RepOMSRecordOrderInfo* repOMSRecordOrder = nullptr;
if(!m_orderRecordRepOMSList.isEmpty()) {
QList<RepOMSRecordOrderInfo*>::iterator i;
for (i = m_orderRecordRepOMSList.begin(); i != m_orderRecordRepOMSList.end(); ++i) {
repOMSRecordOrder = (*i); //*i 使用*运算符获取遍历容器中所指的元素;
if (m_simValidOrdersList.first() == repOMSRecordOrder->orderNo) {
break;
} else {
repOMSRecordOrder = nullptr;
}
}
}
if (!repOMSRecordOrder){
repOMSRecordOrder = new RepOMSRecordOrderInfo();
repOMSRecordOrder->reqResult = 0;
} else {
if(simExceptMsg == repOMSRecordOrder->remark && 1==repOMSRecordOrder->reqResult){
m_orderRecordRepOMSList.removeOne(repOMSRecordOrder);
//repOMSRecordOrder->reqResult = 1; //此时reqResult已经是1了;
} else {
m_orderRecordRepOMSList.removeOne(repOMSRecordOrder);
repOMSRecordOrder->reqResult = 0;
}
}
repOMSRecordOrder->orderNo = m_simValidOrdersList.first();
OrderObject* order_temp = m_FmOrdersMap.value(repOMSRecordOrder->orderNo);
if (!order_temp){
QLOG_INFO()<<QString::fromLocal8Bit("[<<<<---%1订单并不存在m_FmOrdersMap[键值对]中;m_FmOrdersMap.size()=%2--->>>>]").arg(orderId).arg(m_FmOrdersMap.size());
repOMSRecordOrder->type = QString::fromLocal8Bit("0");
}else{
repOMSRecordOrder->type = order_temp->orderStatus==6?QString::fromLocal8Bit("6"):QString::fromLocal8Bit("3");
repOMSRecordOrder->channel = order_temp->channel;
}
repOMSRecordOrder->status = QString::fromLocal8Bit("2");
repOMSRecordOrder->opUser = m_cashierName;
repOMSRecordOrder->recordDate = QDateTime::currentDateTime().toString("yyyy-MM-dd hh:mm:ss");;
repOMSRecordOrder->storeId = m_storeId;
repOMSRecordOrder->remark = simExceptMsg;
//repOMSRecordOrder->checkNo = QString::fromLocal8Bit("0");
QLOG_INFO()<<QString::fromLocal8Bit("[<<<<---FlowControl::_ResponseSimphony06Request:m_orderRecordRepOMSList.append() orderId:%1 simExceptMsg:%2--->>>>]").arg(orderId).arg(simExceptMsg);
m_orderRecordRepOMSList.append(repOMSRecordOrder);
m_RepOMSRecordOrderMutex.unlock();
}
return true;
}
//*********** 新增一种优化case: 门店店员正在操作POS,从而阻塞插件程序录外卖订单,此时必须解锁悬浮框,从而减少Simphony队列中first出现OMS退单的请求; end ***********//
//**************** 根据订单编号找到 非码订单Map容器中订单的详细信息; begin ****************//
OrderObject* order_p = m_FmOrdersMap.value(orderId);
if (!order_p) {
QLOG_ERROR()<<QString::fromLocal8Bit("[<<<<---%1订单并不存在m_FmOrdersMap[键值对]中;m_FmOrdersMap.size()=%2--->>>>]").arg(orderId).arg(m_FmOrdersMap.size());
error=QString::fromLocal8Bit("Request Action06: %1 Delivery Order Don't Exist In m_FmOrdersMap[key-map]; m_FmOrdersMap.size()=%2").arg(orderId).arg(m_FmOrdersMap.size());
emit doUnLockFloatFrom();//****************解锁悬浮框*****************//
if(m_bFloatFromLockSt){
m_bFloatFromLockSt = false; //更新悬浮框的锁定状态 =false;
}
return false;
}
//**************** 根据订单编号找到 非码订单Map容器中订单的详细信息; end ****************//
// 判断SIM是否存在错误码: 0:会在汇报完小票号发送此错误码的请求给插件以便做一些特别事件: 解锁悬浮框;1:SIM录单出异常:转移订单tab至异常单、请求sim的有效订单列表、解锁悬浮框:
int retProcSimExceptCode =0;
// 特殊处理录单异常的详细case:
if(simExceptCode.toInt()) {
QLOG_INFO()<<QString::fromLocal8Bit("[<<<<---_ResponseSimphony06Request:: OrderId:%1,simExceptCode:%2 录单异常--->>>>>]").arg(orderId).arg(simExceptCode.toInt());
//异常错误码10的case:: 常见的正常业务场景下的异常 这些异常不应该阻塞订单的多次尝试录入,如果没有尝试多次录入的机会将会出现POS机少录订单不出小票的case:更多的详细请参考Simphony脚本中错误码为10情况,
if(10 == simExceptCode.toInt()){
error=QString::fromLocal8Bit("Request Action06 :simExceptCode==10: Catch Sim Refund Auth Exception And Report Success");
retProcSimExceptCode = 1;
result=true;
}
//异常错误码非10的case::
//simExceptCode ==5: POS录单过程中 同步本地数据库小票信息出现异常时触发多次录单的异常必须捕捉,此时必须解锁悬浮框;[action:6,simExceptCode=5]
//simExceptCode ==1: POS录单过程中 POS机中没有相应的SKU 的异常必须捕捉,此时必须解锁悬浮框;[action:6,simExceptCode=1]
else {
if(m_simValidOrdersList.contains(orderId)) {
m_OrderEntryMutex.lock();
m_simValidOrdersList.removeOne(orderId);
m_OrderEntryMutex.unlock();
int oldStatus = order_p->orderStatus;
if(6 == oldStatus || OrderObject::SimExceptRefund == order_p->orderStatus){
order_p->orderStatus = OrderObject::SimExceptRefund;
}else{
order_p->orderStatus = OrderObject::SimExceptSale;
}
emit changeOrderStatus(order_p,oldStatus);
error=QString::fromLocal8Bit("Request Action06: Catch Sim Recorded Order Exception And Report Success");
retProcSimExceptCode = 1;
result=true;
}
}
} else { //录单正常//
QLOG_INFO()<<QString::fromLocal8Bit("[<<<<---_ResponseSimphony06Request:: OrderId:%1 录单成功--->>>>>]").arg(orderId);
error=QString::fromLocal8Bit("Request Action06: Catch Sim Recorded Order Exception And Report Success");
retProcSimExceptCode = 1;
result=true;
}
//**************** 组装响应SIM录单异常响应********************//
QJsonObject rObj, cObj;
rObj.insert("fm_cmd", "");
rObj.insert("fm_ver", "1.0");
cObj.insert("pay_id", "002");
cObj.insert("pay_str", QString::fromLocal8Bit("FmTakeout"));
cObj.insert("reqResult",retProcSimExceptCode); //响应SIM汇报异常结果:[1:处理异常成功;0:处理异常失败]
cObj.insert("paid_trans_id",orderId);
rObj.insert("pay_id", cObj);
data = rObj;
//************* 新增业务逻辑,针对汇报异常的订单需要;添加到 向OMS汇报入机情况的队列中; Begin*************//
m_RepOMSRecordOrderMutex.lock();
RepOMSRecordOrderInfo* repOMSRecordOrder = nullptr;
if(!m_orderRecordRepOMSList.isEmpty()){
QList<RepOMSRecordOrderInfo*>::iterator i;
for (i = m_orderRecordRepOMSList.begin(); i != m_orderRecordRepOMSList.end(); ++i) {
repOMSRecordOrder = (*i); //*i 使用*运算符获取遍历容器中所指的元素;
if (orderId == repOMSRecordOrder->orderNo) {
break;
} else {
repOMSRecordOrder = nullptr;
}
}
}
if (!repOMSRecordOrder){
repOMSRecordOrder = new RepOMSRecordOrderInfo();
repOMSRecordOrder->reqResult = 0;
} else {
if(simExceptMsg == repOMSRecordOrder->remark && 1==repOMSRecordOrder->reqResult){
m_orderRecordRepOMSList.removeOne(repOMSRecordOrder);
//repOMSRecordOrder->reqResult=1; //此时reqResult已经是1了;
} else {
m_orderRecordRepOMSList.removeOne(repOMSRecordOrder);
repOMSRecordOrder->reqResult=0;
}
}
repOMSRecordOrder->orderNo = orderId;
repOMSRecordOrder->channel = order_p->channel;
repOMSRecordOrder->type = order_p->orderStatus==6?QString::fromLocal8Bit("6"):QString::fromLocal8Bit("3");
repOMSRecordOrder->status = QString::fromLocal8Bit("2");
repOMSRecordOrder->opUser = m_cashierName;
repOMSRecordOrder->recordDate = QDateTime::currentDateTime().toString("yyyy-MM-dd hh:mm:ss");;
repOMSRecordOrder->storeId = m_storeId;
repOMSRecordOrder->remark = simExceptMsg;
//repOMSRecordOrder->checkNo = QString::fromLocal8Bit("0");
QLOG_INFO()<<QString::fromLocal8Bit("[<<<<---FlowControl::_ResponseSimphony06Request:m_orderRecordRepOMSList.append() orderId:%1 simExceptMsg:%2--->>>>]").arg(orderId).arg(simExceptMsg);
m_orderRecordRepOMSList.append(repOMSRecordOrder);
m_RepOMSRecordOrderMutex.unlock();
//************* 新增业务逻辑,针对汇报异常的订单需要;添加到 向OMS汇报入机情况的队列中; end*************//
} else {
result=false;
error=QString::fromLocal8Bit("Request Action06: Delivery OrderId And Sim Exception ErrorCode Can't Empty");
}
} else {
result=false;
error=QString::fromLocal8Bit("Request Action06: Request Pragram Error");
}
//****************解锁悬浮框*****************//
emit doUnLockFloatFrom();
if(m_bFloatFromLockSt){
m_bFloatFromLockSt = false; //更新悬浮框的锁定状态 =false;
}
//为了避免压测插件时,高频的加锁悬浮框 与 高频点击POS机; _ClickOMSAssignArea();
//由于上面出现了异常;不能也不需要及时点击POS机按钮触发下一次的录单事件;
return result;
Q_UNUSED(content);
Q_UNUSED(data);
Q_UNUSED(error);
return true;
}
......
......@@ -114,7 +114,8 @@ private:
QTimer *m_loginTimer;
QTimer *m_remindCasherBlinkFloatTimer; //插件程序收到外卖订单后,需要一致提醒店员[直到此外卖订单被全部录入到POS系统]
QTimer *m_notifyPmsPullTimer;
QTimer *m_cyclePullAllOrderTimer; //由于定时器是为了周期性获取全部订单; 原因: PmsPlugin set StoreServiceCenter; aviod missing Orders;
//QTimer *m_cyclePullAllOrderTimer; //由于定时器是为了周期性获取全部订单; 原因: PmsPlugin set StoreServiceCenter; aviod missing Orders;
//已经通过心跳返回当天有效订单数据进行 漏单检查,故无需 周期性获取订单列表;
// 网络通信
BillSocket *m_loginSocket;
BillSocket *m_pullOrderSocket;
......
......@@ -7,8 +7,8 @@ IDI_ICON ICON DISCARDABLE "logo.ico"
#endif
VS_VERSION_INFO VERSIONINFO
//***每次修改后编译发版必须变更版本号(preDefine.h中APP_VERSION 需要一致)***//
FILEVERSION 4,2020,6,29
PRODUCTVERSION 4,2020,6,29
FILEVERSION 4,2020,6,30
PRODUCTVERSION 4,2020,6,30
//*************************************************************************//
FILEFLAGSMASK 0x3fL
#ifdef _DEBUG
......@@ -31,8 +31,8 @@ VS_VERSION_INFO VERSIONINFO
VALUE "OriginalFilename", "PmsPlugin.exe"
VALUE "ProductName", "PMS Plugin"
//***每次修改后编译发版必须变更版本号(preDefine.h中APP_VERSION 需要一致)***//
VALUE "ProductVersion", "4.2020.6.29"
VALUE "FileVersion", "4.2020.6.29"
VALUE "ProductVersion", "4.2020.6.30"
VALUE "FileVersion", "4.2020.6.30"
//*************************************************************************//
END
END
......
......@@ -10,7 +10,8 @@
//#define APP_VERSION "4.2020.423.1"
//#define APP_VERSION "4.2020.520.1"
//#define APP_VERSION "4.2020.526.1"
#define APP_VERSION "4.2020.6.29"
//#define APP_VERSION "4.2020.6.29"
#define APP_VERSION "4.2020.6.30"
//修正版本号时,切记修正 FmTakeout.rc 中的版本号
#define SERVER_PASSWORD "posoperator@freemud.cn"
......@@ -75,6 +76,7 @@
#define JSON_ERRCODE "code"
#define JSON_STATUS "status"
#define JSON_ORDERSTATUS "orderStatus"
#define JSON_ORDERCOUNT "orderCount"
#define JSON_REFUNDFMID "refundFmId"
#define JSON_STATUSDESC "status_desc"
#define JSON_MESSAGE "message"
......
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