private void Get(CouponCouponRequest request, out int storeId, out int recommendedUserId)
        {
            switch (request.SType)
            {
            case SourceType.Promotion:
                GetPromotion(request.SourceId, out storeId, out recommendedUserId);
                break;

            case SourceType.Product:
                GetProduct(request.SourceId, out storeId, out recommendedUserId);
                break;

            default:
                storeId           = 0;
                recommendedUserId = 0;
                break;
            }
        }
        /// <summary>
        /// 创建优惠券
        /// </summary>
        /// <param name="request"></param>
        /// <returns></returns>
        public ExecuteResult <CouponCodeResponse> CreateCoupon(CouponCouponRequest request)
        {
            if (request == null)
            {
                return(new ExecuteResult <CouponCodeResponse>(null)
                {
                    StatusCode = StatusCode.ClientError, Message = "参数错误"
                });
            }

            if (request.SType == SourceType.Product)
            {
                return(CreateCoupon4NewBy8W(request));
            }

            /*
             * 8位, 前三位+5位流水
             * 前三位 当天距离2012/12/31的天数,不足补0
             * 后5位为自增的流水码
             */
            return(CreateCoupon4PromotionId(request));
        }
        /// <summary>
        /// 8位code
        /// </summary>
        /// <returns></returns>
        private ExecuteResult <CouponCodeResponse> CreateCoupon4NewBy8W(CouponCouponRequest request)
        {
            /*
             * 8位, 前三位+5位流水
             * 前三位 当天距离2012/12/31的天数,不足补0
             * 后5位为自增的流水码
             * 99999 超过就不能增加了
             */
            var date     = DateTime.Now;
            var c        = new DateTime(2012, 12, 31);
            var timeSpan = date - c;
            var day      = timeSpan.Days;

            if (day > 999)
            {
                throw new ArgumentException("天数差超过了999天,请更改算法");
            }

            var keyPre = UtilHelper.PreFilled(day, 3, '0');

            var timeSeed = this._timeSeedRepository.CreateLimitMaxSeedV2(new TimeSeedEntity
            {
                Date  = date,
                Day   = date.Day,
                Hour  = date.Hour,
                Month = date.Month,
                Year  = date.Year
            }, 99999, keyPre);


            if (timeSeed == null)
            {
                //超出限制了
                return(new ExecuteResult <CouponCodeResponse>(null)
                {
                    StatusCode = StatusCode.InternalServerError,
                    Message = "超出优惠码限制"
                });
            }

            var storeId           = 0;
            var recommendedUserId = 0;

            Get(request, out storeId, out recommendedUserId);

            //create coupon
            var totay  = new DateTime(DateTime.Now.Year, DateTime.Now.Month, DateTime.Now.Day);
            var coupon = this._couponRepository.Insert(new CouponHistoryEntity
            {
                CouponId    = timeSeed.KeySeed,
                CreatedDate = date,
                CreatedUser = request.AuthUid,
                FromProduct =
                    request.SType == SourceType.Product ? request.SourceId : 0,
                FromPromotion =
                    request.SType == SourceType.Promotion ? request.SourceId : 0,
                FromStore = storeId,
                FromUser  = recommendedUserId,
                Id        = 0,
                Status    = 1,
                User_Id   = request.AuthUid,
                //TODO:修改时间
                ValidStartDate = totay,//默认有效期7天
                ValidEndDate   = totay.AddDays(7).AddSeconds(-1)
            });

            //增加用户优惠券数
            if (coupon != null)
            {
                //TODO: 增加用户账户 优惠券 1张
                _userService.AddCoupon(coupon.User_Id, 1, request.AuthUid);
            }

            return(new ExecuteResult <CouponCodeResponse>(MappingManager.CouponCodeResponseMapping(coupon)));
        }
        private ExecuteResult <CouponCodeResponse> CreateCoupon4PromotionId(CouponCouponRequest request)
        {
            //            优惠码新规则如下:
            //1.	全数字组成
            //2.	优惠码由两部分组成{promotionid info}+{流水号}
            //3.	{promotionid info} = X x x …
            //其中第一位数字为promotionid的长度
            //后面的数字为promotionid
            //4.	{流水号}  为5位数字,即每个促销活动最大只能够有9999个优惠码

            //示例如下:
            //一个促销活动的promotionid为2,它的优惠码之一为:
            //         1200001
            //一个促销活动的promotionid为100,它的优惠码之一为:
            //         310000001


            if (request.SType != SourceType.Promotion)
            {
                return(new ExecuteResult <CouponCodeResponse>(null)
                {
                    StatusCode = StatusCode.ClientError, Message = "参数错误"
                });
            }

            var kp     = request.SourceId.ToString(CultureInfo.InvariantCulture);
            var keyPre = kp.Length.ToString(CultureInfo.InvariantCulture) + kp;

            var seed = _seedRepository.Generate("yt.hz.promotion", 9999, request.SourceId);

            if (seed == -2)
            {
                return(new ExecuteResult <CouponCodeResponse>(null)
                {
                    StatusCode = StatusCode.ClientError, Message = "已经超出优惠券领取最大值"
                });
            }

            //前补零
            var keySuf   = UtilHelper.PreFilled(seed, 5, '0');
            var couponid = keyPre + keySuf;

            var storeId           = 0;
            var recommendedUserId = 0;

            var p = GetPromotion(request.SourceId, out storeId, out recommendedUserId);

            //create coupon

            var coupon = this._couponRepository.Insert(new CouponHistoryEntity
            {
                CouponId    = couponid,
                CreatedDate = DateTime.Now,
                CreatedUser = request.AuthUid,
                FromProduct =
                    request.SType == SourceType.Product ? request.SourceId : 0,
                FromPromotion =
                    request.SType == SourceType.Promotion ? request.SourceId : 0,
                FromStore = storeId,
                FromUser  = recommendedUserId,
                Id        = 0,
                Status    = (int)DataStatus.Normal,
                User_Id   = request.AuthUid,
                //TODO:修改时间
                ValidStartDate = p.StartDate,//默认有效期7天
                ValidEndDate   = p.EndDate
            });

            //增加用户优惠券数
            if (coupon != null)
            {
                //TODO: 增加用户账户 优惠券 1张
                _userService.AddCoupon(coupon.User_Id, 1, request.AuthUid);
            }

            return(new ExecuteResult <CouponCodeResponse>(MappingManager.CouponCodeResponseMapping(coupon)));
        }