@@ -143,11 +143,11 @@ func (s *DefScheduler) OnWaybillStatusChanged(bill *model.Waybill, isPending boo
}
if bill . Status == model . WaybillStatusNew {
s . addWaybill2Map ( savedOrderInfo , bill )
if order . WaybillVendorID != model . VendorIDUnknown && order . WaybillVendorID != bill . WaybillVendorID {
globals . SugarLogger . Info f( "OnWaybillStatusChanged multiple waybill created, bill:%v" , bill )
if bill . WaybillVendorID ! = bill . WaybillVendorID {
if order . WaybillVendorID != model . VendorIDUnknown {
globals . SugarLogger . Debug f( "OnWaybillStatusChanged multiple waybill created, bill:%v" , bill )
if ! ( order . WaybillVendorID == bill . WaybillVendorID && order . VendorWaybillID = = bill . Vendor WaybillID ) && bill . WaybillVendorID != order . VendorID {
s . CancelWaybill ( bill )
} else {
} else if bill . WaybillVendorID == order . VendorID {
globals . SugarLogger . Warnf ( "OnWaybillStatusChanged bill:%v purchase platform bill came later than others, strange!!!" , bill )
}
}
@@ -164,7 +164,7 @@ func (s *DefScheduler) OnWaybillStatusChanged(bill *model.Waybill, isPending boo
}
s . resetTimer ( savedOrderInfo , scheduler . TimerStatusTypeWaybill , bill . Status , false )
case model . WaybillStatusAcceptCanceled :
if order . WaybillVendorID == bill . WaybillVendorID {
if order . WaybillVendorID == bill . WaybillVendorID && order . VendorWaybillID == bill . VendorWaybillID {
bill . WaybillVendorID = model . VendorIDUnknown
s . updateOrderByBill ( order , bill , false )
@@ -175,14 +175,15 @@ func (s *DefScheduler) OnWaybillStatusChanged(bill *model.Waybill, isPending boo
globals . SugarLogger . Warnf ( "OnWaybillStatusChanged AcceptCanceled orderID:%s got multiple bill:%v, order details:%v" , order . VendorOrderID , bill , order )
}
case model . WaybillStatusCourierArrived : // do nothing
if order . WaybillVendorID == bill . WaybillVendorID {
if order . WaybillVendorID == bill . WaybillVendorID && order . VendorWaybillID == bill . VendorWaybillID {
} else {
// s.CancelWaybill(bill)
globals . SugarLogger . Warnf ( "OnWaybillStatusChanged CourierArrived bill:%v shouldn't got here" , bill )
}
s . resetTimer ( savedOrderInfo , scheduler . TimerStatusTypeWaybill , bill . Status , false )
case model . WaybillStatusFailed : // todo WaybillStatusFailed理解成订单整个失败了, 不需要再尝试创建运单了, 注意这里应该加个zabbix日志的报警
s . removeWaybillFromMap ( savedOrderInfo , bill )
if order . WaybillVendorID == bill . WaybillVendorID {
if order . WaybillVendorID == bill . WaybillVendorID && order . VendorWaybillID == bill . VendorWaybillID {
globals . SugarLogger . Infof ( "OnWaybillStatusChanged WaybillStatusFailed, bill:%v" , bill )
if order . WaybillVendorID == bill . WaybillVendorID {
bill . WaybillVendorID = model . VendorIDUnknown
@@ -194,7 +195,7 @@ func (s *DefScheduler) OnWaybillStatusChanged(bill *model.Waybill, isPending boo
}
case model . WaybillStatusCanceled :
s . removeWaybillFromMap ( savedOrderInfo , bill )
if order . WaybillVendorID == bill . WaybillVendorID {
if order . WaybillVendorID == bill . WaybillVendorID && order . VendorWaybillID == bill . VendorWaybillID {
bill . WaybillVendorID = model . VendorIDUnknown
s . updateOrderByBill ( order , bill , true )
@@ -207,17 +208,18 @@ func (s *DefScheduler) OnWaybillStatusChanged(bill *model.Waybill, isPending boo
s . resetTimer ( savedOrderInfo , scheduler . TimerStatusTypeWaybill , bill . Status , false )
}
case model . WaybillStatusDelivering :
if order . WaybillVendorID == bill . WaybillVendorID {
if order . WaybillVendorID == bill . WaybillVendorID && order . VendorWaybillID == bill . VendorWaybillID {
if order . VendorID != bill . WaybillVendorID {
s . SelfDeliverDelievering ( order )
}
} else {
// s.CancelWaybill(bill)
globals . SugarLogger . Warnf ( "OnWaybillStatusChanged Delivering bill:%v shouldn't got here" , bill )
}
s . resetTimer ( savedOrderInfo , scheduler . TimerStatusTypeWaybill , bill . Status , false )
case model . WaybillStatusDelivered :
s . removeWaybillFromMap ( savedOrderInfo , bill )
if order . WaybillVendorID == bill . WaybillVendorID {
if order . WaybillVendorID == bill . WaybillVendorID && order . VendorWaybillID == bill . VendorWaybillID {
if order . VendorID != bill . WaybillVendorID {
s . SelfDeliverDelievered ( order )
}
@@ -276,15 +278,15 @@ func (s *DefScheduler) createWaybillOn3rdProviders(order *model.GoodsOrder, excl
return nil
}
func ( s * DefScheduler ) cancelOtherWaybills ( savedOrderInfo * WatchOrderInfo , bill * model . Waybill ) ( err error ) {
globals . SugarLogger . Debugf ( "cancelOtherWaybills, orderID:%s, bill:%v" , savedOrderInfo . order . VendorOrderID , bill )
func ( s * DefScheduler ) cancelOtherWaybills ( savedOrderInfo * WatchOrderInfo , bill2Keep * model . Waybill ) ( err error ) {
globals . SugarLogger . Debugf ( "cancelOtherWaybills, orderID:%s, bill:%v" , savedOrderInfo . order . VendorOrderID , bill2Keep )
for _ , v := range savedOrderInfo . waybills {
if ( v . OrderVendorID != v . WaybillVendorID ) && ( bill == nil || ! ( v . WaybillVendorID == bill . WaybillVendorID && v . VendorWaybillID == bill . VendorWaybillID ) ) {
if ( v . OrderVendorID != v . WaybillVendorID ) && ( bill2Keep == nil || ! ( v . WaybillVendorID == bill2Keep . WaybillVendorID && v . VendorWaybillID == bill2Keep . VendorWaybillID ) ) {
s . CancelWaybill ( v )
}
}
if bill != nil && bill . WaybillVendorID != bill . OrderVendorID {
s . swtich2SelfDeliverWithRetry ( savedOrderInfo . order , bill , 2 , 10 * time . Second )
if bill2Keep != nil && bill2Keep . WaybillVendorID != bill2Keep . OrderVendorID {
s . swtich2SelfDeliverWithRetry ( savedOrderInfo . order , bill2Keep , 2 , 10 * time . Second )
}
return nil
}
@@ -469,6 +471,9 @@ func (s *DefScheduler) isOrderSupport3rdDelivery(order *model.GoodsOrder) (retVa
}
func ( s * DefScheduler ) updateOrderByBill ( order * model . GoodsOrder , bill * model . Waybill , revertStatus bool ) {
if bill . WaybillVendorID == model . VendorIDUnknown {
bill . VendorWaybillID = ""
}
s . CurOrderManager . UpdateWaybillVendorID ( bill , revertStatus )
order . WaybillVendorID = bill . WaybillVendorID
if revertStatus {