Commit 34132abc by wuyang.zou

fix:

1、订单详情显示 预约时间;
2、拼单使用父级 ServiceType:订单类型;
parent 62cf85b7
......@@ -2387,649 +2387,7 @@ bool FlowControl::_ResponseSimReqFristOrderData(const QJsonObject &content, QJso
{
QLOG_INFO()<<__FUNCTION__<<error<<orderId;
m_storeId=content["storeId"].toString();
m_posId=content["posId"].toString();
m_cashierId=content["operatorId"].toString();
m_cashierName=content["operatorName"].toString();
QLOG_INFO()<<QString::fromLocal8Bit("[<<<<---Simphony_Script请求[ACTION:01: 获取订单数据] 开始获取 OrderId:%1 给simphony:--->>>>>]").arg(orderId);
bool result=true;
if(!m_bLoginResult) {
error = QString::fromLocal8Bit("FMOMS Plug-in Program Not Login On");
return false;
}
if(m_simValidOrdersList.isEmpty()) {
error = QString::fromLocal8Bit("No New Delivery Order Need To Pull.");
result = true;
} else {
error.clear();
QString orderId=m_simValidOrdersList.first();
QLOG_INFO()<<QString::fromLocal8Bit("[<<<<---Simphony_Script请求[ACTION:01:]FMOMS已登录,且有订单待拉取:orderId:%1--->>>>>]").arg(orderId);
OrderObject* orderObject = m_FmOrdersMap.value(orderId);
if(!orderObject){
error = QString::fromLocal8Bit("Delivery Order had been clear by _CrondClearExpireOrder.");
m_OrderEntryMutex.lock();
m_simValidOrdersList.removeFirst();
m_OrderEntryMutex.unlock();
result = false;
}
if(MAXPUTTIMES==orderObject->pushOrderTimes) {
orderObject->pushOrderTimes = 0;
} else {
orderObject->pushOrderTimes=orderObject->pushOrderTimes+1;
}
if(MAXPUTTIMES==orderObject->orsPushOrderTimes) {
orderObject->orsPushOrderTimes = 0;
} else {
orderObject->orsPushOrderTimes=orderObject->orsPushOrderTimes+1;
}
//防止POS出现多次录单:退货单(销售单应该不会);
bool retGetDbOrderAllFlag = SimProcOrderDB::getInstance().getDbOrderAllFlag(orderObject->id,orderObject->dataBaseIsOrderExistInt,orderObject->dataBaseIsPushInt,
orderObject->dataBaseIsCancleInt,orderObject->dataBaseIsORSPushInt,orderObject->dataBaseIsORSCancleInt,orderObject->dataBasePosOrderCheckNo);
if(!retGetDbOrderAllFlag ){
QLOG_ERROR() << QString("[<<<<---FmTakeout _ResponseSimReqFristOrderData:orderObject->id:%1 SimProcOrderDB::getInstance().getDbOrderAllFlag Failed --->>>>]").arg(orderObject->id);
}
QLOG_INFO() << QString("[<<<<---FmTakeout _ResponseSimReqFristOrderData: orderObject->id:%1 ,dataBaseIsOrderExistInt:%2 ,dataBaseIsPushInt:%3 ,dataBaseIsCancleInt:%4 ,"
"dataBaseIsORSPushInt:%5 ,dataBaseIsORSCancleInt:%6 ,dataBasePosOrderCheckNo:%7--->>>>]")
.arg(orderObject->id).arg(orderObject->dataBaseIsOrderExistInt).arg(orderObject->dataBaseIsPushInt).arg(orderObject->dataBaseIsCancleInt)
.arg(orderObject->dataBaseIsORSPushInt).arg(orderObject->dataBaseIsORSCancleInt).arg(orderObject->dataBasePosOrderCheckNo);
bool bIsPushOrder = orderObject->dataBaseIsPushInt;
bool bIsRefundOrder = orderObject->dataBaseIsCancleInt;
bool bIsORSPushOrder = orderObject->dataBaseIsORSPushInt;
bool bIsORSCancleOrder = orderObject->dataBaseIsORSCancleInt;
//避免:销售单,退货单 两个方向都已经入机完成订单重复入机【&& !orderObject->appointmentDayFlag || && orderObject->appointmentDayFlag】;
// if(bIsPushOrder && bIsRefundOrder && !orderObject->appointmentDayFlag || bIsORSPushOrder && bIsORSCancleOrder && orderObject->appointmentDayFlag )
if(bIsPushOrder && bIsRefundOrder || bIsORSPushOrder && bIsORSCancleOrder || !retGetDbOrderAllFlag) {
QLOG_INFO()<<QString::fromLocal8Bit("[<<<<---Simphony_Script请求[ACTION:01:] bIsPushOrder: ;bIsRefundOrder: ;--->>>>>]")<<bIsPushOrder<<bIsRefundOrder;
//error = QString::fromLocal8Bit("该订单已经被POS系统录入完成");
error = QString::fromLocal8Bit("This Delivery Order Have Been Recorded In POS System Successfully");
m_OrderEntryMutex.lock();
m_simValidOrdersList.removeOne(orderObject->id);
m_OrderEntryMutex.unlock();
return true;
}
//录单时才触发隐藏 主窗口 + 锁定悬浮框;
if(!m_bFloatFromLockSt){
m_bFloatFromLockSt = true; //更新悬浮框的锁定状态=true;
}
emit doHideMainShowFloatFrom();
emit doLockFloatForm();
QJsonObject rObj, cObj;
if(orderObject->pushOrderType==1 || orderObject->orsPushOrderType==1) {
rObj.insert("fm_cmd", "put_order");
} else {
rObj.insert("fm_cmd", "refund_order");
}
rObj.insert("fm_ver", "1.0");
cObj.insert("pay_id", "002");
cObj.insert("pay_str", QString::fromLocal8Bit("FmTakeout"));
int tempOrderType,tempOrderPayType,tempSbkAppPayType=0;
QString tempSbkAppPayValue="0";
// 转换成星巴克规定的订单类型;
//星巴克的订单类型:1:新订单; 2:预订单; 3:客诉单; 4:MOP自测订单; 5:预约订单
if(3 == orderObject->getOrderType()) {
tempOrderType = 12;
tempOrderPayType = 21;
}//MOP自测订单 在下方处理;星巴克-预约订单:在下方处理;
// OMS提供的数据://订单渠道: 星巴克-MOD,百度外卖,饿了么APP,美团外卖,星巴克-MOP;
// MOD渠道对应的业务逻辑;
else if("MOD" == orderObject->channel) {
tempOrderType = 9;
tempOrderPayType = 84;
//星巴克App端支付方式: 1:支付宝; 2:微信; 3:银联; 4:SVC卡; 5/7:MOP使用券或星星抵扣 0元支付; 8:IStore订单; 9:银联支付(=3);
if(4 == orderObject->payWay){
tempSbkAppPayType = 14 ;
//svc卡支付时传交易流水号协定:
if(OrderObject::Refunded == orderObject->orderStatus ||OrderObject::SimExceptRefund == orderObject->orderStatus){
tempSbkAppPayValue = orderObject->refundFmId.isEmpty()?QString("0"):orderObject->refundFmId;
}else{
tempSbkAppPayValue = orderObject->payfmId;
}
}else if(1 == orderObject->payWay){
tempSbkAppPayType = 78;
tempSbkAppPayValue = (orderObject->thirdPartyBatch).length()?orderObject->thirdPartyBatch :QString("0");
}else if(2 == orderObject->payWay){
tempSbkAppPayType = 77;
tempSbkAppPayValue = (orderObject->thirdPartyBatch).length()?orderObject->thirdPartyBatch :QString("0");
//防止后期 MOD 使用 券 + 星星折扣 +(券&星星折扣)用户不用实际支付任何金额,需要采用0元支付方式结单;
//插件传给Simphony扩展程序时支付方式=1;在Simphony扩展程序将其转换成 84:MOD + 非码订单:orderId 入机;
}else if(5 == orderObject->payWay || 7 == orderObject->payWay){
tempOrderPayType = 1;
}else{
tempSbkAppPayType = -1;
tempSbkAppPayValue = "-1";
}
} // MOP渠道对应的业务逻辑;
else if("MOP" == orderObject->channel){
tempOrderType = 18;
tempOrderPayType = 84;
//星巴克App端支付方式: 1:支付宝; 2:微信; 3:银联; 4:SVC卡; 5/7:MOP使用券或星星抵扣 0元支付; 8:IStore订单; 9:银联支付(=3);
if(4 == orderObject->payWay){
tempSbkAppPayType = 14 ;
//svc卡支付时传交易流水号协定:
if(OrderObject::Refunded == orderObject->orderStatus ||OrderObject::SimExceptRefund == orderObject->orderStatus){
tempSbkAppPayValue = orderObject->refundFmId.isEmpty()?QString("0"):orderObject->refundFmId;
}else{
tempSbkAppPayValue = orderObject->payfmId;
}
}else if(1 == orderObject->payWay){
tempSbkAppPayType = 78;
tempSbkAppPayValue = (orderObject->thirdPartyBatch).length()?orderObject->thirdPartyBatch :QString("0");
}else if(2 == orderObject->payWay){
tempSbkAppPayType = 77;
tempSbkAppPayValue = (orderObject->thirdPartyBatch).length()?orderObject->thirdPartyBatch :QString("0");
//针对使用 券 + 星星折扣 +(券&星星折扣)用户不用实际支付任何金额,需要采用0元现金支付方式结单;
//插件传给Simphony扩展程序时支付方式=1;在Simphony扩展程序将其转换成 84:MOD + 非码订单:orderId 入机;
}else if(5 == orderObject->payWay || 7 == orderObject->payWay){
tempOrderPayType = 1;
}else{
tempSbkAppPayType = -1;
tempSbkAppPayValue = "-1";
}
//MOP最后判断 是否是 MOP自测订单;
if(4== orderObject->getOrderType()) {
tempOrderType = 20;
tempOrderPayType = 1;
}
}else if("BAIDU" == orderObject->channel){
tempOrderType = 11;
tempOrderPayType = 83;
tempSbkAppPayValue = orderObject->id;
//新增智能自提柜渠道:类似MOP;
}else if("STC" == orderObject->channel){
tempOrderType = 25;
tempOrderPayType = 84;
//星巴克 自提柜 端支付方式(类似星巴克App): 1:支付宝; 2:微信; 3:银联; 4:SVC卡; 5/7:MOP使用券或星星抵扣 0元支付; 8:IStore订单; 9:银联支付(=3);
if(4 == orderObject->payWay){
tempSbkAppPayType = 14 ;
//svc卡支付时传交易流水号协定:
if(OrderObject::Refunded == orderObject->orderStatus ||OrderObject::SimExceptRefund == orderObject->orderStatus){
tempSbkAppPayValue = orderObject->refundFmId.isEmpty()?QString("0"):orderObject->refundFmId;
}else{
tempSbkAppPayValue = orderObject->payfmId;
}
}else if(1 == orderObject->payWay){
tempSbkAppPayType = 78;
tempSbkAppPayValue = (orderObject->thirdPartyBatch).length()?orderObject->thirdPartyBatch :QString("0");
}else if(2 == orderObject->payWay){
tempSbkAppPayType = 77;
tempSbkAppPayValue = (orderObject->thirdPartyBatch).length()?orderObject->thirdPartyBatch :QString("0");
//防止后期 MOD 使用 券 + 星星折扣 +(券&星星折扣)用户不用实际支付任何金额,需要采用0元现金支付方式结单;
//插件传给Simphony扩展程序时支付方式=1;在Simphony扩展程序将其转换成 84:MOD + 非码订单:orderId 入机;
}else if(5 == orderObject->payWay || 7 == orderObject->payWay){
tempOrderPayType = 1;
}else{
tempSbkAppPayType = -1;
tempSbkAppPayValue = "-1";
}
}else if("ELE" == orderObject->channel){
tempOrderType = 11;
tempOrderPayType = 83;
tempSbkAppPayValue = orderObject->id;
//星巴克-预约订单: 预约实物入机: 销售单订单类型:21; 退货单订单类型: 22;
//为了配合服务端调整:兼容 预约退货 不区分 预约配送费 与 预约实物;必须重点注意退货时支付方式赋值;
}else if("ORS" == orderObject->channel && orderObject->appointmentDayFlag ){
tempOrderType = 21;
//端支付方式: 15纸质卷 16电子卷;需要循环商品列表中的券支付方式;
tempOrderPayType = 15; //默认赋值为 纸质券支付;
//星巴克-预约订单: 配送费入机: 销售单订单类型:23; 退货单订单类型: 24;
}else if("ORS" == orderObject->channel && !orderObject->appointmentDayFlag ){
tempOrderType = 23;
tempOrderPayType = 84;
//预约系统 支付方式: 1:支付宝; 2:微信; 3:银联; 4:SVC卡; 5/7:MOP使用券或星星抵扣 0元支付; 8:IStore订单; 9:银联支付(=3);
if(4 == orderObject->payWay){
tempSbkAppPayType = 14 ;
//svc卡支付时传交易流水号协定:
if(OrderObject::Refunded == orderObject->orderStatus ||OrderObject::SimExceptRefund == orderObject->orderStatus){
tempSbkAppPayValue = orderObject->refundFmId.isEmpty()?QString("0"):orderObject->refundFmId;
}else{
tempSbkAppPayValue = orderObject->payfmId;
}
}else if(1 == orderObject->payWay){
tempSbkAppPayType = 78;
tempSbkAppPayValue = (orderObject->thirdPartyBatch).length()?orderObject->thirdPartyBatch :QString("0");
}else if(2 == orderObject->payWay){
tempSbkAppPayType = 77;
tempSbkAppPayValue = (orderObject->thirdPartyBatch).length()?orderObject->thirdPartyBatch :QString("0");
//针对使用 券 + 星星折扣 +(券&星星折扣)用户不用实际支付任何金额,需要采用0元现金支付方式结单;
//插件传给Simphony扩展程序时支付方式=1;在Simphony扩展程序将其转换成 84:MOD + 非码订单:orderId 入机;
}else if(5 == orderObject->payWay || 7 == orderObject->payWay){
tempOrderPayType = 1;
}else{
tempSbkAppPayType = -1;
tempSbkAppPayValue = "-1";
}
}else if("HM" == orderObject->channel){
tempOrderType = 14;
tempOrderPayType = 85;
tempSbkAppPayValue = orderObject->id;
}else{
tempOrderType = 11;
tempOrderPayType = 83;
tempSbkAppPayValue = orderObject->id;
}
//如果是退单,更新订单的来源类型; 需要考虑 订单二次入机方式;
//存在两种Case:正常退货单 && 【非预约日期(录配送费判断)/默认值是初始化0】; || 预约实物退货单 【&&预约实物送达日期 不支持此case】 || 预约退单:只能退配送费;
// 预约如果出现退单,也只能退配送费和打包费[不存在退预约实物(券)]
if (orderObject->pushOrderType==0) {
if("ELE" == orderObject->channel) {
tempOrderType = 16;
//STC: SmartCase 智能自提不存在退货入机可能; + MOD客诉单不存在退货入机可能;
} else if( "STC" == orderObject->channel || 3==orderObject->getOrderType() ) {
m_OrderEntryMutex.lock();
m_simValidOrdersList.removeOne(orderObject->id);
m_OrderEntryMutex.unlock();
m_bFloatFromLockSt = false; //解锁悬浮框的锁定状态=false;
emit doUnLockFloatFrom(); //无需显示mainFrom主界面;//但必须解锁之前锁定的悬浮框;
return true;
} else if("MOD" == orderObject->channel) {
tempOrderType = 17;
} else if("MOP" == orderObject->channel) {
tempOrderType = 19;
//预约->配送费入机: 销售单订单类型:23; 退货单订单类型: 24; //预约->实物入机: 销售单订单类型:21;退货单订单类型:22;【此case不存在】
} else if("ORS" == orderObject->channel) {
tempOrderType = 24;
tempOrderPayType = 84;
//预约系统 支付方式: 1:支付宝; 2:微信; 3:银联; 4:SVC卡; 5/7:MOP使用券或星星抵扣 0元支付; 8:IStore订单; 9:银联支付(=3);
if(4 == orderObject->payWay){
tempSbkAppPayType = 14 ;
//svc卡支付时传交易流水号协定:
if(OrderObject::Refunded == orderObject->orderStatus ||OrderObject::SimExceptRefund == orderObject->orderStatus){
tempSbkAppPayValue = orderObject->refundFmId.isEmpty()?QString("0"):orderObject->refundFmId;
}else{
tempSbkAppPayValue = orderObject->payfmId;
}
}else if(1 == orderObject->payWay){
tempSbkAppPayType = 78;
tempSbkAppPayValue = (orderObject->thirdPartyBatch).length()?orderObject->thirdPartyBatch :QString("0");
}else if(2 == orderObject->payWay){
tempSbkAppPayType = 77;
tempSbkAppPayValue = (orderObject->thirdPartyBatch).length()?orderObject->thirdPartyBatch :QString("0");
//针对使用 券 + 星星折扣 +(券&星星折扣)用户不用实际支付任何金额,需要采用0元现金支付方式结单;
//插件传给Simphony扩展程序时支付方式=1;在Simphony扩展程序将其转换成 84:MOD + 非码订单:orderId 入机;
}else if(5 == orderObject->payWay || 7 == orderObject->payWay){
tempOrderPayType = 1;
}
} else {
tempOrderType = 13; // 退货订单类型:13 已经过期; 后期还需要考虑MOP的正向订单类型/退货订单类型;
}
}
//需要重点注意订单对象的数据初始化问题;
cObj.insert("orderOriginType", tempOrderType);
cObj.insert("orderPayType", tempOrderPayType);
cObj.insert("sbkAppPayType", tempSbkAppPayType);
cObj.insert("sbkAppPayValue", tempSbkAppPayValue);
cObj.insert("orderTransFlowNo", (orderObject->thirdPartyBatch).length()?orderObject->thirdPartyBatch :QString("0") ); //第三方交易流水号
cObj.insert("packFree", orderObject->packageFee>0?orderObject->packageFee:0);
cObj.insert("packDiscount",orderObject->packDiscount>0?orderObject->packDiscount:0);
cObj.insert("deliveryFree", orderObject->deliveryPrice>0?orderObject->deliveryPrice:0);
cObj.insert("deliveryDiscount", orderObject->deliveryDiscount>0?orderObject->deliveryDiscount:0);
cObj.insert("orderDiscount", orderObject->orderDiscount);
cObj.insert("waybillId", (orderObject->waybillId).length()?orderObject->waybillId:QString("0") );
cObj.insert("pos_sale_id", orderObject->posCheckNo);
cObj.insert("order_status",orderObject->orderStatus);//订单的状态
cObj.insert("pay_ebcode", orderObject->channel);
cObj.insert("order_index", orderObject->orderIndex);
cObj.insert("customer_name", orderObject->customerName);
cObj.insert("customer_phone", orderObject->phone);
cObj.insert("customer_address", orderObject->addressDetail);
cObj.insert("delivery_time", orderObject->deliveryTime);
cObj.insert("create_time",orderObject->createTime);
cObj.insert("remark", orderObject->memo);
cObj.insert("has_invoice",orderObject->needInvoice);
cObj.insert("invoice_title",orderObject->invoiceTitle);
cObj.insert("pay_ebcode_str", orderObject->channel);
//TODO
cObj.insert("products_fee", orderObject->productPrice); // 商品金额
cObj.insert("service_fee", /*orderObject->service_fee*/0); // 平台佣金
cObj.insert("discount_fee", /*orderObject->disPlateformFee*/0); //平台优惠总额
//只有这个字段(discount_fee)传个Simphony(代表平台优惠给POS系统),对应的字段是dis_shop_fee :平台优惠总额 只能通过 dis_shop_fee 字段传递给 POS;
cObj.insert("dis_shop_fee", abs(orderObject->disPlateformFee)); // 商家承担优惠金额(实际传递的是: 平台优惠金额 orderObject->disPlateformFee);
//只有星巴克App 才挂MSR的虚拟卡号;目前饿了么也要挂MSR的虚拟卡号;卡号是空 则 MSR_NO='-1' 卡号不入机;
QString temp_MSR_NO;
temp_MSR_NO = (orderObject->msr_no.length()==0)?orderObject->customerId:orderObject->msr_no;
temp_MSR_NO = (temp_MSR_NO.length()==0)?QString::fromLocal8Bit("-1"):temp_MSR_NO;
cObj.insert("msr_card_no", temp_MSR_NO); // MSR卡号
cObj.insert("dis_platform_fee", /*orderObject->dis_platform_fee*/0); // 平台承担优惠金额
cObj.insert("shop_fee", /*orderObject->total_fee-orderObject->send_fee-orderObject->service_fee-orderObject->dis_shop_fee*/0); // 商户能够拿到的钱(去除平台佣金)
cObj.insert("invoice_amount",orderObject->totalPrice);
if("ELE" == orderObject->channel || "STC" == orderObject->channel || "HM" == orderObject->channel){
cObj.insert("thirdPartyOrderId",orderObject->thirdPartyOrderId);
} else {
cObj.insert("thirdPartyOrderId","0");
}
cObj.insert("paid_trans_id",orderObject->id);
//cObj.insert("fm_id",orderObject->fm_id);
/************************************************************************************/
int hasCashbox = 0 ,hasRefundAuth = 0;
hasCashbox = GetCaboxAReAuth::getInstance().getUserHasCashBox(m_cashierId);
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("hasRefundAuth",hasRefundAuth);
/************************************************************************************/
rObj.insert("pay_id", cObj);
QJsonArray products;
QJsonArray coupons;
QJsonArray payments;
/**********************************************************************************/
// 循环订单的最外层商品列表;
/**********************************************************************************/
for(int i=0; i < orderObject->proList.count(); i++) {
dishesObject* dish=orderObject->proList.at(i);
// promotion优惠计数器变量;
int promotionTempNo = 0;
// starPromotion 星星优惠计数器变量;
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");
m_OrderEntryMutex.lock();
m_simValidOrdersList.removeOne(orderObject->id);
m_OrderEntryMutex.unlock();
m_bFloatFromLockSt = false; //解锁悬浮框的锁定标志;
emit doUnLockFloatFrom(); //解锁悬浮框锁定
return true;
}
continue;
}
/**********************************************************************************/
//针对同一商品,多份数量需要将其,拆分成单份;[如果不拆分,将导致多份商品中配料价格出现 漏钱:POS中的账将会出现少金额]
/**********************************************************************************/
for (int temp_qty = 0; temp_qty < dish->qty; temp_qty++) {
//声明临时栈对象: 单个主商品 + 子商品列表 + 子商品;
QJsonObject tObj;
QJsonArray subProduct;
QJsonObject sObj;
tObj.insert("consume_num", 1);
tObj.insert("pid", dish->code);
tObj.insert("original_price", dish->price);
/**********************************************************************************/
// 处理原始的配料信息;
/**********************************************************************************/
if(!dish->sub_products.isEmpty()) {
for(int j=0; j < dish->sub_products.count(); j++) {
dishesObject* subDish=dish->sub_products.at(j);
//默认属性直接跳过;
if(!subDish->code.isEmpty() && !subDish->code.contains("Default",Qt::CaseInsensitive) && subDish->qty ) {
sObj.insert("consume_num", subDish->qty);
sObj.insert("pid", subDish->code);
sObj.insert("original_price", subDish->price);
subProduct.push_back(sObj);
}
}
}
/**********************************************************************************/
// 处理商品的属性(热 -> 特别热)的额外配料信息;
/**********************************************************************************/
if(dish->options.length()){
sObj.insert("consume_num", 1);
sObj.insert("pid", dish->options);
sObj.insert("original_price", 0);
subProduct.push_back(sObj);
}
/**********************************************************************************/
// 处理商品的优惠金额信息;针对单个商品多数量情况:需要将这部分优惠折扣金额放在前面 拆分数量的商品上[多少个折扣券,放在前几个商品上,一个上面下对应一个折扣项];
// 单项商品的折扣数量最多不超过55个(60个会导致POS死机);当个优惠价格不超2000元;
/**********************************************************************************/
int promotionSum = (dish->promotionQty>0 && dish->promotionQty<55)?dish->promotionQty:0;
int promotionPrice = (dish->promotionPrice>1 && dish->promotionPrice<200000)?dish->promotionPrice:0;
if(promotionTempNo < promotionSum){
if(promotionSum && promotionPrice && dish->promotionSku.length()){
sObj.insert("consume_num", 1);
sObj.insert("pid", dish->promotionSku);
sObj.insert("original_price", promotionPrice);
subProduct.push_back(sObj);
promotionTempNo++;
}
}
/**********************************************************************************/
// 新增支持星星优惠;
int starPromotionSum = (dish->starPromotionQty>0 && dish->starPromotionQty<55)?dish->starPromotionQty:0;
int starPromotionPrice = (dish->starPromotionPrice>1 && dish->starPromotionPrice<200000)?dish->starPromotionPrice:0;
if(starPromotionTempNo < starPromotionSum){
if(starPromotionSum && starPromotionPrice && dish->starPromotionSku.length()){
sObj.insert("consume_num", 1);
sObj.insert("pid", dish->starPromotionSku);
sObj.insert("original_price", starPromotionPrice);
subProduct.push_back(sObj);
starPromotionTempNo++;
}
}
/**********************************************************************************/
// 汇总插入子商品[sub_products];
if(subProduct.size()){
tObj.insert("sub_products",subProduct);
} // end 整合子商品结束;
//products.insert(i, tObj); //防止default*的主商品码出现,上面代码出现continue;导致 i出现跳数,插入时出现崩溃;
products.push_back(tObj);
}
}
//**********************************整合预约券信息-begin*****************************************//
// 循环订单的 券 列表 [进入循环条件: 存在券列表; 且是预约实物入机(预约实物退货:业务上不支持此case)];
/**********************************************************************************/
for(int i=0; i < orderObject->coupList.count() && (21==tempOrderType) ; i++) {
CouponsObject* coupon=orderObject->coupList.at(i);
QJsonObject tCoupObj;
/**********************************************************/
// 先整合非门店售券的所有三方券列表数据;
/**********************************************************/
//为了方便后续追踪需要录入一个MOD(84)0元支付方式;
if(0==i){
QJsonObject tStarbusAppFmIdObj;;
tStarbusAppFmIdObj.insert("couponSeq",QString::number(0) ) ; //券的序号
tStarbusAppFmIdObj.insert("couponCode",orderObject->id.right(24)); //存放非码订单号(防止存不下,自动截取后24位): couponCode目前最长19位长度;DLL设置24长度;
tStarbusAppFmIdObj.insert("couponType",QString("0"));
tStarbusAppFmIdObj.insert("payMethodId",QString("84")); //订单支付方式:MOD(84) 0元支付方式 ;
tStarbusAppFmIdObj.insert("consumeFactAmount",0);
coupons.push_back(tStarbusAppFmIdObj);
}
//先跳过门店售券,现金支付:最后在补录一个现金支付方式;
if(!coupon->storeChannel){
tCoupObj.insert("couponSeq",QString::number(i+1) ) ; //券的序号
tCoupObj.insert("couponCode",coupon->code); //准确的券号码;例: 7019380051100056143 目前最长 19位长度;
tCoupObj.insert("couponType",coupon->couponType);
tCoupObj.insert("payMethodId",coupon->payMethodId); //券支付方式: 15纸质卷 16电子卷 ;
tCoupObj.insert("consumeFactAmount",coupon->consumeFactAmount/100); //券实际支付金额 (单位:元);
coupons.push_back(tCoupObj);
}
/**********************************************************/
// 整合所有券核销的商品+券折扣 列表数据;
/**********************************************************/
for (int tempSkuSeq = 0; tempSkuSeq < coupon->skus.size(); tempSkuSeq++) {
//声明临时栈对象: 单个券关联商品;
QJsonObject tCoupProductObj;
tCoupProductObj.insert("couponSeq", QString::number(i+1) );
tCoupProductObj.insert("consume_num", 1);
tCoupProductObj.insert("pid", coupon->skus[tempSkuSeq]->code);
//如果单品是券menuItem: 手动将商品单价赋值为 1元 (100分);
//由于预约蛋糕实物考虑,需要考虑 门店券 蛋糕的Combo头开始会限定后续蛋糕子项的价格后面的价格是否会都是0;
if (coupon->skus[tempSkuSeq]->isCoupon) {
tCoupProductObj.insert("original_price",100);
}else{
tCoupProductObj.insert("original_price",0);
}
products.push_back(tCoupProductObj);
//如果单品是券menuItem: 需要将券折扣挂在此券单品名下;
if(coupon->skus[tempSkuSeq]->isCoupon && coupon->discount.length()){
//声明临时栈对象: 券关联折扣; 券折扣:默认不需要传券序号,得赋值给空;
QJsonObject tCoupProductDiscObj;
tCoupProductDiscObj.insert("consume_num", 1);
tCoupProductDiscObj.insert("pid", coupon->discount);
tCoupProductDiscObj.insert("original_price", coupon->consumeDiscountAmount);
products.push_back(tCoupProductDiscObj);
}
}
/*由于UPP返回的menu 是券combo,无法通过Simphony程序方式将combo正常录入POS;*/
//针对蛋糕券:上面没有一个商品是 券单品,从而也就没有将券折扣录入;需要补录;
if (coupon->discount.length() && ( QString("1") == coupon->couponType ) ) {
//声明临时栈对象: 券关联折扣;
QJsonObject tCakeCoupProductDiscObj;
//券折扣:默认不需要传券号,得赋值给空;
tCakeCoupProductDiscObj.insert("consume_num", 1);
tCakeCoupProductDiscObj.insert("pid", coupon->discount);
tCakeCoupProductDiscObj.insert("original_price", coupon->consumeDiscountAmount);
products.push_back(tCakeCoupProductDiscObj);
}
//针对蛋糕券:在商品列表尾部需要新增 MenuItem:9107829 【测试蛋糕入机后,确认不需要在添加这个sku:“----” 】;
}
//开头已经新增一条【MOD:84 0元支付方式外】
//**********************************整合预约券信息-end*****************************************//
//**********************************整合多支付方式信息-begin*****************************************//
// 循环订单的 多支付方式列表 [进入循环条件: 存在多支付方式列表 && 不是预约实物入机];
/**********************************************************************************/
for(int i=0; i < orderObject->paymentList.count() && (21!=tempOrderType) ; i++) {
PaymentObject* payment=orderObject->paymentList.at(i);
QJsonObject tPaymentObj;
//如果是ELEME的istore 订单,需要额外录入一个标志IStore订单: 8==orderObject->payWay
//如果是App银联支付的多笔支付方式;也必须额外录入一条84的支付方式;
if(0==i){
/**** orderObject->payWay: 8 ->IStore渠道订单(87:istore 0元支付方式); 3/9 ->App银联支付标志(84:MOD 0元支付方式) ****/
if( 8 == orderObject->payWay ) {
QJsonObject tIStoreOrderPayFlagObj;
tIStoreOrderPayFlagObj.insert("couponSeq",QString::number(0) ) ; //支付方式的序号
tIStoreOrderPayFlagObj.insert("couponType",QString("0"));
//存放eleme订单号(运单号)(防止存不下,自动截取后24位): couponCode目前最长19位长度;DLL设置24长度;
tIStoreOrderPayFlagObj.insert("couponCode",orderObject->thirdPartyOrderId.right(24));
tIStoreOrderPayFlagObj.insert("payMethodId",QString("87"));
tIStoreOrderPayFlagObj.insert("consumeFactAmount",0);
payments.push_back(tIStoreOrderPayFlagObj);
} else if( 9 == orderObject->payWay || 3 == orderObject->payWay ) {
QJsonObject tStarbAppOrderPayFlagObj;
tStarbAppOrderPayFlagObj.insert("couponSeq",QString::number(0) ) ; //支付方式的序号
tStarbAppOrderPayFlagObj.insert("couponType",QString("0"));
//存放非码订单号(防止存不下,自动截取后24位): couponCode目前最长19位长度;DLL设置24长度;
tStarbAppOrderPayFlagObj.insert("couponCode",orderObject->id.right(24));
tStarbAppOrderPayFlagObj.insert("payMethodId",QString("84"));
tStarbAppOrderPayFlagObj.insert("consumeFactAmount",0);
payments.push_back(tStarbAppOrderPayFlagObj);
}
}
tPaymentObj.insert("couponSeq",QString::number(i+1) ) ; //券的序号
tPaymentObj.insert("couponCode",payment->paymentFmId); //准确的券号码;例: 7019380051100056143 目前最长 19位长度;
tPaymentObj.insert("couponType",QString("0"));
tPaymentObj.insert("payMethodId",payment->payMethodId); //券支付方式: 15纸质卷 16电子卷 ;
tPaymentObj.insert("consumeFactAmount",payment->paymentMoney/100); //券实际支付金额 (单位:元);
payments.push_back(tPaymentObj);
}
//**********************************整合多支付方式信息-end*****************************************//
//向商品列表中 添加 是否打包的SKU;
if(orderObject->isPackage && orderObject->packageSku.length()) {
QJsonObject tPackageObj;
tPackageObj.insert("consume_num", 1);
tPackageObj.insert("pid", orderObject->packageSku);
tPackageObj.insert("original_price", 0);
products.push_back(tPackageObj);
}
/* 需要将 到店做 SKU 分配的每个主商品的配料的最尾部:此部分逻辑放到 服务端处理;向商品列表中 添加 是否到店做SKU;*/
//**********************************整合包装费-begin*****************************************//
//向商品列表尾部 添加 包装费项 + 包装费折扣项[预约实物不能录入配送费 && 预约配送费需要入机];
// 包装费 >0 且 预约实物包装费 + MOP 也不能入机;
if(orderObject->packageFee > 0 && 18!=tempOrderType && 19!=tempOrderType && 20!=tempOrderType && 21!=tempOrderType && 22!=tempOrderType && 25!=tempOrderType ) {
QJsonObject tPackageFeeObj;
tPackageFeeObj.insert("consume_num", orderObject->packageFee/100);
tPackageFeeObj.insert("pid", "6000201"); //包装费SKU;
tPackageFeeObj.insert("original_price", 100);
products.push_back(tPackageFeeObj);
//星巴克APP/预约系统的支付方式是84; ELE的支付方式是83; [MOP不应该存在打包费且不存在包装费折扣]
if(orderObject->packDiscount>0 && 84 == tempOrderPayType){
QJsonObject tPackDiscountObj;
tPackDiscountObj.insert("consume_num", 1);
tPackDiscountObj.insert("pid","285"); //星巴克APP万能折扣码;
tPackDiscountObj.insert("original_price", orderObject->packDiscount);
products.push_back(tPackDiscountObj);
}else if(orderObject->packDiscount>0 && 83 == tempOrderPayType) {
QJsonObject tPackDiscountObj;
tPackDiscountObj.insert("consume_num", 1);
tPackDiscountObj.insert("pid","10400"); //ELEME万能折扣码;
tPackDiscountObj.insert("original_price", orderObject->packDiscount);
products.push_back(tPackDiscountObj);
}
//打包费是0元时(预约实物 + MOP 包装费不能入机):需录入打包费[非-MOP(销售退货),非-MOP测试];
} else if (0 == orderObject->packageFee && 18!=tempOrderType && 19!=tempOrderType && 20!=tempOrderType && 21!=tempOrderType && 22!=tempOrderType && 25!=tempOrderType) {
QJsonObject tPackageFeeObj;
tPackageFeeObj.insert("consume_num", 1);
tPackageFeeObj.insert("pid","6000201"); //包装费SKU;
tPackageFeeObj.insert("original_price", 0);
products.push_back(tPackageFeeObj);
}
//**********************************整合包装费-end*****************************************//
//**********************************整合配送费-begin*****************************************//
//向商品列表尾部 添加 配送费项 + 配送费折扣项 [预约实物不能录入配送费 && 预约配送费需要入机];
if(orderObject->deliveryPrice > 0 && 18!=tempOrderType && 19!=tempOrderType && 20!=tempOrderType && 21!=tempOrderType && 22!=tempOrderType && 25!=tempOrderType) {
QJsonObject tDeliveryFeeObj;
tDeliveryFeeObj.insert("consume_num", orderObject->deliveryPrice/100);
tDeliveryFeeObj.insert("pid", "6000101"); //配送费SKU;
tDeliveryFeeObj.insert("original_price", 100);
products.push_back(tDeliveryFeeObj);
//星巴克APP/预约系统的支付方式是84; ELE的支付方式是83; [MOP不应该存在配送费且不存在配送费折扣]
if(orderObject->deliveryDiscount>0 && 84 == tempOrderPayType){
QJsonObject tDeliveryDiscountObj;
tDeliveryDiscountObj.insert("consume_num", 1);
tDeliveryDiscountObj.insert("pid","285"); //星巴克APP万能折扣码;
tDeliveryDiscountObj.insert("original_price", orderObject->deliveryDiscount);
products.push_back(tDeliveryDiscountObj);
}else if(orderObject->deliveryDiscount>0 && 83 == tempOrderPayType) {
QJsonObject tDeliveryDiscountObj;
tDeliveryDiscountObj.insert("consume_num", 1);
tDeliveryDiscountObj.insert("pid","10400"); //ELEME万能折扣码;
tDeliveryDiscountObj.insert("original_price", orderObject->deliveryDiscount);
products.push_back(tDeliveryDiscountObj);
}
//配送费是0元时:需录入配送费[非-MOP(销售退货),非-MOP测试; 预约实物不能录入配送费 && 预约配送费需要入机];
} else if(0 == orderObject->deliveryPrice && 18!=tempOrderType && 19!=tempOrderType && 20!=tempOrderType && 21!=tempOrderType && 22!=tempOrderType && 25!=tempOrderType) {
QJsonObject tDeliveryFeeZoreObj;
tDeliveryFeeZoreObj.insert("consume_num", 1);
tDeliveryFeeZoreObj.insert("pid","6000101"); //配送费SKU;
tDeliveryFeeZoreObj.insert("original_price", 0);
products.push_back(tDeliveryFeeZoreObj);
}
//*********************************整合配送费-end******************************************//
//****************************整合订单商品列表末尾追加一个MenuItem:9107815 无其他-begin******************//
//此操作是防止一种异常情况发生: 退货 + 最后一个商品尾部存在一个折扣 + 且后面无客制化且无卡号 + 直接挂支付方式;
//避免在退货的dsc事件中 挂 支付方式信息;
if(1){
QJsonObject tDefaultWuQiTaObj;
tDefaultWuQiTaObj.insert("consume_num", 1);
tDefaultWuQiTaObj.insert("pid","9107815"); //无其他-SKU;
tDefaultWuQiTaObj.insert("original_price", 0);
products.push_back(tDefaultWuQiTaObj);
}
//****************************整合订单商品列表末尾追加一个MenuItem: 无其他-end******************//
//组装完成JSON 对象的商品数据;
rObj.insert("products", products);
//如果存在预约券信息,则不可能存在<多条支付方式>可能[App的银联支付+istore的多张SVC卡消费记录],两者相斥,但公用一个Dll[coupons]数据传输通道;
if( coupons.count() ) {
rObj.insert("coupons", coupons);
} else {
rObj.insert("coupons", payments);
}
data= rObj;
}
return result;
}
......
......@@ -74,9 +74,6 @@ int PmsOrdersData::convertPosServiceTypeId( const OrderObject* orderObj, const
else if ( 7== orderObj->getOrderType() ) {
tempOrderTypeId = 14;
}
else if ( 8== orderObj->getOrderType() ) {
tempOrderTypeId = 0;
}
// MOD渠道对应的业务逻辑 ; 星巴克-MOD,百度外卖,饿了么APP,美团外卖,星巴克-MOP;
else if("MOD" == orderObj->channel) {
// platformSource:平台来源:1 app;2 ele;3 ors;4 WeChat ;5 口碑;
......@@ -116,8 +113,6 @@ int PmsOrdersData::convertPosServiceTypeId( const OrderObject* orderObj, const
}else if("ORS" == orderObj->channel && !orderObj->appointmentDayFlag ){
tempOrderTypeId = 23;
//预约系统 支付方式: 1:支付宝; 2:微信; 3:银联; 4:SVC卡; 5/7:MOP使用券或星星抵扣 0元支付; 8:IStore订单; 9:银联支付(=3);
}else if("HM" == orderObj->channel){
tempOrderTypeId = 14;
}else{
tempOrderTypeId = 11;
}
......@@ -134,9 +129,6 @@ int PmsOrdersData::convertPosServiceTypeId( const OrderObject* orderObj, const
else if ( 7== orderObj->getOrderType() ) {
tempOrderTypeId = 15;
}
else if ( 8== orderObj->getOrderType() ) {
tempOrderTypeId = 0;
}
// MOD渠道对应的业务逻辑 ; 星巴克-MOD,百度外卖,饿了么APP,美团外卖,星巴克-MOP;
else if("MOD" == orderObj->channel) {
// platformSource:平台来源:1 app;2 ele;3 ors;4 WeChat; 5 口碑;
......
......@@ -44,14 +44,21 @@ void DetailForm::InitData(OrderObject *orderObject)
QLOG_INFO() << QString("[<<<<---DetailForm::InitData ui->detailLab0->setText --->>>>]");
ui->detailLab1->setText(QString("[ %1 ]:[ %2 ]:[%3:%4]").arg(orderObject->consigneeName,orderObject->consigneePhone,
QString::fromLocal8Bit("暗号"),orderObject->secretSignal));
//订单完成后,送达时间需要更新为 finishTime
if(OrderObject::Finished == orderObject->orderStatus){
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{
ui->detailLab2->setText(orderObject->deliveryTime);
QString deliveryFinishTime = "";
if (OrderObject::Finished == orderObject->orderStatus) {
deliveryFinishTime = (orderObject->finishTime.isEmpty() || 0==orderObject->finishTime.length() )? QString::fromLocal8Bit("已经送达") : orderObject->finishTime;
} else if (OrderObject::Refunded == orderObject->orderStatus) {
deliveryFinishTime = " ";
} else {
deliveryFinishTime = orderObject->deliveryTime;
}
if (7 == orderObject->orderType) {
deliveryFinishTime = deliveryFinishTime + QString::fromLocal8Bit("预约时间: ") + orderObject->expectDate;
}
ui->detailLab2->setText(deliveryFinishTime);
QLOG_INFO() << QString("[<<<<---DetailForm::InitData ui->detailLab2->setText --->>>>]");
ui->detailLab3->setText(orderObject->riderName.isEmpty() ? QString::fromLocal8Bit("暂未指定") : QString::fromLocal8Bit("[姓名]%1 [电话]%2")
......
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