- 处理自配送门店非立即达订单的发运单时间问题

This commit is contained in:
gazebo
2019-03-27 14:32:08 +08:00
parent 3380d6081a
commit 9a89c596d4
5 changed files with 21 additions and 11 deletions

View File

@@ -38,6 +38,7 @@ const (
orderMapStoreMaxTime = 4 * 24 * time.Hour // cache最长存储时间
time2Schedule3rdCarrierKey = "waitminute4mt"
dingShiDaAheadTime = 30 * time.Minute // 定时达订单开始召唤配送的提前时间
)
const (
@@ -694,7 +695,7 @@ func (s *DefScheduler) resetTimer(savedOrderInfo *WatchOrderInfo, bill *model.Wa
}
globals.SugarLogger.Debugf("resetTimer, orderID:%s statusType:%d status:%v", order.VendorOrderID, statusType, status)
if statusType != savedOrderInfo.timerStatusType || status >= savedOrderInfo.timerStatus { // 新设置的TIMER不能覆盖状态在其后的TIMER如果状态回绕需要注意
config := s.mergeOrderStatusConfig(statusType, status, order.VendorID)
config := s.mergeOrderStatusConfig(savedOrderInfo.order, statusType, status, order.VendorID)
if config == nil || config.TimerType != scheduler.TimerTypeByPass {
s.stopTimer(savedOrderInfo)
}
@@ -791,7 +792,7 @@ func (s *DefScheduler) handleAutoAcceptOrder(orderID string, vendorID int, userM
return handleType
}
func (s *DefScheduler) mergeOrderStatusConfig(statusType, status int, purchaseVendorID int) (retVal *StatusActionConfig) {
func (s *DefScheduler) mergeOrderStatusConfig(order *model.GoodsOrder, statusType, status int, purchaseVendorID int) (retVal *StatusActionConfig) {
s.locker.RLock()
defer func() {
s.locker.RUnlock()
@@ -802,7 +803,14 @@ func (s *DefScheduler) mergeOrderStatusConfig(statusType, status int, purchaseVe
}
retVal = &StatusActionConfig{}
*retVal = *defConfig
if vendorActionParams := partner.GetPurchasePlatformFromVendorID(purchaseVendorID).GetStatusActionTimeout(statusType, status); vendorActionParams != nil {
if statusType == scheduler.TimerStatusTypeOrder && status == model.OrderStatusFinishedPickup && order.BusinessType != model.BusinessTypeImmediate {
if jxutils.IsTimeEmpty(order.ExpectedDeliveredTime) {
globals.SugarLogger.Warnf("mergeOrderStatusConfig orderID:%s 非立即达订单没有预计送达时间", order.VendorOrderID)
} else {
retVal.Timeout = order.ExpectedDeliveredTime.Sub(time.Now()) - dingShiDaAheadTime
}
} else if vendorActionParams := partner.GetPurchasePlatformFromVendorID(purchaseVendorID).GetStatusActionTimeout(order, statusType, status); vendorActionParams != nil {
retVal.Timeout = vendorActionParams.Timeout
if vendorActionParams.TimeoutGap >= 0 {
retVal.TimeoutGap = vendorActionParams.TimeoutGap