diff --git a/src/WMS.Web.Domain/IService/Public/IRedisConcurrentProcessService.cs b/src/WMS.Web.Domain/IService/Public/IRedisConcurrentProcessService.cs new file mode 100644 index 00000000..bdb30401 --- /dev/null +++ b/src/WMS.Web.Domain/IService/Public/IRedisConcurrentProcessService.cs @@ -0,0 +1,13 @@ +using System; +using System.Collections.Generic; +using System.Text; + +namespace WMS.Web.Domain.IService.Public +{ + public interface IRedisConcurrentProcessService + { + bool CanAccessMethod(string cacheKey); + + void UpdateAccessStatus(string cacheKey, bool canAccess); + } +} diff --git a/src/WMS.Web.Domain/Services/Public/RedisConcurrentProcessService.cs b/src/WMS.Web.Domain/Services/Public/RedisConcurrentProcessService.cs new file mode 100644 index 00000000..682f25d3 --- /dev/null +++ b/src/WMS.Web.Domain/Services/Public/RedisConcurrentProcessService.cs @@ -0,0 +1,29 @@ +using StackExchange.Redis; +using System; +using System.Collections.Generic; +using System.Text; +using WMS.Web.Domain.IService.Public; + +namespace WMS.Web.Domain.Services.Public +{ + public class RedisConcurrentProcessService: IRedisConcurrentProcessService + { + private readonly RedisClientService _redisClientService; + public RedisConcurrentProcessService(RedisClientService redisClientService) + { + this._redisClientService = redisClientService; + } + + public bool CanAccessMethod(string cacheKey) + { + // 使用 Redis 来存储并发控制标记 + return _redisClientService.SetStringKey(cacheKey, "true", TimeSpan.FromMinutes(1)); + } + + public void UpdateAccessStatus(string cacheKey, bool canAccess) + { + // 更新 Redis 缓存项的值 + _redisClientService.SetStringKey(cacheKey, canAccess.ToString(), TimeSpan.FromMinutes(1)); + } + } +} diff --git a/src/WMS.Web.Repositories/DependencyInjection/AppBuilder.cs b/src/WMS.Web.Repositories/DependencyInjection/AppBuilder.cs index 710ee8a0..e20b581a 100644 --- a/src/WMS.Web.Repositories/DependencyInjection/AppBuilder.cs +++ b/src/WMS.Web.Repositories/DependencyInjection/AppBuilder.cs @@ -331,6 +331,7 @@ namespace WMS.Web.Repositories.DependencyInjection Services.AddTransient(); Services.AddTransient(); Services.AddTransient(); + Services.AddTransient(); } diff --git a/src/WMS.Web.Repositories/InStockTaskRepositories.cs b/src/WMS.Web.Repositories/InStockTaskRepositories.cs index 694bb73a..45380ff3 100644 --- a/src/WMS.Web.Repositories/InStockTaskRepositories.cs +++ b/src/WMS.Web.Repositories/InStockTaskRepositories.cs @@ -4,6 +4,7 @@ using Microsoft.EntityFrameworkCore.Storage; using System; using System.Collections.Generic; using System.Linq; +using System.Runtime.CompilerServices; using System.Text; using System.Threading.Tasks; using WMS.Web.Core; @@ -762,7 +763,18 @@ namespace WMS.Web.Repositories } if (dto.SerialNumbers != null && dto.SerialNumbers.Count != 0) { - var tids= await _context.InStockDetails.Where(w => w.SerialNumbers.SequenceEqual(dto.SerialNumbers)).GroupBy(x => x.TaskId).Select(x => x.Key).ToListAsync(); + //var tids= await _context.InStockDetails.Where(a => a.SerialNumbers.Intersect(dto.SerialNumbers).Count() == dto.SerialNumbers.Count).GroupBy(x => x.TaskId).Select(x => x.Key).ToListAsync(); + string str = $"select * from t_wms_instock_details where "; + for (int i = 0; i < dto.SerialNumbers.Count(); i++) + { + if (i == 0) + str += $"SerialNumbers like '%\"{dto.SerialNumbers[i]}\"%'"; + else + str += $" or SerialNumbers like '%\"{dto.SerialNumbers[i]}\"%'"; + } + var fs = FormattableStringFactory.Create(str); + var InStockDetails = _context.Set().FromSqlInterpolated(fs).ToList(); + var tids=InStockDetails.GroupBy(x => x.TaskId).Select(x => x.Key).ToList(); taskIds.AddRange(tids); }