diff --git a/src/WMS.Web.Api/Controllers/InStockController.cs b/src/WMS.Web.Api/Controllers/InStockController.cs index 06af6a75..95547a83 100644 --- a/src/WMS.Web.Api/Controllers/InStockController.cs +++ b/src/WMS.Web.Api/Controllers/InStockController.cs @@ -32,12 +32,12 @@ namespace WMS.Web.Api.Controllers private readonly IInStockRepositories _inStockRepositories; private readonly IExportExcelService _exportExcelService; private readonly IRedisConcurrentProcessService _redisConcurrentProcessService; - public InStockController(IOptions option, + public InStockController(IOptions option, ILoginService loginService, - IInStockRepositories inStockRepositories, + IInStockRepositories inStockRepositories, IInStockService inStockService, IExportExcelService exportExcelService, - IRedisConcurrentProcessService redisConcurrentProcessService) + IRedisConcurrentProcessService redisConcurrentProcessService) { _option = option?.Value; this._redisConcurrentProcessService = redisConcurrentProcessService; @@ -59,9 +59,9 @@ namespace WMS.Web.Api.Controllers var loginInfo = _loginService.GetLoginInfo(this.HttpContext.Request.Headers["Authorization"]); if (loginInfo == null || loginInfo.UserInfo == null) return ResultPagedList.ReFailure(ResultCodes.Token_Invalid_Error); - var (list, count) = await _inStockRepositories.GetPagedList(dto,loginInfo.UserInfo.CompanyId); + var (list, count) = await _inStockRepositories.GetPagedList(dto, loginInfo.UserInfo.CompanyId); return ResultPagedList.ReSuccess(list, count); - + } /// @@ -163,7 +163,7 @@ namespace WMS.Web.Api.Controllers if (loginInfo == null || loginInfo.UserInfo == null) return Result.ReFailure(ResultCodes.Token_Invalid_Error); - return await _inStockService.Sync(dto,loginInfo); + return await _inStockService.Sync(dto, loginInfo); } } } diff --git a/src/WMS.Web.Api/Controllers/TestController.cs b/src/WMS.Web.Api/Controllers/TestController.cs index df4ea8c6..7be5691d 100644 --- a/src/WMS.Web.Api/Controllers/TestController.cs +++ b/src/WMS.Web.Api/Controllers/TestController.cs @@ -52,12 +52,14 @@ namespace WMS.Web.Api.Controllers private readonly ISendMessageService _sendMessageService; private readonly IMaterialService _materialService; private readonly IMemoryCache _memoryCache; - public TestController(IErpService erpService, IInStockTaskService inStockTaskService, IBoxInventoryRepositories boxInventoryRepositories, + private readonly IRedisConcurrentProcessService _redisConcurrentProcessService; + public TestController(IErpService erpService, IInStockTaskService inStockTaskService, IBoxInventoryRepositories boxInventoryRepositories, IRedisConcurrentProcessService redisConcurrentProcessService, IBasicsRepositories transactionRepositories, IOpsService opsService, IBoxService boxService, IBasicsRepositories basicsRepositories, IMemoryCache memoryCache, IOutStockTaskRepositories outStockTaskRepositories, IOutStockTaskService outStockTaskService, IOptions options, ILoginService loginService, ISendMessageService sendMessageService, ITakeStockService takeStockService, ITakeStockRepositories takeStockRepositories, IOutStockService outStockService, IInStockTaskRepositories inStockTaskRepositories, IWebHostEnvironment env, IMaterialService materialService, IOutStockRepositories outStockRepositories) { + _redisConcurrentProcessService = redisConcurrentProcessService; _memoryCache = memoryCache; _materialService = materialService; _loginService = loginService; @@ -88,7 +90,7 @@ namespace WMS.Web.Api.Controllers await _outStockRepositories.GetEntityListBySerialNumbers(new List() { "131VU-32C5A" }); //await _outStockRepositories.GetEntityListByBoxBillNos(new List() { "CTN0002187" }); - + //list[0].Details[0].ErpDetails[0].AccruedQty = 2; //list[0].Details[0].ErpDetails.Add(new OutStockTaskErpDetails() @@ -349,7 +351,7 @@ namespace WMS.Web.Api.Controllers /// [HttpGet] [Route("Send")] - public async Task Send() + public async Task Send() { return await _sendMessageService.Execute(); } @@ -360,7 +362,7 @@ namespace WMS.Web.Api.Controllers /// [HttpGet] [Route("SyscMats")] - public async Task SyscMats() + public async Task SyscMats() { return await _materialService.SyncNewMaterials(); } @@ -371,7 +373,7 @@ namespace WMS.Web.Api.Controllers /// [HttpGet] [Route("getmt")] - public async Task GetMaterial() + public async Task GetMaterial() { var materials_result = await _erpService.BillQueryForMaterial(); var materials = materials_result.Data.ToList(); @@ -386,7 +388,7 @@ namespace WMS.Web.Api.Controllers /// [HttpGet] [Route("ClearCache")] - public Result ClearCache() + public Result ClearCache() { //通过反射调用清空缓存方法 PropertyInfo prop = _memoryCache.GetType().GetProperty("EntriesCollection", BindingFlags.Instance | BindingFlags.GetProperty | BindingFlags.NonPublic | BindingFlags.Public); @@ -395,5 +397,24 @@ namespace WMS.Web.Api.Controllers clearMethod.Invoke(innerCache, null); return Result.ReSuccess(); } + /// + /// + /// + /// + [HttpGet] + [Route("binfa")] + public Result BinFa() + { + var cacheKey = "instock_shelf_" + 1; + var IscanAccess = _redisConcurrentProcessService.GetRedisKeyValue(cacheKey); + if (IscanAccess) + return Result.ReFailure(ResultCodes.Concurrent_Instock); + + Console.WriteLine("process..."+ IscanAccess); + _redisConcurrentProcessService.UpdateAccessStatus(cacheKey, true); + var tt2 = _redisConcurrentProcessService.GetRedisKeyValue(cacheKey); + Console.WriteLine("redis1:" + tt2); + return Result.ReSuccess(tt2); + } } } diff --git a/src/WMS.Web.Api/wwwroot/WMS.Web.Api.xml b/src/WMS.Web.Api/wwwroot/WMS.Web.Api.xml index 06963adf..e483d604 100644 --- a/src/WMS.Web.Api/wwwroot/WMS.Web.Api.xml +++ b/src/WMS.Web.Api/wwwroot/WMS.Web.Api.xml @@ -824,5 +824,11 @@ + + + + + + diff --git a/src/WMS.Web.Domain/IService/Public/IRedisConcurrentProcessService.cs b/src/WMS.Web.Domain/IService/Public/IRedisConcurrentProcessService.cs index bdb30401..8ae6e0a3 100644 --- a/src/WMS.Web.Domain/IService/Public/IRedisConcurrentProcessService.cs +++ b/src/WMS.Web.Domain/IService/Public/IRedisConcurrentProcessService.cs @@ -8,6 +8,8 @@ namespace WMS.Web.Domain.IService.Public { bool CanAccessMethod(string cacheKey); + bool GetRedisKeyValue(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 index 682f25d3..48981da0 100644 --- a/src/WMS.Web.Domain/Services/Public/RedisConcurrentProcessService.cs +++ b/src/WMS.Web.Domain/Services/Public/RedisConcurrentProcessService.cs @@ -17,13 +17,21 @@ namespace WMS.Web.Domain.Services.Public public bool CanAccessMethod(string cacheKey) { // 使用 Redis 来存储并发控制标记 - return _redisClientService.SetStringKey(cacheKey, "true", TimeSpan.FromMinutes(1)); + return _redisClientService.SetStringKey(cacheKey, true, TimeSpan.FromMinutes(1)); + } + + + public bool GetRedisKeyValue(string cacheKey) + { + // 使用 Redis 来存储并发控制标记 + var isSuccess= _redisClientService.GetStringKey(cacheKey); + return isSuccess; } public void UpdateAccessStatus(string cacheKey, bool canAccess) { // 更新 Redis 缓存项的值 - _redisClientService.SetStringKey(cacheKey, canAccess.ToString(), TimeSpan.FromMinutes(1)); + _redisClientService.SetStringKey(cacheKey, canAccess, TimeSpan.FromMinutes(1)); } } } diff --git a/src/WMS.Web.Domain/Values/ResultCodes.cs b/src/WMS.Web.Domain/Values/ResultCodes.cs index 4a8506ce..93b8508a 100644 --- a/src/WMS.Web.Domain/Values/ResultCodes.cs +++ b/src/WMS.Web.Domain/Values/ResultCodes.cs @@ -24,6 +24,8 @@ namespace WMS.Web.Domain.Values public static ValueTuple NoDateError = (40005, "数据不存在"); public static ValueTuple SourceBillNoDateError = (40005, "来源单不存在,请核对后再试"); + public static ValueTuple Concurrent_Instock = (80005, "该任务单正在处理中"); + /// /// 没有菜单权限,无法登录 ///