- 将加小费的起始计算时间统一为平台创建运单的时间

This commit is contained in:
gazebo
2019-07-31 16:32:37 +08:00
parent 4244a7def1
commit a65bf09ac4

View File

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