- avoid savedOrderInfo is nil.

- change conf.
This commit is contained in:
gazebo
2018-07-19 22:06:10 +08:00
parent fb2cd82e20
commit cb6fd8b850
2 changed files with 62 additions and 60 deletions

View File

@@ -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
}
}
}
}

View File

@@ -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"