Beispiel #1
0
 /// <summary>
 /// 校验活动资源
 /// </summary>
 /// <param name="userId">用户Id</param>
 /// <param name="promotion">商品活动</param>
 /// <param name="comNumber">用户购买数量</param>
 /// <returns>用户是否可以购买</returns>
 public static bool CheckResource(Guid userId, TodayPromotionDTO promotion, int comNumber)
 {
     return(CheckResource(userId, new List <Tuple <TodayPromotionDTO, int> >()
     {
         new Tuple <TodayPromotionDTO, int>(promotion, comNumber)
     }));
 }
Beispiel #2
0
        private bool checkCanBuyByPromotion(TodayPromotionDTO promotion, CreateOrderCom createOrderCom)
        {
            if (promotion == null)
            {
                createOrderCom.checkResult.FillData(true, false, 0, ComCantBuyReasonEnum.NoPromotion, "活动已失效");
                return(false);
            }
            if (promotion.StartTime > DateTime.Now)
            {
                createOrderCom.checkResult.FillData(true, false, 0, ComCantBuyReasonEnum.PromotionNotStart,
                                                    "活动即将开始");
                return(false);
            }
            if (promotion.EndTime < DateTime.Now)
            {
                createOrderCom.checkResult.FillData(true, false, 0, ComCantBuyReasonEnum.PromotionEnded, "活动已结束");
                return(false);
            }
            if (!PromotionCheck.CheckResource(_condition.userId, promotion, createOrderCom.number))
            {
                createOrderCom.checkResult.FillData(true, false, 0, ComCantBuyReasonEnum.Stock, "商品库存不足");
                return(false);
            }

            return(true);
        }
Beispiel #3
0
        /// <summary>
        /// 校验活动资源
        /// </summary>
        /// <param name="userId"></param>
        /// <param name="promotions"></param>
        /// <returns>用户是否可以购买</returns>
        public static bool CheckResource(Guid userId, List <Tuple <TodayPromotionDTO, int> > promotions)
        {
            if (promotions == null || !promotions.Any())
            {
                return(true);
            }

            foreach (var tuple in promotions)
            {
                TodayPromotionDTO todaypromotion = tuple.Item1;
                int comNumber = tuple.Item2;

                if (todaypromotion.LimitBuyEach != -1)
                {
                    int sumLi = RedisHelper.GetHashValue <int>(RedisKeyConst.UserLimitPrefix + todaypromotion.PromotionId + ":" + todaypromotion.CommodityId, userId.ToString());
                    if (sumLi + comNumber > todaypromotion.LimitBuyEach)
                    {
                        return(false);
                    }
                }
                if (todaypromotion.LimitBuyTotal != -1)
                {
                    if (todaypromotion.SurplusLimitBuyTotal + comNumber > todaypromotion.LimitBuyTotal)
                    {
                        return(false);
                    }
                }
            }
            return(true);
        }