diff --git a/business/partner/purchase/ebai/order.go b/business/partner/purchase/ebai/order.go index 589d2cd96..4435d2ba3 100644 --- a/business/partner/purchase/ebai/order.go +++ b/business/partner/purchase/ebai/order.go @@ -10,6 +10,7 @@ import ( "git.rosy.net.cn/jx-callback/business/jxcallback/scheduler" "git.rosy.net.cn/jx-callback/business/jxutils" "git.rosy.net.cn/jx-callback/business/model" + "git.rosy.net.cn/jx-callback/business/model/dao" "git.rosy.net.cn/jx-callback/business/partner" "git.rosy.net.cn/jx-callback/globals" "git.rosy.net.cn/jx-callback/globals/api" @@ -17,13 +18,14 @@ import ( const ( acceptOrderDelay = 270 * time.Second - fakePickedUp = "fakefinishedpickup" + fakePickedUp = "9527" ) var ( VendorStatus2StatusMap = map[string]int{ ebaiapi.OrderStatusNew: model.OrderStatusNew, ebaiapi.OrderStatusAccepted: model.OrderStatusAccepted, + fakePickedUp: model.OrderStatusFinishedPickup, ebaiapi.OrderStatusCourierAccepted: model.OrderStatusDelivering, ebaiapi.OrderStatusCourierPickedup: model.OrderStatusDelivering, ebaiapi.OrderStatusFinished: model.OrderStatusFinished, @@ -137,6 +139,7 @@ func (p *PurchaseHandler) PickupGoods(order *model.GoodsOrder, userName string) // if globals.EnableStoreWrite && globals.EnableEbaiStoreWrite { // err = api.EbaiAPI.OrderCallDelivery(order.VendorOrderID) // } + p.postFakeFinishedPickupMsg(order.VendorOrderID) // 饿百没有拣货完成事件,模拟发送 return err } @@ -179,13 +182,19 @@ func (c *PurchaseHandler) onOrderMsg(msg *ebaiapi.CallbackMsg) (retVal *ebaiapi. if status != nil { err := partner.CurOrderManager.OnOrderStatusChanged(status) - // 直接跳到拣货完成 + // 如果订单所属的门店是专送模式,直接跳到拣货完成,因为饿百没有拣货完成的概念,接单就视为拣货完成 if status.Status == model.OrderStatusAccepted { - status.Status = model.OrderStatusFinishedPickup - status.VendorStatus = fakePickedUp - err = partner.CurOrderManager.OnOrderStatusChanged(status) + postFakeFinishedPickupMsg := true + vendorOrderID := GetOrderIDFromMsg(msg) + if order, err := partner.CurOrderManager.LoadOrder(vendorOrderID, model.VendorIDEBAI); err == nil { + if c.getOrderStoreDeliveryType(order) != scheduler.StoreDeliveryTypeByPlatform { + postFakeFinishedPickupMsg = false + } + } + if postFakeFinishedPickupMsg { + c.postFakeFinishedPickupMsg(vendorOrderID) + } } - retVal = api.EbaiAPI.Err2CallbackResponse(msg.Cmd, err, nil) } } @@ -231,6 +240,38 @@ func (c *PurchaseHandler) GetStatusActionTimeout(statusType, status int) time.Du return 0 } +func (c *PurchaseHandler) getOrderStoreDeliveryType(order *model.GoodsOrder) (deliveryType int) { + sql := ` + SELECT * + FROM store_map t1 + WHERE t1.vendor_store_id = ? + AND t1.vendor_id = ? + AND t1.deleted_at = ? + ` + db := dao.GetDB() + var storeMap *model.StoreMap + if err := dao.GetRow(db, &storeMap, sql, order.VendorStoreID, model.VendorIDEBAI, utils.DefaultTimeValue); err == nil { + return int(storeMap.DeliveryType) + } else if !dao.IsNoRowsError(err) { + globals.SugarLogger.Warnf("getOrderStoreDeliveryType orderID:%s failed with error:%v", order.VendorOrderID, err) + } + return scheduler.StoreDeliveryTypeByPlatform +} + +func (c *PurchaseHandler) postFakeFinishedPickupMsg(vendorOrderID string) { + msg := &ebaiapi.CallbackMsg{ + Cmd: ebaiapi.CmdOrderStatus, + Timestamp: time.Now().Unix(), + Body: map[string]interface{}{ + "status": utils.Str2Int64(fakePickedUp), + "order_id": vendorOrderID, + }, + } + go func() { + OnCallbackMsg(msg) + }() +} + func getTimeFromTimestampStr(sendTime string) time.Time { timeStamp := utils.Str2Int64WithDefault(sendTime, 0) if timeStamp < 1538103149 { // 立即达订单给的是1(而不是空,0),1538103149不是特殊值,只是一个任意之前的时间,这样写可以处理