Commit acf01b49 by wuyang.zou

1、POS取消订单,订单进入异常单,双击进入订单详情页面。送达时间显示合理信息;

    2、退单的时候,频繁输入错误授权号[00不在范围内的账号]。退款到账了,但是这个
订单入机失败。进入了异常单队列,显示【POS录单失败】。再次退单提示【取消订单失败
,蜂鸟拒绝退单】
    3、外卖订单中有收费附加品,OMS插件端进入订单详情页面。收费附加品名称跟在了商品规格后面,但是收费附加品价格未显示/被计入
    4、伙伴角色登录系统后退单,在经理授权框页面点击取消按钮,立即操作POS页面的菜单,这时会把该笔订单正向录入列表,不打印小票
    5、App退单时,svc支付方式,绑定的第三方交易流水号为 退款fmid;
    6、完善录外卖订单,锁屏功能,避免店员在进入录外卖单前点击的商品进入外卖订单内,导致与实际外卖订单价格不一致问题;
    7、更新FmTakeout.exe 版本号信息
    8、修复运力不足导致 oms 取消订单后,没有录入POS BUG;
    9、完善退货授权的获取;
    10、增加日志记录大小(10 M* 40个)
parent 1d1cbf00
...@@ -259,6 +259,8 @@ void FlowControl::_OrderAnalysis(const QJsonObject& jsonObject) ...@@ -259,6 +259,8 @@ void FlowControl::_OrderAnalysis(const QJsonObject& jsonObject)
if(orderObject == NULL) if(orderObject == NULL)
{ {
orderObject = new OrderObject(this); orderObject = new OrderObject(this);
//初始化数据;
orderObject->orderIndex = 0;
orderObject->FromJson(jsonObject); orderObject->FromJson(jsonObject);
orderObject->isPush = false; orderObject->isPush = false;
orderObject->isCancle = false; orderObject->isCancle = false;
...@@ -333,10 +335,14 @@ void FlowControl::_OrderAnalysis(const QJsonObject& jsonObject) ...@@ -333,10 +335,14 @@ void FlowControl::_OrderAnalysis(const QJsonObject& jsonObject)
QLOG_INFO() << QString("[<<<<---FmTakeout _OrderAnalysis:NewOrder m_simValidOrdersList.num:%1 --->>>>]")<< m_simValidOrdersList.count(); QLOG_INFO() << QString("[<<<<---FmTakeout _OrderAnalysis:NewOrder m_simValidOrdersList.num:%1 --->>>>]")<< m_simValidOrdersList.count();
QLOG_INFO() << QString("[<<<<---FmTakeout _OrderAnalysis:NewOrder m_simValidOrdersList:%1 --->>>>]")<< m_simValidOrdersList; QLOG_INFO() << QString("[<<<<---FmTakeout _OrderAnalysis:NewOrder m_simValidOrdersList:%1 --->>>>]")<< m_simValidOrdersList;
QLOG_INFO() << QString("[<<<<---FmTakeout _OrderAnalysis:NewOrder _ClickOMSAssignArea --->>>>]"); QLOG_INFO() << QString("[<<<<---FmTakeout _OrderAnalysis:NewOrder _ClickOMSAssignArea --->>>>]");
if("HM" == orderObject->channel){
QLOG_INFO() << QString("[<<<<---FmTakeout _OrderAnalysis:NewOrder [HM Order] don't _ClickOMSAssignArea,Wait Timeout Event --->>>>]");
}else{
emit doHideMainShowFloatFrom(); emit doHideMainShowFloatFrom();
emit doLockFloatForm(); emit doLockFloatForm();
_ClickOMSAssignArea(); _ClickOMSAssignArea();
} }
}
break; break;
case OrderObject::Confirmed: case OrderObject::Confirmed:
// 针对已经确认的订单:POS可能录过,也可能没有; 因此就需要 orderObject->isPush 来判断POS是否录过:true:录过;false:没录过; // 针对已经确认的订单:POS可能录过,也可能没有; 因此就需要 orderObject->isPush 来判断POS是否录过:true:录过;false:没录过;
...@@ -353,10 +359,15 @@ void FlowControl::_OrderAnalysis(const QJsonObject& jsonObject) ...@@ -353,10 +359,15 @@ void FlowControl::_OrderAnalysis(const QJsonObject& jsonObject)
QLOG_INFO() << QString("[<<<<---FmTakeout _OrderAnalysis:OrderConfirmed m_simValidOrdersList.num:%1 --->>>>]")<< m_simValidOrdersList.count(); QLOG_INFO() << QString("[<<<<---FmTakeout _OrderAnalysis:OrderConfirmed m_simValidOrdersList.num:%1 --->>>>]")<< m_simValidOrdersList.count();
QLOG_INFO() << QString("[<<<<---FmTakeout _OrderAnalysis:OrderConfirmed m_simValidOrdersList:%1 --->>>>]")<< m_simValidOrdersList; QLOG_INFO() << QString("[<<<<---FmTakeout _OrderAnalysis:OrderConfirmed m_simValidOrdersList:%1 --->>>>]")<< m_simValidOrdersList;
QLOG_INFO() << QString("[<<<<---FmTakeout _OrderAnalysis:OrderConfirmed _ClickOMSAssignArea --->>>>]"); QLOG_INFO() << QString("[<<<<---FmTakeout _OrderAnalysis:OrderConfirmed _ClickOMSAssignArea --->>>>]");
if("HM" == orderObject->channel){
QLOG_INFO() << QString("[<<<<---FmTakeout _OrderAnalysis:OrderConfirmed [HM Order] don't _ClickOMSAssignArea,Wait Timeout Event --->>>>]");
}else{
emit doHideMainShowFloatFrom(); emit doHideMainShowFloatFrom();
emit doLockFloatForm(); emit doLockFloatForm();
_ClickOMSAssignArea(); _ClickOMSAssignArea();
} }
}
break; break;
case OrderObject::Sendout: case OrderObject::Sendout:
if(!orderObject->isPush) if(!orderObject->isPush)
...@@ -372,12 +383,36 @@ void FlowControl::_OrderAnalysis(const QJsonObject& jsonObject) ...@@ -372,12 +383,36 @@ void FlowControl::_OrderAnalysis(const QJsonObject& jsonObject)
QLOG_INFO() << QString("[<<<<---FmTakeout _OrderAnalysis:Sendout m_simValidOrdersList.num:%1 --->>>>]")<< m_simValidOrdersList.count(); QLOG_INFO() << QString("[<<<<---FmTakeout _OrderAnalysis:Sendout m_simValidOrdersList.num:%1 --->>>>]")<< m_simValidOrdersList.count();
QLOG_INFO() << QString("[<<<<---FmTakeout _OrderAnalysis:Sendout m_simValidOrdersList:%1 --->>>>]")<< m_simValidOrdersList; QLOG_INFO() << QString("[<<<<---FmTakeout _OrderAnalysis:Sendout m_simValidOrdersList:%1 --->>>>]")<< m_simValidOrdersList;
QLOG_INFO() << QString("[<<<<---FmTakeout _OrderAnalysis:Sendout _ClickOMSAssignArea --->>>>]"); QLOG_INFO() << QString("[<<<<---FmTakeout _OrderAnalysis:Sendout _ClickOMSAssignArea --->>>>]");
if("HM" == orderObject->channel){
QLOG_INFO() << QString("[<<<<---FmTakeout _OrderAnalysis:Sendout [HM Order] don't _ClickOMSAssignArea,Wait Timeout Event --->>>>]");
}else{
emit doHideMainShowFloatFrom(); emit doHideMainShowFloatFrom();
emit doLockFloatForm(); emit doLockFloatForm();
_ClickOMSAssignArea(); _ClickOMSAssignArea();
} }
}
break; break;
case OrderObject::Finished: case OrderObject::Finished:
if(!orderObject->isPush) {
orderObject->pushOrderType = 1;
orderObject->pushOrderTimes = 0;
m_OrderEntryMutex.lock();
if(!m_simValidOrdersList.contains(orderObject->id))
{
m_simValidOrdersList.append(orderObject->id);
}
m_OrderEntryMutex.unlock();
QLOG_INFO() << QString("[<<<<---FmTakeout _OrderAnalysis:Finished m_simValidOrdersList.num:%1 --->>>>]")<< m_simValidOrdersList.count();
QLOG_INFO() << QString("[<<<<---FmTakeout _OrderAnalysis:Finished m_simValidOrdersList:%1 --->>>>]")<< m_simValidOrdersList;
QLOG_INFO() << QString("[<<<<---FmTakeout _OrderAnalysis:Finished _ClickOMSAssignArea --->>>>]");
if("HM" == orderObject->channel){
QLOG_INFO() << QString("[<<<<---FmTakeout _OrderAnalysis:Finished [HM Order] don't _ClickOMSAssignArea,Wait Timeout Event --->>>>]");
}else{
emit doHideMainShowFloatFrom();
emit doLockFloatForm();
_ClickOMSAssignArea();
}
}
break; break;
case OrderObject::RequestRefund: case OrderObject::RequestRefund:
// 星巴克:当客户同意退款时,外卖插件收到请求退款后,直接进行退款处理; // 星巴克:当客户同意退款时,外卖插件收到请求退款后,直接进行退款处理;
...@@ -1073,17 +1108,20 @@ bool FlowControl::_RefundOrder(const QString &orderId,int reasonCode,const QStri ...@@ -1073,17 +1108,20 @@ bool FlowControl::_RefundOrder(const QString &orderId,int reasonCode,const QStri
int status = data[JSON_RECEIVINGSTATUS].toInt(); int status = data[JSON_RECEIVINGSTATUS].toInt();
if(1==status) { if(1==status) {
emit showAlert(AlertForm::SUCCESS, QString::fromLocal8Bit("退单成功")); emit showAlert(AlertForm::SUCCESS, QString::fromLocal8Bit("退单成功"));
//m_OrderEntryMutex.lock(); //必须提前加锁,否则后期订单ID会变更; //m_OrderEntryMutex.lock(); //必须提前加锁,否则后期订单ID会变更;
//获取POS退单成功,OMS服务端返回的RefundFmId ( 此字段只有星巴克APP SVC卡支付的case,才会使用到 )
QString refundFmIdTemp = data[JSON_REFUNDFMID].toString();
int orderStatus = data[JSON_ORDERSTATUS].toInt(); int orderStatus = data[JSON_ORDERSTATUS].toInt();
OrderObject* orderObject = m_FmOrdersMap.value(orderId); OrderObject* orderObject = m_FmOrdersMap.value(orderId);
int oldOrderStatus = orderObject->orderStatus; int oldOrderStatus = orderObject->orderStatus;
orderObject->orderStatus = orderStatus; orderObject->orderStatus = orderStatus;
orderObject->refundFmId = refundFmIdTemp;
emit changeOrderStatus(orderObject, oldOrderStatus); emit changeOrderStatus(orderObject, oldOrderStatus);
emit doHideMainShowFloatFrom(); emit doHideMainShowFloatFrom();
//退货订单,将此订单添加到simphony 模拟点单列表中; //退货订单,将此订单添加到simphony 模拟点单列表中;
QLOG_INFO() << QString("[<<<<---FmTakeout _RefundOrder: orderObject->id:%1 , orderObject->orderStatus:%2 --->>>>]").arg(orderObject->id).arg(orderObject->orderStatus); QLOG_INFO() << QString("[<<<<---FmTakeout _RefundOrder: orderObject->id:%1 , orderObject->orderStatus:%2 --->>>>]").arg(orderObject->id).arg(orderObject->orderStatus);
QLOG_INFO() << QString("[<<<<---FmTakeout _RefundOrder: orderObject->id:%1 , orderObject->isCancle:%2 --->>>>]").arg(orderObject->id).arg(orderObject->isCancle); QLOG_INFO() << QString("[<<<<---FmTakeout _RefundOrder: orderObject->id:%1 , orderObject->isCancle:%2 --->>>>]").arg(orderObject->id).arg(orderObject->isCancle);
if (OrderObject::Refunded == orderObject->orderStatus && OrderObject::SimExcept != oldOrderStatus) { if (OrderObject::Refunded == orderObject->orderStatus && OrderObject::SimExceptSale != oldOrderStatus && OrderObject::SimExceptRefund != oldOrderStatus) {
//只有退单成功 且 是录POS 成功的才进行加锁; //只有退单成功 且 是录POS 成功的才进行加锁;
emit doLockFloatForm(); emit doLockFloatForm();
//能退单成功就肯定能断言,此订单是没有录过退货的 //能退单成功就肯定能断言,此订单是没有录过退货的
...@@ -1104,10 +1142,27 @@ bool FlowControl::_RefundOrder(const QString &orderId,int reasonCode,const QStri ...@@ -1104,10 +1142,27 @@ bool FlowControl::_RefundOrder(const QString &orderId,int reasonCode,const QStri
QLOG_INFO() << QString("[<<<<---FmTakeout _RefundOrder: _ClickOMSAssignArea --->>>>]"); QLOG_INFO() << QString("[<<<<---FmTakeout _RefundOrder: _ClickOMSAssignArea --->>>>]");
m_OrderEntryMutex.unlock(); m_OrderEntryMutex.unlock();
_ClickOMSAssignArea(); //必须执行,否则退货,点击取消后,就不会再提醒了; _ClickOMSAssignArea(); //必须执行,否则退货,点击取消后,就不会再提醒了;
} else if(OrderObject::SimExcept == oldOrderStatus) { //录正向销售单报错的处理机制;
} else if(OrderObject::SimExceptSale == oldOrderStatus) {
m_OrderEntryMutex.lock(); m_OrderEntryMutex.lock();
m_simValidOrdersList.removeOne(orderObject->id); m_simValidOrdersList.removeOne(orderObject->id);
m_OrderEntryMutex.unlock(); m_OrderEntryMutex.unlock();
//正向单已经录入成功,录退单报错的的处理机制;
} else if(OrderObject::SimExceptRefund == oldOrderStatus){
emit doLockFloatForm();
m_OrderEntryMutex.lock();
if(!m_simValidOrdersList.contains(orderObject->id)) //不存在队列中,则将其加入到队列中;
{
QLOG_INFO() << QString("[<<<<---FmTakeout _RefundOrder: SimExceptRefund : orderId:%1 ;(SimProcOrderDB::getInstance().isRefundOrder:--->>>>]").arg(orderObject->id)<<SimProcOrderDB::getInstance().isRefundOrder(orderObject->id);
m_simValidOrdersList.insert(0,orderObject->id);
orderObject->pushOrderType = 0;
orderObject->pushOrderTimes = 0;
}
QLOG_INFO() << QString("[<<<<---FmTakeout _RefundOrder:SimExceptRefund : m_simValidOrdersList.num:%1 --->>>>]")<< m_simValidOrdersList.count();
QLOG_INFO() << QString("[<<<<---FmTakeout _RefundOrder:SimExceptRefund : m_simValidOrdersList:%1 --->>>>]")<< m_simValidOrdersList;
QLOG_INFO() << QString("[<<<<---FmTakeout _RefundOrder:SimExceptRefund : _ClickOMSAssignArea --->>>>]");
m_OrderEntryMutex.unlock();
_ClickOMSAssignArea(); //必须执行,否则退货,点击取消后,就不会再提醒了;
} }
//m_OrderEntryMutex.unlock(); //必须放开锁的范围;否则会出错; //m_OrderEntryMutex.unlock(); //必须放开锁的范围;否则会出错;
} else { } else {
...@@ -1670,7 +1725,11 @@ bool FlowControl::_ResponseSimphony06Request(const QJsonObject &content, QJsonOb ...@@ -1670,7 +1725,11 @@ bool FlowControl::_ResponseSimphony06Request(const QJsonObject &content, QJsonOb
m_simValidOrdersList.removeOne(orderId); m_simValidOrdersList.removeOne(orderId);
m_OrderEntryMutex.unlock(); m_OrderEntryMutex.unlock();
int oldStatus = order_p->orderStatus; int oldStatus = order_p->orderStatus;
order_p->orderStatus = OrderObject::SimExcept; if(6 == oldStatus || OrderObject::SimExceptRefund == order_p->orderStatus){
order_p->orderStatus = OrderObject::SimExceptRefund;
}else{
order_p->orderStatus = OrderObject::SimExceptSale;
}
emit changeOrderStatus(order_p,oldStatus); emit changeOrderStatus(order_p,oldStatus);
error=QString::fromLocal8Bit("Request Action06: Catch Sim Recorded Order Exception And Report Success"); error=QString::fromLocal8Bit("Request Action06: Catch Sim Recorded Order Exception And Report Success");
retProcSimExceptCode = 1; retProcSimExceptCode = 1;
...@@ -1776,6 +1835,21 @@ bool FlowControl::_ResponseHM21Request(const QJsonObject &content, QJsonObject & ...@@ -1776,6 +1835,21 @@ bool FlowControl::_ResponseHM21Request(const QJsonObject &content, QJsonObject &
//获取门店营业状态 //获取门店营业状态
QString strOpeStatus=QString::fromLocal8Bit("正常"); QString strOpeStatus=QString::fromLocal8Bit("正常");
emit setOpeStatus(strOpeStatus); emit setOpeStatus(strOpeStatus);
//增加筛选条件,判断当前POS系统录单的订单是否还没录单完成:如果该订单录单没有完成,不返回100,务必让服务的等待;
if(content[JSON_ORDER_ID].toString().isEmpty()) {
error =QString::fromLocal8Bit("订单号不能为空");
return false;
} else {
if(!m_simValidOrdersList.isEmpty()){
QString simValidOrderListFirstOne = m_simValidOrdersList.first();
if(content[JSON_ORDER_ID].toString() == simValidOrderListFirstOne){
error =QString::fromLocal8Bit("当前订单正在录POS系统,请耐心等待");
return false;
}
}
}
QJsonObject hmOrderJson = content["orderDetail"].toObject(); QJsonObject hmOrderJson = content["orderDetail"].toObject();
QLOG_INFO()<<"FlowControl::_ResponseHM21Request:"<<hmOrderJson; QLOG_INFO()<<"FlowControl::_ResponseHM21Request:"<<hmOrderJson;
if(!hmOrderJson.isEmpty()){ if(!hmOrderJson.isEmpty()){
...@@ -1880,7 +1954,13 @@ bool FlowControl::_ResponseSimReqFristOrderData(const QJsonObject &content, QJso ...@@ -1880,7 +1954,13 @@ bool FlowControl::_ResponseSimReqFristOrderData(const QJsonObject &content, QJso
//星巴克App端支付方式: 1:支付宝; 2:微信; 3:银联; 4:SVC卡; //星巴克App端支付方式: 1:支付宝; 2:微信; 3:银联; 4:SVC卡;
if(4 == orderObject->payWay){ if(4 == orderObject->payWay){
tempSbkAppPayType = 14 ; tempSbkAppPayType = 14 ;
//svc卡支付时传交易流水号协定:
if(OrderObject::Refunded == orderObject->orderStatus ||OrderObject::SimExceptRefund == orderObject->orderStatus){
tempSbkAppPayValue = orderObject->refundFmId.isEmpty()?QString("0"):orderObject->refundFmId;
}else{
tempSbkAppPayValue = orderObject->payfmId; tempSbkAppPayValue = orderObject->payfmId;
}
//tempSbkAppPayValue = orderObject->payfmId;
}else if(1 == orderObject->payWay){ }else if(1 == orderObject->payWay){
tempSbkAppPayType = 78; tempSbkAppPayType = 78;
tempSbkAppPayValue = (orderObject->thirdPartyBatch).length()?orderObject->thirdPartyBatch :QString("0"); tempSbkAppPayValue = (orderObject->thirdPartyBatch).length()?orderObject->thirdPartyBatch :QString("0");
...@@ -1903,6 +1983,11 @@ bool FlowControl::_ResponseSimReqFristOrderData(const QJsonObject &content, QJso ...@@ -1903,6 +1983,11 @@ bool FlowControl::_ResponseSimReqFristOrderData(const QJsonObject &content, QJso
tempOrderType = 11; tempOrderType = 11;
tempOrderPayType = 83; tempOrderPayType = 83;
tempSbkAppPayValue = orderObject->id; tempSbkAppPayValue = orderObject->id;
}else if("HM" == orderObject->channel){
tempOrderType = 14;
tempOrderPayType = 85;
tempSbkAppPayValue = orderObject->id;
}else{ }else{
tempOrderType = 11; tempOrderType = 11;
tempOrderPayType = 83; tempOrderPayType = 83;
...@@ -1952,11 +2037,13 @@ bool FlowControl::_ResponseSimReqFristOrderData(const QJsonObject &content, QJso ...@@ -1952,11 +2037,13 @@ bool FlowControl::_ResponseSimReqFristOrderData(const QJsonObject &content, QJso
cObj.insert("dis_platform_fee", /*orderObject->dis_platform_fee*/0); // 平台承担优惠金额 cObj.insert("dis_platform_fee", /*orderObject->dis_platform_fee*/0); // 平台承担优惠金额
cObj.insert("send_fee", orderObject->deliveryPrice); // 配送费 cObj.insert("send_fee", orderObject->deliveryPrice); // 配送费
cObj.insert("shop_fee", /*orderObject->total_fee-orderObject->send_fee-orderObject->service_fee-orderObject->dis_shop_fee*/0); // 商户能够拿到的钱(去除平台佣金) cObj.insert("shop_fee", /*orderObject->total_fee-orderObject->send_fee-orderObject->service_fee-orderObject->dis_shop_fee*/0); // 商户能够拿到的钱(去除平台佣金)
cObj.insert("package_fee", orderObject->totalPrice); // 打包费 //cObj.insert("package_fee", orderObject->packageFee); // 打包费上面已传;
cObj.insert("invoice_amount",orderObject->totalPrice); cObj.insert("invoice_amount",orderObject->totalPrice);
if("ELE"==orderObject->channel){ if("ELE" == orderObject->channel){
cObj.insert("thirdPartyOrderId",orderObject->thirdPartyOrderId); cObj.insert("thirdPartyOrderId",orderObject->thirdPartyOrderId);
}else{ }else if("HM" == orderObject->channel){
cObj.insert("thirdPartyOrderId",orderObject->thirdPartyOrderId);
} else {
cObj.insert("thirdPartyOrderId","0"); cObj.insert("thirdPartyOrderId","0");
} }
cObj.insert("paid_trans_id",orderObject->id); cObj.insert("paid_trans_id",orderObject->id);
...@@ -1964,7 +2051,8 @@ bool FlowControl::_ResponseSimReqFristOrderData(const QJsonObject &content, QJso ...@@ -1964,7 +2051,8 @@ bool FlowControl::_ResponseSimReqFristOrderData(const QJsonObject &content, QJso
/************************************************************************************/ /************************************************************************************/
int hasCashbox = 0 ,hasRefundAuth = 0; int hasCashbox = 0 ,hasRefundAuth = 0;
hasCashbox = GetCaboxAReAuth::getInstance().getUserHasCashBox(m_cashierId); hasCashbox = GetCaboxAReAuth::getInstance().getUserHasCashBox(m_cashierId);
QLOG_INFO()<<QString::fromLocal8Bit("[<<<<---Simphony_Script请求[ACTION:01: 获取当前用户是否绑定钱箱] hasCashbox:%1:--->>>>>]").arg(hasCashbox); hasRefundAuth = GetCaboxAReAuth::getInstance().getUserRefundAuth(m_cashierId);
QLOG_INFO()<<QString::fromLocal8Bit("[<<<<---Simphony_Script请求[ACTION:01:] 获取当前用户是否绑定钱箱:hasCashbox:%1; 当前用户是否拥有退货权限:hasRefundAuth:%2:--->>>>>]").arg(hasCashbox).arg(hasRefundAuth);
cObj.insert("hasCashbox",hasCashbox); cObj.insert("hasCashbox",hasCashbox);
cObj.insert("hasRefundAuth",hasRefundAuth); cObj.insert("hasRefundAuth",hasRefundAuth);
/************************************************************************************/ /************************************************************************************/
...@@ -1975,7 +2063,7 @@ bool FlowControl::_ResponseSimReqFristOrderData(const QJsonObject &content, QJso ...@@ -1975,7 +2063,7 @@ bool FlowControl::_ResponseSimReqFristOrderData(const QJsonObject &content, QJso
QJsonObject tObj; QJsonObject tObj;
dishesObject* dish=orderObject->proList.at(i); dishesObject* dish=orderObject->proList.at(i);
//默认属性直接跳过; //默认属性直接跳过;
if (orderObject->proList.at(i)->code.contains("Default",Qt::CaseSensitive)) { if (orderObject->proList.at(i)->code.contains("Default",Qt::CaseInsensitive)) {
continue; continue;
} }
//针对同一商品,多份数量需要将其,拆分成单份;[如果不拆分,将导致多份商品中配料价格出现 漏钱:POS中的账将会出现少金额] //针对同一商品,多份数量需要将其,拆分成单份;[如果不拆分,将导致多份商品中配料价格出现 漏钱:POS中的账将会出现少金额]
...@@ -1994,7 +2082,7 @@ bool FlowControl::_ResponseSimReqFristOrderData(const QJsonObject &content, QJso ...@@ -1994,7 +2082,7 @@ bool FlowControl::_ResponseSimReqFristOrderData(const QJsonObject &content, QJso
{ {
dishesObject* subDish=dish->sub_products.at(j); dishesObject* subDish=dish->sub_products.at(j);
//默认属性直接跳过; //默认属性直接跳过;
if(!subDish->code.isEmpty() && !subDish->code.contains("Default",Qt::CaseSensitive) ) if(!subDish->code.isEmpty() && !subDish->code.contains("Default",Qt::CaseInsensitive) )
{ {
sObj.insert("consume_num", subDish->qty); sObj.insert("consume_num", subDish->qty);
sObj.insert("pid", subDish->code); sObj.insert("pid", subDish->code);
......
...@@ -53,9 +53,6 @@ int GetCaboxAReAuth::getUserHasCashBox(const QString& operatorId){ ...@@ -53,9 +53,6 @@ int GetCaboxAReAuth::getUserHasCashBox(const QString& operatorId){
if(query.first()) { if(query.first()) {
result= query.value(0).toInt()?1:0; result= query.value(0).toInt()?1:0;
QLOG_INFO()<<"[<<<<---SqlServer Database operatorId:%1,getUserHasCashBox:%2--->>>>]"<<operatorId<<result; QLOG_INFO()<<"[<<<<---SqlServer Database operatorId:%1,getUserHasCashBox:%2--->>>>]"<<operatorId<<result;
QLOG_INFO()<<"[<<<<---SqlServer Database operatorId:%1,:getUserHasCashBox query.value(0):%2--->>>>]"<<operatorId<<query.value(0).toInt();
QLOG_INFO()<<"[<<<<---SqlServer Database operatorId:%1,:getUserHasCashBox query.value(1):%2--->>>>]"<<operatorId<<query.value(1).toInt();
QLOG_INFO()<<"[<<<<---SqlServer Database operatorId:%1,:getUserHasCashBox query.value(2):%2--->>>>]"<<operatorId<<query.value(2).toInt();
} else { } else {
result = 0; result = 0;
} }
...@@ -72,14 +69,15 @@ int GetCaboxAReAuth::getUserRefundAuth(const QString& operatorId){ ...@@ -72,14 +69,15 @@ int GetCaboxAReAuth::getUserRefundAuth(const QString& operatorId){
} }
int result = 0; int result = 0;
QSqlQuery query(m_sqlDb); QSqlQuery query(m_sqlDb);
//query.prepare(QString("select distinct 0 from employee ").arg(operatorId)); QLOG_INFO()<<QString("SELECT count(*) FROM [DataStore].[dbo].[EMPLOYEE] AS A , [DataStore].[dbo].[ROLE_EMPLOYEE] AS B WHERE A.EmployeeID = B.EmployeeID and B.RoleID in (2,10) AND ObjectNumber ='%1'").arg(operatorId);
query.prepare(QString("select distinct 0 from employee ")); query.prepare(QString("SELECT count(*) FROM [DataStore].[dbo].[EMPLOYEE] AS A , [DataStore].[dbo].[ROLE_EMPLOYEE] AS B WHERE A.EmployeeID = B.EmployeeID and B.RoleID in (2,10) AND ObjectNumber ='%1'").arg(operatorId));
if(!query.exec()) { if(!query.exec()) {
QLOG_ERROR()<<"[<<<<---SqlServer Database:getUserRefundAuth--->>>>]"<<query.lastError().text(); QLOG_ERROR()<<"[<<<<---SqlServer Database:getUserRefundAuth--->>>>]"<<query.lastError().text();
result= 0; result= 0;
} }
if(query.first()) { if(query.first()) {
result= 0; //等待后期更新; result= query.value(0).toInt()?1:0;
QLOG_INFO()<<"[<<<<---SqlServer Database operatorId:%1,getUserRefundAuth:%2--->>>>]"<<operatorId<<result;
} else { } else {
result = 0; result = 0;
} }
......
...@@ -67,7 +67,7 @@ void OrderObject::FetchDataFromJson(const QJsonObject &json) ...@@ -67,7 +67,7 @@ void OrderObject::FetchDataFromJson(const QJsonObject &json)
QString OrderObject::getChannelName() QString OrderObject::getChannelName()
{ {
QLOG_INFO() << QString("[<<<<---OrderObject:getChannelName [%3]--->>>>]").arg(channel); QLOG_INFO() << QString("[<<<<---OrderObject:getChannelName [%1]--->>>>]").arg(channel);
if ("MOD" == channel && 3 != orderType){ if ("MOD" == channel && 3 != orderType){
return QString::fromLocal8Bit("星巴克"); return QString::fromLocal8Bit("星巴克");
}else if("ELE" == channel){ }else if("ELE" == channel){
...@@ -76,10 +76,11 @@ QString OrderObject::getChannelName() ...@@ -76,10 +76,11 @@ QString OrderObject::getChannelName()
return QString::fromLocal8Bit("百度外卖"); return QString::fromLocal8Bit("百度外卖");
}else if("MOD" == channel && 3 == orderType){ }else if("MOD" == channel && 3 == orderType){
return QString::fromLocal8Bit("客诉单"); return QString::fromLocal8Bit("客诉单");
}else if("HM" == channel){ }else{
QLOG_INFO() << QString("[<<<<---OrderObject:getChannelName HM :[%1]--->>>>]").arg(channel);
if("HM" == channel){
return QString::fromLocal8Bit("盒马"); return QString::fromLocal8Bit("盒马");
} }
else{
return QString::fromLocal8Bit("未知"); return QString::fromLocal8Bit("未知");
} }
} }
......
...@@ -13,6 +13,7 @@ class OrderObject : public QObject ...@@ -13,6 +13,7 @@ class OrderObject : public QObject
Q_PROPERTY (QString id READ getId WRITE setId) Q_PROPERTY (QString id READ getId WRITE setId)
Q_PROPERTY (QString payfmId READ getPayfmId WRITE setPayfmId) Q_PROPERTY (QString payfmId READ getPayfmId WRITE setPayfmId)
Q_PROPERTY (QString thirdPartyBatch READ getThirdPartyBatch WRITE setThirdPartyBatch) Q_PROPERTY (QString thirdPartyBatch READ getThirdPartyBatch WRITE setThirdPartyBatch)
Q_PROPERTY (QString refundFmId READ getRefundFmId WRITE setRefundFmId)
Q_PROPERTY (QString thirdPartyOrderId READ getThirdPartyOrderId WRITE setThirdPartyOrderId) Q_PROPERTY (QString thirdPartyOrderId READ getThirdPartyOrderId WRITE setThirdPartyOrderId)
Q_PROPERTY (int orderType READ getOrderType WRITE setOrderType) Q_PROPERTY (int orderType READ getOrderType WRITE setOrderType)
...@@ -73,7 +74,7 @@ public: ...@@ -73,7 +74,7 @@ public:
typedef enum { typedef enum {
NewOrder=2,Confirmed,Sendout,Finished,Refunded,RequestRefund NewOrder=2,Confirmed,Sendout,Finished,Refunded,RequestRefund
,Locked=-1,AgreeRefund=30,RefuseRefund=40 ,SimExcept=50 ,Locked=-1,AgreeRefund=30,RefuseRefund=40 ,SimExceptSale=50,SimExceptRefund=51
/*,Refunded=6 Cancled=6(订单状态是6时,是退单); 退单目前本佳那边不区分*/ /*,Refunded=6 Cancled=6(订单状态是6时,是退单); 退单目前本佳那边不区分*/
}OrderStatus; }OrderStatus;
...@@ -92,6 +93,7 @@ public: ...@@ -92,6 +93,7 @@ public:
QString id; //编号 QString id; //编号
QString payfmId; //FM唯一码 QString payfmId; //FM唯一码
QString thirdPartyBatch ; //第三方交易流水号 QString thirdPartyBatch ; //第三方交易流水号
QString refundFmId; //退货时,不应该传递第三方交易流水号[应该使用退货的非码ID]
QString thirdPartyOrderId; //第三方订单ID QString thirdPartyOrderId; //第三方订单ID
int orderType; //订单类型: 用来区分是 正常订单(1) 预订单(2) 还是 客诉单:3 (星巴克定义客诉单的类型:12); int orderType; //订单类型: 用来区分是 正常订单(1) 预订单(2) 还是 客诉单:3 (星巴克定义客诉单的类型:12);
QString orgOrderId; //原始订单编号 QString orgOrderId; //原始订单编号
...@@ -159,6 +161,9 @@ public: ...@@ -159,6 +161,9 @@ public:
inline QString getThirdPartyBatch()const{return thirdPartyBatch;} inline QString getThirdPartyBatch()const{return thirdPartyBatch;}
inline void setThirdPartyBatch(const QString& v){thirdPartyBatch = v;} inline void setThirdPartyBatch(const QString& v){thirdPartyBatch = v;}
inline QString getRefundFmId()const{return refundFmId;}
inline void setRefundFmId(const QString& v){refundFmId = v;}
inline QString getThirdPartyOrderId()const{return thirdPartyOrderId;} inline QString getThirdPartyOrderId()const{return thirdPartyOrderId;}
inline void setThirdPartyOrderId(const QString& v){thirdPartyOrderId = v;} inline void setThirdPartyOrderId(const QString& v){thirdPartyOrderId = v;}
......
...@@ -30,7 +30,7 @@ ...@@ -30,7 +30,7 @@
#include <QtGlobal> #include <QtGlobal>
#include <iostream> #include <iostream>
const int QsLogging::SizeRotationStrategy::MaxBackupCount = 10; const int QsLogging::SizeRotationStrategy::MaxBackupCount = 40;
QsLogging::RotationStrategy::~RotationStrategy() QsLogging::RotationStrategy::~RotationStrategy()
{ {
......
...@@ -44,10 +44,11 @@ void DetailForm::InitData(OrderObject *orderObject) ...@@ -44,10 +44,11 @@ void DetailForm::InitData(OrderObject *orderObject)
//订单完成后,送达时间需要更新为 finishTime //订单完成后,送达时间需要更新为 finishTime
if(OrderObject::Finished == orderObject->orderStatus){ if(OrderObject::Finished == orderObject->orderStatus){
ui->detailLab2->setText( (orderObject->finishTime.isEmpty() || 0==orderObject->finishTime.length() )? QString::fromLocal8Bit("已经送达") : orderObject->finishTime); ui->detailLab2->setText( (orderObject->finishTime.isEmpty() || 0==orderObject->finishTime.length() )? QString::fromLocal8Bit("已经送达") : orderObject->finishTime);
}else if(OrderObject::Refunded == orderObject->orderStatus){
ui->detailLab2->setText(QString(""));
}else{ }else{
ui->detailLab2->setText(orderObject->deliveryTime.isEmpty()? QString::fromLocal8Bit("立即送出") : orderObject->deliveryTime); ui->detailLab2->setText(orderObject->deliveryTime);
} }
//ui->detailLab2->setText(orderObject->deliveryTime.isEmpty()? QString::fromLocal8Bit("立即送出") : orderObject->deliveryTime);
QLOG_INFO() << QString("[<<<<---DetailForm::InitData ui->detailLab2->setText --->>>>]"); QLOG_INFO() << QString("[<<<<---DetailForm::InitData ui->detailLab2->setText --->>>>]");
ui->detailLab3->setText(orderObject->riderName.isEmpty() ? QString::fromLocal8Bit("暂未指定") : QString::fromLocal8Bit("[姓名]%1 [电话]%2") ui->detailLab3->setText(orderObject->riderName.isEmpty() ? QString::fromLocal8Bit("暂未指定") : QString::fromLocal8Bit("[姓名]%1 [电话]%2")
...@@ -83,22 +84,23 @@ void DetailForm::InitData(OrderObject *orderObject) ...@@ -83,22 +84,23 @@ void DetailForm::InitData(OrderObject *orderObject)
ui->detailTable0->setItem(pNum, 2, new QTableWidgetItem(QString::number(orderObject->proList.at(i)->qty))); // 数量 ui->detailTable0->setItem(pNum, 2, new QTableWidgetItem(QString::number(orderObject->proList.at(i)->qty))); // 数量
ui->detailTable0->item(pNum, 2)->setTextAlignment(Qt::AlignCenter); ui->detailTable0->item(pNum, 2)->setTextAlignment(Qt::AlignCenter);
/*
// 选项太多,不便于显示; // 选项太多,不便于显示;
int j = 0; int j = 0;
dishesObject* tempDishObj = orderObject->proList[i]; dishesObject* tempDishObj = orderObject->proList[i];
for(; j<tempDishObj->sub_products.count(); j++) for(; j<tempDishObj->sub_products.count(); j++)
{ {
if(tempDishObj->sub_products.at(j)->price > 0){
pNum++; pNum++;
ui->detailTable0->insertRow(pNum); ui->detailTable0->insertRow(pNum);
ui->detailTable0->setItem(pNum, 0, new QTableWidgetItem(GetProductName(tempDishObj->sub_products.at(j)))); // 商品名 ui->detailTable0->setItem(pNum, 0, new QTableWidgetItem(QString("( ") + GetProductName(tempDishObj->sub_products.at(j)) )); // 商品名
ui->detailTable0->item(pNum, 0)->setTextAlignment(Qt::AlignCenter); ui->detailTable0->item(pNum, 0)->setTextAlignment(Qt::AlignRight);
ui->detailTable0->setItem(pNum, 1, new QTableWidgetItem(Penny2Dollar(tempDishObj->sub_products.at(j)->price))); // 价格 ui->detailTable0->setItem(pNum, 1, new QTableWidgetItem(Penny2Dollar(tempDishObj->sub_products.at(j)->price))); // 价格
ui->detailTable0->item(pNum, 1)->setTextAlignment(Qt::AlignCenter); ui->detailTable0->item(pNum, 1)->setTextAlignment(Qt::AlignCenter);
ui->detailTable0->setItem(pNum, 2, new QTableWidgetItem(QString::number(tempDishObj->sub_products.at(j)->qty))); // 数量 ui->detailTable0->setItem(pNum, 2, new QTableWidgetItem(QString::number(tempDishObj->sub_products.at(j)->qty) +QString(" )") )); // 数量
ui->detailTable0->item(pNum, 2)->setTextAlignment(Qt::AlignCenter); ui->detailTable0->item(pNum, 2)->setTextAlignment(Qt::AlignLeft);
}
} }
*/
} }
// 新增配送费 + 打包费 // 新增配送费 + 打包费
ui->detailTable0->insertRow(pNum); ui->detailTable0->insertRow(pNum);
...@@ -133,7 +135,7 @@ void DetailForm::InitData(OrderObject *orderObject) ...@@ -133,7 +135,7 @@ void DetailForm::InitData(OrderObject *orderObject)
ui->detailBtn2->setText(GetOperNameByStatus(orderObject->orderStatus, true)); ui->detailBtn2->setText(GetOperNameByStatus(orderObject->orderStatus, true));
ui->detailBtn2->setProperty("operation", GetOperByStatus(orderObject->orderStatus, true)); ui->detailBtn2->setProperty("operation", GetOperByStatus(orderObject->orderStatus, true));
ui->detailBtn2->setProperty("orderId", orderObject->id); ui->detailBtn2->setProperty("orderId", orderObject->id);
if(orderObject->orderStatus != 1 && orderObject->orderStatus != 20 && orderObject->orderStatus != 2 && orderObject->orderStatus != 3 && orderObject->orderStatus != OrderObject::SimExcept) if(orderObject->orderStatus != 1 && orderObject->orderStatus != 20 && orderObject->orderStatus != 2 && orderObject->orderStatus != 3 && orderObject->orderStatus != OrderObject::SimExceptSale)
{ {
ui->detailBtn2->hide(); ui->detailBtn2->hide();
} }
......
IDI_ICON ICON DISCARDABLE "logo.ico" IDI_ICON ICON DISCARDABLE "logo.ico"
#if defined(UNDER_CE)
#include <winbase.h>
#else
#include <winver.h>
#endif
VS_VERSION_INFO VERSIONINFO
//***每次修改后编译发版必须变更版本号(preDefine.h中APP_VERSION 需要一致)***//
FILEVERSION 2,2018,913,1
PRODUCTVERSION 2,2018,913,1
//*************************************************************************//
FILEFLAGSMASK 0x3fL
#ifdef _DEBUG
FILEFLAGS VS_FF_DEBUG
#else
FILEFLAGS 0x0L
#endif
FILEOS VOS__WINDOWS32
FILETYPE VFT_DLL
FILESUBTYPE 0x0L
BEGIN
BLOCK "StringFileInfo"
BEGIN
BLOCK "080404b0"
BEGIN
VALUE "CompanyName", "ShangHai.Freemud Co., Ltd."
VALUE "FileDescription", "Delivery Order Plug-in Application"
VALUE "InternalName", "fmTakeout.exe"
VALUE "LegalCopyright", "Copyright (C)2013-2018"
VALUE "OriginalFilename", "fmTakeout.exe"
VALUE "ProductName", "Delivery Order Plug-in"
//***每次修改后编译发版必须变更版本号(preDefine.h中APP_VERSION 需要一致)***//
VALUE "ProductVersion", "2.2018.913.1"
VALUE "FileVersion", "2.2018.913.1"
//*************************************************************************//
END
END
BLOCK "VarFileInfo"
BEGIN
VALUE "Translation", 0x804, 1200
END
END
\ No newline at end of file
...@@ -28,7 +28,7 @@ void InitLogger() ...@@ -28,7 +28,7 @@ void InitLogger()
QDir().mkdir(logDir); QDir().mkdir(logDir);
QString logPath = QString("%1/%2").arg(logDir).arg("log"); QString logPath = QString("%1/%2").arg(logDir).arg("log");
DestinationPtr fileDst(DestinationFactory::MakeFileDestination( DestinationPtr fileDst(DestinationFactory::MakeFileDestination(
logPath, EnableLogRotation, MaxSizeBytes(2*1024*1024), MaxOldLogCount(50))); logPath, EnableLogRotation, MaxSizeBytes(10*1024*1024), MaxOldLogCount(40)));
logger.addDestination(fileDst); logger.addDestination(fileDst);
DestinationPtr consoleDst(DestinationFactory::MakeDebugOutputDestination()); DestinationPtr consoleDst(DestinationFactory::MakeDebugOutputDestination());
logger.addDestination(consoleDst); logger.addDestination(consoleDst);
......
...@@ -539,19 +539,40 @@ void MainForm::onChangeOrderStatus(OrderObject *orderObject, int oldStatus) ...@@ -539,19 +539,40 @@ void MainForm::onChangeOrderStatus(OrderObject *orderObject, int oldStatus)
//connect(pBtn, &QPushButton::clicked, this, &MainForm::onMainProcBtnClicked); //connect(pBtn, &QPushButton::clicked, this, &MainForm::onMainProcBtnClicked);
} }
// SIM录外卖订单出现异常的订单; // SIM录外卖订单出现异常的订单(正向销售单);
if(OrderObject::SimExcept == orderObject->orderStatus) if(OrderObject::SimExceptSale == orderObject->orderStatus)
{ {
qDebug()<<table->objectName()<<"------"; qDebug()<<table->objectName()<<"------";
QWidget *pWdg = new QWidget(table); QWidget *pWdg = new QWidget(table);
QHBoxLayout *hLayout = new QHBoxLayout(pWdg); QHBoxLayout *hLayout = new QHBoxLayout(pWdg);
QPushButton * pBtn = new QPushButton(pWdg); QPushButton * pBtn = new QPushButton(pWdg);
pBtn->setFixedSize(90, 30); pBtn->setFixedSize(120, 30);
pBtn->setFocusPolicy(Qt::NoFocus);
pBtn->setObjectName("mainProcBtn");
pBtn->setProperty("orderId", orderObject->id);
//pBtn->setProperty("operation", table->property("operation").toString());
pBtn->setText(QString::fromLocal8Bit("录单失败,未退款"));
pBtn->setDisabled(true);
hLayout->addWidget(pBtn);
hLayout->setMargin(0);
pWdg->setLayout(hLayout);
table->setCellWidget(0, 6, pWdg); // 操作按钮
//connect(pBtn, &QPushButton::clicked, this, &MainForm::onMainProcBtnClicked);
}
// SIM录退货:外卖订单出现异常的订单(已退单);
if(OrderObject::SimExceptRefund == orderObject->orderStatus)
{
qDebug()<<table->objectName()<<"------";
QWidget *pWdg = new QWidget(table);
QHBoxLayout *hLayout = new QHBoxLayout(pWdg);
QPushButton * pBtn = new QPushButton(pWdg);
pBtn->setFixedSize(120, 30);
pBtn->setFocusPolicy(Qt::NoFocus); pBtn->setFocusPolicy(Qt::NoFocus);
pBtn->setObjectName("mainProcBtn"); pBtn->setObjectName("mainProcBtn");
pBtn->setProperty("orderId", orderObject->id); pBtn->setProperty("orderId", orderObject->id);
//pBtn->setProperty("operation", table->property("operation").toString()); //pBtn->setProperty("operation", table->property("operation").toString());
pBtn->setText(QString::fromLocal8Bit("POS录单失败")); pBtn->setText(QString::fromLocal8Bit("录单失败,已退款"));
pBtn->setDisabled(true); pBtn->setDisabled(true);
hLayout->addWidget(pBtn); hLayout->addWidget(pBtn);
hLayout->setMargin(0); hLayout->setMargin(0);
......
...@@ -7,7 +7,12 @@ ...@@ -7,7 +7,12 @@
//#define APP_VERSION "1.20171013.01" //#define APP_VERSION "1.20171013.01"
//#define APP_VERSION "2.20180822.01" //#define APP_VERSION "2.20180822.01"
#define APP_VERSION "2.20180824.01" //#define APP_VERSION "2.20180824.01"
//#define APP_VERSION "2.20180905.01"
#define APP_VERSION "2.2018913.1"
//修正版本号时,切记修正 FmTakeout.rc 中的版本号
#define SERVER_PASSWORD "posoperator@freemud.cn" #define SERVER_PASSWORD "posoperator@freemud.cn"
#define CONFIG_NAME "config.ini" #define CONFIG_NAME "config.ini"
...@@ -64,6 +69,7 @@ ...@@ -64,6 +69,7 @@
#define JSON_ERRCODE "code" #define JSON_ERRCODE "code"
#define JSON_STATUS "status" #define JSON_STATUS "status"
#define JSON_ORDERSTATUS "orderStatus" #define JSON_ORDERSTATUS "orderStatus"
#define JSON_REFUNDFMID "refundFmId"
#define JSON_STATUSDESC "status_desc" #define JSON_STATUSDESC "status_desc"
#define JSON_MESSAGE "message" #define JSON_MESSAGE "message"
#define JSON_ERRMSG "message" #define JSON_ERRMSG "message"
......
[FmServer] [FmServer]
;<<<非码POS插件:登陆注册+5分钟心跳 服务器地址>>> ;<<<非码POS插件:登陆注册+5分钟心跳 服务器地址>>>
loginUrl=https://delposservice.starbucks.net/backstage/pos/ loginUrl=https://delposserviceapi.starbucks.net/backstage/pos/
;星巴克开发环境:loginUrl=http://10.92.194.44:8083/backstage/pos/ ;星巴克开发环境:loginUrl=http://10.92.194.44:8083/backstage/pos/
;星巴克测试环境:loginUrl=http://delposservice.stg.starbucks.net/pos/ ;星巴克测试环境:loginUrl=http://delposserviceapi.stg.starbucks.net/pos/
;星巴克生产环境:loginUrl=https://delposservice.starbucks.net/pos/ ;星巴克生产环境:loginUrl=https://delposserviceapi.starbucks.net/backstage/pos/
;<<<非码外卖拉取订单服务器地址>>> ;<<<非码外卖拉取订单服务器地址>>>
orderUrl=https://delposservice.starbucks.net/backstage/order/ orderUrl=https://delposserviceapi.starbucks.net/backstage/order/
;星巴克测试环境: orderUrl=https://delposservice.stg.starbucks.net/backstage/order/ ;星巴克测试环境: orderUrl=https://delposserviceapi.stg.starbucks.net/backstage/order/
;星巴克开发环境: orderUrl=https://delposservice.dev.starbucks.net/backstage/order/ ;星巴克开发环境: orderUrl=https://delposserviceapi.dev.starbucks.net/backstage/order/
;星巴克生产环境: orderUrl=https://delposservice.starbucks.net/backstage/order/ ;星巴克生产环境: orderUrl=https://delposserviceapi.starbucks.net/backstage/order/
[Interface] [Interface]
;接口名称 ;接口名称
......
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