From 53fccce223f906b1150d89b0446b1631e9abe4d6 Mon Sep 17 00:00:00 2001 From: gazebo Date: Wed, 8 May 2019 17:42:20 +0800 Subject: [PATCH] =?UTF-8?q?-=20=E6=8B=A3=E8=B4=A7=E5=AE=8C=E6=88=90?= =?UTF-8?q?=E5=8F=8A=E4=B9=8B=E5=89=8D=E7=9A=84=E8=AE=A2=E5=8D=95=E4=BA=8B?= =?UTF-8?q?=E4=BB=B6TIMER=E4=B8=8D=E8=83=BD=E8=A6=86=E7=9B=96=E8=BF=90?= =?UTF-8?q?=E5=8D=95TIMER=EF=BC=88=E4=B8=80=E8=88=AC=E6=98=AF=E6=B6=88?= =?UTF-8?q?=E6=81=AF=E9=94=99=E5=BA=8F=E5=BC=95=E8=B5=B7=E7=9A=84=EF=BC=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- business/jxcallback/scheduler/defsch/defsch.go | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/business/jxcallback/scheduler/defsch/defsch.go b/business/jxcallback/scheduler/defsch/defsch.go index 38037482e..efbbb15db 100644 --- a/business/jxcallback/scheduler/defsch/defsch.go +++ b/business/jxcallback/scheduler/defsch/defsch.go @@ -648,7 +648,7 @@ func (s *DefScheduler) resetTimer(savedOrderInfo *WatchOrderInfo, bill *model.Wa statusTime = bill.StatusTime } globals.SugarLogger.Debugf("resetTimer, orderID:%s statusType:%d status:%v", order.VendorOrderID, statusType, status) - if statusType != savedOrderInfo.timerStatusType || status >= savedOrderInfo.timerStatus { // 新设置的TIMER不能覆盖状态在其后的TIMER,如果状态回绕,需要注意 + if isStatusNewer(savedOrderInfo.timerStatusType, savedOrderInfo.timerStatus, statusType, status) { // 新设置的TIMER不能覆盖状态在其后的TIMER,如果状态回绕,需要注意 config := s.mergeOrderStatusConfig(savedOrderInfo, statusTime, statusType, status) if config == nil || config.TimerType != partner.TimerTypeByPass { s.stopTimer(savedOrderInfo) @@ -690,6 +690,14 @@ func (s *DefScheduler) resetTimer(savedOrderInfo *WatchOrderInfo, bill *model.Wa } } +func isStatusNewer(curStatusType, curStatus, statusType, status int) bool { + // 拣货完成及之前的订单事件TIMER不能覆盖运单TIMER(一般是消息错序引起的) + if curStatusType == scheduler.TimerStatusTypeWaybill && statusType == scheduler.TimerStatusTypeOrder && status <= model.OrderStatusFinishedPickup { + return false + } + return curStatusType != statusType || status >= curStatus +} + func (s *DefScheduler) mergeOrderStatusConfig(savedOrderInfo *WatchOrderInfo, statusTime time.Time, statusType, status int) (retVal *StatusActionConfig) { s.locker.RLock() defer func() {