From 208e836f40c08a8c4bd9544f7823fc7ad6632b26 Mon Sep 17 00:00:00 2001 From: gazebo Date: Wed, 6 Nov 2019 14:29:13 +0800 Subject: [PATCH] =?UTF-8?q?=E6=95=B4=E7=90=86=E8=AE=A2=E5=8D=95=E8=B0=83?= =?UTF-8?q?=E6=95=B4=E4=B8=AD=E5=AF=B9=E4=BA=8EDeliveryType=E7=9B=B8?= =?UTF-8?q?=E5=85=B3=E7=9A=84=E6=B5=81=E7=A8=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../scheduler/basesch/basesch_ext.go | 22 ++------ .../jxcallback/scheduler/defsch/defsch.go | 38 ++++++------- .../jxcallback/scheduler/defsch/defsch_ext.go | 4 +- business/model/dao/store.go | 53 ++----------------- business/model/order.go | 10 ++++ business/partner/purchase/jx/order.go | 1 + 6 files changed, 38 insertions(+), 90 deletions(-) diff --git a/business/jxcallback/scheduler/basesch/basesch_ext.go b/business/jxcallback/scheduler/basesch/basesch_ext.go index 7a007012c..6a775d24a 100644 --- a/business/jxcallback/scheduler/basesch/basesch_ext.go +++ b/business/jxcallback/scheduler/basesch/basesch_ext.go @@ -4,7 +4,6 @@ import ( "fmt" "git.rosy.net.cn/baseapi/utils/errlist" - "git.rosy.net.cn/jx-callback/business/jxcallback/scheduler" "git.rosy.net.cn/jx-callback/business/jxutils" "git.rosy.net.cn/jx-callback/business/jxutils/jxcontext" "git.rosy.net.cn/jx-callback/business/model" @@ -65,9 +64,9 @@ func (c *BaseScheduler) SelfDeliveredAndUpdateStatus(ctx *jxcontext.Context, ven globals.SugarLogger.Infof("SelfDeliveredAndUpdateStatus orderID:%s userName:%s", vendorOrderID, userName) order, err := partner.CurOrderManager.LoadOrder(vendorOrderID, vendorID) if err == nil { - if c.GetStoreDeliveryType(order, nil) == scheduler.StoreDeliveryTypeByStore { + if model.IsOrderDeliveryByStore(order) { err = c.SelfDeliverDelivered(order, userName) - } else { + } else if model.IsOrderDeliveryByPlatform(order) { err = c.Swtich2SelfDelivered(order, userName) } if err == nil { @@ -91,7 +90,7 @@ func (c *BaseScheduler) PickupGoodsAndUpdateStatus(ctx *jxcontext.Context, vendo globals.SugarLogger.Infof("PickupGoodsAndUpdateStatus orderID:%s userName:%s", vendorOrderID, userName) order, err := partner.CurOrderManager.LoadOrder(vendorOrderID, vendorID) if err == nil { - err = c.PickupGoods(order, c.GetStoreDeliveryType(order, nil) == scheduler.StoreDeliveryTypeByStore, userName) + err = c.PickupGoods(order, model.IsOrderDeliveryByStore(order), userName) if err == nil { order.Status = model.OrderStatusFinishedPickup if err = partner.CurOrderManager.UpdateOrderStatusAndDeliveryFlag(order); err == nil { @@ -107,21 +106,6 @@ func (c *BaseScheduler) PickupGoodsAndUpdateStatus(ctx *jxcontext.Context, vendo return err } -func (c *BaseScheduler) GetStoreDeliveryType(order *model.GoodsOrder, storeMap *model.StoreMap) (deliveryType int) { - globals.SugarLogger.Debugf("GetStoreDeliveryType orderID:%s", order.VendorOrderID) - jxStoreID := jxutils.GetSaleStoreIDFromOrder(order) - if storeMap == nil { - storeMap, _ = dao.FakeGetStoreMapByStoreID(nil, jxStoreID, order.VendorID) - } - - deliveryType = scheduler.StoreDeliveryTypeByPlatform // 缺省值 - if storeMap != nil { - deliveryType = int(storeMap.DeliveryType) - } - globals.SugarLogger.Debugf("GetStoreDeliveryType orderID:%s, deliveryType:%d", order.VendorOrderID, deliveryType) - return deliveryType -} - func (c *BaseScheduler) AdjustOrder(ctx *jxcontext.Context, order *model.GoodsOrder, removedSkuList []*model.OrderSku, reason string) (err error) { if c.IsReallyCallPlatformAPI { err = partner.GetPurchaseOrderHandlerFromVendorID(order.VendorID).AdjustOrder(ctx, order, removedSkuList, reason) diff --git a/business/jxcallback/scheduler/defsch/defsch.go b/business/jxcallback/scheduler/defsch/defsch.go index a85b892e0..a6f2e19b4 100644 --- a/business/jxcallback/scheduler/defsch/defsch.go +++ b/business/jxcallback/scheduler/defsch/defsch.go @@ -67,7 +67,6 @@ type WatchOrderInfo struct { order *model.GoodsOrder // order里的信息是保持更新的 autoPickupTimeoutMinute int // 0表示禁用,1表示用缺省值time2AutoPickupMin,其它表示分钟数 - storeDeliveryType int isDeliveryCompetition bool isNeedCreate3rdWaybill bool @@ -107,7 +106,6 @@ type DefScheduler struct { func NewWatchOrderInfo(order *model.GoodsOrder) (retVal *WatchOrderInfo) { retVal = &WatchOrderInfo{ autoPickupTimeoutMinute: 1, - storeDeliveryType: scheduler.StoreDeliveryTypeCrowdSourcing, waybills: map[int]*model.Waybill{}, } retVal.SetOrder(order) @@ -130,14 +128,12 @@ func (s *WatchOrderInfo) updateOrderStoreFeature(order *model.GoodsOrder) (err e jxStoreID := jxutils.GetSaleStoreIDFromOrder(order) if jxStoreID > 0 { db := dao.GetDB() - storeMap, err2 := dao.FakeGetStoreMapByStoreID(db, jxStoreID, order.VendorID) + storeDetail, err2 := dao.GetStoreDetail(db, jxStoreID, order.VendorID) if err = err2; err != nil { return err } - s.autoPickupTimeoutMinute = int(storeMap.AutoPickup) - s.storeDeliveryType = FixedScheduler.GetStoreDeliveryType(order, storeMap) - s.isDeliveryCompetition = storeMap.DeliveryCompetition != 0 - globals.SugarLogger.Debugf("updateOrderStoreFeature orderID:%s, s.storeDeliveryType:%d", order.VendorOrderID, s.storeDeliveryType) + s.autoPickupTimeoutMinute = int(storeDetail.AutoPickup) + s.isDeliveryCompetition = storeDetail.DeliveryCompetition != 0 } return err } @@ -229,7 +225,7 @@ func init() { TimeoutGap: 0, }, TimeoutAction: func(savedOrderInfo *WatchOrderInfo, bill *model.Waybill) (err error) { - if savedOrderInfo.storeDeliveryType == scheduler.StoreDeliveryTypeByStore && savedOrderInfo.order.DeliveryType != model.OrderDeliveryTypeSelfTake { // 自配送商家使用 + if model.IsOrderDeliveryByStore(savedOrderInfo.order) { // 自配送商家使用 // 启动抢单TIMER sch.saveDeliveryFeeFromAndStartWatch(savedOrderInfo, savedOrderInfo.order.StatusTime) return sch.createWaybillOn3rdProviders(savedOrderInfo, 0, nil) @@ -237,7 +233,7 @@ func init() { return nil }, ShouldSetTimer: func(savedOrderInfo *WatchOrderInfo, bill *model.Waybill) bool { - return savedOrderInfo.storeDeliveryType == scheduler.StoreDeliveryTypeByStore && savedOrderInfo.order.DeliveryType != model.OrderDeliveryTypeSelfTake + return model.IsOrderDeliveryByStore(savedOrderInfo.order) }, }, }, @@ -251,7 +247,7 @@ func init() { TimeoutAction: func(savedOrderInfo *WatchOrderInfo, bill *model.Waybill) (err error) { // 饿百转自送的时机不太清楚,暂时禁用超时转自送,在饿百运单取消时还是会自动创建 if savedOrderInfo.isDeliveryCompetition && - savedOrderInfo.storeDeliveryType != scheduler.StoreDeliveryTypeByStore && + model.IsOrderDeliveryByPlatform(savedOrderInfo.order) && savedOrderInfo.order.VendorID == bill.WaybillVendorID && savedOrderInfo.order.VendorID != model.VendorIDEBAI && savedOrderInfo.order.DeliveryType != model.OrderDeliveryTypeSelfTake { // 非自配送商家使用 @@ -261,7 +257,7 @@ func init() { }, ShouldSetTimer: func(savedOrderInfo *WatchOrderInfo, bill *model.Waybill) bool { return savedOrderInfo.isDeliveryCompetition && - savedOrderInfo.storeDeliveryType != scheduler.StoreDeliveryTypeByStore && + model.IsOrderDeliveryByPlatform(savedOrderInfo.order) && savedOrderInfo.order.VendorID == bill.WaybillVendorID && savedOrderInfo.order.VendorID != model.VendorIDEBAI && savedOrderInfo.order.DeliveryType != model.OrderDeliveryTypeSelfTake @@ -278,7 +274,7 @@ func init() { if (order.Status >= model.OrderStatusFinishedPickup && order.Status < model.OrderStatusEndBegin) && savedOrderInfo.isDeliveryCompetition && savedOrderInfo.order.VendorID == bill.WaybillVendorID && - savedOrderInfo.storeDeliveryType != scheduler.StoreDeliveryTypeByStore && + model.IsOrderDeliveryByPlatform(savedOrderInfo.order) && order.VendorID == model.VendorIDEBAI && savedOrderInfo.order.DeliveryType != model.OrderDeliveryTypeSelfTake { // 非自配送商家使用 return sch.createWaybillOn3rdProviders(savedOrderInfo, ebaiCancelWaybillMaxFee, nil) @@ -290,7 +286,7 @@ func init() { return (order.Status >= model.OrderStatusFinishedPickup && order.Status < model.OrderStatusEndBegin) && savedOrderInfo.isDeliveryCompetition && savedOrderInfo.order.VendorID == bill.WaybillVendorID && - savedOrderInfo.storeDeliveryType != scheduler.StoreDeliveryTypeByStore && + model.IsOrderDeliveryByPlatform(savedOrderInfo.order) && order.VendorID == model.VendorIDEBAI && savedOrderInfo.order.DeliveryType != model.OrderDeliveryTypeSelfTake }, @@ -477,7 +473,7 @@ func (s *DefScheduler) OnWaybillStatusChanged(bill *model.Waybill, isPending boo partner.CurOrderManager.UpdateOrderStatusAndDeliveryFlag(order) } } else { - if savedOrderInfo.storeDeliveryType == scheduler.StoreDeliveryTypeByStore { + if model.IsOrderDeliveryByStore(savedOrderInfo.order) { if err := s.SelfDeliverDelivering(savedOrderInfo.order, bill.CourierMobile); err != nil { partner.CurOrderManager.OnOrderMsg(order, "自送出设置失败", err.Error()) } @@ -552,9 +548,9 @@ func (s *DefScheduler) OnWaybillStatusChanged(bill *model.Waybill, isPending boo if !isPending { var err2 error if !model.IsWaybillPlatformOwn(bill) { - if savedOrderInfo.storeDeliveryType == scheduler.StoreDeliveryTypeByStore { + if model.IsOrderDeliveryByStore(order) { err2 = s.SelfDeliverDelivered(order, "") - } else { + } else if model.IsOrderDeliveryByPlatform(order) { err2 = s.Swtich2SelfDelivered(order, "") } } @@ -987,8 +983,8 @@ func (s *DefScheduler) updateBillsInfo(savedOrderInfo *WatchOrderInfo, bill *mod } func (s *DefScheduler) autoPickupGood(savedOrderInfo *WatchOrderInfo) (err error) { - if err = s.PickupGoods(savedOrderInfo.order, savedOrderInfo.storeDeliveryType == scheduler.StoreDeliveryTypeByStore, ""); err == nil { - order := savedOrderInfo.order + order := savedOrderInfo.order + if err = s.PickupGoods(order, model.IsOrderDeliveryByStore(order), ""); err == nil { order.DeliveryFlag |= model.OrderDeliveryFlagMaskAutoPickup partner.CurOrderManager.UpdateOrderFields(order, []string{"DeliveryFlag"}) } else if err == scheduler.ErrOrderStatusAlreadySatisfyCurOperation { @@ -1059,9 +1055,9 @@ func (s *DefScheduler) saveDeliveryFeeFromAndStartWatch(savedOrderInfo *WatchOrd } func (s *DefScheduler) watchOrderWaybills(savedOrderInfo *WatchOrderInfo) { - if savedOrderInfo.storeDeliveryType != scheduler.StoreDeliveryTypeByStore && savedOrderInfo.isDeliveryCompetition || - savedOrderInfo.storeDeliveryType == scheduler.StoreDeliveryTypeByStore { - order2 := savedOrderInfo.order + order2 := savedOrderInfo.order + if model.IsOrderDeliveryByPlatform(order2) && savedOrderInfo.isDeliveryCompetition || + model.IsOrderDeliveryByStore(order2) { if order, err := partner.CurOrderManager.LoadOrder(order2.VendorOrderID, order2.VendorID); err == nil { savedOrderInfo.SetOrder(order) if isNeedWatch3rdWaybill(order) { diff --git a/business/jxcallback/scheduler/defsch/defsch_ext.go b/business/jxcallback/scheduler/defsch/defsch_ext.go index 416820c54..3b875dbad 100644 --- a/business/jxcallback/scheduler/defsch/defsch_ext.go +++ b/business/jxcallback/scheduler/defsch/defsch_ext.go @@ -33,7 +33,7 @@ func (s *DefScheduler) SelfDeliveringAndUpdateStatus(ctx *jxcontext.Context, ven if err = s.isPossibleSwitch2SelfDelivery(order); err == nil { err = s.cancelOtherWaybillsCheckOrderDeliveryFlag(savedOrderInfo, nil, partner.CancelWaybillReasonOther, partner.CancelWaybillReasonStrActive) if err == nil { - if savedOrderInfo.storeDeliveryType == scheduler.StoreDeliveryTypeByStore { + if model.IsOrderDeliveryByStore(order) { if order.Status < model.OrderStatusDelivering { storeDetail, err2 := dao.GetStoreDetail(dao.GetDB(), order.StoreID, order.VendorID) phone := userName @@ -91,7 +91,7 @@ func (s *DefScheduler) canOrderCreateWaybillNormally(order *model.GoodsOrder) (e } func (s *DefScheduler) isPossibleSwitch2SelfDelivery(order *model.GoodsOrder) (err error) { - if scheduler.StoreDeliveryTypeByStore != s.GetStoreDeliveryType(order, nil) { + if model.IsOrderDeliveryByPlatform(order) { if order.Status < model.OrderStatusFinishedPickup { err = fmt.Errorf("拣货完成后才能转自配送") } else if order.Status == model.OrderStatusFinishedPickup { diff --git a/business/model/dao/store.go b/business/model/dao/store.go index 6f282ec78..4f9b313af 100644 --- a/business/model/dao/store.go +++ b/business/model/dao/store.go @@ -6,8 +6,6 @@ import ( "git.rosy.net.cn/baseapi/utils" "git.rosy.net.cn/jx-callback/business/model" - "git.rosy.net.cn/jx-callback/globals" - "github.com/astaxie/beego/orm" ) // 带购物平台信息的 @@ -97,13 +95,15 @@ func getStoreDetail(db *DaoDB, storeID, vendorID int, vendorStoreID string) (sto sql += " AND t2.vendor_store_id = ?" sqlParams = append(sqlParams, vendorStoreID) } - storeDetail = &StoreDetail{} - if err = GetRow(db, storeDetail, sql, sqlParams...); err == nil { + if err = GetRow(db, &storeDetail, sql, sqlParams...); err == nil { storeDetail.PricePercentagePackObj = PricePercentagePack2Obj(storeDetail.PricePercentagePackStr) storeDetail.FreightDeductionPackObj = FreightDeductionPack2Obj(storeDetail.FreightDeductionPackStr) - if vendorID == model.VendorIDJX { + if storeDetail.VendorStoreID == "" { storeDetail.VendorStatus = storeDetail.Status storeDetail.PricePercentage = 100 + storeDetail.AutoPickup = 1 + storeDetail.DeliveryType = model.StoreDeliveryTypeByStore + storeDetail.DeliveryCompetition = 1 } return storeDetail, nil } @@ -339,49 +339,6 @@ func AddStoreCategoryMap(db *DaoDB, storeID, categoryID int, vendorID int, vendo return err } -func GetStoreMapByStoreID(db *DaoDB, storeID, vendorID int) (storeMap *model.StoreMap, err error) { - if db == nil { - db = GetDB() - } - storeMap = &model.StoreMap{ - StoreID: storeID, - VendorID: vendorID, - } - storeMap.DeletedAt = utils.DefaultTimeValue - if err = GetEntity(db, storeMap, model.FieldStoreID, model.FieldVendorID, model.FieldDeletedAt); err != nil { - if err != orm.ErrNoRows { - globals.SugarLogger.Warnf("GetStoreMapByStoreID storeID:%d, vendorID:%d read storeMap failed with error:%v", storeID, vendorID, err) - } - return nil, err - } - return storeMap, nil -} - -func FakeGetStoreMapByStoreID(db *DaoDB, storeID, vendorID int) (storeMap *model.StoreMap, err error) { - vendorID2 := vendorID - if model.IsSpecialVendorID(vendorID) { - vendorID2 = model.VendorIDJD // 微商城与京西的属性以京东属性为准(以免再绑定) - } - if storeMap, err = GetStoreMapByStoreID(db, storeID, vendorID2); model.IsSpecialVendorID(vendorID) && IsNoRowsError(err) { - err = nil - storeMap = &model.StoreMap{ - StoreID: storeID, - VendorID: vendorID2, - Status: model.StoreStatusOpened, - PricePercentage: 100, - AutoPickup: 1, - DeliveryType: model.StoreDeliveryTypeByStore, - // DeliveryFee - DeliveryCompetition: 1, - IsSync: 1, - } - } - if storeMap != nil && vendorID == model.VendorIDJX { - storeMap.DeliveryType = model.StoreDeliveryTypeByStore - } - return storeMap, err -} - func GetOpenedStoreCouriersByStoreID(db *DaoDB, storeID, vendorID int) (storeMaps []*model.StoreCourierMap, err error) { if db == nil { db = GetDB() diff --git a/business/model/order.go b/business/model/order.go index cff7b15e2..fe19ca271 100644 --- a/business/model/order.go +++ b/business/model/order.go @@ -275,3 +275,13 @@ func IsOrderHaveWaybill(order *GoodsOrder) bool { func IsOrderHaveOwnWaybill(order *GoodsOrder) bool { return order.VendorID == order.WaybillVendorID && order.VendorWaybillID != "" } + +// 订单的初始配送方式是否是门店自配送 +func IsOrderDeliveryByStore(order *GoodsOrder) bool { + return order.DeliveryType == OrderDeliveryTypeStoreSelf +} + +// 订单的初始配送方式是否是平台负责配送 +func IsOrderDeliveryByPlatform(order *GoodsOrder) bool { + return order.DeliveryType == OrderDeliveryTypePlatform +} diff --git a/business/partner/purchase/jx/order.go b/business/partner/purchase/jx/order.go index a12c86bce..df4c06acd 100644 --- a/business/partner/purchase/jx/order.go +++ b/business/partner/purchase/jx/order.go @@ -59,6 +59,7 @@ func (c *PurchaseHandler) callbackMsg2Status(msg *CallbackMsg) *model.OrderStatu func (c *PurchaseHandler) onOrderNew(msg *CallbackMsg, subMsgType int, order *Data4Neworder) (retVal, errCode string, err error) { globals.SugarLogger.Debugf("onOrderNew orderID:%s", msg.ThingID) order.StoreID = int(utils.Str2Int64WithDefault(order.VendorStoreID, 0)) + order.DeliveryType = model.OrderDeliveryTypeStoreSelf order.GoodsOrder.Skus = order.Skus order.VendorID = model.VendorIDJX for _, v := range order.GoodsOrder.Skus {