/// <summary>
        /// vip绑定coupon入队列
        /// </summary>
        /// <param name="coupon"></param>
        /// <param name="strObjectId"></param>
        /// <param name="strVipId"></param>
        /// <param name="strSource"></param>
        public void SetVipMappingCoupon(CC_Coupon coupon, string strObjectId, string strVipId, string strSource)
        {
            LoggingSessionInfo _loggingSessionInfo   = new LoggingSessionInfo();
            LoggingManager     CurrentLoggingManager = new LoggingManager();
            string             strCon = string.Empty;

            var connection = new RedisConnectionBLL().GetConnection(coupon.CustomerId);

            //如果缓存获取不到数据,从数据库读取数据库连接字符串
            if (connection.CustomerID == null)
            {
                connection.ConnectionStr = GetCustomerConn(coupon.CustomerId);
            }

            CurrentLoggingManager.Connection_String = connection.ConnectionStr;

            _loggingSessionInfo.ClientID = coupon.CustomerId;
            _loggingSessionInfo.CurrentLoggingManager = CurrentLoggingManager;

            RedisCouponBLL redisCouponBLL = new RedisCouponBLL();
            //获取优惠券数量
            var count = RedisOpenAPI.Instance.CCCoupon().GetCouponListLength(coupon);

            if (count.Code == ResponseCode.Success)
            {
                if (count.Result == 0)
                {
                    var bllCouponType = new CouponTypeBLL(_loggingSessionInfo);

                    var couponType = bllCouponType.QueryByEntity(new CouponTypeEntity()
                    {
                        CustomerId = coupon.CustomerId, CouponTypeID = new Guid(coupon.CouponTypeId), IsDelete = 0
                    }, null).SingleOrDefault();
                    if (couponType != null)
                    {
                        //计算剩余的优惠券数量
                        int intCouponLenth = Convert.ToInt32(couponType.IssuedQty) - Convert.ToInt32(couponType.IsVoucher);
                        if (intCouponLenth <= 0)
                        {
                            intCouponLenth = 1000;
                            //重置优惠券数量为1000
                            bllCouponType.UpdateCouponTypeIssuedQty(coupon.CouponTypeId, intCouponLenth);
                        }

                        //这里可能是重置 Redis 缓存中该类型优惠券数据数量
                        RedisOpenAPI.Instance.CCCoupon().SetCouponList(new CC_Coupon()
                        {
                            CustomerId     = couponType.CustomerId,
                            CouponTypeId   = couponType.CouponTypeID.ToString(),
                            CouponTypeDesc = couponType.CouponTypeDesc,
                            CouponTypeName = couponType.CouponTypeName,
                            BeginTime      = couponType.BeginTime.ToString(),
                            EndTime        = couponType.EndTime.ToString(),
                            ServiceLife    = couponType.ServiceLife ?? 0,
                            CouponLenth    = intCouponLenth,
                            CouponCategory = couponType.CouponCategory
                        });
                    }
                }
                //从 Redis 中重新获取优惠券信息
                var response = redisCouponBLL.RedisGetCoupon(coupon);
                if (response.Code == ResponseCode.Success && response.Result.CouponTypeId != null && response.Result.CouponTypeId.Length > 0)
                {
                    string strCouponCode = string.Empty;
                    //从数据库中读取优惠券编码
                    strCouponCode = GetCouponNum(_loggingSessionInfo, response.Result.CustomerId);
                    var _coupon = new CC_Coupon()
                    {
                        CustomerId     = response.Result.CustomerId,
                        CouponTypeId   = response.Result.CouponTypeId,
                        CouponTypeDesc = response.Result.CouponTypeDesc,
                        CouponTypeName = response.Result.CouponTypeName,
                        CouponCode     = strCouponCode,
                        BeginTime      = response.Result.BeginTime,
                        EndTime        = response.Result.EndTime,
                        ServiceLife    = response.Result.ServiceLife,
                        CouponCategory = response.Result.CouponCategory,
                        CouponId       = Guid.NewGuid().ToString()
                    };
                    BaseService.WriteLog("---------------------------入vip绑定优惠券队列---------------------------");
                    //将优惠券推送到 Redis 缓存中
                    RedisOpenAPI.Instance.CCVipMappingCoupon().SetVipMappingCoupon(new CC_VipMappingCoupon()
                    {
                        CustomerId = coupon.CustomerId,
                        ObjectId   = strObjectId,
                        VipId      = strVipId,
                        Source     = strSource,
                        Coupon     = _coupon
                    });
                }
            }
        }
        public void InsertDataBase(string strCustomerId, string strVipId, string strObjectId, string strSource, CC_Coupon coupon)
        {
            try
            {
                string customerCon = GetCustomerConn(strCustomerId);

                LoggingSessionInfo loggingSessionInfo    = new LoggingSessionInfo();
                LoggingManager     CurrentLoggingManager = new LoggingManager();
                loggingSessionInfo.ClientID                = strCustomerId;
                CurrentLoggingManager.Connection_String    = customerCon;
                loggingSessionInfo.CurrentLoggingManager   = CurrentLoggingManager;
                loggingSessionInfo.CurrentUser             = new BS.Entity.User.UserInfo();
                loggingSessionInfo.CurrentUser.customer_id = strCustomerId;

                DataTable dtCoupon = new DataTable();
                dtCoupon.Columns.Add("CouponID", typeof(string));
                dtCoupon.Columns.Add("CouponCode", typeof(string));
                dtCoupon.Columns.Add("CouponDesc", typeof(string));
                dtCoupon.Columns.Add("BeginDate", typeof(DateTime));
                dtCoupon.Columns.Add("EndDate", typeof(DateTime));
                dtCoupon.Columns.Add("CouponUrl", typeof(string));
                dtCoupon.Columns.Add("ImageUrl", typeof(string));
                dtCoupon.Columns.Add("Status", typeof(Int32));
                dtCoupon.Columns.Add("CreateTime", typeof(DateTime));
                dtCoupon.Columns.Add("CreateBy", typeof(string));
                dtCoupon.Columns.Add("LastUpdateTime", typeof(DateTime));
                dtCoupon.Columns.Add("LastUpdateBy", typeof(string));
                dtCoupon.Columns.Add("IsDelete", typeof(Int32));
                dtCoupon.Columns.Add("CouponTypeID", typeof(string));
                dtCoupon.Columns.Add("CoupnName", typeof(string));
                dtCoupon.Columns.Add("DoorID", typeof(string));
                dtCoupon.Columns.Add("CouponPwd", typeof(string));
                dtCoupon.Columns.Add("CollarCardMode", typeof(string));
                dtCoupon.Columns.Add("CustomerID", typeof(string));
                DataTable dtVipCoupon = new DataTable();
                dtVipCoupon.Columns.Add("VipCouponMapping", typeof(string));
                dtVipCoupon.Columns.Add("VIPID", typeof(string));
                dtVipCoupon.Columns.Add("CouponID", typeof(string));
                dtVipCoupon.Columns.Add("UrlInfo", typeof(string));
                dtVipCoupon.Columns.Add("IsDelete", typeof(Int32));
                dtVipCoupon.Columns.Add("LastUpdateBy", typeof(string));
                dtVipCoupon.Columns.Add("LastUpdateTime", typeof(DateTime));
                dtVipCoupon.Columns.Add("CreateBy", typeof(string));
                dtVipCoupon.Columns.Add("CreateTime", typeof(DateTime));
                dtVipCoupon.Columns.Add("FromVipId", typeof(string));
                dtVipCoupon.Columns.Add("ObjectId", typeof(string));
                dtVipCoupon.Columns.Add("CouponSourceId", typeof(string));

                RedisCouponBLL redisCouponBLL = new RedisCouponBLL();
                var            response       = redisCouponBLL.RedisGetCoupon(coupon);


                if (response.Code == ResponseCode.Success && response.Result.CouponTypeId != null)
                {
                    //String uperStr = StringUtil.GetRandomUperStr(4);
                    //String strInt = StringUtil.GetRandomStrInt(8);
                    //string strCouponCode = uperStr + "-" + strInt;
                    string strCouponCode = string.Empty;
                    strCouponCode = GetCouponNum(loggingSessionInfo, strCustomerId);
                    string strCouponId = Guid.NewGuid().ToString();

                    DataRow dr_Coupon = dtCoupon.NewRow();
                    dr_Coupon["CouponID"]   = strCouponId;
                    dr_Coupon["CouponCode"] = strCouponCode;
                    dr_Coupon["CouponDesc"] = response.Result.CouponTypeDesc;
                    if (response.Result.ServiceLife > 0)
                    {
                        dr_Coupon["BeginDate"] = DateTime.Now;
                        dr_Coupon["EndDate"]   = DateTime.Now.Date.AddDays(response.Result.ServiceLife - 1).ToShortDateString() + " 23:59:59.998";
                    }
                    else
                    {
                        dr_Coupon["BeginDate"] = response.Result.BeginTime;
                        dr_Coupon["EndDate"]   = response.Result.EndTime;
                    }
                    dr_Coupon["CouponUrl"]      = "";
                    dr_Coupon["ImageUrl"]       = "";
                    dr_Coupon["Status"]         = 2;
                    dr_Coupon["CreateTime"]     = DateTime.Now;
                    dr_Coupon["CreateBy"]       = "Redis";
                    dr_Coupon["LastUpdateTime"] = DateTime.Now;
                    dr_Coupon["LastUpdateBy"]   = "Redis";
                    dr_Coupon["IsDelete"]       = 0;
                    dr_Coupon["CouponTypeID"]   = response.Result.CouponTypeId;
                    dr_Coupon["CoupnName"]      = response.Result.CouponTypeName;
                    dr_Coupon["DoorID"]         = "";
                    dr_Coupon["CouponPwd"]      = "";
                    dr_Coupon["CollarCardMode"] = "";
                    dr_Coupon["CustomerID"]     = strCustomerId;
                    dtCoupon.Rows.Add(dr_Coupon);

                    DataRow dr_VipCoupon = dtVipCoupon.NewRow();
                    dr_VipCoupon["VipCouponMapping"] = Guid.NewGuid().ToString().Replace("-", "");
                    dr_VipCoupon["VIPID"]            = strVipId;
                    dr_VipCoupon["CouponID"]         = strCouponId;
                    dr_VipCoupon["UrlInfo"]          = "";
                    dr_VipCoupon["IsDelete"]         = 0;
                    dr_VipCoupon["LastUpdateBy"]     = "Redis";
                    dr_VipCoupon["LastUpdateTime"]   = DateTime.Now;
                    dr_VipCoupon["CreateBy"]         = "Redis";
                    dr_VipCoupon["CreateTime"]       = DateTime.Now;
                    dr_VipCoupon["FromVipId"]        = "";
                    dr_VipCoupon["ObjectId"]         = strObjectId;
                    dr_VipCoupon["CouponSourceId"]   = GetSourceId(strSource);


                    dtVipCoupon.Rows.Add(dr_VipCoupon);
                    if (strSource != "Activity")
                    {
                        try
                        {
                            ///优惠券到账通知
                            var CommonBLL = new CommonBLL();
                            var bllVip    = new VipBLL(loggingSessionInfo);
                            var vip       = bllVip.GetByID(strVipId);

                            string strValidityData = Convert.ToDateTime(dr_Coupon["BeginDate"].ToString()).ToShortDateString() + "-" + Convert.ToDateTime(dr_Coupon["EndDate"].ToString()).ToShortDateString();
                            CommonBLL.CouponsArrivalMessage(response.Result.CouponCode, response.Result.CouponTypeName, strValidityData, response.Result.CouponCategory == null ? "" : response.Result.CouponCategory, vip.WeiXinUserId, loggingSessionInfo);
                        }
                        catch (Exception ex)
                        {
                            BaseService.WriteLog("优惠券到账通知异常:" + ex.Message);
                        }
                    }
                }

                if (dtCoupon != null && dtCoupon.Rows.Count > 0)
                {
                    SqlBulkCopy(customerCon, dtCoupon, "Coupon");

                    var bllCouponType = new CouponTypeBLL(loggingSessionInfo);
                    bllCouponType.UpdateCouponTypeIsVoucher(strCustomerId);
                }
                if (dtVipCoupon != null && dtVipCoupon.Rows.Count > 0)
                {
                    SqlBulkCopy(customerCon, dtVipCoupon, "VipCouponMapping");
                }
            }
            catch (Exception ex)
            {
                BaseService.WriteLog("vip绑定优惠券异常" + ex.Message);
            }
            BaseService.WriteLog("---------------------------vip绑定优惠券结束---------------------------");
        }
        /// <summary>
        /// 虚拟商品发优惠券
        /// </summary>
        /// <param name="lstCoupon"></param>
        /// <param name="strObjectId"></param>
        /// <param name="strVipId"></param>
        /// <param name="strSource"></param>
        public void SetVipMappingCoupon(List <CouponTypeEntity> lstCoupon, string strObjectId, string strVipId, string strSource)
        {
            BaseService.WriteLog("---------------------------入vip绑定优惠券队列开始---------------------------");

            LoggingSessionInfo _loggingSessionInfo   = new LoggingSessionInfo();
            LoggingManager     CurrentLoggingManager = new LoggingManager();
            string             strCon = string.Empty;
            var coupon = lstCoupon.FirstOrDefault();

            try
            {
                var connection = new RedisConnectionBLL().GetConnection(coupon.CustomerId);
                //如果缓存获取不到数据,从数据库读取数据库连接字符串
                if (connection.CustomerID == null)
                {
                    connection.ConnectionStr = GetCustomerConn(coupon.CustomerId);
                }

                CurrentLoggingManager.Connection_String = connection.ConnectionStr;

                _loggingSessionInfo.ClientID = coupon.CustomerId;
                _loggingSessionInfo.CurrentLoggingManager = CurrentLoggingManager;

                RedisCouponBLL redisCouponBLL = new RedisCouponBLL();

                //从 Redis 中重新获取优惠券信息
                foreach (var itemCoupon in lstCoupon)  //按照优惠券类型进行依次发送
                {
                    //下面这段话是不是应该放在下面的for循环里面??
                    //获取Redis中当前 CouponTypeID 类型的优惠券数量
                    var count = RedisOpenAPI.Instance.CCCoupon().GetCouponListLength(new CC_Coupon()
                    {
                        CustomerId   = itemCoupon.CustomerId,
                        CouponTypeId = itemCoupon.CouponTypeID.ToString()
                    });

                    if (count.Code != ResponseCode.Success)
                    {
                        BaseService.WriteLog("请求Redist失败,请求函数 GetCouponListLength ,参数 CustomerId:" + itemCoupon.CustomerId + ", CouponTypeId:" + itemCoupon.CouponTypeID.ToString());
                        continue;
                    }

                    //如果 Redis 该类型优惠券已用完
                    if (count.Result == 0)
                    {
                        CheckRedisCouponNum(_loggingSessionInfo, itemCoupon);
                    }

                    int sendRedistCount = 0;
                    //根据虚拟商品中配置的商品数量,插入到 Redist 中
                    for (int i = 0; i < itemCoupon.Item_Count; i++)
                    {
                        //获取优惠券类型数据
                        var response = redisCouponBLL.RedisGetCoupon(new CC_Coupon()
                        {
                            CustomerId   = itemCoupon.CustomerId,
                            CouponTypeId = itemCoupon.CouponTypeID.ToString()
                        });
                        #region  发送一张优惠券
                        if (response.Code == ResponseCode.Success && response.Result.CouponTypeId != null && response.Result.CouponTypeId.Length > 0)
                        {
                            string strCouponCode = string.Empty;
                            //从数据库中读取优惠券编码
                            strCouponCode = GetCouponNum(_loggingSessionInfo, response.Result.CustomerId);
                            var _coupon = new CC_Coupon()
                            {
                                CustomerId     = response.Result.CustomerId,
                                CouponTypeId   = response.Result.CouponTypeId,
                                CouponTypeDesc = response.Result.CouponTypeDesc,
                                CouponTypeName = response.Result.CouponTypeName,
                                CouponCode     = strCouponCode, //优惠券code
                                BeginTime      = response.Result.BeginTime,
                                EndTime        = response.Result.EndTime,
                                ServiceLife    = response.Result.ServiceLife,
                                CouponCategory = response.Result.CouponCategory,
                                CouponId       = Guid.NewGuid().ToString()
                            };

                            //将优惠券推送到 Redis 缓存中
                            RedisOpenAPI.Instance.CCVipMappingCoupon().SetVipMappingCoupon(new CC_VipMappingCoupon()
                            {
                                CustomerId = itemCoupon.CustomerId,
                                ObjectId   = strObjectId,
                                VipId      = strVipId,
                                Source     = strSource,
                                Coupon     = _coupon
                            });

                            sendRedistCount++;
                        } //if数量
                        #endregion
                    }     //里面的for

                    //针对每一种类型的优惠券,发送一个通知
                    DateTime?BeginDate = null;
                    string   EndDate   = null;
                    if (itemCoupon.ServiceLife > 0)
                    {
                        BeginDate = DateTime.Now;
                        EndDate   = DateTime.Now.Date.AddDays((int)itemCoupon.ServiceLife - 1).ToShortDateString() + " 23:59:59.998";
                    }
                    else
                    {
                        BeginDate = itemCoupon.BeginTime;
                        EndDate   = itemCoupon.EndTime.ToString();
                    }
                    string strValidityData = Convert.ToDateTime(BeginDate.ToString()).ToShortDateString() + "-" + Convert.ToDateTime(EndDate.ToString()).ToShortDateString();
//写入到缓存
                    new SendCouponNoticeBLL().CouponsArrivalMessage(itemCoupon.CouponTypeName, itemCoupon.CouponTypeName, strValidityData, itemCoupon.CouponCategory == null ? "" : itemCoupon.CouponCategory, itemCoupon.WeiXinUserId, _loggingSessionInfo, itemCoupon.Item_Count.ToString());//存入到缓存j


                    BaseService.WriteLog(string.Format("---------------------------入vip绑定优惠券队列数量{0}---------------------------", sendRedistCount));
                } //foreach
            }     //try
            catch (Exception ex)
            {
                BaseService.WriteLog("向Redis发送优惠券时发生异常,异常信息:" + ex.Message);
                BaseService.WriteLog("向Redis发送优惠券时发生异常,异常堆栈信息:" + ex.StackTrace);
            }
        }