/// <summary>
        /// 生成返现实体
        /// </summary>
        /// <param name="totalMoney"></param>
        /// <param name="model"></param>
        /// <param name="dmodel"></param>
        /// <returns></returns>
        private ZJ_RebateInfo FormartZJ_RebateInfo(decimal totalMoney, OderModel model, OrderDetails dmodel)
        {
            ZJ_RebateInfo zrModel = new ZJ_RebateInfo();

            zrModel.ID             = MemCacheFactory.GetCurrentMemCache().Increment("commonId");
            zrModel.CreateBY       = "系统服务";
            zrModel.CreateTime     = DateTime.Now;
            zrModel.OrderDetailsID = dmodel.OrderDetailsID;
            zrModel.OrderID        = dmodel.OrderID;
            zrModel.ProductID      = dmodel.ProductId;
            zrModel.SKUID          = dmodel.SKU_ProducId;
            zrModel.StartTime      = DateTime.Now;
            zrModel.Status         = 1;
            if (isFixedDays == 1)
            {
                zrModel.TotalDay   = backDays;
                zrModel.TotalMoney = totalMoney * backPoint;
            }
            else
            {
                zrModel.TotalDay   = dmodel.RetateDays != null ? (int)dmodel.RetateDays : backDays;
                zrModel.TotalMoney = totalMoney * (decimal)(dmodel.ReateRedio != null ? dmodel.ReateRedio : backPoint);
            }
            zrModel.UserID = model.UserID;
            return(zrModel);
        }
        /// <summary>
        /// 添加数据到表
        /// </summary>
        /// <param name="model">订单表实体</param>
        /// <param name="zj_detils">订单详情集合</param>
        public bool SetCashBackList(OderModel model, List <ZJ_RebateInfo> zj_detils)
        {
            bool flag = false;
            ExceptionLogModel exceptionLogModel = new ExceptionLogModel();

            exceptionLogModel.ServiceName = "会员购物订单返现订单生成服务";
            exceptionLogModel.CreateBy    = "系统服务";
            using (var bt = _database.Db.BeginTransaction())
            {
                try
                {
                    //添加返现记录
                    foreach (ZJ_RebateInfo detail in zj_detils)
                    {
                        bt.ZJ_RebateInfo.Insert(detail);
                    }

                    //更改订单状态为已完成,表示该订单已经做了订单返现单生成
                    bt.Order.UpdateByOrderID(OrderID: model.OrderID, IsReward: 1, OrderStatus: (int)HKTHMall.Domain.Enum.OrderEnums.OrderStatus.Completed);
                    //添加订单跟踪记录
                    OrderTrackingLogModel orderTrackingLogOne = new OrderTrackingLogModel();
                    orderTrackingLogOne.OrderID         = model.OrderID;
                    orderTrackingLogOne.OrderStatus     = (int)HKTHMall.Domain.Enum.OrderEnums.OrderStatus.Completed;
                    orderTrackingLogOne.TrackingContent = "已完成";
                    orderTrackingLogOne.CreateTime      = DateTime.Now;
                    orderTrackingLogOne.CreateBy        = "会员订单返现单生成服务";
                    bt.OrderTrackingLog.Insert(orderTrackingLogOne);
                    bt.Commit();
                    flag = true;
                }
                catch (Exception ex)
                {
                    bt.Rollback();
                    exceptionLogModel.HandleId   = model.OrderID;
                    exceptionLogModel.Status     = 1;
                    exceptionLogModel.ResultType = 1;
                    exceptionLogModel.Message    = string.Format("处理订单【{0}】的返现订单生成失败,{1},数据库事务回滚", model.OrderID, ex.Message);
                    exceptionLogService.Add(exceptionLogModel);
                    _logger.Error(typeof(ZJ_RebateService), string.Format("处理订单【{0}】的返现订单生成失败,{1},数据库事务回滚", model.OrderID, ex.Message));
                }
            }
            return(flag);
        }
        /// <summary>
        /// 生成返现订单
        /// </summary>
        /// <returns></returns>
        public BackMessage GenerateList(OderModel model)
        {
            var result = new BackMessage();

            result.status = 0;
            ExceptionLogModel exceptionLogModel = new ExceptionLogModel();

            exceptionLogModel.ServiceName = "会员购物订单返现订单生成服务";
            exceptionLogModel.CreateBy    = "系统服务";
            List <OrderDetails> orderDetails = _database.Db.OrderDetails.FindAll(_database.Db.OrderDetails.OrderID == model.OrderID).ToList <OrderDetails>();
            int tuiCount = orderDetails.Count(x => x.IsReturn == 2);//是否有退款的订单明细

            //if (model.RefundFlag != 0)//存在退款
            //{
            //    orderDetails = orderDetails.FindAll(x => x.IsReturn == 3 || x.IsReturn == 0);
            //}
            //  orderDetails = orderDetails.FindAll(x => x.IsReturn == 3 || x.IsReturn == 0);
            if (orderDetails != null)
            {
                List <ZJ_RebateInfo> zj_detils = new List <ZJ_RebateInfo>();
                if (tuiCount == 0)
                {
                    foreach (OrderDetails detail in orderDetails)
                    {
                        //商品返现金额= 销售价 * 数量
                        decimal tmoney = detail.SalesPrice * detail.Quantity;
                        zj_detils.Add(FormartZJ_RebateInfo(tmoney, model, detail));
                    }
                }
                else
                {
                    List <ReturnProductInfoModel> returnList = GetReturnProductListByOrderId(model.OrderID);
                    foreach (OrderDetails detail in orderDetails)
                    {
                        // int yituiCount = returnList.Count(x => x.OrderDetailsID == detail.OrderDetailsID);
                        ReturnProductInfoModel returndetail = returnList.Where(x => x.OrderDetailsID == detail.OrderDetailsID).FirstOrDefault();
                        if (returndetail != null)
                        {
                            int num = detail.Quantity - returndetail.ReturntNumber;
                            if (num > 0)
                            {
                                decimal tmoney = detail.SalesPrice * num;                        //商品返现金额= 销售价 * 数量
                                zj_detils.Add(FormartZJ_RebateInfo(tmoney, model, detail));
                            }
                        }
                        else
                        {
                            //商品返现金额= 销售价 * 数量
                            decimal tmoney = detail.SalesPrice * detail.Quantity;
                            zj_detils.Add(FormartZJ_RebateInfo(tmoney, model, detail));
                        }
                    }
                }

                if (SetCashBackList(model, zj_detils))
                {
                    result.status = 1;
                }
            }
            else
            {
                exceptionLogModel.HandleId   = model.OrderID;
                exceptionLogModel.Status     = 1;
                exceptionLogModel.ResultType = 1;
                exceptionLogModel.Message    = string.Format("处理订单【{0}】的返现订单生成失败,获取订单详情失败", model.OrderID);
                exceptionLogService.Add(exceptionLogModel);
                _logger.Error(typeof(ZJ_RebateService), string.Format("处理订单【{0}】的返现订单生成失败,获取订单详情失败", model.OrderID));
            }
            return(result);
        }