diff --git a/business/controller/dada/waybill.go b/business/controller/dada/waybill.go index e235fce61..5305496e3 100644 --- a/business/controller/dada/waybill.go +++ b/business/controller/dada/waybill.go @@ -9,7 +9,6 @@ import ( "git.rosy.net.cn/jx-callback/business/controller" "git.rosy.net.cn/jx-callback/business/jxutils" "git.rosy.net.cn/jx-callback/business/model" - "git.rosy.net.cn/jx-callback/business/scheduler" "git.rosy.net.cn/jx-callback/globals" "git.rosy.net.cn/jx-callback/globals/api" "github.com/astaxie/beego/orm" @@ -23,7 +22,7 @@ type WaybillController struct { } func init() { - scheduler.CurrentScheduler.RegisterDeliveryPlatform(model.VendorIDDada, new(WaybillController)) + //scheduler.CurrentScheduler.RegisterDeliveryPlatform(model.VendorIDDada, new(WaybillController)) } func (c *WaybillController) OnWaybillMsg(msg *dadaapi.CallbackMsg) (retVal *dadaapi.CallbackResponse) { diff --git a/business/controller/mtps/waybill.go b/business/controller/mtps/waybill.go index d50d89e47..be04510b2 100644 --- a/business/controller/mtps/waybill.go +++ b/business/controller/mtps/waybill.go @@ -8,7 +8,6 @@ import ( "git.rosy.net.cn/baseapi/utils" "git.rosy.net.cn/jx-callback/business/controller" "git.rosy.net.cn/jx-callback/business/jxutils" - "git.rosy.net.cn/jx-callback/business/legacyorder" "git.rosy.net.cn/jx-callback/business/model" "git.rosy.net.cn/jx-callback/business/scheduler" "git.rosy.net.cn/jx-callback/globals" @@ -198,16 +197,10 @@ func (c *WaybillController) CancelWaybill(bill *model.Waybill) (err error) { return nil } -// todo 生成mtps deliveryid,为了兼容,现在取jxorder中的id func (c *WaybillController) getDeliveryID(order *model.GoodsOrder, db orm.Ormer) (retVal int64, err error) { - jxorder := &legacyorder.Jxorder2{ - OrderId: utils.Str2Int64(order.VendorOrderID), - } - err = utils.CallFuncLogError(func() error { - err2 := db.Read(jxorder, "OrderId") - return err2 - }, "getDeliveryID, orderID:%s", order.VendorOrderID) - return int64(jxorder.Id), err + // jxorder表当前已经有50多万条记录了,加100万避免冲突 + // 508505 + return order.ID + 1000000, nil } func (c *WaybillController) getMTPSShopID(order *model.GoodsOrder, db orm.Ormer) (retVal string, err error) { diff --git a/business/model/jxstorefeature.go b/business/model/jxstorefeature.go new file mode 100644 index 000000000..7e2139f44 --- /dev/null +++ b/business/model/jxstorefeature.go @@ -0,0 +1,12 @@ +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"` // 定义为京东到家 平台的订单是否支持三方配送 +} + +func (t *Jxstorefeature) TableName() string { + return "jxstorefeature" +} diff --git a/business/scheduler/defsch/defsch.go b/business/scheduler/defsch/defsch.go index 45866cf5b..80b538471 100644 --- a/business/scheduler/defsch/defsch.go +++ b/business/scheduler/defsch/defsch.go @@ -25,7 +25,6 @@ const ( type WatchOrderInfo struct { order *model.GoodsOrder // order里的信息是保持更新的 - dirty int // 因为京东事件序列New与Accepted有极少数情况下会错序,处理延迟加载 waybills []*model.Waybill // 这个waybills里的状态信息是不真实的,只使用id相关的信息 timerStatus int timer *time.Timer @@ -211,19 +210,23 @@ func (s *DefScheduler) removeWaybillFromMap(savedOrderInfo *WatchOrderInfo, bill func (s *DefScheduler) createWaybillOn3rdProviders(order *model.GoodsOrder, excludeBill *model.Waybill) (err error) { globals.SugarLogger.Debugf("createWaybillOn3rdProviders, orderID:%s, excludeBill:%v", order.VendorOrderID, excludeBill) - successCount := 0 - for vendorID := range s.DeliveryPlatformHandlers { - if excludeBill == nil || vendorID != excludeBill.WaybillVendorID { - if err = s.CreateWaybill(vendorID, order); err == nil { - successCount++ + if s.isOrderSupport3rdDelivery(order) { + successCount := 0 + for vendorID := range s.DeliveryPlatformHandlers { + if excludeBill == nil || vendorID != excludeBill.WaybillVendorID { + if err = s.CreateWaybill(vendorID, order); err == nil { + successCount++ + } } } + if successCount != 0 { + return nil + } + globals.SugarLogger.Warnf("createWaybillOn3rdProviders, orderID:%s all failed", order.VendorOrderID) + return scheduler.ErrCanNotCreateAtLeastOneWaybill } - if successCount != 0 { - return nil - } - globals.SugarLogger.Warnf("createWaybillOn3rdProviders, orderID:%s all failed", order.VendorOrderID) - return scheduler.ErrCanNotCreateAtLeastOneWaybill + globals.SugarLogger.Debugf("createWaybillOn3rdProviders, orderID:%s, store:%d dont't support 3rd delivery platform", order.VendorOrderID, jxutils.GetJxStoreIDFromOrder(order)) + return nil } func (s *DefScheduler) cancelOtherWaybills(savedOrderInfo *WatchOrderInfo, bill *model.Waybill) (err error) { @@ -264,13 +267,12 @@ func (s *DefScheduler) loadSavedOrderFromMap(status *model.OrderStatus) *WatchOr if savedInfo, ok := s.orderMap.Load(universalOrderID); ok { realSavedInfo = savedInfo.(*WatchOrderInfo) } - if realSavedInfo == nil || realSavedInfo.dirty == 1 { + if realSavedInfo == nil || !model.IsOrderSolid(realSavedInfo.order) { if realSavedInfo == nil { realSavedInfo = new(WatchOrderInfo) s.orderMap.Store(universalOrderID, realSavedInfo) } else { - realSavedInfo.dirty = 0 - globals.SugarLogger.Infof("loadSavedOrderFromMap order is dirty, orderID:%s, load it", status.RefVendorOrderID) + globals.SugarLogger.Infof("loadSavedOrderFromMap order is incomplete, orderID:%s, load it", status.RefVendorOrderID) } if order, err := s.CurOrderManager.LoadOrder(status.RefVendorOrderID, status.RefVendorID); err == nil { realSavedInfo.order = order @@ -283,7 +285,6 @@ func (s *DefScheduler) loadSavedOrderFromMap(status *model.OrderStatus) *WatchOr OrderCreatedAt: status.StatusTime, WaybillVendorID: model.VendorIDUnknown, } - realSavedInfo.dirty = 1 globals.SugarLogger.Infof("loadSavedOrderFromMap can not load order orderID:%s", status.VendorOrderID) } } @@ -351,7 +352,6 @@ func (s *DefScheduler) handleAutoAcceptOrder(orderID string, vendorID int, userM globals.SugarLogger.Infof("order:%s, vendorID:%d, mobile is empty, should accept order", orderID, vendorID) handleType = 1 } - if handleType == 1 { handler(true) } else if handleType == -1 { @@ -387,3 +387,21 @@ func (s *DefScheduler) updateOrderByStatus(order *model.GoodsOrder, status *mode order.StatusTime = status.StatusTime return order } + +func (s *DefScheduler) isOrderSupport3rdDelivery(order *model.GoodsOrder) (retVal bool) { + storefeature := &model.Jxstorefeature{ + Id: jxutils.GetJxStoreIDFromOrder(order), + } + db := orm.NewOrm() + utils.CallFuncLogError(func() error { + err := db.Read(storefeature, "Id") + if err == nil { + if (order.VendorID == model.VendorIDJD && storefeature.Deliverycompetition == 1) || + (order.VendorID == model.VendorIDELM && storefeature.Transmtzs == 1) { + retVal = true + } + } + return err + }, "isOrderSupport3rdDelivery") + return retVal +}