/// <summary> /// 提交退款/售后申请 /// </summary> /// <param name="value"></param> /// <returns></returns> public object PostRefundApply(OrderRefundApplyModel value) { CheckUserLogin(); try { var ordser = ServiceProvider.Instance <IOrderService> .Create; var refundser = ServiceProvider.Instance <IRefundService> .Create; OrderRefundInfo info = new OrderRefundInfo(); #region 表单数据 info.OrderId = value.OrderId; if (null != value.OrderItemId) { info.OrderItemId = value.OrderItemId.Value; } if (null != value.refundId) { info.Id = value.refundId.Value; } info.RefundType = value.RefundType; info.ReturnQuantity = value.ReturnQuantity; info.Amount = value.Amount; info.Reason = value.Reason; info.ContactPerson = value.ContactPerson; info.ContactCellPhone = value.ContactCellPhone; info.RefundPayType = value.RefundPayType; #endregion #region 初始化售后单的数据 var order = ordser.GetOrder(info.OrderId, CurrentUser.Id); if (order == null) { throw new Himall.Core.HimallException("该订单已删除或不属于该用户"); } if ((int)order.OrderStatus < 2) { throw new Himall.Core.HimallException("错误的售后申请,订单状态有误"); } if (order.OrderStatus == OrderInfo.OrderOperateStatus.WaitDelivery || order.OrderStatus == OrderInfo.OrderOperateStatus.WaitSelfPickUp) { info.RefundMode = OrderRefundInfo.OrderRefundMode.OrderRefund; info.ReturnQuantity = 0; } if (info.RefundType == 1) { info.ReturnQuantity = 0; info.IsReturn = false; } if (info.ReturnQuantity < 0) { throw new Himall.Core.HimallException("错误的退货数量"); } var orderitem = order.OrderItemInfo.FirstOrDefault(a => a.Id == info.OrderItemId); if (orderitem == null && info.RefundMode != OrderRefundInfo.OrderRefundMode.OrderRefund) { throw new Himall.Core.HimallException("该订单条目已删除或不属于该用户"); } if (info.RefundMode == OrderRefundInfo.OrderRefundMode.OrderRefund) { if (order.OrderStatus != OrderInfo.OrderOperateStatus.WaitDelivery && order.OrderStatus != OrderInfo.OrderOperateStatus.WaitSelfPickUp) { throw new Himall.Core.HimallException("错误的订单退款申请,订单状态有误"); } info.IsReturn = false; info.ReturnQuantity = 0; if (info.Amount > order.OrderEnabledRefundAmount) { throw new Himall.Core.HimallException("退款金额不能超过订单的实际支付金额"); } } else { if (info.Amount > (orderitem.EnabledRefundAmount - orderitem.RefundPrice)) { throw new Himall.Core.HimallException("退款金额不能超过订单的可退金额"); } if (info.ReturnQuantity > (orderitem.Quantity - orderitem.ReturnQuantity)) { throw new Himall.Core.HimallException("退货数量不可以超出可退数量"); } } info.IsReturn = false; if (info.ReturnQuantity > 0) { info.IsReturn = true; } if (info.RefundType == 2) { info.IsReturn = true; } if (info.IsReturn == true && info.ReturnQuantity < 1) { throw new Himall.Core.HimallException("错误的退货数量"); } if (info.Amount <= 0) { throw new Himall.Core.HimallException("错误的退款金额"); } info.ShopId = order.ShopId; info.ShopName = order.ShopName; info.UserId = CurrentUser.Id; info.Applicant = CurrentUser.UserName; info.ApplyDate = DateTime.Now; info.Reason = HTMLEncode(info.Reason.Replace("'", "‘").Replace("\"", "”")); #endregion //info.RefundAccount = HTMLEncode(info.RefundAccount.Replace("'", "‘").Replace("\"", "”")); if (info.Id > 0) { refundser.ActiveRefund(info); } else { refundser.AddOrderRefund(info); } return(Json(new { success = true, msg = "提交成功", id = info.Id })); } catch (HimallException he) { return(Json(new { success = false, msg = he.Message })); } catch (Exception ex) { return(Json(new { success = false, msg = "系统异常:" + ex.Message })); } }
/// <summary> /// 提交退款/售后申请 /// </summary> /// <param name="value"></param> /// <returns></returns> public object PostRefundApply(OrderRefundApplyModel value) { CheckUserLogin(); try { var ordser = ServiceProvider.Instance <IOrderService> .Create; var refundser = ServiceProvider.Instance <IRefundService> .Create; OrderRefundInfo info = new OrderRefundInfo(); #region 表单数据 info.OrderId = value.OrderId; if (null != value.OrderItemId) { info.OrderItemId = value.OrderItemId.Value; } if (null != value.refundId) { info.Id = value.refundId.Value; } info.RefundType = value.RefundType; info.ReturnQuantity = value.ReturnQuantity; info.Amount = value.Amount; info.Reason = value.Reason; info.ContactPerson = value.ContactPerson; info.ContactCellPhone = value.ContactCellPhone; info.RefundPayType = value.RefundPayType; info.VerificationCodeIds = value.VerificationCodeIds; if (info.RefundMode != OrderRefundInfo.OrderRefundMode.OrderRefund && !value.refundId.HasValue && value.OrderItemId.HasValue) { var _refobj = OrderApplication.GetOrderRefunds(new long[] { value.OrderItemId.Value }).FirstOrDefault(d => d.RefundMode != OrderRefundInfo.OrderRefundMode.OrderRefund); if (_refobj != null) { info.Id = _refobj.Id; } } #endregion #region 初始化售后单的数据 var order = ordser.GetOrder(info.OrderId, CurrentUser.Id); if (order == null) { throw new Himall.Core.HimallException("该订单已删除或不属于该用户"); } if (order.OrderType != OrderInfo.OrderTypes.Virtual && (int)order.OrderStatus < 2) { throw new Himall.Core.HimallException("错误的售后申请,订单状态有误"); } if (value.ReasonDetail != null && value.ReasonDetail.Length > 1000) { throw new Himall.Core.HimallException("退款理由不能超过1000字符"); } if (order.OrderStatus == Entities.OrderInfo.OrderOperateStatus.WaitDelivery || order.OrderStatus == Entities.OrderInfo.OrderOperateStatus.WaitSelfPickUp) { info.RefundMode = OrderRefundInfo.OrderRefundMode.OrderRefund; info.ReturnQuantity = 0; } if (info.RefundType == 1) { info.ReturnQuantity = 0; info.IsReturn = false; } if (order.OrderType != OrderInfo.OrderTypes.Virtual && info.ReturnQuantity < 0) { throw new Himall.Core.HimallException("错误的退货数量"); } var orderitem = OrderApplication.GetOrderItem(info.OrderItemId); if (orderitem == null && info.RefundMode != OrderRefundInfo.OrderRefundMode.OrderRefund) { throw new Himall.Core.HimallException("该订单条目已删除或不属于该用户"); } if (order.OrderType != OrderInfo.OrderTypes.Virtual) { if (info.RefundMode == OrderRefundInfo.OrderRefundMode.OrderRefund) { if (order.OrderStatus != Entities.OrderInfo.OrderOperateStatus.WaitDelivery && order.OrderStatus != Entities.OrderInfo.OrderOperateStatus.WaitSelfPickUp) { throw new Himall.Core.HimallException("错误的订单退款申请,订单状态有误"); } info.IsReturn = false; info.ReturnQuantity = 0; if (info.Amount > order.OrderEnabledRefundAmount) { throw new Himall.Core.HimallException("退款金额不能超过订单的实际支付金额"); } } else { if (info.Amount > (orderitem.EnabledRefundAmount - orderitem.RefundPrice)) { throw new Himall.Core.HimallException("退款金额不能超过订单的可退金额"); } if (info.ReturnQuantity > (orderitem.Quantity - orderitem.ReturnQuantity)) { throw new Himall.Core.HimallException("退货数量不可以超出可退数量"); } } } info.IsReturn = false; if (info.ReturnQuantity > 0) { info.IsReturn = true; } if (info.RefundType == 2) { info.IsReturn = true; } if (order.OrderType != OrderInfo.OrderTypes.Virtual && info.IsReturn == true && info.ReturnQuantity < 1) { throw new Himall.Core.HimallException("错误的退货数量"); } if (info.Amount <= 0) { throw new Himall.Core.HimallException("错误的退款金额"); } info.ShopId = order.ShopId; info.ShopName = order.ShopName; info.UserId = CurrentUser.Id; info.Applicant = CurrentUser.UserName; info.ApplyDate = DateTime.Now; info.Reason = HTMLEncode(info.Reason.Replace("'", "‘").Replace("\"", "”")); info.ReasonDetail = value.ReasonDetail; info.CertPic1 = MoveImages(value.CertPic1, CurrentUser.Id, info.OrderItemId); info.CertPic2 = MoveImages(value.CertPic2, CurrentUser.Id, info.OrderItemId); info.CertPic3 = MoveImages(value.CertPic3, CurrentUser.Id, info.OrderItemId); #endregion //info.RefundAccount = HTMLEncode(info.RefundAccount.Replace("'", "‘").Replace("\"", "”")); if (order.OrderType == OrderInfo.OrderTypes.Virtual) { if (string.IsNullOrWhiteSpace(info.VerificationCodeIds)) { throw new Himall.Core.HimallException("虚拟订单退款核销码不能为空"); } info.VerificationCodeIds = Regex.Replace(info.VerificationCodeIds, @"\s", ""); //检测核销码都为正确的 var codeList = info.VerificationCodeIds.Split(',').ToList(); var codes = OrderApplication.GetOrderVerificationCodeInfoByCodes(codeList); if (codes.Count != codeList.Count) { throw new Himall.Core.HimallException("包含无效的核销码"); } foreach (var item in codes) { if (item.Status != OrderInfo.VerificationCodeStatus.WaitVerification) { throw new Himall.Core.HimallException("包含已申请售后的核销码"); } } info.ReturnQuantity = codes.Count; } if (order.OrderType != OrderInfo.OrderTypes.Virtual) { if (info.Id > 0) { refundser.ActiveRefund(info); } else { refundser.AddOrderRefund(info); } } else { refundser.AddOrderRefund(info); #region 处理退款 try { //虚拟订单自动退款,异常不提示用户,进入平台待审核 string notifyurl = CurrentUrlHelper.CurrentUrlNoPort() + "/Pay/RefundNotify/{0}"; var result = refundser.ConfirmRefund(info.Id, "虚拟订单申请售后自动退款", "", notifyurl); } catch (Exception ex) { Log.Error("虚拟商品自动退异常", ex); } #endregion } return(new { success = true, msg = "提交成功", id = info.Id }); } catch (HimallException he) { return(new { success = false, msg = he.Message }); } catch (Exception ex) { return(new { success = false, msg = "系统异常:" + ex.Message }); } }