diff --git a/business/jxcallback/orderman/order.go b/business/jxcallback/orderman/order.go index 198b7f883..527301d45 100644 --- a/business/jxcallback/orderman/order.go +++ b/business/jxcallback/orderman/order.go @@ -497,22 +497,3 @@ func (c *OrderManager) UpdateOrderFields(order *model.GoodsOrder, fieldList []st }, "UpdateOrderFields orderID:%s failed with error:%v", order.VendorOrderID, err) return err } - -//Waybill -func (c *OrderManager) UpdateWaybillVendorID(bill *model.Waybill, revertStatus bool) (err error) { - globals.SugarLogger.Debugf("UpdateWaybillVendorID bill:%v", bill) - db := orm.NewOrm() - params := orm.Params{ - "vendor_waybill_id": bill.VendorWaybillID, - "waybill_vendor_id": bill.WaybillVendorID, - } - // 如果运单被取消,则要保持在已拣货状态 - if revertStatus && bill.WaybillVendorID == model.VendorIDUnknown { - params["status"] = model.OrderStatusFinishedPickup - } - utils.CallFuncLogError(func() error { - _, err = db.QueryTable("goods_order").Filter("vendor_order_id", bill.VendorOrderID).Filter("vendor_id", bill.OrderVendorID).Update(params) - return err - }, "UpdateWaybillVendorID update order, bill:%v", bill) - return err -} diff --git a/business/jxcallback/scheduler/defsch/defsch.go b/business/jxcallback/scheduler/defsch/defsch.go index 8f1763e59..17bfec8ee 100644 --- a/business/jxcallback/scheduler/defsch/defsch.go +++ b/business/jxcallback/scheduler/defsch/defsch.go @@ -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.IsOrderHasWaybill(order) { + } else if model.IsOrderHaveWaybill(order) { globals.SugarLogger.Debugf("OnWaybillStatusChanged multiple waybill created, bill:%v", bill) if model.IsWaybillPlatformOwn(bill) { // 是购物平台运单 - if order.VendorID != order.WaybillVendorID { // 既有运单不是购物平台运单 + if !model.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.IsOrderHasWaybill(order) || - (model.IsWaybillPlatformOwn(bill) && order.VendorID != order.WaybillVendorID && (order.DeliveryFlag&model.OrderDeliveryFlagMaskPurcahseDisabled) == 0) { - if model.IsOrderHasWaybill(order) { + if !model.IsOrderHaveWaybill(order) || + (model.IsWaybillPlatformOwn(bill) && !model.IsOrderHaveOwnWaybill(order) && (order.DeliveryFlag&model.OrderDeliveryFlagMaskPurcahseDisabled) == 0) { + if model.IsOrderHaveWaybill(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.IsOrderHasWaybill(order) { + } else if model.IsOrderHaveWaybill(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.IsOrderHasWaybill(order) { - bill.WaybillVendorID = model.VendorIDUnknown - s.updateOrderByBill(order, bill, true) + if model.IsOrderHaveWaybill(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 order.WaybillVendorID == model.VendorIDUnknown { + if !model.IsOrderHaveWaybill(order) { 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) { diff --git a/business/jxcallback/scheduler/defsch/defsch_ext.go b/business/jxcallback/scheduler/defsch/defsch_ext.go index f9900e3aa..e96880509 100644 --- a/business/jxcallback/scheduler/defsch/defsch_ext.go +++ b/business/jxcallback/scheduler/defsch/defsch_ext.go @@ -72,7 +72,7 @@ func (s *DefScheduler) SelfDeliveringAndUpdateStatus(ctx *jxcontext.Context, ven func (s *DefScheduler) canOrderCreateWaybillNormally(order *model.GoodsOrder) (err error) { if !(order.LockStatus != model.OrderStatusLocked && order.Status >= model.OrderStatusFinishedPickup && order.Status < model.OrderStatusEndBegin) { err = fmt.Errorf("当前订单%s没有处于拣货完成且没有结束没有锁定的订单才能进行召唤配送操作", order.VendorOrderID) - } else if model.IsOrderHasWaybill(order) { + } else if model.IsOrderHaveWaybill(order) { err = fmt.Errorf("当前订单%s已经有了有效的承运人%s了", order.VendorOrderID, jxutils.GetVendorName(order.WaybillVendorID)) } return err diff --git a/business/model/order.go b/business/model/order.go index b38805fb1..d953ec6e5 100644 --- a/business/model/order.go +++ b/business/model/order.go @@ -245,7 +245,7 @@ func IsSpecialOrderPlatformWaybill(bill *Waybill) bool { } // 订单是否已经有了有效运单 -func IsOrderHasWaybill(order *GoodsOrder) bool { +func IsOrderHaveWaybill(order *GoodsOrder) bool { return order.WaybillVendorID != VendorIDUnknown && order.VendorWaybillID != "" } diff --git a/business/partner/partner.go b/business/partner/partner.go index c0d398fa6..d03b6cd8c 100644 --- a/business/partner/partner.go +++ b/business/partner/partner.go @@ -142,7 +142,6 @@ type IOrderManager interface { LoadOrderFinancial(vendorOrderID string, vendorID int) (order *model.OrderFinancial, err error) LoadOrderFinancial2(vendorOrderID2 string, vendorID int) (order *model.OrderFinancial, err error) - UpdateWaybillVendorID(bill *model.Waybill, revertStatus bool) (err error) UpdateOrderStatusAndFlag(order *model.GoodsOrder) (err error) UpdateOrderFields(order *model.GoodsOrder, fieldList []string) (err error)