ShouldSetTimer结构优化

This commit is contained in:
gazebo
2019-11-22 14:37:21 +08:00
parent 36403a3797
commit 61eb7d0546
2 changed files with 53 additions and 80 deletions

View File

@@ -88,6 +88,14 @@ type StatusActionConfig struct {
ShouldSetTimer func(savedOrderInfo *WatchOrderInfo, bill *model.Waybill) bool ShouldSetTimer func(savedOrderInfo *WatchOrderInfo, bill *model.Waybill) bool
} }
func (c *StatusActionConfig) CallTimeoutAction(savedOrderInfo *WatchOrderInfo, bill *model.Waybill) (err error) {
if c.TimeoutAction != nil &&
c.CallShouldSetTimer(savedOrderInfo, bill) {
err = c.TimeoutAction(savedOrderInfo, bill)
}
return err
}
func (c *StatusActionConfig) CallShouldSetTimer(savedOrderInfo *WatchOrderInfo, bill *model.Waybill) bool { func (c *StatusActionConfig) CallShouldSetTimer(savedOrderInfo *WatchOrderInfo, bill *model.Waybill) bool {
if c.ShouldSetTimer != nil { if c.ShouldSetTimer != nil {
return c.ShouldSetTimer(savedOrderInfo, bill) return c.ShouldSetTimer(savedOrderInfo, bill)
@@ -159,7 +167,6 @@ func init() {
Timeout: 10 * time.Millisecond, Timeout: 10 * time.Millisecond,
}, },
TimeoutAction: func(savedOrderInfo *WatchOrderInfo, bill *model.Waybill) (err error) { TimeoutAction: func(savedOrderInfo *WatchOrderInfo, bill *model.Waybill) (err error) {
if savedOrderInfo.order.LockStatus == model.LockStatusUnlocked && savedOrderInfo.order.Status == model.OrderStatusNew {
order := savedOrderInfo.order order := savedOrderInfo.order
mobile := order.ConsigneeMobile mobile := order.ConsigneeMobile
if order.ConsigneeMobile2 != "" { if order.ConsigneeMobile2 != "" {
@@ -193,7 +200,6 @@ func init() {
} }
return err return err
}) })
}
return nil return nil
}, },
ShouldSetTimer: func(savedOrderInfo *WatchOrderInfo, bill *model.Waybill) bool { ShouldSetTimer: func(savedOrderInfo *WatchOrderInfo, bill *model.Waybill) bool {
@@ -207,11 +213,9 @@ func init() {
TimeoutGap: second2AutoPickupGap, TimeoutGap: second2AutoPickupGap,
}, },
TimeoutAction: func(savedOrderInfo *WatchOrderInfo, bill *model.Waybill) (err error) { TimeoutAction: func(savedOrderInfo *WatchOrderInfo, bill *model.Waybill) (err error) {
if savedOrderInfo.autoPickupTimeoutMinute > 0 {
if err = sch.autoPickupGood(savedOrderInfo); err != nil { if err = sch.autoPickupGood(savedOrderInfo); err != nil {
partner.CurOrderManager.OnOrderMsg(savedOrderInfo.order, "自动拣货失败", err.Error()) partner.CurOrderManager.OnOrderMsg(savedOrderInfo.order, "自动拣货失败", err.Error())
} }
}
return nil return nil
}, },
ShouldSetTimer: func(savedOrderInfo *WatchOrderInfo, bill *model.Waybill) bool { ShouldSetTimer: func(savedOrderInfo *WatchOrderInfo, bill *model.Waybill) bool {
@@ -225,15 +229,12 @@ func init() {
TimeoutGap: 0, TimeoutGap: 0,
}, },
TimeoutAction: func(savedOrderInfo *WatchOrderInfo, bill *model.Waybill) (err error) { TimeoutAction: func(savedOrderInfo *WatchOrderInfo, bill *model.Waybill) (err error) {
if model.IsOrderDeliveryByStore(savedOrderInfo.order) { // 自配送商家使用
// 启动抢单TIMER // 启动抢单TIMER
sch.saveDeliveryFeeFromAndStartWatch(savedOrderInfo, savedOrderInfo.order.StatusTime) sch.saveDeliveryFeeFromAndStartWatch(savedOrderInfo, savedOrderInfo.order.StatusTime)
return sch.createWaybillOn3rdProviders(savedOrderInfo, 0, nil) return sch.createWaybillOn3rdProviders(savedOrderInfo, 0, nil)
}
return nil
}, },
ShouldSetTimer: func(savedOrderInfo *WatchOrderInfo, bill *model.Waybill) bool { ShouldSetTimer: func(savedOrderInfo *WatchOrderInfo, bill *model.Waybill) bool {
return model.IsOrderDeliveryByStore(savedOrderInfo.order) return model.IsOrderDeliveryByStore(savedOrderInfo.order) // 自配送商家使用
}, },
}, },
}, },
@@ -245,17 +246,11 @@ func init() {
Timeout: minute2Schedule3rdCarrier * time.Minute, Timeout: minute2Schedule3rdCarrier * time.Minute,
}, },
TimeoutAction: func(savedOrderInfo *WatchOrderInfo, bill *model.Waybill) (err error) { TimeoutAction: func(savedOrderInfo *WatchOrderInfo, bill *model.Waybill) (err error) {
// 饿百转自送的时机不太清楚,暂时禁用超时转自送,在饿百运单取消时还是会自动创建
if savedOrderInfo.isDeliveryCompetition &&
model.IsOrderDeliveryByPlatform(savedOrderInfo.order) &&
savedOrderInfo.order.VendorID == bill.WaybillVendorID &&
savedOrderInfo.order.VendorID != model.VendorIDEBAI &&
savedOrderInfo.order.DeliveryType != model.OrderDeliveryTypeSelfTake { // 非自配送商家使用
return sch.createWaybillOn3rdProviders(savedOrderInfo, 0, nil) return sch.createWaybillOn3rdProviders(savedOrderInfo, 0, nil)
}
return nil
}, },
ShouldSetTimer: func(savedOrderInfo *WatchOrderInfo, bill *model.Waybill) bool { ShouldSetTimer: func(savedOrderInfo *WatchOrderInfo, bill *model.Waybill) bool {
// 饿百转自送的时机不太清楚,暂时禁用超时转自送,在饿百运单取消时还是会自动创建
// 非自配送商家使用
return savedOrderInfo.isDeliveryCompetition && return savedOrderInfo.isDeliveryCompetition &&
model.IsOrderDeliveryByPlatform(savedOrderInfo.order) && model.IsOrderDeliveryByPlatform(savedOrderInfo.order) &&
savedOrderInfo.order.VendorID == bill.WaybillVendorID && savedOrderInfo.order.VendorID == bill.WaybillVendorID &&
@@ -270,19 +265,11 @@ func init() {
Timeout: 5 * time.Second, Timeout: 5 * time.Second,
}, },
TimeoutAction: func(savedOrderInfo *WatchOrderInfo, bill *model.Waybill) (err error) { TimeoutAction: func(savedOrderInfo *WatchOrderInfo, bill *model.Waybill) (err error) {
order := savedOrderInfo.order
if (order.Status >= model.OrderStatusFinishedPickup && order.Status < model.OrderStatusEndBegin) &&
savedOrderInfo.isDeliveryCompetition &&
savedOrderInfo.order.VendorID == bill.WaybillVendorID &&
model.IsOrderDeliveryByPlatform(savedOrderInfo.order) &&
order.VendorID == model.VendorIDEBAI &&
savedOrderInfo.order.DeliveryType != model.OrderDeliveryTypeSelfTake { // 非自配送商家使用
return sch.createWaybillOn3rdProviders(savedOrderInfo, ebaiCancelWaybillMaxFee, nil) return sch.createWaybillOn3rdProviders(savedOrderInfo, ebaiCancelWaybillMaxFee, nil)
}
return nil
}, },
ShouldSetTimer: func(savedOrderInfo *WatchOrderInfo, bill *model.Waybill) bool { ShouldSetTimer: func(savedOrderInfo *WatchOrderInfo, bill *model.Waybill) bool {
order := savedOrderInfo.order order := savedOrderInfo.order
// 非自配送商家使用
return (order.Status >= model.OrderStatusFinishedPickup && order.Status < model.OrderStatusEndBegin) && return (order.Status >= model.OrderStatusFinishedPickup && order.Status < model.OrderStatusEndBegin) &&
savedOrderInfo.isDeliveryCompetition && savedOrderInfo.isDeliveryCompetition &&
savedOrderInfo.order.VendorID == bill.WaybillVendorID && savedOrderInfo.order.VendorID == bill.WaybillVendorID &&
@@ -777,7 +764,7 @@ func (s *DefScheduler) resetTimer(savedOrderInfo *WatchOrderInfo, bill *model.Wa
timeout = 0 timeout = 0
} }
if timeout == 0 { if timeout == 0 {
config.TimeoutAction(savedOrderInfo, bill) config.CallTimeoutAction(savedOrderInfo, bill)
} else { } else {
timerName := "" timerName := ""
if statusType == scheduler.TimerStatusTypeOrder { if statusType == scheduler.TimerStatusTypeOrder {
@@ -792,7 +779,7 @@ func (s *DefScheduler) resetTimer(savedOrderInfo *WatchOrderInfo, bill *model.Wa
jxutils.CallMsgHandlerAsync(func() { jxutils.CallMsgHandlerAsync(func() {
globals.SugarLogger.Debugf("fire timer:%s, orderID:%s", timerName, order.VendorOrderID) globals.SugarLogger.Debugf("fire timer:%s, orderID:%s", timerName, order.VendorOrderID)
savedOrderInfo := s.loadSavedOrderFromMap(model.Order2Status(order), true) savedOrderInfo := s.loadSavedOrderFromMap(model.Order2Status(order), true)
config.TimeoutAction(savedOrderInfo, bill) config.CallTimeoutAction(savedOrderInfo, bill)
savedOrderInfo.timerStatus = 0 savedOrderInfo.timerStatus = 0
savedOrderInfo.timerStatusType = scheduler.TimerStatusTypeUnknown savedOrderInfo.timerStatusType = scheduler.TimerStatusTypeUnknown
}, jxutils.ComposeUniversalOrderID(order.VendorOrderID, order.VendorID)) }, jxutils.ComposeUniversalOrderID(order.VendorOrderID, order.VendorID))

View File

@@ -514,20 +514,6 @@ func (c *PurchaseHandler) GetOrderRealMobile(ctx *jxcontext.Context, order *mode
return mobile, err return mobile, err
} }
// func (c *PurchaseHandler) GetStatusActionTimeout(order *model.GoodsOrder, statusType, status int) (params *partner.StatusActionParams) {
// if statusType == scheduler.TimerStatusTypeOrder && status == model.OrderStatusAccepted {
// params = &partner.StatusActionParams{ // PickDeadline没有设置时才有效美团外卖要求在5分钟内拣货不然订单会被取消
// Timeout: pickupOrderDelay,
// }
// } else if statusType == scheduler.TimerStatusTypeOrder && status == model.OrderStatusFinishedPickup {
// params = &partner.StatusActionParams{ // 立即达订单有效,自配送延时召唤配送
// Timeout: callDeliveryDelay,
// TimeoutGap: callDeliveryDelayGap,
// }
// }
// return params
// }
func (c *PurchaseHandler) AgreeOrRefuseCancel(ctx *jxcontext.Context, order *model.GoodsOrder, isAgree bool, reason string) (err error) { func (c *PurchaseHandler) AgreeOrRefuseCancel(ctx *jxcontext.Context, order *model.GoodsOrder, isAgree bool, reason string) (err error) {
if globals.EnableMtwmStoreWrite { if globals.EnableMtwmStoreWrite {
if isAgree { if isAgree {