- 自配送门店的PickupGoods不应调用平台相应API,模拟一个事件
This commit is contained in:
@@ -31,23 +31,21 @@ func (c *BaseScheduler) AcceptOrRefuseOrder(order *model.GoodsOrder, isAcceptIt
|
|||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *BaseScheduler) PickupGoods(order *model.GoodsOrder, userName string) (err error) {
|
func (c *BaseScheduler) PickupGoods(order *model.GoodsOrder, isSelfDeilivery bool, userName string) (err error) {
|
||||||
globals.SugarLogger.Infof("PickupGoods orderID:%s", order.VendorOrderID)
|
globals.SugarLogger.Infof("PickupGoods orderID:%s", order.VendorOrderID)
|
||||||
if (order.DeliveryFlag & model.OrderDeliveryFlagMaskPurcahseDisabled) == 0 {
|
if order.LockStatus == model.OrderStatusUnknown && order.Status == model.OrderStatusAccepted {
|
||||||
if order.LockStatus == model.OrderStatusUnknown && order.Status == model.OrderStatusAccepted {
|
if c.IsReallyCallPlatformAPI {
|
||||||
if c.IsReallyCallPlatformAPI {
|
err = utils.CallFuncLogErrorWithInfo(func() error {
|
||||||
err = utils.CallFuncLogErrorWithInfo(func() error {
|
return partner.GetPurchasePlatformFromVendorID(order.VendorID).PickupGoods(order, isSelfDeilivery, userName)
|
||||||
return partner.GetPurchasePlatformFromVendorID(order.VendorID).PickupGoods(order, userName)
|
}, "PickupGoods orderID:%s", order.VendorOrderID)
|
||||||
}, "PickupGoods orderID:%s", order.VendorOrderID)
|
}
|
||||||
}
|
} else {
|
||||||
|
if order.LockStatus != model.OrderStatusUnknown || order.Status < model.OrderStatusAccepted {
|
||||||
|
err = scheduler.ErrOrderStatusIsNotSuitable4CurOperation
|
||||||
|
globals.SugarLogger.Infof("PickupGoods orderID:%s, status:%d is not suitable", order.VendorOrderID, order.Status)
|
||||||
} else {
|
} else {
|
||||||
if order.LockStatus != model.OrderStatusUnknown || order.Status < model.OrderStatusAccepted {
|
err = scheduler.ErrOrderStatusAlreadySatisfyCurOperation
|
||||||
err = scheduler.ErrOrderStatusIsNotSuitable4CurOperation
|
globals.SugarLogger.Debugf("PickupGoods orderID:%s status:%d already ok", order.VendorOrderID, order.Status)
|
||||||
globals.SugarLogger.Infof("PickupGoods orderID:%s, status:%d is not suitable", order.VendorOrderID, order.Status)
|
|
||||||
} else {
|
|
||||||
err = scheduler.ErrOrderStatusAlreadySatisfyCurOperation
|
|
||||||
globals.SugarLogger.Debugf("PickupGoods orderID:%s status:%d already ok", order.VendorOrderID, order.Status)
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return err
|
return err
|
||||||
|
|||||||
@@ -67,7 +67,7 @@ func (c *BaseScheduler) PickupGoodsAndUpdateStatus(ctx *jxcontext.Context, vendo
|
|||||||
globals.SugarLogger.Infof("PickupGoodsAndUpdateStatus orderID:%s userName:%s", vendorOrderID, userName)
|
globals.SugarLogger.Infof("PickupGoodsAndUpdateStatus orderID:%s userName:%s", vendorOrderID, userName)
|
||||||
order, err := partner.CurOrderManager.LoadOrder(vendorOrderID, vendorID)
|
order, err := partner.CurOrderManager.LoadOrder(vendorOrderID, vendorID)
|
||||||
if err == nil {
|
if err == nil {
|
||||||
err = c.PickupGoods(order, userName)
|
err = c.PickupGoods(order, GetStoreDeliveryType(order, nil) == scheduler.StoreDeliveryTypeByStore, userName)
|
||||||
if err == nil {
|
if err == nil {
|
||||||
order.Status = model.OrderStatusFinishedPickup
|
order.Status = model.OrderStatusFinishedPickup
|
||||||
if err = partner.CurOrderManager.UpdateOrderStatusAndFlag(order); err == nil {
|
if err = partner.CurOrderManager.UpdateOrderStatusAndFlag(order); err == nil {
|
||||||
|
|||||||
@@ -182,7 +182,7 @@ func init() {
|
|||||||
TimeoutGap: time2AutoPickupGap,
|
TimeoutGap: time2AutoPickupGap,
|
||||||
TimeoutAction: func(savedOrderInfo *WatchOrderInfo) (err error) {
|
TimeoutAction: func(savedOrderInfo *WatchOrderInfo) (err error) {
|
||||||
if savedOrderInfo.autoPickupTimeoutMinute > 0 {
|
if savedOrderInfo.autoPickupTimeoutMinute > 0 {
|
||||||
return sch.autoPickupGood(savedOrderInfo.order)
|
return sch.autoPickupGood(savedOrderInfo)
|
||||||
}
|
}
|
||||||
return nil
|
return nil
|
||||||
},
|
},
|
||||||
@@ -281,7 +281,7 @@ func (s *DefScheduler) OnOrderStatusChanged(status *model.OrderStatus, isPending
|
|||||||
} else if status.LockStatus != model.OrderStatusUnknown {
|
} else if status.LockStatus != model.OrderStatusUnknown {
|
||||||
s.stopTimer(savedOrderInfo)
|
s.stopTimer(savedOrderInfo)
|
||||||
}
|
}
|
||||||
} else if status.Status > model.OrderStatusApplyCancel {
|
} else if status.Status == model.OrderStatusApplyCancel {
|
||||||
globals.SugarLogger.Debugf("OnOrderStatusChanged orderID:%s %s, status:%v", status.VendorOrderID, model.OrderStatusName[status.Status], status)
|
globals.SugarLogger.Debugf("OnOrderStatusChanged orderID:%s %s, status:%v", status.VendorOrderID, model.OrderStatusName[status.Status], status)
|
||||||
savedOrderInfo := s.loadSavedOrderFromMap(status, true)
|
savedOrderInfo := s.loadSavedOrderFromMap(status, true)
|
||||||
utils.CallFuncAsync(func() {
|
utils.CallFuncAsync(func() {
|
||||||
@@ -842,8 +842,8 @@ func (s *DefScheduler) updateBillsInfo(savedOrderInfo *WatchOrderInfo, bill *mod
|
|||||||
return isBillExist
|
return isBillExist
|
||||||
}
|
}
|
||||||
|
|
||||||
func (s *DefScheduler) autoPickupGood(order *model.GoodsOrder) (err error) {
|
func (s *DefScheduler) autoPickupGood(savedOrderInfo *WatchOrderInfo) (err error) {
|
||||||
err = s.PickupGoods(order, "")
|
err = s.PickupGoods(savedOrderInfo.order, savedOrderInfo.storeDeliveryType == scheduler.StoreDeliveryTypeByStore, "")
|
||||||
if err == scheduler.ErrOrderStatusAlreadySatisfyCurOperation {
|
if err == scheduler.ErrOrderStatusAlreadySatisfyCurOperation {
|
||||||
err = nil
|
err = nil
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -72,7 +72,7 @@ type IPurchasePlatformHandler interface {
|
|||||||
GetStatusActionTimeout(statusType, status int) time.Duration
|
GetStatusActionTimeout(statusType, status int) time.Duration
|
||||||
|
|
||||||
AcceptOrRefuseOrder(order *model.GoodsOrder, isAcceptIt bool, userName string) (err error)
|
AcceptOrRefuseOrder(order *model.GoodsOrder, isAcceptIt bool, userName string) (err error)
|
||||||
PickupGoods(order *model.GoodsOrder, userName string) (err error)
|
PickupGoods(order *model.GoodsOrder, isSelfDeilivery bool, userName string) (err error)
|
||||||
|
|
||||||
// 将订单从购物平台配送转为自送
|
// 将订单从购物平台配送转为自送
|
||||||
Swtich2SelfDeliver(order *model.GoodsOrder, userName string) (err error)
|
Swtich2SelfDeliver(order *model.GoodsOrder, userName string) (err error)
|
||||||
|
|||||||
@@ -158,9 +158,9 @@ func (p *PurchaseHandler) AcceptOrRefuseOrder(order *model.GoodsOrder, isAcceptI
|
|||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
func (p *PurchaseHandler) PickupGoods(order *model.GoodsOrder, userName string) (err error) {
|
func (p *PurchaseHandler) PickupGoods(order *model.GoodsOrder, isSelfDeilivery bool, userName string) (err error) {
|
||||||
globals.SugarLogger.Debugf("ebai PickupGoods orderID:%s", order.VendorOrderID)
|
globals.SugarLogger.Debugf("ebai PickupGoods orderID:%s", order.VendorOrderID)
|
||||||
if globals.EnableStoreWrite && globals.EnableEbaiStoreWrite {
|
if globals.EnableStoreWrite && globals.EnableEbaiStoreWrite && !isSelfDeilivery {
|
||||||
err = api.EbaiAPI.OrderCallDelivery(order.VendorOrderID)
|
err = api.EbaiAPI.OrderCallDelivery(order.VendorOrderID)
|
||||||
}
|
}
|
||||||
p.postFakeFinishedPickupMsg(order.VendorOrderID) // 饿百没有拣货完成事件,模拟发送
|
p.postFakeFinishedPickupMsg(order.VendorOrderID) // 饿百没有拣货完成事件,模拟发送
|
||||||
|
|||||||
@@ -287,7 +287,7 @@ func (c *PurchaseHandler) AcceptOrRefuseOrder(order *model.GoodsOrder, isAcceptI
|
|||||||
|
|
||||||
// 饿了么没有拣货这个状态,直接返回成功
|
// 饿了么没有拣货这个状态,直接返回成功
|
||||||
// 真实流程中也不会调用这个方法,因为接收订单后状态会直接转移到已拣货
|
// 真实流程中也不会调用这个方法,因为接收订单后状态会直接转移到已拣货
|
||||||
func (c *PurchaseHandler) PickupGoods(order *model.GoodsOrder, userName string) (err error) {
|
func (c *PurchaseHandler) PickupGoods(order *model.GoodsOrder, isSelfDeilivery bool, userName string) (err error) {
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -226,6 +226,17 @@ func (c *PurchaseHandler) callbackMsg2Status(msg *jdapi.CallbackOrderMsg) *model
|
|||||||
return orderStatus
|
return orderStatus
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (c *PurchaseHandler) postFakeFinishedPickupMsg(vendorOrderID string) {
|
||||||
|
msg := &jdapi.CallbackOrderMsg{
|
||||||
|
BillID: vendorOrderID,
|
||||||
|
StatusID: jdapi.OrderStatusFinishedPickup,
|
||||||
|
Timestamp: utils.Time2Str(time.Now()),
|
||||||
|
}
|
||||||
|
utils.CallFuncAsync(func() {
|
||||||
|
OnOrderMsg(msg)
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
// IPurchasePlatformHandler
|
// IPurchasePlatformHandler
|
||||||
func (c *PurchaseHandler) GetStatusFromVendorStatus(vendorStatus string) int {
|
func (c *PurchaseHandler) GetStatusFromVendorStatus(vendorStatus string) int {
|
||||||
if status, ok := VendorStatus2StatusMap[vendorStatus]; ok {
|
if status, ok := VendorStatus2StatusMap[vendorStatus]; ok {
|
||||||
@@ -238,8 +249,12 @@ func (c *PurchaseHandler) AcceptOrRefuseOrder(order *model.GoodsOrder, isAcceptI
|
|||||||
return api.JdAPI.OrderAcceptOperate(order.VendorOrderID, isAcceptIt, userName)
|
return api.JdAPI.OrderAcceptOperate(order.VendorOrderID, isAcceptIt, userName)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *PurchaseHandler) PickupGoods(order *model.GoodsOrder, userName string) (err error) {
|
func (c *PurchaseHandler) PickupGoods(order *model.GoodsOrder, isSelfDeilivery bool, userName string) (err error) {
|
||||||
_, err = api.JdAPI.OrderJDZBDelivery(order.VendorOrderID, userName)
|
if !isSelfDeilivery {
|
||||||
|
_, err = api.JdAPI.OrderJDZBDelivery(order.VendorOrderID, userName)
|
||||||
|
} else {
|
||||||
|
c.postFakeFinishedPickupMsg(order.VendorOrderID)
|
||||||
|
}
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -186,6 +186,21 @@ func (c *PurchaseHandler) callbackMsg2Status(msg *mtwmapi.CallbackMsg) *model.Or
|
|||||||
return orderStatus
|
return orderStatus
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (c *PurchaseHandler) postFakeFinishedPickupMsg(vendorOrderID string) {
|
||||||
|
msg := &mtwmapi.CallbackMsg{
|
||||||
|
Cmd: mtwmapi.MsgTypeOrderAccepted,
|
||||||
|
Data: make(url.Values),
|
||||||
|
}
|
||||||
|
timeStr := utils.Int64ToStr(time.Now().Unix())
|
||||||
|
msg.Data.Add(mtwmapi.KeyOrderID, vendorOrderID)
|
||||||
|
msg.Data.Add("status", mtwmapi.OrderStatusAccepted)
|
||||||
|
msg.Data.Add("timestamp", timeStr)
|
||||||
|
msg.Data.Add("utime", timeStr)
|
||||||
|
utils.CallFuncAsync(func() {
|
||||||
|
OnOrderCallbackMsg(msg)
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
func (c *PurchaseHandler) AcceptOrRefuseOrder(order *model.GoodsOrder, isAcceptIt bool, userName string) (err error) {
|
func (c *PurchaseHandler) AcceptOrRefuseOrder(order *model.GoodsOrder, isAcceptIt bool, userName string) (err error) {
|
||||||
if globals.EnableStoreWrite && globals.EnableMtwmStoreWrite {
|
if globals.EnableStoreWrite && globals.EnableMtwmStoreWrite {
|
||||||
if isAcceptIt {
|
if isAcceptIt {
|
||||||
@@ -209,9 +224,11 @@ func (c *PurchaseHandler) AcceptOrRefuseOrder(order *model.GoodsOrder, isAcceptI
|
|||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *PurchaseHandler) PickupGoods(order *model.GoodsOrder, userName string) (err error) {
|
func (c *PurchaseHandler) PickupGoods(order *model.GoodsOrder, isSelfDeilivery bool, userName string) (err error) {
|
||||||
if globals.EnableStoreWrite && globals.EnableMtwmStoreWrite {
|
if globals.EnableStoreWrite && globals.EnableMtwmStoreWrite && !isSelfDeilivery {
|
||||||
err = api.MtwmAPI.OrderConfirm(utils.Str2Int64(order.VendorOrderID))
|
err = api.MtwmAPI.OrderConfirm(utils.Str2Int64(order.VendorOrderID))
|
||||||
|
} else {
|
||||||
|
c.postFakeFinishedPickupMsg(order.VendorOrderID)
|
||||||
}
|
}
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -191,7 +191,7 @@ func (p *PurchaseHandler) AcceptOrRefuseOrder(order *model.GoodsOrder, isAcceptI
|
|||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
func (p *PurchaseHandler) PickupGoods(order *model.GoodsOrder, userName string) (err error) {
|
func (p *PurchaseHandler) PickupGoods(order *model.GoodsOrder, isSelfDeilivery bool, userName string) (err error) {
|
||||||
if globals.EnableStoreWrite && globals.EnableWscStoreWrite {
|
if globals.EnableStoreWrite && globals.EnableWscStoreWrite {
|
||||||
_, err = dada.CurDeliveryHandler.CreateWaybill(order, func(deliveryFee, addFee int64) error {
|
_, err = dada.CurDeliveryHandler.CreateWaybill(order, func(deliveryFee, addFee int64) error {
|
||||||
if addFee > maxAddFee {
|
if addFee > maxAddFee {
|
||||||
|
|||||||
Reference in New Issue
Block a user