diff --git a/business/partner/purchase/tao_vegetable/order_afs.go b/business/partner/purchase/tao_vegetable/order_afs.go index 6536f25c0..ca69be2a0 100644 --- a/business/partner/purchase/tao_vegetable/order_afs.go +++ b/business/partner/purchase/tao_vegetable/order_afs.go @@ -30,7 +30,7 @@ var ( func (c *PurchaseHandler) isAfsMsg(orderStatus string, orderId string) bool { if orderStatus == tao_vegetable.OrderStatusApplyAfs || orderStatus == tao_vegetable.OrderStatusCancelAfs || orderStatus == tao_vegetable.OrderStatusRefundSuccess { switch orderStatus { - case tao_vegetable.OrderStatusApplyAfs, tao_vegetable.OrderStatusCancelAfs: + case tao_vegetable.OrderStatusApplyAfs, tao_vegetable.OrderStatusCancelAfs, tao_vegetable.OrderStatusOnSaleCancel: order, _ := partner.CurOrderManager.LoadOrder2(orderId, model.VendorIDTaoVegetable) if order != nil { return true @@ -75,6 +75,30 @@ func (c *PurchaseHandler) onAfsOrderMsg(status string, msg interface{}) (retVal var afsOrder *model.AfsOrder var api = getAPI("", 0, refundData.StoreId) + // 订单商品详细信息 + queryOrderDetailParam := &request591.AlibabaAelophyOrderGetRequest{OrderGetRequest: &domain591.AlibabaAelophyOrderGetOrderGetRequest{ + StoreId: utils.String2Pointer(refundData.StoreId), + }} + order, err := partner.CurOrderManager.LoadOrder2(refundData.OutOrderId, model.VendorIDTaoVegetable) + if err != nil { + globals.SugarLogger.Debugf("用户申请售后时,通过售后外部渠道订单号获取主订单失败:%s", err.Error()) + return tao_vegetable.CallBackResultInfo(err) + } + if order == nil { + globals.SugarLogger.Debugf("数据库订单查询失败,订单号异常 :%s", refundData.OutOrderId) + return tao_vegetable.CallBackResultInfo(errors.New("订单号异常")) + } + queryOrderDetailParam.OrderGetRequest.BizOrderId = utils.Int64ToPointer(utils.Str2Int64(order.VendorOrderID)) + skuList, err := api.QueryOrderDetail(queryOrderDetailParam) + if err != nil { + return tao_vegetable.CallBackResultInfo(err) + } + if *skuList.OrderStatus != tao_vegetable.OrderStatusSuccess { + // 用户申请售后,只有订单完成之后才可以!现在是售中取消和售后取消都在走这个接口 + // 所以只处理售后取消的消息 + return tao_vegetable.CallBackResultInfo(nil) + } + afsOrder = &model.AfsOrder{ VendorID: model.VendorIDTaoVegetable, AfsOrderID: orderStatus.VendorOrderID, @@ -99,19 +123,6 @@ func (c *PurchaseHandler) onAfsOrderMsg(status string, msg interface{}) (retVal } refundIds = append(refundIds, utils.Str2Int64(refundData.BizRefundId)) - //taoAfsOrderDetail, err := getAPI(refundData.MerchantCode, 0, "").QueryAfsOrderDetail(&request591.AlibabaWdkOrderRefundGetRequest{ - // BizOrderIds: &bizOrderIds, - // RefundIds: &refundIds, - // OrderFrom: nil, - // ShopId: nil, - // StoreId: &refundData.StoreId, - //}) - //if err != nil { - // return tao_vegetable.CallBackResultInfo(err) - //} - // - //taoAfsOrder := *taoAfsOrderDetail.Orders - afsOrder.FreightUserMoney = 0 // 订单运费 afsOrder.AfsFreightMoney = 0 // 暂时未发现退货取件费用 afsOrder.BoxMoney = 0 // 餐盒费 @@ -119,25 +130,6 @@ func (c *PurchaseHandler) onAfsOrderMsg(status string, msg interface{}) (retVal afsOrder.SkuBoxMoney = 0 // 商品包装费 afsOrder.VendorStatus = orderStatus.VendorStatus // 退货状态 - // 订单商品详细信息 - queryOrderDetailParam := &request591.AlibabaAelophyOrderGetRequest{OrderGetRequest: &domain591.AlibabaAelophyOrderGetOrderGetRequest{ - StoreId: utils.String2Pointer(refundData.StoreId), - }} - order, err := partner.CurOrderManager.LoadOrder2(refundData.OutOrderId, model.VendorIDTaoVegetable) - if err != nil { - globals.SugarLogger.Debugf("用户申请售后时,通过售后外部渠道订单号获取主订单失败:%s", err.Error()) - return tao_vegetable.CallBackResultInfo(err) - } - if order == nil { - globals.SugarLogger.Debugf("数据库订单查询失败,订单号异常 :%s", refundData.OutOrderId) - return tao_vegetable.CallBackResultInfo(errors.New("订单号异常")) - } - queryOrderDetailParam.OrderGetRequest.BizOrderId = utils.Int64ToPointer(utils.Str2Int64(order.VendorOrderID)) - skuList, err := api.QueryOrderDetail(queryOrderDetailParam) - if err != nil { - return tao_vegetable.CallBackResultInfo(err) - } - var refundSkuCount int64 = 0 // 子订单申请退款的商品数 var orderSkuCount int64 = 0 // 子订单购买的商品数 for _, refundSku := range refundData.SubRefundOrders { // 本次退款订单 @@ -154,14 +146,6 @@ func (c *PurchaseHandler) onAfsOrderMsg(status string, msg interface{}) (retVal VendorOrderID: orderStatus.VendorOrderID, VendorSubOrderID: *sku.OutSubOrderId, } - // 交易成功,商户取消,配送中,配送结束时!订单不退换运费 - //switch *sku.OrderStatus { - //case tao_vegetable.OrderStatusSuccess, tao_vegetable.OrderStatusMerchantCancel, tao_vegetable.OrderStatusDelivery, tao_vegetable.OrderStatusDeliveryOver: - // orderSku.UserMoney = refundSku.RefundFee - //default: - // orderSku.UserMoney = refundSku.MaxRefundFee - //} - afsOrder.PmSkuSubsidyMoney += orderSku.PmSkuSubsidyMoney afsOrder.Skus = append(afsOrder.Skus, orderSku) orderSkuCount += utils.Float64TwoInt64(*sku.BuySaleQuantity) @@ -224,6 +208,85 @@ func (c *PurchaseHandler) onAfsOrderMsg(status string, msg interface{}) (retVal } } + // 业务上规定的是打包之后不能取消,但是如果配送超过了预计送达时间1-2小时, + // c端的取消按钮会自动打开,让用户操作取消,但是如果你没接这个接口,用户申请取消了, + // 你这边没有响应那么就不会退钱给用户,就会造成客诉。为什么不接售中取消呢 + if status == tao_vegetable.OrderStatusOnSaleCancel { + onSaleMsg := msg.(*tao_vegetable.OnSaleCancel) + var afsOrder *model.AfsOrder + var api = getAPI("", 0, onSaleMsg.PartCancelRequest.StoreId) + queryOrderDetailParam := &request591.AlibabaAelophyOrderGetRequest{OrderGetRequest: &domain591.AlibabaAelophyOrderGetOrderGetRequest{ + StoreId: utils.String2Pointer(onSaleMsg.PartCancelRequest.StoreId), + BizOrderId: utils.Int64ToPointer(onSaleMsg.PartCancelRequest.BizOrderId), + }} + orderDetail, err := api.QueryOrderDetail(queryOrderDetailParam) + if err != nil { + return tao_vegetable.CallBackResultInfo(err) + } + + afsOrder = &model.AfsOrder{ + VendorID: model.VendorIDTaoVegetable, + AfsOrderID: orderStatus.VendorOrderID, + 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 { + // 子订单被取消 + if *v.OrderStatus == tao_vegetable.OrderStatusRefundClose { + 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 + } else { + 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 { + //直接就来一个新的售后单,并且还是售后完成的 + if orderStatus.Status == model.AfsOrderStatusFinished { + afsOrder.AfsFinishedAt = afsOrder.AfsCreatedAt + } + err = partner.CurOrderManager.OnAfsOrderNew(afsOrder, orderStatus) + } + + } + if err := partner.CurOrderManager.OnAfsOrderStatusChanged(orderStatus); err == nil { skuList, _ := dao.GetSimpleOrderSkus(db, orderStatus.RefVendorOrderID, nil) totalSkuCount := 0 @@ -241,6 +304,7 @@ func (c *PurchaseHandler) onAfsOrderMsg(status string, msg interface{}) (retVal goodsOrder.Status = model.OrderStatusCanceled goodsOrder.VendorStatus = orderStatus.VendorStatus dao.UpdateEntity(db, goodsOrder, "Status", "VendorStatus") + // 取消三方运单 } } }