Browse Source

更新

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

47
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 Irony;
using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Mvc; using Microsoft.AspNetCore.Mvc;
using Microsoft.Extensions.Logging;
using Omu.ValueInjecter; using Omu.ValueInjecter;
using Volo.Abp; using Volo.Abp;
using Volo.Abp.Data; using Volo.Abp.Data;
@ -39,10 +40,11 @@ public class UnplannedIssueJobAppService
private readonly IBalanceAppService _balanceAppService; private readonly IBalanceAppService _balanceAppService;
private readonly IExpectOutAppService _expectOutAppService; private readonly IExpectOutAppService _expectOutAppService;
private readonly IUnitOfWorkManager _unitOfWorkManager; private readonly IUnitOfWorkManager _unitOfWorkManager;
private readonly ILogger<UnplannedIssueJobAppService> _logger;
public UnplannedIssueJobAppService( public UnplannedIssueJobAppService(
IUnplannedIssueJobRepository repository, IUnplannedIssueJobManager unplannedIssueJobManager, ILocationAppService locationAppService, IUnplannedIssueJobRepository repository, IUnplannedIssueJobManager unplannedIssueJobManager, ILocationAppService locationAppService,
IBalanceAppService balanceAppService, IExpectOutAppService expectOutAppService, IUnitOfWorkManager unitOfWorkManager IBalanceAppService balanceAppService, IExpectOutAppService expectOutAppService, IUnitOfWorkManager unitOfWorkManager, ILogger<UnplannedIssueJobAppService> logger
) : base(repository, unplannedIssueJobManager ) ) : base(repository, unplannedIssueJobManager )
{ {
_unplannedIssueJobManager = unplannedIssueJobManager; _unplannedIssueJobManager = unplannedIssueJobManager;
@ -50,6 +52,7 @@ public class UnplannedIssueJobAppService
_balanceAppService = balanceAppService; _balanceAppService = balanceAppService;
_expectOutAppService = expectOutAppService; _expectOutAppService = expectOutAppService;
_unitOfWorkManager = unitOfWorkManager; _unitOfWorkManager = unitOfWorkManager;
_logger = logger;
} }
/// <summary> /// <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>(); List<BalanceDTO> balanceDTOs = new List<BalanceDTO>();
decimal totalDeducted = 0; decimal totalDeducted = 0;
foreach (var item in inventory) foreach (var item in inventory)
{ {
decimal availableToDeduct = Math.Min(item.Qty, quantityToDeduct - totalDeducted); decimal availableToDeduct = Math.Min(item.Qty, quantityToDeduct - totalDeducted);
@ -122,10 +126,28 @@ public class UnplannedIssueJobAppService
totalDeducted += availableToDeduct; totalDeducted += availableToDeduct;
if (availableToDeduct > 0) if (availableToDeduct > 0)
{ {
var locationDto = await _locationAppService.GetByCodeAsync(item.LocationCode).ConfigureAwait(false);
BalanceDTO dto = new BalanceDTO(); BalanceDTO dto = new BalanceDTO();
dto.InjectFrom(item); switch (locationDto.Type)
dto.Qty = availableToDeduct; {
balanceDTOs.Add(dto); 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) if (totalDeducted >= quantityToDeduct)
@ -143,6 +165,7 @@ public class UnplannedIssueJobAppService
private async Task<List<UnplannedIssueJob>> BuildUnplannedIssueJobAsync(UnplannedIssueRequest requestDto, List<BalanceDTO> useBalancesOut) private async Task<List<UnplannedIssueJob>> BuildUnplannedIssueJobAsync(UnplannedIssueRequest requestDto, List<BalanceDTO> useBalancesOut)
{ {
List<UnplannedIssueJob> jobs = new EditableList<UnplannedIssueJob>(); List<UnplannedIssueJob> jobs = new EditableList<UnplannedIssueJob>();
List<string> Errors= new List<string>();
foreach (var requestDtoDetail in requestDto.Details)//非计划领料明细 foreach (var requestDtoDetail in requestDto.Details)//非计划领料明细
{ {
@ -171,10 +194,12 @@ public class UnplannedIssueJobAppService
decimal qty = 0; decimal qty = 0;
//实际要用库存 //实际要用库存
List<BalanceDTO> useBalances = new List<BalanceDTO>(); List<BalanceDTO> useBalances = new List<BalanceDTO>();
var returnlist=DeductInventory(usableList, requestDtoDetail.Qty); var returnlist=await DeductInventory(usableList, requestDtoDetail.Qty).ConfigureAwait(false);
useBalances.AddRange(returnlist); useBalances.AddRange(returnlist);
useBalancesOut.AddRange(returnlist); useBalancesOut.AddRange(returnlist);
//foreach (var balanceDto in usableList) //foreach (var balanceDto in usableList)
//{ //{
// decimal availableToDeduct = Math.Min(balanceDto.Qty, balanceDto.Qty - qty); // decimal availableToDeduct = Math.Min(balanceDto.Qty, balanceDto.Qty - qty);
@ -202,7 +227,8 @@ public class UnplannedIssueJobAppService
//} //}
if (returnlist.Count == 0) 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)) foreach (var balanceDtoGroup in useBalances.GroupBy(p => p.LocationCode))
{ {
@ -296,6 +322,13 @@ public class UnplannedIssueJobAppService
jobs.Add(job); jobs.Add(job);
} }
} }
if (Errors.Count > 0)
{
foreach (var itm in Errors)
{
_logger.LogError(itm);
}
}
return jobs; return jobs;
} }

Loading…
Cancel
Save