diff --git a/business/partner/purchase/tao_vegetable/order_afs.go b/business/partner/purchase/tao_vegetable/order_afs.go index bf76c07aa..fae22479e 100644 --- a/business/partner/purchase/tao_vegetable/order_afs.go +++ b/business/partner/purchase/tao_vegetable/order_afs.go @@ -287,62 +287,96 @@ func (c *PurchaseHandler) onAfsOrderMsg(status string, msg interface{}) (retVal case tao_vegetable.OrderStatusRefundSuccess: // 用户退款成功回调,缺货拣货时,送达回触发.此时并没有售后单 if scarceGoods != nil { - var afsOrder *model.AfsOrder refundSuccess := msg.(*tao_vegetable.RefundOrderFinish) - globals.SugarLogger.Debugf("================OrderStatusRefundSuccess : %s", utils.Format4Output(msg, false)) + var afsOrder *model.AfsOrder var api = getAPI("", 0, refundSuccess.StoreId) - - 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(), + var isCreate = true + var outMainRefundIds = make(map[string]int64, 0) + detail, err := api.QueryAfsOrderDetail(&request591.AlibabaWdkOrderRefundGetRequest{ + OrderFrom: utils.Int64ToPointer(tao_vegetable.ChannelCome), + ShopId: nil, + StoreId: utils.String2Pointer(refundSuccess.StoreId), + RefundIds: &[]int64{utils.Str2Int64(refundSuccess.BizSubRefundId)}, + }) + 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 + } + } + } } - 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) + // 本地已经存在了售后记录,直接修改售后状态,否则创建售后记录 + if !isCreate { + for afsOrderId, afsMoney := range outMainRefundIds { + afs, _ := partner.CurOrderManager.LoadAfsOrder(afsOrderId, model.VendorIDTaoVegetable) + afs.VendorOrderID2 = refundSuccess.BizSubRefundId + afs.AfsFinishedAt = time.Now() + afs.Status = model.AfsOrderStatusFinished + afs.AfsTotalShopMoney = afsMoney + 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) + } } - 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) - } } }