/// <summary> /// 根据订单获取退货商品列表 /// </summary> /// <param name="orderSysNo">订单编号</param> /// <param name="returyType">退换货乐讯</param> /// <param name="productSysNo">商品系统编号</param> /// <returns></returns> /// <remarks>2013-08-27 邵斌 创建</remarks> public CBWebRMA GetReturnProductListByOrder(int orderSysNo, RmaStatus.RMA类型 returyType, int?productSysNo = null) { var result = new CBWebRMA(); result.Items = new List <CBWebRMAItem>(); //页面出库单显示列表 //判断订单是否存在 var order = BLL.Order.SoOrderBo.Instance.GetEntity(orderSysNo); if (order != null) { result.CustomerSysNo = order.CustomerSysNo; result.ShipType = order.DeliveryTypeSysNo; //原订单配送方式 var rmaItemList = RmaBo.Instance.GetItemListByOrder(orderSysNo); //退换货明细 (2013-08-07 朱成果) var stockOutList = Warehouse.WhWarehouseBo.Instance.GetWhStockOutListByOrderID(orderSysNo, true); //获取该订单的出库单列表(包含出库单明细) CBSimplePdProduct product = null; CBWebRMAItem stockOutItemEx; IList <WhStockOutItem> productItems; //遍历出库单,用出库单设置显示列表 foreach (var stockOut in stockOutList) { //过滤商品,只处理指定商品 if (productSysNo.HasValue) { productItems = stockOut.Items.Where(p => p.ProductSysNo == productSysNo.Value).ToList(); } else { productItems = stockOut.Items; } //遍历每个出库单组合商品 foreach (var item in productItems) { stockOutItemEx = result.Items.FirstOrDefault(i => i.ProductSysNo == item.ProductSysNo); //判断商品是否已经存在列表,如果不存在就读取数据 if (stockOutItemEx == null) { product = BLL.Web.PdProductBo.Instance.GetProduct(item.ProductSysNo); //读取基本数据 stockOutItemEx = new CBWebRMAItem(); stockOutItemEx.StockOutItemSysNo = item.SysNo; stockOutItemEx.ProductSysNo = item.ProductSysNo; stockOutItemEx.ProductName = item.ProductName; stockOutItemEx.OriginalPrice = item.OriginalPrice; stockOutItemEx.PackageDesc = product.PackageDesc; //商品基础信息 stockOutItemEx.Image = product.ProductImage; stockOutItemEx.RealSalesAmount = item.RealSalesAmount; stockOutItemEx.OrderItemSysNo = item.OrderItemSysNo; //添加到退换货明细 result.Items.Add(stockOutItemEx); } //TODO 价格优惠暂时没有实现或确切的计算方式,等待确定业务逻辑和算法 stockOutItemEx.Preferential = 0; //计算实际销售金额和消失数量 stockOutItemEx.RealSalesAmount += item.RealSalesAmount; stockOutItemEx.ProductQuantity += item.ProductQuantity; //判断商品是否可进行退换货操作 if (RmaBo.Instance.OrderRMARequest(stockOut.OrderSysNO, stockOutItemEx.ProductSysNo, (int)returyType)) { //标记能否退换货 stockOutItemEx.EnableRMA = true; //计算可退换货数量 stockOutItemEx.ProductQuantityAble += item.ProductQuantity - RmaBo.Instance.GetAllRmaQuantity( rmaItemList, item.SysNo, 0); } } } //获取取件地址 result.PickUpAddress = BLL.Order.SoOrderBo.Instance.GetOrderReceiveAddress(order.ReceiveAddressSysNo); //获取发票信息 var invoice = BLL.Order.SoOrderBo.Instance.GetFnInvoice(order.InvoiceSysNo); //是否有发票 if (invoice != null) { //如果有发票,并取得发票的状态用于前台判断是否需要退票 result.InvoiceSysNo = invoice.SysNo; result.HasInvoice = true; result.InvoiceStatus = (Hyt.Model.WorkflowStatus.FinanceStatus.发票状态)invoice.Status; } } //安能否退货排序 result.Items = result.Items.OrderByDescending(i => i.EnableRMA).ToList(); result.OrderSysNo = orderSysNo; return(result); }
/// <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); }