|
@ -136,14 +136,34 @@ public class UnplannedIssueJobAppService |
|
|
balanceDTOs.Add(dto); |
|
|
balanceDTOs.Add(dto); |
|
|
break; |
|
|
break; |
|
|
case EnumLocationType.FG: |
|
|
case EnumLocationType.FG: |
|
|
|
|
|
dto.InjectFrom(item); |
|
|
|
|
|
balanceDTOs.Add(dto); |
|
|
|
|
|
break; |
|
|
case EnumLocationType.DimensionalStorehouse: |
|
|
case EnumLocationType.DimensionalStorehouse: |
|
|
|
|
|
dto.InjectFrom(item); |
|
|
|
|
|
balanceDTOs.Add(dto); |
|
|
|
|
|
break; |
|
|
case EnumLocationType.CUST: |
|
|
case EnumLocationType.CUST: |
|
|
|
|
|
dto.InjectFrom(item); |
|
|
|
|
|
balanceDTOs.Add(dto); |
|
|
|
|
|
break; |
|
|
case EnumLocationType.KittingWip: |
|
|
case EnumLocationType.KittingWip: |
|
|
|
|
|
dto.InjectFrom(item); |
|
|
|
|
|
balanceDTOs.Add(dto); |
|
|
|
|
|
break; |
|
|
case EnumLocationType.OUTSIDE: |
|
|
case EnumLocationType.OUTSIDE: |
|
|
|
|
|
dto.InjectFrom(item); |
|
|
|
|
|
balanceDTOs.Add(dto); |
|
|
|
|
|
break; |
|
|
case EnumLocationType.SEMI: |
|
|
case EnumLocationType.SEMI: |
|
|
|
|
|
dto.InjectFrom(item); |
|
|
|
|
|
balanceDTOs.Add(dto); |
|
|
|
|
|
break; |
|
|
case EnumLocationType.WIP: |
|
|
case EnumLocationType.WIP: |
|
|
|
|
|
dto.InjectFrom(item); |
|
|
|
|
|
balanceDTOs.Add(dto); |
|
|
|
|
|
break; |
|
|
case EnumLocationType.THIRDPARTY: |
|
|
case EnumLocationType.THIRDPARTY: |
|
|
|
|
|
|
|
|
dto.InjectFrom(item); |
|
|
dto.InjectFrom(item); |
|
|
balanceDTOs.Add(dto); |
|
|
balanceDTOs.Add(dto); |
|
|
break; |
|
|
break; |
|
@ -160,8 +180,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>(); |
|
@ -171,18 +190,116 @@ public class UnplannedIssueJobAppService |
|
|
{ |
|
|
{ |
|
|
var locationCodes = await _locationAppService.GetListByErpLocationCodes(new StringList(requestDtoDetail.LocationErpCode)).ConfigureAwait(false);//获取存放库位
|
|
|
var locationCodes = await _locationAppService.GetListByErpLocationCodes(new StringList(requestDtoDetail.LocationErpCode)).ConfigureAwait(false);//获取存放库位
|
|
|
|
|
|
|
|
|
var input = new RecommendBalanceRequestInput |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if (locationCodes.Count == 0) |
|
|
{ |
|
|
{ |
|
|
ItemCode = requestDtoDetail.ItemCode, |
|
|
throw new UserFriendlyException("ERP库位没有对应WMS库位!"); |
|
|
Qty = requestDtoDetail.Qty, |
|
|
} |
|
|
Statuses = new EditableList<EnumInventoryStatus> { EnumInventoryStatus.OK }, |
|
|
|
|
|
Locations = locationCodes.Select(p => p.Code).ToList(), |
|
|
|
|
|
IsPackingCode = false |
|
|
|
|
|
}; |
|
|
|
|
|
var usableList = await _balanceAppService.GetUsableListAsync(input).ConfigureAwait(false);//获取推荐库存
|
|
|
|
|
|
|
|
|
|
|
|
usableList = usableList.Where(p => p.Qty> 0).ToList(); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
var first=locationCodes.FirstOrDefault(); |
|
|
|
|
|
var locationDto = await _locationAppService.GetByCodeAsync(first.Code).ConfigureAwait(false); |
|
|
|
|
|
var input = new RecommendBalanceRequestInput(); |
|
|
|
|
|
switch (locationDto.Type) |
|
|
|
|
|
{ |
|
|
|
|
|
case EnumLocationType.RAW: |
|
|
|
|
|
input = new RecommendBalanceRequestInput |
|
|
|
|
|
{ |
|
|
|
|
|
ItemCode = requestDtoDetail.ItemCode, |
|
|
|
|
|
Qty = requestDtoDetail.Qty, |
|
|
|
|
|
Statuses = new EditableList<EnumInventoryStatus> { EnumInventoryStatus.OK }, |
|
|
|
|
|
Locations = locationCodes.Select(p => p.Code).ToList(), |
|
|
|
|
|
IsPackingCode = true |
|
|
|
|
|
}; |
|
|
|
|
|
break; |
|
|
|
|
|
case EnumLocationType.FG: |
|
|
|
|
|
input = new RecommendBalanceRequestInput |
|
|
|
|
|
{ |
|
|
|
|
|
ItemCode = requestDtoDetail.ItemCode, |
|
|
|
|
|
Qty = requestDtoDetail.Qty, |
|
|
|
|
|
Statuses = new EditableList<EnumInventoryStatus> { EnumInventoryStatus.OK }, |
|
|
|
|
|
Locations = locationCodes.Select(p => p.Code).ToList(), |
|
|
|
|
|
IsPackingCode = false |
|
|
|
|
|
}; |
|
|
|
|
|
break; |
|
|
|
|
|
case EnumLocationType.DimensionalStorehouse: |
|
|
|
|
|
input = new RecommendBalanceRequestInput |
|
|
|
|
|
{ |
|
|
|
|
|
ItemCode = requestDtoDetail.ItemCode, |
|
|
|
|
|
Qty = requestDtoDetail.Qty, |
|
|
|
|
|
Statuses = new EditableList<EnumInventoryStatus> { EnumInventoryStatus.OK }, |
|
|
|
|
|
Locations = locationCodes.Select(p => p.Code).ToList(), |
|
|
|
|
|
IsPackingCode = false |
|
|
|
|
|
}; |
|
|
|
|
|
break; |
|
|
|
|
|
case EnumLocationType.CUST: |
|
|
|
|
|
input = new RecommendBalanceRequestInput |
|
|
|
|
|
{ |
|
|
|
|
|
ItemCode = requestDtoDetail.ItemCode, |
|
|
|
|
|
Qty = requestDtoDetail.Qty, |
|
|
|
|
|
Statuses = new EditableList<EnumInventoryStatus> { EnumInventoryStatus.OK }, |
|
|
|
|
|
Locations = locationCodes.Select(p => p.Code).ToList(), |
|
|
|
|
|
IsPackingCode = false |
|
|
|
|
|
}; |
|
|
|
|
|
break; |
|
|
|
|
|
case EnumLocationType.KittingWip: |
|
|
|
|
|
input = new RecommendBalanceRequestInput |
|
|
|
|
|
{ |
|
|
|
|
|
ItemCode = requestDtoDetail.ItemCode, |
|
|
|
|
|
Qty = requestDtoDetail.Qty, |
|
|
|
|
|
Statuses = new EditableList<EnumInventoryStatus> { EnumInventoryStatus.OK }, |
|
|
|
|
|
Locations = locationCodes.Select(p => p.Code).ToList(), |
|
|
|
|
|
IsPackingCode = false |
|
|
|
|
|
}; |
|
|
|
|
|
break; |
|
|
|
|
|
case EnumLocationType.OUTSIDE: |
|
|
|
|
|
input = new RecommendBalanceRequestInput |
|
|
|
|
|
{ |
|
|
|
|
|
ItemCode = requestDtoDetail.ItemCode, |
|
|
|
|
|
Qty = requestDtoDetail.Qty, |
|
|
|
|
|
Statuses = new EditableList<EnumInventoryStatus> { EnumInventoryStatus.OK }, |
|
|
|
|
|
Locations = locationCodes.Select(p => p.Code).ToList(), |
|
|
|
|
|
IsPackingCode = false |
|
|
|
|
|
}; |
|
|
|
|
|
break; |
|
|
|
|
|
case EnumLocationType.SEMI: |
|
|
|
|
|
input = new RecommendBalanceRequestInput |
|
|
|
|
|
{ |
|
|
|
|
|
ItemCode = requestDtoDetail.ItemCode, |
|
|
|
|
|
Qty = requestDtoDetail.Qty, |
|
|
|
|
|
Statuses = new EditableList<EnumInventoryStatus> { EnumInventoryStatus.OK }, |
|
|
|
|
|
Locations = locationCodes.Select(p => p.Code).ToList(), |
|
|
|
|
|
IsPackingCode = false |
|
|
|
|
|
}; |
|
|
|
|
|
break; |
|
|
|
|
|
case EnumLocationType.WIP: |
|
|
|
|
|
input = new RecommendBalanceRequestInput |
|
|
|
|
|
{ |
|
|
|
|
|
ItemCode = requestDtoDetail.ItemCode, |
|
|
|
|
|
Qty = requestDtoDetail.Qty, |
|
|
|
|
|
Statuses = new EditableList<EnumInventoryStatus> { EnumInventoryStatus.OK }, |
|
|
|
|
|
Locations = locationCodes.Select(p => p.Code).ToList(), |
|
|
|
|
|
IsPackingCode = false |
|
|
|
|
|
}; |
|
|
|
|
|
break; |
|
|
|
|
|
case EnumLocationType.THIRDPARTY: |
|
|
|
|
|
input = new RecommendBalanceRequestInput |
|
|
|
|
|
{ |
|
|
|
|
|
ItemCode = requestDtoDetail.ItemCode, |
|
|
|
|
|
Qty = requestDtoDetail.Qty, |
|
|
|
|
|
Statuses = new EditableList<EnumInventoryStatus> { EnumInventoryStatus.OK }, |
|
|
|
|
|
Locations = locationCodes.Select(p => p.Code).ToList(), |
|
|
|
|
|
IsPackingCode = false |
|
|
|
|
|
}; |
|
|
|
|
|
break; |
|
|
|
|
|
} |
|
|
|
|
|
var usableList = await _balanceAppService.GetUsableListAsync(input).ConfigureAwait(false);//获取推荐库存
|
|
|
|
|
|
usableList = usableList.Where(p => p.Qty> 0).ToList(); |
|
|
usableList = usableList |
|
|
usableList = usableList |
|
|
.OrderBy(p => p.Lot) |
|
|
.OrderBy(p => p.Lot) |
|
|
.ThenBy(p => p.PutInTime) |
|
|
.ThenBy(p => p.PutInTime) |
|
@ -227,29 +344,22 @@ public class UnplannedIssueJobAppService |
|
|
//}
|
|
|
//}
|
|
|
if (returnlist.Count == 0) |
|
|
if (returnlist.Count == 0) |
|
|
{ |
|
|
{ |
|
|
Errors.Add($"{"非生产领料"+requestDto.Number+"零件号:"+requestDtoDetail.ItemCode + "库存不够" + requestDtoDetail.Qty.ToString()}"); |
|
|
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)) |
|
|
{ |
|
|
{ |
|
|
var locationDto = await _locationAppService.GetByCodeAsync(balanceDtoGroup.Key).ConfigureAwait(false); |
|
|
//var locationDto = await _locationAppService.GetByCodeAsync(balanceDtoGroup.Key).ConfigureAwait(false);
|
|
|
var job = new UnplannedIssueJob(); |
|
|
var job = new UnplannedIssueJob(); |
|
|
switch (locationDto.Type) |
|
|
if (locationDto.Type==EnumLocationType.RAW) |
|
|
{ |
|
|
{ |
|
|
case EnumLocationType.RAW: |
|
|
job.UnplannedIssueType = EnumUnplannedIssueType.Raw; |
|
|
job.UnplannedIssueType = EnumUnplannedIssueType.Raw; |
|
|
} |
|
|
break; |
|
|
else |
|
|
case EnumLocationType.FG: |
|
|
{ |
|
|
case EnumLocationType.DimensionalStorehouse: |
|
|
job.UnplannedIssueType = EnumUnplannedIssueType.Wip; |
|
|
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.SetId(GuidGenerator.Create()); |
|
|
job.UnplannedIssueRequestNumber= requestDto.Number; |
|
|
job.UnplannedIssueRequestNumber= requestDto.Number; |
|
|
job.JobType = EnumJobType.UnplannedIssueJob; |
|
|
job.JobType = EnumJobType.UnplannedIssueJob; |
|
|