diff --git a/business/scheduler/defsch/defsch.go b/business/scheduler/defsch/defsch.go index 8ea8f93de..6403dba27 100644 --- a/business/scheduler/defsch/defsch.go +++ b/business/scheduler/defsch/defsch.go @@ -36,8 +36,8 @@ type WatchOrderInfo struct { storeDeliveryType int isNeed3rdDelivery bool - order *model.GoodsOrder // order里的信息是保持更新的 - waybills []*model.Waybill // 这个waybills里的状态信息是不真实的,只使用id相关的信息 + order *model.GoodsOrder // order里的信息是保持更新的 + waybills map[int]*model.Waybill // 这个waybills里的状态信息是不真实的,只使用id相关的信息 timerStatusType int // 0表示订单,1表示运单 timerStatus int @@ -325,25 +325,17 @@ func (s *DefScheduler) OnWaybillStatusChanged(bill *model.Waybill, isPending boo } func (s *DefScheduler) addWaybill2Map(savedOrderInfo *WatchOrderInfo, bill *model.Waybill) { - for _, v := range savedOrderInfo.waybills { - if v.VendorWaybillID == bill.VendorWaybillID && v.WaybillVendorID == bill.WaybillVendorID { - *v = *bill // 同步数据 - // 如果已经存在,不做处理 - if bill.WaybillVendorID != bill.OrderVendorID { // 购买平台重复发相同号的新运单是正常的,京东就是 - globals.SugarLogger.Warnf("addWaybill2Map bill:%v already exists", bill) - } - return + if _, ok := savedOrderInfo.waybills[bill.WaybillVendorID]; !ok { + if bill.WaybillVendorID != bill.OrderVendorID { // 购买平台重复发相同号的新运单是正常的,京东就是 + globals.SugarLogger.Warnf("addWaybill2Map bill:%v already exists", bill) } } - savedOrderInfo.waybills = append(savedOrderInfo.waybills, bill) + savedOrderInfo.waybills[bill.WaybillVendorID] = bill } func (s *DefScheduler) removeWaybillFromMap(savedOrderInfo *WatchOrderInfo, bill *model.Waybill) { - 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 _, ok := savedOrderInfo.waybills[bill.WaybillVendorID]; ok { + delete(savedOrderInfo.waybills, bill.WaybillVendorID) } } @@ -356,7 +348,7 @@ func (s *DefScheduler) createWaybillOn3rdProviders(savedOrderInfo *WatchOrderInf if savedOrderInfo.retryCount <= maxWaybillRetryCount { successCount := 0 for vendorID := range s.DeliveryPlatformHandlers { - if (excludeBill == nil || vendorID != excludeBill.WaybillVendorID) && s.DeliveryPlatformHandlers[vendorID].Use4CreateWaybill { + if savedOrderInfo.waybills[vendorID] == nil && (excludeBill == nil || vendorID != excludeBill.WaybillVendorID) && s.DeliveryPlatformHandlers[vendorID].Use4CreateWaybill { if err = s.CreateWaybill(vendorID, order); err == nil { successCount++ }