public void BatchAddReturnGoods(List <ReturnGoodsExt> list)
        {
            var returnList = list.FindAll(p => p.IsDirectReturnGoods).Where(returnGoods =>
                                                                            !_returnGoodsRepository.Exists(p => p.WayBillNumber == returnGoods.WayBillNumber)).ToList();

            if (returnList.Any())
            {
                //直接退货操作
                foreach (var returnGoods in returnList)
                {
                    #region 修改订单、运单状态

                    var wayBillInfo = _wayBillInfoRepository.Get(returnGoods.WayBillNumber);
                    if (wayBillInfo != null)
                    {
                        if (wayBillInfo.Status != (int)WayBill.StatusEnum.Send && wayBillInfo.Status != (int)WayBill.StatusEnum.WaitOrder)
                        {
                            throw new Exception(string.Format("运单{0}的状态不是已发货或待转单", returnGoods.WayBillNumber));
                        }

                        wayBillInfo.Status                   = WayBill.StatusToValue(WayBill.StatusEnum.ReGoodsInStorage);
                        wayBillInfo.LastUpdatedOn            = DateTime.Now;
                        wayBillInfo.LastUpdatedBy            = returnGoods.UserName;
                        wayBillInfo.CustomerOrderInfo.Status =
                            CustomerOrder.StatusToValue(CustomerOrder.StatusEnum.ReGoodsInStorage);
                        wayBillInfo.CustomerOrderInfo.LastUpdatedBy = returnGoods.UserName;
                        wayBillInfo.CustomerOrderInfo.LastUpdatedOn = DateTime.Now;
                        _wayBillInfoRepository.Modify(wayBillInfo);
                    }
                    #endregion

                    #region 录入内部信息

                    if (wayBillInfo != null)
                    {
                        //Add By zxq
                        //Time:2014-09-15
                        var wayBillEventLog = new WayBillEventLog()
                        {
                            WayBillNumber = wayBillInfo.WayBillNumber,
                            EventCode     = (int)WayBillEvent.EventCodeEnum.OutStorage,
                            Description   = WayBillEvent.GetEventCodeDescription((int)WayBillEvent.EventCodeEnum.OutStorage),
                            EventDate     = DateTime.Now,
                            LastUpdatedOn = DateTime.Now,
                            Operator      = returnGoods.UserName,
                        };

                        _wayBillEventLogRepository.Add(wayBillEventLog);
                    }

                    #endregion

                    //退货详细
                    if (wayBillInfo != null)
                    {
                        ReceivingExpensesEditExt receivingExpensesEditExt = new ReceivingExpensesEditExt();
                        receivingExpensesEditExt =
                            _financialService.GetReceivingExpensesEditExt(wayBillInfo.WayBillNumber);
                        ReturnGoods rgGoods = new ReturnGoods()
                        {
                            WayBillNumber    = returnGoods.WayBillNumber,
                            Weight           = returnGoods.Weight != 0 ? returnGoods.Weight : wayBillInfo.Weight.Value,
                            CreatedBy        = returnGoods.UserName,
                            CreatedOn        = DateTime.Now,
                            IsReturnShipping = returnGoods.IsReturnShipping,
                            LastUpdatedBy    = returnGoods.UserName,
                            LastUpdatedOn    = DateTime.Now,
                            Reason           = returnGoods.Reason,
                            ReasonRemark     = returnGoods.ReasonRemark,
                            ReGoodsId        = SequenceNumberService.GetSequenceNumber(PrefixCode.ReturnGoodsID),
                            Type             = returnGoods.Type,
                            Status           = (int)ReturnGood.ReturnStatusEnum.UnAudited,
                            ReturnSource     = (int)ReturnGood.ReturnSourceStatusEnum.CSReturn
                        };


                        //是否退运费
                        if (returnGoods.IsReturnShipping)
                        {
                            if (receivingExpensesEditExt != null)
                            {
                                if (receivingExpensesEditExt.TotalFeeFinal.HasValue)
                                {
                                    rgGoods.ShippingFee = receivingExpensesEditExt.TotalFeeFinal ?? 0;
                                }
                                else if (receivingExpensesEditExt.TotalFeeOriginal.HasValue)
                                {
                                    rgGoods.ShippingFee = receivingExpensesEditExt.TotalFeeOriginal ?? 0;
                                }
                            }
                            else
                            {
                                rgGoods.ShippingFee = 0;
                            }
                        }
                        else
                        {
                            rgGoods.ShippingFee = 0;
                        }
                        _returnGoodsRepository.Add(rgGoods);
                    }
                    using (var transaction = new TransactionScope())
                    {
                        _returnGoodsRepository.UnitOfWork.Commit();
                        _wayBillInfoRepository.UnitOfWork.Commit();
                        _wayBillEventLogRepository.UnitOfWork.Commit();
                        _receivingExpensRepository.UnitOfWork.Commit();
                        transaction.Complete();
                    }
                }
            }
        }
        /// <summary>
        /// 批量修改审核通过
        /// Add By zhengsong
        /// </summary>
        /// <param name="wayBilllist"></param>
        /// <param name="type"></param>
        /// <param name="returnReason"></param>
        /// <param name="isReturnShipping"></param>
        /// <returns></returns>
        public bool UpdateReturnAuditList(string[] wayBilllist, int type, string returnReason, bool isReturnShipping)
        {
            bool reuslt = false;

            try
            {
                var returnGoods       = _returnGoodsRepository.GetList(p => wayBilllist.Contains(p.WayBillNumber) && p.Status != (int)ReturnGood.ReturnStatusEnum.Audited);
                var waybills          = _wayBillInfoRepository.GetList(p => wayBilllist.Contains(p.WayBillNumber) && p.Status != (int)WayBill.StatusEnum.Return);
                var receivingExpenses = _receivingExpensRepository.GetList(p => wayBilllist.Contains(p.WayBillNumber));
                returnGoods.ForEach(p =>
                {
                    //修改退货记录表状态
                    p.Status           = (int)ReturnGood.ReturnStatusEnum.Audited;
                    p.Auditor          = _workContext.User.UserUame;
                    p.AuditorDate      = DateTime.Now;
                    p.LastUpdatedBy    = _workContext.User.UserUame;
                    p.LastUpdatedOn    = DateTime.Now;
                    p.Type             = type;
                    p.Reason           = returnReason;
                    p.IsReturnShipping = isReturnShipping;
                    _returnGoodsRepository.Modify(p);

                    //修改运单,定单状态
                    var waybill = waybills.FirstOrDefault(z => z.WayBillNumber == p.WayBillNumber);
                    if (waybill != null)
                    {
                        waybill.Status                          = (int)WayBill.StatusEnum.Return;
                        waybill.LastUpdatedBy                   = _workContext.User.UserUame;
                        waybill.LastUpdatedOn                   = DateTime.Now;
                        waybill.CustomerOrderInfo.Status        = (int)CustomerOrder.StatusEnum.Return;
                        waybill.CustomerOrderInfo.LastUpdatedBy = _workContext.User.UserUame;
                        waybill.CustomerOrderInfo.LastUpdatedOn = DateTime.Now;
                        _wayBillInfoRepository.Modify(waybill);
                    }


                    var receivingExpense = receivingExpenses.FirstOrDefault(z => z.WayBillNumber == p.WayBillNumber);

                    //是否退运费
                    if (p.IsReturnShipping)
                    {
                        //添加一个收货费用明细退费记录,并且修改收货费用审核表状态
                        ReceivingExpensesEditExt receivingExpensesEditExt =
                            _financialService.GetReceivingExpensesEditExt(p.WayBillNumber);
                        //如果没有费用就不添加费用明细
                        if (receivingExpensesEditExt.TotalFeeFinal.HasValue ||
                            receivingExpensesEditExt.TotalFeeOriginal.HasValue)
                        {
                            #region 在收货费用详细表添加一个退回数据,状态为4
                            if (receivingExpensesEditExt.TotalFeeFinal.HasValue)
                            {
                                p.ShippingFee = receivingExpensesEditExt.TotalFeeFinal.Value;
                            }
                            else
                            {
                                p.ShippingFee = receivingExpensesEditExt.TotalFeeOriginal.Value;
                            }
                            _financialService.UpdateReceivingExpenseInfo(p.WayBillNumber, _workContext.User.UserUame);

                            #endregion
                        }
                        else
                        {
                            //要退费用但是还没生成
                            if (receivingExpense != null)
                            {
                                receivingExpense.IsNoGet = true;
                            }
                            _receivingExpensRepository.Modify(receivingExpense);
                        }
                    }
                    else
                    {
                        //修改收货费用审核表状态
                        if (receivingExpense != null)
                        {
                            p.ShippingFee = 0;
                            //不退费用就不修改验收时间和状态
                            //receivingExpense.Status = (int)Financial.ReceivingExpenseStatusEnum.Audited;
                            //receivingExpense.AcceptanceDate = DateTime.Now;
                            receivingExpense.LastUpdatedBy = _workContext.User.UserUame;
                            receivingExpense.LastUpdatedOn = DateTime.Now;
                            _receivingExpensRepository.Modify(receivingExpense);
                        }
                    }
                });
                _returnGoodsRepository.UnitOfWork.Commit();
                _wayBillInfoRepository.UnitOfWork.Commit();
                _receivingExpensRepository.UnitOfWork.Commit();
                reuslt = true;
            }
            catch (Exception ex)
            {
                Log.Error(ex.Message);
            }
            return(reuslt);
        }