- handle pending orders and waybills when starting.

This commit is contained in:
gazebo
2018-07-21 12:57:20 +08:00
parent 65eeef9966
commit 1958f24705
12 changed files with 134 additions and 50 deletions

View File

@@ -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
}