diff --git a/business/controller/controller.go b/business/controller/controller.go index 4e8350c8a..98c932b6a 100644 --- a/business/controller/controller.go +++ b/business/controller/controller.go @@ -84,10 +84,10 @@ func LoadPendingOrders() { var sortOrders StatusTimerSlice for _, order := range orders { if order.Status > model.OrderStatusNew { - order2 := *order - sortOrders = append(sortOrders, &order2) + status := model.Order2Status(order) + sortOrders = append(sortOrders, status) } - order.Status = model.OrderStatusNew + // order.Status = model.OrderStatusNew // 就是要以实际order状态来调用scheduler.OnOrderNew order.StatusTime = order.OrderCreatedAt sortOrders = append(sortOrders, order) } @@ -103,15 +103,13 @@ func LoadPendingOrders() { sort.Sort(sortOrders) for _, item := range sortOrders { if order, ok := item.(*model.GoodsOrder); ok { - if order.Status == model.OrderStatusNew { - jxutils.CallMsgHandlerAsync(func() { - scheduler.CurrentScheduler.OnOrderNew(order, true) - }, order.VendorOrderID) - } else { - jxutils.CallMsgHandlerAsync(func() { - scheduler.CurrentScheduler.OnOrderStatusChanged(model.Order2Status(order), true) - }, order.VendorOrderID) - } + jxutils.CallMsgHandlerAsync(func() { + scheduler.CurrentScheduler.OnOrderNew(order, true) + }, order.VendorOrderID) + } else if status, ok := item.(*model.OrderStatus); ok { + jxutils.CallMsgHandlerAsync(func() { + scheduler.CurrentScheduler.OnOrderStatusChanged(status, true) + }, order.VendorOrderID) } else { bill := item.(*model.Waybill) jxutils.CallMsgHandlerAsync(func() { diff --git a/business/controller/order.go b/business/controller/order.go index 049de0973..522949470 100644 --- a/business/controller/order.go +++ b/business/controller/order.go @@ -114,12 +114,26 @@ func (c *OrderController) OnOrderStatusChanged(orderStatus *model.OrderStatus) ( func (c *OrderController) saveOrder(order *model.GoodsOrder, isAdjust bool, db orm.Ormer) (err error) { // 忽略查找JX信息错误 c.updateOrderOtherInfo(order, db) - db.Begin() order.ID = 0 order.WaybillVendorID = model.VendorIDUnknown order.OrderFinishedAt = utils.DefaultTimeValue order.OrderCreatedAt = order.StatusTime + + // hardcode 兼容京东消息错序问题 + orderStatus := &model.OrderStatus{ + VendorOrderID: order.VendorOrderID, + VendorID: order.VendorID, + OrderType: model.OrderTypeOrder, + } + if db.Read(orderStatus, "VendorOrderID", "VendorID", "OrderType") == nil { + globals.SugarLogger.Debugf("saveOrder orderID:%s get previous status:%d", order.VendorOrderID, orderStatus.Status) + order.Status = orderStatus.Status + order.VendorStatus = orderStatus.VendorStatus + order.StatusTime = orderStatus.StatusTime + } + globals.SugarLogger.Debugf("saveOrder isAdjust:%t, order:%v", isAdjust, order) + db.Begin() created, _, err2 := db.ReadOrCreate(order, "VendorOrderID", "VendorID") if err = err2; err == nil { if created { @@ -260,7 +274,7 @@ func (c *OrderController) LoadOrder(vendorOrderID string, vendorID int) (order * }, "LoadOrder orderID:%s", vendorOrderID) } if err != nil { - globals.SugarLogger.Warnf("LoadOrder orderID:%s failed with error:%v", vendorOrderID, err) + globals.SugarLogger.Infof("LoadOrder orderID:%s failed with error:%v", vendorOrderID, err) } return order, err } diff --git a/business/model/model.go b/business/model/model.go index ebe98d699..6024c5a52 100644 --- a/business/model/model.go +++ b/business/model/model.go @@ -42,3 +42,7 @@ func (o *GoodsOrder) GetStatusTime() time.Time { func (o *Waybill) GetStatusTime() time.Time { return o.StatusTime } + +func (o *OrderStatus) GetStatusTime() time.Time { + return o.StatusTime +} diff --git a/business/scheduler/defsch/defsch.go b/business/scheduler/defsch/defsch.go index a5fccb2e4..834bbdfe9 100644 --- a/business/scheduler/defsch/defsch.go +++ b/business/scheduler/defsch/defsch.go @@ -108,7 +108,7 @@ func (s *DefScheduler) OnOrderNew(order *model.GoodsOrder, isPending bool) (err } s.orderMap.StoreWithTimeout(jxutils.ComposeUniversalOrderID(order.VendorOrderID, order.VendorID), savedOrderInfo, orderMapStoreMaxTime) } else { - savedOrderInfo.order = order // 调整单可能进到这里来 + savedOrderInfo.order = order // 调整单或消息错序都可能进到这里来 } s.resetTimer(savedOrderInfo, scheduler.TimerStatusTypeOrder, savedOrderInfo.order.Status, false) return err