- use GoodsOrder.PickDeadline to set auto pick timer, resetTimer

This commit is contained in:
gazebo
2019-02-15 15:15:11 +08:00
parent 2f97b09738
commit 393a38192e

View File

@@ -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!!!")
}