/// <summary>
 /// 批量获取用户活动已购数量缓存数据
 /// </summary>
 /// <param name="userId"></param>
 /// <param name="activityIdList"></param>
 /// <returns></returns>
 public async Task <OperationResult <IEnumerable <UserActivityBuyNumModel> > > GetOrSetUserActivityBuyNumCacheAsync(string userId, List <string> activityIdList)
 {
     if (string.IsNullOrEmpty(userId) || !(activityIdList?.Count > 0))
     {
         return(OperationResult.FromError <IEnumerable <UserActivityBuyNumModel> >("1", "传入参数错误"));
     }
     return(OperationResult.FromResult(await DiscountActivityInfoManager.GetOrSetUserActivityBuyNumCache(userId, activityIdList)));
 }
Ejemplo n.º 2
0
        /// <summary>
        /// 遍历每个活动组
        /// </summary>
        /// <returns></returns>
        private async Task ForEachActivityGroup()
        {
            foreach (var group in _productGroups)
            {
                var currentActivityId                = group.Key;
                var currentActivity                  = _activities.FirstOrDefault(s => string.Equals(s.ActivityId, currentActivityId));
                var currentActivityPids              = group.Select(g => g.Pid).ToList();
                var currentActivityRequestNum        = group.Sum(s => s.RequestNum);
                var currentActivityRequestTotalPrice = group.Sum(s => s.RequestNum * s.RequestPrice);
                var userBuyNum = await DiscountActivityInfoManager.GetOrSetUserActivityBuyNumCache(_userId, new List <string>() { currentActivityId });

                if (_isCreateOrder)
                {
                    await DiscountActivityInfoManager.IncreaseUserActivityBuyNumCache(_userId, currentActivityId, currentActivityRequestNum, TimeSpan.FromMinutes(1));
                }
                var currentActivityUserAlreadyBuyNum = userBuyNum?.FirstOrDefault()?.BuyNum ?? 0;

                if (currentActivity != null)
                {
                    var currentActivityRules = _activityDiscountRules.Where(s => string.Equals(currentActivityId, s.ActivityId)).ToList();
                    if (!currentActivityRules.Any())
                    {
                        _returnList.AddRange(group.Select(g => new ProductHitDiscountResponse()
                        {
                            DiscountPrice       = g.RequestPrice,
                            HasDiscountActivity = false,
                            DiscountRule        = null,
                            IsHit       = false,
                            Pid         = g.Pid,
                            FailCode    = nameof(ProductHitFailCode.NoneActivityDiscount),
                            FailMessage = ProductHitFailCode.NoneActivityDiscount,
                        }));
                        continue;
                    }
                    if (currentActivity.Is_PurchaseLimit == 1 && currentActivity.LimitQuantity < currentActivityUserAlreadyBuyNum + currentActivityRequestNum)//当前活动用户限购
                    {
                        _returnList.AddRange(group.Select(g => new ProductHitDiscountResponse()
                        {
                            DiscountPrice       = g.RequestPrice,
                            HasDiscountActivity = true,
                            DiscountRule        = null,
                            IsHit       = false,
                            Pid         = g.Pid,
                            FailCode    = nameof(ProductHitFailCode.UserBeLimited),
                            FailMessage = ProductHitFailCode.UserBeLimited,
                        }));
                        continue;
                    }
                    var productSoldNums = (await DiscountActivityInfoManager.GetOrSetActivityProductSoldNumCache(currentActivityId, currentActivityPids));
                    await ForEachActivityGroupProducts(group, productSoldNums, currentActivityRules,
                                                       currentActivity, currentActivityRequestNum, currentActivityRequestTotalPrice);
                }
            }
        }