- fixed panic caused by other status in mergeOrderStatusConfig.

This commit is contained in:
gazebo
2018-07-18 23:51:54 +08:00
parent 50a4a2a940
commit bbed659c04

View File

@@ -61,7 +61,7 @@ func init() {
// 以下是订单 // 以下是订单
func (s *DefScheduler) OnOrderNew(order *model.GoodsOrder) (err error) { func (s *DefScheduler) OnOrderNew(order *model.GoodsOrder) (err error) {
config := s.mergeOrderStartConfig(order.Status, s.GetPurchasePlatformFromVendorID(order.VendorID).GetStatusActionConfig(order.Status)) config := s.mergeOrderStatusConfig(order.Status, s.GetPurchasePlatformFromVendorID(order.VendorID).GetStatusActionConfig(order.Status))
watchInfo := &WatchOrderInfo{ watchInfo := &WatchOrderInfo{
order: order, order: order,
timer: time.AfterFunc(jxutils.GetRealTimeout(order.OrderCreatedAt, config.Timeout), func() { timer: time.AfterFunc(jxutils.GetRealTimeout(order.OrderCreatedAt, config.Timeout), func() {
@@ -77,10 +77,10 @@ func (s *DefScheduler) OnOrderStatusChanged(status *model.OrderStatus) (err erro
if savedOrderInfo.timer != nil { if savedOrderInfo.timer != nil {
savedOrderInfo.timer.Stop() savedOrderInfo.timer.Stop()
} }
if status.Status < model.OrderStatusEndBegin { if status.Status > model.OrderStatusUnknown && status.Status < model.OrderStatusEndBegin {
s.updateOrderByStatus(savedOrderInfo.order, status) s.updateOrderByStatus(savedOrderInfo.order, status)
config := s.mergeOrderStartConfig(status.Status, s.GetPurchasePlatformFromVendorID(status.VendorID).GetStatusActionConfig(status.Status)) config := s.mergeOrderStatusConfig(status.Status, s.GetPurchasePlatformFromVendorID(status.VendorID).GetStatusActionConfig(status.Status))
if config.TimeoutAction != nil { if config != nil && config.TimeoutAction != nil {
var timeout time.Duration var timeout time.Duration
if status.Status == model.OrderStatusAccepted { if status.Status == model.OrderStatusAccepted {
savedOrderInfo := s.loadWatchOrderFromMap(status.VendorOrderID, status.VendorID) savedOrderInfo := s.loadWatchOrderFromMap(status.VendorOrderID, status.VendorID)
@@ -273,10 +273,15 @@ func (s *DefScheduler) handleAutoAcceptOrder(orderID string, vendorID int, userM
return handleType return handleType
} }
func (s *DefScheduler) mergeOrderStartConfig(status int, config *scheduler.StatusActionConfig) (retVal *scheduler.StatusActionConfig) { func (s *DefScheduler) mergeOrderStatusConfig(status int, config *scheduler.StatusActionConfig) (retVal *scheduler.StatusActionConfig) {
retVal = &scheduler.StatusActionConfig{ defConfig := s.defWorkflowConfig[status]
Timeout: s.defWorkflowConfig[status].Timeout, if defConfig == nil && config == nil {
TimeoutAction: s.defWorkflowConfig[status].TimeoutAction, return nil
}
retVal = &scheduler.StatusActionConfig{}
if defConfig != nil {
retVal.Timeout = defConfig.Timeout
retVal.TimeoutAction = defConfig.TimeoutAction
} }
if config != nil { if config != nil {
if config.Timeout >= 0 { if config.Timeout >= 0 {