- 将加小费的起始计算时间统一为平台创建运单的时间
This commit is contained in:
@@ -63,17 +63,20 @@ type WatchOrderInfo struct {
|
||||
|
||||
autoPickupTimeoutMinute int // 0表示禁用,1表示用缺省值time2AutoPickupMin,其它表示分钟数
|
||||
storeDeliveryType int
|
||||
|
||||
isDeliveryCompetition bool
|
||||
pmWaybillCreatedAt time.Time
|
||||
isNeedCreate3rdWaybill bool
|
||||
isAddWaybillTipDisabled bool
|
||||
waybills map[int]*model.Waybill // 这个waybills里的状态信息是不真实的,只使用id相关的信息
|
||||
|
||||
waybills map[int]*model.Waybill // 这个waybills里的状态信息是不真实的,只使用id相关的信息
|
||||
|
||||
timerStatusType int // 0表示订单,1表示运单
|
||||
timerStatus int
|
||||
timer *time.Timer
|
||||
timerTime time.Time
|
||||
|
||||
retryCount int // 失败后尝试的次数,调试阶段可能出现死循化,阻止这种情况发生
|
||||
isNeedCreate3rdWaybill bool
|
||||
retryCount int // 失败后尝试的次数,调试阶段可能出现死循化,阻止这种情况发生
|
||||
}
|
||||
|
||||
type StatusActionConfig struct {
|
||||
@@ -347,17 +350,6 @@ func (s *DefScheduler) OnOrderStatusChanged(order *model.GoodsOrder, status *mod
|
||||
s.orderMap.Delete(jxutils.GetUniversalOrderIDFromOrderStatus(status))
|
||||
}
|
||||
}
|
||||
if savedOrderInfo.order.Status == model.OrderStatusFinishedPickup {
|
||||
duration := order.StatusTime.Add(minAddWaybillTipMinute * time.Minute).Sub(time.Now())
|
||||
if duration <= 0 {
|
||||
duration = 1 * time.Second
|
||||
}
|
||||
utils.AfterFuncWithRecover(duration, func() {
|
||||
jxutils.CallMsgHandlerAsync(func() {
|
||||
s.handleWaybillTip(savedOrderInfo)
|
||||
}, jxutils.ComposeUniversalOrderID(order.VendorOrderID, order.VendorID))
|
||||
})
|
||||
}
|
||||
}
|
||||
if order.LockStatus != model.OrderStatusUnknown {
|
||||
s.stopTimer(savedOrderInfo)
|
||||
@@ -430,6 +422,20 @@ func (s *DefScheduler) OnWaybillStatusChanged(bill *model.Waybill, isPending boo
|
||||
// 只有购物平台的新运单消息才会启动抢单TIMER
|
||||
if model.IsWaybillPlatformOwn(bill) {
|
||||
s.resetTimer(savedOrderInfo, bill, isPending)
|
||||
isFirst := utils.IsTimeZero(savedOrderInfo.pmWaybillCreatedAt)
|
||||
savedOrderInfo.pmWaybillCreatedAt = bill.StatusTime
|
||||
savedOrderInfo.isAddWaybillTipDisabled = false
|
||||
if isFirst {
|
||||
duration := savedOrderInfo.pmWaybillCreatedAt.Add(minAddWaybillTipMinute * time.Minute).Sub(time.Now())
|
||||
if duration <= 0 {
|
||||
duration = 1 * time.Second
|
||||
}
|
||||
utils.AfterFuncWithRecover(duration, func() {
|
||||
jxutils.CallMsgHandlerAsync(func() {
|
||||
s.handleWaybillTip(savedOrderInfo)
|
||||
}, jxutils.ComposeUniversalOrderID(order.VendorOrderID, order.VendorID))
|
||||
})
|
||||
}
|
||||
}
|
||||
} else {
|
||||
isBillExist := s.updateBillsInfo(savedOrderInfo, bill)
|
||||
@@ -490,9 +496,6 @@ func (s *DefScheduler) OnWaybillStatusChanged(bill *model.Waybill, isPending boo
|
||||
case model.WaybillStatusAcceptCanceled:
|
||||
if s.isBillCandidate(order, bill) {
|
||||
s.resetTimer(savedOrderInfo, bill, isPending)
|
||||
if model.IsWaybillPlatformOwn(bill) {
|
||||
savedOrderInfo.isAddWaybillTipDisabled = false
|
||||
}
|
||||
if !isPending {
|
||||
s.updateOrderByBill(order, nil, true)
|
||||
}
|
||||
@@ -612,7 +615,7 @@ func (s *DefScheduler) createWaybillOn3rdProviders(savedOrderInfo *WatchOrderInf
|
||||
if (order.DeliveryFlag & model.OrderDeliveryFlagMaskScheduleDisabled) == 0 {
|
||||
if savedOrderInfo.retryCount <= maxWaybillRetryCount {
|
||||
savedOrderInfo.isNeedCreate3rdWaybill = true
|
||||
if _, err = s.CreateWaybillOnProviders4SavedOrder(jxcontext.AdminCtx, savedOrderInfo, nil, false, 1000, 1000, s.getMaxDeliveryFee(order)); err == nil {
|
||||
if _, err = s.CreateWaybillOnProviders4SavedOrder(jxcontext.AdminCtx, savedOrderInfo, nil, false, 1000, 1000, s.getMaxDeliveryFee(savedOrderInfo)); err == nil {
|
||||
savedOrderInfo.retryCount++
|
||||
}
|
||||
} else {
|
||||
@@ -985,32 +988,28 @@ func (s *DefScheduler) autoPickupGood(savedOrderInfo *WatchOrderInfo) (err error
|
||||
return err
|
||||
}
|
||||
|
||||
func (s *DefScheduler) getWaybillTip(order *model.GoodsOrder) (tipFee int64) {
|
||||
if order.Status == model.OrderStatusFinishedPickup {
|
||||
statusTime := order.StatusTime
|
||||
if order.BusinessType != model.BusinessTypeImmediate {
|
||||
statusTime = order.PickDeadline
|
||||
}
|
||||
if !utils.IsTimeZero(statusTime) {
|
||||
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/(addWaybillTipGap*time.Minute)) + 1
|
||||
tipFee = timeGap * 100
|
||||
if tipFee > 600 {
|
||||
tipFee = 600
|
||||
}
|
||||
func (s *DefScheduler) getWaybillTip(savedOrderInfo *WatchOrderInfo) (tipFee int64) {
|
||||
order := savedOrderInfo.order
|
||||
if order.Status == model.OrderStatusFinishedPickup &&
|
||||
!utils.IsTimeZero(savedOrderInfo.pmWaybillCreatedAt) {
|
||||
startTime := savedOrderInfo.pmWaybillCreatedAt.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/(addWaybillTipGap*time.Minute)) + 1
|
||||
tipFee = timeGap * 100
|
||||
if tipFee > 600 {
|
||||
tipFee = 600
|
||||
}
|
||||
}
|
||||
}
|
||||
return tipFee
|
||||
}
|
||||
|
||||
func (s *DefScheduler) getMaxDeliveryFee(order *model.GoodsOrder) (maxDeliveryFee int64) {
|
||||
maxDeliveryFee = 400 + order.DistanceFreightMoney + s.getWaybillTip(order)
|
||||
func (s *DefScheduler) getMaxDeliveryFee(savedOrderInfo *WatchOrderInfo) (maxDeliveryFee int64) {
|
||||
maxDeliveryFee = 400 + savedOrderInfo.order.DistanceFreightMoney + s.getWaybillTip(savedOrderInfo)
|
||||
return maxDeliveryFee
|
||||
}
|
||||
|
||||
@@ -1019,11 +1018,12 @@ func (s *DefScheduler) handleWaybillTip(savedOrderInfo *WatchOrderInfo) {
|
||||
savedOrderInfo.isDeliveryCompetition {
|
||||
order2 := savedOrderInfo.order
|
||||
if order, err := partner.CurOrderManager.LoadOrder(order2.VendorOrderID, order2.VendorID); err == nil {
|
||||
savedOrderInfo.SetOrder(order)
|
||||
if order.Status == model.OrderStatusFinishedPickup &&
|
||||
order.DeliveryFlag&model.OrderDeliveryFlagMaskScheduleDisabled == 0 &&
|
||||
order.BusinessType == model.BusinessTypeImmediate {
|
||||
if !savedOrderInfo.isAddWaybillTipDisabled {
|
||||
if tipFee := s.getWaybillTip(order); tipFee > 0 {
|
||||
order.DeliveryFlag&model.OrderDeliveryFlagMaskScheduleDisabled == 0 {
|
||||
if !utils.IsTimeZero(savedOrderInfo.pmWaybillCreatedAt) &&
|
||||
!savedOrderInfo.isAddWaybillTipDisabled {
|
||||
if tipFee := s.getWaybillTip(savedOrderInfo); 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))
|
||||
|
||||
Reference in New Issue
Block a user