@@ -36,7 +36,7 @@ type WatchOrderInfo struct {
isNeedAutoPickup bool
storeDeliveryType int
isNeed3rdDelivery bool
supported3rdCarriers [ ] int
isSwitched2SelfDelivery bool
order * model . GoodsOrder // order里的信息是保持更新的
waybills map [ int ] * model . Waybill // 这个waybills里的状态信息是不真实的, 只使用id相关的信息
@@ -68,6 +68,7 @@ func NewWatchOrderInfo(order *model.GoodsOrder) (retVal *WatchOrderInfo) {
isNeed3rdDelivery : false ,
storeDeliveryType : scheduler . StoreDeliveryTypeCrowdSourcing ,
waybills : map [ int ] * model . Waybill { } ,
supported3rdCarriers : [ ] int { } ,
}
retVal . SetOrder ( order )
return retVal
@@ -96,14 +97,28 @@ func (s *WatchOrderInfo) updateOrderStoreFeature(order *model.GoodsOrder) (err e
s . isNeedAutoPickup = ( storefeature . Autopickup != 0 )
if order . VendorID == model . VendorIDELM {
s . storeDeliveryType = int ( storefeature . ElmDeliveryType )
} else if order . VendorID == model . VendorIDJD {
s . storeDeliveryType = int ( storefeature . JdDeliveryType )
}
if s . storeDeliveryType ! = scheduler . StoreDeliveryTypeByStore {
if ( order . VendorID == model . VendorIDJD && storefeature . Deliveryc ompetition != 0 ) ||
( order . VendorID == model . VendorIDELM && storefeature . Transmtzs != 0 ) {
if ( s . storeDeliveryType = = scheduler . StoreDeliveryTypeByStore ) ||
( order . VendorID == model . VendorIDJD && storefeature . JdC ompetition != 0 ) ||
( order . VendorID == model . VendorIDELM && storefeature . ElmCompetition != 0 ) {
s . isNeed3rdDelivery = true
}
} else {
s . isNeed3rdDelivery = true
if s . isNeed3rdDelivery {
if storefeature . SupportMtps ! = 0 {
s . supported3rdCarriers = append ( s . supported3rdCarriers , model . VendorIDMTPS )
}
if storefeature . SupportDada != 0 {
s . supported3rdCarriers = append ( s . supported3rdCarriers , model . VendorIDDada )
}
if storefeature . SupportFengNiao != 0 {
s . supported3rdCarriers = append ( s . supported3rdCarriers , model . VendorIDFengNiao )
}
if len ( s . supported3rdCarriers ) == 0 {
s . isNeed3rdDelivery = false
globals . SugarLogger . Infof ( "updateOrderStoreFeature orderID:%s no at least one carrier supported" , order . VendorOrderID )
}
}
}
return err
@@ -353,12 +368,12 @@ func (s *DefScheduler) createWaybillOn3rdProviders(savedOrderInfo *WatchOrderInf
order := savedOrderInfo . order
globals . SugarLogger . Debugf ( "createWaybillOn3rdProviders, orderID:%s, status:%d, excludeBill:%v" , order . VendorOrderID , order . Status , excludeBill )
if order . Status >= model . OrderStatusFinishedPickup && order . Status < model . OrderStatusEndBegin { // 订单在配送中被取消时就是配送中状态
if savedOrderInfo . isNeed3rdDelivery || savedOrderInfo . storeDeliveryType == scheduler . StoreDeliveryTypeByStore {
if savedOrderInfo . isNeed3rdDelivery {
savedOrderInfo . retryCount ++
if savedOrderInfo . retryCount <= maxWaybillRetryCount {
successCount := 0
for vendorID := range s. DeliveryPlatformHandl ers {
if savedOrderInfo . waybills [ vendorID ] == nil && ( excludeBill == nil || vendorID != excludeBill . WaybillVendorID ) && s . DeliveryPlatformHandlers [ vendorID ] . Use4CreateWaybill {
for _ , vendorID := range savedOrderInfo . supported3rdCarri ers {
if s . DeliveryPlatformHandlers [ vendorID ] != nil && s . DeliveryPlatformHandlers [ vendorID ] . Use4CreateWaybill && savedOrderInfo. waybills [ vendorID ] == nil && ( excludeBill == nil || vendorID != excludeBill . WaybillVendorID ) {
if err = s . CreateWaybill ( vendorID , order ) ; err == nil {
successCount ++
}