diff --git a/business/jxcallback/scheduler/basesch/basesch.go b/business/jxcallback/scheduler/basesch/basesch.go index 70ee190b5..0f2cf4dfa 100644 --- a/business/jxcallback/scheduler/basesch/basesch.go +++ b/business/jxcallback/scheduler/basesch/basesch.go @@ -2,6 +2,7 @@ package basesch import ( "fmt" + tiktokShop "git.rosy.net.cn/baseapi/platformapi/tiktok_shop/tiktok_api" "git.rosy.net.cn/baseapi/utils" "git.rosy.net.cn/jx-callback/business/jxcallback/orderman" "git.rosy.net.cn/jx-callback/business/jxcallback/scheduler" @@ -106,10 +107,6 @@ func (c *BaseScheduler) SelfDeliverDelivering(order *model.GoodsOrder, userName if c.IsReallyCallPlatformAPI { err = utils.CallFuncLogError(func() error { // 下面这个写法暂存,可能会有问题 - if err := partner.GetPurchaseOrderHandlerFromVendorID(order.VendorID).SelfDeliverDelivering(order, userName); err != nil && (err != scheduler.ErrOrderStatusAlreadySatisfyCurOperation) { - partner.CurOrderManager.OnOrderMsg(order, "SelfDeliverDelivering 调用[SelfDeliverDelivering]转自送", err.Error()) - } - if order.VendorID == model.VendorIDMTWM { // 转自送同时取消平台订单(美团才做这个操作) if _, err := partner.GetPurchasePlatformFromVendorID(order.VendorID).GetCancelDeliveryReason(order); err != nil { @@ -134,13 +131,29 @@ func (c *BaseScheduler) SelfDeliverDelivering(order *model.GoodsOrder, userName partner.CurOrderManager.OnOrderMsg(order, "美团外卖运单无法取消,", err.Error()) return err } - } - //抖音配送 - if order.VendorID == model.VendorIDDD { - //取消抖音配送转自送 + } else if order.VendorID == model.VendorIDDD { //抖音配送 localBill, _ := partner.CurOrderManager.LoadWaybill(order.VendorWaybillID, order.WaybillVendorID) - err = c.CancelWaybill(localBill, partner.CancelWaybillReasonDYPSCancel, partner.CancelWaybillReasonStrDYPSCancel) - partner.CurOrderManager.OnOrderMsg(order, "取消抖音配送,转用门店自配送/三方配送", err.Error()) + // 获取抖音配送状态 + tiktokWayBillStatus, _ := partner.GetPurchasePlatformFromVendorID(order.VendorID).OrderLogisticsStatus(utils.Str2Int64(order.VendorOrderID)) + if tiktokWayBillStatus >= tiktokShop.ShipmentStatusReceived { + //取消抖音配送转自送 + err = c.CancelWaybill(localBill, partner.CancelWaybillReasonDYPSCancel, partner.CancelWaybillReasonStrDYPSCancel) + partner.CurOrderManager.OnOrderMsg(order, "取消抖音配送,转用门店自配送/三方配送", "抖音骑手已经接单,无法取消") + return err + } + + // 先转自送,自送不成功取消平台配送. + if err = partner.GetPurchasePlatformFromVendorID(order.VendorID).CancelLogisticsByWmOrderId(order, "", "", order.VendorStoreID, order.VendorOrderID); err != nil { + err = c.CancelWaybill(localBill, partner.CancelWaybillReasonDYPSCancel, partner.CancelWaybillReasonStrDYPSCancel) + partner.CurOrderManager.OnOrderMsg(order, "取消抖音平台运单错误,无法转自送", err.Error()) + return err + } else { + partner.GetPurchasePlatformFromVendorID(order.VendorID).SelfDeliverDelivering(order, "") + } + } else { + if err := partner.GetPurchaseOrderHandlerFromVendorID(order.VendorID).SelfDeliverDelivering(order, userName); err != nil && (err != scheduler.ErrOrderStatusAlreadySatisfyCurOperation) { + partner.CurOrderManager.OnOrderMsg(order, "SelfDeliverDelivering 调用[SelfDeliverDelivering]转自送", err.Error()) + } } return err }, "SelfDeliverDelivering orderID:%s", order.VendorOrderID) diff --git a/business/jxcallback/scheduler/defsch/defsch_ext.go b/business/jxcallback/scheduler/defsch/defsch_ext.go index 77dc21787..b0742ef8e 100644 --- a/business/jxcallback/scheduler/defsch/defsch_ext.go +++ b/business/jxcallback/scheduler/defsch/defsch_ext.go @@ -69,51 +69,51 @@ func (s *DefScheduler) SelfDeliveringAndUpdateStatus(ctx *jxcontext.Context, ven } err = scheduler.ErrCanNotFindOrder } - globals.SugarLogger.Debugf("SelfDeliveringAndUpdateStatus=============err %v", err) + vendorStatus := fmt.Sprintf("%s转商户自送成功", ctx.GetUserName()) + remark := "" + if err != nil { + vendorStatus = fmt.Sprintf("%s转商户自送失败", ctx.GetUserName()) + remark = err.Error() + partner.CurOrderManager.OnOrderMsg(order, vendorStatus, remark) + return err + } + + // 上面是真的转自送,支持美团,饿百,京东,如果时抖店,抖店暂时全部是自送的!但是有骑手信息时,就是一个白嫖单子! + if order.VendorID == model.VendorIDDD && courierName != "" && courierMobile != "" { + timeNow := time.Now() + rand.Seed(timeNow.UnixNano()) + randNumber := rand.Int63n(640) + if randNumber < 60 { + randNumber += 60 + } + randTime := time.Duration(randNumber) * time.Second + bill := &model.Waybill{ + VendorWaybillID: order.VendorOrderID, + VendorWaybillID2: "", + WaybillVendorID: model.VendorJXFakeWL, + VendorOrderID: order.VendorOrderID, + OrderVendorID: model.VendorIDDD, + CourierName: courierName, + CourierMobile: courierMobile, + Status: model.OrderStatusNew, + VendorStatus: utils.Int2Str(model.OrderStatusNew), + ActualFee: 500, + DesiredFee: order.ActualPayPrice, + TipFee: 0, + DuplicatedCount: 0, + DeliveryFlag: 0, + WaybillCreatedAt: timeNow, + WaybillFinishedAt: utils.DefaultTimeValue, + StatusTime: timeNow.Add(randTime), // 下一状态时间 + OriginalData: "", + Remark: "自定义物流单", + VendorOrgCode: order.VendorOrgCode, + } + err = dao.CreateEntity(dao.GetDB(), bill) + } return err }() - globals.SugarLogger.Debugf("SelfDeliveringAndUpdateStatus2=============err %v", err) }, jxutils.ComposeUniversalOrderID(vendorOrderID, vendorID)) - vendorStatus := fmt.Sprintf("%s转商户自送成功", ctx.GetUserName()) - remark := "" - if err != nil { - vendorStatus = fmt.Sprintf("%s转商户自送失败", ctx.GetUserName()) - remark = err.Error() - } - partner.CurOrderManager.OnOrderMsg(order, vendorStatus, remark) - // 上面是真的转自送,支持美团,饿百,京东,如果时抖店,抖店暂时全部是自送的!但是有骑手信息时,就是一个白嫖单子! - if order.VendorID == model.VendorIDDD && courierName != "" && courierMobile != "" { - timeNow := time.Now() - rand.Seed(timeNow.UnixNano()) - randNumber := rand.Int63n(640) - if randNumber < 60 { - randNumber += 60 - } - randTime := time.Duration(randNumber) * time.Second - bill := &model.Waybill{ - VendorWaybillID: order.VendorOrderID, - VendorWaybillID2: "", - WaybillVendorID: model.VendorJXFakeWL, - VendorOrderID: order.VendorOrderID, - OrderVendorID: model.VendorIDDD, - CourierName: courierName, - CourierMobile: courierMobile, - Status: model.OrderStatusNew, - VendorStatus: utils.Int2Str(model.OrderStatusNew), - ActualFee: 500, - DesiredFee: order.ActualPayPrice, - TipFee: 0, - DuplicatedCount: 0, - DeliveryFlag: 0, - WaybillCreatedAt: timeNow, - WaybillFinishedAt: utils.DefaultTimeValue, - StatusTime: timeNow.Add(randTime), // 下一状态时间 - OriginalData: "", - Remark: "自定义物流单", - VendorOrgCode: order.VendorOrgCode, - } - err = dao.CreateEntity(dao.GetDB(), bill) - } return err } diff --git a/business/partner/purchase/tiktok_store/order.go b/business/partner/purchase/tiktok_store/order.go index 6e39ddf4b..79b390f1d 100644 --- a/business/partner/purchase/tiktok_store/order.go +++ b/business/partner/purchase/tiktok_store/order.go @@ -583,46 +583,31 @@ func (c *PurchaseHandler) CanSwitch2SelfDeliver(order *model.GoodsOrder) (isCan // Swtich2SelfDeliver 抖音转自送的时候就是通知抖音发货了 func (c *PurchaseHandler) Swtich2SelfDeliver(order *model.GoodsOrder, userName string) (err error) { api := getAPI(order.VendorOrgCode, 0, "") - if time.Now().Sub(order.CreatedAt) <= tiktokShop.AutoCallDelayTime15*60 { //自动运力呼叫期间不可取消 - return errors.New("抖音配送自动呼叫运力期间不可转门店自配送/三方配送,请下单成功15分钟后重试") + remoteWaybill, err2 := c.GetDYPSRiderInfo(order.VendorOrderID) + if err2 != nil { + return err2 } - if remoteWaybill, err2 := c.GetDYPSRiderInfo(order.VendorOrderID); err2 == nil { - //remoteWaybill := &superm_getShipmentInfo_response.ShipmentInfo{ //测试数据 - // AfterSaleID: 0, - // OccurredTime: "2022-12-28 15:55:51", - // RiderLatitude: "30.693528", - // RiderLongitude: "104.045337", - // RiderName: "赵乐均", - // RiderPhone: "15108474706", - // ShipmentError: 0, - // ShipmentStatus: 2, - // ShopID: 57939570, - // ShopOrderID: 5016940182798690015, - // TrackNo: "DYA36452999870015", - //} - if remoteWaybill.ShipmentStatus >= tiktokShop.ShipmentStatusArrived { //骑手取货后不可取消 - return errors.New("抖音配送骑手已取货,不可转门店自配送/三方配送") - } else { - if localWaybill, err1 := dao.GetWaybills(dao.GetDB(), order.VendorOrderID); err1 == nil && len(localWaybill) > 0 { - if err = c.CancelWaybill(localWaybill[0], partner.CancelWaybillReasonDYPSCancel, partner.CancelWaybillReasonStrDYPSCancel); err != nil { - return fmt.Errorf("%s,不可转门店自配送/三方配送", err) - } else { - //转门店自送通知抖音发货 - err = api.OrderDelivering(&order_logisticsAdd_request.OrderLogisticsAddParam{ - OrderId: order.VendorOrderID, - Company: "", - CompanyCode: "chengdouruoxi", - LogisticsCode: order.VendorOrderID, - IsRefundReject: false, - IsRejectRefund: false, - SerialNumberList: nil, - AddressId: 0, - StoreId: utils.Str2Int64(order.VendorStoreID), - }) - } - } - } + + if remoteWaybill.ShipmentStatus >= tiktokShop.ShipmentStatusArrived { //骑手取货后不可取消 + return errors.New("抖音配送骑手已取货,不可转门店自配送/三方配送") } + + if err := getAPI(order.VendorOrgCode, 0, "").ShopOrderDispatcher(utils.Str2Int64(order.VendorStoreID), order.VendorOrderID, tiktokShop.DispatcherFeeTypeCancel); err != nil { + return err + } + + //转门店自送通知抖音发货 + err = api.OrderDelivering(&order_logisticsAdd_request.OrderLogisticsAddParam{ + OrderId: order.VendorOrderID, + Company: "", + CompanyCode: "chengdouruoxi", + LogisticsCode: order.VendorOrderID, + IsRefundReject: false, + IsRejectRefund: false, + SerialNumberList: nil, + AddressId: 0, + StoreId: utils.Str2Int64(order.VendorStoreID), + }) return err } @@ -998,15 +983,24 @@ func (c *PurchaseHandler) GetCancelDeliveryReason(order *model.GoodsOrder) (stri return "", nil } -// CancelLogisticsByWmOrderId 取消美团外卖理由转使用三方配送 +// CancelLogisticsByWmOrderId 取消平台配送,使用现有的三方配送 func (c *PurchaseHandler) CancelLogisticsByWmOrderId(order *model.GoodsOrder, reasonCode, detailContent, appPoiCode, orderId string) error { - //return getAPI(order.VendorOrgCode, jxutils.GetSaleStoreIDFromOrder(order), "").CancelLogisticsByWmOrderId(reasonCode, detailContent, appPoiCode, orderId) - return nil + return getAPI(order.VendorOrgCode, 0, "").ShopOrderDispatcher(utils.Str2Int64(order.VendorStoreID), order.VendorOrderID, tiktokShop.DispatcherFeeTypeCancel) } // OrderLogisticsStatus 获取订单配送状态 func (c *PurchaseHandler) OrderLogisticsStatus(orderId int64) (int64, error) { - return 0, nil + orderInfo, err := dao.GetSimpleOrder(dao.GetDB(), utils.Int64ToStr(orderId)) + if err != nil { + return 0, errors.New("获取本地门店账号信息失败,请重试") + } + + waybill, err := getAPI(orderInfo.VendorOrgCode, 0, "").GetShipmentInfo(utils.Str2Int64(orderInfo.VendorOrderID), 0, tiktokShop.ShipmentTypeInvoice) + if err != nil { + return 0, err + } + + return waybill.ShipmentStatus, nil } // GetOrderTotalShopMoney 获取门店结算信息