Browse Source

更新

dev_DY_CC
赵新宇 7 months ago
parent
commit
9f63954713
  1. 41
      be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Jobs/UnplannedIssueJobs/UnplannedIssueJobAppService.cs

41
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<UnplannedIssueJobAppService> _logger;
public UnplannedIssueJobAppService(
IUnplannedIssueJobRepository repository, IUnplannedIssueJobManager unplannedIssueJobManager, ILocationAppService locationAppService,
IBalanceAppService balanceAppService, IExpectOutAppService expectOutAppService, IUnitOfWorkManager unitOfWorkManager
IBalanceAppService balanceAppService, IExpectOutAppService expectOutAppService, IUnitOfWorkManager unitOfWorkManager, ILogger<UnplannedIssueJobAppService> logger
) : base(repository, unplannedIssueJobManager )
{
_unplannedIssueJobManager = unplannedIssueJobManager;
@ -50,6 +52,7 @@ public class UnplannedIssueJobAppService
_balanceAppService = balanceAppService;
_expectOutAppService = expectOutAppService;
_unitOfWorkManager = unitOfWorkManager;
_logger = logger;
}
/// <summary>
@ -111,10 +114,11 @@ public class UnplannedIssueJobAppService
private List<BalanceDTO> DeductInventory(List<BalanceDTO> inventory, decimal quantityToDeduct)
private async Task<List<BalanceDTO>> DeductInventory(List<BalanceDTO> inventory, decimal quantityToDeduct)
{
List<BalanceDTO> balanceDTOs = new List<BalanceDTO>();
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();
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<List<UnplannedIssueJob>> BuildUnplannedIssueJobAsync(UnplannedIssueRequest requestDto, List<BalanceDTO> useBalancesOut)
{
List<UnplannedIssueJob> jobs = new EditableList<UnplannedIssueJob>();
List<string> Errors= new List<string>();
foreach (var requestDtoDetail in requestDto.Details)//非计划领料明细
{
@ -171,10 +194,12 @@ public class UnplannedIssueJobAppService
decimal qty = 0;
//实际要用库存
List<BalanceDTO> useBalances = new List<BalanceDTO>();
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;
}

Loading…
Cancel
Save