diff --git a/business/partner/purchase/ebai/order_afs.go b/business/partner/purchase/ebai/order_afs.go index d2b0e04e3..6b6a1ab03 100644 --- a/business/partner/purchase/ebai/order_afs.go +++ b/business/partner/purchase/ebai/order_afs.go @@ -291,61 +291,68 @@ func (c *PurchaseHandler) RefundOrder(ctx *jxcontext.Context, order *model.Goods // 发起部分退款 售后/售中 func (c *PurchaseHandler) PartRefundOrder(ctx *jxcontext.Context, order *model.GoodsOrder, refundSkuList []*model.OrderSku, reason string) (err error) { - if globals.EnableEbaiStoreWrite { - //获取afsOrder - var afsOrderInfo *model.AfsOrder - result, err := api.EbaiAPI.OrderPartRefundGet(order.VendorOrderID) - if err != nil { - return err + if order.Status < model.OrderStatusEndBegin { + return fmt.Errorf("订单处于未结束状态,请稍后重试") + } + + param := &ebaiapi.RefundOrderExamine{ + ReverseOrderId: "", + OrderId: "", + IdempotentId: utils.Int64ToStr(time.Now().UnixNano()), + ActionType: ebaiapi.RefundTypeAgree, + ReasonCode: "", + ReasonRemarks: reason, + } + date, err := api.EbaiAPI.GetReverseOrder(order.VendorOrderID) + if err != nil { + return err + } + if date == nil { + return fmt.Errorf("GetReverseOrder 饿百售后数据查询为空") + } + + refundProductList := make([]*ebaiapi.RefundProductList, 0, 0) + removerAll := false + for k, v := range date { + v2 := v.(map[string]interface{}) + refundProduct := &ebaiapi.RefundProductList{ + SubBizOrderId: v2["sub_biz_order_id"].(string), + PlatformSkuId: utils.Int64ToStr(utils.Interface2Int64WithDefault(v2["platform_sku_id"], 0)), } - afsOrderInfo = CurPurchaseHandler.AfsOrderDetail2Financial(result) + // 全退 + if k == model.NO && utils.MustInterface2Int64(v2["is_refund_all"]) == model.YES { + removerAll = true + } + switch utils.MustInterface2Int64(v2["fund_calculate_type"]) { + case 0: + refundProduct.Number = utils.Int64ToStr(utils.MustInterface2Int64(v2["refund_quantity"])) + case 1: + refundProduct.RefundAmount = utils.Int64ToStr(utils.MustInterface2Int64(v2["refund_user_amount"])) + } + refundProductList = append(refundProductList, refundProduct) + } + param.RefundProductList = refundProductList - //售后部分多次退款 - if order.Status > model.OrderStatusEndBegin { - param := &ebaiapi.RefundOrderExamine{ - ReverseOrderId: afsOrderInfo.AfsOrderID, - OrderId: afsOrderInfo.VendorOrderID, - IdempotentId: utils.Int64ToStr(time.Now().UnixNano()), - ActionType: ebaiapi.RefundTypeAgree, - ReasonCode: "", - ReasonRemarks: reason, - } - date, _ := api.EbaiAPI.GetReverseOrder(order.VendorOrderID) - refundProductList := make([]*ebaiapi.RefundProductList, 0, 0) - for _, v := range date { - v2 := v.(map[string]interface{}) - refundProduct := &ebaiapi.RefundProductList{ - SubBizOrderId: v2["sub_biz_order_id"].(string), - PlatformSkuId: utils.Int64ToStr(utils.Interface2Int64WithDefault(v2["platform_sku_id"], 0)), - } - switch utils.MustInterface2Int64(v2["fund_calculate_type"]) { - case 0: - refundProduct.Number = utils.Int64ToStr(utils.MustInterface2Int64(v2["refund_quantity"])) - case 1: - refundProduct.RefundAmount = utils.Int64ToStr(utils.MustInterface2Int64(v2["refund_user_amount"])) - } - refundProductList = append(refundProductList, refundProduct) - } - param.RefundProductList = refundProductList - err = api.EbaiAPI.OrderAgreePartRefund(param) - } else { - if reason == "" { - return fmt.Errorf("拒绝退单时,请填写拒单原因") - } + //售后部分多次退款 + if removerAll { + err = api.EbaiAPI.OrderAgreePartRefund(param) + } else { + if reason == "" { + return fmt.Errorf("拒绝退单时,请填写拒单原因") + } - //param := &ebaiapi.RefundOrderExamine{ - // ReverseOrderId: afsOrderInfo.AfsOrderID, - // OrderId: afsOrderInfo.VendorOrderID, - // IdempotentId: utils.Int64ToStr(time.Now().UnixNano()), - // ActionType: ebaiapi.RefundTypeRefuse, - // ReasonCode: "7001", - // ReasonRemarks: reason, - // RefundProductList: "", - //} - //err = api.EbaiAPI.OrderPartRefund(param) - if err := api.EbaiAPI.OrderPartRefund(order.VendorOrderID, orderSkus2AfsSkus(refundSkuList)); err != nil { - return err - } + //param := &ebaiapi.RefundOrderExamine{ + // ReverseOrderId: afsOrderInfo.AfsOrderID, + // OrderId: afsOrderInfo.VendorOrderID, + // IdempotentId: utils.Int64ToStr(time.Now().UnixNano()), + // ActionType: ebaiapi.RefundTypeRefuse, + // ReasonCode: "7001", + // ReasonRemarks: reason, + // RefundProductList: "", + //} + //err = api.EbaiAPI.OrderPartRefund(param) + if err := api.EbaiAPI.OrderPartRefund(order.VendorOrderID, orderSkus2AfsSkus(refundSkuList)); err != nil { + return err } } return err diff --git a/controllers/jx_order.go b/controllers/jx_order.go index fa97393f5..46b81a5a0 100644 --- a/controllers/jx_order.go +++ b/controllers/jx_order.go @@ -6,6 +6,7 @@ import ( "fmt" "git.rosy.net.cn/jx-callback/business/bidding" "git.rosy.net.cn/jx-callback/business/partner/delivery" + "git.rosy.net.cn/jx-callback/globals" "strings" "time" @@ -871,6 +872,7 @@ func (c *OrderController) PartRefundOrder() { order, err = partner.CurOrderManager.LoadOrder(params.VendorOrderID, params.VendorID) if err == nil { removedAll, err2 := fillSkuList(skuList, order.Skus) + globals.SugarLogger.Debugf("========removedAll := %v", removedAll) if err = err2; err == nil { if removedAll { err = defsch.FixedScheduler.RefundOrder(params.Ctx, order, params.Reason)