Commit 64b5e5f3 by wuyang.zou

fix bug: 新增 MSR_NO 卡号信息 + 新增 同步POS本地数据库打印信息是否成功

parent d1e25051
......@@ -45,7 +45,7 @@ FlowControl::FlowControl()
connect(m_loginTimer,&QTimer::timeout,this,&FlowControl::_ClickToLogin);
connect(m_pullTimer,&QTimer::timeout,this,&FlowControl::_PullOrder);
connect(m_clearTimer,&QTimer::timeout,this,&FlowControl::_ClearOrder);
connect(m_clearTimer,&QTimer::timeout,this,&FlowControl::_CrondClearExpireOrder);
connect(m_heartTimer,&QTimer::timeout,this,&FlowControl::_SendHeart);
connect(this,&FlowControl::doPullOrder,this,&FlowControl::_GetOrder);
connect(this,&FlowControl::doConfirmOrder,this,&FlowControl::_ConfirmOrder,Qt::BlockingQueuedConnection);
......@@ -80,17 +80,17 @@ FlowControl::FlowControl()
}
/***解析Simphony_Script Request json格式: 解析成功***/
else {
/***?????***/
if(_GetReplyJson(recvObject,data, msg))
/***解析:FM外卖插件为响应Simphony请求准备返回数据:准备返回数据成功***/
if(_ResponseSimphonyRequest(recvObject,data, msg))
{
status = 100;
}
/***?????***/
/***解析:FM外卖插件为响应Simphony请求准备返回数据:准备返回数据失败***/
else{
status = 0;
}
/***?????***/
if(!m_ordersEntryList.isEmpty())
/***解析:等待Simphony获取的有效订单列表是否为空: sim有效订单列表不为空***/
if(!m_simValidOrdersList.isEmpty())
{
iscontinue=1;
}
......@@ -174,7 +174,7 @@ void FlowControl::_ClickOMSAssignArea()
void FlowControl::_ClickToLogin()
{
if(!m_bLoginResult||!m_ordersEntryList.isEmpty())
if(!m_bLoginResult||!m_simValidOrdersList.isEmpty())
{
QLOG_INFO()<<QString::fromLocal8Bit("[<<<<---触发按钮点击事件:FM外卖插件20s后再次尝试登陆--->>>>]");
_ClickOMSAssignArea();
......@@ -184,8 +184,8 @@ void FlowControl::_ClickToLogin()
void FlowControl::_OrderAnalysis(const QJsonObject& jsonObject)
{
OrderObject *orderObject = NULL;
orderObject = m_simValidOrderMapQueue.value(jsonObject[JSON_ID].toString());
/***<1>:待Simphony拉取的有效订单队列中不存在此订单:整合数据并插入到此订单队列中 ***/
orderObject = m_FmOrdersMap.value(jsonObject[JSON_ID].toString());
/***<1>:FM插件维护的有效订单容器中不存在此订单:整合数据并插入到此订单容器中 ***/
if(orderObject == NULL)
{
orderObject = new OrderObject(this);
......@@ -193,8 +193,8 @@ void FlowControl::_OrderAnalysis(const QJsonObject& jsonObject)
orderObject->isPush = false;
orderObject->isCancle = false;
m_simValidOrderMapQueue.insert(orderObject->id, orderObject);
QLOG_INFO() << QString("[<<<<---Simphony Valid Order MapQueue:Insert New Order[%1:%2]--->>>>][data:]")
m_FmOrdersMap.insert(orderObject->id, orderObject);
QLOG_INFO() << QString("[<<<<---FmTakeout Valid Orders Map:Insert New Order[%1:%2]--->>>>][data:]")
.arg(orderObject->id,orderObject->getOrderStatusDec())<<jsonObject;
if(!SimProcOrderDB::getInstance().isOrderExit(orderObject->id))
{
......@@ -206,12 +206,12 @@ void FlowControl::_OrderAnalysis(const QJsonObject& jsonObject)
}
emit changeOrderStatus(orderObject);
}
/***<2>:待Simphony拉取的有效订单队列中存在此订单:更新订单队列中此订单的订单状态***/
/***<2>:FM插件维护的有效订单容器中存在此订单:更新订单容器中此订单的订单状态***/
else
{
int oldStatus = orderObject->orderStatus;
orderObject->FromJson(jsonObject);
QLOG_INFO() << QString("[<<<<---Simphony Valid Order MapQueue:Update OldOrder Status[%1:%2]--->>>>].[data:%3]")
QLOG_INFO() << QString("[<<<<---FmTakeout Valid Order Map:Update OldOrder Status[%1:%2]--->>>>].[data:%3]")
.arg(orderObject->id,orderObject->getOrderStatusDec())<<jsonObject;
if(oldStatus != orderObject->orderStatus)
{
......@@ -232,7 +232,7 @@ void FlowControl::_OrderAnalysis(const QJsonObject& jsonObject)
{
orderObject->isCancle = true;
}
QString posOrderCheckNo=m_orderIdToPosSalesIdMap.value(orderObject->id);
QString posOrderCheckNo=m_orderIdToPosCheckNoMap.value(orderObject->id);
if(posOrderCheckNo.isEmpty())
{
SimProcOrderDB::getInstance().getPosOrderCheckNo(orderObject->id,posOrderCheckNo);
......@@ -248,12 +248,12 @@ void FlowControl::_OrderAnalysis(const QJsonObject& jsonObject)
/***case:新订单、确认订单、已配送订单、待配送订单、完成订单、请求退单: 订单还没push到POS[POS没有模拟点单或没有返回小票号]***/
if(!orderObject->isPush)
{
orderObject->putType = 1;
orderObject->putTimes = 0;
orderObject->pushOrderType = 1;
orderObject->pushOrderTimes = 0;
m_OrderEntryMutex.lock();
if(!m_ordersEntryList.contains(orderObject->id))
if(!m_simValidOrdersList.contains(orderObject->id))
{
m_ordersEntryList.append(orderObject->id);
m_simValidOrdersList.append(orderObject->id);
}
m_OrderEntryMutex.unlock();
_ClickOMSAssignArea();
......@@ -269,7 +269,7 @@ void FlowControl::_OrderAnalysis(const QJsonObject& jsonObject)
if(!orderObject->isPush)
{
m_OrderEntryMutex.lock();
m_ordersEntryList.removeOne(orderObject->id);
m_simValidOrdersList.removeOne(orderObject->id);
m_OrderEntryMutex.unlock();
}
/***case:校验此订单是否已经push到POS:订单已经push到POS***/
......@@ -277,12 +277,12 @@ void FlowControl::_OrderAnalysis(const QJsonObject& jsonObject)
/***case:校验此订单push到POS后的小票号是否空:[POS已模拟点单且返回小票号]***/
if(!posOrderCheckNo.isEmpty())
{
orderObject->putType = 0;
orderObject->putTimes = 0;
orderObject->pushOrderType = 0;
orderObject->pushOrderTimes = 0;
m_OrderEntryMutex.lock();
if(!m_ordersEntryList.contains(orderObject->id))
if(!m_simValidOrdersList.contains(orderObject->id))
{
m_ordersEntryList.append(orderObject->id);
m_simValidOrdersList.append(orderObject->id);
}
_ClickOMSAssignArea();
m_OrderEntryMutex.unlock();
......@@ -586,7 +586,7 @@ bool FlowControl::_ConfirmOrder(const QString &orderId)
if(1==status)
{
int orderStatus = data[JSON_ORDERSTATUS].toInt();
OrderObject* orderObject = m_simValidOrderMapQueue.value(orderId);
OrderObject* orderObject = m_FmOrdersMap.value(orderId);
int oldOrderStatus = orderObject->orderStatus;
orderObject->orderStatus = orderStatus;
emit changeOrderStatus(orderObject, oldOrderStatus);
......@@ -627,7 +627,7 @@ bool FlowControl::_RefuseOrder(const QString &orderId, int refuseCode,const QStr
{
emit showAlert(AlertForm::SUCCESS, QString::fromLocal8Bit("拒单成功!"));
// 通知主界面移动订单
OrderObject *orderObject = m_simValidOrderMapQueue.value(orderId);
OrderObject *orderObject = m_FmOrdersMap.value(orderId);
int oldStatus = orderObject->orderStatus;
orderObject->orderStatus = recvJson[JSON_STATUS].toInt();
emit changeOrderStatus(orderObject, oldStatus);
......@@ -640,7 +640,7 @@ bool FlowControl::_RefuseOrder(const QString &orderId, int refuseCode,const QStr
bool FlowControl::_SendOrder(const QString& orderId)
{
//TODO
// if(m_simValidOrderMapQueue.value(orderId)->riderName.isEmpty()&&m_simValidOrderMapQueue.value(orderId)->delivery_type==1)
// if(m_FmOrdersMap.value(orderId)->riderName.isEmpty()&&m_FmOrdersMap.value(orderId)->delivery_type==1)
// {
// emit showAlert(AlertForm::MSGERROR,QString::fromLocal8Bit("配送员暂未接单,请等待"));
// return true;
......@@ -671,7 +671,7 @@ bool FlowControl::_SendOrder(const QString& orderId)
emit showAlert(AlertForm::SUCCESS, QString::fromLocal8Bit("送出成功!"));
// 通知主界面移动订单
OrderObject *orderObject = m_simValidOrderMapQueue.value(orderId);
OrderObject *orderObject = m_FmOrdersMap.value(orderId);
int oldStatus = orderObject->orderStatus;
orderObject->orderStatus = recvJson[JSON_STATUS].toInt();
// TODO 服务器端现还未开发
......@@ -711,7 +711,7 @@ bool FlowControl::_CompleteOrder(const QString& orderId)
emit showAlert(AlertForm::SUCCESS, QString::fromLocal8Bit("完成成功!"));
// 通知主界面移动订单
OrderObject *orderObject = m_simValidOrderMapQueue.value(orderId);
OrderObject *orderObject = m_FmOrdersMap.value(orderId);
int oldStatus = orderObject->orderStatus;
orderObject->orderStatus = recvJson[JSON_STATUS].toInt();
emit changeOrderStatus(orderObject, oldStatus);
......@@ -750,7 +750,7 @@ bool FlowControl::_RefuseRefund(const QString& orderId)
emit showAlert(AlertForm::SUCCESS, QString::fromLocal8Bit("拒绝退单成功!"));
// 通知主界面移动订单
OrderObject *orderObject = m_simValidOrderMapQueue.value(orderId);
OrderObject *orderObject = m_FmOrdersMap.value(orderId);
int oldStatus = orderObject->orderStatus;
orderObject->orderStatus = recvJson[JSON_STATUS].toInt();
// TODO 服务器端现还未开发
......@@ -769,7 +769,7 @@ bool FlowControl::_RefundOrder(const QString &orderId,int reasonCode,const QStri
QJsonObject sendJson;
QJsonObject recvJson;
sendJson = DataManger::GetInstance().GetRefundOrderData(reasonCode,reason,orderId,m_simValidOrderMapQueue.value(orderId)->channel);
sendJson = DataManger::GetInstance().GetRefundOrderData(reasonCode,reason,orderId,m_FmOrdersMap.value(orderId)->channel);
emit showAlert(AlertForm::LOADING, QString::fromLocal8Bit("正在通信......"));
......@@ -803,7 +803,7 @@ bool FlowControl::_RefundOrder(const QString &orderId,int reasonCode,const QStri
if(1==status)
{
int orderStatus = data[JSON_ORDERSTATUS].toInt();
OrderObject* orderObject = m_simValidOrderMapQueue.value(orderId);
OrderObject* orderObject = m_FmOrdersMap.value(orderId);
int oldOrderStatus = orderObject->orderStatus;
orderObject->orderStatus = orderStatus;
emit changeOrderStatus(orderObject, oldOrderStatus);
......@@ -829,9 +829,7 @@ QJsonObject FlowControl::_PackHttpReplyJson(const int status, const QString &msg
rObj.insert("statusCode", status);
rObj.insert("msg", msg);
rObj.insert("iscontinue",iscontinue);
//if(!data.isEmpty()){
rObj.insert("data", data);
//}
rObj.insert("data", data);
return rObj;
}
......@@ -1052,37 +1050,38 @@ void FlowControl::onDailyReport()
}
}
void FlowControl::_ClearOrder()
void FlowControl::_CrondClearExpireOrder()
{
QDateTime currentDateTime= QDateTime::currentDateTime();
OrderObject *order=NULL;
m_OrderEntryMutex.lock();
foreach (order, m_simValidOrderMapQueue.values()) {
foreach (order, m_FmOrdersMap.values()) {
QDateTime createDateTime=QDateTime::fromTime_t(order->updateTime);
qint64 days=createDateTime.daysTo(currentDateTime);
if(days>=2)
{
QLOG_INFO()<<QString("[<<<<---ClearOrder: orderID:%1--->>>>]").arg(order->id);
QLOG_INFO()<<QString("[<<<<---Crond Clear Expire Order: orderID:%1--->>>>]").arg(order->id);
emit clearorder(order->id,order->orderStatus);
m_simValidOrderMapQueue.value(order->id)->deleteLater();
m_ordersEntryList.removeOne(order->id);
delete m_simValidOrderMapQueue.take(order->id);
m_FmOrdersMap.value(order->id)->deleteLater();
m_simValidOrdersList.removeOne(order->id);
delete m_FmOrdersMap.take(order->id);
}
}
m_OrderEntryMutex.unlock();
SimProcOrderDB::getInstance().deleteOrderRecord(QDate::currentDate().addMonths(-1).toString("yyyyMMdd"));
}
bool FlowControl::_GetReplyJson(const QJsonObject &content,QJsonObject &data, QString& error)
bool FlowControl::_ResponseSimphonyRequest(const QJsonObject &content,QJsonObject &data, QString& error)
{
QLOG_INFO()<<__FUNCTION__;
bool result = true;
/****校验Simphony_Script请求参数有效性: 校验参数->actionId不存在****/
if(!content.contains("actionId"))
{
error =QString::fromLocal8Bit("未知的请求");
error =QString::fromLocal8Bit("解析Simphony_Script请求参数:参数中没有actionId");
result = false;
}
/****校验Simphony_Script请求参数有效性: 校验参数->actionId存在****/
else{
int actionId;
if(content["actionId"].isString())
......@@ -1092,27 +1091,31 @@ bool FlowControl::_GetReplyJson(const QJsonObject &content,QJsonObject &data, QS
else{
actionId=content["actionId"].toInt();
}
/****校验请求参数actionId的具体数值:****/
switch (actionId) {
case 1://simphony拉取订单
result=_Get01ReplyJson(content,data,error);
result=_ResponseSimphony01Request(content,data,error);
break;
case 2://simphony确认接单
result=_Get02ReplyJson(content,data,error);
result=_ResponseSimphony02Request(content,data,error);
break;
case 3://simphony取消接单
result=_Get03ReplyJson(content,data,error);
result=_ResponseSimphony03Request(content,data,error);
break;
case 4://simphony汇报小票号信息回复
result=_ResponseSimphony04Request(content,data,error);
break;
case 4://simphony消息回复
result=_Get04ReplyJson(content,data,error);
case 5://simphony更新订单数据到POS本地数据库以便POS打印小票及汇总单信息 回复
result=_ResponseSimphony05Request(content,data,error);
break;
case 11://推送订单
result=_Get11ReplyJson(content,data,error);
result=_ResponseSimphony11Request(content,data,error);
break;
case 12://推送门店营业状态
result=_Get12ReplyJson(content,data,error);
result=_ResponseSimphony12Request(content,data,error);
break;
default:
error =QString::fromLocal8Bit("未知的请求");
error =QString::fromLocal8Bit("解析Simphony_Script请求actionId值不在规定的接口文档内");
result = false;
break;
}
......@@ -1120,27 +1123,27 @@ bool FlowControl::_GetReplyJson(const QJsonObject &content,QJsonObject &data, QS
return result;
}
bool FlowControl::_Get01ReplyJson(const QJsonObject &content, QJsonObject &data, QString &error)
bool FlowControl::_ResponseSimphony01Request(const QJsonObject &content, QJsonObject &data, QString &error)
{
QLOG_INFO()<<__FUNCTION__;
bool result=true;
if(!m_bLoginResult&&content.contains("storeId"))
{
result=_GetLoginReplyJson(content,error);
result=_ResponseSimReqTryLogin(content,error);
}
if(result/*&&content.contains("orderId")*/){
result=_GetQueryReplyJson(data,error,content["orderId"].toString());
result=_ResponseSimReqFristOrderData(data,error,content["orderId"].toString());
}
else{
result = false;
if(error.isEmpty())
{
error=QString::fromLocal8Bit("请求参数错误");
error=QString::fromLocal8Bit("准备响应Simphony_Script请求前登陆门店失败");
}
}
return result;
}
bool FlowControl::_Get02ReplyJson(const QJsonObject &content, QJsonObject &data, QString &error)
bool FlowControl::_ResponseSimphony02Request(const QJsonObject &content, QJsonObject &data, QString &error)
{
return true;
//TODO
......@@ -1148,7 +1151,7 @@ bool FlowControl::_Get02ReplyJson(const QJsonObject &content, QJsonObject &data,
bool result = true;
if(m_bLoginResult&&content.contains("orderId")){
QString orderId=content["orderId"].toString();
if(m_simValidOrderMapQueue.contains(orderId))
if(m_FmOrdersMap.contains(orderId))
{
emit doStartOperateTimer();
emit doConfirmOrder(orderId);
......@@ -1176,7 +1179,7 @@ bool FlowControl::_Get02ReplyJson(const QJsonObject &content, QJsonObject &data,
}
return result;*/
}
bool FlowControl::_Get03ReplyJson(const QJsonObject &content, QJsonObject &data, QString &error)
bool FlowControl::_ResponseSimphony03Request(const QJsonObject &content, QJsonObject &data, QString &error)
{
return true;
//TODO
......@@ -1184,7 +1187,7 @@ bool FlowControl::_Get03ReplyJson(const QJsonObject &content, QJsonObject &data,
bool result = true;
if(m_bLoginResult&&content.contains("orderId")){
QString orderId=content["orderId"].toString();
if(m_simValidOrderMapQueue.contains(orderId))
if(m_FmOrdersMap.contains(orderId))
{
emit doStartOperateTimer();
emit doRefundOrder(orderId,-1,QString::fromLocal8Bit("同意退款"));
......@@ -1214,59 +1217,157 @@ bool FlowControl::_Get03ReplyJson(const QJsonObject &content, QJsonObject &data,
}
return result;*/
}
bool FlowControl::_Get04ReplyJson(const QJsonObject &content, QJsonObject &data, QString &error)
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 posSaleId=content["posSaleId"].toString();
if(posSaleId.isEmpty())
QString posCheckNo=content["posSaleId"].toString();
if(posCheckNo.isEmpty())
{
posSaleId=m_orderIdToPosSalesIdMap.value(orderId);
posCheckNo=m_orderIdToPosCheckNoMap.value(orderId);
}
if(!posSaleId.isEmpty()&&!orderId.isEmpty())
if(!posCheckNo.isEmpty()&&!orderId.isEmpty())
{
if(!m_orderIdToPosSalesIdMap.contains(orderId))
if(!m_orderIdToPosCheckNoMap.contains(orderId))
{
QLOG_INFO()<<QString::fromLocal8Bit("%1订单已经成功推送给simphony").arg(orderId);
m_orderIdToPosSalesIdMap.insert(orderId,posSaleId);
QLOG_INFO()<<QString::fromLocal8Bit("[<<<<---Simphony_Script请求[04:返回小票号] %1订单已经成功推送给simphony:--->>>>]").arg(orderId);
m_orderIdToPosCheckNoMap.insert(orderId,posCheckNo);
}
OrderObject* order_p = m_simValidOrderMapQueue.value(orderId);
OrderObject* order_p = m_FmOrdersMap.value(orderId);
if (!order_p){
QLOG_ERROR()<<QString::fromLocal8Bit("%1订单并不存在m_orderMap[键值对]中;m_simValidOrderMapQueue.size()=%2").arg(orderId).arg(m_simValidOrderMapQueue.size());
QLOG_ERROR()<<QString::fromLocal8Bit("[<<<<---%1订单并不存在m_FmOrdersMap[键值对]中;m_FmOrdersMap.size()=%2--->>>>]").arg(orderId).arg(m_FmOrdersMap.size());
result=false;
error=QString::fromLocal8Bit("%1订单并不存在m_orderMap[键值对]中;m_simValidOrderMapQueue.size()=%2").arg(orderId).arg(m_simValidOrderMapQueue.size());
error=QString::fromLocal8Bit("%1订单并不存在m_FmOrdersMap[键值对]中;m_FmOrdersMap.size()=%2").arg(orderId).arg(m_FmOrdersMap.size());
return result;
}
if(m_ordersEntryList.contains(orderId))
if(m_simValidOrdersList.contains(orderId))
{
if(order_p->putType==1)
if(order_p->pushOrderType==1)
{
SimProcOrderDB::getInstance().updatePushOrderStatus(orderId,1);
SimProcOrderDB::getInstance().updatePosOrderCheckNo(orderId,posSaleId);
SimProcOrderDB::getInstance().updatePosOrderCheckNo(orderId,posCheckNo);
}
else
{
SimProcOrderDB::getInstance().updateRefundOrderStatus(orderId,1);
}
m_OrderEntryMutex.lock();
m_ordersEntryList.removeOne(orderId);
m_simValidOrdersList.removeOne(orderId);
m_OrderEntryMutex.unlock();
}
else{
order_p->isCancle = false;
order_p->isPush = true;
order_p->putType = 0;
order_p->putTimes=0;
order_p->pushOrderType = 0;
order_p->pushOrderTimes=0;
m_OrderEntryMutex.lock();
if(!m_simValidOrdersList.contains(orderId))
{
m_simValidOrdersList.append(orderId);
}
m_OrderEntryMutex.unlock();
}
}
else{
result=false;
error=QString::fromLocal8Bit("订单号或者短号不能为空");
}
}
else{
result=false;
error=QString::fromLocal8Bit("请求参数错误");
}
return result;
}
bool FlowControl::_ResponseSimphony05Request(const QJsonObject &content, QJsonObject &data, QString &error)
{
// 从 _ResponseSimphony04Request 函数拷贝过来;未做任何改动;【后期将用05代替04的业务】
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请求[05:返回小票号,同时更新POS本地数据库打印] %1订单已经成功推送给simphony:--->>>>]").arg(orderId);
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());
result=false;
error=QString::fromLocal8Bit("%1订单并不存在m_FmOrdersMap[键值对]中;m_FmOrdersMap.size()=%2").arg(orderId).arg(m_FmOrdersMap.size());
return result;
}
if(m_simValidOrdersList.contains(orderId))
{
/**** action:04:功能:目前先不使用;
if(order_p->pushOrderType==1)
{
SimProcOrderDB::getInstance().updatePushOrderStatus(orderId,1);
SimProcOrderDB::getInstance().updatePosOrderCheckNo(orderId,posCheckNo);
}
else
{
SimProcOrderDB::getInstance().updateRefundOrderStatus(orderId,1);
}
****/
/***** 更新 POS本地数据库的打印信息是否成功;begin:*********/
int retSyncOrderPrintInfo = 1;
// int retSyncOrderPrintInfo = 0;
/***** 更新 POS本地数据库的打印信息是否成功;end:********/
/***** 解析 同步更新POS本地数据库是否成功:retSyncOrderPrintInfo:1->成功********/
if(retSyncOrderPrintInfo){
//m_OrderEntryMutex.lock();
//m_simValidOrdersList.removeOne(orderId);
//m_OrderEntryMutex.unlock();
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("retSyncOrderPrintInfo",retSyncOrderPrintInfo); //同步POS本地数据库打印信息结果:[1:同步成功;0:同步失败]
cObj.insert("paid_trans_id",orderId);
cObj.insert("pos_sale_id", posCheckNo);
cObj.insert("products_fee", order_p->productPrice); // 商品金额
cObj.insert("discount_fee", 0); // 优惠总额
cObj.insert("msr_card_no", (order_p->msr_no.length()==0)?order_p->customerId:order_p->msr_no); // MSR卡号
rObj.insert("pay_id", cObj);
data = rObj;
}
/***** 解析 同步更新POS本地数据库是否成功:retSyncOrderPrintInfo:0->失败*****/
else{
result=false;
error=QString::fromLocal8Bit("POS本地数据库的打印信息操作失败");
}
}
else{
/**** action:04:功能:目前先不使用;
order_p->isCancle = false;
order_p->isPush = true;
order_p->pushOrderType = 0;
order_p->pushOrderTimes=0;
****/
m_OrderEntryMutex.lock();
if(!m_ordersEntryList.contains(orderId))
if(!m_simValidOrdersList.contains(orderId))
{
m_ordersEntryList.append(orderId);
m_simValidOrdersList.append(orderId);
}
m_OrderEntryMutex.unlock();
}
......@@ -1282,12 +1383,14 @@ bool FlowControl::_Get04ReplyJson(const QJsonObject &content, QJsonObject &data,
}
return result;
}
bool FlowControl::_Get11ReplyJson(const QJsonObject &content, QJsonObject &data, QString &error)
bool FlowControl::_ResponseSimphony11Request(const QJsonObject &content, QJsonObject &data, QString &error)
{
QLOG_INFO()<<__FUNCTION__;
bool result=true;
if(!m_bLoginResult){
error = QString("FMOMS未登录");
error = QString::fromLocal8Bit("FMOMS未登录");
return false;
}
else{
......@@ -1302,7 +1405,7 @@ bool FlowControl::_Get11ReplyJson(const QJsonObject &content, QJsonObject &data,
}
return result;
}
bool FlowControl::_Get12ReplyJson(const QJsonObject &content, QJsonObject &data, QString &error)
bool FlowControl::_ResponseSimphony12Request(const QJsonObject &content, QJsonObject &data, QString &error)
{
if(!content["storeId"].toString().compare(m_storeId))
{
......@@ -1317,7 +1420,7 @@ bool FlowControl::_Get12ReplyJson(const QJsonObject &content, QJsonObject &data,
return false;
}
bool FlowControl::_GetLoginReplyJson(const QJsonObject &content,QString &error)
bool FlowControl::_ResponseSimReqTryLogin(const QJsonObject &content,QString &error)
{
QLOG_INFO()<<__FUNCTION__;
m_storeId=content["storeId"].toString();
......@@ -1331,7 +1434,7 @@ bool FlowControl::_GetLoginReplyJson(const QJsonObject &content,QString &error)
return true;
}
bool FlowControl::_GetQueryReplyJson(QJsonObject &data, QString &error, const QString &orderId)
bool FlowControl::_ResponseSimReqFristOrderData(QJsonObject &data, QString &error, const QString &orderId)
{
QLOG_INFO()<<__FUNCTION__<<error<<orderId;
bool result=true;
......@@ -1340,7 +1443,7 @@ bool FlowControl::_GetQueryReplyJson(QJsonObject &data, QString &error, const QS
error = QString::fromLocal8Bit("FMOMS 未登录");
return false;
}
if(m_ordersEntryList.isEmpty())
if(m_simValidOrdersList.isEmpty())
{
error = QString::fromLocal8Bit("没有新订单待拉取");
result = true;
......@@ -1348,24 +1451,24 @@ bool FlowControl::_GetQueryReplyJson(QJsonObject &data, QString &error, const QS
else
{
error.clear();
QString orderId=m_ordersEntryList.first();
QString orderId=m_simValidOrdersList.first();
int pullNum=MAXPUTTIMES;
foreach (auto value, m_ordersEntryList) {
int num = m_simValidOrderMapQueue.value(value)->putTimes;
foreach (auto value, m_simValidOrdersList) {
int num = m_FmOrdersMap.value(value)->pushOrderTimes;
if(pullNum>num)
{
pullNum=num;
orderId=value;
}
}
OrderObject* orderObject = m_simValidOrderMapQueue.value(orderId);
if(MAXPUTTIMES==orderObject->putTimes)
OrderObject* orderObject = m_FmOrdersMap.value(orderId);
if(MAXPUTTIMES==orderObject->pushOrderTimes)
{
orderObject->putTimes = 0;
orderObject->pushOrderTimes = 0;
}
orderObject->putTimes=orderObject->putTimes+1;
orderObject->pushOrderTimes=orderObject->pushOrderTimes+1;
QJsonObject rObj, cObj;
if(orderObject->putType==1)
if(orderObject->pushOrderType==1)
{
rObj.insert("fm_cmd", "put_order");
}
......@@ -1393,6 +1496,8 @@ bool FlowControl::_GetQueryReplyJson(QJsonObject &data, QString &error, const QS
cObj.insert("service_fee", /*orderObject->service_fee*/0); // 平台佣金
cObj.insert("discount_fee", /*orderObject->discount_fee*/0); // 优惠总额
cObj.insert("dis_shop_fee", /*orderObject->dis_shop_fee*/0); // 商家承担优惠金额
cObj.insert("msr_card_no", (orderObject->msr_no.length()==0)?orderObject->customerId:orderObject->msr_no); // MSR卡号
cObj.insert("retSyncOrderPrintInfo",0); // 同步POS本地数据库打印信息结果:[1:同步成功;0:同步失败; 默认:0]
cObj.insert("dis_platform_fee", /*orderObject->dis_platform_fee*/0); // 平台承担优惠金额
cObj.insert("send_fee", orderObject->deliveryPrice); // 配送费
cObj.insert("shop_fee", /*orderObject->total_fee-orderObject->send_fee-orderObject->service_fee-orderObject->dis_shop_fee*/0); // 商户能够拿到的钱(去除平台佣金)
......@@ -1526,7 +1631,7 @@ void FlowControl::onProcessOrder(const QString &operation, const QString &orderI
void FlowControl::onGetOrderDetails(const QString& orderId)
{
emit hideAlert();
emit showOrderDetails(m_simValidOrderMapQueue.value(orderId));
emit showOrderDetails(m_FmOrdersMap.value(orderId));
}
void FlowControl::onSerachOrder(const QString &text)
......@@ -1536,7 +1641,7 @@ void FlowControl::onSerachOrder(const QString &text)
{
QMap<QString, OrderObject*>::iterator order;
for(order = m_simValidOrderMapQueue.begin(); order!=m_simValidOrderMapQueue.end(); order++)
for(order = m_FmOrdersMap.begin(); order!=m_FmOrdersMap.end(); order++)
{
QString orderId = order.key();
QString phoneId = order.value()->phone;
......
......@@ -66,8 +66,8 @@ private:
BillSocket *m_pullOrderListSocket;
BillSocket *m_procOrderSocket;
BillSocket *m_pullDishesSocket;
// 为Simphony在FM外卖插件中维护<有效待拉取订单>的容器
QMap<QString, OrderObject*> m_simValidOrderMapQueue;
// FM外卖插件维护的有效订单容器
QMap<QString, OrderObject*> m_FmOrdersMap;
// 是否第一次获取到门店信息
bool m_bFirstRecvInfo;
bool m_bLoginResult;
......@@ -76,10 +76,10 @@ private:
JQHttpServer::TcpServerManage* m_tcpServerManage;
QMap<QString, QMultiMap<QString, dishesObject> >m_dishesMap;
// 入账list
QStringList m_ordersEntryList;
//等待Simphony拉取的有效订单队列list[orderId]
QStringList m_simValidOrdersList;
//订单号与pos短号映射
QMap<QString,QString> m_orderIdToPosSalesIdMap;
QMap<QString,QString> m_orderIdToPosCheckNoMap;
//记录当前订单操作
QMap<QString, int> m_orderOperatePair;
//订单拉取记录
......@@ -243,20 +243,81 @@ private slots:
* */
QJsonObject _PackHttpReplyJson(const int status, const QString& msg, const QJsonObject& data, const int &iscontinue);
/**
*功能:清空订单Map里的订单
*功能:定时清空订单Map里两天前的订单
*参数:无
*返回:无
**/
void _ClearOrder();
bool _GetReplyJson(const QJsonObject &content, QJsonObject &data,QString &error);
bool _Get01ReplyJson(const QJsonObject &content, QJsonObject &data,QString &error);
bool _Get02ReplyJson(const QJsonObject &content, QJsonObject &data,QString &error);
bool _Get03ReplyJson(const QJsonObject &content, QJsonObject &data,QString &error);
bool _Get04ReplyJson(const QJsonObject &content, QJsonObject &data,QString &error);
bool _Get11ReplyJson(const QJsonObject &content, QJsonObject &data,QString &error);
bool _Get12ReplyJson(const QJsonObject &content, QJsonObject &data,QString &error);
bool _GetLoginReplyJson(const QJsonObject &content, QString &error);
bool _GetQueryReplyJson(QJsonObject &data,QString &error, const QString &orderId);
void _CrondClearExpireOrder();
/**
*功能:FM外卖插件为响应Simphony请求准备返回数据
*参数:1、请求json参数;2、准备返回请求数据的Buff;3、返回错误信息;
*返回:是否准备成功;
**/
bool _ResponseSimphonyRequest(const QJsonObject &content, QJsonObject &data,QString &error);
/**
*功能:FM外卖插件为响应Simphony请求[action:01 -> 拉取订单]准备返回数据
*参数:1、请求json参数;2、准备返回请求数据的Buff;3、返回错误信息;
*返回:是否准备成功;
**/
bool _ResponseSimphony01Request(const QJsonObject &content, QJsonObject &data,QString &error);
/**
*功能:FM外卖插件为响应Simphony请求[action:02 -> 确认订单]准备返回数据
*参数:1、请求json参数;2、准备返回请求数据的Buff;3、返回错误信息;
*返回:是否准备成功;
**/
bool _ResponseSimphony02Request(const QJsonObject &content, QJsonObject &data,QString &error);
/**
*功能:FM外卖插件为响应Simphony请求[action:03 -> 取消订单]准备返回数据
*参数:1、请求json参数;2、准备返回请求数据的Buff;3、返回错误信息;
*返回:是否准备成功;
**/
bool _ResponseSimphony03Request(const QJsonObject &content, QJsonObject &data,QString &error);
/**
*功能:FM外卖插件为响应Simphony请求[action:04 -> 汇报订单Sim/POS产生的小票号]准备返回数据
*参数:1、请求json参数;2、准备返回请求数据的Buff;3、返回错误信息;
*返回:是否准备成功;
**/
bool _ResponseSimphony04Request(const QJsonObject &content, QJsonObject &data,QString &error);
/**
*功能:FM外卖插件为响应Simphony请求[action:05 -> simphony更新订单数据到POS本地数据库以以便POS打印小票及汇总单信息]准备返回数据
*参数:1、请求json参数;2、准备返回请求数据的Buff;3、返回错误信息;
*返回:是否准备成功;
**/
bool _ResponseSimphony05Request(const QJsonObject &content, QJsonObject &data,QString &error);
/**
*功能:FM外卖插件为响应Simphony请求[action:11 -> Sim/POS推送订单到FM插件]准备返回数据
*参数:1、请求json参数;2、准备返回请求数据的Buff;3、返回错误信息;
*返回:是否准备成功;
**/
bool _ResponseSimphony11Request(const QJsonObject &content, QJsonObject &data,QString &error);
/**
*功能:FM外卖插件为响应Simphony请求[action:12 -> Sim/POS推送门店营业状态]准备返回数据
*参数:1、请求json参数;2、准备返回请求数据的Buff;3、返回错误信息;
*返回:是否准备成功;
**/
bool _ResponseSimphony12Request(const QJsonObject &content, QJsonObject &data,QString &error);
/**
*功能:FM外卖插件响应Simphony请求时,如果外卖插件未登录则进行登陆;
*参数:1、请求json参数;2、返回错误信息;
*返回:是否登陆成功;
**/
bool _ResponseSimReqTryLogin(const QJsonObject &content, QString &error);
/**
*功能:FM外卖插件为响应Simphony请求[查询FM插件第一条订单数据作为返回数据]准备返回数据
*参数:1、请求json参数;2、准备返回请求数据的Buff;3、返回错误信息;
*返回:是否准备成功;
**/
bool _ResponseSimReqFristOrderData(QJsonObject &data,QString &error, const QString &orderId);
// 单位转换
QString _Penny2Dollar(int penny);
......
......@@ -86,17 +86,17 @@ public:
QString watercourseId; //流水号(取餐号)
QString customerId; //用户编号
QString customerName;//用户名称
QString posCheckNo;
QString posCheckNo; // POS小票号
QString phone;
QString msr_no;
QString msr_no; //msr卡号
QString storeId;
QString storeName;
QString storeAddress;
QString channel;
QString payWay;
QString deliveryTime;
QString riderName;
QString riderPhone;
QString deliveryTime; //配送时间
QString riderName; //骑手名
QString riderPhone; //骑手电话
QString createTime;
QString confirmTime;
QString sendTime;
......@@ -107,8 +107,8 @@ public:
QString invoiceType;
QString invoiceTitle;
QString invoiceTaxpayerId;
QString firstName;
QString lastName;
QString firstName; //用户名字;
QString lastName; //用户姓;
QString longitude;
QString latitude;
QString street;
......@@ -125,8 +125,8 @@ public:
int payStatus;
int refundStatus;
int deliveryChannel;
int putType;
int putTimes;
int pushOrderType;
int pushOrderTimes;
bool isPush;
bool isCancle;
QString getChannelName();
......
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