Example #1
0
 /// <summary>
 /// 更新退换货数据
 /// </summary>
 /// <param name="entity">退换货实体</param>
 /// <returns></returns>
 /// <remarks>2013-07-11 朱成果 创建</remarks>
 public abstract void Update(RcReturn entity);
Example #2
0
        /// <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;
        }
Example #3
0
 /// <summary>
 /// 插入退换货数据
 /// </summary>
 /// <param name="entity">退换货实体</param>
 /// <returns>返回新的编号</returns>
 /// <remarks>2013-07-11 朱成果 创建</remarks>
 public abstract int Insert(RcReturn entity);
Example #4
0
        /// <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);
        }