- delivery fee added.
- fixed scheduler bug
This commit is contained in:
@@ -23,9 +23,10 @@ const (
|
||||
)
|
||||
|
||||
type WatchOrderInfo struct {
|
||||
order *model.GoodsOrder // order里的信息是保持更新的
|
||||
waybills []*model.Waybill // 这个waybills里的状态信息是不真实的,只使用id相关的信息
|
||||
timer *time.Timer
|
||||
order *model.GoodsOrder // order里的信息是保持更新的
|
||||
waybills []*model.Waybill // 这个waybills里的状态信息是不真实的,只使用id相关的信息
|
||||
timerStatus int
|
||||
timer *time.Timer
|
||||
}
|
||||
|
||||
// 重要:此调度器要求同一定单的处理逻辑必须是序列化了的,不然会有并发问题
|
||||
@@ -99,12 +100,17 @@ func (s *DefScheduler) OnWaybillStatusChanged(bill *model.Waybill) (err error) {
|
||||
globals.SugarLogger.Debugf("OnWaybillStatusChanged, bill:%v", bill)
|
||||
savedOrderInfo := s.loadWatchOrderFromMap(bill.VendorOrderID, bill.OrderVendorID)
|
||||
if bill.Status == model.WaybillStatusNew {
|
||||
if savedOrderInfo.order.WaybillVendorID == model.VendorIDUnknown {
|
||||
s.resetTimer(model.OrderStatusFinishedPickup, savedOrderInfo, 0)
|
||||
if bill.OrderVendorID == bill.WaybillVendorID {
|
||||
if savedOrderInfo.timerStatus == model.OrderStatusFinishedPickup {
|
||||
s.resetTimer(model.OrderStatusFinishedPickup, savedOrderInfo, 0)
|
||||
} else {
|
||||
globals.SugarLogger.Infof("OnWaybillStatusChanged met other timer, status:%d", savedOrderInfo.timerStatus)
|
||||
}
|
||||
err = s.addWaybill2Map(savedOrderInfo, bill)
|
||||
} else {
|
||||
}
|
||||
if savedOrderInfo.order.WaybillVendorID != model.VendorIDUnknown {
|
||||
globals.SugarLogger.Infof("OnWaybillStatusChanged multiple waybill created, bill:%v", bill)
|
||||
if bill.WaybillVendorID != bill.OrderVendorID {
|
||||
if bill.WaybillVendorID != bill.WaybillVendorID {
|
||||
s.GetDeliveryPlatformFromVendorID(bill.WaybillVendorID).CancelWaybill(bill)
|
||||
}
|
||||
}
|
||||
@@ -263,12 +269,15 @@ func (s *DefScheduler) resetTimer(status int, savedOrderInfo *WatchOrderInfo, ga
|
||||
config := s.mergeOrderStatusConfig(status, s.GetPurchasePlatformFromVendorID(savedOrderInfo.order.VendorID).GetStatusActionConfig(status))
|
||||
if config != nil && config.TimeoutAction != nil {
|
||||
var timeout time.Duration
|
||||
if status == model.OrderStatusAccepted {
|
||||
if status == model.OrderStatusNew {
|
||||
timeout = config.Timeout // 绝对值
|
||||
} else if status == model.OrderStatusAccepted {
|
||||
timeout = s.getLatestPickupTimeout(savedOrderInfo.order, config.Timeout)
|
||||
} else {
|
||||
timeout = jxutils.GetRealTimeout(savedOrderInfo.order.StatusTime, config.Timeout)
|
||||
}
|
||||
globals.SugarLogger.Debugf("resetTimer timeout:%v, orderid:%v", timeout, savedOrderInfo.order.VendorOrderID)
|
||||
savedOrderInfo.timerStatus = status
|
||||
savedOrderInfo.timer = time.AfterFunc(timeout+gap, func() {
|
||||
config.TimeoutAction(savedOrderInfo.order)
|
||||
})
|
||||
|
||||
Reference in New Issue
Block a user