- scatter pending order when starting up(avoid access db simultaneously).
This commit is contained in:
@@ -14,7 +14,9 @@ import (
|
|||||||
)
|
)
|
||||||
|
|
||||||
const (
|
const (
|
||||||
pendingOrderGapMax = 2 * 24 * time.Hour // 每次重启机子时,要检查几天内的订单状态
|
pendingOrderGapMax = 200 * 24 * time.Hour // 每次重启机子时,要检查几天内的订单状态
|
||||||
|
maxTimeHandlePendingOrder = 2 * time.Second //处理pending order的最长时间
|
||||||
|
maxSleepGapHandlePendingOrder = 5 * time.Millisecond // 每个pending order的最长时间间隙
|
||||||
)
|
)
|
||||||
|
|
||||||
var (
|
var (
|
||||||
@@ -102,6 +104,12 @@ func LoadPendingOrders() {
|
|||||||
sortOrders = append(sortOrders, bill)
|
sortOrders = append(sortOrders, bill)
|
||||||
}
|
}
|
||||||
sort.Sort(sortOrders)
|
sort.Sort(sortOrders)
|
||||||
|
|
||||||
|
sleepGap := maxTimeHandlePendingOrder / time.Duration(len(sortOrders))
|
||||||
|
if sleepGap > maxSleepGapHandlePendingOrder {
|
||||||
|
sleepGap = maxSleepGapHandlePendingOrder
|
||||||
|
}
|
||||||
|
lastTime := time.Now()
|
||||||
for _, item := range sortOrders {
|
for _, item := range sortOrders {
|
||||||
if order, ok := item.(*model.GoodsOrder); ok {
|
if order, ok := item.(*model.GoodsOrder); ok {
|
||||||
jxutils.CallMsgHandlerAsync(func() {
|
jxutils.CallMsgHandlerAsync(func() {
|
||||||
@@ -117,5 +125,11 @@ func LoadPendingOrders() {
|
|||||||
scheduler.CurrentScheduler.OnWaybillStatusChanged(bill, true)
|
scheduler.CurrentScheduler.OnWaybillStatusChanged(bill, true)
|
||||||
}, bill.VendorOrderID)
|
}, bill.VendorOrderID)
|
||||||
}
|
}
|
||||||
|
curTime := time.Now()
|
||||||
|
timeout := sleepGap - curTime.Sub(lastTime)
|
||||||
|
if timeout > 0 {
|
||||||
|
time.Sleep(timeout)
|
||||||
|
}
|
||||||
|
lastTime = curTime
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user