From 667c66f7c7fdf36166fc97665d506de174b1b5cd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=82=B9=E5=AE=97=E6=A5=A0?= Date: Wed, 2 Nov 2022 15:53:45 +0800 Subject: [PATCH] 1 --- business/model/const.go | 4 +- business/partner/delivery/dada/waybill.go | 39 ++++++++++++------- business/partner/delivery/fn/waybill.go | 5 +-- business/partner/delivery/mtps/waybill.go | 12 ++++-- business/partner/delivery/rider.go | 28 ++++++++----- .../purchase/tiktok_store/order_afs.go | 1 + .../purchase/tiktok_store/order_afs_utils.go | 37 ++++++++++++++---- 7 files changed, 90 insertions(+), 36 deletions(-) diff --git a/business/model/const.go b/business/model/const.go index 40a5d2608..a02393011 100644 --- a/business/model/const.go +++ b/business/model/const.go @@ -329,7 +329,7 @@ const ( WaybillStatusPending = 7 // WaybillStatusAcceptCanceled = 8 // 取消运单 WaybillStatusAccepted = 10 // 分配骑手,正在接单 - WaybillStatusCourierAssigned = 12 //已分配骑手 + WaybillStatusCourierAssigned = 12 // 已分配骑手 WaybillStatusCourierArrived = 15 // 此状态是可选的,明确写出来是因为还是较重要的状态,但业务逻辑不应依赖此状态 WaybillStatusApplyFailedGetGoods = 17 // 取货失败待审核 @@ -353,6 +353,8 @@ const ( RiderGetOrderCanceled = "骑手取消" RiderGetOrderDeliverFailed = "骑手配送异常" RiderGetOrderDeliverOther = "其他待处理信息" + RiderWaitRider = "待接单,正在分配骑手" + RiderWaitGetGoods = "已经分配骑手,待取货" ) const ( diff --git a/business/partner/delivery/dada/waybill.go b/business/partner/delivery/dada/waybill.go index d744388c6..17fbe7a84 100644 --- a/business/partner/delivery/dada/waybill.go +++ b/business/partner/delivery/dada/waybill.go @@ -76,18 +76,19 @@ func (c *DeliveryHandler) onWaybillMsg(msg *dadaapi.CallbackMsg) (retVal *dadaap } order.Status = model.WaybillStatusNew case dadaapi.OrderStatusAccepted: - order.Status = model.WaybillStatusAccepted + order.Status = model.WaybillStatusCourierAssigned order.Remark = order.CourierName + "," + order.CourierMobile if dadaOrder, err := api.DadaAPI.QueryOrderInfo(msg.OrderID); err == nil { order.ActualFee = jxutils.StandardPrice2Int(dadaOrder.ActualFee) order.DesiredFee = jxutils.StandardPrice2Int(dadaOrder.DeliveryFee) } + case dadaapi.OrderStatusReturningInOrder: + order.Status = model.WaybillStatusCourierArrived case dadaapi.OrderStatusDelivering: order.Status = model.WaybillStatusDelivering - //delivery.GetOrderRiderInfoToPlatform(order.VendorOrderID) case dadaapi.OrderStatusFinished: order.Status = model.WaybillStatusDelivered - case dadaapi.OrderStatusCanceled, dadaapi.OrderStatusExpired: + case dadaapi.OrderStatusCanceled: order.Status = model.WaybillStatusCanceled case dadaapi.OrderStatusAddOrderFailed: order.Status = model.WaybillStatusFailed @@ -455,24 +456,36 @@ func (c *DeliveryHandler) GetRiderInfo(orderId string, deliveryId int64, mtPeiso } switch order.StatusCode { - case 20: // 骑手接单 - result.LogisticsStatus = model.WaybillStatusCourierAssigned - result.LogisticsContext = model.RiderGetOrder - case 100: // 骑手到店 - result.LogisticsStatus = model.WaybillStatusCourierArrived - result.LogisticsContext = model.RiderGetOrder - case 3: // 配送中 + case dadaapi.OrderStatusWaitingForAccept: // 待接单 + result.LogisticsStatus = model.WaybillStatusAccepted + result.LogisticsContext = model.RiderWaitRider + case dadaapi.OrderStatusAccepted: // 待取货 + result.LogisticsStatus = model.WaybillStatusCourierAssigned // 分配骑手 + result.LogisticsContext = model.RiderWaitGetGoods + case dadaapi.OrderStatusDelivering: // 配送中 result.LogisticsStatus = model.WaybillStatusDelivering result.LogisticsContext = model.RiderGetOrderDelivering - case 4: // 完成 + case dadaapi.OrderStatusFinished: // 完成 result.LogisticsStatus = model.WaybillStatusDelivered result.LogisticsContext = model.RiderGetOrderDelivered - case 5: // 取消 + case dadaapi.OrderStatusCanceled: // 取消 result.LogisticsStatus = model.WaybillStatusCanceled result.LogisticsContext = model.RiderGetOrderCanceled - case 9: // 配送异常 + case 8: // 指派单,不处理 + result.LogisticsStatus = 0 + result.LogisticsContext = model.RiderGetOrderDeliverOther + case 9: // 配送异常返回值 result.LogisticsStatus = model.WaybillStatusDeliverFailed result.LogisticsContext = model.RiderGetOrderDeliverFailed + case 10: // 妥投异常之物品返回完成 - 不处理 + result.LogisticsStatus = 0 + result.LogisticsContext = model.RiderGetOrderDeliverOther + case dadaapi.OrderStatusReturningInOrder: // 骑手到店 + result.LogisticsStatus = model.WaybillStatusCourierArrived + result.LogisticsContext = model.RiderToStore + case dadaapi.OrderStatusAddOrderFailed: // 创建达达运单失败 - 不处理 + result.LogisticsStatus = model.WaybillStatusFailed + result.LogisticsContext = model.RiderGetOrderDeliverOther default: result.LogisticsStatus = 0 result.LogisticsContext = model.RiderGetOrderDeliverOther diff --git a/business/partner/delivery/fn/waybill.go b/business/partner/delivery/fn/waybill.go index a0b1436ef..39ee3ae5c 100644 --- a/business/partner/delivery/fn/waybill.go +++ b/business/partner/delivery/fn/waybill.go @@ -236,18 +236,17 @@ func OnWaybillMsg(msg *fnpsapi.OrderStatusNottify) (resp *fnpsapi.CallbackRespon order.Status = model.WaybillStatusNew //5 带调度 case fnpsapi.OrderStatusAssigned: //20分配骑手 order.DesiredFee = GetDesiredFee(order.VendorOrderID) - order.Status = model.WaybillStatusAccepted //10 + order.Status = model.WaybillStatusCourierAssigned //12 order.Remark = order.CourierName + "," + order.CourierMobile case fnpsapi.OrderStatusArrived: // 80 到店 order.DesiredFee = GetDesiredFee(order.VendorOrderID) order.Status = model.WaybillStatusCourierArrived case fnpsapi.OrderStatusDelivering: // 2 配送中 order.Status = model.WaybillStatusDelivering - //delivery.GetOrderRiderInfoToPlatform(order.VendorOrderID) case fnpsapi.OrderStatusDelivered: // 3 已经送达 order.Status = model.WaybillStatusDelivered case fnpsapi.OrderStatusAcceptCacle: // 4取消订单 - order.Status = model.WaybillStatusAcceptCanceled + order.Status = model.WaybillStatusCanceled case fnpsapi.OrderStatusException: // 5 异常 order.Status = model.WaybillStatusDeliverFailed // 22 default: diff --git a/business/partner/delivery/mtps/waybill.go b/business/partner/delivery/mtps/waybill.go index 988d2ab38..0b9edf6ce 100644 --- a/business/partner/delivery/mtps/waybill.go +++ b/business/partner/delivery/mtps/waybill.go @@ -85,6 +85,12 @@ func (c *DeliveryHandler) OnWaybillExcept(msg *mtpsapi.CallbackOrderExceptionMsg func (c *DeliveryHandler) onWaybillMsg(msg *mtpsapi.CallbackOrderMsg) (retVal *mtpsapi.CallbackResponse) { order := c.callbackMsg2Waybill(msg) + if msg.Status == mtpsapi.OrderStatusPickedUp { + order.Status = model.WaybillStatusCourierArrived + mtpsapi.Err2CallbackResponse(partner.CurOrderManager.OnWaybillStatusChanged(order), order.VendorStatus) + delivery.GetOrderRiderInfoToPlatform(order.VendorOrderID) // 推送假的到店 + msg.Status = mtpsapi.OrderStatusPickedUp + } switch msg.Status { case mtpsapi.OrderStatusWaitingForSchedule: data, err := api.MtpsAPI.QueryOrderStatus(msg.DeliveryID, msg.MtPeisongID) @@ -93,15 +99,15 @@ func (c *DeliveryHandler) onWaybillMsg(msg *mtpsapi.CallbackOrderMsg) (retVal *m } order.DesiredFee = utils.Float64TwoInt64(utils.MustInterface2Float64(data["delivery_fee"]) * 100) order.Status = model.WaybillStatusNew - case mtpsapi.OrderStatusAccepted: + case mtpsapi.OrderStatusAccepted: // 已接单 data, err := api.MtpsAPI.QueryOrderStatus(msg.DeliveryID, msg.MtPeisongID) if err != nil { return mtpsapi.Err2CallbackResponse(err, fmt.Sprintf("%s", "获取订单状态错误")) } order.DesiredFee = utils.Float64TwoInt64(utils.MustInterface2Float64(data["delivery_fee"]) * 100) - order.Status = model.WaybillStatusAccepted + order.Status = model.WaybillStatusCourierAssigned order.Remark = order.CourierName + "," + order.CourierMobile - case mtpsapi.OrderStatusPickedUp: + case mtpsapi.OrderStatusPickedUp: // 已取货 order.Status = model.WaybillStatusDelivering case mtpsapi.OrderStatusDeliverred: order.Status = model.WaybillStatusDelivered diff --git a/business/partner/delivery/rider.go b/business/partner/delivery/rider.go index 9ae2c88d8..46baa8d6f 100644 --- a/business/partner/delivery/rider.go +++ b/business/partner/delivery/rider.go @@ -1,6 +1,7 @@ package delivery import ( + "fmt" "git.rosy.net.cn/baseapi/platformapi/mtpsapi" "git.rosy.net.cn/baseapi/platformapi/tiktok_shop/tiktok_api" "git.rosy.net.cn/baseapi/utils" @@ -50,6 +51,14 @@ func GetOrderRiderInfoToPlatform(orderId string) { //3.当同一个订单已经上传了一次配送信息,如再次同步会更新配送信息,以最新的一次为准。 //4.如订单已完成、已取消等状态发货将失败。 for _, v := range orders { + if orderId == "" { // 订单id为空是,是定时轮询操作,不做此状态 + waybillList, _ := dao.GetWaybills(dao.GetDB(), v.VendorOrderID) + if len(waybillList) > 0 && waybillList[0].Status > model.WaybillStatusEndBegin { + globals.SugarLogger.Debug("订单物流状态结束,不在推送订单状态:orderID[%s],wayBillId[%s]", v.VendorOrderID, waybillList[0].VendorWaybillID) + continue + } + } + riderInfo := &mtpsapi.RiderInfo{} if handlerInfo := partner.GetDeliveryPlatformFromVendorID(v.WaybillVendorID); handlerInfo != nil { if v.WaybillVendorID == model.VendorIDDada || v.WaybillVendorID == model.VendorIDFengNiao { @@ -76,6 +85,12 @@ func GetOrderRiderInfoToPlatform(orderId string) { riderInfo.ThirdCarrierOrderId = v.VendorWaybillID switch riderInfo.LogisticsStatus { + case 12: // 骑手接单 + riderInfo.LogisticsStatus = 12 + riderInfo.OpCode = tiktok_api.TiktokLogisticsORDERRECEIVED + case 15: // 到店 + riderInfo.LogisticsStatus = 15 + riderInfo.OpCode = tiktok_api.TiktokLogisticsRIDERARRIVED case 20: //配送中 riderInfo.LogisticsStatus = 20 riderInfo.OpCode = tiktok_api.TiktokLogisticsRIDERPICKUP @@ -88,18 +103,15 @@ func GetOrderRiderInfoToPlatform(orderId string) { case 115: // 取消 riderInfo.LogisticsStatus = 100 riderInfo.OpCode = tiktok_api.TiktokLogisticsCANCELDELIVERY - case 15: // 到店 - riderInfo.LogisticsStatus = 15 - riderInfo.OpCode = tiktok_api.TiktokLogisticsRIDERARRIVED - case 22, 0: // 异常配送 + case 22, 0, 120: // 异常配送 riderInfo.LogisticsStatus = 22 riderInfo.OpCode = tiktok_api.TiktokLogisticsINDDELIVERYEXCEPTION - case 12: // 骑手接单 - riderInfo.LogisticsStatus = 12 - riderInfo.OpCode = tiktok_api.TiktokLogisticsORDERRECEIVED default: continue } + if riderInfo.LogisticsStatus != 22 && riderInfo.LogisticsStatus != 120 && riderInfo.LogisticsStatus != 0 { + riderInfo.LogisticsContext += fmt.Sprintf("[%s:%s]", riderInfo.CourierName, riderInfo.CourierPhone) + } if riderInfo.Longitude == "" { riderInfo.Longitude = utils.Float64ToStr(utils.Int2Float64(v.ConsigneeLng) / 1000000) @@ -124,11 +136,9 @@ func GetOrderRiderInfoToPlatform(orderId string) { case model.VendorIDJDShop: // 京东商城 case model.VendorIDWSC: // 微盟微商城 case model.VendorIDDD: // 抖店小时达 - globals.SugarLogger.Debugf("riderInfo Order========:%s", utils.Format4Output(riderInfo, false)) // 抖店由于发配送时运单id已经固定了,我们系统在重新发货,或者运单号发生改变时去推送信息时.抖店只识别第一个运单号所以在这儿修改成发单时的第一个运单号! riderInfo.ThirdCarrierOrderId = riderInfo.OrderId paramsMap := utils.Struct2Map(riderInfo, "", true) - globals.SugarLogger.Debugf("=====params := %s", utils.Format4Output(paramsMap, false)) if handler := partner.GetPurchaseOrderHandlerFromVendorID(v.VendorID); handler != nil { if err := handler.GetOrderRider(v.VendorOrgCode, v.VendorStoreID, paramsMap); err != nil { globals.SugarLogger.Errorf("Error pushing tiktok rider information :%s--%s--%v", riderInfo.OrderId, riderInfo.ThirdCarrierOrderId, err) diff --git a/business/partner/purchase/tiktok_store/order_afs.go b/business/partner/purchase/tiktok_store/order_afs.go index 01d97f589..186d397cf 100644 --- a/business/partner/purchase/tiktok_store/order_afs.go +++ b/business/partner/purchase/tiktok_store/order_afs.go @@ -19,6 +19,7 @@ var ( tiktokShop.CallbackRefundShopMsgTagId: model.AfsOrderStatusFailed, // 拒绝退货 tiktokShop.CallbackReturnApplyAgreedMsgTagId: model.AfsOrderStatusFinished, // 同意退货 tiktokShop.CallbackReturnRefundAgreedMsgTagId: model.AfsOrderStatusFinished, // 同意退款 + tiktokShop.CallbackRefundClosedMsgTagId: model.AfsOrderStatusFailed, // 驳回 } AfsTagIDMap = map[string]string{ diff --git a/business/partner/purchase/tiktok_store/order_afs_utils.go b/business/partner/purchase/tiktok_store/order_afs_utils.go index de6f1aa3c..abac5b348 100644 --- a/business/partner/purchase/tiktok_store/order_afs_utils.go +++ b/business/partner/purchase/tiktok_store/order_afs_utils.go @@ -139,7 +139,7 @@ func (c *PurchaseHandler) callbackAfsMsg2Status(msgId string, msg interface{}) ( if k, ok := ReasonCodeMap[refundOrder.ReasonCode]; ok { orderMsg.Remark = k } else { - orderMsg.Remark = "抖音reason_code对应reason不足,需要更新.code:" + utils.Int2Str(refundOrder.ReasonCode) + orderMsg.Remark = "买家发起售后回调,抖音reason_code对应reason不足,需要更新.code:" + utils.Int2Str(refundOrder.ReasonCode) } if refundOrder.AftersaleId > 0 { @@ -163,7 +163,7 @@ func (c *PurchaseHandler) callbackAfsMsg2Status(msgId string, msg interface{}) ( if k, ok := ReasonCodeMap[refundOrder.ReasonCode]; ok { orderMsg.Remark = k } else { - orderMsg.Remark = "抖音reason_code对应reason不足,需要更新.code:" + utils.Int2Str(refundOrder.ReasonCode) + orderMsg.Remark = "买家修改售后回调,抖音reason_code对应reason不足,需要更新.code:" + utils.Int2Str(refundOrder.ReasonCode) } if refundOrder.AftersaleId > 0 { @@ -187,7 +187,7 @@ func (c *PurchaseHandler) callbackAfsMsg2Status(msgId string, msg interface{}) ( if k, ok := ReasonCodeMap[refundOrder.ReasonCode]; ok { orderMsg.Remark = k } else { - orderMsg.Remark = "抖音reason_code对应reason不足,需要更新.code:" + utils.Int2Str(refundOrder.ReasonCode) + orderMsg.Remark = "退款成功回调,抖音reason_code对应reason不足,需要更新.code:" + utils.Int2Str(refundOrder.ReasonCode) } if refundOrder.AftersaleId > 0 { orderMsg.VendorOrderID = utils.Int64ToStr(refundOrder.AftersaleId) @@ -210,7 +210,7 @@ func (c *PurchaseHandler) callbackAfsMsg2Status(msgId string, msg interface{}) ( if k, ok := ReasonCodeMap[refundOrder.ReasonCode]; ok { orderMsg.Remark = k } else { - orderMsg.Remark = "抖音reason_code对应reason不足,需要更新.code:" + utils.Int2Str(refundOrder.ReasonCode) + orderMsg.Remark = "拒绝退款回调,抖音reason_code对应reason不足,需要更新.code:" + utils.Int2Str(refundOrder.ReasonCode) } if refundOrder.AftersaleId > 0 { orderMsg.VendorOrderID = utils.Int64ToStr(refundOrder.AftersaleId) @@ -233,7 +233,7 @@ func (c *PurchaseHandler) callbackAfsMsg2Status(msgId string, msg interface{}) ( if k, ok := ReasonCodeMap[refundOrder.ReasonCode]; ok { orderMsg.Remark = k } else { - orderMsg.Remark = "抖音reason_code对应reason不足,需要更新.code:" + utils.Int2Str(refundOrder.ReasonCode) + orderMsg.Remark = "拒绝退货回调,抖音reason_code对应reason不足,需要更新.code:" + utils.Int2Str(refundOrder.ReasonCode) } if refundOrder.AftersaleId > 0 { orderMsg.VendorOrderID = utils.Int64ToStr(refundOrder.AftersaleId) @@ -256,7 +256,7 @@ func (c *PurchaseHandler) callbackAfsMsg2Status(msgId string, msg interface{}) ( if k, ok := ReasonCodeMap[refundOrder.ReasonCode]; ok { orderMsg.Remark = k } else { - orderMsg.Remark = "抖音reason_code对应reason不足,需要更新.code:" + utils.Int2Str(refundOrder.ReasonCode) + orderMsg.Remark = "同意退货回调,抖音reason_code对应reason不足,需要更新.code:" + utils.Int2Str(refundOrder.ReasonCode) } if refundOrder.AftersaleId > 0 { orderMsg.VendorOrderID = utils.Int64ToStr(refundOrder.AftersaleId) @@ -279,7 +279,30 @@ func (c *PurchaseHandler) callbackAfsMsg2Status(msgId string, msg interface{}) ( if k, ok := ReasonCodeMap[refundOrder.ReasonCode]; ok { orderMsg.Remark = k } else { - orderMsg.Remark = "抖音reason_code对应reason不足,需要更新.code:" + utils.Int2Str(refundOrder.ReasonCode) + orderMsg.Remark = "同意退款回调,抖音reason_code对应reason不足,需要更新.code:" + utils.Int2Str(refundOrder.ReasonCode) + } + if refundOrder.AftersaleId > 0 { + orderMsg.VendorOrderID = utils.Int64ToStr(refundOrder.AftersaleId) + } else { + orderMsg.VendorOrderID = orderMsg.RefVendorOrderID + } + vendorOrgCode = refundOrder.ShopId + orderStatus = orderMsg + case tiktokShop.CallbackRefundClosedMsgTagId: // 取消售后 + refundOrder := msg.(tiktokShop.UserCancelRefundOrderData) + orderMsg := &model.OrderStatus{ + VendorID: model.VendorIDDD, + OrderType: model.OrderTypeAfsOrder, + RefVendorOrderID: utils.Int64ToStr(refundOrder.PId), + RefVendorID: model.VendorIDDD, + VendorStatus: fmt.Sprintf("%s:%s", "order", "cancel_refund_afsOrder"), + Status: c.GetAfsStatusFromVendorStatus(refundOrder.AftersaleType, tiktokShop.CallbackRefundClosedMsgTagId), + StatusTime: utils.Timestamp2Time(int64(refundOrder.CloseTime)), + } + if k, ok := ReasonCodeMap[refundOrder.ReasonCode]; ok { + orderMsg.Remark = k + } else { + orderMsg.Remark = "用户取消售后回调,抖音reason_code对应reason不足,需要更新.code:" + utils.Int2Str(refundOrder.ReasonCode) } if refundOrder.AftersaleId > 0 { orderMsg.VendorOrderID = utils.Int64ToStr(refundOrder.AftersaleId)