+ handleWaybillTip

This commit is contained in:
gazebo
2019-07-30 16:26:56 +08:00
parent 65994f8824
commit 2cce24bd72
4 changed files with 64 additions and 9 deletions

View File

@@ -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
}