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)); }
private static async Task <OrderCountResponse> SetCountValue(OrderCountResponse model, string key, int num, CounterClient client) { var getcount = await client.CountAsync(key); if (!getcount.Success && !getcount.Message.Equals("Key不存在")) { model.RedisField = true; model.RedisMsg = getcount.Message; return(model); } else { IResult <long> setcount; if (getcount.Message != null && getcount.Message.Equals("Key不存在")) { setcount = await client.IncrementAsync(key, num); if (!setcount.Success) { model.RedisField = true; model.RedisMsg = getcount.Message; return(model); } } else { var discountcounter = await client.DecrementAsync(key, getcount.Value); if (!discountcounter.Success) { model.RedisField = true; model.RedisMsg = getcount.Message; return(model); } else { setcount = await client.IncrementAsync(key, num); if (!setcount.Success) { model.RedisField = true; model.RedisMsg = getcount.Message; return(model); } } } } return(model); }
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); }
private static async Task <OrderCountResponse> GetCountValue(OrderCountResponse model, KeyType type, string key, CounterClient client) { switch (type) { case KeyType.PlaceUserIdKey: var counterpu = await client.CountAsync(key); if (counterpu.Success) { model.PlaceUserIdCountCacheNum = (int)counterpu.Value; } else { model.RedisField = true; model.RedisMsg = $"{counterpu.Message}key==>{key},"; // return model; } break; case KeyType.PlaceDeviceIdKey: var counterpd = await client.CountAsync(key); if (counterpd.Success) { model.PlaceDeviceCountCacheNum = (int)counterpd.Value; } else { model.RedisField = true; model.RedisMsg += $"{counterpd.Message}key==>{key},"; // return model; } break; case KeyType.PlaceUserTelKey: var counterpt = await client.CountAsync(key); if (counterpt.Success) { model.PlaceUserTelCountCacheNum = (int)counterpt.Value; } else { model.RedisField = true; model.RedisMsg += $"{counterpt.Message}key==>{key},"; // return model; } break; case KeyType.PersonUserIdKey: var counterpu2 = await client.CountAsync(key); if (counterpu2.Success) { model.PersonUserIdCountCacheNum = (int)counterpu2.Value; } else { model.RedisField = true; model.RedisMsg += $"{counterpu2.Message}key==>{key},"; return(model); } break; case KeyType.PersonDeviceIdKey: var counterpd2 = await client.CountAsync(key); if (counterpd2.Success) { model.PersonDeviceCountCacheNum = (int)counterpd2.Value; } else { model.RedisField = true; model.RedisMsg += $"{counterpd2.Message}key==>{key},"; // return model; } break; case KeyType.PersonUserTelKey: var counterpt2 = await client.CountAsync(key); if (counterpt2.Success) { model.PersonUserTelCountCacheNum = (int)counterpt2.Value; } else { model.RedisField = true; model.RedisMsg += $"{counterpt2.Message}key==>{key}"; // return model; } break; default: return(model); } return(model); }