/// <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); }
/// <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="mallRma">退货单实体</param> /// <returns>处理结果</returns> /// <remarks>2013-8-29 陶辉 创建</remarks> /// <remarks>2013-09-10 朱家宏 实现</remarks> /// <remarks>2013-10-21 黄志勇 修改退换货子表实退商品金额</remarks> public Result ImportMallRma(UpGradeRma mallRma) { //直接申请退换单,根据原订单匹配成功的商品明细进行退货 var result = new Result(); try { //升舱订单数据 var dsOrder = BLL.MallSeller.DsOrderBo.Instance.GetDsOrderByMallOrderId(mallRma.MallOrderId); var dsOrderItems = BLL.MallSeller.DsOrderBo.Instance.GetDsOrderItems(dsOrder.SysNo); //HYT订单主表数据 var soOrder = DataAccess.Order.ISoOrderDao.Instance.GetByTransactionSysNo(dsOrder.OrderTransactionSysNo); if (soOrder.Status != (int)Model.WorkflowStatus.OrderStatus.销售单状态.已完成) { result.Message = "未完成的订单不允许做此操作。"; result.Status = false; result.StatusCode = -1; return(result); } //订单明细数据 var soOrderItems = BLL.Order.SoOrderBo.Instance.GetOrderItemsByOrderId(soOrder.SysNo); if (soOrderItems == null) { throw new ArgumentNullException(); } //退换货明细 var rcReturnItems = new List <RcReturnItem>(); foreach (var item in mallRma.RmaItems) { var outitem = Hyt.BLL.Warehouse.WhWarehouseBo.Instance.GetWhStockOutItem(item.StockOutItemSysNo); SoOrderItem soOrderItem = null; if (outitem != null) { soOrderItem = soOrderItems.FirstOrDefault(m => m.SysNo == outitem.OrderItemSysNo); } if (soOrderItem != null) { var rcReturnItem = new RcReturnItem { OriginPrice = soOrderItem.OriginalPrice, ProductName = soOrderItem.ProductName, ProductSysNo = int.Parse(item.HytProductCode), ReturnPriceType = (int)Model.WorkflowStatus.RmaStatus.商品退款价格类型.自定义价格, ReturnType = (int)Model.WorkflowStatus.RmaStatus.商品退换货类型.新品, RmaQuantity = item.MallQuantity, RmaReason = "", StockOutItemSysNo = item.StockOutItemSysNo, RefundProductAmount = Math.Round(outitem.RealSalesAmount * ((decimal)item.MallQuantity / (decimal)outitem.ProductQuantity), 2) }; rcReturnItems.Add(rcReturnItem); } } var refundProductAmount = rcReturnItems.Sum(o => o.RefundProductAmount); //退款金额合计 var rcReturn = new CBRcReturn { CreateBy = soOrder.CustomerSysNo, CreateDate = DateTime.Now, CustomerSysNo = soOrder.CustomerSysNo, HandleDepartment = (int)Model.WorkflowStatus.RmaStatus.退换货处理部门.客服中心, InvoiceSysNo = soOrder.InvoiceSysNo, LastUpdateBy = soOrder.OrderCreatorSysNo, LastUpdateDate = DateTime.Now, OrderSysNo = soOrder.SysNo, ReceiveAddressSysNo = soOrder.ReceiveAddressSysNo, RMARemark = "", RmaType = (int)Model.WorkflowStatus.RmaStatus.RMA类型.售后退货, Source = (int)Model.WorkflowStatus.RmaStatus.退换货申请单来源.分销商, Status = (int)Model.WorkflowStatus.RmaStatus.退换货状态.待审核, WarehouseSysNo = soOrder.DefaultWarehouseSysNo, RMAItems = rcReturnItems, DeductedInvoiceAmount = 0, InternalRemark = mallRma.BuyerRmaReason,//退款说明 IsPickUpInvoice = 0, OrginAmount = refundProductAmount, OrginPoint = (int)refundProductAmount, RefundPoint = (int)refundProductAmount, PickUpAddressSysNo = 0, PickUpTime = "", PickupTypeSysNo = 0, RedeemAmount = 0, RefundAccount = "", RefundAccountName = "", RefundBank = "", RefundBy = 0, ShipTypeSysNo = 0, RefundDate = DateTime.Now, RefundProductAmount = refundProductAmount, RefundTotalAmount = refundProductAmount, RefundType = (int)Hyt.Model.WorkflowStatus.RmaStatus.退换货退款方式.分销商预存 }; //当前操作用户 var htyUserSysNo = IDsOrderDao.Instance.GetDealer(mallRma.DealerSysNo).UserSysNo; var syUser = BLL.Sys.SyUserBo.Instance.GetSyUser(htyUserSysNo); var pickaddress = BLL.Order.SoOrderBo.Instance.GetOrderReceiveAddress(soOrder.ReceiveAddressSysNo);//收货地址变成取件地址 pickaddress.SysNo = 0; using (var tran = new TransactionScope()) { //创建rma单 var rmaSysNo = BLL.RMA.RmaBo.Instance.InsertRMA(rcReturn, pickaddress, null, syUser); var htyRma = BLL.RMA.RmaBo.Instance.GetRcReturnEntity(rmaSysNo); //分销商退换货单 var dsReturn = new DsReturn { ApplicationTime = mallRma.ApplyTime, BuyerNick = mallRma.MallBuyerName, RmaRemark = mallRma.BuyerRmaReason, DealerMallSysNo = mallRma.DealerMallSysNo, MallOrderId = mallRma.MallOrderId, MallReturnAmount = mallRma.MallRefundFee, MallReturnId = mallRma.MallRmaId, BuyerRemark = mallRma.MallRmaMessage, RmaType = (int)Model.WorkflowStatus.RmaStatus.RMA类型.售后退货, RcReturnSysNo = rmaSysNo, ReturnTransactionSysNo = htyRma.TransactionSysNo }; var dsReturnItems = new List <DsReturnItem>(); foreach (var rmaItem in mallRma.RmaItems) { var myid = BLL.MallSeller.DsOrderBo.Instance.GetDsOrderItemAssociationByOutStockItemNo(rmaItem.StockOutItemSysNo).Select(m => m.DsOrderItemSysNo).FirstOrDefault(); DsOrderItem dsOrderItem = dsOrderItems.FirstOrDefault(m => m.SysNo == myid); if (dsOrderItem == null) { dsOrderItem = new DsOrderItem(); } dsReturnItems.Add(new DsReturnItem { Amount = rmaItem.HytRmaAmount, MallProductAttribute = dsOrderItem.MallProductAttribute, MallProductId = dsOrderItem.MallProductId, MallProductName = dsOrderItem.MallProductName, Quantity = rmaItem.MallQuantity }); } //创建『分销商退换货单』 BLL.MallSeller.DsReturnBo.Instance.Create(dsReturn, dsReturnItems); if (!string.IsNullOrEmpty(mallRma.ImgPaths)) { string[] paths = mallRma.ImgPaths.Split(','); foreach (string str in paths) { BLL.RMA.RmaBo.Instance.InsertRMAImg(new RcReturnImage() { ImageUrl = str, ReturnSysNo = rmaSysNo }); } } result.Message = "操作成功。"; result.Status = true; result.StatusCode = rmaSysNo; tran.Complete(); } } catch { result.Message = "操作失败。"; result.Status = false; result.StatusCode = -1; } return(result); }