From 393a38192e3af3b847a93292387a27ad55b7e3de Mon Sep 17 00:00:00 2001 From: gazebo Date: Fri, 15 Feb 2019 15:15:11 +0800 Subject: [PATCH] - use GoodsOrder.PickDeadline to set auto pick timer, resetTimer --- .../jxcallback/scheduler/defsch/defsch.go | 27 ++++++++++++------- 1 file changed, 18 insertions(+), 9 deletions(-) diff --git a/business/jxcallback/scheduler/defsch/defsch.go b/business/jxcallback/scheduler/defsch/defsch.go index 68e23d0c7..af06dc511 100644 --- a/business/jxcallback/scheduler/defsch/defsch.go +++ b/business/jxcallback/scheduler/defsch/defsch.go @@ -25,8 +25,8 @@ const ( time2Delivered = 1 * time.Hour // 正常从下单到送达的时间。 time2Schedule3rdCarrier = 20 // 京东要求5分钟后才能转自送,保险起见,设置为5分半钟 // time2Schedule3rdCarrierGap4OrderStatus = 3 * time.Minute // 京东要求是运单状态为待抢单且超时5分钟,但为了防止没有运单事件,所以就拣货完成事件开始算,添加3分钟 - time2AutoPickupMin = 15 * time.Minute - time2AutoPickupGap = 5 * 60 //随机5分钟 + time2AutoPickupMin = 15 * time.Minute // 自动拣货等待时间,这个只有在没有PickDeadline信息才有用,否则会根据PickDeadline设置 + time2AutoPickupGap = 5 * 60 //随机5分钟 // (把pending order timerout 在-pendingOrderTimerMinMinSecond至pendingOrderTimerMaxSecond映射到pendingOrderTimerMinSecond至pendingOrderTimerMaxSecond) pendingOrderTimerMinMinSecond = 5 * 60 // 5分钟 @@ -657,21 +657,30 @@ func (s *DefScheduler) resetTimer(savedOrderInfo *WatchOrderInfo, bill *model.Wa s.stopTimer(savedOrderInfo) } if config != nil && config.TimeoutAction != nil && config.TimerType != scheduler.TimerTypeByPass { - // 对于自动拣货,以订单中的设置为准 - if statusType == scheduler.TimerStatusTypeOrder && status == model.OrderStatusAccepted && savedOrderInfo.autoPickupTimeoutMinute > 1 { - config.Timeout = time.Duration(savedOrderInfo.autoPickupTimeoutMinute) * time.Minute + nowTime := time.Now() + configTimerType := config.TimerType + if statusType == scheduler.TimerStatusTypeOrder && status == model.OrderStatusAccepted { // 自动拣货的TIMER,特殊处理 + if !utils.IsTimeZero(order.PickDeadline) { // 如果有PickDeadline值,特殊处理 + configTimerType = scheduler.TimerTypeBaseNow + config.Timeout = order.PickDeadline.Sub(nowTime) - 5*time.Second + if config.TimeoutGap != 0 { + config.Timeout -= time.Duration(config.TimeoutGap) * time.Second + } + } else if savedOrderInfo.autoPickupTimeoutMinute > 1 { // 对于自动拣货,以订单中的设置为准 + config.Timeout = time.Duration(savedOrderInfo.autoPickupTimeoutMinute) * time.Minute + } } var timeout time.Duration - switch config.TimerType { + switch configTimerType { case scheduler.TimerTypeBaseNow: timeout = config.Timeout case scheduler.TimerTypeBaseStatusTime: - timeout = statusTime.Sub(time.Now()) + config.Timeout + timeout = statusTime.Sub(nowTime) + config.Timeout case scheduler.TimerTypeBaseExpectedDeliveredTime: - if order.BusinessType == model.BusinessTypeDingshida && order.ExpectedDeliveredTime != utils.DefaultTimeValue { + if order.BusinessType == model.BusinessTypeDingshida && !utils.IsTimeZero(order.ExpectedDeliveredTime) { statusTime = order.ExpectedDeliveredTime.Add(-time2Delivered) } - timeout = statusTime.Sub(time.Now()) + config.Timeout + timeout = statusTime.Sub(nowTime) + config.Timeout default: panic("TimerType is wrong!!!") }