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