From f7db58d28ea78e7269e08387aa926bd95a8d5d11 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=AD=A6=20=E8=B5=B5?= <89237069@qq.com> Date: Fri, 18 Oct 2024 11:32:17 +0800 Subject: [PATCH 1/3] =?UTF-8?q?=E6=9B=B4=E6=96=B0=E7=89=88=E6=9C=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../UnplannedIssueJobAppService.cs | 168 +++++++++++++++--- 1 file changed, 139 insertions(+), 29 deletions(-) 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; From 64c8e516d5b38358c2b24343b1cc71a3fe829ba0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=AD=A6=20=E8=B5=B5?= <89237069@qq.com> Date: Fri, 18 Oct 2024 11:47:15 +0800 Subject: [PATCH 2/3] =?UTF-8?q?=E6=9B=B4=E6=96=B0=E7=89=88=E6=9C=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../UnplannedIssueJobAppService.cs | 59 ++++--------------- 1 file changed, 12 insertions(+), 47 deletions(-) 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 4c1446576..a4563d5c0 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 @@ -114,7 +114,7 @@ public class UnplannedIssueJobAppService - private async Task> DeductInventory(List inventory, decimal quantityToDeduct) + private async Task> DeductInventory(List inventory, decimal quantityToDeduct, EnumLocationType enumLocationType) { List balanceDTOs = new List(); decimal totalDeducted = 0; @@ -128,46 +128,18 @@ public class UnplannedIssueJobAppService { var locationDto = await _locationAppService.GetByCodeAsync(item.LocationCode).ConfigureAwait(false); BalanceDTO dto = new BalanceDTO(); - switch (locationDto.Type) + if (enumLocationType == EnumLocationType.RAW) { - case EnumLocationType.RAW: - dto.InjectFrom(item); - dto.Qty = availableToDeduct; - 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; - } + dto.InjectFrom(item); + dto.Qty = availableToDeduct; + balanceDTOs.Add(dto); + } + else + { + dto.InjectFrom(item); + balanceDTOs.Add(dto); + } + } // 如果已经扣减达到所需数量,退出循环 if (totalDeducted >= quantityToDeduct) @@ -190,18 +162,11 @@ public class UnplannedIssueJobAppService { var locationCodes = await _locationAppService.GetListByErpLocationCodes(new StringList(requestDtoDetail.LocationErpCode)).ConfigureAwait(false);//获取存放库位 - - - - if (locationCodes.Count == 0) { throw new UserFriendlyException("ERP库位没有对应WMS库位!"); } - - - var first=locationCodes.FirstOrDefault(); var locationDto = await _locationAppService.GetByCodeAsync(first.Code).ConfigureAwait(false); var input = new RecommendBalanceRequestInput(); From 4f652270aa133029cdcac2b6d48b61b8d35ea182 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=AD=A6=20=E8=B5=B5?= <89237069@qq.com> Date: Fri, 18 Oct 2024 11:48:53 +0800 Subject: [PATCH 3/3] =?UTF-8?q?=E6=9B=B4=E6=96=B0=E7=89=88=E6=9C=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Jobs/UnplannedIssueJobs/UnplannedIssueJobAppService.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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 a4563d5c0..8139bf9a6 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 @@ -276,7 +276,7 @@ public class UnplannedIssueJobAppService decimal qty = 0; //实际要用库存 List useBalances = new List(); - var returnlist=await DeductInventory(usableList, requestDtoDetail.Qty).ConfigureAwait(false); + var returnlist=await DeductInventory(usableList, requestDtoDetail.Qty, locationDto.Type).ConfigureAwait(false); useBalances.AddRange(returnlist); useBalancesOut.AddRange(returnlist);