/// <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 });
            }
        }