- 美团外卖实现调整单及订单申请取消

This commit is contained in:
gazebo
2019-04-19 11:21:09 +08:00
parent 7ee5f2fdd8
commit 893434e01e
3 changed files with 66 additions and 30 deletions

View File

@@ -33,16 +33,16 @@ const (
var ( var (
VendorStatus2StatusMap = map[string]int{ VendorStatus2StatusMap = map[string]int{
fakeOrderAdjustFinished: model.OrderStatusAdjust,
ebaiapi.OrderStatusNew: model.OrderStatusNew, ebaiapi.OrderStatusNew: model.OrderStatusNew,
fakeAcceptOrder: model.OrderStatusAccepted, fakeAcceptOrder: model.OrderStatusAccepted,
ebaiapi.OrderStatusAccepted: model.OrderStatusFinishedPickup, ebaiapi.OrderStatusAccepted: model.OrderStatusFinishedPickup,
fakeUserApplyCancel: model.OrderStatusApplyCancel,
ebaiapi.OrderStatusCourierAccepted: model.OrderStatusDelivering, ebaiapi.OrderStatusCourierAccepted: model.OrderStatusDelivering,
ebaiapi.OrderStatusCourierPickedup: model.OrderStatusDelivering, ebaiapi.OrderStatusCourierPickedup: model.OrderStatusDelivering,
ebaiapi.OrderStatusFinished: model.OrderStatusFinished, ebaiapi.OrderStatusFinished: model.OrderStatusFinished,
ebaiapi.OrderStatusCanceled: model.OrderStatusCanceled, ebaiapi.OrderStatusCanceled: model.OrderStatusCanceled,
fakeOrderAdjustFinished: model.OrderStatusAdjust,
fakeUserApplyCancel: model.OrderStatusApplyCancel,
} }
) )

View File

@@ -20,7 +20,6 @@ var (
VendorStatus2StatusMap = map[string]int{ VendorStatus2StatusMap = map[string]int{
jdapi.OrderStatusPurchased: model.OrderStatusNew, jdapi.OrderStatusPurchased: model.OrderStatusNew,
jdapi.OrderStatusNew: model.OrderStatusNew, jdapi.OrderStatusNew: model.OrderStatusNew,
jdapi.OrderStatusAdjust: model.OrderStatusAdjust,
jdapi.OrderStatusWaitOutStore: model.OrderStatusAccepted, jdapi.OrderStatusWaitOutStore: model.OrderStatusAccepted,
jdapi.OrderStatusFinishedPickup: model.OrderStatusFinishedPickup, jdapi.OrderStatusFinishedPickup: model.OrderStatusFinishedPickup,
jdapi.OrderStatusDelivering: model.OrderStatusDelivering, jdapi.OrderStatusDelivering: model.OrderStatusDelivering,
@@ -28,6 +27,7 @@ var (
jdapi.OrderStatusFinished: model.OrderStatusFinished, jdapi.OrderStatusFinished: model.OrderStatusFinished,
jdapi.OrderStatusCanceled: model.OrderStatusCanceled, jdapi.OrderStatusCanceled: model.OrderStatusCanceled,
jdapi.OrderStatusAdjust: model.OrderStatusAdjust,
jdapi.OrderStatusUserApplyCancel: model.OrderStatusApplyCancel, jdapi.OrderStatusUserApplyCancel: model.OrderStatusApplyCancel,
jdapi.OrderStatusLocked: model.OrderStatusLocked, jdapi.OrderStatusLocked: model.OrderStatusLocked,
jdapi.OrderStatusUnlocked: model.OrderStatusUnlocked, jdapi.OrderStatusUnlocked: model.OrderStatusUnlocked,

View File

@@ -20,10 +20,15 @@ import (
const ( const (
FakeMsgTypeOrderReceived = "orderReceived" FakeMsgTypeOrderReceived = "orderReceived"
FakeMsgTypeOrderDelivering = "orderDelivering" FakeMsgTypeOrderDelivering = "orderDelivering"
fakeUserApplyCancel = "fake_user_apply_cancel"
fakeOrderAdjustFinished = "fake_order_adjust_finished"
) )
const ( const (
SelfDeliveryCarrierNo = 1 // 美团配送方式0-美团专送1-商家自送 SelfDeliveryCarrierNo = 1 // 美团配送方式0-美团专送1-商家自送
) )
const ( const (
pickupOrderDelay = 260 * time.Second pickupOrderDelay = 260 * time.Second
@@ -41,6 +46,9 @@ var (
mtwmapi.OrderStatusDelivered: model.OrderStatusDelivered, mtwmapi.OrderStatusDelivered: model.OrderStatusDelivered,
mtwmapi.OrderStatusFinished: model.OrderStatusFinished, mtwmapi.OrderStatusFinished: model.OrderStatusFinished,
mtwmapi.OrderStatusCanceled: model.OrderStatusCanceled, mtwmapi.OrderStatusCanceled: model.OrderStatusCanceled,
fakeOrderAdjustFinished: model.OrderStatusAdjust,
fakeUserApplyCancel: model.OrderStatusApplyCancel,
} }
) )
@@ -162,21 +170,22 @@ func (c *PurchaseHandler) onOrderMsg(msg *mtwmapi.CallbackMsg) (response *mtwmap
} }
} }
} else { } else {
status := c.callbackMsg2Status(msg) if status := c.callbackMsg2Status(msg); status != nil {
err = partner.CurOrderManager.OnOrderStatusChanged(status) err = partner.CurOrderManager.OnOrderStatusChanged(status)
if err == nil && msg.Cmd == mtwmapi.MsgTypeOrderFinished { if err == nil && msg.Cmd == mtwmapi.MsgTypeOrderFinished {
utils.CallFuncAsync(func() { utils.CallFuncAsync(func() {
orderMap, err := api.MtwmAPI.OrderGetOrderDetail(utils.Str2Int64(GetOrderIDFromMsg(msg)), true) orderMap, err := api.MtwmAPI.OrderGetOrderDetail(utils.Str2Int64(GetOrderIDFromMsg(msg)), true)
if err == nil && utils.MustInterface2Int64(orderMap["is_third_shipping"]) == SelfDeliveryCarrierNo { if err == nil && utils.MustInterface2Int64(orderMap["is_third_shipping"]) == SelfDeliveryCarrierNo {
c.OnOrderDetail(orderMap, partner.UpdatedPeration) c.OnOrderDetail(orderMap, partner.UpdatedPeration)
} }
}) })
}
} }
} }
return mtwmapi.Err2CallbackResponse(err, "") 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) orderID := GetOrderIDFromMsg(msg)
vendorStatus := "" vendorStatus := ""
remark := "" remark := ""
@@ -191,21 +200,37 @@ func (c *PurchaseHandler) callbackMsg2Status(msg *mtwmapi.CallbackMsg) *model.Or
vendorStatus = msg.Data.Get("status") vendorStatus = msg.Data.Get("status")
statusTime = utils.Str2Int64(msg.Data.Get("utime")) statusTime = utils.Str2Int64(msg.Data.Get("utime"))
case mtwmapi.MsgTypeOrderRefund, mtwmapi.MsgTypeOrderPartialRefund: case mtwmapi.MsgTypeOrderRefund, mtwmapi.MsgTypeOrderPartialRefund:
vendorStatus = msg.Cmd notifyType := msg.Data.Get("notify_type")
remark = msg.Data.Get("reason") 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: default:
globals.SugarLogger.Errorf("mtwm unkonw msg:%s", utils.Format4Output(msg, false)) globals.SugarLogger.Errorf("mtwm unkonw msg:%s", utils.Format4Output(msg, false))
} }
orderStatus := &model.OrderStatus{ if vendorStatus != "" {
VendorOrderID: orderID, orderStatus = &model.OrderStatus{
VendorID: model.VendorIDMTWM, VendorOrderID: orderID,
OrderType: model.OrderTypeOrder, VendorID: model.VendorIDMTWM,
RefVendorOrderID: orderID, OrderType: model.OrderTypeOrder,
RefVendorID: model.VendorIDMTWM, RefVendorOrderID: orderID,
VendorStatus: vendorStatus, RefVendorID: model.VendorIDMTWM,
Status: c.GetStatusFromVendorStatus(vendorStatus), VendorStatus: vendorStatus,
StatusTime: getTimeFromTimestamp(statusTime), Status: c.GetStatusFromVendorStatus(vendorStatus),
Remark: remark, StatusTime: getTimeFromTimestamp(statusTime),
Remark: remark,
}
} }
return orderStatus return orderStatus
} }
@@ -235,9 +260,7 @@ func (c *PurchaseHandler) AcceptOrRefuseOrder(order *model.GoodsOrder, isAcceptI
c.postFakeMsg(order.VendorOrderID, FakeMsgTypeOrderReceived, mtwmapi.OrderStatusReceived) c.postFakeMsg(order.VendorOrderID, FakeMsgTypeOrderReceived, mtwmapi.OrderStatusReceived)
} }
} else { } else {
if globals.EnableMtwmStoreWrite { err = c.CancelOrder(jxcontext.AdminCtx, order, "bu")
err = api.MtwmAPI.OrderCancel(utils.Str2Int64(order.VendorOrderID), "bu", mtwmapi.CancelReasonOther)
}
} }
return err 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) { func (c *PurchaseHandler) CancelOrder(ctx *jxcontext.Context, order *model.GoodsOrder, reason string) (err error) {
if globals.EnableMtwmStoreWrite { 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 return err
} }
@@ -343,3 +369,13 @@ func (c *PurchaseHandler) AdjustOrder(ctx *jxcontext.Context, order *model.Goods
} }
return err 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
}