/// <summary> /// 退款结果回调 /// </summary> /// <param name="result"></param> public static void OrderRefundResult(RefundResult result) { try { Guid orderId; Guid.TryParse(result.orderId, out orderId); LogHelper.Debug("进入 YXOrderHelper.OrderRefundResult,Input:" + JsonConvert.SerializeObject(result)); var orderRefund = OrderRefundAfterSales.ObjectSet().Where(_ => _.ApplyId == result.applyId).FirstOrDefault(); if (orderRefund == null) { LogHelper.Error("YXOrderHelper.OrderRefundResult 失败,未找到退款记录,Input:" + JsonConvert.SerializeObject(result)); } var orderItem = OrderItem.FindByID(orderRefund.OrderItemId.Value); string skuId; if (orderItem.CommodityStockId == null || orderItem.CommodityStockId.Value == Guid.Empty || orderItem.CommodityStockId == orderItem.CommodityId) { var commodity = Commodity.FindByID(orderItem.CommodityId); skuId = commodity.JDCode; } else { var comStock = CommodityStock.FindByID(orderItem.CommodityStockId.Value); skuId = comStock.JDCode; } var skuResult = result.refundSkuList.Where(_ => _.skuId == skuId).FirstOrDefault(); var skuOperateResult = skuResult.operateSkus.Where(_ => _.skuId == skuId).FirstOrDefault(); if (skuOperateResult.status == OrderRefundApplySkuOperateStatusEnum.审核通过) { var refundResult = OrderHelper.ApproveOrderRefundAfterSales(orderRefund.OrderId, orderRefund.OrderItemId ?? Guid.Empty); if (refundResult.ResultCode != 0) { // 失败 LogHelper.Error("YXOrderHelper.OrderRefundResult 失败," + refundResult.Message + ",Input:" + JsonConvert.SerializeObject(result)); } } else if (skuOperateResult.status == OrderRefundApplySkuOperateStatusEnum.已拒绝) { var refundResult = OrderHelper.RejectOrderRefundAfterSales(orderId, orderRefund.OrderItemId ?? Guid.Empty, skuOperateResult.reason); if (refundResult.ResultCode != 0) { // 失败 LogHelper.Error("YXOrderHelper.RejectOrderRefund 失败," + refundResult.Message + ",Input:" + JsonConvert.SerializeObject(result)); } } else { LogHelper.Error("YXOrderHelper.RejectOrderRefund -> OrderId: " + orderId + ", ApplyId: " + result.applyId + ", 忽略的状态:" + skuOperateResult.status.ToString()); } } catch (Exception ex) { LogHelper.Error("YXOrderHelper.OrderRefundResult 异常,Input:" + JsonConvert.SerializeObject(result), ex); } }
/// <summary> /// 发起售后申请(售前-不支持) /// </summary> /// <returns></returns> public static ResultDTO ApplyRefundOrder(CommodityOrder order, OrderItem orderItem, OrderRefund refund) { string skuId = null; if (orderItem.CommodityStockId.HasValue && orderItem.CommodityStockId != Guid.Empty && orderItem.CommodityStockId != orderItem.CommodityId) { var comStock = CommodityStock.FindByID(orderItem.CommodityStockId.Value); if (comStock == null) { return(new ResultDTO { isSuccess = false, Message = "商品不存在。", ResultCode = -1 }); } else { skuId = comStock.JDCode; } } else { var commodity = Commodity.FindByID(orderItem.CommodityId); if (commodity == null) { return(new ResultDTO { isSuccess = false, Message = "商品不存在。", ResultCode = -1 }); } else { skuId = commodity.JDCode; } } if (string.IsNullOrEmpty(skuId)) { return(new ResultDTO { isSuccess = false, Message = "商品SKU编码不存在。", ResultCode = -1 }); } var orderSku = YXOrderSku.ObjectSet().Where(_ => _.OrderId == order.Id && _.SkuId == skuId).FirstOrDefault(); if (orderSku == null) { return(new ResultDTO { isSuccess = false, Message = "订单SKU存在。", ResultCode = -1 }); } var requestData = new ApplyInfo { orderId = order.Id.ToString(), requestId = refund.Id.ToString(), applyUser = new ApplyUser { name = order.ReceiptUserName, mobile = order.ReceiptPhone }, applySku = new ApplySku { packageId = orderSku.PackageId, skuId = orderSku.SkuId, count = orderSku.SaleCount, originalPrice = orderSku.OriginPrice, subtotalPrice = orderSku.SubtotalAmount, applySkuReason = new ApplySkuReason { reason = refund.RefundReason, reasonDesc = refund.RefundDesc }, applyPicList = new List <ApplyPic> { } } }; if (!string.IsNullOrEmpty(refund.OrderRefundImgs)) { foreach (var img in refund.OrderRefundImgs.Split(',')) { requestData.applySku.applyPicList.Add(new ApplyPic { fileName = System.IO.Path.GetFileName(img), url = img }); } } var result = YXSV.ApplyRefundOrder(requestData); if (!result.isSuccess) { return(result); } refund.ApplyId = result.Data.applyId; return(new ResultDTO { isSuccess = true }); }