- handle pending orders and waybills when starting.
This commit is contained in:
@@ -15,11 +15,11 @@ import (
|
||||
)
|
||||
|
||||
const (
|
||||
defTime2Delivered = 1 * time.Hour // 正常订单都是1小时达
|
||||
defTime2Schedule3rdCarrier = 330 * time.Second // 京东要求5分钟后才能转自送,保险起见,设置为5分半钟
|
||||
time2Delivered = 1 * time.Hour // 正常订单都是1小时达
|
||||
time2Schedule3rdCarrier = 330 * time.Second // 京东要求5分钟后才能转自送,保险起见,设置为5分半钟
|
||||
time2Schedule3rdCarrierGap4OrderStatus = 3 * time.Minute // 京东要求是运单状态为待抢单且超时5分钟,但为了防止没有运单事件,所以就拣货完成事件开始算,添加3分钟
|
||||
defTime2AutoPickupMin = 10 * time.Minute
|
||||
time2AutoPickupGap = 2 * time.Minute
|
||||
time2AutoPickupMin = 15 * time.Minute
|
||||
time2AutoPickupGap = 5 * time.Minute
|
||||
)
|
||||
|
||||
type WatchOrderInfo struct {
|
||||
@@ -52,13 +52,13 @@ func init() {
|
||||
},
|
||||
},
|
||||
model.OrderStatusAccepted: &scheduler.StatusActionConfig{ // 自动拣货
|
||||
Timeout: defTime2AutoPickupMin,
|
||||
Timeout: time2AutoPickupMin,
|
||||
TimeoutAction: func(order *model.GoodsOrder) (err error) {
|
||||
return sch.GetPurchasePlatformFromVendorID(order.VendorID).PickedUpGoods(order)
|
||||
},
|
||||
},
|
||||
model.OrderStatusFinishedPickup: &scheduler.StatusActionConfig{ // 尝试召唤更多物流
|
||||
Timeout: defTime2Schedule3rdCarrier,
|
||||
Timeout: time2Schedule3rdCarrier,
|
||||
TimeoutAction: func(order *model.GoodsOrder) (err error) {
|
||||
return sch.createWaybillOn3rdProviders(order, nil)
|
||||
},
|
||||
@@ -74,11 +74,14 @@ func (s *DefScheduler) OnOrderNew(order *model.GoodsOrder) (err error) {
|
||||
}
|
||||
s.orderMap.Store(jxutils.ComposeUniversalOrderID(order.VendorOrderID, order.VendorID), watchInfo)
|
||||
s.resetTimer(watchInfo, model.OrderStatusNew, order.OrderCreatedAt, 0)
|
||||
if order.Status > model.OrderStatusNew {
|
||||
return s.OnOrderStatusChanged(model.Order2Status(order))
|
||||
}
|
||||
return err
|
||||
}
|
||||
|
||||
func (s *DefScheduler) OnOrderStatusChanged(status *model.OrderStatus) (err error) {
|
||||
if status.Status > model.OrderStatusUnknown {
|
||||
if status.Status > model.OrderStatusUnknown { // 只处理状态转换,一般消息不处理
|
||||
globals.SugarLogger.Debugf("OnOrderStatusChanged, status:%v", status)
|
||||
if savedOrderInfo := s.loadSavedOrderFromMap(status); savedOrderInfo != nil {
|
||||
s.updateOrderByStatus(savedOrderInfo.order, status)
|
||||
@@ -120,7 +123,7 @@ func (s *DefScheduler) OnWaybillStatusChanged(bill *model.Waybill) (err error) {
|
||||
if bill.OrderVendorID == bill.WaybillVendorID {
|
||||
if savedOrderInfo.timerStatus == model.OrderStatusFinishedPickup { // 如果当前TIMER还是OrderStatusFinishedPickup(在OnOrderStatusChanged中设置的),则重置
|
||||
s.resetTimer(savedOrderInfo, model.OrderStatusFinishedPickup, bill.WaybillCreatedAt, 0)
|
||||
} else {
|
||||
} else if savedOrderInfo.timerStatus != 0 {
|
||||
globals.SugarLogger.Infof("OnWaybillStatusChanged met other timer, status:%d", savedOrderInfo.timerStatus)
|
||||
}
|
||||
}
|
||||
@@ -215,7 +218,8 @@ func (s *DefScheduler) createWaybillOn3rdProviders(order *model.GoodsOrder, excl
|
||||
func (s *DefScheduler) cancelOtherWaybills(savedOrderInfo *WatchOrderInfo, bill *model.Waybill) (err error) {
|
||||
globals.SugarLogger.Debugf("cancelOtherWaybills, order:%v, bill:%v", savedOrderInfo.order, bill)
|
||||
for _, v := range savedOrderInfo.waybills {
|
||||
if bill == nil || v.WaybillVendorID != bill.OrderVendorID && !(v.WaybillVendorID == bill.WaybillVendorID && v.VendorWaybillID == bill.VendorWaybillID) {
|
||||
if bill == nil || (v.WaybillVendorID != bill.OrderVendorID && !(v.WaybillVendorID == bill.WaybillVendorID && v.VendorWaybillID == bill.VendorWaybillID)) {
|
||||
globals.SugarLogger.Debugf("cancelOtherWaybills, cancel bill:%v", bill)
|
||||
_ = s.GetDeliveryPlatformFromVendorID(v.WaybillVendorID).CancelWaybill(v)
|
||||
}
|
||||
}
|
||||
@@ -271,7 +275,7 @@ func (s *DefScheduler) loadSavedOrderFromMap(status *model.OrderStatus) *WatchOr
|
||||
|
||||
func (s *DefScheduler) getBeginTime4LatestPickup(order *model.GoodsOrder) (retVal time.Time) {
|
||||
if order.ExpectedDeliveredTime != utils.DefaultTimeValue {
|
||||
return order.ExpectedDeliveredTime.Add(-defTime2Delivered)
|
||||
return order.ExpectedDeliveredTime.Add(-time2Delivered)
|
||||
}
|
||||
return order.StatusTime
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user