- status judge.
This commit is contained in:
@@ -152,7 +152,7 @@ func init() {
|
||||
TimeoutAction: func(savedOrderInfo *WatchOrderInfo) (err error) {
|
||||
order := savedOrderInfo.order
|
||||
_ = sch.handleAutoAcceptOrder(order.VendorOrderID, order.VendorID, order.ConsigneeMobile, jxutils.GetJxStoreIDFromOrder(order), nil, func(isAcceptIt bool) error {
|
||||
if err = sch.AcceptOrRefuseOrder(order, isAcceptIt, ""); err != nil {
|
||||
if err = sch.AcceptOrRefuseOrder(order, isAcceptIt, ""); err != nil && err != scheduler.ErrOrderStatusAlreadySatisfyCurOperation {
|
||||
// 为了解决京东新消息与接单消息乱序的问题
|
||||
if errWithCode, ok := err.(*utils.ErrorWithCode); ok && errWithCode.Level() == 1 && errWithCode.IntCode() == -1 {
|
||||
if order2, err2 := sch.GetPurchasePlatformFromVendorID(order.VendorID).GetOrder(order.VendorOrderID); err2 == nil && order2.Status > order.Status {
|
||||
@@ -477,41 +477,43 @@ func (s *DefScheduler) cancelOtherWaybills(savedOrderInfo *WatchOrderInfo, bill2
|
||||
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 order.WaybillVendorID != order.VendorID {
|
||||
if err := s.Swtich2SelfDeliver(order, ""); err != nil {
|
||||
globals.SugarLogger.Infof("swtich2SelfDeliverWithRetry failed, bill:%v, err:%v", bill, err)
|
||||
if retryCount > 0 {
|
||||
time.AfterFunc(duration, func() {
|
||||
jxutils.CallMsgHandlerAsync(func() {
|
||||
s.swtich2SelfDeliverWithRetry(savedOrderInfo, bill, retryCount-1, duration)
|
||||
}, order.VendorOrderID)
|
||||
})
|
||||
} else {
|
||||
globals.SugarLogger.Infof("swtich2SelfDeliverWithRetry finally failed, orderID:%s bill:%v, err:%v", order.VendorOrderID, bill, err)
|
||||
if !savedOrderInfo.isSwitched2SelfDelivery {
|
||||
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)
|
||||
if retryCount > 0 {
|
||||
time.AfterFunc(duration, func() {
|
||||
jxutils.CallMsgHandlerAsync(func() {
|
||||
s.swtich2SelfDeliverWithRetry(savedOrderInfo, bill, retryCount-1, duration)
|
||||
}, order.VendorOrderID)
|
||||
})
|
||||
} else {
|
||||
globals.SugarLogger.Infof("swtich2SelfDeliverWithRetry finally failed, orderID:%s bill:%v, err:%v", order.VendorOrderID, bill, err)
|
||||
|
||||
tmpLog := &legacymodel.TempLog{
|
||||
VendorOrderID: bill.VendorWaybillID,
|
||||
RefVendorOrderID: order.VendorOrderID,
|
||||
Msg: fmt.Sprintf("swtich2SelfDeliverWithRetry finally failed, orderID:%s bill:%v, err:%v", order.VendorOrderID, bill, err),
|
||||
}
|
||||
db := orm.NewOrm()
|
||||
db.Insert(tmpLog)
|
||||
tmpLog := &legacymodel.TempLog{
|
||||
VendorOrderID: bill.VendorWaybillID,
|
||||
RefVendorOrderID: order.VendorOrderID,
|
||||
Msg: fmt.Sprintf("swtich2SelfDeliverWithRetry finally failed, orderID:%s bill:%v, err:%v", order.VendorOrderID, bill, err),
|
||||
}
|
||||
db := orm.NewOrm()
|
||||
db.Insert(tmpLog)
|
||||
|
||||
if s.CancelWaybill(bill, partner.CancelWaybillReasonSwitch2SelfFailed, partner.CancelWaybillReasonStrSwitch2SelfFailed) == nil {
|
||||
// 转自送失败的取消,要将订单中的运单状态更新
|
||||
if s.isBillCandidate(order, bill) {
|
||||
bill.WaybillVendorID = model.VendorIDUnknown
|
||||
s.updateOrderByBill(order, bill, false)
|
||||
if s.CancelWaybill(bill, partner.CancelWaybillReasonSwitch2SelfFailed, partner.CancelWaybillReasonStrSwitch2SelfFailed) == nil {
|
||||
// 转自送失败的取消,要将订单中的运单状态更新
|
||||
if s.isBillCandidate(order, bill) {
|
||||
bill.WaybillVendorID = model.VendorIDUnknown
|
||||
s.updateOrderByBill(order, bill, false)
|
||||
}
|
||||
}
|
||||
}
|
||||
} else {
|
||||
savedOrderInfo.isSwitched2SelfDelivery = true
|
||||
}
|
||||
} else {
|
||||
savedOrderInfo.isSwitched2SelfDelivery = true
|
||||
// 进到这里的原因是,在这个时间点,购物平台物流已经抢单(但抢单消息还没有被收到),所以转自送会失败 (比如:818810379000941),更好的做法应该是判断Swtich2SelfDeliver的返回值,这种情况下就不得试了
|
||||
globals.SugarLogger.Infof("swtich2SelfDeliverWithRetry orderID:%s status is wrong(maybe purchase platform accepted waybill)", order.VendorOrderID)
|
||||
// globals.SugarLogger.Warnf("swtich2SelfDeliverWithRetry orderID:%s status is wrong, order details:%v", order.VendorOrderID, order)
|
||||
}
|
||||
} else {
|
||||
// 进到这里的原因是,在这个时间点,购物平台物流已经抢单(但抢单消息还没有被收到),所以转自送会失败 (比如:818810379000941),更好的做法应该是判断Swtich2SelfDeliver的返回值,这种情况下就不得试了
|
||||
globals.SugarLogger.Infof("swtich2SelfDeliverWithRetry orderID:%s status is wrong(maybe purchase platform accepted waybill)", order.VendorOrderID)
|
||||
// globals.SugarLogger.Warnf("swtich2SelfDeliverWithRetry orderID:%s status is wrong, order details:%v", order.VendorOrderID, order)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -697,7 +699,11 @@ func (s *DefScheduler) updateOrderByBill(order *model.GoodsOrder, bill *model.Wa
|
||||
}
|
||||
|
||||
func (s *DefScheduler) autoPickupGood(order *model.GoodsOrder) (err error) {
|
||||
return s.PickupGoods(order, "")
|
||||
err = s.PickupGoods(order, "")
|
||||
if err == scheduler.ErrOrderStatusAlreadySatisfyCurOperation {
|
||||
err = nil
|
||||
}
|
||||
return err
|
||||
}
|
||||
|
||||
func (s *DefScheduler) isBillCandidate(order *model.GoodsOrder, bill *model.Waybill) bool {
|
||||
|
||||
Reference in New Issue
Block a user