- 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) {
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{
order: order,
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 {
savedOrderInfo.timer.Stop()
}
if status.Status < model.OrderStatusEndBegin {
if status.Status > model.OrderStatusUnknown && status.Status < model.OrderStatusEndBegin {
s.updateOrderByStatus(savedOrderInfo.order, status)
config := s.mergeOrderStartConfig(status.Status, s.GetPurchasePlatformFromVendorID(status.VendorID).GetStatusActionConfig(status.Status))
if config.TimeoutAction != nil {
config := s.mergeOrderStatusConfig(status.Status, s.GetPurchasePlatformFromVendorID(status.VendorID).GetStatusActionConfig(status.Status))
if config != nil && config.TimeoutAction != nil {
var timeout time.Duration
if status.Status == model.OrderStatusAccepted {
savedOrderInfo := s.loadWatchOrderFromMap(status.VendorOrderID, status.VendorID)
@@ -273,10 +273,15 @@ func (s *DefScheduler) handleAutoAcceptOrder(orderID string, vendorID int, userM
return handleType
}
func (s *DefScheduler) mergeOrderStartConfig(status int, config *scheduler.StatusActionConfig) (retVal *scheduler.StatusActionConfig) {
retVal = &scheduler.StatusActionConfig{
Timeout: s.defWorkflowConfig[status].Timeout,
TimeoutAction: s.defWorkflowConfig[status].TimeoutAction,
func (s *DefScheduler) mergeOrderStatusConfig(status int, config *scheduler.StatusActionConfig) (retVal *scheduler.StatusActionConfig) {
defConfig := s.defWorkflowConfig[status]
if defConfig == nil && config == nil {
return nil
}
retVal = &scheduler.StatusActionConfig{}
if defConfig != nil {
retVal.Timeout = defConfig.Timeout
retVal.TimeoutAction = defConfig.TimeoutAction
}
if config != nil {
if config.Timeout >= 0 {