diff --git a/business/partner/purchase/tao_vegetable/order.go b/business/partner/purchase/tao_vegetable/order.go index 0c8bc9c2b..d89a62b91 100644 --- a/business/partner/purchase/tao_vegetable/order.go +++ b/business/partner/purchase/tao_vegetable/order.go @@ -641,26 +641,42 @@ func (c *PurchaseHandler) AgreeOrRefuseCancel(ctx *jxcontext.Context, order *mod // CancelOrder 商户取消订单(取消订单全部商品) func (c *PurchaseHandler) CancelOrder(ctx *jxcontext.Context, order *model.GoodsOrder, reason string) (err error) { api := getAPI(order.VendorOrgCode, jxutils.GetSaleStoreIDFromOrder(order), "") + localSkuList, _ := dao.GetSimpleOrderSkus(dao.GetDB(), order.VendorOrderID, nil) + skuMap := make(map[string]*model.OrderSku, 0) + for _, v := range localSkuList { + skuMap[v.VendorSubOrderID] = v + } orderSkuList, err := getOrderCancelList(api, order) if err != nil { return err } - outSubOrderIds := make([]string, 0, len(*orderSkuList.OutSubOrders)) + outSubOrderIds := make([]domain3156.AlibabaTclsAelophyRefundCsapplyNewCsApplySubOrderDTO, 0, len(*orderSkuList.OutSubOrders)) for _, v := range *orderSkuList.OutSubOrders { if *v.CanReverse { - outSubOrderIds = append(outSubOrderIds, *v.OutSubOrderId) + subOrder := domain3156.AlibabaTclsAelophyRefundCsapplyNewCsApplySubOrderDTO{ + RefundFee: utils.String2Pointer(utils.Int64ToStr(*v.MaxRefundFee)), + RefundAmount: nil, + OutSubOrderId: v.OutSubOrderId, + } + if skuMap[*v.OutSubOrderId] != nil { + subOrder.RefundAmount = utils.String2Pointer(utils.Int2Str(skuMap[*v.OutSubOrderId].Count)) + } else { + continue + } + outSubOrderIds = append(outSubOrderIds, subOrder) } } reasonId := *orderSkuList.ReasonList - param := &request3156.AlibabaTclsAelophyRefundCsapplyRequest{ - RefundCsApplyDTO: &domain3156.AlibabaTclsAelophyRefundCsapplyRefundCsApplyDto{ - ReasonId: reasonId[0].ReasonId, - OutOrderId: utils.String2Pointer(order.VendorOrderID2), - StoreId: utils.String2Pointer(order.VendorStoreID), - RequestId: utils.String2Pointer(fmt.Sprintf("%s%d", order.VendorStoreID, time.Now().UnixNano())), - OutSubOrderIds: &outSubOrderIds, - Memo: utils.String2Pointer(reason), + param := &request3156.AlibabaTclsAelophyRefundCsapplyNewRequest{ + RefundCsApplyDTO: &domain3156.AlibabaTclsAelophyRefundCsapplyNewRefundCsApplyNewDTO{ + ReasonId: reasonId[0].ReasonId, + OutOrderId: utils.String2Pointer(order.VendorOrderID2), + StoreId: utils.String2Pointer(order.VendorStoreID), + RequestId: utils.String2Pointer(fmt.Sprintf("%s%d", order.VendorStoreID, time.Now().UnixNano())), + Memo: utils.String2Pointer(reason), + SubRefundOrders: &outSubOrderIds, + RefundReason: utils.String2Pointer(reason), }, } @@ -668,15 +684,16 @@ func (c *PurchaseHandler) CancelOrder(ctx *jxcontext.Context, order *model.Goods c.postFakeMsg(order.VendorOrderID, tao_vegetable.OrderStatusMerchantCancel, tao_vegetable.OrderStatusMerchantCancel) } - // 发送取消状态,商户取消 - err = api.DeliveryFinish(&request591.AlibabaAelophyOrderWorkCallbackRequest{ - WorkCallbackRequest: &domain591.AlibabaAelophyOrderWorkCallbackWorkCallbackRequest{ - StoreId: utils.String2Pointer(order.VendorStoreID), - BizOrderId: utils.Int64ToPointer(utils.Str2Int64(order.VendorOrderID)), - Status: utils.String2Pointer(tao_vegetable.OrderStatusMerchantCancel), - }, - }) - + if order.Status < model.OrderStatusEndBegin { + // 发送取消状态,商户取消 + err = api.DeliveryFinish(&request591.AlibabaAelophyOrderWorkCallbackRequest{ + WorkCallbackRequest: &domain591.AlibabaAelophyOrderWorkCallbackWorkCallbackRequest{ + StoreId: utils.String2Pointer(order.VendorStoreID), + BizOrderId: utils.Int64ToPointer(utils.Str2Int64(order.VendorOrderID)), + Status: utils.String2Pointer(tao_vegetable.OrderStatusMerchantCancel), + }, + }) + } return err } diff --git a/business/partner/purchase/tao_vegetable/order_afs.go b/business/partner/purchase/tao_vegetable/order_afs.go index 441e9e9af..28d30c2de 100644 --- a/business/partner/purchase/tao_vegetable/order_afs.go +++ b/business/partner/purchase/tao_vegetable/order_afs.go @@ -429,26 +429,28 @@ func (c *PurchaseHandler) callbackAfsMsg2Status(status string, msg interface{}) orderStatus.Remark = fmt.Sprintf("QueryTaoAfsOrderId:%s", refundData.BizSubRefundId) orderStatus.VendorOrderID = refundData.OutMainRefundId } else { - param := &request591.AlibabaWdkOrderRefundGetRequest{ - OrderFrom: utils.Int64ToPointer(utils.Str2Int64(tao_vegetable.TaoVegetableChannelCode)), - ShopId: nil, - StoreId: utils.String2Pointer(refundData.StoreId), - RefundIds: &[]int64{utils.Str2Int64(refundData.BizSubRefundId)}, - } - time.Sleep(time.Second * 1) - refundAfs, _ := getAPI("", 0, refundData.StoreId).QueryAfsOrderDetail(param) - if refundAfs.Orders == nil { - globals.SugarLogger.Debugf("================售中退款成功回调查询售后单为空:") - } else { - orders := *refundAfs.Orders - orderStatus.RefVendorOrderID = utils.Int64ToStr(*orders[0].OriginParentId) - orderStatus.VendorStatus = fmt.Sprintf("%s:%s", tao_vegetable.OrderStatusRefundSuccess, "用户售中退款成功") - orderStatus.Status = c.GetAfsStatusFromVendorStatus(tao_vegetable.OrderStatusRefundSuccess) - orderStatus.StatusTime = time.Now() - orderStatus.Remark = fmt.Sprintf("QueryTaoAfsOrderId:%s", refundData.BizSubRefundId) - orderStatus.VendorOrderID = utils.Int64ToStr(*orders[0].RefundOrderId) - taoRefundList = refundAfs.Orders + var refundAfs *domain591.AlibabaWdkOrderRefundGetOrderSyncRefundListResult + for i := 0; i < 4; i++ { + param := &request591.AlibabaWdkOrderRefundGetRequest{ + OrderFrom: utils.Int64ToPointer(utils.Str2Int64(tao_vegetable.TaoVegetableChannelCode)), + ShopId: nil, + StoreId: utils.String2Pointer(refundData.StoreId), + RefundIds: &[]int64{utils.Str2Int64(refundData.BizSubRefundId)}, + } + refundAfs, _ = getAPI("", 0, refundData.StoreId).QueryAfsOrderDetail(param) + if refundAfs.Orders != nil { + break + } + time.Sleep(time.Second * 1) } + orders := *refundAfs.Orders + orderStatus.RefVendorOrderID = utils.Int64ToStr(*orders[0].OriginParentId) + orderStatus.VendorStatus = fmt.Sprintf("%s:%s", tao_vegetable.OrderStatusRefundSuccess, "用户售中退款成功") + orderStatus.Status = c.GetAfsStatusFromVendorStatus(tao_vegetable.OrderStatusRefundSuccess) + orderStatus.StatusTime = time.Now() + orderStatus.Remark = fmt.Sprintf("QueryTaoAfsOrderId:%s", refundData.BizSubRefundId) + orderStatus.VendorOrderID = utils.Int64ToStr(*orders[0].RefundOrderId) + taoRefundList = refundAfs.Orders } }