- min timeout scattered.

- fix LoadPendingOrders bug when there is no waybill.
This commit is contained in:
gazebo
2018-07-22 01:06:34 +08:00
parent 77c1dd07b5
commit ae6198220c
4 changed files with 11 additions and 5 deletions

View File

@@ -140,7 +140,7 @@ func LoadPendingOrders() {
scheduler.CurrentScheduler.OnWaybillStatusChanged(&bill2) scheduler.CurrentScheduler.OnWaybillStatusChanged(&bill2)
}, bill.VendorOrderID) }, bill.VendorOrderID)
} }
if order.Status > model.OrderStatusNew { if order.Status > model.OrderStatusNew && !isNoNewSent {
isNoNewSent = true isNoNewSent = true
order2 := *order order2 := *order
routinePool.CallFunAsync(func() { routinePool.CallFunAsync(func() {
@@ -148,5 +148,11 @@ func LoadPendingOrders() {
}, order.VendorOrderID) }, order.VendorOrderID)
} }
} }
if order.Status > model.OrderStatusNew && !isNoNewSent {
order2 := *order
routinePool.CallFunAsync(func() {
scheduler.CurrentScheduler.OnOrderStatusChanged(model.Order2Status(&order2))
}, order.VendorOrderID)
}
} }
} }

View File

@@ -39,7 +39,7 @@ func (c *WaybillController) onWaybillMsg(msg *jdapi.CallbackDeliveryStatusMsg) (
order.Status = model.WaybillStatusDelivering order.Status = model.WaybillStatusDelivering
case jdapi.DeliveryStatusFinished: case jdapi.DeliveryStatusFinished:
order.Status = model.WaybillStatusDelivered order.Status = model.WaybillStatusDelivered
case jdapi.DeliveryStatusFailedDelivery: case jdapi.DeliveryStatusFailedDelivery, jdapi.DeliveryStatusFailedGetGoods:
order.Status = model.WaybillStatusFailed order.Status = model.WaybillStatusFailed
default: default:
order.Status = model.WaybillStatusUnknown order.Status = model.WaybillStatusUnknown

View File

@@ -87,7 +87,7 @@ func GetUniversalOrderIDFromOrderStatus(status *model.OrderStatus) string {
func GetRealTimeout(beginTime time.Time, timeout time.Duration, minTimeout time.Duration) time.Duration { func GetRealTimeout(beginTime time.Time, timeout time.Duration, minTimeout time.Duration) time.Duration {
retVal := beginTime.Add(timeout).Sub(time.Now()) retVal := beginTime.Add(timeout).Sub(time.Now())
if retVal < minTimeout { if retVal < minTimeout {
retVal = minTimeout retVal = minTimeout + time.Duration(rand.Int31n(5*1000))*time.Millisecond // 随机分布在5秒内这样写的原因是避免启动时加载订单TIMER同一瞬间启动
} }
return retVal return retVal
} }

View File

@@ -20,7 +20,7 @@ const (
time2Schedule3rdCarrierGap4OrderStatus = 3 * time.Minute // 京东要求是运单状态为待抢单且超时5分钟但为了防止没有运单事件所以就拣货完成事件开始算添加3分钟 time2Schedule3rdCarrierGap4OrderStatus = 3 * time.Minute // 京东要求是运单状态为待抢单且超时5分钟但为了防止没有运单事件所以就拣货完成事件开始算添加3分钟
time2AutoPickupMin = 15 * time.Minute time2AutoPickupMin = 15 * time.Minute
time2AutoPickupGap = 5 * time.Minute time2AutoPickupGap = 5 * time.Minute
minTimeout = 10 * time.Second // timer的最小时间这样写的上的是在load pending orders让延迟的事件有机会执行 minTimeout = 5 * time.Second // timer的最小时间这样写的上的是在load pending orders让延迟的事件有机会执行
) )
type WatchOrderInfo struct { type WatchOrderInfo struct {
@@ -147,7 +147,7 @@ func (s *DefScheduler) OnWaybillStatusChanged(bill *model.Waybill) (err error) {
s.CurOrderManager.UpdateWaybillVendorID(bill) s.CurOrderManager.UpdateWaybillVendorID(bill)
savedOrderInfo.order.WaybillVendorID = bill.WaybillVendorID savedOrderInfo.order.WaybillVendorID = bill.WaybillVendorID
} }
case model.WaybillStatusFailed: // WaybillStatusFailed理解成订单整个失败了不需要再尝试创建运单了 case model.WaybillStatusFailed: // todo WaybillStatusFailed理解成订单整个失败了不需要再尝试创建运单了注意这里应该加个zabbix日志的报警
s.removeWaybillFromMap(savedOrderInfo, bill) s.removeWaybillFromMap(savedOrderInfo, bill)
globals.SugarLogger.Infof("OnWaybillStatusChanged WaybillStatusFailed, bill:%v", bill) globals.SugarLogger.Infof("OnWaybillStatusChanged WaybillStatusFailed, bill:%v", bill)
case model.WaybillStatusCanceled: case model.WaybillStatusCanceled: