@@ -289,7 +289,6 @@ func (s *DefScheduler) OnOrderStatusChanged(order *model.GoodsOrder, status *mod
}
savedOrderInfo := s . loadSavedOrderFromMap ( status , false )
savedOrderInfo . SetOrder ( order )
// s.updateOrderByStatus(savedOrderInfo.order, status)
// if status.Status == model.OrderStatusNew {
// if !isPending {
@@ -365,10 +364,10 @@ func (s *DefScheduler) OnWaybillStatusChanged(bill *model.Waybill, isPending boo
if ! isPending {
if order . Status > model . OrderStatusEndBegin {
s . ProxyCancelWaybill ( order , bill , partner . CancelWaybillReasonNotAcceptIntime , partner . CancelWaybillReasonStrNotAcceptIntime )
} else if model . IsOrderHas Waybill ( order ) {
} else if model . IsOrderHave Waybill ( order ) {
globals . SugarLogger . Debugf ( "OnWaybillStatusChanged multiple waybill created, bill:%v" , bill )
if model . IsWaybillPlatformOwn ( bill ) { // 是购物平台运单
if or der . VendorID != order . WaybillVendorID { // 既有运单不是购物平台运单
if ! mo del . IsOrderHaveOwnWaybill ( order ) { // 既有运单不是购物平台运单
globals . SugarLogger . Infof ( "OnWaybillStatusChanged bill:%v purchase platform bill came later than others, strange!!!" , bill )
oldBill := savedOrderInfo . waybills [ order . WaybillVendorID ]
if oldBill != nil {
@@ -377,8 +376,7 @@ func (s *DefScheduler) OnWaybillStatusChanged(bill *model.Waybill, isPending boo
globals . SugarLogger . Warnf ( "OnWaybillStatusChanged bill:%v, oldBill is null, strange!!!" , bill )
}
}
bill . WaybillVendorID = model . VendorIDUnknown
s . updateOrderByBill ( order , bill , false )
s . updateOrderByBill ( order , nil , false )
} else {
s . ProxyCancelWaybill ( order , bill , partner . CancelWaybillReasonNotAcceptIntime , partner . CancelWaybillReasonStrNotAcceptIntime )
}
@@ -402,9 +400,9 @@ func (s *DefScheduler) OnWaybillStatusChanged(bill *model.Waybill, isPending boo
if ( isBillExist || bill . WaybillVendorID != model . VendorIDDada ) && ! isPending { // todo 达达运单有错序的情况,临时看看
isBillAlreadyCandidate := s . isBillCandidate ( order , bill )
// todo 购买平台的运单, 优先级最高, 但这样写也可能带来问题, 即在这个时间, 因为之前3方已经接单, 已经发出了转自送请求( 而且可能成功了) , 所以加个状态判断
if ! model . IsOrderHas Waybill ( order ) ||
( model . IsWaybillPlatformOwn ( bill ) && or der . VendorID != order . WaybillVendorID && ( order . DeliveryFlag & model . OrderDeliveryFlagMaskPurcahseDisabled ) == 0 ) {
if model . IsOrderHas Waybill ( order ) {
if ! model . IsOrderHave Waybill ( order ) ||
( model . IsWaybillPlatformOwn ( bill ) && ! mo del . IsOrderHaveOwnWaybill ( order ) && ( order . DeliveryFlag & model . OrderDeliveryFlagMaskPurcahseDisabled ) == 0 ) {
if model . IsOrderHave Waybill ( order ) {
// 进到这里的原因是, 在这个时间点, 购物平台物流已经抢单( 但抢单消息还没有被收到) ( 比如: 818810379000941)
globals . SugarLogger . Infof ( "OnWaybillStatusChanged orderID:%s purchase platform waybill arrvied later, may cause problem" , order . VendorOrderID )
}
@@ -441,10 +439,9 @@ func (s *DefScheduler) OnWaybillStatusChanged(bill *model.Waybill, isPending boo
if s . isBillCandidate ( order , bill ) {
s . resetTimer ( savedOrderInfo , bill , isPending )
if ! isPending {
bill . WaybillVendorID = model . VendorIDUnknown
s . updateOrderByBill ( order , bill , true )
s . updateOrderByBill ( order , nil , true )
}
} else if model . IsOrderHas Waybill ( order ) {
} else if model . IsOrderHave Waybill ( order ) {
s . ProxyCancelWaybill ( order , bill , partner . CancelWaybillReasonNotAcceptIntime , partner . CancelWaybillReasonStrNotAcceptIntime )
if ! isPending {
globals . SugarLogger . Warnf ( "OnWaybillStatusChanged AcceptCanceled orderID:%s got multiple bill:%v, order details:%v" , order . VendorOrderID , bill , order )
@@ -462,9 +459,8 @@ func (s *DefScheduler) OnWaybillStatusChanged(bill *model.Waybill, isPending boo
if s . isBillCandidate ( order , bill ) || order . WaybillVendorID == model . VendorIDUnknown {
s . resetTimer ( savedOrderInfo , nil , isPending )
if ! isPending {
if model . IsOrderHas Waybill ( order ) {
bill . WaybillVendorID = model . VendorIDUnknown
s . updateOrderByBill ( order , bill , true )
if model . IsOrderHave Waybill ( order ) {
s . updateOrderByBill ( order , nil , true )
}
// 3方的运单取消才会重新发起创建3方订单, 购物平台的运单取消后, 它本身还会再创建新运单(NewWaybill事件有相应TIMER)),至少京东是这样的,暂时按京东的行为来
// 现在发现饿百取消订单后不会再创建运单了,所以饿百运单取消也允许直接创建三方运单
@@ -501,7 +497,7 @@ func (s *DefScheduler) OnWaybillStatusChanged(bill *model.Waybill, isPending boo
// 一般只会消息乱序才会到这里,即新订单消息在运单接单消息后到达
// 典型的一个: 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 or der . WaybillVendorID == mo del . VendorIDUnknown {
if ! mo del . IsOrderHaveWaybill ( or der ) {
s . updateOrderByBill ( order , bill , false )
}
}
@@ -627,8 +623,7 @@ func (s *DefScheduler) swtich2SelfDeliverWithRetry(savedOrderInfo *WatchOrderInf
if s . ProxyCancelWaybill ( order , bill , partner . CancelWaybillReasonSwitch2SelfFailed , partner . CancelWaybillReasonStrSwitch2SelfFailed ) == nil {
// 转自送失败的取消,要将订单中的运单状态更新
if s . isBillCandidate ( order , bill ) {
bill . WaybillVendorID = model . VendorIDUnknown
s . updateOrderByBill ( order , bill , false )
s . updateOrderByBill ( order , nil , false )
}
}
partner . CurOrderManager . OnOrderMsg ( order , "转商家自配送" , errStr )
@@ -865,27 +860,26 @@ func (s *DefScheduler) handleAutoAcceptOrder(orderID string, vendorID int, userM
return handleType
}
// func (s *DefScheduler) updateOrderByStatus(order *model.GoodsOrder, status *model.OrderStatus) (retVal *model.GoodsOrder) {
// order.Status = status.Status
// order.VendorStatus = status.VendorStatus
// order.StatusTime = status.StatusTime
// order.LockStatus = status.LockStatus
// return order
// }
func ( s * DefScheduler ) updateOrderByBill ( order * model . GoodsOrder , bill * model . Waybill , revertStatus bool ) {
if order . Status > model . OrderStatusEndBegin {
return
}
if bill . WaybillVendorID = = model . VendorIDUnknown {
bill . VendorWaybillID = ""
updateFields : = [ ] string {
"WaybillVendorID" ,
"VendorWaybillID" ,
}
if bill == nil {
order . WaybillVendorID = model . VendorIDUnknown
order . VendorWaybillID = ""
} else {
order . WaybillVendorID = bill . WaybillVendorID
order . VendorWaybillID = bill . VendorWaybillID
}
partner . CurOrderManager . UpdateWaybillVendorID ( bill , revertStatus )
order . WaybillVendorID = bill . WaybillVendorID
order . VendorWaybillID = bill . VendorWaybillID
if revertStatus {
order . Status = model . OrderStatusFinishedPickup
updateFields = append ( updateFields , "Statu" )
}
partner . CurOrderManager . UpdateOrderFields ( order , updateFields )
}
func ( s * DefScheduler ) updateBillsInfo ( savedOrderInfo * WatchOrderInfo , bill * model . Waybill ) ( isBillExist bool ) {