This commit is contained in:
tongfei
2024-04-19 17:29:49 +08:00
parent 96e5beb7c9
commit 356253d154

View File

@@ -4,10 +4,12 @@ using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Logging; using Microsoft.Extensions.Logging;
using Newtonsoft.Json; using Newtonsoft.Json;
using System; using System;
using System.Collections.Concurrent;
using System.Collections.Generic; using System.Collections.Generic;
using System.Linq; using System.Linq;
using System.Text; using System.Text;
using System.Text.Json; using System.Text.Json;
using System.Threading;
using System.Threading.Tasks; using System.Threading.Tasks;
using WMS.Web.Core.Dto; using WMS.Web.Core.Dto;
using WMS.Web.Core.Dto.ChangeBoxRecord; using WMS.Web.Core.Dto.ChangeBoxRecord;
@@ -49,6 +51,8 @@ namespace WMS.Web.Domain.Services
private readonly IBoxInventoryRepositories _boxInventoryRepositories; private readonly IBoxInventoryRepositories _boxInventoryRepositories;
private readonly ILogger<InStockService> _logger; private readonly ILogger<InStockService> _logger;
private readonly IServiceScopeFactory _serviceScopeFactory; private readonly IServiceScopeFactory _serviceScopeFactory;
private readonly ConcurrentDictionary<int, SemaphoreSlim> _locks = new ConcurrentDictionary<int, SemaphoreSlim>();
public InStockService(IMapper mapper, ISerialNumbersRepositories serialNumbersRepositories, IErpService erpService, IBoxInventoryService boxInventoryService, ISerialNumberService serialNumberService, ILoginService loginService, IBoxRepositories boxRepositories, public InStockService(IMapper mapper, ISerialNumbersRepositories serialNumbersRepositories, IErpService erpService, IBoxInventoryService boxInventoryService, ISerialNumberService serialNumberService, ILoginService loginService, IBoxRepositories boxRepositories,
IBasicsRepositories basicsRepositories, IErpBasicDataExtendService erpBasicDataExtendService, IChangeMoveBoxService changeMoveBoxService, IInStockTaskBoxRepositories inStockTaskBoxRepositories, IBasicsRepositories basicsRepositories, IErpBasicDataExtendService erpBasicDataExtendService, IChangeMoveBoxService changeMoveBoxService, IInStockTaskBoxRepositories inStockTaskBoxRepositories,
IInStockRepositories inStockRepositories, IInStockTaskRepositories inStockTaskRepositories, IBoxInventoryRepositories boxInventoryRepositories, ILogger<InStockService> logger, IServiceScopeFactory serviceScopeFactory) IInStockRepositories inStockRepositories, IInStockTaskRepositories inStockTaskRepositories, IBoxInventoryRepositories boxInventoryRepositories, ILogger<InStockService> logger, IServiceScopeFactory serviceScopeFactory)
@@ -128,6 +132,12 @@ namespace WMS.Web.Domain.Services
/// <param name="loginInfo"></param> /// <param name="loginInfo"></param>
/// <returns></returns> /// <returns></returns>
public async Task<Result> Shelf(PurchaseShelfRequest instock, LoginInDto loginInfo) public async Task<Result> Shelf(PurchaseShelfRequest instock, LoginInDto loginInfo)
{
var taskId= instock.Details.Select(x => x.TaskId).FirstOrDefault();
var taskLock = _locks.GetOrAdd(taskId, _ => new SemaphoreSlim(1, 1));
await taskLock.WaitAsync();
try
{ {
IDbContextTransaction _transaction = _basicsRepositories.GetTransaction(); IDbContextTransaction _transaction = _basicsRepositories.GetTransaction();
bool isRollback = false; bool isRollback = false;
@@ -153,6 +163,13 @@ namespace WMS.Web.Domain.Services
} }
return Result.ReSuccess(); return Result.ReSuccess();
} }
finally
{
taskLock.Release();
}
}
/// <summary> /// <summary>
/// 非采购单上架 /// 非采购单上架