- 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
|
var sortOrders StatusTimerSlice
|
||||||
for _, order := range orders {
|
for _, order := range orders {
|
||||||
if order.Status > model.OrderStatusNew {
|
if order.Status > model.OrderStatusNew {
|
||||||
order2 := *order
|
status := model.Order2Status(order)
|
||||||
sortOrders = append(sortOrders, &order2)
|
sortOrders = append(sortOrders, status)
|
||||||
}
|
}
|
||||||
order.Status = model.OrderStatusNew
|
// order.Status = model.OrderStatusNew // 就是要以实际order状态来调用scheduler.OnOrderNew
|
||||||
order.StatusTime = order.OrderCreatedAt
|
order.StatusTime = order.OrderCreatedAt
|
||||||
sortOrders = append(sortOrders, order)
|
sortOrders = append(sortOrders, order)
|
||||||
}
|
}
|
||||||
@@ -103,15 +103,13 @@ func LoadPendingOrders() {
|
|||||||
sort.Sort(sortOrders)
|
sort.Sort(sortOrders)
|
||||||
for _, item := range sortOrders {
|
for _, item := range sortOrders {
|
||||||
if order, ok := item.(*model.GoodsOrder); ok {
|
if order, ok := item.(*model.GoodsOrder); ok {
|
||||||
if order.Status == model.OrderStatusNew {
|
jxutils.CallMsgHandlerAsync(func() {
|
||||||
jxutils.CallMsgHandlerAsync(func() {
|
scheduler.CurrentScheduler.OnOrderNew(order, true)
|
||||||
scheduler.CurrentScheduler.OnOrderNew(order, true)
|
}, order.VendorOrderID)
|
||||||
}, order.VendorOrderID)
|
} else if status, ok := item.(*model.OrderStatus); ok {
|
||||||
} else {
|
jxutils.CallMsgHandlerAsync(func() {
|
||||||
jxutils.CallMsgHandlerAsync(func() {
|
scheduler.CurrentScheduler.OnOrderStatusChanged(status, true)
|
||||||
scheduler.CurrentScheduler.OnOrderStatusChanged(model.Order2Status(order), true)
|
}, order.VendorOrderID)
|
||||||
}, order.VendorOrderID)
|
|
||||||
}
|
|
||||||
} else {
|
} else {
|
||||||
bill := item.(*model.Waybill)
|
bill := item.(*model.Waybill)
|
||||||
jxutils.CallMsgHandlerAsync(func() {
|
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) {
|
func (c *OrderController) saveOrder(order *model.GoodsOrder, isAdjust bool, db orm.Ormer) (err error) {
|
||||||
// 忽略查找JX信息错误
|
// 忽略查找JX信息错误
|
||||||
c.updateOrderOtherInfo(order, db)
|
c.updateOrderOtherInfo(order, db)
|
||||||
db.Begin()
|
|
||||||
order.ID = 0
|
order.ID = 0
|
||||||
order.WaybillVendorID = model.VendorIDUnknown
|
order.WaybillVendorID = model.VendorIDUnknown
|
||||||
order.OrderFinishedAt = utils.DefaultTimeValue
|
order.OrderFinishedAt = utils.DefaultTimeValue
|
||||||
order.OrderCreatedAt = order.StatusTime
|
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)
|
globals.SugarLogger.Debugf("saveOrder isAdjust:%t, order:%v", isAdjust, order)
|
||||||
|
db.Begin()
|
||||||
created, _, err2 := db.ReadOrCreate(order, "VendorOrderID", "VendorID")
|
created, _, err2 := db.ReadOrCreate(order, "VendorOrderID", "VendorID")
|
||||||
if err = err2; err == nil {
|
if err = err2; err == nil {
|
||||||
if created {
|
if created {
|
||||||
@@ -260,7 +274,7 @@ func (c *OrderController) LoadOrder(vendorOrderID string, vendorID int) (order *
|
|||||||
}, "LoadOrder orderID:%s", vendorOrderID)
|
}, "LoadOrder orderID:%s", vendorOrderID)
|
||||||
}
|
}
|
||||||
if err != nil {
|
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
|
return order, err
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -42,3 +42,7 @@ func (o *GoodsOrder) GetStatusTime() time.Time {
|
|||||||
func (o *Waybill) GetStatusTime() time.Time {
|
func (o *Waybill) GetStatusTime() time.Time {
|
||||||
return o.StatusTime
|
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)
|
s.orderMap.StoreWithTimeout(jxutils.ComposeUniversalOrderID(order.VendorOrderID, order.VendorID), savedOrderInfo, orderMapStoreMaxTime)
|
||||||
} else {
|
} else {
|
||||||
savedOrderInfo.order = order // 调整单可能进到这里来
|
savedOrderInfo.order = order // 调整单或消息错序都可能进到这里来
|
||||||
}
|
}
|
||||||
s.resetTimer(savedOrderInfo, scheduler.TimerStatusTypeOrder, savedOrderInfo.order.Status, false)
|
s.resetTimer(savedOrderInfo, scheduler.TimerStatusTypeOrder, savedOrderInfo.order.Status, false)
|
||||||
return err
|
return err
|
||||||
|
|||||||
Reference in New Issue
Block a user