/// <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) })); }
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); }
/// <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); }