Ejemplo n.º 1
0
        /// <summary>
        /// 新建换货单
        /// </summary>
        /// <returns>结果</returns>
        /// <remarks>2013-8-15 杨浩 创建</remarks>
        /// <remarks>2013-09-12 周唐炬 实现</remarks>
        public Result AddExchanges(ExchangeOrders exchange)
        {
            var result = new Result()
            {
                StatusCode = -1
            };

            try
            {
                if (exchange != null)
                {
                    var model = GetExchangesModel(exchange, RmaStatus.RMA类型.售后换货);
                    result = CreateReceiptTransaction(model, exchange);
                }
                else
                {
                    result.Message = "换货单数据不能为空!";
                }
            }
            catch (Exception ex)
            {
                result.Message = ex.Message;
                SysLog.Instance.Error(LogStatus.系统日志来源.商城AndroidApp, "新建换货单" + ex.Message, LogStatus.系统日志目标类型.用户,
                                      CurrentUser.SysNo, ex);
            }
            return(result);
        }
Ejemplo n.º 2
0
        /// <summary>
        /// 创建退换货事务
        /// </summary>
        /// <param name="model">退换货信息</param>
        /// <param name="exchange">客户提交退换货信息</param>
        /// <returns>返回结果</returns>
        /// <remarks>2013-09-12 周唐炬 创建</remarks>
        private static Result CreateReceiptTransaction(CBRcReturn model, ExchangeOrders exchange)
        {
            var result = new Result()
            {
                StatusCode = -1, Status = false
            };
            var syUser = SyUserBo.Instance.GetSyUser(User.SystemUser);

            #region 地址
            //取件地址
            SoReceiveAddress pickAddress = null;
            if (exchange.PickupTypeSysNo == PickupType.百城当日取件)
            {
                var address = BLL.Web.CrCustomerBo.Instance.GetCustomerReceiveAddressBySysno(exchange.PickUpAddressSysNo);
                if (address != null)
                {
                    pickAddress = new SoReceiveAddress
                    {
                        AreaSysNo         = address.AreaSysNo,
                        EmailAddress      = address.EmailAddress,
                        FaxNumber         = address.FaxNumber,
                        Gender            = address.Gender,
                        MobilePhoneNumber = address.MobilePhoneNumber,
                        Name          = address.Name,
                        PhoneNumber   = address.PhoneNumber,
                        StreetAddress = address.StreetAddress,
                        ZipCode       = address.ZipCode
                    };
                }
            }
            //收货地址
            SoReceiveAddress receiveAddress = null;
            if (exchange.ReceiveAddressSysNo == -10)
            {
                var soOrder = SoOrderBo.Instance.GetEntity(exchange.OrderSysNo);
                if (soOrder != null)
                {
                    exchange.ReceiveAddressSysNo = soOrder.ReceiveAddressSysNo;
                    receiveAddress = SoOrderBo.Instance.GetOrderReceiveAddress(exchange.ReceiveAddressSysNo);
                }
            }
            if (exchange.ReceiveAddressSysNo > 0)
            {
                var address =
                    BLL.Web.CrCustomerBo.Instance.GetCustomerReceiveAddressBySysno(exchange.ReceiveAddressSysNo);
                if (address != null)
                {
                    receiveAddress = new SoReceiveAddress
                    {
                        AreaSysNo         = address.AreaSysNo,
                        EmailAddress      = address.EmailAddress,
                        FaxNumber         = address.FaxNumber,
                        Gender            = address.Gender,
                        MobilePhoneNumber = address.MobilePhoneNumber,
                        Name          = address.Name,
                        PhoneNumber   = address.PhoneNumber,
                        StreetAddress = address.StreetAddress,
                        ZipCode       = address.ZipCode
                    };
                }
            }
            #endregion

            var options = new TransactionOptions {
                IsolationLevel = IsolationLevel.ReadCommitted, Timeout = TransactionManager.DefaultTimeout
            };
            using (var scope = new TransactionScope(TransactionScopeOption.Required, options))
            {
                var id = RmaBo.Instance.InsertRMA(model, pickAddress, receiveAddress, syUser);
                if (id > 0)
                {
                    result.Status     = true;
                    result.StatusCode = 1;
                    result.Message    = "退换货申请成功!";
                }
                else
                {
                    result.Message = "系统错误,请稍后重试!";
                }
                scope.Complete();
            }
            return(result);
        }
Ejemplo n.º 3
0
        /// <summary>
        /// 封装退换货单实体
        /// </summary>
        /// <param name="exchange">客户提交退换货信息</param>
        /// <param name="rmaType">RMA类型</param>
        /// <returns>换货单实体</returns>
        /// <remarks>2013-09-12 周唐炬 创建</remarks>
        private CBRcReturn GetExchangesModel(ExchangeOrders exchange, RmaStatus.RMA类型 rmaType)
        {
            //换货单实体
            var model = new CBRcReturn()
            {
                RMAItems            = new List <RcReturnItem>(),
                CustomerSysNo       = exchange.CustomerSysNo,
                OrderSysNo          = exchange.OrderSysNo,
                RMARemark           = exchange.RmaReason,
                PickupTypeSysNo     = exchange.PickupTypeSysNo,
                WarehouseSysNo      = exchange.WarehouseSysNo,
                PickUpAddressSysNo  = exchange.PickUpAddressSysNo,
                ReceiveAddressSysNo = exchange.ReceiveAddressSysNo,
                Status           = (int)WarehouseStatus.退换货单状态.待审核,
                Source           = (int)RmaStatus.退换货申请单来源.会员,
                RmaType          = rmaType.GetHashCode(),
                HandleDepartment = (int)RmaStatus.退换货处理部门.客服中心
            };

            model.CreateBy   = model.LastUpdateBy = User.SystemUser;
            model.CreateDate = model.LastUpdateDate = DateTime.Now;
            //出库单编号
            var stockOutSysNo = 0;

            if (exchange.ProductReturns != null && exchange.ProductReturns.Any())
            {
                #region 退换货商品明细

                foreach (var item in exchange.ProductReturns)
                {
                    var whStockOutItem = WhWarehouseBo.Instance.GetWhStockOutItem(item.StockOutItemSysNo);
                    if (whStockOutItem == null)
                    {
                        throw new HytException("商品出库信息有误,请联系客服!");
                    }
                    stockOutSysNo = whStockOutItem.StockOutSysNo;
                    model.RMAItems.Add(new RcReturnItem
                    {
                        StockOutItemSysNo = item.StockOutItemSysNo,
                        ProductSysNo      = item.ProductSysNo,
                        ProductName       = whStockOutItem.ProductName,
                        OriginPrice       = whStockOutItem.OriginalPrice,
                        RmaQuantity       = item.RmaQuantity,
                        RmaReason         = exchange.RmaReason
                    });
                    #region 重新计算明细退款金额

                    if (rmaType != RmaStatus.RMA类型.售后退货)
                    {
                        continue;
                    }
                    var     rmaItem    = RmaBo.Instance.CalculateRmaAmountByStockOutItem(model.OrderSysNo, model.RMAItems.ToDictionary(x => x.StockOutItemSysNo, x => x.RmaQuantity));
                    decimal fundAmount = 0;
                    foreach (var returnItem in model.RMAItems)
                    {
                        //如果是自定义价格就不重新赋值
                        if (rmaItem != null && rmaItem.StockOutItemAmount != null && returnItem.ReturnPriceType != (int)RmaStatus.商品退款价格类型.自定义价格)
                        {
                            var soi = rmaItem.StockOutItemAmount.FirstOrDefault(x => x.Key == returnItem.StockOutItemSysNo);
                            returnItem.RefundProductAmount = soi.Value;
                        }
                        fundAmount += returnItem.RefundProductAmount;
                    }
                    var rmaItemList = RmaBo.Instance.CalculateRefundRmaAmount(model.OrderSysNo, fundAmount, false);
                    if (rmaItem == null || rmaItemList == null)
                    {
                        continue;
                    }
                    model.OrginPoint            = rmaItem.OrginPoint;
                    model.OrginAmount           = rmaItem.OrginAmount;
                    model.OrginCoin             = rmaItem.OrginCoin;
                    model.CouponAmount          = rmaItem.CouponAmount;
                    model.DeductedInvoiceAmount = model.DeductedInvoiceAmount;
                    model.RefundProductAmount   = rmaItemList.RefundProductAmount;
                    model.RedeemAmount          = rmaItemList.RedeemAmount;
                    model.RefundCoin            = rmaItemList.RefundCoin;
                    model.RefundPoint           = rmaItemList.RefundPoint;
                    //实退总金额(实退商品金额-发票扣款金额-现金补偿金额-实退惠源币)
                    model.RefundTotalAmount = fundAmount - rmaItemList.RedeemAmount - model.DeductedInvoiceAmount - rmaItemList.RefundCoin;

                    #endregion
                }

                #endregion
                //默认退换货仓库
                if (model.WarehouseSysNo == 0)
                {
                    model.WarehouseSysNo = WhWarehouseBo.Instance.Get(stockOutSysNo).WarehouseSysNo;
                }
            }
            else
            {
                throw new HytException("换货商品明细数量应该大于0!");
            }
            return(model);
        }