diff --git a/business/controller/dada/waybill.go b/business/controller/dada/waybill.go index d404d77e2..ca2998f0d 100644 --- a/business/controller/dada/waybill.go +++ b/business/controller/dada/waybill.go @@ -27,7 +27,7 @@ type WaybillController struct { } func init() { - scheduler.CurrentScheduler.RegisterDeliveryPlatform(model.VendorIDDada, new(WaybillController), false) + scheduler.CurrentScheduler.RegisterDeliveryPlatform(model.VendorIDDada, new(WaybillController), true) } func (c *WaybillController) OnWaybillMsg(msg *dadaapi.CallbackMsg) (retVal *dadaapi.CallbackResponse) { diff --git a/business/model/const.go b/business/model/const.go index 573f9e2df..306678c11 100644 --- a/business/model/const.go +++ b/business/model/const.go @@ -12,7 +12,8 @@ const ( VendorIDDeliveryBegin = 101 VendorIDDada = 101 VendorIDMTPS = 102 - VendorIDDeliveryEnd = 102 + VendorIDFengNiao = 103 + VendorIDDeliveryEnd = VendorIDFengNiao ) var ( diff --git a/business/model/jxstorefeature.go b/business/model/jxstorefeature.go index 8a49e5eb9..cc5c79f32 100644 --- a/business/model/jxstorefeature.go +++ b/business/model/jxstorefeature.go @@ -1,11 +1,18 @@ package model type Jxstorefeature struct { - Id int `orm:"column(storeid);pk"` - Autopickup int8 `orm:"column(autopickup);null"` - Transmtzs int8 `orm:"column(transmtzs);null"` // 定义为饿了么平台的订单是否支持三方配送 - Deliverycompetition int8 `orm:"column(deliverycompetition);null"` // 定义为京东到家 平台的订单是否支持三方配送 - ElmDeliveryType int8 `orm:"column(elm_delivery_type);default(0)"` // 饿了么店的配送方式 + Id int `orm:"column(storeid);pk"` + Autopickup int8 `orm:"column(autopickup);null"` + JdDeliveryType int8 `orm:"column(jd_delivery_type);default(0)"` // 京东店的配送方式 + ElmDeliveryType int8 `orm:"column(elm_delivery_type);default(0)"` // 饿了么店的配送方式 + JdCompetition int8 `orm:"default(1)"` // 京东门店是否支持3方配送 + ElmCompetition int8 `orm:"default(1)"` // 饿了么门店是否支持3方配送 + SupportMtps int8 `orm:"default(1)"` // 是否支持美团配送 + SupportDada int8 `orm:"default(1)"` // 是否支持达达 + SupportFengNiao int8 `orm:"default(1)"` // 是否支持蜂鸟 + + // Transmtzs int8 `orm:"column(transmtzs);null"` // 不用了 + // Deliverycompetition int8 `orm:"column(deliverycompetition);null"` // 不用了 } func (t *Jxstorefeature) TableName() string { diff --git a/business/scheduler/defsch/defsch.go b/business/scheduler/defsch/defsch.go index de170f421..c665c8aa4 100644 --- a/business/scheduler/defsch/defsch.go +++ b/business/scheduler/defsch/defsch.go @@ -33,10 +33,10 @@ const ( ) type WatchOrderInfo struct { - isNeedAutoPickup bool - storeDeliveryType int - isNeed3rdDelivery bool - + isNeedAutoPickup bool + storeDeliveryType int + isNeed3rdDelivery bool + supported3rdCarriers []int isSwitched2SelfDelivery bool order *model.GoodsOrder // order里的信息是保持更新的 waybills map[int]*model.Waybill // 这个waybills里的状态信息是不真实的,只使用id相关的信息 @@ -64,10 +64,11 @@ type DefScheduler struct { func NewWatchOrderInfo(order *model.GoodsOrder) (retVal *WatchOrderInfo) { retVal = &WatchOrderInfo{ - isNeedAutoPickup: true, - isNeed3rdDelivery: false, - storeDeliveryType: scheduler.StoreDeliveryTypeCrowdSourcing, - waybills: map[int]*model.Waybill{}, + isNeedAutoPickup: true, + isNeed3rdDelivery: false, + storeDeliveryType: scheduler.StoreDeliveryTypeCrowdSourcing, + waybills: map[int]*model.Waybill{}, + supported3rdCarriers: []int{}, } retVal.SetOrder(order) return retVal @@ -96,15 +97,29 @@ 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.Deliverycompetition != 0) || - (order.VendorID == model.VendorIDELM && storefeature.Transmtzs != 0) { - s.isNeed3rdDelivery = true - } - } else { + if (s.storeDeliveryType == scheduler.StoreDeliveryTypeByStore) || + (order.VendorID == model.VendorIDJD && storefeature.JdCompetition != 0) || + (order.VendorID == model.VendorIDELM && storefeature.ElmCompetition != 0) { 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 }, "updateOrderStoreFeature") @@ -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.DeliveryPlatformHandlers { - if savedOrderInfo.waybills[vendorID] == nil && (excludeBill == nil || vendorID != excludeBill.WaybillVendorID) && s.DeliveryPlatformHandlers[vendorID].Use4CreateWaybill { + for _, vendorID := range savedOrderInfo.supported3rdCarriers { + 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++ }