diff --git a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Jobs/UnplannedIssueJobs/UnplannedIssueJobAppService.cs b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Jobs/UnplannedIssueJobs/UnplannedIssueJobAppService.cs index d63220b5e..1775a1a6a 100644 --- a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Jobs/UnplannedIssueJobs/UnplannedIssueJobAppService.cs +++ b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Jobs/UnplannedIssueJobs/UnplannedIssueJobAppService.cs @@ -8,6 +8,7 @@ using Castle.Components.DictionaryAdapter; using Irony; using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Mvc; +using Microsoft.Extensions.Logging; using Omu.ValueInjecter; using Volo.Abp; using Volo.Abp.Data; @@ -39,10 +40,11 @@ public class UnplannedIssueJobAppService private readonly IBalanceAppService _balanceAppService; private readonly IExpectOutAppService _expectOutAppService; private readonly IUnitOfWorkManager _unitOfWorkManager; + private readonly ILogger _logger; public UnplannedIssueJobAppService( IUnplannedIssueJobRepository repository, IUnplannedIssueJobManager unplannedIssueJobManager, ILocationAppService locationAppService, - IBalanceAppService balanceAppService, IExpectOutAppService expectOutAppService, IUnitOfWorkManager unitOfWorkManager + IBalanceAppService balanceAppService, IExpectOutAppService expectOutAppService, IUnitOfWorkManager unitOfWorkManager, ILogger logger ) : base(repository, unplannedIssueJobManager ) { _unplannedIssueJobManager = unplannedIssueJobManager; @@ -50,6 +52,7 @@ public class UnplannedIssueJobAppService _balanceAppService = balanceAppService; _expectOutAppService = expectOutAppService; _unitOfWorkManager = unitOfWorkManager; + _logger = logger; } /// @@ -111,10 +114,11 @@ public class UnplannedIssueJobAppService - private List DeductInventory(List inventory, decimal quantityToDeduct) + private async Task> DeductInventory(List inventory, decimal quantityToDeduct) { List balanceDTOs = new List(); decimal totalDeducted = 0; + foreach (var item in inventory) { decimal availableToDeduct = Math.Min(item.Qty, quantityToDeduct - totalDeducted); @@ -122,10 +126,28 @@ public class UnplannedIssueJobAppService totalDeducted += availableToDeduct; if (availableToDeduct > 0) { + var locationDto = await _locationAppService.GetByCodeAsync(item.LocationCode).ConfigureAwait(false); BalanceDTO dto = new BalanceDTO(); - dto.InjectFrom(item); - dto.Qty = availableToDeduct; - balanceDTOs.Add(dto); + switch (locationDto.Type) + { + case EnumLocationType.RAW: + dto.InjectFrom(item); + dto.Qty = availableToDeduct; + balanceDTOs.Add(dto); + break; + case EnumLocationType.FG: + case EnumLocationType.DimensionalStorehouse: + case EnumLocationType.CUST: + case EnumLocationType.KittingWip: + case EnumLocationType.OUTSIDE: + case EnumLocationType.SEMI: + case EnumLocationType.WIP: + case EnumLocationType.THIRDPARTY: + + dto.InjectFrom(item); + balanceDTOs.Add(dto); + break; + } } // 如果已经扣减达到所需数量,退出循环 if (totalDeducted >= quantityToDeduct) @@ -143,6 +165,7 @@ public class UnplannedIssueJobAppService private async Task> BuildUnplannedIssueJobAsync(UnplannedIssueRequest requestDto, List useBalancesOut) { List jobs = new EditableList(); + List Errors= new List(); foreach (var requestDtoDetail in requestDto.Details)//非计划领料明细 { @@ -171,10 +194,12 @@ public class UnplannedIssueJobAppService decimal qty = 0; //实际要用库存 List useBalances = new List(); - var returnlist=DeductInventory(usableList, requestDtoDetail.Qty); + var returnlist=await DeductInventory(usableList, requestDtoDetail.Qty).ConfigureAwait(false); useBalances.AddRange(returnlist); useBalancesOut.AddRange(returnlist); + + //foreach (var balanceDto in usableList) //{ // decimal availableToDeduct = Math.Min(balanceDto.Qty, balanceDto.Qty - qty); @@ -202,7 +227,8 @@ public class UnplannedIssueJobAppService //} if (returnlist.Count == 0) { - throw new UserFriendlyException("库存余额不够!"); + Errors.Add($"{"非生产领料"+requestDto.Number+"零件号:"+requestDtoDetail.ItemCode + "库存不够" + requestDtoDetail.Qty.ToString()}"); + } foreach (var balanceDtoGroup in useBalances.GroupBy(p => p.LocationCode)) { @@ -296,6 +322,13 @@ public class UnplannedIssueJobAppService jobs.Add(job); } } + if (Errors.Count > 0) + { + foreach (var itm in Errors) + { + _logger.LogError(itm); + } + } return jobs; }