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