- delivery fee added.

- fixed scheduler bug
This commit is contained in:
gazebo
2018-07-19 18:05:40 +08:00
parent 56fcb4f4ed
commit a56cb64f8e
8 changed files with 111 additions and 10 deletions

View File

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