From 2cce24bd72b6f3e55919af382267dda61d232dff Mon Sep 17 00:00:00 2001 From: gazebo Date: Tue, 30 Jul 2019 16:26:56 +0800 Subject: [PATCH] + handleWaybillTip --- .../jxcallback/scheduler/defsch/defsch.go | 57 ++++++++++++++++++- business/model/const.go | 2 + business/partner/purchase/jd/order.go | 2 +- business/partner/purchase/mtwm/order.go | 12 ++-- 4 files changed, 64 insertions(+), 9 deletions(-) diff --git a/business/jxcallback/scheduler/defsch/defsch.go b/business/jxcallback/scheduler/defsch/defsch.go index 75e0ae1d8..e987d1dfb 100644 --- a/business/jxcallback/scheduler/defsch/defsch.go +++ b/business/jxcallback/scheduler/defsch/defsch.go @@ -45,6 +45,8 @@ const ( time2Schedule3rdCarrierKey = "waitminute4mt" dingShiDaAheadTime = 30 * time.Minute // 定时达订单开始召唤配送的提前时间 + + minAddWaybillTipMinute = 15 // 最少开始加小费分钟(距离拣货完成) ) const ( @@ -334,6 +336,12 @@ func (s *DefScheduler) OnOrderStatusChanged(order *model.GoodsOrder, status *mod s.orderMap.Delete(jxutils.GetUniversalOrderIDFromOrderStatus(status)) } } + // if savedOrderInfo.order.Status == model.OrderStatusFinishedPickup { + // order := savedOrderInfo.order + // utils.AfterFuncWithRecover(minAddWaybillTipMinute*time.Minute, func() { + // s.handleWaybillTip(order) + // }) + // } } if order.LockStatus != model.OrderStatusUnknown { s.stopTimer(savedOrderInfo) @@ -941,13 +949,58 @@ func (s *DefScheduler) updateBillsInfo(savedOrderInfo *WatchOrderInfo, bill *mod } func (s *DefScheduler) autoPickupGood(savedOrderInfo *WatchOrderInfo) (err error) { - err = s.PickupGoods(savedOrderInfo.order, savedOrderInfo.storeDeliveryType == scheduler.StoreDeliveryTypeByStore, "") - if err == scheduler.ErrOrderStatusAlreadySatisfyCurOperation { + if err = s.PickupGoods(savedOrderInfo.order, savedOrderInfo.storeDeliveryType == scheduler.StoreDeliveryTypeByStore, ""); err == nil { + order := savedOrderInfo.order + order.DeliveryFlag |= model.OrderDeliveryFlagMaskAutoPickup + partner.CurOrderManager.UpdateOrderFields(order, []string{"DeliveryFlag"}) + } else if err == scheduler.ErrOrderStatusAlreadySatisfyCurOperation { err = nil } return err } +func (s *DefScheduler) getWaybillTip(order *model.GoodsOrder) (tipFee int64) { + if order.Status == model.OrderStatusFinishedPickup { + startTime := order.StatusTime.Add(minAddWaybillTipMinute * time.Minute) + if order.DeliveryFlag&model.OrderDeliveryFlagMaskAutoPickup != 0 { + startTime = startTime.Add(5 * time.Minute) + } + timeGap1 := time.Now().Sub(startTime) + if timeGap1 > 0 { + timeGap := int64(timeGap1/(5*time.Minute)) + 1 + tipFee = timeGap * 100 + if tipFee > 600 { + tipFee = 600 + } + } + } + return tipFee +} + +func (s *DefScheduler) handleWaybillTip(order2 *model.GoodsOrder) { + if order, err := partner.CurOrderManager.LoadOrder(order2.VendorOrderID, order2.VendorID); err == nil { + if order.Status == model.OrderStatusFinishedPickup { + if tipFee := s.getWaybillTip(order); tipFee > 0 { + if handler, ok := partner.GetPurchasePlatformFromVendorID(order.VendorID).(partner.IUpdateWaybillTip); ok && handler != nil { + err := handler.UpdateWaybillTip(jxcontext.AdminCtx, order, tipFee) + vendorStatus := fmt.Sprintf("添加小费:%s", jxutils.IntPrice2StandardCurrencyString(tipFee)) + remark := "" + if err == nil { + vendorStatus += "成功" + } else { + vendorStatus += "失败" + remark = fmt.Sprint(err) + } + partner.CurOrderManager.OnOrderMsg(order, vendorStatus, remark) + } + } + utils.AfterFuncWithRecover(5*time.Minute, func() { + s.handleWaybillTip(order) + }) + } + } +} + func (s *DefScheduler) isBillCandidate(order *model.GoodsOrder, bill *model.Waybill) bool { return order.WaybillVendorID == bill.WaybillVendorID && order.VendorWaybillID == bill.VendorWaybillID } diff --git a/business/model/const.go b/business/model/const.go index 7a1c5a64a..4e64f9b94 100644 --- a/business/model/const.go +++ b/business/model/const.go @@ -301,6 +301,8 @@ const ( OrderDeliveryFlagMaskScheduleDisabled = 1 // 禁止三方配送调度 OrderDeliveryFlagMaskPurcahseDisabled = 2 // 购物平台已不配送(一般为门店配送类型本身为自配送,或已经转自配送) + OrderDeliveryFlagMaskAutoPickup = 4 // 是否是自动拣货的 + OrderDeliveryFlagMaskDada = 16 // 创建达达运单中 OrderDeliveryFlagMaskMtps = 32 // 创建美团配送运单中 ) diff --git a/business/partner/purchase/jd/order.go b/business/partner/purchase/jd/order.go index 2ce4c73ae..861604b5a 100644 --- a/business/partner/purchase/jd/order.go +++ b/business/partner/purchase/jd/order.go @@ -447,7 +447,7 @@ func (c *PurchaseHandler) UpdateWaybillTip(ctx *jxcontext.Context, order *model. orderInfo, err := api.JdAPI.QuerySingleOrder2(order.VendorOrderID) if err == nil { tip2Add := int(tipFee) - orderInfo.Tips - if tip2Add > 0 { + if tip2Add != 0 { if globals.EnableJdStoreWrite { err = api.JdAPI.OrderAddTips(order.VendorOrderID, tip2Add, ctx.GetUserName()) } diff --git a/business/partner/purchase/mtwm/order.go b/business/partner/purchase/mtwm/order.go index 2691b9d29..4cd9e256b 100644 --- a/business/partner/purchase/mtwm/order.go +++ b/business/partner/purchase/mtwm/order.go @@ -576,9 +576,9 @@ func (c *PurchaseHandler) ListOrders(ctx *jxcontext.Context, parentTask tasksch. return vendorOrderIDs, err } -func (c *PurchaseHandler) UpdateWaybillTip(ctx *jxcontext.Context, order *model.GoodsOrder, tipFee int64) (err error) { - if globals.EnableMtwmStoreWrite { - err = api.MtwmAPI.OrderUpdateTip(utils.Str2Int64(order.VendorOrderID), jxutils.IntPrice2Standard(tipFee)) - } - return err -} +// func (c *PurchaseHandler) UpdateWaybillTip(ctx *jxcontext.Context, order *model.GoodsOrder, tipFee int64) (err error) { +// if globals.EnableMtwmStoreWrite { +// err = api.MtwmAPI.OrderUpdateTip(utils.Str2Int64(order.VendorOrderID), jxutils.IntPrice2Standard(tipFee)) +// } +// return err +// }