From 5bcd49c1fa4c48d5cd5affaa83c0361fc897e933 Mon Sep 17 00:00:00 2001 From: gazebo Date: Sat, 28 Jul 2018 13:15:15 +0800 Subject: [PATCH] - scatter pending order when starting up(avoid access db simultaneously). --- business/controller/controller.go | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/business/controller/controller.go b/business/controller/controller.go index 5cb1b7552..0658ba275 100644 --- a/business/controller/controller.go +++ b/business/controller/controller.go @@ -14,7 +14,9 @@ import ( ) const ( - pendingOrderGapMax = 2 * 24 * time.Hour // 每次重启机子时,要检查几天内的订单状态 + pendingOrderGapMax = 200 * 24 * time.Hour // 每次重启机子时,要检查几天内的订单状态 + maxTimeHandlePendingOrder = 2 * time.Second //处理pending order的最长时间 + maxSleepGapHandlePendingOrder = 5 * time.Millisecond // 每个pending order的最长时间间隙 ) var ( @@ -102,6 +104,12 @@ func LoadPendingOrders() { sortOrders = append(sortOrders, bill) } sort.Sort(sortOrders) + + sleepGap := maxTimeHandlePendingOrder / time.Duration(len(sortOrders)) + if sleepGap > maxSleepGapHandlePendingOrder { + sleepGap = maxSleepGapHandlePendingOrder + } + lastTime := time.Now() for _, item := range sortOrders { if order, ok := item.(*model.GoodsOrder); ok { jxutils.CallMsgHandlerAsync(func() { @@ -117,5 +125,11 @@ func LoadPendingOrders() { scheduler.CurrentScheduler.OnWaybillStatusChanged(bill, true) }, bill.VendorOrderID) } + curTime := time.Now() + timeout := sleepGap - curTime.Sub(lastTime) + if timeout > 0 { + time.Sleep(timeout) + } + lastTime = curTime } }