@@ -43,12 +43,14 @@ var (
ErrAddFeeExceeded = errors . New ( "配送超过基准价太多" )
)
var (
FixedScheduler * DefScheduler
)
type WatchOrderInfo struct {
autoPickupTimeoutMinute int // 0表示禁用, 1表示用缺省值time2AutoPickupMin, 其它表示分钟数
storeDeliveryType int
isNeed3rdDelivery bool
supported3rdCarriers [ ] int
isSwitched2SelfDelivery bool
order * model . GoodsOrder // order里的信息是保持更新的
waybills map [ int ] * model . Waybill // 这个waybills里的状态信息是不真实的, 只使用id相关的信息
@@ -76,7 +78,6 @@ type DefScheduler struct {
func NewWatchOrderInfo ( order * model . GoodsOrder ) ( retVal * WatchOrderInfo ) {
retVal = & WatchOrderInfo {
autoPickupTimeoutMinute : 1 ,
isNeed3rdDelivery : false ,
storeDeliveryType : scheduler . StoreDeliveryTypeCrowdSourcing ,
waybills : map [ int ] * model . Waybill { } ,
supported3rdCarriers : [ ] int { } ,
@@ -111,12 +112,16 @@ func (s *WatchOrderInfo) updateOrderStoreFeature(order *model.GoodsOrder) (err e
} else if order . VendorID == model . VendorIDJD {
s . storeDeliveryType = int ( storefeature . JdDeliveryType )
}
if s . storeDeliveryType == scheduler . StoreDeliveryTypeByStore {
order . DeliveryFlag |= model . OrderDeliveryFlagMaskPurcahseDisabled
}
isNeedSchedule := false
if ( s . storeDeliveryType == scheduler . StoreDeliveryTypeByStore ) ||
( order . VendorID == model . VendorIDJD && storefeature . JdCompetition != 0 ) ||
( order . VendorID == model . VendorIDELM && storefeature . ElmCompetition != 0 ) {
s . isNeed3rdDelivery = true
isNeedSchedule = true
}
if s . isNeed3rdDelivery {
if isNeedSchedule {
if storefeature . SupportMtps != 0 {
s . supported3rdCarriers = append ( s . supported3rdCarriers , model . VendorIDMTPS )
}
@@ -127,10 +132,13 @@ func (s *WatchOrderInfo) updateOrderStoreFeature(order *model.GoodsOrder) (err e
s . supported3rdCarriers = append ( s . supported3rdCarriers , model . VendorIDFengNiao )
}
if len ( s . supported3rdCarriers ) == 0 {
s . isNeed3rdDelivery = false
isNeedSchedule = false
globals . SugarLogger . Infof ( "updateOrderStoreFeature orderID:%s no at least one carrier supported" , order . VendorOrderID )
}
}
if ! isNeedSchedule {
order . DeliveryFlag |= model . OrderDeliveryFlagMaskScheduleDisabled
}
}
return err
} , "updateOrderStoreFeature" )
@@ -140,9 +148,9 @@ func (s *WatchOrderInfo) updateOrderStoreFeature(order *model.GoodsOrder) (err e
func init ( ) {
sch := & DefScheduler { }
FixedScheduler = sch
sch . IsReallyCallPlatformAPI = globals . ReallyCallPlatformAPI
sch . Init ( )
basesch . FixedBaseScheduler = & sch . BaseScheduler
scheduler . CurrentScheduler = sch
sch . defWorkflowConfig = [ ] map [ int ] * StatusActionConfig {
map [ int ] * StatusActionConfig {
@@ -238,7 +246,9 @@ func (s *DefScheduler) OnOrderStatusChanged(status *model.OrderStatus, isPending
globals . SugarLogger . Infof ( "OnOrderStatusChanged [运营2]订单orderID:%s可能被手动点击送达, 会对程序状态产生不利影响, 请通知门店不要这样操作! " , status . VendorOrderID )
}
}
s . cancelOtherWaybills ( savedOrderInfo , curWaybill , partner . CancelWaybillReasonOther , partner . CancelWaybillReasonStrOrderAlreadyFinished )
if ( savedOrderInfo . order . DeliveryFlag & model . OrderDeliveryFlagMaskScheduleDisabled ) == 0 {
s . cancelOtherWaybills ( savedOrderInfo , curWaybill , partner . CancelWaybillReasonOther , partner . CancelWaybillReasonStrOrderAlreadyFinished )
}
s . orderMap . Delete ( jxutils . GetUniversalOrderIDFromOrderStatus ( status ) )
}
} else if status . LockStatus != model . OrderStatusUnknown {
@@ -262,129 +272,131 @@ func (s *DefScheduler) OnWaybillStatusChanged(bill *model.Waybill, isPending boo
// s.orderMap.Delete(jxutils.GetUniversalOrderIDFromOrderStatus(model.Order2Status(order)))
// return nil
// }
if bill . Status == model . WaybillStatusNew {
s . addWaybill2Map ( savedOrderInfo , bill )
if ! isPending {
if order . Status > model . OrderStatusEndBegin {
s . CancelWaybill ( bill , partner . CancelWaybillReasonNotAcceptIntime , partner . CancelWaybillReasonStrNotAcceptIntime )
} else if order . WaybillVendorID != model . VendorIDUnknown {
globals . SugarLogger . Debugf ( "OnWaybillStatusChanged multiple waybill created, bill:%v" , bill )
if ! s . isBillCandidate ( order , bill ) && bill . WaybillVendorID != order . VendorID {
s . CancelWaybill ( bill , partner . CancelWaybillReasonNotAcceptIntime , partner . CancelWaybillReasonStrNotAcceptIntime )
} else if bill . WaybillVendorID == order . VendorID && order . WaybillVendorID != order . VendorID {
globals . SugarLogger . Warnf ( "OnWaybillStatusChanged bill:%v purchase platform bill came later than others, strange!!!" , bill )
}
}
}
// 只有购物平台的新运单消息才会启动抢单TIMER
if bill . OrderVendorID == bill . WaybillVendorID {
s . resetTimer ( savedOrderInfo , bill , isPending )
}
} else {
switch bill . Status {
case model . WaybillStatusAccepted :
s . resetTimer ( savedOrderInfo , bill , isPending )
if ( order . DeliveryFlag & model . OrderDeliveryFlagMaskScheduleDisabled ) == 0 { // 如果被停止调度,整个不动作
if bill . Status == model . WaybillStatusNew {
s . addWaybill2Map ( savedOrderInfo , bill )
if ! isPending {
// todo 购买平台的运单, 优先级最高, 但这样写也可能带来问题, 即在这个时间, 因为之前3方已经接单, 已经发出了转自送请求( 而且可能成功了) , 所以加个isSwitched2SelfDelivery状态判断
if order . WaybillVendorID == model . VendorIDUnknown ||
( order . VendorID == bill . WaybillVendorID && order . VendorID != order . WaybillVendorID && ! savedOrderInfo . isSwitched2SelfDelivery ) {
if order . WaybillVendorID != model . VendorIDUnknown {
// 进到这里的原因是, 在这个时间点, 购物平台物流已经抢单( 但抢单消息还没有被收到) ( 比如: 818810379000941)
globals . SugarLogger . Infof ( "OnWaybillStatusChanged orderID:%s purchase platform waybill arrvied later, may case problem" , order . VendorOrderID )
}
s . updateOrderByBill ( order , bill , false )
s . cancelOtherWaybills ( savedOrderInfo , bill , partner . CancelWaybillReasonNotAcceptIntime , partner . CancelWaybillReasonStrNotAcceptIntime )
if bill . WaybillVendorID != bill . OrderVendorID {
if savedOrderInfo . storeDeliveryType == scheduler . StoreDeliveryTypeByStore {
s . SelfDeliverDelievering ( savedOrderInfo . order , "" )
} else {
s . swtich2SelfDeliverWithRetry ( savedOrderInfo , bill , 2 , 10 * time . Second )
}
}
if ! isPending {
weixinmsg . NotifyWaybillStatus ( bill , order )
}
} else if ! s . isBillCandidate ( order , bill ) && bill . WaybillVendorID != order . VendorID {
// 发生这种情况的原因就是两个接单事件几乎同时到达(来不及取消),也算正常
if order . Status > model . OrderStatusEndBegin {
s . CancelWaybill ( bill , partner . CancelWaybillReasonNotAcceptIntime , partner . CancelWaybillReasonStrNotAcceptIntime )
globals . SugarLogger . Infof ( "OnWaybillStatusChanged Accepted orderID:%s got multiple bill:%v" , or der . VendorOrderID , bill )
} else if order . WaybillVendorID != m odel . VendorIDUnknown {
globals . SugarLogger . Debugf ( "OnWaybillStatusChanged multiple waybill created, bill:%v" , bill )
if ! s . isBillCandidate ( order , bill ) && bill . WaybillVendorID != order . VendorID {
s . CancelWaybill ( bill , partner . CancelWaybillReasonNotAcceptIntime , partner . CancelWaybillReasonStrNotAcceptIntime )
} else if bill . WaybillVendorID == order . VendorID && order . WaybillVendorID != order . VendorID {
globals . SugarLogger . Warnf ( "OnWaybillStatusChanged bill:%v purchase platform bill came later than others, strange!!!" , bill )
}
}
}
case model . WaybillStatusAcceptCanceled :
if s . isBillCandidate ( o rder, bill ) {
// 只有购物平台的新运单消息才会启动抢单TIMER
if bill . O rderVendorID == bill . WaybillVendorID {
s . resetTimer ( savedOrderInfo , bill , isPending )
}
} else {
switch bill . Status {
case model . WaybillStatusAccepted :
s . resetTimer ( savedOrderInfo , bill , isPending )
if ! isPending {
bill . WaybillVendorID = model . VendorIDUnknown
s . updateOrderByBill ( order , bill , false )
// todo 购买平台的运单, 优先级最高, 但这样写也可能带来问题, 即在这个时间, 因为之前3方已经接单, 已经发出了转自送请求( 而且可能成功了) , 所以加个状态判断
if order . WaybillVendorID == model . VendorIDUnknown ||
( order . VendorID == bill . WaybillVendorID && order . VendorID != order . WaybillVendorID && ( order . DeliveryFlag & model . OrderDeliveryFlagMaskPurcahseDisabled ) == 0 ) {
if order . WaybillVendorID != model . VendorIDUnknown {
// 进到这里的原因是, 在这个时间点, 购物平台物流已经抢单( 但抢单消息还没有被收到) ( 比如: 818810379000941)
globals . SugarLogger . Infof ( "OnWaybillStatusChanged orderID:%s purchase platform waybill arrvied later, may case problem" , order . VendorOrderID )
}
s . updateOrderByBill ( order , bill , false )
s . cancelOtherWaybills ( savedOrderInfo , bill , partner . CancelWaybillReasonNotAcceptIntime , partner . CancelWaybillReasonStrNotAcceptIntime )
if bill . WaybillVendorID != bill . OrderVendorID {
if savedOrderInfo . storeDeliveryType == scheduler . StoreDeliveryTypeByStore {
s . SelfDeliverDelievering ( savedOrderInfo . order , "" )
} else {
s . swtich2SelfDeliverWithRetry ( savedOrderInfo , bill , 2 , 10 * time . Second )
}
}
if ! isPending {
weixinmsg . NotifyWaybillStatus ( bill , order )
}
} else if ! s . isBillCandidate ( order , bill ) && bill . WaybillVendorID != order . VendorID {
// 发生这种情况的原因就是两个接单事件几乎同时到达(来不及取消),也算正常
s . CancelWaybill ( bill , partner . CancelWaybillReasonNotAcceptIntime , partner . CancelWaybillReasonStrNotAcceptIntime )
globals . SugarLogger . Infof ( "OnWaybillStatusChanged Accepted orderID:%s got multiple bill:%v" , order . VendorOrderID , bill )
}
}
case model . WaybillStatusAcceptCanceled :
if s . isBillCandidate ( order , bill ) {
s . resetTimer ( savedOrderInfo , bill , isPending )
if ! isPending {
bill . WaybillVendorID = model . VendorIDUnknown
s . updateOrderByBill ( order , bill , false )
s . createWaybillOn3rdProviders ( savedOrderInfo , bill )
s . createWaybillOn3rdProviders ( savedOrderInfo , bill )
}
} else if order . WaybillVendorID != model . VendorIDUnknown {
s . CancelWaybill ( bill , partner . CancelWaybillReasonNotAcceptIntime , partner . CancelWaybillReasonStrNotAcceptIntime )
globals . SugarLogger . Warnf ( "OnWaybillStatusChanged AcceptCanceled orderID:%s got multiple bill:%v, order details:%v" , order . VendorOrderID , bill , order )
}
} else if or der . WaybillVendorID != model . VendorIDUnknown {
s . CancelWaybill ( bill , partner . CancelWaybillReasonNotAcceptIntime , partner . CancelWaybillReasonStrNotAcceptIntime )
globals . SugarLogger . Warnf ( "OnWaybillStatusChanged AcceptCanceled orderID:%s got multiple bill:%v, order details:%v" , order . VendorOrderID , bill , order )
}
case model . WaybillStatusCourierArrived : // do nothing
s . resetTimer ( savedOrderInfo , bill , isPending )
if s . isBillCandidate ( order , bill ) {
} else {
// s.CancelWaybill(bill, partner.CancelWaybillReasonNotAcceptIntime, partner.CancelWaybillReasonStrNotAcceptIntime)
globals . SugarLogger . Infof ( "OnWaybillStatusChanged CourierArrived order(%d, %s) bill(%d, %s), bill:%v shouldn't get here" , order . WaybillVendorID , order . VendorWaybillID , bill . WaybillVendorID , bill . VendorWaybillID , bill )
}
case model . WaybillStatusFailed : // todo WaybillStatusFailed理解成订单整个失败了, 不需要再尝试创建运单了, 注意这里应该加个zabbix日志的报警
s . removeWaybillFromMap ( savedOrderInfo , bill )
if s . isBillCandidate ( order , bill ) {
case mo del . WaybillStatusCourierArrived : // do nothing
s . resetTimer ( savedOrderInfo , bill , isPending )
if ! isPending {
globals . SugarLogger . Infof ( "OnWaybillStatusChanged WaybillStatusFailed, bill:%v" , bill )
bill . WaybillVendorID = model . VendorIDUnknown
s . updateOrderByBill ( order , bill , false )
if s . isBillCandidate ( order , bill ) {
} else {
// s.CancelWaybill(bill, partner.CancelWaybillReasonNotAcceptIntime, partner.CancelWaybillReasonStrNotAcceptIntime)
globals . SugarLogger . Infof ( "OnWaybillStatusChanged CourierArrived order(%d, %s) bill(%d, %s), bill:%v shouldn't get here" , order . WaybillVendorID , order . VendorWaybillID , bill . WaybillVendorID , bill . VendorWaybillID , bill )
}
} else {
// 创建运单失败时, 可能到这里来( 比如: 818874313000121)
globals . SugarLogger . Infof ( "OnWaybillStatusChanged Failed bill:%v shouldn't got here, order details:%v" , bill , order )
}
case model . WaybillStatusCanceled :
s . removeWaybillFromMap ( savedOrderInfo , bill )
if s . isBillCandidate ( order , bill ) || order . WaybillVendorID == model . VendorIDUnknown {
s . resetTimer ( savedOrderInfo , bill , isPending )
if ! isPending {
if order . WaybillVendorID != model . VendorIDUnknown {
case model . WaybillStatusFailed : // todo WaybillStatusFailed理解成订单整个失败了, 不需要再尝试创建运单了, 注意这里应该加个zabbix日志的报警
s . removeWaybillFromMap ( savedOrderInfo , bill . WaybillVendorID )
if s . isBillCandidate ( order , bill ) {
s . resetTimer ( savedOrderInfo , bill , isPending )
if ! isPending {
globals . SugarLogger . Infof ( "OnWaybillStatusChanged WaybillStatusFailed, bill:%v" , bill )
bill . WaybillVendorID = model . VendorIDUnknown
s . updateOrderByBill ( order , bill , false )
}
if bill . WaybillVendorID != order . VendorID { // 3方的运单取消才会重新发起创建3方订单, 购物平台的运单取消后, 它本身还会再创建新运单(NewWabill事件有相应TIMER)),至少京东是这样的,暂时按京东的行为来
s . createWaybillOn3rdProviders ( savedOrderInfo , nil )
} else {
// 创建运单失败时, 可能到这里来( 比如: 818874313000121)
globals . SugarLogger . Infof ( "OnWaybillStatusChanged Failed bill:%v shouldn't got here, order details:%v" , bill , order )
}
case model . WaybillStatusCanceled :
s . removeWaybillFromMap ( savedOrderInfo , bill . WaybillVendorID )
if s . isBillCandidate ( order , bill ) || order . WaybillVendorID == model . VendorIDUnknown {
s . resetTimer ( savedOrderInfo , bill , isPending )
if ! isPending {
if order . WaybillVendorID != model . VendorIDUnknown {
bill . WaybillVendorID = model . VendorIDUnknown
s . updateOrderByBill ( order , bill , false )
}
if bill . WaybillVendorID != order . VendorID { // 3方的运单取消才会重新发起创建3方订单, 购物平台的运单取消后, 它本身还会再创建新运单(NewWabill事件有相应TIMER)),至少京东是这样的,暂时按京东的行为来
s . createWaybillOn3rdProviders ( savedOrderInfo , nil )
}
}
}
}
case model . WaybillStatusDeliver ing :
s . resetTimer ( savedOrderInfo , bill , isPending )
if s . isBillCandidate ( order , bill ) {
// do nothing
} else {
// s.CancelWaybill(bill, partner.CancelWaybillReasonNotAcceptIntime, partner.CancelWaybillReasonStrNotAcceptIntime)
globals . SugarLogger . Infof ( "OnWaybillStatusChanged Delivering order(%d, %s) bill(%d, %s), bill:%v shouldn't get here" , order . WaybillVendorID , order . VendorWaybillID , bill . WaybillVendorID , bill . VendorWaybillID , bill )
}
case model . WaybillStatusDelivered :
s . resetTimer ( savedOrderInfo , bill , isPending )
s . removeWaybillFromMap ( savedOrderInfo , bill )
if order . VendorID != bill . WaybillVendorID && ! isPending {
if savedOrderInfo . storeDeliveryType == scheduler . StoreDeliveryTypeByStore {
s . SelfDeliverDelievered ( order , "" )
case model . WaybillStatusDelivering :
s . resetTimer ( savedOrderInfo , bill , isPend ing )
if s . isBillCandidate ( order , bill ) {
// do nothing
} else {
s . Swtich2SelfDelivered ( order , "" )
// s.CancelWaybill(bill, partner.CancelWaybillReasonNotAcceptIntime, partner.CancelWaybillReasonStrNotAcceptIntime )
globals . SugarLogger . Infof ( "OnWaybillStatusChanged Delivering order(%d, %s) bill(%d, %s), bill:%v shouldn't get here" , order . WaybillVendorID , order . VendorWaybillID , bill . WaybillVendorID , bill . VendorWaybillID , bill )
}
}
if ! s . isBillCandidate ( order , bill ) {
// 一般只会消息乱序才会到这里,即新订单消息在运单接单消息后到达
// 典型的一个: 1223633660228537567
globals . SugarLogger . Infof ( "OnWaybillStatusChanged Delivered order(%d, %s) bill(%d, %s), bill:%v shouldn't get here" , order . WaybillVendorID , order . VendorWaybillID , bill . WaybillVendorID , bill . VendorWaybillID , bill )
if order . WaybillVendorID == mo del . VendorIDUnknown {
s . updateOrderByBill ( order , bill , false )
case model . WaybillStatusDelivered :
s . resetTimer ( savedOrderInfo , bill , isPending )
s . removeWaybillFromMap ( savedOrderInfo , bill . WaybillVendorID )
if order . VendorID != bill . WaybillVendorID && ! isPending {
if savedOrder Info . storeDeliveryType == scheduler . StoreDeliveryTypeByStore {
s . SelfDeliverDelievered ( or der , "" )
} else {
s . Swtich2SelfDelivered ( order , "" )
}
}
if ! s . isBillCandidate ( order , bill ) {
// 一般只会消息乱序才会到这里,即新订单消息在运单接单消息后到达
// 典型的一个: 1223633660228537567
globals . SugarLogger . Infof ( "OnWaybillStatusChanged Delivered order(%d, %s) bill(%d, %s), bill:%v shouldn't get here" , order . WaybillVendorID , order . VendorWaybillID , bill . WaybillVendorID , bill . VendorWaybillID , bill )
if order . WaybillVendorID == model . VendorIDUnknown {
s . updateOrderByBill ( order , bill , false )
}
}
if ! isPending {
weixinmsg . NotifyWaybillStatus ( bill , order )
}
}
if ! isPending {
weixinmsg . NotifyWaybillStatus ( bill , order )
}
}
}
@@ -401,9 +413,9 @@ func (s *DefScheduler) addWaybill2Map(savedOrderInfo *WatchOrderInfo, bill *mode
savedOrderInfo . waybills [ bill . WaybillVendorID ] = bill
}
func ( s * DefScheduler ) removeWaybillFromMap ( savedOrderInfo * WatchOrderInfo , bill * model . Waybill ) {
if _ , ok := savedOrderInfo . waybills [ bill . W aybillVendorID] ; ok {
delete ( savedOrderInfo . waybills , bill . W aybillVendorID)
func ( s * DefScheduler ) removeWaybillFromMap ( savedOrderInfo * WatchOrderInfo , way billVendorID int ) {
if _ , ok := savedOrderInfo . waybills [ w aybillVendorID] ; ok {
delete ( savedOrderInfo . waybills , w aybillVendorID)
}
}
@@ -411,7 +423,7 @@ func (s *DefScheduler) createWaybillOn3rdProviders(savedOrderInfo *WatchOrderInf
order := savedOrderInfo . order
globals . SugarLogger . Debugf ( "createWaybillOn3rdProviders, orderID:%s, status:%d, excludeBill:%v" , order . VendorOrderID , order . Status , excludeBill )
if order . LockStatus == model . OrderStatusUnknown && order . Status >= model . OrderStatusFinishedPickup && order . Status < model . OrderStatusEndBegin { // 订单在配送中被取消时就是配送中状态
if savedOrderInfo . isNeed3rdDelivery {
if ( order . DeliveryFlag & model . OrderDeliveryFlagMaskScheduleDisabled ) == 0 {
if savedOrderInfo . retryCount <= maxWaybillRetryCount {
successCount := 0
for _ , vendorID := range savedOrderInfo . supported3rdCarriers {
@@ -466,18 +478,29 @@ func (s *DefScheduler) createWaybillOn3rdProviders(savedOrderInfo *WatchOrderInf
func ( s * DefScheduler ) cancelOtherWaybills ( savedOrderInfo * WatchOrderInfo , bill2Keep * model . Waybill , cancelReasonID int , cancelReason string ) ( err error ) {
globals . SugarLogger . Debugf ( "cancelOtherWaybills, orderID:%s, bill:%v" , savedOrderInfo . order . VendorOrderID , bill2Keep )
toBeDeleted := [ ] * model . Waybill { }
for _ , v := range savedOrderInfo . waybills {
if ( v . OrderVendorID != v . WaybillVendorID ) && ( bill2Keep == nil || ! ( v . WaybillVendorID == bill2Keep . WaybillVendorID && v . VendorWaybillID == bill2Keep . VendorWaybillID ) ) {
s . CancelWaybill ( v , cancelReasonID , cancelReason )
err2 := s. CancelWaybill ( v , cancelReasonID , cancelReason )
if err2 == nil {
toBeDeleted = append ( toBeDeleted , v )
}
// 至少返回一个错误
if err == nil && err2 != nil {
err = err2
}
}
}
return nil
for _ , v := range toBeDeleted {
s . removeWaybillFromMap ( savedOrderInfo , v . WaybillVendorID )
}
return err
}
func ( s * DefScheduler ) swtich2SelfDeliverWithRetry ( savedOrderInfo * WatchOrderInfo , bill * model . Waybill , retryCount int , duration time . Duration ) {
order := savedOrderInfo . order
globals . SugarLogger . Debugf ( "swtich2SelfDeliverWithRetry orderID:%s" , order . VendorOrderID )
if ! savedOrderInfo . isSwitched2SelfDelivery {
if ( order . DeliveryFlag & model . OrderDeliveryFlagMaskPurcahseDisabled ) == 0 {
if order . WaybillVendorID != order . VendorID {
if err := s . Swtich2SelfDeliver ( order , "" ) ; err != nil && err != scheduler . ErrOrderStatusAlreadySatisfyCurOperation {
globals . SugarLogger . Infof ( "swtich2SelfDeliverWithRetry failed, bill:%v, err:%v" , bill , err )
@@ -507,7 +530,8 @@ func (s *DefScheduler) swtich2SelfDeliverWithRetry(savedOrderInfo *WatchOrderInf
}
}
} else {
savedOrderInfo . isSwitched2SelfDelivery = true
s. removeWaybillFromMap ( savedOrderInfo , order . VendorID )
partner . CurOrderManager . UpdateOrderStatusAndFlag ( order )
}
} else {
// 进到这里的原因是,在这个时间点,购物平台物流已经抢单(但抢单消息还没有被收到),所以转自送会失败 ( 比如: 818810379000941) , 更好的做法应该是判断Swtich2SelfDeliver的返回值, 这种情况下就不得试了