diff --git a/business/partner/purchase/ebai/order.go b/business/partner/purchase/ebai/order.go index 6ee8f1691..23b04b722 100644 --- a/business/partner/purchase/ebai/order.go +++ b/business/partner/purchase/ebai/order.go @@ -33,16 +33,16 @@ const ( var ( VendorStatus2StatusMap = map[string]int{ - fakeOrderAdjustFinished: model.OrderStatusAdjust, - ebaiapi.OrderStatusNew: model.OrderStatusNew, fakeAcceptOrder: model.OrderStatusAccepted, ebaiapi.OrderStatusAccepted: model.OrderStatusFinishedPickup, - fakeUserApplyCancel: model.OrderStatusApplyCancel, ebaiapi.OrderStatusCourierAccepted: model.OrderStatusDelivering, ebaiapi.OrderStatusCourierPickedup: model.OrderStatusDelivering, ebaiapi.OrderStatusFinished: model.OrderStatusFinished, ebaiapi.OrderStatusCanceled: model.OrderStatusCanceled, + + fakeOrderAdjustFinished: model.OrderStatusAdjust, + fakeUserApplyCancel: model.OrderStatusApplyCancel, } ) diff --git a/business/partner/purchase/jd/order.go b/business/partner/purchase/jd/order.go index 14dc50da6..48c19db5b 100644 --- a/business/partner/purchase/jd/order.go +++ b/business/partner/purchase/jd/order.go @@ -20,7 +20,6 @@ var ( VendorStatus2StatusMap = map[string]int{ jdapi.OrderStatusPurchased: model.OrderStatusNew, jdapi.OrderStatusNew: model.OrderStatusNew, - jdapi.OrderStatusAdjust: model.OrderStatusAdjust, jdapi.OrderStatusWaitOutStore: model.OrderStatusAccepted, jdapi.OrderStatusFinishedPickup: model.OrderStatusFinishedPickup, jdapi.OrderStatusDelivering: model.OrderStatusDelivering, @@ -28,6 +27,7 @@ var ( jdapi.OrderStatusFinished: model.OrderStatusFinished, jdapi.OrderStatusCanceled: model.OrderStatusCanceled, + jdapi.OrderStatusAdjust: model.OrderStatusAdjust, jdapi.OrderStatusUserApplyCancel: model.OrderStatusApplyCancel, jdapi.OrderStatusLocked: model.OrderStatusLocked, jdapi.OrderStatusUnlocked: model.OrderStatusUnlocked, diff --git a/business/partner/purchase/mtwm/order.go b/business/partner/purchase/mtwm/order.go index f4270dc69..6d3f7ee36 100644 --- a/business/partner/purchase/mtwm/order.go +++ b/business/partner/purchase/mtwm/order.go @@ -20,10 +20,15 @@ import ( const ( FakeMsgTypeOrderReceived = "orderReceived" FakeMsgTypeOrderDelivering = "orderDelivering" + + fakeUserApplyCancel = "fake_user_apply_cancel" + fakeOrderAdjustFinished = "fake_order_adjust_finished" ) + const ( SelfDeliveryCarrierNo = 1 // 美团配送方式:0-美团专送,1-商家自送 ) + const ( pickupOrderDelay = 260 * time.Second @@ -41,6 +46,9 @@ var ( mtwmapi.OrderStatusDelivered: model.OrderStatusDelivered, mtwmapi.OrderStatusFinished: model.OrderStatusFinished, mtwmapi.OrderStatusCanceled: model.OrderStatusCanceled, + + fakeOrderAdjustFinished: model.OrderStatusAdjust, + fakeUserApplyCancel: model.OrderStatusApplyCancel, } ) @@ -162,21 +170,22 @@ func (c *PurchaseHandler) onOrderMsg(msg *mtwmapi.CallbackMsg) (response *mtwmap } } } else { - status := c.callbackMsg2Status(msg) - err = partner.CurOrderManager.OnOrderStatusChanged(status) - if err == nil && msg.Cmd == mtwmapi.MsgTypeOrderFinished { - utils.CallFuncAsync(func() { - orderMap, err := api.MtwmAPI.OrderGetOrderDetail(utils.Str2Int64(GetOrderIDFromMsg(msg)), true) - if err == nil && utils.MustInterface2Int64(orderMap["is_third_shipping"]) == SelfDeliveryCarrierNo { - c.OnOrderDetail(orderMap, partner.UpdatedPeration) - } - }) + if status := c.callbackMsg2Status(msg); status != nil { + err = partner.CurOrderManager.OnOrderStatusChanged(status) + if err == nil && msg.Cmd == mtwmapi.MsgTypeOrderFinished { + utils.CallFuncAsync(func() { + orderMap, err := api.MtwmAPI.OrderGetOrderDetail(utils.Str2Int64(GetOrderIDFromMsg(msg)), true) + if err == nil && utils.MustInterface2Int64(orderMap["is_third_shipping"]) == SelfDeliveryCarrierNo { + c.OnOrderDetail(orderMap, partner.UpdatedPeration) + } + }) + } } } return mtwmapi.Err2CallbackResponse(err, "") } -func (c *PurchaseHandler) callbackMsg2Status(msg *mtwmapi.CallbackMsg) *model.OrderStatus { +func (c *PurchaseHandler) callbackMsg2Status(msg *mtwmapi.CallbackMsg) (orderStatus *model.OrderStatus) { orderID := GetOrderIDFromMsg(msg) vendorStatus := "" remark := "" @@ -191,21 +200,37 @@ func (c *PurchaseHandler) callbackMsg2Status(msg *mtwmapi.CallbackMsg) *model.Or vendorStatus = msg.Data.Get("status") statusTime = utils.Str2Int64(msg.Data.Get("utime")) case mtwmapi.MsgTypeOrderRefund, mtwmapi.MsgTypeOrderPartialRefund: - vendorStatus = msg.Cmd - remark = msg.Data.Get("reason") + notifyType := msg.Data.Get("notify_type") + vendorStatus = msg.Cmd + "-" + notifyType + if !isOrderFinished(utils.Str2Int64(orderID)) { + remark = msg.Data.Get("reason") + if msg.Cmd == mtwmapi.MsgTypeOrderPartialRefund { + if notifyType == mtwmapi.NotifyTypePartyApply { + api.MtwmAPI.OrderRefundAgree(utils.Str2Int64(orderID), "bu") // todo 自动同意调整单 + } else if notifyType == mtwmapi.NotifyTypeSuccess { + vendorStatus = fakeOrderAdjustFinished + } + } else if msg.Cmd == mtwmapi.MsgTypeOrderRefund { + if notifyType == mtwmapi.NotifyTypeApply { + vendorStatus = fakeUserApplyCancel + } + } + } default: globals.SugarLogger.Errorf("mtwm unkonw msg:%s", utils.Format4Output(msg, false)) } - orderStatus := &model.OrderStatus{ - VendorOrderID: orderID, - VendorID: model.VendorIDMTWM, - OrderType: model.OrderTypeOrder, - RefVendorOrderID: orderID, - RefVendorID: model.VendorIDMTWM, - VendorStatus: vendorStatus, - Status: c.GetStatusFromVendorStatus(vendorStatus), - StatusTime: getTimeFromTimestamp(statusTime), - Remark: remark, + if vendorStatus != "" { + orderStatus = &model.OrderStatus{ + VendorOrderID: orderID, + VendorID: model.VendorIDMTWM, + OrderType: model.OrderTypeOrder, + RefVendorOrderID: orderID, + RefVendorID: model.VendorIDMTWM, + VendorStatus: vendorStatus, + Status: c.GetStatusFromVendorStatus(vendorStatus), + StatusTime: getTimeFromTimestamp(statusTime), + Remark: remark, + } } return orderStatus } @@ -235,9 +260,7 @@ func (c *PurchaseHandler) AcceptOrRefuseOrder(order *model.GoodsOrder, isAcceptI c.postFakeMsg(order.VendorOrderID, FakeMsgTypeOrderReceived, mtwmapi.OrderStatusReceived) } } else { - if globals.EnableMtwmStoreWrite { - err = api.MtwmAPI.OrderCancel(utils.Str2Int64(order.VendorOrderID), "bu", mtwmapi.CancelReasonOther) - } + err = c.CancelOrder(jxcontext.AdminCtx, order, "bu") } return err } @@ -323,7 +346,10 @@ func (c *PurchaseHandler) AgreeOrRefuseCancel(ctx *jxcontext.Context, order *mod func (c *PurchaseHandler) CancelOrder(ctx *jxcontext.Context, order *model.GoodsOrder, reason string) (err error) { if globals.EnableMtwmStoreWrite { - err = api.MtwmAPI.OrderCancel(utils.Str2Int64(order.VendorOrderID), reason, mtwmapi.CancelReasonOther) + if err = api.MtwmAPI.OrderCancel(utils.Str2Int64(order.VendorOrderID), reason, mtwmapi.CancelReasonOther); err == nil { + // 调用开放平台接口取消订单,不推送取消订单消息和退款消息。 + c.postFakeMsg(order.VendorOrderID, mtwmapi.MsgTypeOrderCanceled, mtwmapi.OrderStatusCanceled) + } } return err } @@ -343,3 +369,13 @@ func (c *PurchaseHandler) AdjustOrder(ctx *jxcontext.Context, order *model.Goods } return err } + +func isOrderFinished(vendorOrderID int64) bool { + if status, err := api.MtwmAPI.OrderViewStatus(vendorOrderID); err == nil { + strStatus := utils.Int2Str(status) + return strStatus == mtwmapi.OrderStatusDelivered || + strStatus == mtwmapi.OrderStatusFinished || + strStatus == mtwmapi.OrderStatusCanceled + } + return false +}