/// <summary> /// 更新退换货数据 /// </summary> /// <param name="entity">退换货实体</param> /// <returns></returns> /// <remarks>2013-07-11 朱成果 创建</remarks> public abstract void Update(RcReturn entity);
/// <summary> /// 计算退款金额 /// </summary> /// <param name="applyOrder">申请退款表单</param> /// <param name="oldOrder">数据源表单</param> /// <param name="returnEntity">退换货对象</param> /// <param name="returnItems">退换货明细</param> /// <returns></returns> /// <remarks>2013-08-27 邵斌 创建</remarks> public void CuCalculateCharge(CBWebRMA applyOrder, CBWebRMA oldOrder, ref RcReturn returnEntity, ref IList <RcReturnItem> returnItems) { //查找所有申请的商品是否在商品订单中并且是否是可退换货商品 decimal price = 0; decimal totalReturnCharge = 0; #region 构造退换货明细对象 #region 调用吴文强退换货金额计算方法 var queryItems = from ri in applyOrder.Items join oi in oldOrder.Items on ri.ProductSysNo equals oi.ProductSysNo select new { OrderItemSysNo = oi.OrderItemSysNo, ProductQuantity = ri.ProductQuantity }; Dictionary <int, int> items = queryItems.ToDictionary(p => p.OrderItemSysNo, p => p.ProductQuantity); CBRcReturnCalculate cReturn = Hyt.BLL.RMA.RmaBo.Instance.CalculateRmaAmount(applyOrder.OrderSysNo, items); KeyValuePair <int, decimal> productAmount; #endregion //遍历申请商品构造退换货明细对象 foreach (var applyProductInfo in applyOrder.Items) { //查找申请的商品在原商品订单中的对应对象 var cbWebRmaItem = oldOrder.Items.FirstOrDefault(p => p.ProductSysNo == applyProductInfo.ProductSysNo); //如果没有源对象表示这个商品是无效的将继续往下执行(在前面已经校对过可以保证数据时正确的) if (cbWebRmaItem == null) { continue; } //构造退换货对象 var rcReturnItem = new RcReturnItem() { StockOutItemSysNo = cbWebRmaItem.StockOutItemSysNo, RmaReason = applyOrder.Reason, OriginPrice = cbWebRmaItem.OriginalPrice, ProductName = cbWebRmaItem.ProductName, ProductSysNo = cbWebRmaItem.ProductSysNo, ReturnType = (int)RmaStatus.商品退换货类型.新品, RmaQuantity = applyProductInfo.ProductQuantity }; //如果是换货将不计算金额 if (applyOrder.ReturnType == (int)RmaStatus.RMA类型.售后换货) { rcReturnItem.RefundProductAmount = 0; rcReturnItem.ReturnPriceType = 0; } else { rcReturnItem.ReturnPriceType = (int)RmaStatus.商品退款价格类型.自定义价格; //TODO //从吴文强返回结果中查询对应商品的退换货单价 var queryPrice = from oi in oldOrder.Items join nri in cReturn.OrderItemAmount on oi.OrderItemSysNo equals nri.Key where oi.ProductSysNo == applyProductInfo.ProductSysNo select nri.Value; price = queryPrice.Single(); rcReturnItem.RefundProductAmount = price; } returnItems.Add(rcReturnItem); //累计退款金额 totalReturnCharge += rcReturnItem.RefundProductAmount; } #endregion if (applyOrder.ReturnType == (int)RmaStatus.RMA类型.售后退货) { #region 计算退款 //应退 returnEntity.OrginAmount = cReturn.OrginAmount; //应退商品金额 returnEntity.OrginPoint = cReturn.OrginPoint; //退款积分我为1块钱一个积分,所以和退款金额一致 returnEntity.OrginCoin = cReturn.OrginCoin; //应退惠源币 //实退 returnEntity.RefundProductAmount = cReturn.RefundProductAmount; //实退商品金额 returnEntity.RefundPoint = cReturn.RefundPoint; //实退总积分 returnEntity.RefundTotalAmount = cReturn.RefundTotalAmount; returnEntity.RefundCoin = cReturn.RefundCoin; //实退惠源币 returnEntity.HandleDepartment = (int)Model.WorkflowStatus.RmaStatus.退换货处理部门.客服中心; //实体商品金额减去发票扣款=实退总金额 returnEntity.IsPickUpInvoice = (oldOrder.InvoiceStatus == FinanceStatus.发票状态.已取回) ? 1 : 0; if (oldOrder.HasInvoice) { if (oldOrder.InvoiceStatus != FinanceStatus.发票状态.已取回) { returnEntity.IsPickUpInvoice = 1; returnEntity.DeductedInvoiceAmount = cReturn.DeductedInvoiceAmount; returnEntity.RedeemAmount = cReturn.RedeemAmount; returnEntity.CouponAmount = cReturn.CouponAmount; } else { returnEntity.IsPickUpInvoice = 0; returnEntity.DeductedInvoiceAmount = 0; } } #endregion } return; }
/// <summary> /// 插入退换货数据 /// </summary> /// <param name="entity">退换货实体</param> /// <returns>返回新的编号</returns> /// <remarks>2013-07-11 朱成果 创建</remarks> public abstract int Insert(RcReturn entity);
/// <summary> /// 生成退换货申请单 /// </summary> /// <param name="order">申请订单内容</param> /// <param name="customerSysNo">申请客户系统编号</param> /// <returns>创建是否成功的结果对象</returns> /// <remarks>2013-08-27 邵斌 创建</remarks> public Result CreateRMAOrder(CBWebRMA order, int customerSysNo) { Result result = new Result(); RcReturn returnEntity = new RcReturn(); IList <RcReturnItem> returnItems = new List <RcReturnItem>(); //读取退化员订单信息,该信息将用于校验输入数据是否有效 CBWebRMA oldOrder = GetReturnProductListByOrder(order.OrderSysNo, (RmaStatus.RMA类型)order.ReturnType); #region 数据验证 //验证输入 result = VaildRMAApplyOrderBaseInfo(order, oldOrder); //如果验证不通过将返回 if (!result.Status) { return(result); } #endregion #region 计算退款金额 并设置退换货明细 CuCalculateCharge(order, oldOrder, ref returnEntity, ref returnItems); #endregion #region 退换货相关表数据设置 returnEntity.RmaType = order.ReturnType; //RMA类型 returnEntity.OrderSysNo = oldOrder.OrderSysNo; //销售单系统编号 returnEntity.CustomerSysNo = customerSysNo; //客户系统编号 returnEntity.Source = (int)Model.WorkflowStatus.RmaStatus.退换货申请单来源.会员; //申请单来源 returnEntity.PickupTypeSysNo = order.PickUpType; //取件方式系统编号 returnEntity.PickUpTime = order.PickUpTime.ToString("yyyy-MM-dd HH:mm:ss"); //取件时间段 returnEntity.InvoiceSysNo = oldOrder.InvoiceSysNo; //发票系统编号 //如果是换货将设置收货地址 if (order.ReturnType == (int)RmaStatus.RMA类型.售后换货 || order.ReceiveAddress != null) { returnEntity.ShipTypeSysNo = order.ShipType; //收货地址系统编号 } //读取订单实体,通过订单来判读是否是网络支付 var orderEntity = BLL.Web.SoOrderBo.Instance.GetEntity(order.OrderSysNo); if (orderEntity.PayTypeSysNo == (int)PaymentType.网银 || orderEntity.PayTypeSysNo == (int)PaymentType.支付宝) { returnEntity.RefundType = (int)RmaStatus.退换货退款方式.原路返回; //退款方式 } else if (order.Bank != null) //如果银行账户信息不为空则可以进行设置银行账号用于退款 { returnEntity.RefundBank = order.Bank.Name; //开户行 returnEntity.RefundAccount = order.Bank.Number; //开户账号 returnEntity.RefundAccountName = order.Bank.Account; //开户账户 returnEntity.RefundType = (int)RmaStatus.退换货退款方式.至银行卡; //退款方式 } returnEntity.Status = (int)RmaStatus.退换货状态.待审核; //退换货状态 returnEntity.CreateDate = DateTime.Now; //退换货申请单创建时间 returnEntity.LastUpdateDate = DateTime.Now; //退换货申请单最后更新时间 returnEntity.RMARemark = order.Reason; //用户备注 // 退换货仓库 if (order.WarehouseSysNo > 0) { returnEntity.WarehouseSysNo = order.WarehouseSysNo; } else { returnEntity.WarehouseSysNo = IWhWarehouseDao.Instance.GetDefaultWarehouse(true, order.PickUpType); } #endregion #region 数据入库 //插入取货地址 if (order.PickUpAddress != null) //取件地址 { order.PickUpAddress.PhoneNumber = order.PickUpAddress.MobilePhoneNumber; returnEntity.PickUpAddressSysNo = Hyt.DataAccess.Order.ISoReceiveAddressDao.Instance.InsertEntity(order.PickUpAddress).SysNo; } if (order.ReturnType == (int)RmaStatus.RMA类型.售后换货 || order.ReceiveAddress != null) { order.ReceiveAddress.PhoneNumber = order.ReceiveAddress.MobilePhoneNumber; returnEntity.ReceiveAddressSysNo = Hyt.DataAccess.Order.ISoReceiveAddressDao.Instance.InsertEntity(order.ReceiveAddress).SysNo; } if (DataAccess.Web.IRMADao.Instance.InsertRMA(returnEntity, returnItems)) { result.Status = true; result.StatusCode = 1; } else { result.Status = false; result.StatusCode = -3; result.Message = "创建申请失败,请联系PC网站客服人员进行处理"; } #endregion return(result); }