From cb6fd8b850c50e3482c96ff1c0175d53fc214718 Mon Sep 17 00:00:00 2001 From: gazebo Date: Thu, 19 Jul 2018 22:06:10 +0800 Subject: [PATCH] - avoid savedOrderInfo is nil. - change conf. --- business/scheduler/defsch/defsch.go | 120 ++++++++++++++-------------- conf/app.conf | 2 - 2 files changed, 62 insertions(+), 60 deletions(-) diff --git a/business/scheduler/defsch/defsch.go b/business/scheduler/defsch/defsch.go index 70f62bc88..52f1dd253 100644 --- a/business/scheduler/defsch/defsch.go +++ b/business/scheduler/defsch/defsch.go @@ -78,19 +78,20 @@ func (s *DefScheduler) OnOrderNew(order *model.GoodsOrder) (err error) { func (s *DefScheduler) OnOrderStatusChanged(status *model.OrderStatus) (err error) { globals.SugarLogger.Debugf("OnOrderStatusChanged, status:%v", status) - savedOrderInfo := s.loadWatchOrderFromMap(status.VendorOrderID, status.VendorID) - if status.Status > model.OrderStatusUnknown && status.Status < model.OrderStatusEndBegin { - s.updateOrderByStatus(savedOrderInfo.order, status) - gap := 0 * time.Second - if status.Status == model.OrderStatusAccepted { - gap = time.Duration(rand.Int63n(int64(time2AutoPickupGap))) - } else if status.Status == model.OrderStatusFinishedPickup { - gap = time2Schedule3rdCarrierGap4OrderStatus + if savedOrderInfo := s.loadWatchOrderFromMap(status.VendorOrderID, status.VendorID); savedOrderInfo != nil { + if status.Status > model.OrderStatusUnknown && status.Status < model.OrderStatusEndBegin { + s.updateOrderByStatus(savedOrderInfo.order, status) + gap := 0 * time.Second + if status.Status == model.OrderStatusAccepted { + gap = time.Duration(rand.Int63n(int64(time2AutoPickupGap))) + } else if status.Status == model.OrderStatusFinishedPickup { + gap = time2Schedule3rdCarrierGap4OrderStatus + } + s.resetTimer(status.Status, savedOrderInfo, gap) + } else { + s.stopTimer(savedOrderInfo) + s.orderMap.Delete(jxutils.GetUniversalOrderIDFromOrderStatus(status)) } - s.resetTimer(status.Status, savedOrderInfo, gap) - } else { - s.stopTimer(savedOrderInfo) - s.orderMap.Delete(jxutils.GetUniversalOrderIDFromOrderStatus(status)) } return err } @@ -98,55 +99,56 @@ func (s *DefScheduler) OnOrderStatusChanged(status *model.OrderStatus) (err erro // 以下是运单 func (s *DefScheduler) OnWaybillStatusChanged(bill *model.Waybill) (err error) { globals.SugarLogger.Debugf("OnWaybillStatusChanged, bill:%v", bill) - savedOrderInfo := s.loadWatchOrderFromMap(bill.VendorOrderID, bill.OrderVendorID) - s.addWaybill2Map(savedOrderInfo, bill) // 这样写的原因是因为调试时,程度从中途运行,没有接受到WaybillStatusNew事件 - if bill.Status == model.WaybillStatusNew { - if bill.OrderVendorID == bill.WaybillVendorID { - if savedOrderInfo.timerStatus == model.OrderStatusFinishedPickup { - s.resetTimer(model.OrderStatusFinishedPickup, savedOrderInfo, 0) - } else { - globals.SugarLogger.Infof("OnWaybillStatusChanged met other timer, status:%d", savedOrderInfo.timerStatus) + if savedOrderInfo := s.loadWatchOrderFromMap(bill.VendorOrderID, bill.OrderVendorID); savedOrderInfo != nil { + s.addWaybill2Map(savedOrderInfo, bill) // 这样写的原因是因为调试时,程度从中途运行,没有接受到WaybillStatusNew事件 + if bill.Status == model.WaybillStatusNew { + if bill.OrderVendorID == bill.WaybillVendorID { + if savedOrderInfo.timerStatus == model.OrderStatusFinishedPickup { + s.resetTimer(model.OrderStatusFinishedPickup, savedOrderInfo, 0) + } else { + globals.SugarLogger.Infof("OnWaybillStatusChanged met other timer, status:%d", savedOrderInfo.timerStatus) + } } - } - if savedOrderInfo.order.WaybillVendorID != model.VendorIDUnknown { - globals.SugarLogger.Infof("OnWaybillStatusChanged multiple waybill created, bill:%v", bill) - if bill.WaybillVendorID != bill.WaybillVendorID { - s.GetDeliveryPlatformFromVendorID(bill.WaybillVendorID).CancelWaybill(bill) + if savedOrderInfo.order.WaybillVendorID != model.VendorIDUnknown { + globals.SugarLogger.Infof("OnWaybillStatusChanged multiple waybill created, bill:%v", bill) + if bill.WaybillVendorID != bill.WaybillVendorID { + s.GetDeliveryPlatformFromVendorID(bill.WaybillVendorID).CancelWaybill(bill) + } } - } - } else { - switch bill.Status { - case model.WaybillStatusAccepted: - s.stopTimer(savedOrderInfo) // todo 这里应该另外启动一个TIMER - s.cancelOtherWaybills(savedOrderInfo, bill) + } else { + switch bill.Status { + case model.WaybillStatusAccepted: + s.stopTimer(savedOrderInfo) // todo 这里应该另外启动一个TIMER + s.cancelOtherWaybills(savedOrderInfo, bill) - s.CurOrderManager.UpdateWaybillVendorID(bill) - savedOrderInfo.order.WaybillVendorID = bill.WaybillVendorID - case model.WaybillStatusAcceptCanceled: - s.createWaybillOn3rdProviders(savedOrderInfo.order, bill) - if savedOrderInfo.order.WaybillVendorID == bill.WaybillVendorID { - bill.WaybillVendorID = model.VendorIDUnknown s.CurOrderManager.UpdateWaybillVendorID(bill) savedOrderInfo.order.WaybillVendorID = bill.WaybillVendorID - } - case model.WaybillStatusCanceled, model.WaybillStatusFailed: - s.removeWaybillFromMap(savedOrderInfo, bill) - if savedOrderInfo.order.WaybillVendorID == bill.WaybillVendorID { - s.createWaybillOn3rdProviders(savedOrderInfo.order, nil) + case model.WaybillStatusAcceptCanceled: + s.createWaybillOn3rdProviders(savedOrderInfo.order, bill) + if savedOrderInfo.order.WaybillVendorID == bill.WaybillVendorID { + bill.WaybillVendorID = model.VendorIDUnknown + s.CurOrderManager.UpdateWaybillVendorID(bill) + savedOrderInfo.order.WaybillVendorID = bill.WaybillVendorID + } + case model.WaybillStatusCanceled, model.WaybillStatusFailed: + s.removeWaybillFromMap(savedOrderInfo, bill) + if savedOrderInfo.order.WaybillVendorID == bill.WaybillVendorID { + s.createWaybillOn3rdProviders(savedOrderInfo.order, nil) - bill.WaybillVendorID = model.VendorIDUnknown - s.CurOrderManager.UpdateWaybillVendorID(bill) - savedOrderInfo.order.WaybillVendorID = bill.WaybillVendorID + bill.WaybillVendorID = model.VendorIDUnknown + s.CurOrderManager.UpdateWaybillVendorID(bill) + savedOrderInfo.order.WaybillVendorID = bill.WaybillVendorID + } + case model.WaybillStatusDelivering: + if savedOrderInfo.order.VendorID != bill.WaybillVendorID { + s.GetPurchasePlatformFromVendorID(bill.OrderVendorID).SelfDeliverDelievering(savedOrderInfo.order) + } + case model.WaybillStatusDelivered: + if savedOrderInfo.order.VendorID != bill.WaybillVendorID { + s.GetPurchasePlatformFromVendorID(bill.OrderVendorID).SelfDeliverDelievered(savedOrderInfo.order) + } + s.removeWaybillFromMap(savedOrderInfo, bill) } - case model.WaybillStatusDelivering: - if savedOrderInfo.order.VendorID != bill.WaybillVendorID { - s.GetPurchasePlatformFromVendorID(bill.OrderVendorID).SelfDeliverDelievering(savedOrderInfo.order) - } - case model.WaybillStatusDelivered: - if savedOrderInfo.order.VendorID != bill.WaybillVendorID { - s.GetPurchasePlatformFromVendorID(bill.OrderVendorID).SelfDeliverDelievered(savedOrderInfo.order) - } - s.removeWaybillFromMap(savedOrderInfo, bill) } } return nil @@ -226,10 +228,12 @@ func (s *DefScheduler) removeWaybillFromMap(savedOrderInfo *WatchOrderInfo, bill if savedOrderInfo == nil { savedOrderInfo = s.loadWatchOrderFromMap(bill.VendorOrderID, bill.OrderVendorID) } - for k, v := range savedOrderInfo.waybills { - if v.VendorWaybillID == bill.VendorWaybillID && v.WaybillVendorID == bill.WaybillVendorID { - savedOrderInfo.waybills = append(savedOrderInfo.waybills[0:k], savedOrderInfo.waybills[k+1:]...) - break + if savedOrderInfo != nil { + for k, v := range savedOrderInfo.waybills { + if v.VendorWaybillID == bill.VendorWaybillID && v.WaybillVendorID == bill.WaybillVendorID { + savedOrderInfo.waybills = append(savedOrderInfo.waybills[0:k], savedOrderInfo.waybills[k+1:]...) + break + } } } } diff --git a/conf/app.conf b/conf/app.conf index ab51871e3..c5478143e 100644 --- a/conf/app.conf +++ b/conf/app.conf @@ -42,8 +42,6 @@ weixinSecret = "ba32b269a068a5b72486a0beafd171e8" dbConnectStr = "root:WebServer@1@tcp(127.0.0.1:3306)/jxd_dev_0?charset=utf8&loc=Local" -callLegacy = false - [prod] freshFoodServerURL = "http://portal.int.jxc4.com"