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