Commit 6198a7d1 by wuyang.zou

fix bug: sku是短key 向OMS汇报;过滤培训模式;顾客立刻下单后被立即取消,没有录入退货单;

parent 13aaf03a
......@@ -1418,7 +1418,8 @@ void FlowControl::_ReportOMSRecordOrderInfo()
if(!RepOMSRecOrderIn){
QLOG_INFO()<<"[<<<<----FlowControl::_ReportOMSRecordOrderInfo m_orderRecordRepOMSList size: ---->>>>>]"<< m_orderRecordRepOMSList.size();
//上面的汇报OMS订单入机状态的汇报列表 遍历循环后:如果出现 RepOMSRecOrderIn == NULL;不能从List容器的头部移除已汇报成功结果【注意,必须是订单已经成功入机的订单,而非是入机失败,汇报OMS成功的订单】;
//上面的汇报OMS订单入机状态的汇报列表 遍历循环后:如果出现 RepOMSRecOrderIn == NULL;不能从List容器的头部移除已汇报成功结果
//【注意,必须是订单已经成功入机的订单,而非是入机失败,汇报OMS成功的订单】;
m_RepOMSRecordOrderMutex.unlock();
return ;
}
......@@ -1481,6 +1482,57 @@ void FlowControl::_ReportOMSRecordOrderInfo()
void FlowControl::_AddOrUpdateReportOmsList(const QString &orderId, const QString &channel, const QString &repType, const QString &status, const QString &error) {
bool repReportLockRet = m_RepOMSRecordOrderMutex.tryLock(2*1000);
if (repReportLockRet) {
RepOMSRecordOrderInfo* repOMSRecordOrder = NULL;
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 = NULL;
}
}
}
if (!repOMSRecordOrder){
repOMSRecordOrder = new RepOMSRecordOrderInfo();
repOMSRecordOrder->reqResult = 0;
} else {
if(error == 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 = channel;
repOMSRecordOrder->type = repType;
repOMSRecordOrder->status = status;
repOMSRecordOrder->opUser = m_cashierName;
repOMSRecordOrder->recordDate = QDateTime::currentDateTime().toString("yyyy-MM-dd hh:mm:ss");;
repOMSRecordOrder->storeId = m_storeId;
repOMSRecordOrder->remark = error;
QLOG_INFO()<<QString::fromLocal8Bit("[<<<<---FlowControl::_AddOrUpdateReportOmsList:m_orderRecordRepOMSList.append() orderId:%1 error:%2--->>>>]").arg(orderId).arg(error);
m_orderRecordRepOMSList.append(repOMSRecordOrder);
m_RepOMSRecordOrderMutex.unlock();
} else {
QLOG_INFO()<<QString::fromLocal8Bit("[<<<<---FlowControl::_AddOrUpdateReportOmsList: tryLock failed orderId:%1 error:%2 --->>>>]").arg(orderId).arg(error);
}
}
QString FlowControl::_GetJsonStr(const QJsonObject &json)
{
......@@ -2180,7 +2232,6 @@ bool FlowControl::_ResponseSimphony06Request(const QJsonObject &content, QJsonOb
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();
......@@ -2283,7 +2334,6 @@ bool FlowControl::_ResponseSimphony06Request(const QJsonObject &content, QJsonOb
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();
......@@ -2322,13 +2372,31 @@ bool FlowControl::_ResponseOMS11Request(const QJsonObject &content, QJsonObject
error =QString::fromLocal8Bit("订单号不能为空");
return false;
} else {
if(!m_simValidOrdersList.isEmpty()){
if ( !m_simValidOrdersList.isEmpty() ) {
QString simValidOrderListFirstOne = m_simValidOrdersList.first();
QString omsPushOrderId = content[JSON_ORDER_ID].toString();
//缩小锁住订单的条件范围: 服务端推单给插件程序且插件程序拒绝本次订单状态发生变化的请求
if(content[JSON_ORDER_ID].toString() == simValidOrderListFirstOne && m_bFloatFromLockSt){
if( omsPushOrderId == simValidOrderListFirstOne && m_bFloatFromLockSt){
error =QString::fromLocal8Bit("当前订单正在录POS系统,请耐心等待");
return false;
}
//新增条件筛选:当正在准备录入销售单的订单(m_bFloatFromLockSt=false);
//插件 同时接受到OMS 的取消操作; 此时需要将在排队录入的销售单 请求移除; 同时加强 录单请求 是否存在筛查;
int omsPushStatus = content[JSON_STATUS].toInt();
if ( omsPushOrderId == simValidOrderListFirstOne && omsPushStatus == OrderObject::Refunded ) {
OrderObject *orderObject = m_FmOrdersMap.value(simValidOrderListFirstOne);
if ( omsPushStatus != orderObject->orderStatus ) {
error =QString::fromLocal8Bit("已经取消了 订单(%1)向 POS 录入销售单的请求").arg(omsPushOrderId);
m_OrderEntryMutex.lock();
m_simValidOrdersList.removeOne(omsPushOrderId);
m_OrderEntryMutex.unlock();
return true;
}
}
}
}
......@@ -2529,6 +2597,12 @@ bool FlowControl::_ResponseSimReqFristOrderData(const QJsonObject &content, QJso
return true;
}
//检查Order Data Valid; 防止录入销售单时 接受到OMS推送取消订单请求且插件未锁屏时,列表录单请求被移除;
if( m_simValidOrdersList.isEmpty() ) {
error = QString::fromLocal8Bit("This Delivery Order:%1 Is Invalid, No Need Record POS System").arg(orderObject->id);
return true;
}
//录单时才触发隐藏 主窗口 + 锁定悬浮框;
if(!m_bFloatFromLockSt){
m_bFloatFromLockSt = true; //更新悬浮框的锁定状态=true;
......@@ -2551,7 +2625,7 @@ bool FlowControl::_ResponseSimReqFristOrderData(const QJsonObject &content, QJso
//星巴克的订单类型:1:新订单; 2:预订单; 3:客诉单; 4:MOP自测订单; 5:预约订单
if(3 == orderObject->getOrderType()) {
tempOrderType = 12;
tempOrderPayType = 21;
tempOrderPayType = -1;
}//MOP自测订单 在下方处理;星巴克-预约订单:在下方处理;
// OMS提供的数据://订单渠道: 星巴克-MOD,百度外卖,饿了么APP,美团外卖,星巴克-MOP;
// MOD渠道对应的业务逻辑 ;
......@@ -2835,16 +2909,27 @@ bool FlowControl::_ResponseSimReqFristOrderData(const QJsonObject &content, QJso
int starPromotionTempNo = 0;
//【①默认属性:code中含有Default字符串(不区分大小写)+ ②code中以非数字开头 + ③商品数量是0】 直接跳过;
QString tempCodeLeftHead = dish->code.left(1);
if (dish->code.contains("Default",Qt::CaseInsensitive) || (tempCodeLeftHead<QString('0')||tempCodeLeftHead>QString('9')) || !dish->qty ) {
if( tempCodeLeftHead<QString('0') || tempCodeLeftHead>QString('9') ) {
error = QString::fromLocal8Bit("This Order Has PosKey Is Combo Error");
if (dish->code.contains("Default",Qt::CaseInsensitive) || (tempCodeLeftHead<QString('0') || tempCodeLeftHead>QString('9'))
|| !dish->qty || dish->code.length()<3 ) {
//①code中以非数字开头直接退出本次录单
//②code中长度小于3位 直接退出本次录单; [ '34' , '16' ]
//③code 异常, 向oms 汇报异常;
if( tempCodeLeftHead<QString('0') || tempCodeLeftHead>QString('9') || !dish->qty || dish->code.length()<3 ) {
error = QString::fromLocal8Bit("This Order Has PosKey Is Combo Error Or Default* Or qty Is Zore Or Sku Length < 3");
m_OrderEntryMutex.lock();
m_simValidOrdersList.removeOne(orderObject->id);
m_OrderEntryMutex.unlock();
m_bFloatFromLockSt = false; //解锁悬浮框的锁定标志;
emit doUnLockFloatFrom(); //解锁悬浮框锁定
// 存储订单入机前异常信息并汇报OMS;
QString requestType = orderObject->orderStatus==6?QString::fromLocal8Bit("6"):QString::fromLocal8Bit("3");
_AddOrUpdateReportOmsList(orderObject->id, orderObject->channel,requestType, QString("2"), error);
return true;
}
continue;
}
/**********************************************************************************/
......@@ -2867,14 +2952,22 @@ bool FlowControl::_ResponseSimReqFristOrderData(const QJsonObject &content, QJso
//默认属性直接跳过;
if(!subDish->code.isEmpty() && !subDish->code.contains("Default",Qt::CaseInsensitive) && subDish->qty ) {
//①code中以非数字开头直接退出本次录单;
//②code中长度小于3位 直接退出本次录单; [ '34' , '16' ]
//③code 异常, 向oms 汇报异常;
QString tempSubCodeLeftHead = subDish->code.left(1);
if ( tempSubCodeLeftHead<QString('0') || tempSubCodeLeftHead>QString('9') ) {
error = QString::fromLocal8Bit("This Order SubProduct PosKey Is String And No Contains Default");
if ( tempSubCodeLeftHead<QString('0') || tempSubCodeLeftHead>QString('9') || subDish->code.length()<3 ) {
error = QString::fromLocal8Bit("This Order SubProduct PosKey Is String And No Contains Default Or Sku Length < 3 ");
m_OrderEntryMutex.lock();
m_simValidOrdersList.removeOne(orderObject->id);
m_OrderEntryMutex.unlock();
m_bFloatFromLockSt = false; //解锁悬浮框的锁定标志;
emit doUnLockFloatFrom(); //解锁悬浮框锁定
// 存储订单入机前异常信息并汇报OMS;
QString requestType = orderObject->orderStatus==6?QString::fromLocal8Bit("6"):QString::fromLocal8Bit("3");
_AddOrUpdateReportOmsList(orderObject->id, orderObject->channel,requestType, QString("2"), error);
return true;
}
sObj.insert("consume_num", subDish->qty);
......
......@@ -334,6 +334,14 @@ private slots:
* */
void _ReportOMSRecordOrderInfo();
/* 功能:往 向OMS汇报POS订单入机状态的队列 添加新项 或 更新队列中数据;
* 参数:NULL
* 返回:NULL
* */
void _AddOrUpdateReportOmsList(const QString &orderId, const QString &channel, const QString &repType, const QString &status, const QString &error);
/* 功能:获取Json对象的字符
* 参数:NULL
* 返回:Json字符串
......
......@@ -7,8 +7,8 @@ IDI_ICON ICON DISCARDABLE "logo.ico"
#endif
VS_VERSION_INFO VERSIONINFO
//***每次修改后编译发版必须变更版本号(preDefine.h中APP_VERSION 需要一致)***//
FILEVERSION 2,2020,312,1
PRODUCTVERSION 2,2020,312,1
FILEVERSION 2,2020,4,13
PRODUCTVERSION 2,2020,4,13
//*************************************************************************//
FILEFLAGSMASK 0x3fL
#ifdef _DEBUG
......@@ -31,8 +31,8 @@ VS_VERSION_INFO VERSIONINFO
VALUE "OriginalFilename", "fmTakeout.exe"
VALUE "ProductName", "Delivery Order Plugin"
//***每次修改后编译发版必须变更版本号(preDefine.h中APP_VERSION 需要一致)***//
VALUE "ProductVersion", "2.2020.312.1"
VALUE "FileVersion", "2.2020.312.1"
VALUE "ProductVersion", "2.2020.4.13"
VALUE "FileVersion", "2.2020.4.13"
//*************************************************************************//
END
END
......
......@@ -25,7 +25,8 @@
//#define APP_VERSION "2.2019.815.1"
//#define APP_VERSION "2.2019.916.2"
//#define APP_VERSION "2.2020.26.1"
#define APP_VERSION "2.2020.312.1"
//#define APP_VERSION "2.2020.312.1"
#define APP_VERSION "2.2020.4.13"
//修正版本号时,切记修正 FmTakeout.rc 中的版本号
......
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