Exemplo n.º 1
0
        private void UpdateShopVisti(OrderRefundInfo refund, DateTime payDate)
        {
            ShopVistiInfo shopVistiInfo = context.ShopVistiInfo.FindBy((ShopVistiInfo item) => item.ShopId == refund.ShopId && (item.Date == payDate.Date)).FirstOrDefault();

            if (shopVistiInfo != null)
            {
                if (refund.RefundMode == OrderRefundInfo.OrderRefundMode.OrderRefund)
                {
                    List <OrderItemInfo> list = (
                        from d in context.OrderItemInfo
                        where d.OrderId == refund.OrderId
                        select d).ToList();
                    foreach (OrderItemInfo orderItemInfo in list)
                    {
                        ShopVistiInfo saleCounts = shopVistiInfo;
                        saleCounts.SaleCounts = saleCounts.SaleCounts - orderItemInfo.Quantity;
                    }
                }
                else if (refund.IsReturn)
                {
                    ShopVistiInfo saleCounts1 = shopVistiInfo;
                    saleCounts1.SaleCounts = saleCounts1.SaleCounts - refund.OrderItemInfo.ReturnQuantity;
                }
                ShopVistiInfo saleAmounts = shopVistiInfo;
                saleAmounts.SaleAmounts = saleAmounts.SaleAmounts - refund.Amount;
                context.SaveChanges();
            }
        }
Exemplo n.º 2
0
 /// <summary>
 /// 申请退款
 /// </summary>
 /// <param name="orderRefundInfo">订单退款信息</param>
 public void ApplyRefund(OrderRefundInfo orderRefundInfo)
 {
     DbParameter[] parms =
     {
         GenerateInParam("@storeid",          SqlDbType.Int,       4, orderRefundInfo.StoreId),
         GenerateInParam("@storename",        SqlDbType.NVarChar, 60, orderRefundInfo.StoreName),
         GenerateInParam("@oid",              SqlDbType.Int,       4, orderRefundInfo.Oid),
         GenerateInParam("@osn",              SqlDbType.VarChar,  30, orderRefundInfo.OSN),
         GenerateInParam("@uid",              SqlDbType.Int,       4, orderRefundInfo.Uid),
         GenerateInParam("@state",            SqlDbType.TinyInt,   1, orderRefundInfo.State),
         GenerateInParam("@applytime",        SqlDbType.DateTime,  8, orderRefundInfo.ApplyTime),
         GenerateInParam("@paymoney",         SqlDbType.Decimal,   8, orderRefundInfo.PayMoney),
         GenerateInParam("@refundmoney",      SqlDbType.Decimal,   8, orderRefundInfo.RefundMoney),
         GenerateInParam("@refundsn",         SqlDbType.VarChar,  30, orderRefundInfo.RefundSN),
         GenerateInParam("@refundsystemname", SqlDbType.VarChar,  20, orderRefundInfo.RefundSystemName),
         GenerateInParam("@refundfriendname", SqlDbType.NVarChar, 30, orderRefundInfo.RefundFriendName),
         GenerateInParam("@refundtime",       SqlDbType.DateTime,  8, orderRefundInfo.RefundTime),
         GenerateInParam("@paysn",            SqlDbType.VarChar,  30, orderRefundInfo.PaySN),
         GenerateInParam("@paysystemname",    SqlDbType.VarChar,  20, orderRefundInfo.PaySystemName),
         GenerateInParam("@payfriendname",    SqlDbType.NVarChar, 30, orderRefundInfo.PayFriendName)
     };
     RDBSHelper.ExecuteNonQuery(CommandType.StoredProcedure,
                                string.Format("{0}applyrefund", RDBSHelper.RDBSTablePre),
                                parms);
 }
Exemplo n.º 3
0
 public void OnCancelOrderRefund(ResturantPlatformType platformType, OrderRefundInfo info)
 {
     using (Way.Lib.CLog log = new Way.Lib.CLog("用户取消退单"))
     {
         log.LogJson(info);
     }
 }
Exemplo n.º 4
0
        public ActionResult Detail(long id)
        {
            OrderRefundInfo orderRefund = ServiceHelper.Create <IRefundService>().GetOrderRefund(id, base.CurrentUser.Id);

            ViewBag.UserName = base.CurrentUser.UserName;
            return(View(orderRefund));
        }
Exemplo n.º 5
0
        static void handleOrderAgreeRefund(Newtonsoft.Json.Linq.JObject jsonObj)
        {
            var    message = (Newtonsoft.Json.Linq.JObject)Newtonsoft.Json.JsonConvert.DeserializeObject(jsonObj.Value <string>("message"));
            var    orderid = message.Value <string>("orderId");
            string reason  = message.Value <string>("reason");

            var refundInfo = new OrderRefundInfo()
            {
                OrderID = orderid,
                Reason  = reason,
                Money   = message.Value <double?>("totalPrice")
            };


            try
            {
                var goodsList = (Newtonsoft.Json.Linq.JArray)message["goodsList"];
                for (int i = 0; i < goodsList.Count; i++)
                {
                    var            good = goodsList[i];
                    RefundDishInfo info = new RefundDishInfo();
                    info.DishName    = good.Value <string>("name");
                    info.Quantity    = good.Value <int>("quantity");
                    info.Price       = good.Value <double>("price");
                    info.RefundPrice = good.Value <double>("price");
                    refundInfo.RefundDishInfos.Add(info);
                }
            }
            catch
            {
            }
            ResturantFactory.ResturantListener.OnOrderRefundCompleted(ResturantPlatformType.Ele, refundInfo);
        }
Exemplo n.º 6
0
        /// <summary>
        /// 审核订单退款申请
        /// </summary>
        /// <param name="approveStatus">1:通过;0:拒绝</param>
        private void Approve(int approveStatus, OrderRefundInfo orderRefund)
        {
            var    submitOrderRefund = orderRefund;
            string returnUrl         = "/mobileadmin/orderrefunddetail.html?id=" + orderRefund.Id;

            switch (submitOrderRefund.Status)
            {
            case (int)OrderRefundStatus.Submit:
                CheckAdminPower("OrderRefundApprove", PowerCheckType.Single);
                //如果是团购单,且拼团正在进行中,暂不能申请退款
                var order = OrderBLL.Read(submitOrderRefund.OrderId);
                if (order.IsActivity == (int)OrderKind.GroupBuy && order.FavorableActivityId > 0)
                {
                    var groupBuy = GroupBuyBLL.Read(order.FavorableActivityId);
                    if (groupBuy.StartTime <= DateTime.Now && groupBuy.EndTime >= DateTime.Now && groupBuy.Quantity > groupBuy.SignCount)
                    {
                        ScriptHelper.AlertFront("拼团正在进行,暂不能退款", returnUrl);
                    }
                }
                if (approveStatus == (int)BoolType.True)
                {
                    submitOrderRefund.Status = (int)OrderRefundStatus.Approve;
                    submitOrderRefund.Remark = "系统审核通过,等待处理退款: ";
                }
                else
                {
                    submitOrderRefund.Status = (int)OrderRefundStatus.Reject;
                    submitOrderRefund.Remark = "系统审核不通过: ";
                }
                break;

            case (int)OrderRefundStatus.Returning:
                ScriptHelper.AlertFront("正在处理退款,请不要重复退款", returnUrl);
                break;

            case (int)OrderRefundStatus.HasReturn:
                ScriptHelper.AlertFront("退款已完成,请不要重复退款", returnUrl);
                break;

            case (int)OrderRefundStatus.Reject:
                ScriptHelper.AlertFront("退款已被拒绝,请不要重复退款", returnUrl);
                break;

            default:
                ScriptHelper.AlertFront("无效的操作", returnUrl);
                break;
            }

            OrderRefundBLL.Update(submitOrderRefund);

            //退款操作记录
            AddOrderRefundAction(submitOrderRefund, approveStatus);

            AdminLogBLL.Add(ShopLanguage.ReadLanguage("UpdateRecord"), ShopLanguage.ReadLanguage("OrderRefund"), submitOrderRefund.Id);
            ScriptHelper.AlertFront("操作成功", returnUrl);
        }
Exemplo n.º 7
0
        public void Update(OrderRefundInfo entity)
        {
            using (var conn = new SqlConnection(connectString))
            {
                string sql = @"UPDATE OrderRefund SET RefundNumber = @RefundNumber, OrderId = @OrderId, OrderNumber = @OrderNumber, OrderDetailId = @OrderDetailId, RefundCount = @RefundCount, RefundBalance = @RefundBalance, RefundMoney = @RefundMoney, RefundPayKey = @RefundPayKey, RefundPayName = @RefundPayName, BatchNo = @BatchNo, Status = @Status, TmCreate = @TmCreate, TmRefund = @TmRefund, RefundRemark = @RefundRemark, Remark = @Remark, IsCommented = @IsCommented, TmComment = @TmComment, CommentContent = @CommentContent, UserType = @UserType, UserId = @UserId, UserName = @UserName, OwnerId = @OwnerId
                            where Id=@Id";

                conn.Execute(sql, entity);
            }
        }
Exemplo n.º 8
0
        public int Add(OrderRefundInfo entity)
        {
            using (var conn = new SqlConnection(connectString))
            {
                string sql = @"INSERT INTO OrderRefund( RefundNumber,OrderId,OrderNumber,OrderDetailId,RefundCount,RefundBalance,RefundMoney,RefundPayKey,RefundPayName,BatchNo,Status,TmCreate,TmRefund,RefundRemark,Remark,IsCommented,TmComment,CommentContent,UserType,UserId,UserName,OwnerId) VALUES(@RefundNumber,@OrderId,@OrderNumber,@OrderDetailId,@RefundCount,@RefundBalance,@RefundMoney,@RefundPayKey,@RefundPayName,@BatchNo,@Status,@TmCreate,@TmRefund,@RefundRemark,@Remark,@IsCommented,@TmComment,@CommentContent,@UserType,@UserId,@UserName,@OwnerId);
                            select SCOPE_IDENTITY()";

                return(conn.Query <int>(sql, entity).Single());
            }
        }
Exemplo n.º 9
0
        protected override void PageLoad()
        {
            base.PageLoad();
            int id = RequestHelper.GetQueryString <int>("id");

            orderRefund           = OrderRefundBLL.Read(id);
            order                 = OrderBLL.Read(orderRefund.OrderId);
            order.OrderDetailList = OrderDetailBLL.ReadList(orderRefund.OrderId);

            topNav = 0;
        }
Exemplo n.º 10
0
        /// <summary>
        /// 获得订单退款列表
        /// </summary>
        /// <param name="pageSize">每页数</param>
        /// <param name="pageNumber">当前页数</param>
        /// <param name="condition">条件</param>
        /// <returns></returns>
        public static List <OrderRefundInfo> GetOrderRefundList(int pageSize, int pageNumber, string condition)
        {
            List <OrderRefundInfo> orderRefundList = new List <OrderRefundInfo>();
            IDataReader            reader          = BrnShop.Core.BSPData.RDBS.GetOrderRefundList(pageSize, pageNumber, condition);

            while (reader.Read())
            {
                OrderRefundInfo orderRefundInfo = BuildOrderRefundFromReader(reader);
                orderRefundList.Add(orderRefundInfo);
            }

            reader.Close();
            return(orderRefundList);
        }
Exemplo n.º 11
0
        private void UpdateProductVisti(OrderRefundInfo refund, DateTime payDate)
        {
            OrderItemInfo    orderItemInfo    = refund.OrderItemInfo;
            ProductInfo      productInfo      = new ProductInfo();
            ProductVistiInfo productVistiInfo = new ProductVistiInfo();

            if (refund.RefundMode == OrderRefundInfo.OrderRefundMode.OrderRefund)
            {
                List <OrderItemInfo> list = (
                    from d in context.OrderItemInfo
                    where d.OrderId == refund.OrderId
                    select d).ToList();
                foreach (OrderItemInfo orderItemInfo1 in list)
                {
                    productInfo = context.ProductInfo.FirstOrDefault((ProductInfo d) => d.Id == orderItemInfo1.ProductId);
                    if (productInfo != null)
                    {
                        ProductInfo saleCounts = productInfo;
                        saleCounts.SaleCounts = saleCounts.SaleCounts - orderItemInfo1.Quantity;
                    }
                    productVistiInfo = context.ProductVistiInfo.FindBy((ProductVistiInfo d) => d.ProductId == orderItemInfo1.ProductId && (d.Date == payDate.Date)).FirstOrDefault();
                    if (productVistiInfo == null)
                    {
                        continue;
                    }
                    ProductVistiInfo saleCounts1 = productVistiInfo;
                    saleCounts1.SaleCounts = saleCounts1.SaleCounts - orderItemInfo.Quantity;
                    ProductVistiInfo saleAmounts = productVistiInfo;
                    saleAmounts.SaleAmounts = saleAmounts.SaleAmounts - refund.Amount;
                }
            }
            else if (refund.IsReturn)
            {
                productInfo = context.ProductInfo.FirstOrDefault((ProductInfo d) => d.Id == refund.OrderItemInfo.ProductId);
                if (productInfo != null)
                {
                    ProductInfo productInfo1 = productInfo;
                    productInfo1.SaleCounts = productInfo1.SaleCounts - refund.OrderItemInfo.ReturnQuantity;
                }
                productVistiInfo = context.ProductVistiInfo.FindBy((ProductVistiInfo item) => item.ProductId == orderItemInfo.ProductId && (item.Date == payDate.Date)).FirstOrDefault();
                if (productVistiInfo != null)
                {
                    ProductVistiInfo productVistiInfo1 = productVistiInfo;
                    productVistiInfo1.SaleCounts = productVistiInfo1.SaleCounts - orderItemInfo.Quantity;
                    ProductVistiInfo saleAmounts1 = productVistiInfo;
                    saleAmounts1.SaleAmounts = saleAmounts1.SaleAmounts - refund.Amount;
                }
            }
            context.SaveChanges();
        }
Exemplo n.º 12
0
        private void Submit()
        {
            int orderId       = RequestHelper.GetQueryString <int>("orderId");
            int orderDetailId = RequestHelper.GetQueryString <int>("orderDetailId");

            int     needRefundCount = RequestHelper.GetForm <int>("refund_count");
            decimal needRefundMoney = RequestHelper.GetForm <decimal>("refund_money");
            string  refundRemark    = StringHelper.AddSafe(RequestHelper.GetForm <string>("refund_remark"));

            OrderRefundInfo orderRefund = new OrderRefundInfo();

            orderRefund.RefundNumber = ShopCommon.CreateOrderRefundNumber();
            orderRefund.OrderId      = orderId;
            if (orderDetailId > 0)
            {
                orderRefund.OrderDetailId = orderDetailId;
                orderRefund.RefundCount   = needRefundCount;
            }
            orderRefund.Status       = (int)OrderRefundStatus.Submit;
            orderRefund.TmCreate     = DateTime.Now;
            orderRefund.RefundRemark = refundRemark;
            orderRefund.UserType     = 1;
            orderRefund.UserId       = base.UserId;
            orderRefund.UserName     = base.UserName;

            var refundMsg = JWRefund.VerifySubmitOrderRefund(orderRefund, needRefundMoney);

            if (refundMsg.CanRefund)
            {
                int id = OrderRefundBLL.Add(orderRefund);
                OrderRefundActionBLL.Add(new OrderRefundActionInfo
                {
                    OrderRefundId = id,
                    Status        = (int)BoolType.True,
                    Tm            = DateTime.Now,
                    UserType      = 1,
                    UserId        = base.UserId,
                    UserName      = base.UserName,
                    Remark        = "用户提交退款申请"
                });
                ResponseHelper.Write("ok|" + id);
                ResponseHelper.End();
            }
            else
            {
                ResponseHelper.Write("error|" + refundMsg.ErrorCodeMsg);
                ResponseHelper.End();
            }
        }
Exemplo n.º 13
0
        //增加退款操作记录
        private void AddOrderRefundAction(OrderRefundInfo entity, int status)
        {
            OrderRefundActionInfo submitOrderRefundAction = new OrderRefundActionInfo
            {
                OrderRefundId = entity.Id,
                Status        = status,
                Remark        = entity.Remark,
                Tm            = DateTime.Now,
                UserType      = 2,
                UserId        = Cookies.Admin.GetAdminID(false),
                UserName      = Cookies.Admin.GetAdminName(false)
            };

            OrderRefundActionBLL.Add(submitOrderRefundAction);
        }
Exemplo n.º 14
0
        protected void SubmitButton_Click(object sender, EventArgs e)
        {
            CheckAdminPower("OrderRefundApply", PowerCheckType.Single);

            int     orderId         = RequestHelper.GetQueryString <int>("orderId");
            int     orderDetailId   = RequestHelper.GetQueryString <int>("orderDetailId");
            decimal needRefundMoney = Convert.ToDecimal(RefundMoney.Text);

            OrderRefundInfo orderRefund = new OrderRefundInfo();

            orderRefund.RefundNumber = ShopCommon.CreateOrderRefundNumber();
            orderRefund.OrderId      = orderId;
            if (orderDetailId > 0)
            {
                orderRefund.OrderDetailId = orderDetailId;
                orderRefund.RefundCount   = Convert.ToInt32(RefundCount.Text);
            }
            orderRefund.Status       = (int)OrderRefundStatus.Submit;
            orderRefund.TmCreate     = DateTime.Now;
            orderRefund.RefundRemark = RefundRemark.Text;
            orderRefund.UserType     = 2;
            orderRefund.UserId       = Cookies.Admin.GetAdminID(false);
            orderRefund.UserName     = Cookies.Admin.GetAdminName(false);

            var refundMsg = JWRefund.VerifySubmitOrderRefund(orderRefund, needRefundMoney);

            if (refundMsg.CanRefund)
            {
                int id = OrderRefundBLL.Add(orderRefund);
                OrderRefundActionBLL.Add(new OrderRefundActionInfo
                {
                    OrderRefundId = id,
                    Status        = (int)BoolType.True,
                    Tm            = DateTime.Now,
                    UserType      = 2,
                    UserId        = orderRefund.UserId,
                    UserName      = orderRefund.UserName,
                    Remark        = "系统提交退款申请"
                });
                AdminLogBLL.Add(ShopLanguage.ReadLanguage("AddRecord"), ShopLanguage.ReadLanguage("OrderRefund"), id);
                ScriptHelper.Alert("退款申请成功", RequestHelper.RawUrl);
            }
            else
            {
                ScriptHelper.Alert(refundMsg.ErrorCodeMsg);
            }
        }
Exemplo n.º 15
0
        private double GetNextSecond(OrderRefundInfo data)
        {
            double result      = -999;
            var    sitesetser  = ServiceHelper.Create <ISiteSettingService>();
            var    siteSetting = sitesetser.GetSiteSettings();

            if (data != null)
            {
                if (data.SellerAuditStatus == OrderRefundInfo.OrderRefundAuditStatus.WaitAudit ||
                    data.SellerAuditStatus == OrderRefundInfo.OrderRefundAuditStatus.WaitDelivery ||
                    data.SellerAuditStatus == OrderRefundInfo.OrderRefundAuditStatus.WaitReceiving
                    )
                {
                    int      num   = 0;
                    DateTime _time = DateTime.Now;
                    switch (data.SellerAuditStatus)
                    {
                    case OrderRefundInfo.OrderRefundAuditStatus.WaitAudit:
                        _time = data.ApplyDate;
                        num   = siteSetting.AS_ShopConfirmTimeout;
                        break;

                    case OrderRefundInfo.OrderRefundAuditStatus.WaitDelivery:
                        _time = data.SellerAuditDate;
                        num   = siteSetting.AS_SendGoodsCloseTimeout;
                        break;

                    case OrderRefundInfo.OrderRefundAuditStatus.WaitReceiving:
                        _time = data.BuyerDeliverDate.GetValueOrDefault();
                        num   = siteSetting.AS_ShopNoReceivingTimeout;
                        break;
                    }
                    TimeSpan ts = (DateTime.Now - _time);
                    if (num > 0)
                    {
                        result = num * 24 * 60 * 60;
                        result = result - ts.TotalSeconds;
                        if (result < 0)
                        {
                            result = -1;
                        }
                    }
                }
            }
            return(result);
        }
Exemplo n.º 16
0
        /// <summary>
        /// 订单退款减少销量
        /// </summary>
        /// <param name="orderids"></param>
        public void ReduceSaleCount(OrderRefundInfo refund)
        {
            var order = DbFactory.Default.Get <OrderInfo>().Where(p => p.Id == refund.OrderId).FirstOrDefault();

            if (order == null)
            {
                return;
            }
            var orderItem = OrderApplication.GetOrderItem(refund.OrderItemId);
            //限时购销量
            var  orderid   = orderItem.OrderId;
            long productid = orderItem.ProductId;
            var  result    = DbFactory.Default.Get <FlashSaleInfo>().Where(p => p.Id == orderItem.FlashSaleId && p.ProductId == productid && p.BeginDate <DateTime.Now && p.EndDate> DateTime.Now && p.Status == FlashSaleInfo.FlashSaleStatus.Ongoing).FirstOrDefault();

            if (result != null)
            {
                var refoundInfo = DbFactory.Default.Get <OrderRefundInfo>().Where(p => p.OrderId == orderid).FirstOrDefault();

                if (refoundInfo != null)
                {
                    long saleCount = 0;
                    //退款取订单详情数量
                    if (refoundInfo.RefundMode == OrderRefundInfo.OrderRefundMode.OrderRefund)
                    {
                        saleCount = orderItem.Quantity;
                    }
                    //退货退款,取退货数量
                    else if (refoundInfo.RefundMode == OrderRefundInfo.OrderRefundMode.ReturnGoodsRefund)
                    {
                        if (refund.IsReturn)
                        {
                            //判断是否有会员发货,没有会员发货视为弃货,不扣销量
                            if (!string.IsNullOrEmpty(refoundInfo.ExpressCompanyName) && !string.IsNullOrEmpty(refoundInfo.ShipOrderNumber))
                            {
                                saleCount = refoundInfo.ReturnQuantity;
                            }
                        }
                    }
                    //弃货不扣销量
                    var count = result.SaleCount - (int)saleCount;
                    result.SaleCount = count < 0 ? 0 : count;
                    DbFactory.Default.Update(result);
                }
            }
        }
Exemplo n.º 17
0
        /// <summary>
        /// 添加部分退单商品信息
        /// </summary>
        /// <param name="cdto"></param>
        /// <returns></returns>
        public Jinher.AMP.BTP.Deploy.CustomDTO.ResultDTO AddRefundComdtyInfoExt(Jinher.AMP.BTP.Deploy.CustomDTO.BOrderRefundInfoCDTO cdto)
        {
            Deploy.CustomDTO.ResultDTO ret = new Deploy.CustomDTO.ResultDTO()
            {
                isSuccess = false, ResultCode = 1, Message = "添加失败!"
            };

            if (cdto == null)
            {
                ret.Message = "参数不能为空!";
                return(ret);
            }
            BE.OrderRefundInfo refundInfo = new OrderRefundInfo();
            refundInfo.Id            = cdto.id;
            refundInfo.OrderId       = cdto.orderId;
            refundInfo.ItemId        = cdto.itemId;
            refundInfo.Refund        = cdto.refund;
            refundInfo.isDelivery    = cdto.isDelivery;
            refundInfo.OrderRefundId = cdto.orderRefundId;
            refundInfo.SubId         = cdto.subId;
            refundInfo.SubTime       = cdto.subTime;
            refundInfo.ModifiedOn    = cdto.modifiedOn;
            refundInfo.EntityState   = System.Data.EntityState.Added;
            try
            {
                ContextSession contextSession = ContextFactory.CurrentThreadContext;
                contextSession.SaveObject(refundInfo);
                int change = contextSession.SaveChanges();
                ret.isSuccess = change > 0;
                if (ret.isSuccess)
                {
                    ret.Message = "添加成功!";
                }

                return(ret);
            }
            catch (Exception ex)
            {
                ret.Message = ex.Message;
            }
            return(ret);
        }
Exemplo n.º 18
0
        protected override void PageLoad()
        {
            base.PageLoad();

            string action = RequestHelper.GetQueryString <string>("Action");

            if (action == "CancelRefund")
            {
                this.CancelRefund();
            }

            int id = RequestHelper.GetQueryString <int>("id");

            orderRefund           = OrderRefundBLL.Read(id);
            orderRefundActionList = OrderRefundActionBLL.ReadList(id);

            order = OrderBLL.Read(orderRefund.OrderId);

            Title = "退款记录";
        }
Exemplo n.º 19
0
        /// <summary>
        /// 从IDataReader创建OrderRefundInfo
        /// </summary>
        public static OrderRefundInfo BuildOrderRefundFromReader(IDataReader reader)
        {
            OrderRefundInfo orderRefundInfo = new OrderRefundInfo();

            orderRefundInfo.Oid              = TypeHelper.ObjectToInt(reader["oid"]);
            orderRefundInfo.OSN              = reader["osn"].ToString();
            orderRefundInfo.Uid              = TypeHelper.ObjectToInt(reader["uid"]);
            orderRefundInfo.State            = TypeHelper.ObjectToInt(reader["state"]);
            orderRefundInfo.ApplyTime        = TypeHelper.ObjectToDateTime(reader["applytime"]);
            orderRefundInfo.PayMoney         = TypeHelper.ObjectToDecimal(reader["paymoney"]);
            orderRefundInfo.RefundMoney      = TypeHelper.ObjectToDecimal(reader["refundmoney"]);
            orderRefundInfo.RefundSN         = reader["refundsn"].ToString();
            orderRefundInfo.RefundSystemName = reader["refundsystemname"].ToString();
            orderRefundInfo.RefundFriendName = reader["refundfriendname"].ToString();
            orderRefundInfo.RefundTime       = TypeHelper.ObjectToDateTime(reader["refundtime"]);
            orderRefundInfo.PaySN            = reader["paysn"].ToString();
            orderRefundInfo.PaySystemName    = reader["paysystemname"].ToString();
            orderRefundInfo.PayFriendName    = reader["payfriendname"].ToString();

            return(orderRefundInfo);
        }
Exemplo n.º 20
0
        public void SellerConfirmRefundGood(long id, string sellerName)
        {
            OrderRefundInfo nullable = context.OrderRefundInfo.FindById <OrderRefundInfo>(id);

            if (nullable.SellerAuditStatus != OrderRefundInfo.OrderRefundAuditStatus.WaitReceiving)
            {
                throw new HimallException("只有待收货状态的退货才能进行确认收货操作");
            }
            nullable.SellerAuditStatus        = OrderRefundInfo.OrderRefundAuditStatus.Audited;
            nullable.SellerConfirmArrivalDate = new DateTime?(DateTime.Now);
            nullable.ManagerConfirmDate       = DateTime.Now;
            OrderOperationLogInfo orderOperationLogInfo = new OrderOperationLogInfo()
            {
                Operator       = sellerName,
                OrderId        = nullable.OrderId,
                OperateDate    = DateTime.Now,
                OperateContent = "商家确认收到退货"
            };

            context.OrderOperationLogInfo.Add(orderOperationLogInfo);
            context.SaveChanges();
        }
Exemplo n.º 21
0
        public void UserConfirmRefundGood(long id, string sellerName, string expressCompanyName, string shipOrderNumber)
        {
            OrderRefundInfo nullable = context.OrderRefundInfo.FindById <OrderRefundInfo>(id);

            if (nullable.SellerAuditStatus != OrderRefundInfo.OrderRefundAuditStatus.WaitDelivery)
            {
                throw new HimallException("只有待等待发货状态的能进行发货操作");
            }
            nullable.ShipOrderNumber    = shipOrderNumber;
            nullable.ExpressCompanyName = expressCompanyName;
            nullable.SellerAuditStatus  = OrderRefundInfo.OrderRefundAuditStatus.WaitReceiving;
            nullable.BuyerDeliverDate   = new DateTime?(DateTime.Now);
            OrderOperationLogInfo orderOperationLogInfo = new OrderOperationLogInfo()
            {
                Operator       = sellerName,
                OrderId        = nullable.OrderId,
                OperateDate    = DateTime.Now,
                OperateContent = "买家确认发回产品"
            };

            context.OrderOperationLogInfo.Add(orderOperationLogInfo);
            context.SaveChanges();
        }
Exemplo n.º 22
0
        protected void Page_Load(object sender, EventArgs e)
        {
            if (!Page.IsPostBack)
            {
                CheckAdminPower("OrderRefundApprove", PowerCheckType.Single);

                int orderRefundId = RequestHelper.GetQueryString <int>("Id");
                orderRefund = OrderRefundBLL.Read(orderRefundId);
                if (orderRefund.Id > 0)
                {
                    order = OrderBLL.Read(orderRefund.OrderId);
                    if (orderRefund.OrderDetailId > 0)
                    {
                        orderDetailList.Add(OrderDetailBLL.Read(orderRefund.OrderDetailId));
                    }
                    else
                    {
                        orderDetailList = OrderDetailBLL.ReadList(orderRefund.OrderId);
                    }

                    orderRefundActionList = OrderRefundActionBLL.ReadList(orderRefund.Id);
                }
            }
        }
Exemplo n.º 23
0
        public static int Add(OrderRefundInfo entity)
        {
            int id = dal.Add(entity);

            //增加订单详细表中的退款商品数量
            if (id > 0)
            {
                //退商品
                if (entity.OrderDetailId > 0)
                {
                    OrderDetailBLL.ChangeRefundCount(entity.OrderDetailId, entity.RefundCount, ChangeAction.Plus);
                }
                //退订单
                else
                {
                    foreach (var orderDetail in OrderDetailBLL.ReadList(entity.OrderId))
                    {
                        OrderDetailBLL.ChangeRefundCount(orderDetail.Id, orderDetail.BuyCount - orderDetail.RefundCount, ChangeAction.Plus);
                    }
                }
            }

            return(id);
        }
Exemplo n.º 24
0
        public object GetOrders(int?status, int pageIndex, int pageSize = 8)
        {
            CheckUserLogin();
            IShopAppletService iShopAppletService = ServiceProvider.Instance <IShopAppletService> .Create;
            var orderService = ServiceProvider.Instance <IOrderService> .Create;
            var allOrders    = orderService.GetTopOrders(int.MaxValue, CurrentUser.Id);

            //待评价
            var queryModelAll = new OrderQuery()
            {
                Status    = OrderInfo.OrderOperateStatus.Finish,
                UserId    = CurrentUser.Id,
                PageSize  = int.MaxValue,
                PageNo    = 1,
                Commented = false
            };
            var allOrderCounts     = allOrders.Count();
            var waitingForComments = orderService.GetOrders <OrderInfo>(queryModelAll).Total;
            var waitingForRecieve  = allOrders.Count(item => item.OrderStatus == OrderInfo.OrderOperateStatus.WaitReceiving); //获取待收货订单数
            var waitingForPay      = allOrders.Count(item => item.OrderStatus == OrderInfo.OrderOperateStatus.WaitPay);       //获取待支付订单数

            if (status.HasValue && status == 0)
            {
                status = null;
            }
            var queryModel = new OrderQuery()
            {
                Status   = (OrderInfo.OrderOperateStatus?)status,
                UserId   = CurrentUser.Id,
                PageSize = pageSize,
                PageNo   = pageIndex
            };

            if (queryModel.Status.HasValue && queryModel.Status.Value == OrderInfo.OrderOperateStatus.WaitReceiving)
            {
                if (queryModel.MoreStatus == null)
                {
                    queryModel.MoreStatus = new List <OrderInfo.OrderOperateStatus>()
                    {
                    };
                }
                queryModel.MoreStatus.Add(OrderInfo.OrderOperateStatus.WaitSelfPickUp);
            }
            if (status.GetValueOrDefault() == (int)OrderInfo.OrderOperateStatus.Finish)
            {
                queryModel.Commented = false;//只查询未评价的订单
            }
            ObsoletePageModel <OrderInfo> orders = orderService.GetOrders <OrderInfo>(queryModel);
            var productService     = ServiceProvider.Instance <IProductService> .Create;
            var vshopService       = ServiceProvider.Instance <IVShopService> .Create;
            var orderRefundService = ServiceProvider.Instance <IRefundService> .Create;
            var orderItems         = OrderApplication.GetOrderItemsByOrderId(orders.Models.Select(p => p.Id));
            var orderRefunds       = OrderApplication.GetOrderRefunds(orderItems.Select(p => p.Id));
            var result             = orders.Models.ToArray().Select(item =>
            {
                if (item.OrderStatus >= OrderInfo.OrderOperateStatus.WaitDelivery)
                {
                    orderService.CalculateOrderItemRefund(item.Id);
                }
                var vshop      = vshopService.GetVShopByShopId(item.ShopId);
                var _ordrefobj = orderRefundService.GetOrderRefundByOrderId(item.Id) ?? new OrderRefundInfo {
                    Id = 0
                };
                if (item.OrderStatus != OrderInfo.OrderOperateStatus.WaitDelivery && item.OrderStatus != OrderInfo.OrderOperateStatus.WaitSelfPickUp)
                {
                    _ordrefobj = new OrderRefundInfo {
                        Id = 0
                    };
                }
                int?ordrefstate = (_ordrefobj == null ? null : (int?)_ordrefobj.SellerAuditStatus);
                ordrefstate     = (ordrefstate > 4 ? (int?)_ordrefobj.ManagerConfirmStatus : ordrefstate);
                //参照PC端会员中心的状态描述信息
                string statusText = item.OrderStatus.ToDescription();
                if (item.OrderStatus == OrderInfo.OrderOperateStatus.WaitDelivery || item.OrderStatus == OrderInfo.OrderOperateStatus.WaitSelfPickUp)
                {
                    if (ordrefstate.HasValue && ordrefstate != 0 && ordrefstate != 4)
                    {
                        statusText = "退款中";
                    }
                }
                var shopInfo = ServiceProvider.Instance <IShopService> .Create.GetShop(item.ShopId);
                if (shopInfo != null)
                {
                    shopInfo.Logo = Himall.Core.HimallIO.GetRomoteImagePath(shopInfo.Logo);
                    //是否可退货、退款
                    bool IsShowReturn = (item.OrderStatus == Himall.Model.OrderInfo.OrderOperateStatus.WaitDelivery || item.OrderStatus == Himall.Model.OrderInfo.OrderOperateStatus.WaitSelfPickUp) &&
                                        !item.RefundStats.HasValue && item.PaymentType != Himall.Model.OrderInfo.PaymentTypes.CashOnDelivery && item.PaymentType != Himall.Model.OrderInfo.PaymentTypes.None &&
                                        (item.FightGroupCanRefund == null || item.FightGroupCanRefund == true) && ordrefstate.GetValueOrDefault().Equals(0);
                    return(new
                    {
                        PayCode = item.PayCode,
                        ShopId = item.ShopId,
                        ShopLogo = shopInfo.Logo,
                        OrderAmount = item.OrderAmount,
                        OrderId = item.Id,
                        StatusText = statusText,
                        Status = item.OrderStatus,
                        orderType = item.OrderType,
                        orderTypeName = item.OrderType.ToDescription(),
                        shopname = item.ShopName,
                        vshopId = vshop == null ? 0 : vshop.Id,
                        Amount = item.OrderTotalAmount.ToString("F2"),
                        Quantity = item.OrderProductQuantity,
                        commentCount = item.OrderCommentInfo.Count(),
                        pickupCode = item.PickupCode,
                        EnabledRefundAmount = item.OrderEnabledRefundAmount,
                        LineItems = item.OrderItemInfo.Select(a =>
                        {
                            var prodata = productService.GetProduct(a.ProductId);
                            ProductTypeInfo typeInfo = ServiceProvider.Instance <ITypeService> .Create.GetType(prodata.TypeId);
                            string colorAlias = (typeInfo == null || string.IsNullOrEmpty(typeInfo.ColorAlias)) ? SpecificationType.Color.ToDescription() : typeInfo.ColorAlias;
                            string sizeAlias = (typeInfo == null || string.IsNullOrEmpty(typeInfo.SizeAlias)) ? SpecificationType.Size.ToDescription() : typeInfo.SizeAlias;
                            string versionAlias = (typeInfo == null || string.IsNullOrEmpty(typeInfo.VersionAlias)) ? SpecificationType.Version.ToDescription() : typeInfo.VersionAlias;
                            var itemStatusText = "";
                            var itemrefund = orderRefunds.Where(or => or.OrderItemId == a.Id).FirstOrDefault(d => d.RefundMode != OrderRefundInfo.OrderRefundMode.OrderRefund);
                            int?itemrefstate = (itemrefund == null ? 0 : (int?)itemrefund.SellerAuditStatus);
                            itemrefstate = (itemrefstate > 4 ? (int?)itemrefund.ManagerConfirmStatus : itemrefstate);
                            if (itemrefund != null)
                            {     //默认为商家处理进度
                                if (itemrefstate == 4)
                                { //商家拒绝
                                    itemStatusText = "";
                                }
                                else
                                {
                                    itemStatusText = "售后处理中";
                                }
                            }
                            if (itemrefstate > 4)
                            {//如果商家已经处理完,则显示平台处理进度
                                if (itemrefstate == 7)
                                {
                                    itemStatusText = "退款成功";
                                }
                            }

                            var activeModel = ServiceProvider.Instance <IFightGroupService> .Create.GetActiveByProId(a.ProductId);

                            return new
                            {
                                Status = itemrefstate,
                                StatusText = itemStatusText,
                                Id = activeModel.Id,
                                productId = a.ProductId,
                                Name = a.ProductName,
                                Image = activeModel.ProductDefaultImage,
                                Amount = a.Quantity,
                                Price = a.SalePrice,
                                Unit = prodata == null ? "" : prodata.MeasureUnit,
                                SkuText = colorAlias + ":" + a.Color + " " + sizeAlias + ":" + a.Size + " " + versionAlias + ":" + a.Version,
                                color = a.Color,
                                size = a.Size,
                                version = a.Version,
                                ColorAlias = colorAlias,
                                SizeAlias = sizeAlias,
                                VersionAlias = versionAlias,
                                RefundStats = itemrefstate,
                                OrderRefundId = (itemrefund == null ? 0 : itemrefund.Id),
                                EnabledRefundAmount = a.EnabledRefundAmount,
                                IsShowRefund = IsShowReturn,
                                IsShowAfterSale = IsShowReturn,
                                SalePrice = iShopAppletService.GetSkuSalePrice(a.SkuId, a.ProductId)
                            };
                        }),
                        RefundStats = ordrefstate,
                        OrderRefundId = _ordrefobj.Id,
                        IsShowLogistics = !string.IsNullOrWhiteSpace(item.ShipOrderNumber),
                        ShipOrderNumber = item.ShipOrderNumber,
                        IsShowCreview = item.OrderStatus == OrderInfo.OrderOperateStatus.Finish,
                        IsShowPreview = false,
                        Invoice = item.InvoiceType.ToDescription(),
                        InvoiceValue = (int)item.InvoiceType,
                        InvoiceContext = item.InvoiceContext,
                        InvoiceTitle = item.InvoiceTitle,
                        PaymentType = item.PaymentType.ToDescription(),
                        PaymentTypeValue = (int)item.PaymentType,
                        IsShowClose = (item.OrderStatus == OrderInfo.OrderOperateStatus.WaitPay),
                        IsShowFinishOrder = (item.OrderStatus == OrderInfo.OrderOperateStatus.WaitReceiving),
                        IsShowRefund = IsShowReturn,
                        IsShowReturn = IsShowReturn,
                        IsShowTakeCodeQRCode = !string.IsNullOrWhiteSpace(item.PickupCode),
                        OrderDate = item.OrderDate,
                        SupplierId = 0,
                        ShipperName = string.Empty,
                        StoreName = item.ShopName,
                        IsShowCertification = false,
                        CreviewText = !HasAppendComment(item) ? "评价订单" : "追加评论",
                        ProductCommentPoint = 0
                    });
                }
                else
                {
                    return(null);
                }
            });

            return(Json(new { Status = "OK", AllOrderCounts = allOrderCounts, WaitingForComments = waitingForComments, WaitingForRecieve = waitingForRecieve, WaitingForPay = waitingForPay, Data = result }));
        }
Exemplo n.º 25
0
        public object GetOrders(int?orderStatus, int pageNo, int pageSize = 8)
        {
            CheckUserLogin();
            var allOrders = ServiceProvider.Instance <IOrderService> .Create.GetTopOrders(int.MaxValue, CurrentUser.Id);

            var orderService = ServiceProvider.Instance <IOrderService> .Create;

            //待评价
            var queryModelAll = new OrderQuery()
            {
                Status    = OrderInfo.OrderOperateStatus.Finish,
                UserId    = CurrentUser.Id,
                PageSize  = int.MaxValue,
                PageNo    = 1,
                Commented = false
            };
            var allOrderCounts     = allOrders.Count();
            var waitingForComments = orderService.GetOrders <OrderInfo>(queryModelAll).Total;
            var waitingForRecieve  = allOrders.Count(item => item.OrderStatus == OrderInfo.OrderOperateStatus.WaitReceiving); //获取待收货订单数
            var waitingForPay      = allOrders.Count(item => item.OrderStatus == OrderInfo.OrderOperateStatus.WaitPay);       //获取待支付订单数

            if (orderStatus.HasValue && orderStatus == 0)
            {
                orderStatus = null;
            }
            var queryModel = new OrderQuery()
            {
                Status   = (OrderInfo.OrderOperateStatus?)orderStatus,
                UserId   = CurrentUser.Id,
                PageSize = pageSize,
                PageNo   = pageNo
            };

            if (queryModel.Status.HasValue && queryModel.Status.Value == OrderInfo.OrderOperateStatus.WaitReceiving)
            {
                if (queryModel.MoreStatus == null)
                {
                    queryModel.MoreStatus = new List <OrderInfo.OrderOperateStatus>()
                    {
                    };
                }
                queryModel.MoreStatus.Add(OrderInfo.OrderOperateStatus.WaitSelfPickUp);
            }
            if (orderStatus.GetValueOrDefault() == (int)OrderInfo.OrderOperateStatus.Finish)
            {
                queryModel.Commented = false;//只查询未评价的订单
            }
            ObsoletePageModel <OrderInfo> orders = orderService.GetOrders <OrderInfo>(queryModel);
            var productService     = ServiceProvider.Instance <IProductService> .Create;
            var vshopService       = ServiceProvider.Instance <IVShopService> .Create;
            var orderRefundService = ServiceProvider.Instance <IRefundService> .Create;
            var orderItems         = OrderApplication.GetOrderItemsByOrderId(orders.Models.Select(p => p.Id));
            var orderRefunds       = OrderApplication.GetOrderRefunds(orderItems.Select(p => p.Id));
            var result             = orders.Models.ToArray().Select(item =>
            {
                if (item.OrderStatus >= OrderInfo.OrderOperateStatus.WaitDelivery)
                {
                    orderService.CalculateOrderItemRefund(item.Id);
                }
                var vshop      = vshopService.GetVShopByShopId(item.ShopId);
                var _ordrefobj = orderRefundService.GetOrderRefundByOrderId(item.Id) ?? new OrderRefundInfo {
                    Id = 0
                };
                if (item.OrderStatus != OrderInfo.OrderOperateStatus.WaitDelivery && item.OrderStatus != OrderInfo.OrderOperateStatus.WaitSelfPickUp)
                {
                    _ordrefobj = new OrderRefundInfo {
                        Id = 0
                    };
                }
                int?ordrefstate = (_ordrefobj == null ? null : (int?)_ordrefobj.SellerAuditStatus);
                ordrefstate     = (ordrefstate > 4 ? (int?)_ordrefobj.ManagerConfirmStatus : ordrefstate);
                return(new
                {
                    id = item.Id,
                    status = item.OrderStatus.ToDescription(),
                    orderStatus = item.OrderStatus,
                    orderType = item.OrderType,
                    orderTypeName = item.OrderType.ToDescription(),
                    shopname = item.ShopName,
                    vshopId = vshop == null ? 0 : vshop.Id,
                    orderTotalAmount = item.OrderTotalAmount.ToString("F2"),
                    productCount = item.OrderProductQuantity,
                    commentCount = item.OrderCommentInfo.Count(),
                    pickupCode = item.PickupCode,
                    EnabledRefundAmount = item.OrderEnabledRefundAmount,
                    itemInfo = item.OrderItemInfo.Select(a =>
                    {
                        var prodata = productService.GetProduct(a.ProductId);
                        ProductTypeInfo typeInfo = ServiceProvider.Instance <ITypeService> .Create.GetType(prodata.TypeId);
                        string colorAlias = (typeInfo == null || string.IsNullOrEmpty(typeInfo.ColorAlias)) ? SpecificationType.Color.ToDescription() : typeInfo.ColorAlias;
                        string sizeAlias = (typeInfo == null || string.IsNullOrEmpty(typeInfo.SizeAlias)) ? SpecificationType.Size.ToDescription() : typeInfo.SizeAlias;
                        string versionAlias = (typeInfo == null || string.IsNullOrEmpty(typeInfo.VersionAlias)) ? SpecificationType.Version.ToDescription() : typeInfo.VersionAlias;

                        var itemrefund = orderRefunds.Where(or => or.OrderItemId == a.Id).FirstOrDefault(d => d.RefundMode != OrderRefundInfo.OrderRefundMode.OrderRefund);
                        int?itemrefstate = (itemrefund == null ? null : (int?)itemrefund.SellerAuditStatus);
                        itemrefstate = (itemrefstate > 4 ? (int?)itemrefund.ManagerConfirmStatus : itemrefstate);

                        return new
                        {
                            productId = a.ProductId,
                            productName = a.ProductName,
                            image = Core.HimallIO.GetRomoteProductSizeImage(a.ThumbnailsUrl, 1, (int)Himall.CommonModel.ImageSize.Size_350),
                            count = a.Quantity,
                            price = a.SalePrice,
                            Unit = prodata == null ? "" : prodata.MeasureUnit,
                            color = a.Color,
                            size = a.Size,
                            version = a.Version,
                            ColorAlias = colorAlias,
                            SizeAlias = sizeAlias,
                            VersionAlias = versionAlias,
                            RefundStats = itemrefstate,
                            OrderRefundId = (itemrefund == null ? 0 : itemrefund.Id),
                            EnabledRefundAmount = a.EnabledRefundAmount
                        };
                    }),
                    RefundStats = ordrefstate,
                    OrderRefundId = _ordrefobj.Id,
                    HasExpressStatus = !string.IsNullOrWhiteSpace(item.ShipOrderNumber),
                    HasAppendComment = HasAppendComment(item),
                    Invoice = item.InvoiceType.ToDescription(),
                    InvoiceValue = (int)item.InvoiceType,
                    InvoiceContext = item.InvoiceContext,
                    InvoiceTitle = item.InvoiceTitle,
                    PaymentType = item.PaymentType.ToDescription(),
                    PaymentTypeValue = (int)item.PaymentType,
                    CanRefund = (item.OrderStatus == Himall.Model.OrderInfo.OrderOperateStatus.WaitDelivery || item.OrderStatus == Himall.Model.OrderInfo.OrderOperateStatus.WaitSelfPickUp) &&
                                !item.RefundStats.HasValue && item.PaymentType != Himall.Model.OrderInfo.PaymentTypes.CashOnDelivery && item.PaymentType != Himall.Model.OrderInfo.PaymentTypes.None &&
                                (item.FightGroupCanRefund == null || item.FightGroupCanRefund == true) && ordrefstate.GetValueOrDefault().Equals(0)
                });
            });

            return(Json(new { Success = "true", AllOrderCounts = allOrderCounts, WaitingForComments = waitingForComments, WaitingForRecieve = waitingForRecieve, WaitingForPay = waitingForPay, Orders = result }));
        }
Exemplo n.º 26
0
        public JsonResult RefundApply(OrderRefundInfo info)
        {
            decimal?  nullable;
            OrderInfo order = ServiceHelper.Create <IOrderService>().GetOrder(info.OrderId, base.CurrentUser.Id);

            if (order == null)
            {
                throw new HimallException("该订单已删除或不属于该用户");
            }
            if (order.OrderStatus < OrderInfo.OrderOperateStatus.WaitDelivery)
            {
                throw new HimallException("错误的售后申请,订单状态有误");
            }
            if (order.OrderStatus == OrderInfo.OrderOperateStatus.WaitDelivery)
            {
                info.RefundMode     = OrderRefundInfo.OrderRefundMode.OrderRefund;
                info.ReturnQuantity = 0;
            }
            if (info.RefundType == 1)
            {
                info.ReturnQuantity = 0;
                info.IsReturn       = false;
            }
            if (info.ReturnQuantity < 0)
            {
                throw new HimallException("错误的退货数量");
            }
            OrderItemInfo orderItemInfo = order.OrderItemInfo.FirstOrDefault((OrderItemInfo a) => a.Id == info.OrderItemId);

            if (orderItemInfo == null && info.RefundMode != OrderRefundInfo.OrderRefundMode.OrderRefund)
            {
                throw new HimallException("该订单条目已删除或不属于该用户");
            }
            if (info.RefundMode != OrderRefundInfo.OrderRefundMode.OrderRefund)
            {
                decimal amount = info.Amount;
                decimal?enabledRefundAmount = orderItemInfo.EnabledRefundAmount;
                decimal refundPrice         = orderItemInfo.RefundPrice;
                if (enabledRefundAmount.HasValue)
                {
                    nullable = new decimal?(enabledRefundAmount.GetValueOrDefault() - refundPrice);
                }
                else
                {
                    nullable = null;
                }
                decimal?nullable1 = nullable;
                if ((amount <= nullable1.GetValueOrDefault() ? false : nullable1.HasValue))
                {
                    throw new HimallException("退款金额不能超过订单的可退金额");
                }
                if (info.ReturnQuantity > orderItemInfo.Quantity - orderItemInfo.ReturnQuantity)
                {
                    throw new HimallException("退货数量不可以超出可退数量");
                }
            }
            else
            {
                if (order.OrderStatus != OrderInfo.OrderOperateStatus.WaitDelivery)
                {
                    throw new HimallException("错误的订单退款申请,订单状态有误");
                }
                info.IsReturn       = false;
                info.ReturnQuantity = 0;
                if (info.Amount > order.OrderEnabledRefundAmount)
                {
                    throw new HimallException("退款金额不能超过订单的实际支付金额");
                }
            }
            info.IsReturn = false;
            if (info.ReturnQuantity > 0)
            {
                info.IsReturn = true;
            }
            if (info.RefundType == 2)
            {
                info.IsReturn = true;
            }
            if (info.IsReturn && info.ReturnQuantity < 1)
            {
                throw new HimallException("错误的退货数量");
            }
            if (info.Amount <= new decimal(0))
            {
                throw new HimallException("错误的退款金额");
            }
            info.ShopId    = order.ShopId;
            info.ShopName  = order.ShopName;
            info.UserId    = base.CurrentUser.Id;
            info.Applicant = base.CurrentUser.UserName;
            info.ApplyDate = DateTime.Now;
            info.Reason    = OrderRefundController.HTMLEncode(info.Reason.Replace("'", "‘").Replace("\"", "”"));
            ServiceHelper.Create <IRefundService>().AddOrderRefund(info);
            return(Json(new { success = true, msg = "提交成功", id = info.Id }));
        }
Exemplo n.º 27
0
 public void OnOrderRefundCompleted(ResturantPlatformType platformType, OrderRefundInfo info)
 {
 }
Exemplo n.º 28
0
        /// <summary>
        /// 订单项退货退款
        /// </summary>
        /// <returns></returns>
        public object PostApplyReturn(RefundApplyReturnPModel model)
        {
            var result = new BaseResultModel(true);

            CheckUserLogin();

            try
            {
                OrderRefundInfo info      = new OrderRefundInfo();
                var             ordser    = ServiceProvider.Instance <IOrderService> .Create;
                var             refundser = ServiceProvider.Instance <IRefundService> .Create;
                //计算可退金额 预留
                ordser.CalculateOrderItemRefund(model.orderId);
                var order = ordser.GetOrder(model.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;
                }
                info.formId = model.formId;
                //参数处理
                if (!model.refundId.HasValue)  // 通过skuid获取售后编号
                {
                    if (info.RefundMode == OrderRefundInfo.OrderRefundMode.OrderRefund)
                    {
                        var _tmprefund = refundser.GetOrderRefundByOrderId(model.orderId);
                        if (_tmprefund != null)
                        {
                            model.refundId = _tmprefund.Id;
                        }
                    }
                    else
                    {
                        if (!model.OrderItemId.HasValue)
                        {
                            if (string.IsNullOrWhiteSpace(model.skuId))
                            {
                                throw new Himall.Core.HimallException("参数错误");
                            }
                            foreach (var item in order.OrderItemInfo)
                            {
                                if (item.SkuId == model.skuId)
                                {
                                    model.OrderItemId = item.Id;
                                }
                            }
                        }
                    }
                }
                else
                {
                    if (info.RefundMode != OrderRefundInfo.OrderRefundMode.OrderRefund)
                    {
                        var _tmprefund = refundser.GetOrderRefund(model.refundId.Value);
                        if (_tmprefund == null)
                        {
                            throw new Himall.Core.HimallException("参数错误");
                        }
                        model.OrderItemId = _tmprefund.OrderItemId;
                    }
                }

                #region 表单数据
                info.OrderId = model.orderId;
                if (null != model.OrderItemId)
                {
                    info.OrderItemId = model.OrderItemId.Value;
                }
                if (null != model.refundId)
                {
                    info.Id = model.refundId.Value;
                }
                info.RefundType       = model.Quantity > 0 ? 2 : 1;
                info.ReturnQuantity   = model.Quantity;
                info.Amount           = model.RefundAmount;
                info.Reason           = model.RefundReason;
                info.ContactPerson    = model.ContactPerson;
                info.ContactCellPhone = model.ContactCellPhone;
                info.RefundPayType    = model.RefundType;
                #endregion

                #region 初始化售后单的数据
                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
                if (!string.IsNullOrEmpty(model.UserCredentials))
                {
                    var certPics = model.UserCredentials.Split(',');
                    switch (certPics.Length)
                    {
                    case 1:
                        info.CertPic1 = MoveImages(certPics[0], CurrentUser.Id, info.OrderItemId);
                        break;

                    case 2:
                        info.CertPic1 = MoveImages(certPics[0], CurrentUser.Id, info.OrderItemId);
                        info.CertPic2 = MoveImages(certPics[1], CurrentUser.Id, info.OrderItemId);
                        break;

                    case 3:
                        info.CertPic1 = MoveImages(certPics[0], CurrentUser.Id, info.OrderItemId);
                        info.CertPic2 = MoveImages(certPics[1], CurrentUser.Id, info.OrderItemId);
                        info.CertPic3 = MoveImages(certPics[2], CurrentUser.Id, info.OrderItemId);
                        break;
                    }
                }
                //info.RefundAccount = HTMLEncode(info.RefundAccount.Replace("'", "‘").Replace("\"", "”"));

                if (info.Id > 0)
                {
                    refundser.ActiveRefund(info);
                }
                else
                {
                    refundser.AddOrderRefund(info);
                }
                result.SetStatus(true);
                result.Message = "成功的申请了售后";
                return(Json(new { Status = result.Status, Message = result.Message }));
            }
            catch (HimallException he)
            {
                result.SetStatus(false);
                result.Message = he.Message;
                return(Json(new { Status = result.Status, Message = result.Message }));
            }
            catch (Exception ex)
            {
                Log.Error("[SPAPI]Refund:" + ex.Message);
                result.SetStatus(false);
                result.Message = "系统内部异常";
                return(Json(new { Status = result.Status, Message = result.Message }));
            }
        }
Exemplo n.º 29
0
        /// <summary>
        /// 申请订单退款
        /// </summary>
        /// <returns></returns>
        public object PostApplyRefund(RefundApplyRefundPModel model)
        {
            var result = new BaseResultModel(true);

            CheckUserLogin();

            try
            {
                var ordser    = ServiceProvider.Instance <IOrderService> .Create;
                var refundser = ServiceProvider.Instance <IRefundService> .Create;

                //计算可退金额 预留
                ordser.CalculateOrderItemRefund(model.orderId);
                //参数处理
                if (!model.refundId.HasValue)
                {
                    var _tmprefund = refundser.GetOrderRefundByOrderId(model.orderId);
                    if (_tmprefund != null)
                    {
                        model.refundId = _tmprefund.Id;
                    }
                }

                OrderRefundInfo info = new OrderRefundInfo();

                #region 表单数据
                info.OrderId = model.orderId;
                if (null != model.OrderItemId)
                {
                    info.OrderItemId = model.OrderItemId.Value;
                }
                if (null != model.refundId)
                {
                    info.Id = model.refundId.Value;
                }
                info.RefundType       = 1;
                info.ReturnQuantity   = 0;
                info.Reason           = model.RefundReason;
                info.ContactPerson    = model.ContactPerson;
                info.ContactCellPhone = model.ContactCellPhone;
                info.RefundPayType    = model.RefundType;

                info.formId = model.formId;
                #endregion

                #region 初始化售后单的数据
                var order = ordser.GetOrder(info.OrderId, CurrentUser.Id);
                info.Amount = order.OrderEnabledRefundAmount;
                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;
                }
                else
                {
                    throw new Himall.Core.HimallException("仅待发货或待自提订单可以申请订单退款");
                }
                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);
                }
                result.SetStatus(true);
                result.Message = "成功的申请了退款";
                return(Json(new { Status = result.Status, Message = result.Message }));
            }
            catch (HimallException he)
            {
                result.SetStatus(false);
                result.Message = he.Message;
                return(Json(new { Status = result.Status, Message = result.Message }));
            }
            catch (Exception ex)
            {
                Log.Error("[SPAPI]Refund:" + ex.Message);
                result.SetStatus(false);
                result.Message = "系统内部异常";
                return(Json(new { Status = result.Status, Message = result.Message }));
            }
        }
        public TaskStatus Handle(IHttpProxy httpHandler)
        {
            httpHandler.ResponseContentType = "application/json";
            var forms = httpHandler.Form.ToObject <SortedDictionary <string, string> >();

            try
            {
                if (forms.Count > 0)
                {
                    //验证sign
                    var config = new Config(ResturantFactory.ResturantListener.OnGetPlatformConfigXml(ResturantPlatformType.Meituan));
                    if (forms["sign"] != MeituanHelper.Sign(forms, config.SignKey))
                    {
                        throw new Exception("签名验证失败");
                    }


                    string notifyType = forms["notifyType"];

                    /*
                     * part	发起退款
                     * agree	确认退款
                     * reject	驳回退款
                     */
                    OrderRefundInfo info = new OrderRefundInfo();
                    info.OrderID = forms["orderId"];
                    info.Reason  = forms["reason"];
                    info.Money   = Convert.ToDouble(forms["money"]);
                    if (ResturantFactory.ResturantListener != null)
                    {
                        new Thread(() =>
                        {
                            try
                            {
                                var foodJsonArr = (Newtonsoft.Json.Linq.JArray)Newtonsoft.Json.JsonConvert.DeserializeObject(forms["food"]);
                                for (int i = 0; i < foodJsonArr.Count; i++)
                                {
                                    var dishinfo         = new RefundDishInfo();
                                    dishinfo.DishName    = foodJsonArr[i].Value <string>("food_name");
                                    dishinfo.ErpDishId   = foodJsonArr[i].Value <string>("app_food_code");
                                    dishinfo.RefundPrice = foodJsonArr[i].Value <double>("refund_price");
                                    dishinfo.Price       = foodJsonArr[i].Value <double>("origin_food_price");
                                    dishinfo.Quantity    = foodJsonArr[i].Value <int>("count");
                                    info.RefundDishInfos.Add(dishinfo);
                                }
                            }
                            catch
                            {
                            }
                            try
                            {
                                if (notifyType == "part")
                                {
                                    ResturantFactory.ResturantListener.OnOrderRefund(ResturantPlatformType.Meituan, info);
                                }
                                else if (notifyType == "agree")
                                {
                                    ResturantFactory.ResturantListener.OnOrderRefundCompleted(ResturantPlatformType.Meituan, info);
                                }
                            }
                            catch { }
                        }).Start();
                    }
                }
            }
            catch (Exception ex)
            {
                using (Log log = new Log("美团OrderPartRefundCallback解析错误"))
                {
                    log.Log(ex.ToString());
                }
                throw ex;
            }
            httpHandler.ResponseWrite("{\"data\":\"OK\"}");

            return(TaskStatus.Completed);
        }