From feedfaa608221d79d6f74fea7bbc9e5a6dbd12ea Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=82=B9=E5=AE=97=E6=A5=A0?= Date: Mon, 31 Jul 2023 10:28:48 +0800 Subject: [PATCH] 1 --- .../purchase/tao_vegetable/order_afs.go | 241 +++++++++--------- 1 file changed, 114 insertions(+), 127 deletions(-) diff --git a/business/partner/purchase/tao_vegetable/order_afs.go b/business/partner/purchase/tao_vegetable/order_afs.go index b652f0c2c..0f9467874 100644 --- a/business/partner/purchase/tao_vegetable/order_afs.go +++ b/business/partner/purchase/tao_vegetable/order_afs.go @@ -224,67 +224,70 @@ func (c *PurchaseHandler) onAfsOrderMsg(status string, msg interface{}) (retVal return tao_vegetable.CallBackResultInfo(err) } - afsOrder = &model.AfsOrder{ - VendorID: model.VendorIDTaoVegetable, - AfsOrderID: onSaleMsg.PartCancelRequest.IdempotentId, - VendorOrderID: orderStatus.RefVendorOrderID, - VendorStoreID: onSaleMsg.PartCancelRequest.StoreId, - StoreID: 0, - AfsCreatedAt: orderStatus.StatusTime, - VendorAppealType: status, // 原始售后方式 - AppealType: model.AfsAppealTypeUserCancel, // 淘宝这个接口下发的只有用户取消 - VendorReasonType: tao_vegetable.OrderStatusOnSaleCancel, - ReasonType: 0, - ReasonDesc: "售中取消:订单未打包,或者长时间为送到!响应成功直接退款", - VendorOrgCode: api.GetVendorOrgCode(), - } - afsOrder.FreightUserMoney = 0 // 订单运费 - afsOrder.AfsFreightMoney = 0 // 暂时未发现退货取件费用 - afsOrder.BoxMoney = 0 // 餐盒费 - afsOrder.TongchengFreightMoney = 0 // 同城配送费 - afsOrder.SkuBoxMoney = 0 // 商品包装费 - afsOrder.VendorStatus = orderStatus.VendorStatus // 退货状态 + for _, v := range onSaleMsg.PartCancelRequest.SubOrders { + afsOrder = &model.AfsOrder{ + VendorID: model.VendorIDTaoVegetable, + AfsOrderID: utils.Int64ToStr(v.BizSubOrderId), + VendorOrderID: orderStatus.RefVendorOrderID, + VendorStoreID: onSaleMsg.PartCancelRequest.StoreId, + StoreID: 0, + AfsCreatedAt: orderStatus.StatusTime, + VendorAppealType: status, // 原始售后方式 + AppealType: model.AfsAppealTypeUserCancel, // 淘宝这个接口下发的只有用户取消 + VendorReasonType: tao_vegetable.OrderStatusOnSaleCancel, + ReasonType: 0, + ReasonDesc: "售中取消:订单未打包,或者长时间为送到!响应成功直接退款", + VendorOrgCode: api.GetVendorOrgCode(), + } + afsOrder.FreightUserMoney = 0 // 订单运费 + afsOrder.AfsFreightMoney = 0 // 暂时未发现退货取件费用 + afsOrder.BoxMoney = 0 // 餐盒费 + afsOrder.TongchengFreightMoney = 0 // 同城配送费 + afsOrder.SkuBoxMoney = 0 // 商品包装费 + afsOrder.VendorStatus = orderStatus.VendorStatus // 退货状态 - ifAfsTypeFullRefund := false - var refundFee int64 = 0 - for _, v := range *orderDetail.SubOrderResponseList { - for _, v2 := range onSaleMsg.PartCancelRequest.SubOrders { - if *v.BizSubOrderId == v2.BizSubOrderId { - orderSku := &model.OrderSkuFinancial{ - Count: utils.Float64TwoInt(*v.BuySaleQuantity), - VendorSkuID: *v.SkuCode, - SkuID: utils.Str2Int(*v.SkuCode), - Name: *v.SkuName, - UserMoney: *v.OriginalFee, - PmSkuSubsidyMoney: *v.DiscountPlatformFee, // 平台补贴商品 - VendorOrderID: orderStatus.VendorOrderID, - VendorSubOrderID: *v.OutSubOrderId, + ifAfsTypeFullRefund := false + var refundFee int64 = 0 + for _, v := range *orderDetail.SubOrderResponseList { + for _, v2 := range onSaleMsg.PartCancelRequest.SubOrders { + if *v.BizSubOrderId == v2.BizSubOrderId { + orderSku := &model.OrderSkuFinancial{ + Count: utils.Float64TwoInt(*v.BuySaleQuantity), + VendorSkuID: *v.SkuCode, + SkuID: utils.Str2Int(*v.SkuCode), + Name: *v.SkuName, + UserMoney: *v.OriginalFee, + PmSkuSubsidyMoney: *v.DiscountPlatformFee, // 平台补贴商品 + VendorOrderID: orderStatus.VendorOrderID, + VendorSubOrderID: *v.OutSubOrderId, + } + afsOrder.PmSkuSubsidyMoney += orderSku.PmSkuSubsidyMoney + afsOrder.Skus = append(afsOrder.Skus, orderSku) + refundFee += *v.OriginalFee } - afsOrder.PmSkuSubsidyMoney += orderSku.PmSkuSubsidyMoney - afsOrder.Skus = append(afsOrder.Skus, orderSku) - refundFee += *v.OriginalFee } } - } - if len(onSaleMsg.PartCancelRequest.SubOrders) == len(*orderDetail.SubOrderResponseList) { - ifAfsTypeFullRefund = true + if len(onSaleMsg.PartCancelRequest.SubOrders) == len(*orderDetail.SubOrderResponseList) { + ifAfsTypeFullRefund = true + } + + afsOrder.SkuUserMoney += refundFee + if ifAfsTypeFullRefund { // 全退 + afsOrder.RefundType = model.AfsTypeFullRefund + afsOrder.SkuUserMoney += *orderDetail.PostFee + afsOrder.Skus[len(afsOrder.Skus)-1].UserMoney += *orderDetail.PostFee + } else { + afsOrder.RefundType = model.AfsTypePartRefund + } + + if afsOrder != nil { + //直接就来一个新的售后单,并且还是售后完成的 + afsOrder.AfsFinishedAt = afsOrder.AfsCreatedAt + afsOrder.Flag = model.AfsOrderFlagAgreeUserRefund + err = partner.CurOrderManager.OnAfsOrderNew(afsOrder, orderStatus) + } } - afsOrder.SkuUserMoney += refundFee - if ifAfsTypeFullRefund { // 全退 - afsOrder.RefundType = model.AfsTypeFullRefund - afsOrder.SkuUserMoney += *orderDetail.PostFee - afsOrder.Skus[len(afsOrder.Skus)-1].UserMoney += *orderDetail.PostFee - } else { - afsOrder.RefundType = model.AfsTypePartRefund - } - - if afsOrder != nil { - //直接就来一个新的售后单,并且还是售后完成的 - afsOrder.AfsFinishedAt = afsOrder.AfsCreatedAt - afsOrder.Flag = model.AfsOrderFlagAgreeUserRefund - err = partner.CurOrderManager.OnAfsOrderNew(afsOrder, orderStatus) - } case tao_vegetable.OrderStatusRefundSuccess: globals.SugarLogger.Debugf("=========售后成功: %s", utils.Format4Output(msg, false)) // 用户退款成功回调,缺货拣货时,送达回触发.此时并没有售后单 @@ -292,8 +295,6 @@ func (c *PurchaseHandler) onAfsOrderMsg(status string, msg interface{}) (retVal refundSuccess := msg.(*tao_vegetable.RefundOrderFinish) var afsOrder *model.AfsOrder var api = getAPI("", 0, refundSuccess.StoreId) - var isCreate = true - var outMainRefundIds = make(map[string]int64, 0) detail, err := api.QueryAfsOrderDetail(&request591.AlibabaWdkOrderRefundGetRequest{ OrderFrom: utils.Int64ToPointer(tao_vegetable.ChannelCome), ShopId: nil, @@ -303,84 +304,70 @@ func (c *PurchaseHandler) onAfsOrderMsg(status string, msg interface{}) (retVal if err != nil { return tao_vegetable.CallBackResultInfo(err) } - finalList, _ := dao.GetOrderRefundSkuList(db, []string{refundSuccess.OutMainRefundId}) - if len(finalList) != model.NO { - for _, f := range finalList { - for _, a := range *detail.Orders { - if f.SkuID == utils.Str2Int(*a.ItemCode) { - isCreate = false // 本地已经存在了记录 - outMainRefundIds[*a.OutMainRefundId] = *a.RefundAmount + + for _, v := range *detail.Orders { + afs, _ := partner.CurOrderManager.LoadAfsOrder(utils.Int64ToStr(*v.OriginOrderId), model.VendorIDTaoVegetable) + if afs != nil { + afsOrder = &model.AfsOrder{ + VendorID: model.VendorIDTaoVegetable, + AfsOrderID: utils.Int64ToStr(*v.OriginOrderId), + VendorOrderID: orderStatus.RefVendorOrderID, + VendorOrderID2: refundSuccess.BizSubRefundId, + VendorStoreID: refundSuccess.StoreId, + StoreID: 0, + AfsCreatedAt: orderStatus.StatusTime, + VendorAppealType: status, // 原始售后方式 + AppealType: model.AfsAppealTypeUserCancel, // 淘宝这个接口下发的只有用户取消 + VendorReasonType: tao_vegetable.OrderStatusOnSaleCancel, + ReasonType: 0, + ReasonDesc: "缺货调整,退款成功通知", + VendorOrgCode: api.GetVendorOrgCode(), + } + afsOrder.FreightUserMoney = 0 // 订单运费 + afsOrder.AfsFreightMoney = 0 // 暂时未发现退货取件费用 + afsOrder.BoxMoney = 0 // 餐盒费 + afsOrder.TongchengFreightMoney = 0 // 同城配送费 + afsOrder.SkuBoxMoney = 0 // 商品包装费 + afsOrder.VendorStatus = orderStatus.VendorStatus // 退货状态 + + for _, v := range *scarceGoods { + var refundFee int64 = 0 + skuDetail := tao_vegetable.GoodsScarceRefund{} + if err := json.Unmarshal([]byte(*v.Attributes), &skuDetail); err != nil { + return tao_vegetable.CallBackResultInfo(err) + } + + orderSku := &model.OrderSkuFinancial{ + Count: utils.Float64TwoInt(utils.Str2Float64(*v.RefundQuantity)), + VendorSkuID: *v.SkuCode, + SkuID: utils.Str2Int(*v.SkuCode), + Name: skuDetail.SkuName, + UserMoney: *v.RefundAmount, + PmSkuSubsidyMoney: 0, // 平台补贴商品 + VendorOrderID: orderStatus.VendorOrderID, + VendorSubOrderID: *v.OutOrderId, + } + afsOrder.PmSkuSubsidyMoney += orderSku.PmSkuSubsidyMoney + afsOrder.Skus = append(afsOrder.Skus, orderSku) + refundFee += *v.RefundAmount + + afsOrder.SkuUserMoney += refundFee + afsOrder.RefundType = model.AfsTypePartRefund + if afsOrder != nil { + //直接就来一个新的售后单,并且还是售后完成的 + afsOrder.AfsFinishedAt = afsOrder.AfsCreatedAt + afsOrder.Flag = model.AfsOrderFlagAgreeUserRefund + err = partner.CurOrderManager.OnAfsOrderNew(afsOrder, orderStatus) } } - } - } - - // 本地已经存在了售后记录,直接修改售后状态,否则创建售后记录 - if !isCreate { - for afsOrderId, afsMoney := range outMainRefundIds { - afs, _ := partner.CurOrderManager.LoadAfsOrder(afsOrderId, model.VendorIDTaoVegetable) + } else { afs.VendorOrderID2 = refundSuccess.BizSubRefundId afs.AfsFinishedAt = time.Now() afs.Status = model.AfsOrderStatusFinished - afs.AfsTotalShopMoney = afsMoney + afs.AfsTotalShopMoney = *v.RefundAmount dao.UpdateEntity(db, afs, "VendorOrderID2", "AfsFinishedAt", "Status", "AfsTotalShopMoney") } - } else { - afsOrder = &model.AfsOrder{ - VendorID: model.VendorIDTaoVegetable, - AfsOrderID: refundSuccess.OutMainRefundId, - VendorOrderID: orderStatus.RefVendorOrderID, - VendorOrderID2: refundSuccess.BizSubRefundId, - VendorStoreID: refundSuccess.StoreId, - StoreID: 0, - AfsCreatedAt: orderStatus.StatusTime, - VendorAppealType: status, // 原始售后方式 - AppealType: model.AfsAppealTypeUserCancel, // 淘宝这个接口下发的只有用户取消 - VendorReasonType: tao_vegetable.OrderStatusOnSaleCancel, - ReasonType: 0, - ReasonDesc: "缺货调整,退款成功通知", - VendorOrgCode: api.GetVendorOrgCode(), - } - afsOrder.FreightUserMoney = 0 // 订单运费 - afsOrder.AfsFreightMoney = 0 // 暂时未发现退货取件费用 - afsOrder.BoxMoney = 0 // 餐盒费 - afsOrder.TongchengFreightMoney = 0 // 同城配送费 - afsOrder.SkuBoxMoney = 0 // 商品包装费 - afsOrder.VendorStatus = orderStatus.VendorStatus // 退货状态 - - for _, v := range *scarceGoods { - var refundFee int64 = 0 - skuDetail := tao_vegetable.GoodsScarceRefund{} - if err := json.Unmarshal([]byte(*v.Attributes), &skuDetail); err != nil { - return tao_vegetable.CallBackResultInfo(err) - } - - orderSku := &model.OrderSkuFinancial{ - Count: utils.Float64TwoInt(utils.Str2Float64(*v.RefundQuantity)), - VendorSkuID: *v.SkuCode, - SkuID: utils.Str2Int(*v.SkuCode), - Name: skuDetail.SkuName, - UserMoney: *v.RefundAmount, - PmSkuSubsidyMoney: 0, // 平台补贴商品 - VendorOrderID: orderStatus.VendorOrderID, - VendorSubOrderID: *v.OutOrderId, - } - afsOrder.PmSkuSubsidyMoney += orderSku.PmSkuSubsidyMoney - afsOrder.Skus = append(afsOrder.Skus, orderSku) - refundFee += *v.RefundAmount - - afsOrder.SkuUserMoney += refundFee - afsOrder.RefundType = model.AfsTypePartRefund - if afsOrder != nil { - //直接就来一个新的售后单,并且还是售后完成的 - afsOrder.AfsFinishedAt = afsOrder.AfsCreatedAt - afsOrder.Flag = model.AfsOrderFlagAgreeUserRefund - err = partner.CurOrderManager.OnAfsOrderNew(afsOrder, orderStatus) - } - } - } - } default: