From a4389e883fd008709c2ea300a04a91e447822159 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=82=B9=E5=AE=97=E6=A5=A0?= Date: Fri, 25 Aug 2023 16:12:40 +0800 Subject: [PATCH] 1 --- platformapi/ebaiapi/order.go | 117 +++++++++++++------- platformapi/ebaiapi/order_test.go | 11 ++ platformapi/tao_vegetable/store_sku_test.go | 52 ++++++--- 3 files changed, 126 insertions(+), 54 deletions(-) diff --git a/platformapi/ebaiapi/order.go b/platformapi/ebaiapi/order.go index f5d202ba..615f6bd2 100644 --- a/platformapi/ebaiapi/order.go +++ b/platformapi/ebaiapi/order.go @@ -31,6 +31,13 @@ const ( OrderStatusRefund = "15" // 订单退款,这个是售后之后的事件,不应该当成正常订单事件处理 ) +const ( + RefundTypeAgree = "1" // 同意全单/部分退款申请 + RefundTypeRefuse = "2" // 拒绝全单/部分退款申请 + RefundTypeAgreeGoods = "3" // 同意退货申请 + RefundTypeRefuseGoods = "4" // 拒绝退货申请 +) + const ( WaybillStatusEvent = "1" // 一般事件 WaybillStatusNew = "2" // 生成运单 @@ -560,14 +567,6 @@ func (a *API) OrderPartRefundGet(orderID string) (orderMap map[string]interface{ return nil, err } -// func (a *API) OrderPartRefundGet2(orderID string) (partRefundInfo *CBPartRefundInfo, err error) { -// result, err := a.OrderPartRefundGet(orderID) -// if err == nil { -// err = utils.Map2StructByJson(result, &partRefundInfo, true) -// } -// return partRefundInfo, err -// } - func (a *API) SmartOrderIdConvert(orderID string) (convertedOrderID string, err error) { return a.OrderIdConvert(orderID, isOrderIDEleme(orderID)) } @@ -576,23 +575,27 @@ func isOrderIDEleme(orderID string) bool { return len(orderID) == len("3026328756122155111") } -func (a *API) OrderAgreeRefund(orderID string) (err error) { - _, err = a.AccessAPI("order.agreerefund", map[string]interface{}{ - "order_id": orderID, - }) - return err +func (a *API) OrderAgreeRefund(param *RefundOrderExamine) (err error) { + return a.EbaiRefundOrder(param) + //_, err = a.AccessAPI("order.agreerefund", map[string]interface{}{ + // "order_id": orderID, + //}) + //return err } -func (a *API) OrderDisagreeRefund(orderID, refuseReason string) (err error) { - _, err = a.AccessAPI("order.disagreerefund", map[string]interface{}{ - "order_id": orderID, - "refuse_reason": refuseReason, - }) - return err +func (a *API) OrderDisagreeRefund(param *RefundOrderExamine) (err error) { + return a.EbaiRefundOrder(param) + //_, err = a.AccessAPI("order.disagreerefund", map[string]interface{}{ + // "order_id": orderID, + // "refuse_reason": refuseReason, + //}) + //return err } //售后 同意用户多次部分取消 func (a *API) OrderPartRefund(orderID string, removeSkuList []*RefundSku) (err error) { + //return a.EbaiRefundOrder(param) + _, err = a.AccessAPI("order.manyTimesPartrefund", map[string]interface{}{ "order_id": orderID, "products": removeSkuList, @@ -601,34 +604,38 @@ func (a *API) OrderPartRefund(orderID string, removeSkuList []*RefundSku) (err e } //售后 同意用户多次部分取消 -func (a *API) OrderAgreePartRefund(orderID string, removeSkuList []*RefundSku, refundID string) (err error) { - _, err = a.AccessAPI("order.agreepartrefund", map[string]interface{}{ - "order_id": orderID, - "products": removeSkuList, - "refund_id": refundID, - }) - return err +func (a *API) OrderAgreePartRefund(param *RefundOrderExamine) (err error) { + return a.EbaiRefundOrder(param) + + //_, err = a.AccessAPI("order.agreepartrefund", map[string]interface{}{ + // "order_id": orderID, + // "products": removeSkuList, + // "refund_id": refundID, + //}) + //return err } //售后 同意退货退款 -func (a *API) OrderAgreeReturnGoods(orderID, refundOrderID string) (err error) { - _, err = a.AccessAPI("order.agreereturngoods", map[string]interface{}{ - "order_id": orderID, - "refund_order_id": refundOrderID, - }) - return err +func (a *API) OrderAgreeReturnGoods(param *RefundOrderExamine) (err error) { + return a.EbaiRefundOrder(param) + //_, err = a.AccessAPI("order.agreereturngoods", map[string]interface{}{ + // "order_id": orderID, + // "refund_order_id": refundOrderID, + //}) + //return err } //售后 拒绝退货退款 -func (a *API) OrderDisagreeReturnGoods(orderID, refundOrderID, reason string) (err error) { - data, err := a.AccessAPI("order.disagreereturngoods", map[string]interface{}{ - "order_id": orderID, - "refund_order_id": refundOrderID, - "refuse_code": "5", - "refuse_reason": reason, - }) - fmt.Println(data) - return err +func (a *API) OrderDisagreeReturnGoods(param *RefundOrderExamine) (err error) { + return a.EbaiRefundOrder(param) + //data, err := a.AccessAPI("order.disagreereturngoods", map[string]interface{}{ + // "order_id": orderID, + // "refund_order_id": refundOrderID, + // "refuse_code": "5", + // "refuse_reason": reason, + //}) + //fmt.Println(data) + //return err } func (a *API) OrderCheckout(orderID, pickUpCode string) (err error) { @@ -645,3 +652,31 @@ func (a *API) OrderQueryAcceptancecode(orderID string) (err error) { }) return err } + +// EbaiRefundOrder 同意退款V2.0 上面的舍弃使用2.0 +func (a *API) EbaiRefundOrder(param *RefundOrderExamine) error { + if (param.ActionType == RefundTypeRefuse || param.ActionType == RefundTypeRefuseGoods) && param.ReasonCode == "" { + param.ReasonCode = "7001" + } + + _, err := a.AccessAPI("order.reverse.process", utils.Struct2MapByJson(param)) + return err +} + +// RefundOrderExamine 商家审核是售后单 +type RefundOrderExamine struct { + ReverseOrderId string `json:"reverse_order_id" required:"true"` // 逆向单ID + OrderId string `json:"order_id" required:"true"` // 订单id + IdempotentId string `json:"idempotent_id" required:"true"` // 请求唯一标示 + ActionType string `json:"action_type" required:"true"` // 逆向单审批操作类型,枚举值:【1-同意全单/部分退款申请 、 2-拒绝全单/部分退款申请、 3-同意退货申请 、 4-拒绝退货申请】 + ReasonCode string `json:"reason_code" required:"false"` // 当拒绝场景必填,即action_type = 2 or action_type =4 时 必填,枚举值: 7019-双方协商一致不再取消订单、 7020-商品已经备货完成、 7021-商品已送出、 7802-商品发出时完好、 7803-用户未举证/举证无效、 7804-商品影响二次销售、 7805-商品不符合7天无理由退款、 7302-未收到退货(仅退货单支持传入该code)、 7001-其他原因 + ReasonRemarks string `json:"reason_remarks" required:"false"` // 原因备注说明信息 + RefundProductList string `json:"refund_product_list" required:"false"` // 订单id +} + +type RefundProductList struct { + SubBizOrderId string `json:"sub_biz_order_id" required:"false"` // 商品子单ID + PlatformSkuId string `json:"platform_sku_id" required:"false"` // 平台商品ID + Number string `json:"number"` + RefundAmount string `json:"refund_amount"` +} diff --git a/platformapi/ebaiapi/order_test.go b/platformapi/ebaiapi/order_test.go index afa5ac7a..6f8a57d4 100644 --- a/platformapi/ebaiapi/order_test.go +++ b/platformapi/ebaiapi/order_test.go @@ -2,6 +2,7 @@ package ebaiapi import ( "fmt" + "git.rosy.net.cn/jx-callback/globals" "testing" "git.rosy.net.cn/baseapi/utils" @@ -21,6 +22,16 @@ func TestOrderGet(t *testing.T) { } } +func TestOrderAgreePartRefund(t *testing.T) { + data := make([]*RefundSku, 0, 0) + data = append(data, &RefundSku{ + SkuID: "22891", + Number: "1", + }) + err := api.OrderAgreePartRefund("4045250124015619672", data, "2308258682813174525") + globals.SugarLogger.Debugf("err := %s", utils.Format4Output(err, false)) +} + func TestOrderGet2(t *testing.T) { result, err := api.OrderGet2("2147234624018417846") if err != nil { diff --git a/platformapi/tao_vegetable/store_sku_test.go b/platformapi/tao_vegetable/store_sku_test.go index aebcf6fb..7cebb7e9 100644 --- a/platformapi/tao_vegetable/store_sku_test.go +++ b/platformapi/tao_vegetable/store_sku_test.go @@ -112,21 +112,47 @@ func TestAddStoreSku(t *testing.T) { globals.SugarLogger.Debugf("err = %s", utils.Format4Output(err, false)) } +var skucodeMap = []string{ + "JX100829:25278", +} + func TestUpdateSku(t *testing.T) { - param := &request585.AlibabaWdkSkuUpdateRequest{} - updateSkuList := make([]domain585.AlibabaWdkSkuUpdateSkuDo, 0, 0) - updateSku := domain585.AlibabaWdkSkuUpdateSkuDo{ - OuCode: utils.String2Pointer("JX101870"), - SkuCode: utils.String2Pointer("6045426"), - CleanSkuMemberPrice: utils.Int64ToPointer(1), - AllowAppSale: utils.Int64ToPointer(1), - OnlineSaleFlag: utils.Int64ToPointer(1), + data2 := make([]string, 0, 0) + for _, v := range skucodeMap { + storeCodeAndSkuCode := strings.Split(v, ":") + skuCode := []string{storeCodeAndSkuCode[1]} + storeCode1 := utils.String2Pointer(storeCodeAndSkuCode[0]) + result, err := apiTao.QueryStoreSKu(&request585.AlibabaWdkSkuQueryRequest{Param: &domain585.AlibabaWdkSkuQuerySkuQueryDo{ + OuCode: storeCode1, + SkuCodes: &skuCode, + }}) + if err != nil { + data2 = append(data2, v) + continue + } + + storeCode := *result + if len(storeCode) > 0 && utils.Str2Float64WithDefault(*storeCode[0].Model.SalePrice, 0) < 5 { + param := &request585.AlibabaWdkSkuUpdateRequest{} + updateSkuList := make([]domain585.AlibabaWdkSkuUpdateSkuDo, 0, 0) + updateSku := domain585.AlibabaWdkSkuUpdateSkuDo{ + OuCode: storeCode1, + SkuCode: utils.String2Pointer(skuCode[0]), + SkuPrice: utils.String2Pointer(utils.Float64ToStr(utils.Str2Float64WithDefault(*storeCode[0].Model.SalePrice, 0) + 2)), // 优先使用skuPrice 靠后SalePrice + } + updateSkuList = append(updateSkuList, updateSku) + param.ParamList = &updateSkuList + _, err := apiTao.UpdateStoreSku(param) + if err != nil { + data2 = append(data2, v) + continue + } + } + } - updateSkuList = append(updateSkuList, updateSku) - param.ParamList = &updateSkuList - data, err := apiTao.UpdateStoreSku(param) - globals.SugarLogger.Debugf("data = %s", utils.Format4Output(data, false)) - globals.SugarLogger.Debugf("err = %s", utils.Format4Output(err, false)) + + globals.SugarLogger.Debugf("data2 :============ %s", utils.Format4Output(data2, false)) + } // 商品上下架