- pending order use real status when calling scheduler.OnOrderNew.
- set the order status to the proper value when there is a early message camme(saveOrder).
This commit is contained in:
@@ -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() {
|
||||
|
||||
@@ -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
|
||||
}
|
||||
|
||||
@@ -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
|
||||
}
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user