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