Пример #1
0
 public void CacheSetTest()
 {
     try
     {
         var request = new OrderCountCacheRequest
         {
             ActivityId  = "dde07654-f666-4648-9a26-bdfadb0166e5",
             UserId      = "21fa116e-5aaf-4dd8-9ee0-c2d93cb026c7",
             UserTel     = "13671714523",
             Pid         = "LG-FT-503|11",
             PerSonalNum = 4,
             PlaceNum    = 4
         };
         using (var client = new FlashSaleClient())
         {
             var result = client.SetUserCreateFlashOrderCountCache(request);
             result.ThrowIfException();
             Assert.IsNotNull(result.Result);
         }
     }
     catch (Exception e)
     {
         Console.WriteLine(e);
         throw;
     }
 }
Пример #2
0
 public void CacheGetTest()
 {
     try
     {
         var request = new OrderCountCacheRequest
         {
             ActivityId = "89a02e1a-f560-4460-875a-98839c945954",
             UserId     = "1AB0FA62-91BB-4FE7-8CF2-EB57367463D4",
             UserTel    = "18890495250",
             Pid        = "LG-FT-504-16-7001X|39",
             DeviceId   = "8805a4237859e2f86d130e3933eb0ed0"
         };
         using (var client = new FlashSaleClient())
         {
             var result = client.GetUserCreateFlashOrderCountCache(request);
             result.ThrowIfException();
             Assert.IsNotNull(result.Result);
         }
     }
     catch (Exception e)
     {
         Console.WriteLine(e);
         throw;
     }
 }
Пример #3
0
        private static List <CountKeyModel> SetKeys(OrderCountCacheRequest request)
        {
            #region key
            var keyModels  = new List <CountKeyModel>();
            var keyrequest = new GenerateKeyRequest
            {
                DeviceId   = request.DeviceId,
                UserId     = request.UserId.ToString(),
                UserTel    = request.UserTel,
                ActivityId = request.ActivityId.ToString(),
                Pid        = request.Pid
            };
            var countKey = new GenerateFlashSaleKey(keyrequest);
            keyModels.Add(new CountKeyModel
            {
                Key  = countKey.PlacekeyUserId,
                Sort = 1,
                Type = KeyType.PlaceUserIdKey
            });
            keyModels.Add(new CountKeyModel
            {
                Key  = countKey.PlacekeyDeviceId,
                Sort = 2,
                Type = KeyType.PlaceDeviceIdKey
            });

            keyModels.Add(new CountKeyModel
            {
                Key  = countKey.PlacekeyUseTel,
                Sort = 3,
                Type = KeyType.PlaceUserTelKey
            });

            keyModels.Add(new CountKeyModel
            {
                Key  = countKey.PersonalkeyUserId,
                Sort = 4,
                Type = KeyType.PersonUserIdKey
            });

            keyModels.Add(new CountKeyModel
            {
                Key  = countKey.PersonalkeyDeviceId,
                Sort = 5,
                Type = KeyType.PersonDeviceIdKey
            });

            keyModels.Add(new CountKeyModel
            {
                Key  = countKey.PersonalkeyUseTel,
                Sort = 6,
                Type = KeyType.PersonUserTelKey
            });
            return(keyModels);

            #endregion
        }
Пример #4
0
        public static async Task <OrderCountResponse> SetUserCreateFlashOrderCountCacheAsync(
            OrderCountCacheRequest request)
        {
            var keyModels = SetKeys(request);
            var flashSale = await DalFlashSale.FetchFlashSaleProductModel(new OrderItems()
            {
                PID        = request.Pid,
                ActivityId = new Guid(request.ActivityId)
            });

            var response = new OrderCountResponse();

            using (var client = CacheHelper.CreateCounterClient(ClientName))
            {
                //Queryable<int> personSorts = new Queryable[4, 5, 6];
                //个人限购
                if (flashSale.MaxQuantity.HasValue)
                {
                    foreach (var key in keyModels.OrderBy(r => r.Sort).Where(r => r.Sort == 4 || r.Sort == 5 || r.Sort == 6))
                    {
                        response = await SetCountValue(response, key.Key, request.PerSonalNum, client);

                        if (response.RedisField)
                        {
                            break;
                        }
                    }
                }
                //会场限购
                if (flashSale.PlaceQuantity.HasValue && flashSale.PlaceQuantity.Value > 0)
                {
                    var saleProducts = (await DalFlashSale.SelectFlashSaleFromDBAsync(new Guid(request.ActivityId))).Products.ToList();
                    var salePids     = saleProducts.Where(r => r.IsJoinPlace).Select(r => r.PID).ToList();
                    if (salePids.Contains(request.Pid))
                    {
                        foreach (var key in keyModels.OrderBy(r => r.Sort).Where(r => r.Sort == 1 || r.Sort == 2 || r.Sort == 3))
                        {
                            response = await SetCountValue(response, key.Key, request.PlaceNum, client);

                            if (response.RedisField)
                            {
                                break;
                            }
                        }
                    }
                }
            }
            if (response.RedisField)
            {
                return(response);
            }
            return(await GetUserCreateFlashOrderCountCacheAsync(request));
        }
Пример #5
0
        public static async Task <OrderCountResponse> GetUserCreateFlashOrderCountCacheAsync(
            OrderCountCacheRequest request)
        {
            var responseModel = new OrderCountResponse();
            var keyModels     = SetKeys(request);

            using (var client = CacheHelper.CreateCounterClient(ClientName))
            {
                foreach (var key in keyModels.OrderBy(r => r.Sort))
                {
                    await GetCountValue(responseModel, key.Type, key.Key, client);

                    //if(result.RedisField)
                    //    break;
                }
            }
            var flashsale = (await DalFlashSale.SelectFlashSaleFromDBAsync(new Guid(request.ActivityId)));

            if (flashsale == null)
            {
                return(responseModel);
            }
            var saleProducts = flashsale.Products.ToList();
            var salePids     = saleProducts.Where(r => r.IsJoinPlace).Select(r => r.PID).ToList();
            var saleproduct  = saleProducts.FirstOrDefault(r => r.PID == request.Pid);
            var records      = (await DalFlashSale.SelectOrderActivityProductOrderRecordsAsync(
                                    new Guid(request.UserId), request.DeviceId,
                                    new Guid(request.ActivityId), request.UserTel)).ToList();
            var personQty = records?.Where(r => r.PID == request.Pid).Sum(r => r.Quantity) ?? 0;
            var placeQty  = records.Where(r => salePids.Contains(r.PID)).Sum(r => r.Quantity);

            responseModel.UserDbPersonLimitQty = personQty;
            responseModel.UserDbPlaceLimitQty  = placeQty;
            responseModel.PersonConfigLimitQty = saleproduct?.MaxQuantity;
            responseModel.PlaceConfigLimitQty  = saleproduct?.PlaceQuantity;
            responseModel.TotalConfigQty       = saleproduct?.TotalQuantity;
            return(responseModel);
        }
Пример #6
0
 public async Task <OperationResult <OrderCountResponse> > SetUserCreateFlashOrderCountCacheAsync(OrderCountCacheRequest request)
 {
     return(OperationResult.FromResult(await FlashSaleManager.SetUserCreateFlashOrderCountCacheAsync(request)));
 }