diff --git a/business/jxcallback/orderman/orderman.go b/business/jxcallback/orderman/orderman.go index 5e1a251a9..f1b406cdc 100644 --- a/business/jxcallback/orderman/orderman.go +++ b/business/jxcallback/orderman/orderman.go @@ -110,6 +110,7 @@ func LoadPendingOrders() { bills := FixedOrderManager.LoadPendingWaybills() globals.SugarLogger.Infof("LoadPendingOrders waybills count:%d", len(bills)) var sortOrders StatusTimerSlice + orderMap := make(map[string]*model.GoodsOrder) for _, order := range orders { if order.Status > model.OrderStatusNew { status := model.Order2Status(order) @@ -118,6 +119,7 @@ func LoadPendingOrders() { // order.Status = model.OrderStatusNew // 就是要以实际order状态来调用scheduler.OnOrderNew order.StatusTime = order.OrderCreatedAt sortOrders = append(sortOrders, order) + orderMap[jxutils.ComposeUniversalOrderID(order.VendorOrderID, order.VendorID)] = order } for _, bill := range bills { if bill.Status > model.WaybillStatusNew { @@ -141,7 +143,8 @@ func LoadPendingOrders() { }, order.VendorOrderID) } else if status, ok := item.(*model.OrderStatus); ok { jxutils.CallMsgHandlerAsync(func() { - scheduler.CurrentScheduler.OnOrderStatusChanged(status, true) + order := orderMap[jxutils.ComposeUniversalOrderID(status.VendorOrderID, status.VendorID)] + scheduler.CurrentScheduler.OnOrderStatusChanged(order, status, true) }, status.VendorOrderID) } else { bill := item.(*model.Waybill) diff --git a/business/jxcallback/scheduler/defsch/defsch.go b/business/jxcallback/scheduler/defsch/defsch.go index 61f5366b5..ab8c786f1 100644 --- a/business/jxcallback/scheduler/defsch/defsch.go +++ b/business/jxcallback/scheduler/defsch/defsch.go @@ -145,7 +145,7 @@ func init() { // 为了解决京东新消息与接单消息乱序的问题 if errWithCode, ok := err.(*utils.ErrorWithCode); ok && errWithCode.Level() == 1 && errWithCode.IntCode() == -1 { if order2, err2 := partner.GetPurchasePlatformFromVendorID(order.VendorID).GetOrder(order.VendorOrderID); err2 == nil && order2.Status > order.Status { - sch.OnOrderStatusChanged(model.Order2Status(order2), false) + sch.OnOrderStatusChanged(order, model.Order2Status(order2), false) err = nil } else { err = err2 @@ -241,7 +241,10 @@ func (s *DefScheduler) OnOrderNew(order *model.GoodsOrder, isPending bool) (err } // todo 这个接口应该可以直接传order的,因为在OrderManager中每次都生成了 -func (s *DefScheduler) OnOrderStatusChanged(status *model.OrderStatus, isPending bool) (err error) { +func (s *DefScheduler) OnOrderStatusChanged(order *model.GoodsOrder, status *model.OrderStatus, isPending bool) (err error) { + if order == nil { + globals.SugarLogger.Warnf("OnOrderStatusChanged order is nil, status:%s", utils.Format4Output(status, true)) + } if status.LockStatus != model.OrderStatusUnknown || (status.Status > model.OrderStatusMsg && status.Status != model.OrderStatusUnknown) { globals.SugarLogger.Debugf("OnOrderStatusChanged orderID:%s %s, status:%v", status.VendorOrderID, model.OrderStatusName[status.Status], status) savedOrderInfo := s.loadSavedOrderFromMap(status, true) diff --git a/business/jxcallback/scheduler/scheduler.go b/business/jxcallback/scheduler/scheduler.go index 6a5097e2a..2c66d3a60 100644 --- a/business/jxcallback/scheduler/scheduler.go +++ b/business/jxcallback/scheduler/scheduler.go @@ -36,7 +36,7 @@ var ( type IScheduler interface { // 以下是订单 OnOrderNew(order *model.GoodsOrder, isPending bool) (err error) - OnOrderStatusChanged(status *model.OrderStatus, isPending bool) (err error) + OnOrderStatusChanged(order *model.GoodsOrder, status *model.OrderStatus, isPending bool) (err error) // 以下是运单 OnWaybillStatusChanged(bill *model.Waybill, isPending bool) (err error)