|
|
@ -120,16 +120,18 @@ public class UnplannedIssueJobAppService |
|
|
|
decimal availableToDeduct = Math.Min(item.Qty, quantityToDeduct - totalDeducted); |
|
|
|
item.Qty -= availableToDeduct; |
|
|
|
totalDeducted += availableToDeduct; |
|
|
|
|
|
|
|
if (availableToDeduct <= 0) |
|
|
|
{ |
|
|
|
BalanceDTO dto = new BalanceDTO(); |
|
|
|
dto.InjectFrom(item); |
|
|
|
dto.Qty = availableToDeduct; |
|
|
|
balanceDTOs.Add(dto); |
|
|
|
} |
|
|
|
// 如果已经扣减达到所需数量,退出循环
|
|
|
|
if (totalDeducted >= quantityToDeduct) |
|
|
|
{ |
|
|
|
break; |
|
|
|
} |
|
|
|
BalanceDTO dto = new BalanceDTO(); |
|
|
|
dto.InjectFrom(item); |
|
|
|
dto.Qty = availableToDeduct; |
|
|
|
balanceDTOs.Add(dto); |
|
|
|
} |
|
|
|
// 返回实际扣减的库存数量
|
|
|
|
return balanceDTOs; |
|
|
@ -145,6 +147,7 @@ public class UnplannedIssueJobAppService |
|
|
|
foreach (var requestDtoDetail in requestDto.Details)//非计划领料明细
|
|
|
|
{ |
|
|
|
var locationCodes = await _locationAppService.GetListByErpLocationCodes(new StringList(requestDtoDetail.LocationErpCode)).ConfigureAwait(false);//获取存放库位
|
|
|
|
|
|
|
|
var input = new RecommendBalanceRequestInput |
|
|
|
{ |
|
|
|
ItemCode = requestDtoDetail.ItemCode, |
|
|
@ -154,6 +157,9 @@ public class UnplannedIssueJobAppService |
|
|
|
IsPackingCode = false |
|
|
|
}; |
|
|
|
var usableList = await _balanceAppService.GetUsableListAsync(input).ConfigureAwait(false);//获取推荐库存
|
|
|
|
|
|
|
|
usableList = usableList.Where(p => p.Qty> 0).ToList(); |
|
|
|
|
|
|
|
usableList = usableList |
|
|
|
.OrderBy(p => p.Lot) |
|
|
|
.ThenBy(p => p.PutInTime) |
|
|
@ -198,11 +204,26 @@ public class UnplannedIssueJobAppService |
|
|
|
{ |
|
|
|
throw new UserFriendlyException("库存余额不够!"); |
|
|
|
} |
|
|
|
|
|
|
|
foreach (var balanceDtoGroup in useBalances.GroupBy(p => p.LocationCode)) |
|
|
|
{ |
|
|
|
var locationDto = await _locationAppService.GetByCodeAsync(balanceDtoGroup.Key).ConfigureAwait(false); |
|
|
|
var job = new UnplannedIssueJob(); |
|
|
|
switch (locationDto.Type) |
|
|
|
{ |
|
|
|
case EnumLocationType.RAW: |
|
|
|
job.UnplannedIssueType = EnumUnplannedIssueType.Raw; |
|
|
|
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: |
|
|
|
job.UnplannedIssueType = EnumUnplannedIssueType.Wip; |
|
|
|
break; |
|
|
|
} |
|
|
|
job.SetId(GuidGenerator.Create()); |
|
|
|
job.UnplannedIssueRequestNumber= requestDto.Number; |
|
|
|
job.JobType = EnumJobType.UnplannedIssueJob; |
|
|
@ -211,7 +232,6 @@ public class UnplannedIssueJobAppService |
|
|
|
job.DeptCode = requestDto.DeptCode; |
|
|
|
job.DeptName = requestDto.DeptName; |
|
|
|
job.Worker = requestDto.Worker; |
|
|
|
|
|
|
|
job.OANumber = requestDto.OANumber; |
|
|
|
job.Number =await _unplannedIssueJobManager.GetNumber().ConfigureAwait(true); |
|
|
|
job.Details = new List<UnplannedIssueJobDetail>(); |
|
|
@ -221,10 +241,7 @@ public class UnplannedIssueJobAppService |
|
|
|
|
|
|
|
foreach (var balanceDto in balanceDtoGroup) |
|
|
|
{ |
|
|
|
|
|
|
|
|
|
|
|
var jobfacDetail = new UnplannedIssueJobFacDetail(); |
|
|
|
|
|
|
|
jobfacDetail.Number = job.Number; |
|
|
|
jobfacDetail.SetIdAndNumber(GuidGenerator, job.Id, job.Number); |
|
|
|
jobfacDetail.CaseCode = requestDtoDetail.CaseCode; |
|
|
|