From 43fc49332c26d1f767386521f6337a2a801e817f Mon Sep 17 00:00:00 2001 From: zhouhongjun <565221961@qq.com> Date: Wed, 5 Jun 2024 14:30:50 +0800 Subject: [PATCH 1/4] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E7=A9=BA=E5=99=A8?= =?UTF-8?q?=E5=85=B7=E4=BA=8B=E5=8A=A1=E7=B1=BB=E5=9E=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Requests/ContainerRequests/ContainerRequestAppService.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Requests/ContainerRequests/ContainerRequestAppService.cs b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Requests/ContainerRequests/ContainerRequestAppService.cs index a57e2b4a0..ea3f8b328 100644 --- a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Requests/ContainerRequests/ContainerRequestAppService.cs +++ b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Requests/ContainerRequests/ContainerRequestAppService.cs @@ -78,7 +78,7 @@ public class ContainerRequestAppService : /// private async Task SetRequestAutoPropertiesAsync(ContainerRequestEditInput entity) { - var tranType = await _transactionTypeAppService.GetByTransTypeAsync(EnumTransType.Issue, EnumTransSubType.None).ConfigureAwait(false); + var tranType = await _transactionTypeAppService.GetByTransTypeAsync(EnumTransType.TransferLib, EnumTransSubType.Transfer_Warehouse).ConfigureAwait(false); Check.NotNull(tranType, "事务类型", "事务类型不存在"); From e12463680afe3a2c70f6bf6ee798b2f9f219398f Mon Sep 17 00:00:00 2001 From: "boxu.zheng" Date: Wed, 5 Jun 2024 15:06:42 +0800 Subject: [PATCH 2/4] =?UTF-8?q?=E4=BF=AE=E6=94=B9=20=E6=8C=89=E6=95=B0?= =?UTF-8?q?=E5=8F=91=E6=96=99=20=E9=87=8D=E5=A4=8D=E7=94=9F=E6=88=90?= =?UTF-8?q?=E4=BB=BB=E5=8A=A1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Enums/Store/Types/EnumReceiptType.cs | 5 + .../AssembleIssueJobAppService.cs | 2 +- .../CoatingIssueJobAppService.cs | 2 +- .../InjectionIssueJobAppService.cs | 2 +- .../KittingIssueJobAppService.cs | 2 +- .../SparePartIssueJobAppService.cs | 2 +- .../AssembleIssueRequestManager.cs | 5 + .../IAssembleIssueRequestManager.cs | 1 + .../CoatingIssueRequestManager.cs | 5 + .../ICoatingIssueRequestManager.cs | 1 + .../IInjectionIssueRequestManager.cs | 1 + .../InjectionIssueRequestManager.cs | 5 + .../IKittingIssueRequestManager.cs | 1 + .../KittingIssueRequestManager.cs | 5 + .../ISparePartRequestManager.cs | 1 + .../SparePartIssueRequestManager.cs | 5 + .../AssembleIssueRequestEventHandler.cs | 15 +- .../CoatingIssueRequestEventHandler.cs | 223 +++++++++-------- .../InjectionIssueRequestEventHandler.cs | 223 +++++++++-------- .../KittingIssueRequestEventHandler.cs | 226 ++++++++++-------- .../SparePartIssueRequestEventHandler.cs | 226 ++++++++++-------- .../ProductReceiptRequestEventHandler.cs | 2 + .../StoreEventAutoMapperProfile.cs | 1 + 23 files changed, 530 insertions(+), 431 deletions(-) diff --git a/be/Modules/Shared/src/Win_in.Sfs.Shared.Domain.Shared/Enums/Store/Types/EnumReceiptType.cs b/be/Modules/Shared/src/Win_in.Sfs.Shared.Domain.Shared/Enums/Store/Types/EnumReceiptType.cs index e3505bade..945551f5f 100644 --- a/be/Modules/Shared/src/Win_in.Sfs.Shared.Domain.Shared/Enums/Store/Types/EnumReceiptType.cs +++ b/be/Modules/Shared/src/Win_in.Sfs.Shared.Domain.Shared/Enums/Store/Types/EnumReceiptType.cs @@ -29,4 +29,9 @@ public enum EnumReceiptType /// L7级物品完工 /// MesScanReceiptToL7Parts = 4, + + /// + /// 线边仓缴库 + /// + ProductReceiptRequest=5, } diff --git a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Jobs/IssueJobs/AssembleIssueJobs/AssembleIssueJobAppService.cs b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Jobs/IssueJobs/AssembleIssueJobs/AssembleIssueJobAppService.cs index 71385a607..8d1004415 100644 --- a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Jobs/IssueJobs/AssembleIssueJobs/AssembleIssueJobAppService.cs +++ b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Jobs/IssueJobs/AssembleIssueJobs/AssembleIssueJobAppService.cs @@ -133,7 +133,7 @@ public class AssembleIssueJobAppService [HttpPost("by-request-number/{requestNumber}")] public virtual async Task> GetByRequestNumberAsync(string requestNumber) { - var entitys = await _repository.GetListAsync(p => p.AssembleRequestNumber == requestNumber) + var entitys = await _repository.GetListAsync(p => p.AssembleRequestNumber == requestNumber,"",true) .ConfigureAwait(false); return ObjectMapper.Map, List>(entitys); } diff --git a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Jobs/IssueJobs/CoatingIssueJobs/CoatingIssueJobAppService.cs b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Jobs/IssueJobs/CoatingIssueJobs/CoatingIssueJobAppService.cs index af401bc86..c4367d28f 100644 --- a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Jobs/IssueJobs/CoatingIssueJobs/CoatingIssueJobAppService.cs +++ b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Jobs/IssueJobs/CoatingIssueJobs/CoatingIssueJobAppService.cs @@ -133,7 +133,7 @@ public class CoatingIssueJobAppService [HttpPost("by-request-number/{requestNumber}")] public virtual async Task> GetByRequestNumberAsync(string requestNumber) { - var entitys = await _repository.GetListAsync(p => p.CoatingRequestNumber == requestNumber) + var entitys = await _repository.GetListAsync(p => p.CoatingRequestNumber == requestNumber, "", true) .ConfigureAwait(false); return ObjectMapper.Map, List>(entitys); } diff --git a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Jobs/IssueJobs/InjectionIssueJobs/InjectionIssueJobAppService.cs b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Jobs/IssueJobs/InjectionIssueJobs/InjectionIssueJobAppService.cs index e79ba5940..6415a1903 100644 --- a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Jobs/IssueJobs/InjectionIssueJobs/InjectionIssueJobAppService.cs +++ b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Jobs/IssueJobs/InjectionIssueJobs/InjectionIssueJobAppService.cs @@ -132,7 +132,7 @@ public class InjectionIssueJobAppService [HttpPost("by-request-number/{requestNumber}")] public virtual async Task> GetByRequestNumberAsync(string requestNumber) { - var entitys = await _repository.GetListAsync(p => p.InjectionRequestNumber == requestNumber) + var entitys = await _repository.GetListAsync(p => p.InjectionRequestNumber == requestNumber, "", true) .ConfigureAwait(false); return ObjectMapper.Map, List>(entitys); } diff --git a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Jobs/IssueJobs/KittingIssueJobs/KittingIssueJobAppService.cs b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Jobs/IssueJobs/KittingIssueJobs/KittingIssueJobAppService.cs index a5afe53d0..be03a3dc7 100644 --- a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Jobs/IssueJobs/KittingIssueJobs/KittingIssueJobAppService.cs +++ b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Jobs/IssueJobs/KittingIssueJobs/KittingIssueJobAppService.cs @@ -132,7 +132,7 @@ public class KittingIssueJobAppService [HttpPost("by-request-number/{requestNumber}")] public virtual async Task> GetByRequestNumberAsync(string requestNumber) { - var entitys = await _repository.GetListAsync(p => p.KittingRequestNumber == requestNumber) + var entitys = await _repository.GetListAsync(p => p.KittingRequestNumber == requestNumber, "", true) .ConfigureAwait(false); return ObjectMapper.Map, List>(entitys); } diff --git a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Jobs/IssueJobs/SparePartIssueJobs/SparePartIssueJobAppService.cs b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Jobs/IssueJobs/SparePartIssueJobs/SparePartIssueJobAppService.cs index 72645dc9c..aa977a551 100644 --- a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Jobs/IssueJobs/SparePartIssueJobs/SparePartIssueJobAppService.cs +++ b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Jobs/IssueJobs/SparePartIssueJobs/SparePartIssueJobAppService.cs @@ -124,7 +124,7 @@ public class SparePartIssueJobAppService [HttpPost("by-request-number/{requestNumber}")] public virtual async Task> GetByRequestNumberAsync(string requestNumber) { - var entitys = await _repository.GetListAsync(p => p.SparePartRequestNumber == requestNumber) + var entitys = await _repository.GetListAsync(p => p.SparePartRequestNumber == requestNumber, "", true) .ConfigureAwait(false); return ObjectMapper.Map, List>(entitys); } diff --git a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain/Requests/IssueRequests/AssembleIssueRequests/AssembleIssueRequestManager.cs b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain/Requests/IssueRequests/AssembleIssueRequests/AssembleIssueRequestManager.cs index f4e0adb6d..a9adfe5ee 100644 --- a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain/Requests/IssueRequests/AssembleIssueRequests/AssembleIssueRequestManager.cs +++ b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain/Requests/IssueRequests/AssembleIssueRequests/AssembleIssueRequestManager.cs @@ -55,4 +55,9 @@ public class AssembleIssueRequestManager { throw new System.NotImplementedException(); } + + public virtual async Task UpdateByEntityAsync(AssembleIssueRequest request) + { + return await _repository.UpdateAsync(request).ConfigureAwait(false); + } } diff --git a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain/Requests/IssueRequests/AssembleIssueRequests/IAssembleIssueRequestManager.cs b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain/Requests/IssueRequests/AssembleIssueRequests/IAssembleIssueRequestManager.cs index 60460c17e..e871fc7bc 100644 --- a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain/Requests/IssueRequests/AssembleIssueRequests/IAssembleIssueRequestManager.cs +++ b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain/Requests/IssueRequests/AssembleIssueRequests/IAssembleIssueRequestManager.cs @@ -11,4 +11,5 @@ public interface IAssembleIssueRequestManager : ISfsStoreRequestManager CreateByNumberAsync(AssembleIssueRequest entity); + Task UpdateByEntityAsync(AssembleIssueRequest request); } diff --git a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain/Requests/IssueRequests/CoatingIssuelRequests/CoatingIssueRequestManager.cs b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain/Requests/IssueRequests/CoatingIssuelRequests/CoatingIssueRequestManager.cs index 26615b133..f9cb23eeb 100644 --- a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain/Requests/IssueRequests/CoatingIssuelRequests/CoatingIssueRequestManager.cs +++ b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain/Requests/IssueRequests/CoatingIssuelRequests/CoatingIssueRequestManager.cs @@ -52,4 +52,9 @@ public class CoatingIssueRequestManager { throw new System.NotImplementedException(); } + + public virtual async Task UpdateByEntityAsync(CoatingIssueRequest request) + { + return await _repository.UpdateAsync(request).ConfigureAwait(false); + } } diff --git a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain/Requests/IssueRequests/CoatingIssuelRequests/ICoatingIssueRequestManager.cs b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain/Requests/IssueRequests/CoatingIssuelRequests/ICoatingIssueRequestManager.cs index 9354bccb8..5506e85ed 100644 --- a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain/Requests/IssueRequests/CoatingIssuelRequests/ICoatingIssueRequestManager.cs +++ b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain/Requests/IssueRequests/CoatingIssuelRequests/ICoatingIssueRequestManager.cs @@ -9,4 +9,5 @@ public interface ICoatingIssueRequestManager : ISfsStoreRequestManager CreateByNumberAsync(CoatingIssueRequest entity); + Task UpdateByEntityAsync(CoatingIssueRequest request); } diff --git a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain/Requests/IssueRequests/InjectionIssueRequests/IInjectionIssueRequestManager.cs b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain/Requests/IssueRequests/InjectionIssueRequests/IInjectionIssueRequestManager.cs index 15fa68237..741d438d2 100644 --- a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain/Requests/IssueRequests/InjectionIssueRequests/IInjectionIssueRequestManager.cs +++ b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain/Requests/IssueRequests/InjectionIssueRequests/IInjectionIssueRequestManager.cs @@ -10,4 +10,5 @@ public interface IInjectionIssueRequestManager : ISfsStoreRequestManager CreateByNumberAsync(InjectionIssueRequest entity); + Task UpdateByEntityAsync(InjectionIssueRequest request); } diff --git a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain/Requests/IssueRequests/InjectionIssueRequests/InjectionIssueRequestManager.cs b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain/Requests/IssueRequests/InjectionIssueRequests/InjectionIssueRequestManager.cs index 32d963082..8e36276d3 100644 --- a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain/Requests/IssueRequests/InjectionIssueRequests/InjectionIssueRequestManager.cs +++ b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain/Requests/IssueRequests/InjectionIssueRequests/InjectionIssueRequestManager.cs @@ -52,4 +52,9 @@ public class InjectionIssueRequestManager { throw new System.NotImplementedException(); } + + public virtual async Task UpdateByEntityAsync(InjectionIssueRequest request) + { + return await _repository.UpdateAsync(request).ConfigureAwait(false); + } } diff --git a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain/Requests/IssueRequests/KittingIssueRequests/IKittingIssueRequestManager.cs b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain/Requests/IssueRequests/KittingIssueRequests/IKittingIssueRequestManager.cs index 43cda56b6..b9ea28603 100644 --- a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain/Requests/IssueRequests/KittingIssueRequests/IKittingIssueRequestManager.cs +++ b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain/Requests/IssueRequests/KittingIssueRequests/IKittingIssueRequestManager.cs @@ -10,4 +10,5 @@ public interface IKittingIssueRequestManager : ISfsStoreRequestManager CreateByNumberAsync(KittingIssueRequest entity); + Task UpdateByEntityAsync(KittingIssueRequest request); } diff --git a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain/Requests/IssueRequests/KittingIssueRequests/KittingIssueRequestManager.cs b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain/Requests/IssueRequests/KittingIssueRequests/KittingIssueRequestManager.cs index 7bd369ae5..dd7aaea26 100644 --- a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain/Requests/IssueRequests/KittingIssueRequests/KittingIssueRequestManager.cs +++ b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain/Requests/IssueRequests/KittingIssueRequests/KittingIssueRequestManager.cs @@ -52,4 +52,9 @@ public class KittingIssueRequestManager { throw new System.NotImplementedException(); } + + public virtual async Task UpdateByEntityAsync(KittingIssueRequest request) + { + return await _repository.UpdateAsync(request).ConfigureAwait(false); + } } diff --git a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain/Requests/IssueRequests/SparePartIssueRequests/ISparePartRequestManager.cs b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain/Requests/IssueRequests/SparePartIssueRequests/ISparePartRequestManager.cs index 5a4d9b272..9fa0f207c 100644 --- a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain/Requests/IssueRequests/SparePartIssueRequests/ISparePartRequestManager.cs +++ b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain/Requests/IssueRequests/SparePartIssueRequests/ISparePartRequestManager.cs @@ -10,4 +10,5 @@ public interface ISparePartIssueRequestManager : ISfsStoreRequestManager CreateByNumberAsync(SparePartIssueRequest entity); + Task UpdateByEntityAsync(SparePartIssueRequest request); } diff --git a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain/Requests/IssueRequests/SparePartIssueRequests/SparePartIssueRequestManager.cs b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain/Requests/IssueRequests/SparePartIssueRequests/SparePartIssueRequestManager.cs index 849a5edf0..f9620dc71 100644 --- a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain/Requests/IssueRequests/SparePartIssueRequests/SparePartIssueRequestManager.cs +++ b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain/Requests/IssueRequests/SparePartIssueRequests/SparePartIssueRequestManager.cs @@ -52,4 +52,9 @@ public class SparePartIssueRequestManager { throw new System.NotImplementedException(); } + + public virtual async Task UpdateByEntityAsync(SparePartIssueRequest request) + { + return await _repository.UpdateAsync(request).ConfigureAwait(false); + } } diff --git a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Event/Requests/IssueRequest/AssembleIssueRequestEventHandler.cs b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Event/Requests/IssueRequest/AssembleIssueRequestEventHandler.cs index cb7bae31f..278560a4b 100644 --- a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Event/Requests/IssueRequest/AssembleIssueRequestEventHandler.cs +++ b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Event/Requests/IssueRequest/AssembleIssueRequestEventHandler.cs @@ -14,6 +14,7 @@ using Win_in.Sfs.Shared.Event; using Win_in.Sfs.Wms.Inventory.Application.Contracts; using Win_in.Sfs.Wms.Store.Application.Contracts; using Win_in.Sfs.Wms.Store.Domain; +using Win_in.Sfs.Wms.Store.Domain.Acl.Balance; namespace Win_in.Sfs.Wms.Store.Event.BusinessRequest; @@ -30,6 +31,7 @@ public class AssembleIssueRequestEventHandler private readonly IProductionLineItemAppService _productionLineItemAppService; private readonly ILocationAppService _locationAppService; private readonly IBalanceAppService _balanceAppService; + protected IAssembleIssueRequestManager AssembleIssueRequestManager => LazyServiceProvider.LazyGetRequiredService(); private IMapper _mapper; public AssembleIssueRequestEventHandler( @@ -138,7 +140,9 @@ public class AssembleIssueRequestEventHandler foreach (var tempDetailDto in tempDetailDtos) { //未发送的数量 - tempDetailDto.Qty = tempDetailDto.Qty - tempDetailDto.IssuedQty; + tempDetailDto.Qty = tempDetailDto.Qty>tempDetailDto.IssuedQty? + tempDetailDto.Qty - tempDetailDto.IssuedQty: + 0; if (tempDetailDto.Qty > balanceDto.Qty) //需求量大于 这条推荐库存的余额 { @@ -176,7 +180,12 @@ public class AssembleIssueRequestEventHandler assembleIssueRequest, assembleIssueRequestDetails.First()).ConfigureAwait(false); assembleIssueJobEditInput.Details = assembleIssueJobDetailInputs; - jobs.Add(assembleIssueJobEditInput); + + assembleIssueJobEditInput.Details=assembleIssueJobEditInput.Details.Where(p => p.RecommendFromQty>0).ToList(); + if (assembleIssueJobEditInput.Details != null && assembleIssueJobEditInput.Details.Any()) + { + jobs.Add(assembleIssueJobEditInput); + } } return jobs; @@ -653,6 +662,8 @@ public class AssembleIssueRequestEventHandler requestDetail.ReceivedQty = allReceivedQty; } } + + await AssembleIssueRequestManager.UpdateByEntityAsync(assembleIssueRequest).ConfigureAwait(false); } /// diff --git a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Event/Requests/IssueRequest/CoatingIssueRequestEventHandler.cs b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Event/Requests/IssueRequest/CoatingIssueRequestEventHandler.cs index 0d2c009a5..bdb6584f2 100644 --- a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Event/Requests/IssueRequest/CoatingIssueRequestEventHandler.cs +++ b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Event/Requests/IssueRequest/CoatingIssueRequestEventHandler.cs @@ -14,6 +14,7 @@ using Win_in.Sfs.Shared.Event; using Win_in.Sfs.Wms.Inventory.Application.Contracts; using Win_in.Sfs.Wms.Store.Application.Contracts; using Win_in.Sfs.Wms.Store.Domain; +using Win_in.Sfs.Wms.Store.Domain.Acl.Balance; namespace Win_in.Sfs.Wms.Store.Event.BusinessRequest; @@ -25,20 +26,21 @@ public class CoatingIssueRequestEventHandler , ILocalEventHandler> , ILocalEventHandler>> { - private readonly ICoatingIssueJobAppService _coatingIssueJobAppService; + private readonly ICoatingIssueJobAppService _CoatingIssueJobAppService; private readonly IProductionLineAppService _productionLineAppService; private readonly IProductionLineItemAppService _productionLineItemAppService; private readonly ILocationAppService _locationAppService; private readonly IBalanceAppService _balanceAppService; + protected ICoatingIssueRequestManager CoatingIssueRequestManager => LazyServiceProvider.LazyGetRequiredService(); private IMapper _mapper; public CoatingIssueRequestEventHandler( - ICoatingIssueJobAppService coatingIssueJobAppService, IProductionLineAppService productionLineAppService, + ICoatingIssueJobAppService CoatingIssueJobAppService, IProductionLineAppService productionLineAppService, ILocationAppService locationAppService, IBalanceAppService balanceAppService, IProductionLineItemAppService productionLineItemAppService ) { - _coatingIssueJobAppService = coatingIssueJobAppService; + _CoatingIssueJobAppService = CoatingIssueJobAppService; _productionLineAppService = productionLineAppService; _locationAppService = locationAppService; _balanceAppService = balanceAppService; @@ -107,14 +109,14 @@ public class CoatingIssueRequestEventHandler /// /// 创建注塑任务-按数量 /// - /// - /// + /// + /// /// /// /// /// private async Task> CreateCoatingIssueJobWithQtyTypeAsync - (CoatingIssueRequest coatingIssueRequest, List coatingIssueRequestDetails, + (CoatingIssueRequest CoatingIssueRequest, List CoatingIssueRequestDetails, List recommendbalanceDtos, List useBalanceList) { @@ -122,9 +124,9 @@ public class CoatingIssueRequestEventHandler //用来临时存放所有未生成任务的发料集合 如果生成完了再这里去掉 var tempDetailDtos = ObjectMapper.Map, List>( - coatingIssueRequestDetails); + CoatingIssueRequestDetails); - var coatingIssueJobDetailInputs = new List(); + var CoatingIssueJobDetailInputs = new List(); if (recommendbalanceDtos != null && recommendbalanceDtos.Count > 0) { @@ -138,7 +140,9 @@ public class CoatingIssueRequestEventHandler foreach (var tempDetailDto in tempDetailDtos) { //未发送的数量 - tempDetailDto.Qty = tempDetailDto.Qty - tempDetailDto.IssuedQty; + tempDetailDto.Qty = tempDetailDto.Qty > tempDetailDto.IssuedQty ? + tempDetailDto.Qty - tempDetailDto.IssuedQty : + 0; if (tempDetailDto.Qty > balanceDto.Qty) //需求量大于 这条推荐库存的余额 { @@ -150,7 +154,7 @@ public class CoatingIssueRequestEventHandler balanceDto.Qty = tempDetailDto.Qty; } - coatingIssueJobDetailInputs.Add( + CoatingIssueJobDetailInputs.Add( await BuildCoatingIssueJobDetailWithQtyTypeAsync(tempDetailDto, balanceDto) .ConfigureAwait(false)); useBalanceList.Add(balanceDto); @@ -170,13 +174,18 @@ public class CoatingIssueRequestEventHandler } } - if (coatingIssueJobDetailInputs.Any()) + if (CoatingIssueJobDetailInputs.Any()) { - var coatingIssueJobEditInput = await BuildCoatingIssueJobCreateInputWithQtyTypeAsync( - coatingIssueRequest, - coatingIssueRequestDetails.First()).ConfigureAwait(false); - coatingIssueJobEditInput.Details = coatingIssueJobDetailInputs; - jobs.Add(coatingIssueJobEditInput); + var CoatingIssueJobEditInput = await BuildCoatingIssueJobCreateInputWithQtyTypeAsync( + CoatingIssueRequest, + CoatingIssueRequestDetails.First()).ConfigureAwait(false); + CoatingIssueJobEditInput.Details = CoatingIssueJobDetailInputs; + + CoatingIssueJobEditInput.Details = CoatingIssueJobEditInput.Details.Where(p => p.RecommendFromQty > 0).ToList(); + if (CoatingIssueJobEditInput.Details != null && CoatingIssueJobEditInput.Details.Any()) + { + jobs.Add(CoatingIssueJobEditInput); + } } return jobs; @@ -185,19 +194,19 @@ public class CoatingIssueRequestEventHandler /// /// 构造注塑任务-按数量 /// - /// + /// /// /// private async Task BuildCoatingIssueJobCreateInputWithQtyTypeAsync( - CoatingIssueRequest coatingIssueRequest, CoatingIssueRequestDetail requestDetailInput) + CoatingIssueRequest CoatingIssueRequest, CoatingIssueRequestDetail requestDetailInput) { - var job = ObjectMapper.Map(coatingIssueRequest); + var job = ObjectMapper.Map(CoatingIssueRequest); job.JobType = EnumJobType.IssueJob; job.JobStatus = EnumJobStatus.Open; job.WorkGroupCode = requestDetailInput.ToLocationGroup; job.WarehouseCode = requestDetailInput.ToWarehouseCode; - job.Worker = coatingIssueRequest.Worker; - job.CoatingRequestNumber = coatingIssueRequest.Number; + job.Worker = CoatingIssueRequest.Worker; + job.CoatingRequestNumber = CoatingIssueRequest.Number; job.EnumIssueSendType = EnumIssueSendType.QtyType; await Task.CompletedTask.ConfigureAwait(false); @@ -208,31 +217,31 @@ public class CoatingIssueRequestEventHandler /// /// 构造注塑任务明细-按数量 /// - /// + /// /// /// private async Task BuildCoatingIssueJobDetailWithQtyTypeAsync( - CoatingIssueRequestDetailDTO coatingIssueRequestDetail, BalanceDTO balance) + CoatingIssueRequestDetailDTO CoatingIssueRequestDetail, BalanceDTO balance) { var detail = new CoatingIssueJobDetailInput(); - detail.RequestLocationCode = coatingIssueRequestDetail.ToLocationCode; - detail.PositionCode = coatingIssueRequestDetail.PositionCode; - detail.RecommendType = coatingIssueRequestDetail.RecommendType; + detail.RequestLocationCode = CoatingIssueRequestDetail.ToLocationCode; + detail.PositionCode = CoatingIssueRequestDetail.PositionCode; + detail.RecommendType = CoatingIssueRequestDetail.RecommendType; detail.Uom = balance.Uom; detail.ItemCode = balance.ItemCode; detail.ItemDesc2 = balance.ItemDesc2; detail.ItemDesc1 = balance.ItemDesc1; detail.ItemName = balance.ItemName; - detail.ProdLine = coatingIssueRequestDetail.ProdLine; + detail.ProdLine = CoatingIssueRequestDetail.ProdLine; detail.RequestQty = balance.Qty; - detail.StdPackQty = coatingIssueRequestDetail.StdPackQty; + detail.StdPackQty = CoatingIssueRequestDetail.StdPackQty; detail.Status = balance.Status; - detail.RequestLocationErpCode = coatingIssueRequestDetail.ToLocationErpCode; - detail.RequestLocationArea = coatingIssueRequestDetail.ToLocationArea; - detail.RequestWarehouseCode = coatingIssueRequestDetail.ToWarehouseCode; - detail.RequestLocationGroup = coatingIssueRequestDetail.ToLocationGroup; - detail.RequestLocationCode = coatingIssueRequestDetail.ToLocationCode; + detail.RequestLocationErpCode = CoatingIssueRequestDetail.ToLocationErpCode; + detail.RequestLocationArea = CoatingIssueRequestDetail.ToLocationArea; + detail.RequestWarehouseCode = CoatingIssueRequestDetail.ToWarehouseCode; + detail.RequestLocationGroup = CoatingIssueRequestDetail.ToLocationGroup; + detail.RequestLocationCode = CoatingIssueRequestDetail.ToLocationCode; detail.RecommendFromPackingCode = balance.PackingCode; detail.RecommendFromContainerCode = balance.ContainerCode; @@ -264,11 +273,11 @@ public class CoatingIssueRequestEventHandler detail.RecommendFromLocationGroup = balance.LocationGroup; detail.RecommendFromWarehouseCode = balance.WarehouseCode; - detail.RecommendToLocationCode = coatingIssueRequestDetail.ToLocationCode; - detail.RecommendToLocationErpCode = coatingIssueRequestDetail.ToLocationErpCode; - detail.RecommendToLocationArea = coatingIssueRequestDetail.ToLocationArea; - detail.RecommendToWarehouseCode = coatingIssueRequestDetail.ToWarehouseCode; - detail.RecommendToLocationGroup = coatingIssueRequestDetail.ToLocationGroup; + detail.RecommendToLocationCode = CoatingIssueRequestDetail.ToLocationCode; + detail.RecommendToLocationErpCode = CoatingIssueRequestDetail.ToLocationErpCode; + detail.RecommendToLocationArea = CoatingIssueRequestDetail.ToLocationArea; + detail.RecommendToWarehouseCode = CoatingIssueRequestDetail.ToWarehouseCode; + detail.RecommendToLocationGroup = CoatingIssueRequestDetail.ToLocationGroup; detail.TransferLibFromPackingCode = balance.PackingCode; detail.TransferLibFromContainerCode = balance.ContainerCode; @@ -299,11 +308,11 @@ public class CoatingIssueRequestEventHandler detail.TransferLibFromLocationGroup = balance.LocationGroup; detail.TransferLibFromWarehouseCode = balance.WarehouseCode; - detail.TransferLibToLocationCode = coatingIssueRequestDetail.ToLocationCode; - detail.TransferLibToLocationErpCode = coatingIssueRequestDetail.ToLocationErpCode; - detail.TransferLibToLocationArea = coatingIssueRequestDetail.ToLocationArea; - detail.TransferLibToWarehouseCode = coatingIssueRequestDetail.ToWarehouseCode; - detail.TransferLibToLocationGroup = coatingIssueRequestDetail.ToLocationGroup; + detail.TransferLibToLocationCode = CoatingIssueRequestDetail.ToLocationCode; + detail.TransferLibToLocationErpCode = CoatingIssueRequestDetail.ToLocationErpCode; + detail.TransferLibToLocationArea = CoatingIssueRequestDetail.ToLocationArea; + detail.TransferLibToWarehouseCode = CoatingIssueRequestDetail.ToWarehouseCode; + detail.TransferLibToLocationGroup = CoatingIssueRequestDetail.ToLocationGroup; await Task.CompletedTask.ConfigureAwait(false); return detail; @@ -316,28 +325,28 @@ public class CoatingIssueRequestEventHandler /// /// 创建注塑任务 按箱叫料-按箱 /// - /// - /// + /// + /// /// /// /// /// private async Task> CreateCoatingIssueJobWithBoxQtyTypeAsync ( - CoatingIssueRequest coatingIssueRequest, - List coatingIssueRequestDetailList, + CoatingIssueRequest CoatingIssueRequest, + List CoatingIssueRequestDetailList, List recommendbalanceDtos, List useBalanceList) { var inputJobs = new List(); - var jobs = await _coatingIssueJobAppService.GetByRequestNumberAsync(coatingIssueRequest.Number) + var jobs = await _CoatingIssueJobAppService.GetByRequestNumberAsync(CoatingIssueRequest.Number) .ConfigureAwait(false); - foreach (var detail in coatingIssueRequestDetailList) + foreach (var detail in CoatingIssueRequestDetailList) { //当前物品的集合 - var inputDetails = coatingIssueRequestDetailList; + var inputDetails = CoatingIssueRequestDetailList; //获取请求下 这个物品和这个库位一个需要多少箱 var sumBoxQty = inputDetails.Sum(p => p.BoxQty - jobs.Count); //获取生产线 @@ -368,12 +377,12 @@ public class CoatingIssueRequestEventHandler useBalanceList.Add(firstUsable); usableList.Remove(firstUsable); - var coatingIssueJobEditInput = - await BuildCoatingIssueJobCreateInputWithBoxQtyTypeAsync(coatingIssueRequest, + var CoatingIssueJobEditInput = + await BuildCoatingIssueJobCreateInputWithBoxQtyTypeAsync(CoatingIssueRequest, detail, firstUsable) .ConfigureAwait(false); - inputJobs.Add(coatingIssueJobEditInput); + inputJobs.Add(CoatingIssueJobEditInput); } else { @@ -389,24 +398,24 @@ public class CoatingIssueRequestEventHandler /// /// 构造注塑任务-按箱 /// - /// - /// + /// + /// /// /// private async Task BuildCoatingIssueJobCreateInputWithBoxQtyTypeAsync( - CoatingIssueRequest coatingIssueRequest, - CoatingIssueRequestDetail coatingIssueRequestDetail, BalanceDTO balanceDtos) + CoatingIssueRequest CoatingIssueRequest, + CoatingIssueRequestDetail CoatingIssueRequestDetail, BalanceDTO balanceDtos) { - var job = ObjectMapper.Map(coatingIssueRequest); + var job = ObjectMapper.Map(CoatingIssueRequest); job.JobType = EnumJobType.IssueJob; job.JobStatus = EnumJobStatus.Open; - job.WorkGroupCode = coatingIssueRequestDetail.ToLocationGroup; - job.WarehouseCode = coatingIssueRequestDetail.ToWarehouseCode; - job.Worker = coatingIssueRequest.Worker; - job.CoatingRequestNumber = coatingIssueRequest.Number; + job.WorkGroupCode = CoatingIssueRequestDetail.ToLocationGroup; + job.WarehouseCode = CoatingIssueRequestDetail.ToWarehouseCode; + job.Worker = CoatingIssueRequest.Worker; + job.CoatingRequestNumber = CoatingIssueRequest.Number; job.EnumIssueSendType = EnumIssueSendType.BoxQtyType; - job.Details.Add(await BuildCoatingIssueJobDetailWithBoxQtyTypeAsync(coatingIssueRequestDetail, balanceDtos) + job.Details.Add(await BuildCoatingIssueJobDetailWithBoxQtyTypeAsync(CoatingIssueRequestDetail, balanceDtos) .ConfigureAwait(false)); await Task.CompletedTask.ConfigureAwait(false); @@ -417,28 +426,28 @@ public class CoatingIssueRequestEventHandler /// /// 构造注塑任务明细-按箱 /// - /// + /// /// /// private async Task BuildCoatingIssueJobDetailWithBoxQtyTypeAsync( - CoatingIssueRequestDetail coatingIssueRequestDetail, BalanceDTO balance) + CoatingIssueRequestDetail CoatingIssueRequestDetail, BalanceDTO balance) { var detail = new CoatingIssueJobDetailInput(); - detail.RequestLocationCode = coatingIssueRequestDetail.ToLocationCode; - detail.RequestLocationGroup = coatingIssueRequestDetail.ToLocationGroup; - detail.RequestLocationArea = coatingIssueRequestDetail.ToLocationArea; - detail.RequestLocationErpCode = coatingIssueRequestDetail.ToLocationErpCode; - detail.RequestWarehouseCode = coatingIssueRequestDetail.ToWarehouseCode; + detail.RequestLocationCode = CoatingIssueRequestDetail.ToLocationCode; + detail.RequestLocationGroup = CoatingIssueRequestDetail.ToLocationGroup; + detail.RequestLocationArea = CoatingIssueRequestDetail.ToLocationArea; + detail.RequestLocationErpCode = CoatingIssueRequestDetail.ToLocationErpCode; + detail.RequestWarehouseCode = CoatingIssueRequestDetail.ToWarehouseCode; detail.RequestQty = 1; - detail.PositionCode = coatingIssueRequestDetail.PositionCode; - detail.RecommendType = coatingIssueRequestDetail.RecommendType; - detail.ProdLine = coatingIssueRequestDetail.ProdLine; + detail.PositionCode = CoatingIssueRequestDetail.PositionCode; + detail.RecommendType = CoatingIssueRequestDetail.RecommendType; + detail.ProdLine = CoatingIssueRequestDetail.ProdLine; - detail.ItemCode = coatingIssueRequestDetail.ItemCode; - detail.ItemName = coatingIssueRequestDetail.ItemName; - detail.ItemDesc1 = coatingIssueRequestDetail.ItemDesc1; - detail.ItemDesc2 = coatingIssueRequestDetail.ItemDesc2; + detail.ItemCode = CoatingIssueRequestDetail.ItemCode; + detail.ItemName = CoatingIssueRequestDetail.ItemName; + detail.ItemDesc1 = CoatingIssueRequestDetail.ItemDesc1; + detail.ItemDesc2 = CoatingIssueRequestDetail.ItemDesc2; detail.Status = EnumInventoryStatus.OK; detail.Uom = balance.Uom; @@ -473,11 +482,11 @@ public class CoatingIssueRequestEventHandler detail.RecommendToProduceDate = balance.ProduceDate; detail.RecommendToArriveDate = balance.ArriveDate; - detail.RecommendToLocationCode = coatingIssueRequestDetail.ToLocationCode; - detail.RecommendToLocationErpCode = coatingIssueRequestDetail.ToLocationErpCode; - detail.RecommendToLocationArea = coatingIssueRequestDetail.ToLocationArea; - detail.RecommendToWarehouseCode = coatingIssueRequestDetail.ToWarehouseCode; - detail.RecommendToLocationGroup = coatingIssueRequestDetail.ToLocationGroup; + detail.RecommendToLocationCode = CoatingIssueRequestDetail.ToLocationCode; + detail.RecommendToLocationErpCode = CoatingIssueRequestDetail.ToLocationErpCode; + detail.RecommendToLocationArea = CoatingIssueRequestDetail.ToLocationArea; + detail.RecommendToWarehouseCode = CoatingIssueRequestDetail.ToWarehouseCode; + detail.RecommendToLocationGroup = CoatingIssueRequestDetail.ToLocationGroup; await Task.CompletedTask.ConfigureAwait(false); return detail; @@ -489,26 +498,26 @@ public class CoatingIssueRequestEventHandler //创建任务 private async Task> CreateAllCoatingIssueJobAsync( - CoatingIssueRequest coatingIssueRequest) + CoatingIssueRequest CoatingIssueRequest) { - var coatingIssueJobEditInputs = new List(); + var CoatingIssueJobEditInputs = new List(); //已用的库存的集合 var useBalanceList = new List(); - foreach (var groupbyItemCodeAndProdLine in coatingIssueRequest.Details.GroupBy(p => + foreach (var groupbyItemCodeAndProdLine in CoatingIssueRequest.Details.GroupBy(p => new { p.ItemCode })) { - foreach (var coatingIssueRequestDetail in groupbyItemCodeAndProdLine) + foreach (var CoatingIssueRequestDetail in groupbyItemCodeAndProdLine) { var productionLineItemDto = await _productionLineItemAppService.GetByProductLineCodeAndItemCodeAsync( - coatingIssueRequestDetail.ProdLine, + CoatingIssueRequestDetail.ProdLine, groupbyItemCodeAndProdLine.Key.ItemCode).ConfigureAwait(false); if (productionLineItemDto == null) { throw new UserFriendlyException( - $"未在生产线物品关系表中维护【{coatingIssueRequestDetail.ProdLine}】物品【{groupbyItemCodeAndProdLine.Key.ItemCode}】的关系,请配置【生产线物品关系】"); + $"未在生产线物品关系表中维护【{CoatingIssueRequestDetail.ProdLine}】物品【{groupbyItemCodeAndProdLine.Key.ItemCode}】的关系,请配置【生产线物品关系】"); } //原料 @@ -521,7 +530,7 @@ public class CoatingIssueRequestEventHandler //获取可用库存 var input = new RecommendBalanceRequestInput { - ItemCode = coatingIssueRequestDetail.ItemCode, + ItemCode = CoatingIssueRequestDetail.ItemCode, Qty = decimal.MaxValue, Statuses = new EditableList { EnumInventoryStatus.OK }, Locations = @@ -532,14 +541,14 @@ public class CoatingIssueRequestEventHandler var sortByFifoAsync = await SortByFifoAsync(usableList).ConfigureAwait(false); //因为是按箱叫料 先把值赋值给箱数量上 - coatingIssueRequestDetail.BoxQty = coatingIssueRequestDetail.Qty; + CoatingIssueRequestDetail.BoxQty = CoatingIssueRequestDetail.Qty; if (usableList.Any()) { //因为是原料所以按箱叫料 - coatingIssueJobEditInputs.AddRange( - await CreateCoatingIssueJobWithBoxQtyTypeAsync(coatingIssueRequest, - new EditableList { coatingIssueRequestDetail }, + CoatingIssueJobEditInputs.AddRange( + await CreateCoatingIssueJobWithBoxQtyTypeAsync(CoatingIssueRequest, + new EditableList { CoatingIssueRequestDetail }, sortByFifoAsync, useBalanceList).ConfigureAwait(false)); } @@ -557,7 +566,7 @@ public class CoatingIssueRequestEventHandler var input = new RecommendBalanceRequestInput { ItemCode = groupbyItemCodeAndProdLine.Key.ItemCode, - Qty = coatingIssueRequestDetail.Qty, + Qty = CoatingIssueRequestDetail.Qty, Statuses = new EditableList { EnumInventoryStatus.OK }, Locations = JsonSerializer.Deserialize>(productionLineItemDto @@ -583,23 +592,23 @@ public class CoatingIssueRequestEventHandler } } - coatingIssueJobEditInputs.AddRange( - await CreateCoatingIssueJobWithQtyTypeAsync(coatingIssueRequest, - new List { coatingIssueRequestDetail }, temp, + CoatingIssueJobEditInputs.AddRange( + await CreateCoatingIssueJobWithQtyTypeAsync(CoatingIssueRequest, + new List { CoatingIssueRequestDetail }, temp, useBalanceList).ConfigureAwait(false)); } } } } - if (coatingIssueJobEditInputs.Count > 0) //有库存 可以创建任务 + if (CoatingIssueJobEditInputs.Count > 0) //有库存 可以创建任务 { //新增任务 - var addCoatingIssueJobDtos = await _coatingIssueJobAppService - .CreateManyAsync(coatingIssueJobEditInputs) + var addCoatingIssueJobDtos = await _CoatingIssueJobAppService + .CreateManyAsync(CoatingIssueJobEditInputs) .ConfigureAwait(false); - await UpdateCoatingIssueRequestDetailQtyAsync(coatingIssueRequest, addCoatingIssueJobDtos) + await UpdateCoatingIssueRequestDetailQtyAsync(CoatingIssueRequest, addCoatingIssueJobDtos) .ConfigureAwait(false); return addCoatingIssueJobDtos; @@ -611,15 +620,15 @@ public class CoatingIssueRequestEventHandler /// /// 修改请求的 已发 已收数量 /// - /// + /// /// /// - private async Task UpdateCoatingIssueRequestDetailQtyAsync(CoatingIssueRequest coatingIssueRequest, + private async Task UpdateCoatingIssueRequestDetailQtyAsync(CoatingIssueRequest CoatingIssueRequest, List addCoatingIssueJobDtos) { //原有任务 - var existCoatingIssueJobDtos = await _coatingIssueJobAppService - .GetByRequestNumberAsync(coatingIssueRequest.Number) + var existCoatingIssueJobDtos = await _CoatingIssueJobAppService + .GetByRequestNumberAsync(CoatingIssueRequest.Number) .ConfigureAwait(false); //新增的任务和已有的任务总和 @@ -627,7 +636,7 @@ public class CoatingIssueRequestEventHandler allCoatingIssueJobDtos.AddRange(addCoatingIssueJobDtos); allCoatingIssueJobDtos.AddRange(existCoatingIssueJobDtos); - var groupByItemCodeLocationCode = coatingIssueRequest.Details.GroupBy(p => + var groupByItemCodeLocationCode = CoatingIssueRequest.Details.GroupBy(p => new { p.ItemCode, p.ToLocationCode }); foreach (var group in groupByItemCodeLocationCode) { @@ -653,6 +662,8 @@ public class CoatingIssueRequestEventHandler requestDetail.ReceivedQty = allReceivedQty; } } + + await CoatingIssueRequestManager.UpdateByEntityAsync(CoatingIssueRequest).ConfigureAwait(false); } /// diff --git a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Event/Requests/IssueRequest/InjectionIssueRequestEventHandler.cs b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Event/Requests/IssueRequest/InjectionIssueRequestEventHandler.cs index de4d6b6f3..7008e859b 100644 --- a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Event/Requests/IssueRequest/InjectionIssueRequestEventHandler.cs +++ b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Event/Requests/IssueRequest/InjectionIssueRequestEventHandler.cs @@ -14,6 +14,7 @@ using Win_in.Sfs.Shared.Event; using Win_in.Sfs.Wms.Inventory.Application.Contracts; using Win_in.Sfs.Wms.Store.Application.Contracts; using Win_in.Sfs.Wms.Store.Domain; +using Win_in.Sfs.Wms.Store.Domain.Acl.Balance; namespace Win_in.Sfs.Wms.Store.Event.BusinessRequest; @@ -25,20 +26,21 @@ public class InjectionIssueRequestEventHandler , ILocalEventHandler> , ILocalEventHandler>> { - private readonly IInjectionIssueJobAppService _injectionIssueJobAppService; + private readonly IInjectionIssueJobAppService _InjectionIssueJobAppService; private readonly IProductionLineAppService _productionLineAppService; private readonly IProductionLineItemAppService _productionLineItemAppService; private readonly ILocationAppService _locationAppService; private readonly IBalanceAppService _balanceAppService; + protected IInjectionIssueRequestManager InjectionIssueRequestManager => LazyServiceProvider.LazyGetRequiredService(); private IMapper _mapper; public InjectionIssueRequestEventHandler( - IInjectionIssueJobAppService injectionIssueJobAppService, IProductionLineAppService productionLineAppService, + IInjectionIssueJobAppService InjectionIssueJobAppService, IProductionLineAppService productionLineAppService, ILocationAppService locationAppService, IBalanceAppService balanceAppService, IProductionLineItemAppService productionLineItemAppService ) { - _injectionIssueJobAppService = injectionIssueJobAppService; + _InjectionIssueJobAppService = InjectionIssueJobAppService; _productionLineAppService = productionLineAppService; _locationAppService = locationAppService; _balanceAppService = balanceAppService; @@ -107,14 +109,14 @@ public class InjectionIssueRequestEventHandler /// /// 创建注塑任务-按数量 /// - /// - /// + /// + /// /// /// /// /// private async Task> CreateInjectionIssueJobWithQtyTypeAsync - (InjectionIssueRequest injectionIssueRequest, List injectionIssueRequestDetails, + (InjectionIssueRequest InjectionIssueRequest, List InjectionIssueRequestDetails, List recommendbalanceDtos, List useBalanceList) { @@ -122,9 +124,9 @@ public class InjectionIssueRequestEventHandler //用来临时存放所有未生成任务的发料集合 如果生成完了再这里去掉 var tempDetailDtos = ObjectMapper.Map, List>( - injectionIssueRequestDetails); + InjectionIssueRequestDetails); - var injectionIssueJobDetailInputs = new List(); + var InjectionIssueJobDetailInputs = new List(); if (recommendbalanceDtos != null && recommendbalanceDtos.Count > 0) { @@ -138,7 +140,9 @@ public class InjectionIssueRequestEventHandler foreach (var tempDetailDto in tempDetailDtos) { //未发送的数量 - tempDetailDto.Qty = tempDetailDto.Qty - tempDetailDto.IssuedQty; + tempDetailDto.Qty = tempDetailDto.Qty > tempDetailDto.IssuedQty ? + tempDetailDto.Qty - tempDetailDto.IssuedQty : + 0; if (tempDetailDto.Qty > balanceDto.Qty) //需求量大于 这条推荐库存的余额 { @@ -150,7 +154,7 @@ public class InjectionIssueRequestEventHandler balanceDto.Qty = tempDetailDto.Qty; } - injectionIssueJobDetailInputs.Add( + InjectionIssueJobDetailInputs.Add( await BuildInjectionIssueJobDetailWithQtyTypeAsync(tempDetailDto, balanceDto) .ConfigureAwait(false)); useBalanceList.Add(balanceDto); @@ -170,13 +174,18 @@ public class InjectionIssueRequestEventHandler } } - if (injectionIssueJobDetailInputs.Any()) + if (InjectionIssueJobDetailInputs.Any()) { - var injectionIssueJobEditInput = await BuildInjectionIssueJobCreateInputWithQtyTypeAsync( - injectionIssueRequest, - injectionIssueRequestDetails.First()).ConfigureAwait(false); - injectionIssueJobEditInput.Details = injectionIssueJobDetailInputs; - jobs.Add(injectionIssueJobEditInput); + var InjectionIssueJobEditInput = await BuildInjectionIssueJobCreateInputWithQtyTypeAsync( + InjectionIssueRequest, + InjectionIssueRequestDetails.First()).ConfigureAwait(false); + InjectionIssueJobEditInput.Details = InjectionIssueJobDetailInputs; + + InjectionIssueJobEditInput.Details = InjectionIssueJobEditInput.Details.Where(p => p.RecommendFromQty > 0).ToList(); + if (InjectionIssueJobEditInput.Details != null && InjectionIssueJobEditInput.Details.Any()) + { + jobs.Add(InjectionIssueJobEditInput); + } } return jobs; @@ -185,19 +194,19 @@ public class InjectionIssueRequestEventHandler /// /// 构造注塑任务-按数量 /// - /// + /// /// /// private async Task BuildInjectionIssueJobCreateInputWithQtyTypeAsync( - InjectionIssueRequest injectionIssueRequest, InjectionIssueRequestDetail requestDetailInput) + InjectionIssueRequest InjectionIssueRequest, InjectionIssueRequestDetail requestDetailInput) { - var job = ObjectMapper.Map(injectionIssueRequest); + var job = ObjectMapper.Map(InjectionIssueRequest); job.JobType = EnumJobType.IssueJob; job.JobStatus = EnumJobStatus.Open; job.WorkGroupCode = requestDetailInput.ToLocationGroup; job.WarehouseCode = requestDetailInput.ToWarehouseCode; - job.Worker = injectionIssueRequest.Worker; - job.InjectionRequestNumber = injectionIssueRequest.Number; + job.Worker = InjectionIssueRequest.Worker; + job.InjectionRequestNumber = InjectionIssueRequest.Number; job.EnumIssueSendType = EnumIssueSendType.QtyType; await Task.CompletedTask.ConfigureAwait(false); @@ -208,31 +217,31 @@ public class InjectionIssueRequestEventHandler /// /// 构造注塑任务明细-按数量 /// - /// + /// /// /// private async Task BuildInjectionIssueJobDetailWithQtyTypeAsync( - InjectionIssueRequestDetailDTO injectionIssueRequestDetail, BalanceDTO balance) + InjectionIssueRequestDetailDTO InjectionIssueRequestDetail, BalanceDTO balance) { var detail = new InjectionIssueJobDetailInput(); - detail.RequestLocationCode = injectionIssueRequestDetail.ToLocationCode; - detail.PositionCode = injectionIssueRequestDetail.PositionCode; - detail.RecommendType = injectionIssueRequestDetail.RecommendType; + detail.RequestLocationCode = InjectionIssueRequestDetail.ToLocationCode; + detail.PositionCode = InjectionIssueRequestDetail.PositionCode; + detail.RecommendType = InjectionIssueRequestDetail.RecommendType; detail.Uom = balance.Uom; detail.ItemCode = balance.ItemCode; detail.ItemDesc2 = balance.ItemDesc2; detail.ItemDesc1 = balance.ItemDesc1; detail.ItemName = balance.ItemName; - detail.ProdLine = injectionIssueRequestDetail.ProdLine; + detail.ProdLine = InjectionIssueRequestDetail.ProdLine; detail.RequestQty = balance.Qty; - detail.StdPackQty = injectionIssueRequestDetail.StdPackQty; + detail.StdPackQty = InjectionIssueRequestDetail.StdPackQty; detail.Status = balance.Status; - detail.RequestLocationErpCode = injectionIssueRequestDetail.ToLocationErpCode; - detail.RequestLocationArea = injectionIssueRequestDetail.ToLocationArea; - detail.RequestWarehouseCode = injectionIssueRequestDetail.ToWarehouseCode; - detail.RequestLocationGroup = injectionIssueRequestDetail.ToLocationGroup; - detail.RequestLocationCode = injectionIssueRequestDetail.ToLocationCode; + detail.RequestLocationErpCode = InjectionIssueRequestDetail.ToLocationErpCode; + detail.RequestLocationArea = InjectionIssueRequestDetail.ToLocationArea; + detail.RequestWarehouseCode = InjectionIssueRequestDetail.ToWarehouseCode; + detail.RequestLocationGroup = InjectionIssueRequestDetail.ToLocationGroup; + detail.RequestLocationCode = InjectionIssueRequestDetail.ToLocationCode; detail.RecommendFromPackingCode = balance.PackingCode; detail.RecommendFromContainerCode = balance.ContainerCode; @@ -264,11 +273,11 @@ public class InjectionIssueRequestEventHandler detail.RecommendFromLocationGroup = balance.LocationGroup; detail.RecommendFromWarehouseCode = balance.WarehouseCode; - detail.RecommendToLocationCode = injectionIssueRequestDetail.ToLocationCode; - detail.RecommendToLocationErpCode = injectionIssueRequestDetail.ToLocationErpCode; - detail.RecommendToLocationArea = injectionIssueRequestDetail.ToLocationArea; - detail.RecommendToWarehouseCode = injectionIssueRequestDetail.ToWarehouseCode; - detail.RecommendToLocationGroup = injectionIssueRequestDetail.ToLocationGroup; + detail.RecommendToLocationCode = InjectionIssueRequestDetail.ToLocationCode; + detail.RecommendToLocationErpCode = InjectionIssueRequestDetail.ToLocationErpCode; + detail.RecommendToLocationArea = InjectionIssueRequestDetail.ToLocationArea; + detail.RecommendToWarehouseCode = InjectionIssueRequestDetail.ToWarehouseCode; + detail.RecommendToLocationGroup = InjectionIssueRequestDetail.ToLocationGroup; detail.TransferLibFromPackingCode = balance.PackingCode; detail.TransferLibFromContainerCode = balance.ContainerCode; @@ -299,11 +308,11 @@ public class InjectionIssueRequestEventHandler detail.TransferLibFromLocationGroup = balance.LocationGroup; detail.TransferLibFromWarehouseCode = balance.WarehouseCode; - detail.TransferLibToLocationCode = injectionIssueRequestDetail.ToLocationCode; - detail.TransferLibToLocationErpCode = injectionIssueRequestDetail.ToLocationErpCode; - detail.TransferLibToLocationArea = injectionIssueRequestDetail.ToLocationArea; - detail.TransferLibToWarehouseCode = injectionIssueRequestDetail.ToWarehouseCode; - detail.TransferLibToLocationGroup = injectionIssueRequestDetail.ToLocationGroup; + detail.TransferLibToLocationCode = InjectionIssueRequestDetail.ToLocationCode; + detail.TransferLibToLocationErpCode = InjectionIssueRequestDetail.ToLocationErpCode; + detail.TransferLibToLocationArea = InjectionIssueRequestDetail.ToLocationArea; + detail.TransferLibToWarehouseCode = InjectionIssueRequestDetail.ToWarehouseCode; + detail.TransferLibToLocationGroup = InjectionIssueRequestDetail.ToLocationGroup; await Task.CompletedTask.ConfigureAwait(false); return detail; @@ -316,28 +325,28 @@ public class InjectionIssueRequestEventHandler /// /// 创建注塑任务 按箱叫料-按箱 /// - /// - /// + /// + /// /// /// /// /// private async Task> CreateInjectionIssueJobWithBoxQtyTypeAsync ( - InjectionIssueRequest injectionIssueRequest, - List injectionIssueRequestDetailList, + InjectionIssueRequest InjectionIssueRequest, + List InjectionIssueRequestDetailList, List recommendbalanceDtos, List useBalanceList) { var inputJobs = new List(); - var jobs = await _injectionIssueJobAppService.GetByRequestNumberAsync(injectionIssueRequest.Number) + var jobs = await _InjectionIssueJobAppService.GetByRequestNumberAsync(InjectionIssueRequest.Number) .ConfigureAwait(false); - foreach (var detail in injectionIssueRequestDetailList) + foreach (var detail in InjectionIssueRequestDetailList) { //当前物品的集合 - var inputDetails = injectionIssueRequestDetailList; + var inputDetails = InjectionIssueRequestDetailList; //获取请求下 这个物品和这个库位一个需要多少箱 var sumBoxQty = inputDetails.Sum(p => p.BoxQty - jobs.Count); //获取生产线 @@ -368,12 +377,12 @@ public class InjectionIssueRequestEventHandler useBalanceList.Add(firstUsable); usableList.Remove(firstUsable); - var injectionIssueJobEditInput = - await BuildInjectionIssueJobCreateInputWithBoxQtyTypeAsync(injectionIssueRequest, + var InjectionIssueJobEditInput = + await BuildInjectionIssueJobCreateInputWithBoxQtyTypeAsync(InjectionIssueRequest, detail, firstUsable) .ConfigureAwait(false); - inputJobs.Add(injectionIssueJobEditInput); + inputJobs.Add(InjectionIssueJobEditInput); } else { @@ -389,24 +398,24 @@ public class InjectionIssueRequestEventHandler /// /// 构造注塑任务-按箱 /// - /// - /// + /// + /// /// /// private async Task BuildInjectionIssueJobCreateInputWithBoxQtyTypeAsync( - InjectionIssueRequest injectionIssueRequest, - InjectionIssueRequestDetail injectionIssueRequestDetail, BalanceDTO balanceDtos) + InjectionIssueRequest InjectionIssueRequest, + InjectionIssueRequestDetail InjectionIssueRequestDetail, BalanceDTO balanceDtos) { - var job = ObjectMapper.Map(injectionIssueRequest); + var job = ObjectMapper.Map(InjectionIssueRequest); job.JobType = EnumJobType.IssueJob; job.JobStatus = EnumJobStatus.Open; - job.WorkGroupCode = injectionIssueRequestDetail.ToLocationGroup; - job.WarehouseCode = injectionIssueRequestDetail.ToWarehouseCode; - job.Worker = injectionIssueRequest.Worker; - job.InjectionRequestNumber = injectionIssueRequest.Number; + job.WorkGroupCode = InjectionIssueRequestDetail.ToLocationGroup; + job.WarehouseCode = InjectionIssueRequestDetail.ToWarehouseCode; + job.Worker = InjectionIssueRequest.Worker; + job.InjectionRequestNumber = InjectionIssueRequest.Number; job.EnumIssueSendType = EnumIssueSendType.BoxQtyType; - job.Details.Add(await BuildInjectionIssueJobDetailWithBoxQtyTypeAsync(injectionIssueRequestDetail, balanceDtos) + job.Details.Add(await BuildInjectionIssueJobDetailWithBoxQtyTypeAsync(InjectionIssueRequestDetail, balanceDtos) .ConfigureAwait(false)); await Task.CompletedTask.ConfigureAwait(false); @@ -417,28 +426,28 @@ public class InjectionIssueRequestEventHandler /// /// 构造注塑任务明细-按箱 /// - /// + /// /// /// private async Task BuildInjectionIssueJobDetailWithBoxQtyTypeAsync( - InjectionIssueRequestDetail injectionIssueRequestDetail, BalanceDTO balance) + InjectionIssueRequestDetail InjectionIssueRequestDetail, BalanceDTO balance) { var detail = new InjectionIssueJobDetailInput(); - detail.RequestLocationCode = injectionIssueRequestDetail.ToLocationCode; - detail.RequestLocationGroup = injectionIssueRequestDetail.ToLocationGroup; - detail.RequestLocationArea = injectionIssueRequestDetail.ToLocationArea; - detail.RequestLocationErpCode = injectionIssueRequestDetail.ToLocationErpCode; - detail.RequestWarehouseCode = injectionIssueRequestDetail.ToWarehouseCode; + detail.RequestLocationCode = InjectionIssueRequestDetail.ToLocationCode; + detail.RequestLocationGroup = InjectionIssueRequestDetail.ToLocationGroup; + detail.RequestLocationArea = InjectionIssueRequestDetail.ToLocationArea; + detail.RequestLocationErpCode = InjectionIssueRequestDetail.ToLocationErpCode; + detail.RequestWarehouseCode = InjectionIssueRequestDetail.ToWarehouseCode; detail.RequestQty = 1; - detail.PositionCode = injectionIssueRequestDetail.PositionCode; - detail.RecommendType = injectionIssueRequestDetail.RecommendType; - detail.ProdLine = injectionIssueRequestDetail.ProdLine; + detail.PositionCode = InjectionIssueRequestDetail.PositionCode; + detail.RecommendType = InjectionIssueRequestDetail.RecommendType; + detail.ProdLine = InjectionIssueRequestDetail.ProdLine; - detail.ItemCode = injectionIssueRequestDetail.ItemCode; - detail.ItemName = injectionIssueRequestDetail.ItemName; - detail.ItemDesc1 = injectionIssueRequestDetail.ItemDesc1; - detail.ItemDesc2 = injectionIssueRequestDetail.ItemDesc2; + detail.ItemCode = InjectionIssueRequestDetail.ItemCode; + detail.ItemName = InjectionIssueRequestDetail.ItemName; + detail.ItemDesc1 = InjectionIssueRequestDetail.ItemDesc1; + detail.ItemDesc2 = InjectionIssueRequestDetail.ItemDesc2; detail.Status = EnumInventoryStatus.OK; detail.Uom = balance.Uom; @@ -473,11 +482,11 @@ public class InjectionIssueRequestEventHandler detail.RecommendToProduceDate = balance.ProduceDate; detail.RecommendToArriveDate = balance.ArriveDate; - detail.RecommendToLocationCode = injectionIssueRequestDetail.ToLocationCode; - detail.RecommendToLocationErpCode = injectionIssueRequestDetail.ToLocationErpCode; - detail.RecommendToLocationArea = injectionIssueRequestDetail.ToLocationArea; - detail.RecommendToWarehouseCode = injectionIssueRequestDetail.ToWarehouseCode; - detail.RecommendToLocationGroup = injectionIssueRequestDetail.ToLocationGroup; + detail.RecommendToLocationCode = InjectionIssueRequestDetail.ToLocationCode; + detail.RecommendToLocationErpCode = InjectionIssueRequestDetail.ToLocationErpCode; + detail.RecommendToLocationArea = InjectionIssueRequestDetail.ToLocationArea; + detail.RecommendToWarehouseCode = InjectionIssueRequestDetail.ToWarehouseCode; + detail.RecommendToLocationGroup = InjectionIssueRequestDetail.ToLocationGroup; await Task.CompletedTask.ConfigureAwait(false); return detail; @@ -489,26 +498,26 @@ public class InjectionIssueRequestEventHandler //创建任务 private async Task> CreateAllInjectionIssueJobAsync( - InjectionIssueRequest injectionIssueRequest) + InjectionIssueRequest InjectionIssueRequest) { - var injectionIssueJobEditInputs = new List(); + var InjectionIssueJobEditInputs = new List(); //已用的库存的集合 var useBalanceList = new List(); - foreach (var groupbyItemCodeAndProdLine in injectionIssueRequest.Details.GroupBy(p => + foreach (var groupbyItemCodeAndProdLine in InjectionIssueRequest.Details.GroupBy(p => new { p.ItemCode })) { - foreach (var injectionIssueRequestDetail in groupbyItemCodeAndProdLine) + foreach (var InjectionIssueRequestDetail in groupbyItemCodeAndProdLine) { var productionLineItemDto = await _productionLineItemAppService.GetByProductLineCodeAndItemCodeAsync( - injectionIssueRequestDetail.ProdLine, + InjectionIssueRequestDetail.ProdLine, groupbyItemCodeAndProdLine.Key.ItemCode).ConfigureAwait(false); if (productionLineItemDto == null) { throw new UserFriendlyException( - $"未在生产线物品关系表中维护【{injectionIssueRequestDetail.ProdLine}】物品【{groupbyItemCodeAndProdLine.Key.ItemCode}】的关系,请配置【生产线物品关系】"); + $"未在生产线物品关系表中维护【{InjectionIssueRequestDetail.ProdLine}】物品【{groupbyItemCodeAndProdLine.Key.ItemCode}】的关系,请配置【生产线物品关系】"); } //原料 @@ -521,7 +530,7 @@ public class InjectionIssueRequestEventHandler //获取可用库存 var input = new RecommendBalanceRequestInput { - ItemCode = injectionIssueRequestDetail.ItemCode, + ItemCode = InjectionIssueRequestDetail.ItemCode, Qty = decimal.MaxValue, Statuses = new EditableList { EnumInventoryStatus.OK }, Locations = @@ -532,14 +541,14 @@ public class InjectionIssueRequestEventHandler var sortByFifoAsync = await SortByFifoAsync(usableList).ConfigureAwait(false); //因为是按箱叫料 先把值赋值给箱数量上 - injectionIssueRequestDetail.BoxQty = injectionIssueRequestDetail.Qty; + InjectionIssueRequestDetail.BoxQty = InjectionIssueRequestDetail.Qty; if (usableList.Any()) { //因为是原料所以按箱叫料 - injectionIssueJobEditInputs.AddRange( - await CreateInjectionIssueJobWithBoxQtyTypeAsync(injectionIssueRequest, - new EditableList { injectionIssueRequestDetail }, + InjectionIssueJobEditInputs.AddRange( + await CreateInjectionIssueJobWithBoxQtyTypeAsync(InjectionIssueRequest, + new EditableList { InjectionIssueRequestDetail }, sortByFifoAsync, useBalanceList).ConfigureAwait(false)); } @@ -557,7 +566,7 @@ public class InjectionIssueRequestEventHandler var input = new RecommendBalanceRequestInput { ItemCode = groupbyItemCodeAndProdLine.Key.ItemCode, - Qty = injectionIssueRequestDetail.Qty, + Qty = InjectionIssueRequestDetail.Qty, Statuses = new EditableList { EnumInventoryStatus.OK }, Locations = JsonSerializer.Deserialize>(productionLineItemDto @@ -583,23 +592,23 @@ public class InjectionIssueRequestEventHandler } } - injectionIssueJobEditInputs.AddRange( - await CreateInjectionIssueJobWithQtyTypeAsync(injectionIssueRequest, - new List { injectionIssueRequestDetail }, temp, + InjectionIssueJobEditInputs.AddRange( + await CreateInjectionIssueJobWithQtyTypeAsync(InjectionIssueRequest, + new List { InjectionIssueRequestDetail }, temp, useBalanceList).ConfigureAwait(false)); } } } } - if (injectionIssueJobEditInputs.Count > 0) //有库存 可以创建任务 + if (InjectionIssueJobEditInputs.Count > 0) //有库存 可以创建任务 { //新增任务 - var addInjectionIssueJobDtos = await _injectionIssueJobAppService - .CreateManyAsync(injectionIssueJobEditInputs) + var addInjectionIssueJobDtos = await _InjectionIssueJobAppService + .CreateManyAsync(InjectionIssueJobEditInputs) .ConfigureAwait(false); - await UpdateInjectionIssueRequestDetailQtyAsync(injectionIssueRequest, addInjectionIssueJobDtos) + await UpdateInjectionIssueRequestDetailQtyAsync(InjectionIssueRequest, addInjectionIssueJobDtos) .ConfigureAwait(false); return addInjectionIssueJobDtos; @@ -611,15 +620,15 @@ public class InjectionIssueRequestEventHandler /// /// 修改请求的 已发 已收数量 /// - /// + /// /// /// - private async Task UpdateInjectionIssueRequestDetailQtyAsync(InjectionIssueRequest injectionIssueRequest, + private async Task UpdateInjectionIssueRequestDetailQtyAsync(InjectionIssueRequest InjectionIssueRequest, List addInjectionIssueJobDtos) { //原有任务 - var existInjectionIssueJobDtos = await _injectionIssueJobAppService - .GetByRequestNumberAsync(injectionIssueRequest.Number) + var existInjectionIssueJobDtos = await _InjectionIssueJobAppService + .GetByRequestNumberAsync(InjectionIssueRequest.Number) .ConfigureAwait(false); //新增的任务和已有的任务总和 @@ -627,7 +636,7 @@ public class InjectionIssueRequestEventHandler allInjectionIssueJobDtos.AddRange(addInjectionIssueJobDtos); allInjectionIssueJobDtos.AddRange(existInjectionIssueJobDtos); - var groupByItemCodeLocationCode = injectionIssueRequest.Details.GroupBy(p => + var groupByItemCodeLocationCode = InjectionIssueRequest.Details.GroupBy(p => new { p.ItemCode, p.ToLocationCode }); foreach (var group in groupByItemCodeLocationCode) { @@ -653,6 +662,8 @@ public class InjectionIssueRequestEventHandler requestDetail.ReceivedQty = allReceivedQty; } } + + await InjectionIssueRequestManager.UpdateByEntityAsync(InjectionIssueRequest).ConfigureAwait(false); } /// diff --git a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Event/Requests/IssueRequest/KittingIssueRequestEventHandler.cs b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Event/Requests/IssueRequest/KittingIssueRequestEventHandler.cs index 52d428aa8..ecc36f17d 100644 --- a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Event/Requests/IssueRequest/KittingIssueRequestEventHandler.cs +++ b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Event/Requests/IssueRequest/KittingIssueRequestEventHandler.cs @@ -14,6 +14,7 @@ using Win_in.Sfs.Shared.Event; using Win_in.Sfs.Wms.Inventory.Application.Contracts; using Win_in.Sfs.Wms.Store.Application.Contracts; using Win_in.Sfs.Wms.Store.Domain; +using Win_in.Sfs.Wms.Store.Domain.Acl.Balance; namespace Win_in.Sfs.Wms.Store.Event.BusinessRequest; @@ -25,20 +26,21 @@ public class KittingIssueRequestEventHandler , ILocalEventHandler> , ILocalEventHandler>> { - private readonly IKittingIssueJobAppService _kittingIssueJobAppService; + private readonly IKittingIssueJobAppService _KittingIssueJobAppService; private readonly IProductionLineAppService _productionLineAppService; private readonly IProductionLineItemAppService _productionLineItemAppService; private readonly ILocationAppService _locationAppService; private readonly IBalanceAppService _balanceAppService; + protected IKittingIssueRequestManager KittingIssueRequestManager => LazyServiceProvider.LazyGetRequiredService(); private IMapper _mapper; public KittingIssueRequestEventHandler( - IKittingIssueJobAppService kittingIssueJobAppService, IProductionLineAppService productionLineAppService, + IKittingIssueJobAppService KittingIssueJobAppService, IProductionLineAppService productionLineAppService, ILocationAppService locationAppService, IBalanceAppService balanceAppService, IProductionLineItemAppService productionLineItemAppService ) { - _kittingIssueJobAppService = kittingIssueJobAppService; + _KittingIssueJobAppService = KittingIssueJobAppService; _productionLineAppService = productionLineAppService; _locationAppService = locationAppService; _balanceAppService = balanceAppService; @@ -95,7 +97,7 @@ public class KittingIssueRequestEventHandler public virtual async Task HandleEventAsync(SfsCompletedEntityEventData eventData) { _ = eventData.Entity; - // await _kittingIssueJobAppService.CompleteByKittingIssueRequestAsync(entity.Number); + // await _KittingIssueJobAppService.CompleteByKittingIssueRequestAsync(entity.Number); await Task.CompletedTask.ConfigureAwait(false); } @@ -107,14 +109,14 @@ public class KittingIssueRequestEventHandler /// /// 创建注塑任务-按数量 /// - /// - /// + /// + /// /// /// /// /// private async Task> CreateKittingIssueJobWithQtyTypeAsync - (KittingIssueRequest kittingIssueRequest, List kittingIssueRequestDetails, + (KittingIssueRequest KittingIssueRequest, List KittingIssueRequestDetails, List recommendbalanceDtos, List useBalanceList) { @@ -122,9 +124,9 @@ public class KittingIssueRequestEventHandler //用来临时存放所有未生成任务的发料集合 如果生成完了再这里去掉 var tempDetailDtos = ObjectMapper.Map, List>( - kittingIssueRequestDetails); + KittingIssueRequestDetails); - var kittingIssueJobDetailInputs = new List(); + var KittingIssueJobDetailInputs = new List(); if (recommendbalanceDtos != null && recommendbalanceDtos.Count > 0) { @@ -138,7 +140,9 @@ public class KittingIssueRequestEventHandler foreach (var tempDetailDto in tempDetailDtos) { //未发送的数量 - tempDetailDto.Qty = tempDetailDto.Qty - tempDetailDto.IssuedQty; + tempDetailDto.Qty = tempDetailDto.Qty > tempDetailDto.IssuedQty ? + tempDetailDto.Qty - tempDetailDto.IssuedQty : + 0; if (tempDetailDto.Qty > balanceDto.Qty) //需求量大于 这条推荐库存的余额 { @@ -150,7 +154,7 @@ public class KittingIssueRequestEventHandler balanceDto.Qty = tempDetailDto.Qty; } - kittingIssueJobDetailInputs.Add( + KittingIssueJobDetailInputs.Add( await BuildKittingIssueJobDetailWithQtyTypeAsync(tempDetailDto, balanceDto) .ConfigureAwait(false)); useBalanceList.Add(balanceDto); @@ -170,12 +174,18 @@ public class KittingIssueRequestEventHandler } } - if (kittingIssueJobDetailInputs.Any()) + if (KittingIssueJobDetailInputs.Any()) { - var kittingIssueJobEditInput = await BuildKittingIssueJobCreateInputWithQtyTypeAsync(kittingIssueRequest, - kittingIssueRequestDetails.First()).ConfigureAwait(false); - kittingIssueJobEditInput.Details = kittingIssueJobDetailInputs; - jobs.Add(kittingIssueJobEditInput); + var KittingIssueJobEditInput = await BuildKittingIssueJobCreateInputWithQtyTypeAsync( + KittingIssueRequest, + KittingIssueRequestDetails.First()).ConfigureAwait(false); + KittingIssueJobEditInput.Details = KittingIssueJobDetailInputs; + + KittingIssueJobEditInput.Details = KittingIssueJobEditInput.Details.Where(p => p.RecommendFromQty > 0).ToList(); + if (KittingIssueJobEditInput.Details != null && KittingIssueJobEditInput.Details.Any()) + { + jobs.Add(KittingIssueJobEditInput); + } } return jobs; @@ -184,19 +194,19 @@ public class KittingIssueRequestEventHandler /// /// 构造注塑任务-按数量 /// - /// + /// /// /// private async Task BuildKittingIssueJobCreateInputWithQtyTypeAsync( - KittingIssueRequest kittingIssueRequest, KittingIssueRequestDetail requestDetailInput) + KittingIssueRequest KittingIssueRequest, KittingIssueRequestDetail requestDetailInput) { - var job = ObjectMapper.Map(kittingIssueRequest); + var job = ObjectMapper.Map(KittingIssueRequest); job.JobType = EnumJobType.IssueJob; job.JobStatus = EnumJobStatus.Open; job.WorkGroupCode = requestDetailInput.ToLocationGroup; job.WarehouseCode = requestDetailInput.ToWarehouseCode; - job.Worker = kittingIssueRequest.Worker; - job.KittingRequestNumber = kittingIssueRequest.Number; + job.Worker = KittingIssueRequest.Worker; + job.KittingRequestNumber = KittingIssueRequest.Number; job.EnumIssueSendType = EnumIssueSendType.QtyType; await Task.CompletedTask.ConfigureAwait(false); @@ -207,31 +217,31 @@ public class KittingIssueRequestEventHandler /// /// 构造注塑任务明细-按数量 /// - /// + /// /// /// private async Task BuildKittingIssueJobDetailWithQtyTypeAsync( - KittingIssueRequestDetailDTO kittingIssueRequestDetail, BalanceDTO balance) + KittingIssueRequestDetailDTO KittingIssueRequestDetail, BalanceDTO balance) { var detail = new KittingIssueJobDetailInput(); - detail.RequestLocationCode = kittingIssueRequestDetail.ToLocationCode; - detail.PositionCode = kittingIssueRequestDetail.PositionCode; - detail.RecommendType = kittingIssueRequestDetail.RecommendType; + detail.RequestLocationCode = KittingIssueRequestDetail.ToLocationCode; + detail.PositionCode = KittingIssueRequestDetail.PositionCode; + detail.RecommendType = KittingIssueRequestDetail.RecommendType; detail.Uom = balance.Uom; detail.ItemCode = balance.ItemCode; detail.ItemDesc2 = balance.ItemDesc2; detail.ItemDesc1 = balance.ItemDesc1; detail.ItemName = balance.ItemName; - detail.ProdLine = kittingIssueRequestDetail.ProdLine; + detail.ProdLine = KittingIssueRequestDetail.ProdLine; detail.RequestQty = balance.Qty; - detail.StdPackQty = kittingIssueRequestDetail.StdPackQty; + detail.StdPackQty = KittingIssueRequestDetail.StdPackQty; detail.Status = balance.Status; - detail.RequestLocationErpCode = kittingIssueRequestDetail.ToLocationErpCode; - detail.RequestLocationArea = kittingIssueRequestDetail.ToLocationArea; - detail.RequestWarehouseCode = kittingIssueRequestDetail.ToWarehouseCode; - detail.RequestLocationGroup = kittingIssueRequestDetail.ToLocationGroup; - detail.RequestLocationCode = kittingIssueRequestDetail.ToLocationCode; + detail.RequestLocationErpCode = KittingIssueRequestDetail.ToLocationErpCode; + detail.RequestLocationArea = KittingIssueRequestDetail.ToLocationArea; + detail.RequestWarehouseCode = KittingIssueRequestDetail.ToWarehouseCode; + detail.RequestLocationGroup = KittingIssueRequestDetail.ToLocationGroup; + detail.RequestLocationCode = KittingIssueRequestDetail.ToLocationCode; detail.RecommendFromPackingCode = balance.PackingCode; detail.RecommendFromContainerCode = balance.ContainerCode; @@ -263,11 +273,11 @@ public class KittingIssueRequestEventHandler detail.RecommendFromLocationGroup = balance.LocationGroup; detail.RecommendFromWarehouseCode = balance.WarehouseCode; - detail.RecommendToLocationCode = kittingIssueRequestDetail.ToLocationCode; - detail.RecommendToLocationErpCode = kittingIssueRequestDetail.ToLocationErpCode; - detail.RecommendToLocationArea = kittingIssueRequestDetail.ToLocationArea; - detail.RecommendToWarehouseCode = kittingIssueRequestDetail.ToWarehouseCode; - detail.RecommendToLocationGroup = kittingIssueRequestDetail.ToLocationGroup; + detail.RecommendToLocationCode = KittingIssueRequestDetail.ToLocationCode; + detail.RecommendToLocationErpCode = KittingIssueRequestDetail.ToLocationErpCode; + detail.RecommendToLocationArea = KittingIssueRequestDetail.ToLocationArea; + detail.RecommendToWarehouseCode = KittingIssueRequestDetail.ToWarehouseCode; + detail.RecommendToLocationGroup = KittingIssueRequestDetail.ToLocationGroup; detail.TransferLibFromPackingCode = balance.PackingCode; detail.TransferLibFromContainerCode = balance.ContainerCode; @@ -298,11 +308,11 @@ public class KittingIssueRequestEventHandler detail.TransferLibFromLocationGroup = balance.LocationGroup; detail.TransferLibFromWarehouseCode = balance.WarehouseCode; - detail.TransferLibToLocationCode = kittingIssueRequestDetail.ToLocationCode; - detail.TransferLibToLocationErpCode = kittingIssueRequestDetail.ToLocationErpCode; - detail.TransferLibToLocationArea = kittingIssueRequestDetail.ToLocationArea; - detail.TransferLibToWarehouseCode = kittingIssueRequestDetail.ToWarehouseCode; - detail.TransferLibToLocationGroup = kittingIssueRequestDetail.ToLocationGroup; + detail.TransferLibToLocationCode = KittingIssueRequestDetail.ToLocationCode; + detail.TransferLibToLocationErpCode = KittingIssueRequestDetail.ToLocationErpCode; + detail.TransferLibToLocationArea = KittingIssueRequestDetail.ToLocationArea; + detail.TransferLibToWarehouseCode = KittingIssueRequestDetail.ToWarehouseCode; + detail.TransferLibToLocationGroup = KittingIssueRequestDetail.ToLocationGroup; await Task.CompletedTask.ConfigureAwait(false); return detail; @@ -315,28 +325,28 @@ public class KittingIssueRequestEventHandler /// /// 创建注塑任务 按箱叫料-按箱 /// - /// - /// + /// + /// /// /// /// /// private async Task> CreateKittingIssueJobWithBoxQtyTypeAsync ( - KittingIssueRequest kittingIssueRequest, - List kittingIssueRequestDetailList, + KittingIssueRequest KittingIssueRequest, + List KittingIssueRequestDetailList, List recommendbalanceDtos, List useBalanceList) { var inputJobs = new List(); - var jobs = await _kittingIssueJobAppService.GetByRequestNumberAsync(kittingIssueRequest.Number) + var jobs = await _KittingIssueJobAppService.GetByRequestNumberAsync(KittingIssueRequest.Number) .ConfigureAwait(false); - foreach (var detail in kittingIssueRequestDetailList) + foreach (var detail in KittingIssueRequestDetailList) { //当前物品的集合 - var inputDetails = kittingIssueRequestDetailList; + var inputDetails = KittingIssueRequestDetailList; //获取请求下 这个物品和这个库位一个需要多少箱 var sumBoxQty = inputDetails.Sum(p => p.BoxQty - jobs.Count); //获取生产线 @@ -354,7 +364,8 @@ public class KittingIssueRequestEventHandler //可用库存 var usableList = recommendbalanceDtos; - usableList = usableList.Where(p => !useBalanceList.Select(p => p.PackingCode).Contains(p.PackingCode)) + usableList = usableList.Where(p => + !useBalanceList.Select(balanceDto => balanceDto.PackingCode).Contains(p.PackingCode)) .ToList(); if (usableList.Any()) { @@ -366,12 +377,12 @@ public class KittingIssueRequestEventHandler useBalanceList.Add(firstUsable); usableList.Remove(firstUsable); - var kittingIssueJobEditInput = - await BuildKittingIssueJobCreateInputWithBoxQtyTypeAsync(kittingIssueRequest, + var KittingIssueJobEditInput = + await BuildKittingIssueJobCreateInputWithBoxQtyTypeAsync(KittingIssueRequest, detail, firstUsable) .ConfigureAwait(false); - inputJobs.Add(kittingIssueJobEditInput); + inputJobs.Add(KittingIssueJobEditInput); } else { @@ -387,24 +398,24 @@ public class KittingIssueRequestEventHandler /// /// 构造注塑任务-按箱 /// - /// - /// + /// + /// /// /// private async Task BuildKittingIssueJobCreateInputWithBoxQtyTypeAsync( - KittingIssueRequest kittingIssueRequest, - KittingIssueRequestDetail kittingIssueRequestDetail, BalanceDTO balanceDtos) + KittingIssueRequest KittingIssueRequest, + KittingIssueRequestDetail KittingIssueRequestDetail, BalanceDTO balanceDtos) { - var job = ObjectMapper.Map(kittingIssueRequest); + var job = ObjectMapper.Map(KittingIssueRequest); job.JobType = EnumJobType.IssueJob; job.JobStatus = EnumJobStatus.Open; - job.WorkGroupCode = kittingIssueRequestDetail.ToLocationGroup; - job.WarehouseCode = kittingIssueRequestDetail.ToWarehouseCode; - job.Worker = kittingIssueRequest.Worker; - job.KittingRequestNumber = kittingIssueRequest.Number; + job.WorkGroupCode = KittingIssueRequestDetail.ToLocationGroup; + job.WarehouseCode = KittingIssueRequestDetail.ToWarehouseCode; + job.Worker = KittingIssueRequest.Worker; + job.KittingRequestNumber = KittingIssueRequest.Number; job.EnumIssueSendType = EnumIssueSendType.BoxQtyType; - job.Details.Add(await BuildKittingIssueJobDetailWithBoxQtyTypeAsync(kittingIssueRequestDetail, balanceDtos) + job.Details.Add(await BuildKittingIssueJobDetailWithBoxQtyTypeAsync(KittingIssueRequestDetail, balanceDtos) .ConfigureAwait(false)); await Task.CompletedTask.ConfigureAwait(false); @@ -415,28 +426,28 @@ public class KittingIssueRequestEventHandler /// /// 构造注塑任务明细-按箱 /// - /// + /// /// /// private async Task BuildKittingIssueJobDetailWithBoxQtyTypeAsync( - KittingIssueRequestDetail kittingIssueRequestDetail, BalanceDTO balance) + KittingIssueRequestDetail KittingIssueRequestDetail, BalanceDTO balance) { var detail = new KittingIssueJobDetailInput(); - detail.RequestLocationCode = kittingIssueRequestDetail.ToLocationCode; - detail.RequestLocationGroup = kittingIssueRequestDetail.ToLocationGroup; - detail.RequestLocationArea = kittingIssueRequestDetail.ToLocationArea; - detail.RequestLocationErpCode = kittingIssueRequestDetail.ToLocationErpCode; - detail.RequestWarehouseCode = kittingIssueRequestDetail.ToWarehouseCode; + detail.RequestLocationCode = KittingIssueRequestDetail.ToLocationCode; + detail.RequestLocationGroup = KittingIssueRequestDetail.ToLocationGroup; + detail.RequestLocationArea = KittingIssueRequestDetail.ToLocationArea; + detail.RequestLocationErpCode = KittingIssueRequestDetail.ToLocationErpCode; + detail.RequestWarehouseCode = KittingIssueRequestDetail.ToWarehouseCode; detail.RequestQty = 1; - detail.PositionCode = kittingIssueRequestDetail.PositionCode; - detail.RecommendType = kittingIssueRequestDetail.RecommendType; - detail.ProdLine = kittingIssueRequestDetail.ProdLine; + detail.PositionCode = KittingIssueRequestDetail.PositionCode; + detail.RecommendType = KittingIssueRequestDetail.RecommendType; + detail.ProdLine = KittingIssueRequestDetail.ProdLine; - detail.ItemCode = kittingIssueRequestDetail.ItemCode; - detail.ItemName = kittingIssueRequestDetail.ItemName; - detail.ItemDesc1 = kittingIssueRequestDetail.ItemDesc1; - detail.ItemDesc2 = kittingIssueRequestDetail.ItemDesc2; + detail.ItemCode = KittingIssueRequestDetail.ItemCode; + detail.ItemName = KittingIssueRequestDetail.ItemName; + detail.ItemDesc1 = KittingIssueRequestDetail.ItemDesc1; + detail.ItemDesc2 = KittingIssueRequestDetail.ItemDesc2; detail.Status = EnumInventoryStatus.OK; detail.Uom = balance.Uom; @@ -471,11 +482,11 @@ public class KittingIssueRequestEventHandler detail.RecommendToProduceDate = balance.ProduceDate; detail.RecommendToArriveDate = balance.ArriveDate; - detail.RecommendToLocationCode = kittingIssueRequestDetail.ToLocationCode; - detail.RecommendToLocationErpCode = kittingIssueRequestDetail.ToLocationErpCode; - detail.RecommendToLocationArea = kittingIssueRequestDetail.ToLocationArea; - detail.RecommendToWarehouseCode = kittingIssueRequestDetail.ToWarehouseCode; - detail.RecommendToLocationGroup = kittingIssueRequestDetail.ToLocationGroup; + detail.RecommendToLocationCode = KittingIssueRequestDetail.ToLocationCode; + detail.RecommendToLocationErpCode = KittingIssueRequestDetail.ToLocationErpCode; + detail.RecommendToLocationArea = KittingIssueRequestDetail.ToLocationArea; + detail.RecommendToWarehouseCode = KittingIssueRequestDetail.ToWarehouseCode; + detail.RecommendToLocationGroup = KittingIssueRequestDetail.ToLocationGroup; await Task.CompletedTask.ConfigureAwait(false); return detail; @@ -487,26 +498,26 @@ public class KittingIssueRequestEventHandler //创建任务 private async Task> CreateAllKittingIssueJobAsync( - KittingIssueRequest kittingIssueRequest) + KittingIssueRequest KittingIssueRequest) { - var kittingIssueJobEditInputs = new List(); + var KittingIssueJobEditInputs = new List(); //已用的库存的集合 var useBalanceList = new List(); - foreach (var groupbyItemCodeAndProdLine in kittingIssueRequest.Details.GroupBy(p => + foreach (var groupbyItemCodeAndProdLine in KittingIssueRequest.Details.GroupBy(p => new { p.ItemCode })) { - foreach (var kittingIssueRequestDetail in groupbyItemCodeAndProdLine) + foreach (var KittingIssueRequestDetail in groupbyItemCodeAndProdLine) { var productionLineItemDto = await _productionLineItemAppService.GetByProductLineCodeAndItemCodeAsync( - kittingIssueRequestDetail.ProdLine, + KittingIssueRequestDetail.ProdLine, groupbyItemCodeAndProdLine.Key.ItemCode).ConfigureAwait(false); if (productionLineItemDto == null) { throw new UserFriendlyException( - $"未在生产线物品关系表中维护【{kittingIssueRequestDetail.ProdLine}】物品【{groupbyItemCodeAndProdLine.Key.ItemCode}】的关系,请配置【生产线物品关系】"); + $"未在生产线物品关系表中维护【{KittingIssueRequestDetail.ProdLine}】物品【{groupbyItemCodeAndProdLine.Key.ItemCode}】的关系,请配置【生产线物品关系】"); } //原料 @@ -519,7 +530,7 @@ public class KittingIssueRequestEventHandler //获取可用库存 var input = new RecommendBalanceRequestInput { - ItemCode = kittingIssueRequestDetail.ItemCode, + ItemCode = KittingIssueRequestDetail.ItemCode, Qty = decimal.MaxValue, Statuses = new EditableList { EnumInventoryStatus.OK }, Locations = @@ -530,14 +541,14 @@ public class KittingIssueRequestEventHandler var sortByFifoAsync = await SortByFifoAsync(usableList).ConfigureAwait(false); //因为是按箱叫料 先把值赋值给箱数量上 - kittingIssueRequestDetail.BoxQty = kittingIssueRequestDetail.Qty; + KittingIssueRequestDetail.BoxQty = KittingIssueRequestDetail.Qty; if (usableList.Any()) { //因为是原料所以按箱叫料 - kittingIssueJobEditInputs.AddRange( - await CreateKittingIssueJobWithBoxQtyTypeAsync(kittingIssueRequest, - new EditableList { kittingIssueRequestDetail }, + KittingIssueJobEditInputs.AddRange( + await CreateKittingIssueJobWithBoxQtyTypeAsync(KittingIssueRequest, + new EditableList { KittingIssueRequestDetail }, sortByFifoAsync, useBalanceList).ConfigureAwait(false)); } @@ -555,7 +566,7 @@ public class KittingIssueRequestEventHandler var input = new RecommendBalanceRequestInput { ItemCode = groupbyItemCodeAndProdLine.Key.ItemCode, - Qty = kittingIssueRequestDetail.Qty, + Qty = KittingIssueRequestDetail.Qty, Statuses = new EditableList { EnumInventoryStatus.OK }, Locations = JsonSerializer.Deserialize>(productionLineItemDto @@ -581,22 +592,23 @@ public class KittingIssueRequestEventHandler } } - kittingIssueJobEditInputs.AddRange( - await CreateKittingIssueJobWithQtyTypeAsync(kittingIssueRequest, - new List { kittingIssueRequestDetail }, temp, + KittingIssueJobEditInputs.AddRange( + await CreateKittingIssueJobWithQtyTypeAsync(KittingIssueRequest, + new List { KittingIssueRequestDetail }, temp, useBalanceList).ConfigureAwait(false)); } } } } - if (kittingIssueJobEditInputs.Count > 0) //有库存 可以创建任务 + if (KittingIssueJobEditInputs.Count > 0) //有库存 可以创建任务 { //新增任务 - var addKittingIssueJobDtos = await _kittingIssueJobAppService.CreateManyAsync(kittingIssueJobEditInputs) + var addKittingIssueJobDtos = await _KittingIssueJobAppService + .CreateManyAsync(KittingIssueJobEditInputs) .ConfigureAwait(false); - await UpdateKittingIssueRequestDetailQtyAsync(kittingIssueRequest, addKittingIssueJobDtos) + await UpdateKittingIssueRequestDetailQtyAsync(KittingIssueRequest, addKittingIssueJobDtos) .ConfigureAwait(false); return addKittingIssueJobDtos; @@ -608,15 +620,15 @@ public class KittingIssueRequestEventHandler /// /// 修改请求的 已发 已收数量 /// - /// + /// /// /// - private async Task UpdateKittingIssueRequestDetailQtyAsync(KittingIssueRequest kittingIssueRequest, + private async Task UpdateKittingIssueRequestDetailQtyAsync(KittingIssueRequest KittingIssueRequest, List addKittingIssueJobDtos) { //原有任务 - var existKittingIssueJobDtos = await _kittingIssueJobAppService - .GetByRequestNumberAsync(kittingIssueRequest.Number) + var existKittingIssueJobDtos = await _KittingIssueJobAppService + .GetByRequestNumberAsync(KittingIssueRequest.Number) .ConfigureAwait(false); //新增的任务和已有的任务总和 @@ -624,7 +636,7 @@ public class KittingIssueRequestEventHandler allKittingIssueJobDtos.AddRange(addKittingIssueJobDtos); allKittingIssueJobDtos.AddRange(existKittingIssueJobDtos); - var groupByItemCodeLocationCode = kittingIssueRequest.Details.GroupBy(p => + var groupByItemCodeLocationCode = KittingIssueRequest.Details.GroupBy(p => new { p.ItemCode, p.ToLocationCode }); foreach (var group in groupByItemCodeLocationCode) { @@ -650,6 +662,8 @@ public class KittingIssueRequestEventHandler requestDetail.ReceivedQty = allReceivedQty; } } + + await KittingIssueRequestManager.UpdateByEntityAsync(KittingIssueRequest).ConfigureAwait(false); } /// diff --git a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Event/Requests/IssueRequest/SparePartIssueRequestEventHandler.cs b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Event/Requests/IssueRequest/SparePartIssueRequestEventHandler.cs index 640d8698f..30c996fe6 100644 --- a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Event/Requests/IssueRequest/SparePartIssueRequestEventHandler.cs +++ b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Event/Requests/IssueRequest/SparePartIssueRequestEventHandler.cs @@ -14,6 +14,7 @@ using Win_in.Sfs.Shared.Event; using Win_in.Sfs.Wms.Inventory.Application.Contracts; using Win_in.Sfs.Wms.Store.Application.Contracts; using Win_in.Sfs.Wms.Store.Domain; +using Win_in.Sfs.Wms.Store.Domain.Acl.Balance; namespace Win_in.Sfs.Wms.Store.Event.BusinessRequest; @@ -25,20 +26,21 @@ public class SparePartIssueRequestEventHandler , ILocalEventHandler> , ILocalEventHandler>> { - private readonly ISparePartIssueJobAppService _sparePartIssueJobAppService; + private readonly ISparePartIssueJobAppService _SparePartIssueJobAppService; private readonly IProductionLineAppService _productionLineAppService; private readonly IProductionLineItemAppService _productionLineItemAppService; private readonly ILocationAppService _locationAppService; private readonly IBalanceAppService _balanceAppService; + protected ISparePartIssueRequestManager SparePartIssueRequestManager => LazyServiceProvider.LazyGetRequiredService(); private IMapper _mapper; public SparePartIssueRequestEventHandler( - ISparePartIssueJobAppService sparePartIssueJobAppService, IProductionLineAppService productionLineAppService, + ISparePartIssueJobAppService SparePartIssueJobAppService, IProductionLineAppService productionLineAppService, ILocationAppService locationAppService, IBalanceAppService balanceAppService, IProductionLineItemAppService productionLineItemAppService ) { - _sparePartIssueJobAppService = sparePartIssueJobAppService; + _SparePartIssueJobAppService = SparePartIssueJobAppService; _productionLineAppService = productionLineAppService; _locationAppService = locationAppService; _balanceAppService = balanceAppService; @@ -95,7 +97,7 @@ public class SparePartIssueRequestEventHandler public virtual async Task HandleEventAsync(SfsCompletedEntityEventData eventData) { _ = eventData.Entity; - // await _sparePartIssueJobAppService.CompleteBySparePartIssueRequestAsync(entity.Number); + // await _SparePartIssueJobAppService.CompleteBySparePartIssueRequestAsync(entity.Number); await Task.CompletedTask.ConfigureAwait(false); } @@ -107,14 +109,14 @@ public class SparePartIssueRequestEventHandler /// /// 创建注塑任务-按数量 /// - /// - /// + /// + /// /// /// /// /// private async Task> CreateSparePartIssueJobWithQtyTypeAsync - (SparePartIssueRequest sparePartIssueRequest, List sparePartIssueRequestDetails, + (SparePartIssueRequest SparePartIssueRequest, List SparePartIssueRequestDetails, List recommendbalanceDtos, List useBalanceList) { @@ -122,9 +124,9 @@ public class SparePartIssueRequestEventHandler //用来临时存放所有未生成任务的发料集合 如果生成完了再这里去掉 var tempDetailDtos = ObjectMapper.Map, List>( - sparePartIssueRequestDetails); + SparePartIssueRequestDetails); - var sparePartIssueJobDetailInputs = new List(); + var SparePartIssueJobDetailInputs = new List(); if (recommendbalanceDtos != null && recommendbalanceDtos.Count > 0) { @@ -138,7 +140,9 @@ public class SparePartIssueRequestEventHandler foreach (var tempDetailDto in tempDetailDtos) { //未发送的数量 - tempDetailDto.Qty = tempDetailDto.Qty - tempDetailDto.IssuedQty; + tempDetailDto.Qty = tempDetailDto.Qty > tempDetailDto.IssuedQty ? + tempDetailDto.Qty - tempDetailDto.IssuedQty : + 0; if (tempDetailDto.Qty > balanceDto.Qty) //需求量大于 这条推荐库存的余额 { @@ -150,7 +154,7 @@ public class SparePartIssueRequestEventHandler balanceDto.Qty = tempDetailDto.Qty; } - sparePartIssueJobDetailInputs.Add( + SparePartIssueJobDetailInputs.Add( await BuildSparePartIssueJobDetailWithQtyTypeAsync(tempDetailDto, balanceDto) .ConfigureAwait(false)); useBalanceList.Add(balanceDto); @@ -170,12 +174,18 @@ public class SparePartIssueRequestEventHandler } } - if (sparePartIssueJobDetailInputs.Any()) + if (SparePartIssueJobDetailInputs.Any()) { - var sparePartIssueJobEditInput = await BuildSparePartIssueJobCreateInputWithQtyTypeAsync(sparePartIssueRequest, - sparePartIssueRequestDetails.First()).ConfigureAwait(false); - sparePartIssueJobEditInput.Details = sparePartIssueJobDetailInputs; - jobs.Add(sparePartIssueJobEditInput); + var SparePartIssueJobEditInput = await BuildSparePartIssueJobCreateInputWithQtyTypeAsync( + SparePartIssueRequest, + SparePartIssueRequestDetails.First()).ConfigureAwait(false); + SparePartIssueJobEditInput.Details = SparePartIssueJobDetailInputs; + + SparePartIssueJobEditInput.Details = SparePartIssueJobEditInput.Details.Where(p => p.RecommendFromQty > 0).ToList(); + if (SparePartIssueJobEditInput.Details != null && SparePartIssueJobEditInput.Details.Any()) + { + jobs.Add(SparePartIssueJobEditInput); + } } return jobs; @@ -184,19 +194,19 @@ public class SparePartIssueRequestEventHandler /// /// 构造注塑任务-按数量 /// - /// + /// /// /// private async Task BuildSparePartIssueJobCreateInputWithQtyTypeAsync( - SparePartIssueRequest sparePartIssueRequest, SparePartIssueRequestDetail requestDetailInput) + SparePartIssueRequest SparePartIssueRequest, SparePartIssueRequestDetail requestDetailInput) { - var job = ObjectMapper.Map(sparePartIssueRequest); + var job = ObjectMapper.Map(SparePartIssueRequest); job.JobType = EnumJobType.IssueJob; job.JobStatus = EnumJobStatus.Open; job.WorkGroupCode = requestDetailInput.ToLocationGroup; job.WarehouseCode = requestDetailInput.ToWarehouseCode; - job.Worker = sparePartIssueRequest.Worker; - job.SparePartRequestNumber = sparePartIssueRequest.Number; + job.Worker = SparePartIssueRequest.Worker; + job.SparePartRequestNumber = SparePartIssueRequest.Number; job.EnumIssueSendType = EnumIssueSendType.QtyType; await Task.CompletedTask.ConfigureAwait(false); @@ -207,31 +217,31 @@ public class SparePartIssueRequestEventHandler /// /// 构造注塑任务明细-按数量 /// - /// + /// /// /// private async Task BuildSparePartIssueJobDetailWithQtyTypeAsync( - SparePartIssueRequestDetailDTO sparePartIssueRequestDetail, BalanceDTO balance) + SparePartIssueRequestDetailDTO SparePartIssueRequestDetail, BalanceDTO balance) { var detail = new SparePartIssueJobDetailInput(); - detail.RequestLocationCode = sparePartIssueRequestDetail.ToLocationCode; - detail.PositionCode = sparePartIssueRequestDetail.PositionCode; - detail.RecommendType = sparePartIssueRequestDetail.RecommendType; + detail.RequestLocationCode = SparePartIssueRequestDetail.ToLocationCode; + detail.PositionCode = SparePartIssueRequestDetail.PositionCode; + detail.RecommendType = SparePartIssueRequestDetail.RecommendType; detail.Uom = balance.Uom; detail.ItemCode = balance.ItemCode; detail.ItemDesc2 = balance.ItemDesc2; detail.ItemDesc1 = balance.ItemDesc1; detail.ItemName = balance.ItemName; - detail.ProdLine = sparePartIssueRequestDetail.ProdLine; + detail.ProdLine = SparePartIssueRequestDetail.ProdLine; detail.RequestQty = balance.Qty; - detail.StdPackQty = sparePartIssueRequestDetail.StdPackQty; + detail.StdPackQty = SparePartIssueRequestDetail.StdPackQty; detail.Status = balance.Status; - detail.RequestLocationErpCode = sparePartIssueRequestDetail.ToLocationErpCode; - detail.RequestLocationArea = sparePartIssueRequestDetail.ToLocationArea; - detail.RequestWarehouseCode = sparePartIssueRequestDetail.ToWarehouseCode; - detail.RequestLocationGroup = sparePartIssueRequestDetail.ToLocationGroup; - detail.RequestLocationCode = sparePartIssueRequestDetail.ToLocationCode; + detail.RequestLocationErpCode = SparePartIssueRequestDetail.ToLocationErpCode; + detail.RequestLocationArea = SparePartIssueRequestDetail.ToLocationArea; + detail.RequestWarehouseCode = SparePartIssueRequestDetail.ToWarehouseCode; + detail.RequestLocationGroup = SparePartIssueRequestDetail.ToLocationGroup; + detail.RequestLocationCode = SparePartIssueRequestDetail.ToLocationCode; detail.RecommendFromPackingCode = balance.PackingCode; detail.RecommendFromContainerCode = balance.ContainerCode; @@ -263,11 +273,11 @@ public class SparePartIssueRequestEventHandler detail.RecommendFromLocationGroup = balance.LocationGroup; detail.RecommendFromWarehouseCode = balance.WarehouseCode; - detail.RecommendToLocationCode = sparePartIssueRequestDetail.ToLocationCode; - detail.RecommendToLocationErpCode = sparePartIssueRequestDetail.ToLocationErpCode; - detail.RecommendToLocationArea = sparePartIssueRequestDetail.ToLocationArea; - detail.RecommendToWarehouseCode = sparePartIssueRequestDetail.ToWarehouseCode; - detail.RecommendToLocationGroup = sparePartIssueRequestDetail.ToLocationGroup; + detail.RecommendToLocationCode = SparePartIssueRequestDetail.ToLocationCode; + detail.RecommendToLocationErpCode = SparePartIssueRequestDetail.ToLocationErpCode; + detail.RecommendToLocationArea = SparePartIssueRequestDetail.ToLocationArea; + detail.RecommendToWarehouseCode = SparePartIssueRequestDetail.ToWarehouseCode; + detail.RecommendToLocationGroup = SparePartIssueRequestDetail.ToLocationGroup; detail.TransferLibFromPackingCode = balance.PackingCode; detail.TransferLibFromContainerCode = balance.ContainerCode; @@ -298,11 +308,11 @@ public class SparePartIssueRequestEventHandler detail.TransferLibFromLocationGroup = balance.LocationGroup; detail.TransferLibFromWarehouseCode = balance.WarehouseCode; - detail.TransferLibToLocationCode = sparePartIssueRequestDetail.ToLocationCode; - detail.TransferLibToLocationErpCode = sparePartIssueRequestDetail.ToLocationErpCode; - detail.TransferLibToLocationArea = sparePartIssueRequestDetail.ToLocationArea; - detail.TransferLibToWarehouseCode = sparePartIssueRequestDetail.ToWarehouseCode; - detail.TransferLibToLocationGroup = sparePartIssueRequestDetail.ToLocationGroup; + detail.TransferLibToLocationCode = SparePartIssueRequestDetail.ToLocationCode; + detail.TransferLibToLocationErpCode = SparePartIssueRequestDetail.ToLocationErpCode; + detail.TransferLibToLocationArea = SparePartIssueRequestDetail.ToLocationArea; + detail.TransferLibToWarehouseCode = SparePartIssueRequestDetail.ToWarehouseCode; + detail.TransferLibToLocationGroup = SparePartIssueRequestDetail.ToLocationGroup; await Task.CompletedTask.ConfigureAwait(false); return detail; @@ -315,28 +325,28 @@ public class SparePartIssueRequestEventHandler /// /// 创建注塑任务 按箱叫料-按箱 /// - /// - /// + /// + /// /// /// /// /// private async Task> CreateSparePartIssueJobWithBoxQtyTypeAsync ( - SparePartIssueRequest sparePartIssueRequest, - List sparePartIssueRequestDetailList, + SparePartIssueRequest SparePartIssueRequest, + List SparePartIssueRequestDetailList, List recommendbalanceDtos, List useBalanceList) { var inputJobs = new List(); - var jobs = await _sparePartIssueJobAppService.GetByRequestNumberAsync(sparePartIssueRequest.Number) + var jobs = await _SparePartIssueJobAppService.GetByRequestNumberAsync(SparePartIssueRequest.Number) .ConfigureAwait(false); - foreach (var detail in sparePartIssueRequestDetailList) + foreach (var detail in SparePartIssueRequestDetailList) { //当前物品的集合 - var inputDetails = sparePartIssueRequestDetailList; + var inputDetails = SparePartIssueRequestDetailList; //获取请求下 这个物品和这个库位一个需要多少箱 var sumBoxQty = inputDetails.Sum(p => p.BoxQty - jobs.Count); //获取生产线 @@ -354,7 +364,8 @@ public class SparePartIssueRequestEventHandler //可用库存 var usableList = recommendbalanceDtos; - usableList = usableList.Where(p => !useBalanceList.Select(p => p.PackingCode).Contains(p.PackingCode)) + usableList = usableList.Where(p => + !useBalanceList.Select(balanceDto => balanceDto.PackingCode).Contains(p.PackingCode)) .ToList(); if (usableList.Any()) { @@ -366,12 +377,12 @@ public class SparePartIssueRequestEventHandler useBalanceList.Add(firstUsable); usableList.Remove(firstUsable); - var sparePartIssueJobEditInput = - await BuildSparePartIssueJobCreateInputWithBoxQtyTypeAsync(sparePartIssueRequest, + var SparePartIssueJobEditInput = + await BuildSparePartIssueJobCreateInputWithBoxQtyTypeAsync(SparePartIssueRequest, detail, firstUsable) .ConfigureAwait(false); - inputJobs.Add(sparePartIssueJobEditInput); + inputJobs.Add(SparePartIssueJobEditInput); } else { @@ -387,24 +398,24 @@ public class SparePartIssueRequestEventHandler /// /// 构造注塑任务-按箱 /// - /// - /// + /// + /// /// /// private async Task BuildSparePartIssueJobCreateInputWithBoxQtyTypeAsync( - SparePartIssueRequest sparePartIssueRequest, - SparePartIssueRequestDetail sparePartIssueRequestDetail, BalanceDTO balanceDtos) + SparePartIssueRequest SparePartIssueRequest, + SparePartIssueRequestDetail SparePartIssueRequestDetail, BalanceDTO balanceDtos) { - var job = ObjectMapper.Map(sparePartIssueRequest); + var job = ObjectMapper.Map(SparePartIssueRequest); job.JobType = EnumJobType.IssueJob; job.JobStatus = EnumJobStatus.Open; - job.WorkGroupCode = sparePartIssueRequestDetail.ToLocationGroup; - job.WarehouseCode = sparePartIssueRequestDetail.ToWarehouseCode; - job.Worker = sparePartIssueRequest.Worker; - job.SparePartRequestNumber = sparePartIssueRequest.Number; + job.WorkGroupCode = SparePartIssueRequestDetail.ToLocationGroup; + job.WarehouseCode = SparePartIssueRequestDetail.ToWarehouseCode; + job.Worker = SparePartIssueRequest.Worker; + job.SparePartRequestNumber = SparePartIssueRequest.Number; job.EnumIssueSendType = EnumIssueSendType.BoxQtyType; - job.Details.Add(await BuildSparePartIssueJobDetailWithBoxQtyTypeAsync(sparePartIssueRequestDetail, balanceDtos) + job.Details.Add(await BuildSparePartIssueJobDetailWithBoxQtyTypeAsync(SparePartIssueRequestDetail, balanceDtos) .ConfigureAwait(false)); await Task.CompletedTask.ConfigureAwait(false); @@ -415,28 +426,28 @@ public class SparePartIssueRequestEventHandler /// /// 构造注塑任务明细-按箱 /// - /// + /// /// /// private async Task BuildSparePartIssueJobDetailWithBoxQtyTypeAsync( - SparePartIssueRequestDetail sparePartIssueRequestDetail, BalanceDTO balance) + SparePartIssueRequestDetail SparePartIssueRequestDetail, BalanceDTO balance) { var detail = new SparePartIssueJobDetailInput(); - detail.RequestLocationCode = sparePartIssueRequestDetail.ToLocationCode; - detail.RequestLocationGroup = sparePartIssueRequestDetail.ToLocationGroup; - detail.RequestLocationArea = sparePartIssueRequestDetail.ToLocationArea; - detail.RequestLocationErpCode = sparePartIssueRequestDetail.ToLocationErpCode; - detail.RequestWarehouseCode = sparePartIssueRequestDetail.ToWarehouseCode; + detail.RequestLocationCode = SparePartIssueRequestDetail.ToLocationCode; + detail.RequestLocationGroup = SparePartIssueRequestDetail.ToLocationGroup; + detail.RequestLocationArea = SparePartIssueRequestDetail.ToLocationArea; + detail.RequestLocationErpCode = SparePartIssueRequestDetail.ToLocationErpCode; + detail.RequestWarehouseCode = SparePartIssueRequestDetail.ToWarehouseCode; detail.RequestQty = 1; - detail.PositionCode = sparePartIssueRequestDetail.PositionCode; - detail.RecommendType = sparePartIssueRequestDetail.RecommendType; - detail.ProdLine = sparePartIssueRequestDetail.ProdLine; + detail.PositionCode = SparePartIssueRequestDetail.PositionCode; + detail.RecommendType = SparePartIssueRequestDetail.RecommendType; + detail.ProdLine = SparePartIssueRequestDetail.ProdLine; - detail.ItemCode = sparePartIssueRequestDetail.ItemCode; - detail.ItemName = sparePartIssueRequestDetail.ItemName; - detail.ItemDesc1 = sparePartIssueRequestDetail.ItemDesc1; - detail.ItemDesc2 = sparePartIssueRequestDetail.ItemDesc2; + detail.ItemCode = SparePartIssueRequestDetail.ItemCode; + detail.ItemName = SparePartIssueRequestDetail.ItemName; + detail.ItemDesc1 = SparePartIssueRequestDetail.ItemDesc1; + detail.ItemDesc2 = SparePartIssueRequestDetail.ItemDesc2; detail.Status = EnumInventoryStatus.OK; detail.Uom = balance.Uom; @@ -471,11 +482,11 @@ public class SparePartIssueRequestEventHandler detail.RecommendToProduceDate = balance.ProduceDate; detail.RecommendToArriveDate = balance.ArriveDate; - detail.RecommendToLocationCode = sparePartIssueRequestDetail.ToLocationCode; - detail.RecommendToLocationErpCode = sparePartIssueRequestDetail.ToLocationErpCode; - detail.RecommendToLocationArea = sparePartIssueRequestDetail.ToLocationArea; - detail.RecommendToWarehouseCode = sparePartIssueRequestDetail.ToWarehouseCode; - detail.RecommendToLocationGroup = sparePartIssueRequestDetail.ToLocationGroup; + detail.RecommendToLocationCode = SparePartIssueRequestDetail.ToLocationCode; + detail.RecommendToLocationErpCode = SparePartIssueRequestDetail.ToLocationErpCode; + detail.RecommendToLocationArea = SparePartIssueRequestDetail.ToLocationArea; + detail.RecommendToWarehouseCode = SparePartIssueRequestDetail.ToWarehouseCode; + detail.RecommendToLocationGroup = SparePartIssueRequestDetail.ToLocationGroup; await Task.CompletedTask.ConfigureAwait(false); return detail; @@ -487,26 +498,26 @@ public class SparePartIssueRequestEventHandler //创建任务 private async Task> CreateAllSparePartIssueJobAsync( - SparePartIssueRequest sparePartIssueRequest) + SparePartIssueRequest SparePartIssueRequest) { - var sparePartIssueJobEditInputs = new List(); + var SparePartIssueJobEditInputs = new List(); //已用的库存的集合 var useBalanceList = new List(); - foreach (var groupbyItemCodeAndProdLine in sparePartIssueRequest.Details.GroupBy(p => + foreach (var groupbyItemCodeAndProdLine in SparePartIssueRequest.Details.GroupBy(p => new { p.ItemCode })) { - foreach (var sparePartIssueRequestDetail in groupbyItemCodeAndProdLine) + foreach (var SparePartIssueRequestDetail in groupbyItemCodeAndProdLine) { var productionLineItemDto = await _productionLineItemAppService.GetByProductLineCodeAndItemCodeAsync( - sparePartIssueRequestDetail.ProdLine, + SparePartIssueRequestDetail.ProdLine, groupbyItemCodeAndProdLine.Key.ItemCode).ConfigureAwait(false); if (productionLineItemDto == null) { throw new UserFriendlyException( - $"未在生产线物品关系表中维护【{sparePartIssueRequestDetail.ProdLine}】物品【{groupbyItemCodeAndProdLine.Key.ItemCode}】的关系,请配置【生产线物品关系】"); + $"未在生产线物品关系表中维护【{SparePartIssueRequestDetail.ProdLine}】物品【{groupbyItemCodeAndProdLine.Key.ItemCode}】的关系,请配置【生产线物品关系】"); } //原料 @@ -519,7 +530,7 @@ public class SparePartIssueRequestEventHandler //获取可用库存 var input = new RecommendBalanceRequestInput { - ItemCode = sparePartIssueRequestDetail.ItemCode, + ItemCode = SparePartIssueRequestDetail.ItemCode, Qty = decimal.MaxValue, Statuses = new EditableList { EnumInventoryStatus.OK }, Locations = @@ -530,14 +541,14 @@ public class SparePartIssueRequestEventHandler var sortByFifoAsync = await SortByFifoAsync(usableList).ConfigureAwait(false); //因为是按箱叫料 先把值赋值给箱数量上 - sparePartIssueRequestDetail.BoxQty = sparePartIssueRequestDetail.Qty; + SparePartIssueRequestDetail.BoxQty = SparePartIssueRequestDetail.Qty; if (usableList.Any()) { //因为是原料所以按箱叫料 - sparePartIssueJobEditInputs.AddRange( - await CreateSparePartIssueJobWithBoxQtyTypeAsync(sparePartIssueRequest, - new EditableList { sparePartIssueRequestDetail }, + SparePartIssueJobEditInputs.AddRange( + await CreateSparePartIssueJobWithBoxQtyTypeAsync(SparePartIssueRequest, + new EditableList { SparePartIssueRequestDetail }, sortByFifoAsync, useBalanceList).ConfigureAwait(false)); } @@ -555,7 +566,7 @@ public class SparePartIssueRequestEventHandler var input = new RecommendBalanceRequestInput { ItemCode = groupbyItemCodeAndProdLine.Key.ItemCode, - Qty = sparePartIssueRequestDetail.Qty, + Qty = SparePartIssueRequestDetail.Qty, Statuses = new EditableList { EnumInventoryStatus.OK }, Locations = JsonSerializer.Deserialize>(productionLineItemDto @@ -581,22 +592,23 @@ public class SparePartIssueRequestEventHandler } } - sparePartIssueJobEditInputs.AddRange( - await CreateSparePartIssueJobWithQtyTypeAsync(sparePartIssueRequest, - new List { sparePartIssueRequestDetail }, temp, + SparePartIssueJobEditInputs.AddRange( + await CreateSparePartIssueJobWithQtyTypeAsync(SparePartIssueRequest, + new List { SparePartIssueRequestDetail }, temp, useBalanceList).ConfigureAwait(false)); } } } } - if (sparePartIssueJobEditInputs.Count > 0) //有库存 可以创建任务 + if (SparePartIssueJobEditInputs.Count > 0) //有库存 可以创建任务 { //新增任务 - var addSparePartIssueJobDtos = await _sparePartIssueJobAppService.CreateManyAsync(sparePartIssueJobEditInputs) + var addSparePartIssueJobDtos = await _SparePartIssueJobAppService + .CreateManyAsync(SparePartIssueJobEditInputs) .ConfigureAwait(false); - await UpdateSparePartIssueRequestDetailQtyAsync(sparePartIssueRequest, addSparePartIssueJobDtos) + await UpdateSparePartIssueRequestDetailQtyAsync(SparePartIssueRequest, addSparePartIssueJobDtos) .ConfigureAwait(false); return addSparePartIssueJobDtos; @@ -608,15 +620,15 @@ public class SparePartIssueRequestEventHandler /// /// 修改请求的 已发 已收数量 /// - /// + /// /// /// - private async Task UpdateSparePartIssueRequestDetailQtyAsync(SparePartIssueRequest sparePartIssueRequest, + private async Task UpdateSparePartIssueRequestDetailQtyAsync(SparePartIssueRequest SparePartIssueRequest, List addSparePartIssueJobDtos) { //原有任务 - var existSparePartIssueJobDtos = await _sparePartIssueJobAppService - .GetByRequestNumberAsync(sparePartIssueRequest.Number) + var existSparePartIssueJobDtos = await _SparePartIssueJobAppService + .GetByRequestNumberAsync(SparePartIssueRequest.Number) .ConfigureAwait(false); //新增的任务和已有的任务总和 @@ -624,7 +636,7 @@ public class SparePartIssueRequestEventHandler allSparePartIssueJobDtos.AddRange(addSparePartIssueJobDtos); allSparePartIssueJobDtos.AddRange(existSparePartIssueJobDtos); - var groupByItemCodeLocationCode = sparePartIssueRequest.Details.GroupBy(p => + var groupByItemCodeLocationCode = SparePartIssueRequest.Details.GroupBy(p => new { p.ItemCode, p.ToLocationCode }); foreach (var group in groupByItemCodeLocationCode) { @@ -650,6 +662,8 @@ public class SparePartIssueRequestEventHandler requestDetail.ReceivedQty = allReceivedQty; } } + + await SparePartIssueRequestManager.UpdateByEntityAsync(SparePartIssueRequest).ConfigureAwait(false); } /// diff --git a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Event/Requests/ProductReceiptRequestEventHandler.cs b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Event/Requests/ProductReceiptRequestEventHandler.cs index cbbbeeabe..f6f61f6cb 100644 --- a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Event/Requests/ProductReceiptRequestEventHandler.cs +++ b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Event/Requests/ProductReceiptRequestEventHandler.cs @@ -181,6 +181,8 @@ public class ProductReceiptRequestEventHandler { var note = ObjectMapper.Map(request); + note.ReceiptType = EnumReceiptType.ProductReceiptRequest; + if (!Enum.TryParse(note.Type, true, out EnumTransSubType transSubType)) { throw new UserFriendlyException($"{note.Type} 不是有效的子事务类型"); diff --git a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Event/StoreEventAutoMapperProfile.cs b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Event/StoreEventAutoMapperProfile.cs index 7c38d07dd..74c004982 100644 --- a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Event/StoreEventAutoMapperProfile.cs +++ b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Event/StoreEventAutoMapperProfile.cs @@ -119,6 +119,7 @@ public partial class StoreEventAutoMapperProfile : Profile CoatingIssueJobAutoMapperProfile(); CoatingIssueNoteAutoMapperProfile(); CoatingIssueRequestAutoMapperProfile(); + SparePartIssueNoteAutoMapperProfile(); MesNoteAutoMapperProfile(); } From 6f05b2aa4dcba4280871de744eaec227bce19810 Mon Sep 17 00:00:00 2001 From: zhaoxinyu <89237069@qq.com> Date: Wed, 5 Jun 2024 15:40:15 +0800 Subject: [PATCH 3/4] =?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 --- .vs/WZC2/v17/.wsuo | Bin 121856 -> 235008 bytes .../Incoming/InjectionMoldingRequestReader.cs | 12 +---- .../AssembleIssueJobAppService.cs | 2 +- .../CoatingIssueJobAppService.cs | 41 +++++++++++++++--- .../InjectionIssueJobAppService.cs | 4 +- .../KittingIssueJobAppService.cs | 2 +- .../SparePartIssueJobAppService.cs | 2 +- .../IssueJobs/proxy/IssueJobToRestoClient.cs | 20 ++++++++- .../Options/RestoOptions.cs | 2 + 9 files changed, 61 insertions(+), 24 deletions(-) diff --git a/.vs/WZC2/v17/.wsuo b/.vs/WZC2/v17/.wsuo index 1bda40505b03ae7f4b445bcd6346223f56b548c9..530a087c521a952df09c4c49fc0b10526b3dc4b2 100644 GIT binary patch delta 7945 zcmeI0eOT0Gy2t0nLC0~JMnohc9g$^;PytDi$Ou`YQE?z5bIk_CBqT!}-wVk|&0Irn z^Ikn=u9=d#hK@PLVGUn0Q}g&jrqq(M=DMvJ8k(lzexKjWAf2n->+0zg}j0;laOM*w#R1+}1_%Y`@tgeAzEEK-Uo$)XNy>CNI4$f}I`grf6K~*6w1! zES$Wk#>X#^N#AX0iJ`NaTm72Vg}ZLUt;^s?TnWP8Z-IKEJN^cP9zc!Rx;gLfR5fGnqNKBex2%`TBrJ})@kw{Z??mDfyta~ zv{EZf`7UiPDW|Sq;dX%c5%r3GY1SRod1+RU=qtGTJ-7<4fgiwia0C1ZT7mKt5w`~H z?(lRCb>r+`4`7@)ML{@Xe|GBhC{vl82f{ zh~*@?0?3F_?^L7Xr|x$y!il=5+nmLoC5L!#t4BIv$^M;jq3hDDZogpJ()uZ-b6QZW zIFDm~EL>WSQ;tD-);F~{KO?)TE3Vwt?rN6-IN7BvtJCqtkv$~1p5hHY&v-tm9`C8h zRX%7Nt)-qu29OH!+uL2{lnA}d{FH{9evPX=+uiY3(dFm9_7N?h%H$L&`hU zkOLk8x!_SS3OoizgWrNN;Bhb(JOLbY@lPJe2jf5i7!RHV6F?z&3KW5fpcp(2CV^)_ z378C~fT_R`Y9MY28X2Gs zt#Z*fJUhGFO%b>d+U}xBop{nmr>h*2X8M))=B>Aec$B1Nh~1K(8)?6;{2TKN=5uDaMkdWTutGl2{A9k zB)DS|sD8!foC=S4>ES$;r%I+FUfpcXI8ZwN4gM;fy98RmMQ{Q95-IM!|7X0PsTomK zO5d{oc{sQ(-|;2sr{h^Zac2}?8X4?{ynWs2U(5CYO+TF{mA?IV{r1=No3Hg4raAhj zkra~iFJjL$)DuyvAhxZ122V3(^3d-0RR#=Iv-(fQ-Bg|xFwE2&N0IHG<(7aju^gua zlhu3GH_9*8d{aBkS23$x&d##uwumDnvZC?&dS~gP+$pQgsY zmze%qVz!HYRgkA{5=B)jUO!(uYK94!(ffqnIcoED83&29~5?BOY z28+S(z!LBZr~perC19`&yb6{B0lx<;z)J8R;5G0%SOwkyt5qBI2OO*cZ-TYpEwB!( z2UXy0umQXSHiAEbP2gQn4K{-;oTz)}?u$`>W4RaUFTB6S4EbArva7Gw3289&O>w^q%C9oy+JM&P}`G zs!YuxcYY@6iD##Vxb!Jgh;q4W-gjL0W-vc#3*{Y)!nklm7)8s)_vo*DYFLIiCs7qw zPqT5wnm}&EGx=i+x#9~GFMKFlg4R-WNXm!|yzDU>C3`;m?5HHs7hoxBuGldd-T~}faPlBq|0{}9 z(#?EobhyisS4y0={vbOZjpas1Jhv3$W1h&yNA1NoIN3TjmHNRX2jqgA5_sn030zrz zkYgJXxwhIYjvf?D+c?WPgAYHMBK0dMN~)dI!mX1++4AIYSHVdbx2C{K;T{W4AD1Fq z^02bz20fR#3|w89=FU$f1M!}T@sgbm<+Ip5nS^3SCW4 zJ4xU*tm2fJS3jLf`z7x|n#x7RV>qJh1`nAPO@VUpdHR+^XGU>$W0ln1N2#oz5lJRb zFgOmI*)TnjbDUdU;Zx&D!qce46*dK3=&6!}l4GVqIkkXH+&DK~u)Kq8&or}fuERHg zrPRu)Gp};RhGvP=N!5u_N`=; zo;4K6%~uTc4nMzmqEvT))8k*jRu8@|nP>O-&wAC&bqSU3@}U}XEN8J^YPL{_~=9eL%lH1P|hAGqPH zk=Gp^$d0)k>4Nl*rx{#UIo9{xCf>EwCR^+j#g42DnG{XG=lY7-96nXqGm@<ek1rgP34=}6d1-1Njjwp8W2%9kKIi%(lQV!d+u4NXd{3oUAOr01JQXYk^+wsvV` ztaKxC-U+*vgXJ4Clr|JetOc2R{Ou%oMcKg0m$r_rt{?NiC zEq@OMB9R-;nkxU8q)p^_G+BxU!}$H)4^c5txjj_$dPMr+Z5dkX?|LtlV!7*t%bc_$ z#bfgewYe0{wEug~tW9+J)#Q-p6U)|`xaR!~4ssQ7-AE%l>dtZX`$k^#fsHnK{Zp=T z)9cyYu>XN#HtfoToE5R7*vQ#CZB(P>xDvWU9}U;+8GCvN5Bw-XWz~eg@DCrxLztYr zXHPaV;&e$IZ`!>^C99LSA4qpMZKP1*&;!vF!EvRZ@urWnJw&@ z9LazYF0tcqk}Ky>C{Y7v?U~BwJ}Fj85XJW42gO=O!EE@XSQGDgpO(7nj%5N=qVabbg1`FT3`J2{XBdc?T=M1q#J>bv4Uv*Fmu&f_*;aF{vc zFX>*7gh;DB*(_Dtd#5On%9ST%b7&l z&%Ga;$~EW5P)AKDJ^mVa-a?6ROp+ zfmhC7P4@({^=hs<*dcrFp!2VOP0_v@vgYO(4qsNN55ZC5+2{Z zF~RCot(KT_;!c>ZA&eH0rA?irE)3O1D~@PT z#L*j{k>hmAMk}SX8|iE>%Eoso{XR54N|Jg}5;tAGB**VUh9a_+&dZu8N~K)wBV|)0 zombt;gzL+@lR?ap(67{)2cK6I}--JzZXeB&tl2IySDMK9nsZJ8IH7{CGRIEmy`lgb^-a{=CUPn{p zd;)yaCUMd)frfk2MhXYOW)bmpl;*1h6iX6?sIDkUg{Vp_u_VG49>+@9WLhrKgP?k7 zE2TDtN>Pcu866|d_tPkEzq+9S=AsCfAh3Q^IFwEEmAhm+xHukK1)C?V^WttWHODa+(WD&-@&oU-WwjHni~aTpepsKi}lP5z)lNG9OCN*@5a!?_g8_@$jN)E_)A=e!-%b8rt zK;OOd*zKegHi8y#*Hr_gc@_LKe{#6rWa5&l>5`B~rJjtK?LZtv`)m{?O;1pS&p9Tk z7>m1}hE{ewPFl0$l;-hB5%tN)6}=>mhpXVuT3QC_zMEwEIGTj2P$Xgbl!)Ec-Y!gK@!Dy)uflb` z#5!q|HKTA?~u!*dvPv_~n{&7o$RryaX{&PJeUqKb|`hxQ^$r;2p} zjnXw1A`Ne8-MMlkh~Eq3)Jl^SFqLX)Fr|_%N!e1IWj7uabY2EI zT!A1_yCM1F6^MSg8*-squ&O1nM?bB&it~3ABU@jl?dV}q%_a3^n&L`ZZzeu`9aZy) zK{7``iiq>x)*3)5cnM_%d9=eP^XryF<~^zv`zjulCZ%n?DbKF* z1W_TQdy~4?;dX?S+OC*Hug(wz2en5S}j&{SEy231wR?UHJV zC3Fq8UD>N?FYQtdlC-`-IUKYqR^`G?MqZbM7~QwY9Xj?s+&}CA0itz zA`Zf*YFkt}u?8G%83p-2O?K^OQSVWBHXTxi7ZU1*~5QCn#XDp-Y>7+tu4 z`E;)D2P#(U14RYjSg55fr8v?SUmdVdmAD#QnCSRF;OHzhHgV&Z{3hpn-0#jk-?_K) zsJF5)zG`BY<#0Gue@k>YJOtW*7Kuc3Y!DL6KF^r?V%KKzTeHMvGOToO@xR-%gJrkG ztBbNsxm7O4^jWh#632kMx}OE?LWF$H#8P}&wR zB3g_kSc*@u44>jNEJrau#~1h#B`C!Tti&qlqm^SdzQP);MFlGHDv4EjJ6`Ah@Q39hCaB~pRBM;yJfbgzZjw!(Fr@;Ekz#Dy3*Q-t{<%Dn`D>u$jtt-&5oI~ z!#$E_61}J0`uIa*W=z=2UI~mu4`877hjrQWg5u==)rsFVt)hw*)$qe$GqxZA8(Xmr z+pz;Xu?xGg2Yay(HQ0{>IEY#t!q+&ABlreKaSX?CLTj*&;3Q6=9;a~zXVHL0oWprs zz(ribWn4iMuHsuXqXpmL8ooy>e!!3T32pcp?f6CCfewP}2;v4h@hg7A@94r!+`?_# z!Cm};5W3NWd(gsGe-r-+J;P}0r5}d}h@Mo$9QOFCi>LZ?3QghgTvL)W@M+3?ac%#Z zg>#DR=1!SzDkl`WM=>)xW;RYcZiji2)t;cQlip3QveF&qarRnSWlBG!)-0xcG1G4S zIB0cfJC$4@rrDZgN_?CA*)8rI#@=8rS=rEcT|(m2C%3z9$VWBfoVC4@x-P#qUjlw_ z%j;KX>-&QI-wRSpLJRT{^kWeHI%`4x11-q^pzEGh&!16~EcV8bOf$JwLZDsTro)$O ZSA}FM1Bp6dcZ6iJ2^Xa_q;|@K_~*`I{x$#r diff --git a/be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.Fawtyg.InjectionMoldingTaskAgent/Incoming/InjectionMoldingRequestReader.cs b/be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.Fawtyg.InjectionMoldingTaskAgent/Incoming/InjectionMoldingRequestReader.cs index 47335b81c..1fd2e4623 100644 --- a/be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.Fawtyg.InjectionMoldingTaskAgent/Incoming/InjectionMoldingRequestReader.cs +++ b/be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.Fawtyg.InjectionMoldingTaskAgent/Incoming/InjectionMoldingRequestReader.cs @@ -122,17 +122,6 @@ public class InjectionMoldingRequestReader : IReader _logger.LogInformation(MakeGrid($"标识{guid}读取{invterval}次接口表",camralist1)); - - - - - - - - - - - sw.Stop(); //按区域、货位号、零件、标志 @@ -454,6 +443,7 @@ public class InjectionMoldingRequestReader : IReader sb.Append("|"); sb.AppendLine(); } + return sb.ToString(); } diff --git a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Jobs/IssueJobs/AssembleIssueJobs/AssembleIssueJobAppService.cs b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Jobs/IssueJobs/AssembleIssueJobs/AssembleIssueJobAppService.cs index 71385a607..cec048b51 100644 --- a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Jobs/IssueJobs/AssembleIssueJobs/AssembleIssueJobAppService.cs +++ b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Jobs/IssueJobs/AssembleIssueJobs/AssembleIssueJobAppService.cs @@ -347,7 +347,7 @@ public class AssembleIssueJobAppService Convert.ToBase64String(Encoding.ASCII.GetBytes($"{username}:{password}"))); } - var client = new IssueJobToRestoClient(_options.Value.Address, httpclient); + var client = new IssueJobToRestoClient(_options.Value.Address, httpclient, _options.Value.Path); ret = await client.SyncIssueJobStereoAsync(main).ConfigureAwait(false); } catch (Exception ex) diff --git a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Jobs/IssueJobs/CoatingIssueJobs/CoatingIssueJobAppService.cs b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Jobs/IssueJobs/CoatingIssueJobs/CoatingIssueJobAppService.cs index af401bc86..78050398d 100644 --- a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Jobs/IssueJobs/CoatingIssueJobs/CoatingIssueJobAppService.cs +++ b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Jobs/IssueJobs/CoatingIssueJobs/CoatingIssueJobAppService.cs @@ -9,6 +9,7 @@ using System.Threading.Tasks; using Castle.Components.DictionaryAdapter; using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Mvc; +using Microsoft.Extensions.Logging; using Microsoft.Extensions.Options; using MyNamespace; using Volo.Abp; @@ -40,11 +41,14 @@ public class CoatingIssueJobAppService private readonly IHttpClientFactory _httpClientFactory; private readonly ITransferLibRequestAppService _transferLibRequestAppService; private readonly IOptions _options; + private readonly ILogger _logger; protected ICoatingIssueRequestAppService CoatingIssueRequestAppService => LazyServiceProvider.LazyGetRequiredService(); public CoatingIssueJobAppService( + + ILogger logger, ICoatingIssueJobRepository repository, ICoatingIssueJobManager coatingIssueJobManager, ILocationAppService locationAppService, ICoatingIssueNoteAppService coatingIssueNoteAppService, IExpectOutAppService expectOutAppService @@ -59,6 +63,7 @@ public class CoatingIssueJobAppService _httpClientFactory = httpClientFactory; _options = options; _transferLibRequestAppService = transferLibRequestAppService; + _logger = logger; } [HttpPost("get-by-number-2")] @@ -315,7 +320,7 @@ public class CoatingIssueJobAppService var ret = new ReusltObject(); ret.Code = "1"; ret.Message = "操作成功"; - ret.OperateTime = DateTime.Now.ToString("yyyy-MM-dd"); + ret.OperateTime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"); try { var IssueJobToRestoDetailDTOs = new List(); @@ -341,12 +346,24 @@ public class CoatingIssueJobAppService #if DEBUG var json = JsonSerializer.Serialize(main); - _options.Value.Address = "http://localhost:59094/"; //测试地址 + _options.Value.Address = "http://7e42682n64.goho.co:21171/"; //测试地址 _options.Value.Token = ""; //测试token _options.Value.UserName = ""; //测试用户名 _options.Value.Password = ""; //测试密码 + _options.Value.Path = "zozocnApi/custom/receiveProductionPlan"; //测试密码 #endif + + //var json = JsonSerializer.Serialize(main); + _options.Value.Address = "http://7e42682n64.goho.co:21171/"; //测试地址 + _options.Value.Token = ""; //测试token + _options.Value.UserName = ""; //测试用户名 + _options.Value.Password = ""; //测试密码 + _options.Value.Path = "zozocnApi/custom/receiveProductionPlan"; //测试密码 + + _logger.LogInformation(System.Text.Json.JsonSerializer.Serialize(_options)); + + if (!string.IsNullOrEmpty(_options.Value.Token)) { var token = _options.Value.Token; @@ -361,15 +378,22 @@ public class CoatingIssueJobAppService Convert.ToBase64String(Encoding.ASCII.GetBytes($"{username}:{password}"))); } - var client = new IssueJobToRestoClient(_options.Value.Address, httpclient); + var client = new IssueJobToRestoClient(_options.Value.Address, httpclient,_options.Value.Path); + + var flag=DateTime.Now.ToString("yyyyMMddHHmmss"); + _logger.LogInformation($"标志{flag}开始调用高通WMS:传递值{System.Text.Json.JsonSerializer.Serialize(main)}"); + ret = await client.SyncIssueJobStereoAsync(main).ConfigureAwait(false); + + _logger.LogInformation($"标志{flag}调用高通WMS:返回值{ret}"); + } catch (Exception ex) { ret = new ReusltObject(); ret.Code = "2"; ret.Message = ex.Message; - ret.OperateTime = DateTime.Now.ToString("yyyy-MM-dd"); + ret.OperateTime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"); } return ret; @@ -382,7 +406,7 @@ public class CoatingIssueJobAppService var json = JsonSerializer.Serialize(input); #endif var errors = new List(); - var ret = new ReusltObject { Code = "1", OperateTime = DateTime.Now.ToString("yyyy-MM-dd"), Message = "操作成功" }; + var ret = new ReusltObject { Code = "1", OperateTime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"), Message = "操作成功" }; try { if (input.Jobs.Count > 0) @@ -546,12 +570,17 @@ public class CoatingIssueJobAppService var loctionDto = await _locationAppService.GetByCodeAsync(jobDetailInputdetail.RecommendFromLocationCode) .ConfigureAwait(false); - + var flag = DateTime.Now.ToString("yyyyMMddHHmmss"); + _logger.LogInformation($"立体库任务检查开始{flag}"); if (loctionDto.Type == EnumLocationType.DimensionalStorehouse) { + + _logger.LogInformation($"立体库任务开始标记{flag}"); //TODO 立体库 var ret = await SyncIssueJobStereoAsync(new List { coatingIssueJobDto }, loctionDto.Code).ConfigureAwait(false); + + _logger.LogInformation($"立体库任务结束标记{flag},返回值{ret}"); if (ret.Code != "1") { throw new UserFriendlyException($"调用立体库不成功!原因:{ret.Message}"); diff --git a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Jobs/IssueJobs/InjectionIssueJobs/InjectionIssueJobAppService.cs b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Jobs/IssueJobs/InjectionIssueJobs/InjectionIssueJobAppService.cs index e79ba5940..59ed245e5 100644 --- a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Jobs/IssueJobs/InjectionIssueJobs/InjectionIssueJobAppService.cs +++ b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Jobs/IssueJobs/InjectionIssueJobs/InjectionIssueJobAppService.cs @@ -325,7 +325,7 @@ public class InjectionIssueJobAppService #if DEBUG var json = JsonSerializer.Serialize(main); - _options.Value.Address = "http://localhost:59094/"; //测试地址 + _options.Value.Address = "http://7e42682n64.goho.co:21171/"; //测试地址 _options.Value.Token = ""; //测试token _options.Value.UserName = ""; //测试用户名 _options.Value.Password = ""; //测试密码 @@ -345,7 +345,7 @@ public class InjectionIssueJobAppService Convert.ToBase64String(Encoding.ASCII.GetBytes($"{username}:{password}"))); } - var client = new IssueJobToRestoClient(_options.Value.Address, httpclient); + var client = new IssueJobToRestoClient(_options.Value.Address, httpclient, _options.Value.Path); ret = await client.SyncIssueJobStereoAsync(main).ConfigureAwait(false); } catch (Exception ex) diff --git a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Jobs/IssueJobs/KittingIssueJobs/KittingIssueJobAppService.cs b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Jobs/IssueJobs/KittingIssueJobs/KittingIssueJobAppService.cs index a5afe53d0..050692f56 100644 --- a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Jobs/IssueJobs/KittingIssueJobs/KittingIssueJobAppService.cs +++ b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Jobs/IssueJobs/KittingIssueJobs/KittingIssueJobAppService.cs @@ -345,7 +345,7 @@ public class KittingIssueJobAppService Convert.ToBase64String(Encoding.ASCII.GetBytes($"{username}:{password}"))); } - var client = new IssueJobToRestoClient(_options.Value.Address, httpclient); + var client = new IssueJobToRestoClient(_options.Value.Address, httpclient, _options.Value.Path); ret = await client.SyncIssueJobStereoAsync(main).ConfigureAwait(false); } catch (Exception ex) diff --git a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Jobs/IssueJobs/SparePartIssueJobs/SparePartIssueJobAppService.cs b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Jobs/IssueJobs/SparePartIssueJobs/SparePartIssueJobAppService.cs index 72645dc9c..1a8aafca9 100644 --- a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Jobs/IssueJobs/SparePartIssueJobs/SparePartIssueJobAppService.cs +++ b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Jobs/IssueJobs/SparePartIssueJobs/SparePartIssueJobAppService.cs @@ -337,7 +337,7 @@ public class SparePartIssueJobAppService Convert.ToBase64String(Encoding.ASCII.GetBytes($"{username}:{password}"))); } - var client = new IssueJobToRestoClient(_options.Value.Address, httpclient); + var client = new IssueJobToRestoClient(_options.Value.Address, httpclient, _options.Value.Path); ret = await client.SyncIssueJobStereoAsync(main).ConfigureAwait(false); } catch (Exception ex) diff --git a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Jobs/IssueJobs/proxy/IssueJobToRestoClient.cs b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Jobs/IssueJobs/proxy/IssueJobToRestoClient.cs index 0f801929b..26101a196 100644 --- a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Jobs/IssueJobs/proxy/IssueJobToRestoClient.cs +++ b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Jobs/IssueJobs/proxy/IssueJobToRestoClient.cs @@ -34,11 +34,12 @@ namespace MyNamespace private static System.Lazy _settings = new System.Lazy(CreateSerializerSettings, true); #pragma warning disable CS8618 // Non-nullable field must contain a non-null value when exiting constructor. Consider declaring as nullable. - public IssueJobToRestoClient(string baseUrl, System.Net.Http.HttpClient httpClient) + public IssueJobToRestoClient(string baseUrl, System.Net.Http.HttpClient httpClient,string path) #pragma warning restore CS8618 // Non-nullable field must contain a non-null value when exiting constructor. Consider declaring as nullable. { BaseUrl = baseUrl; _httpClient = httpClient; + _path = path; } private static System.Text.Json.JsonSerializerOptions CreateSerializerSettings() @@ -58,6 +59,21 @@ namespace MyNamespace _baseUrl += '/'; } } + private string _path; + public string Path + { + get { return _path; } + set + { + _path = value; + + } + } + + + + + protected System.Text.Json.JsonSerializerOptions JsonSerializerSettings { get { return _settings.Value; } } @@ -95,7 +111,7 @@ namespace MyNamespace var urlBuilder_ = new System.Text.StringBuilder(); if (!string.IsNullOrEmpty(_baseUrl)) urlBuilder_.Append(_baseUrl); // Operation Path: "CargoState/SyncIssueJobStereo" - urlBuilder_.Append("CargoState/SyncIssueJobStereo");//修改路由需求 + urlBuilder_.Append(_path);//修改路由需求 PrepareRequest(client_, request_, urlBuilder_); diff --git a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain/Options/RestoOptions.cs b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain/Options/RestoOptions.cs index e6cf97d3c..95ecb71d4 100644 --- a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain/Options/RestoOptions.cs +++ b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain/Options/RestoOptions.cs @@ -16,6 +16,8 @@ public class RestoOptions // 令牌 public string Token { set; get; } + public string Path { set; get; } + } From 6be33bcb0f2fd45d60538965cdf554bdf27f595d Mon Sep 17 00:00:00 2001 From: "boxu.zheng" Date: Wed, 5 Jun 2024 15:43:27 +0800 Subject: [PATCH 4/4] =?UTF-8?q?=E4=BF=AE=E6=94=B9=20=E5=8F=91=E6=96=99?= =?UTF-8?q?=E4=BB=BB=E5=8A=A1=E5=92=8C=E7=94=B3=E8=AF=B7=20=E5=90=8C?= =?UTF-8?q?=E6=AD=A5=E5=AE=8C=E6=88=90?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../AssembleIssueJobs/AssembleIssueJobAppService.cs | 6 +++--- .../AssembleIssueRequests/AssembleIssueRequestAppService.cs | 2 +- .../CoatingIssueRequests/CoatingIssueRequestAppService.cs | 2 +- .../InjectionIssueRequestAppService.cs | 2 +- .../KittingIssueRequests/KittingIssueRequestAppService.cs | 2 +- .../SparePartIssueRequestAppService.cs | 2 +- .../publish/conf/settings/appsettings.Development.json | 4 ++-- 7 files changed, 10 insertions(+), 10 deletions(-) diff --git a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Jobs/IssueJobs/AssembleIssueJobs/AssembleIssueJobAppService.cs b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Jobs/IssueJobs/AssembleIssueJobs/AssembleIssueJobAppService.cs index 8d1004415..4cd857e4b 100644 --- a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Jobs/IssueJobs/AssembleIssueJobs/AssembleIssueJobAppService.cs +++ b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Jobs/IssueJobs/AssembleIssueJobs/AssembleIssueJobAppService.cs @@ -33,6 +33,9 @@ public class AssembleIssueJobAppService AssembleIssueJobCheckInput, AssembleIssueJobEditInput>, IAssembleIssueJobAppService, ITransferLibCallback { + protected IAssembleIssueRequestAppService AssembleIssueRequestAppService => + LazyServiceProvider.LazyGetRequiredService(); + private readonly IAssembleIssueJobManager _assembleIssueJobManager; private readonly ILocationAppService _locationAppService; private readonly IAssembleIssueNoteAppService _assembleIssueNoteAppService; @@ -41,9 +44,6 @@ public class AssembleIssueJobAppService private readonly ITransferLibRequestAppService _transferLibRequestAppService; private readonly IOptions _options; - protected IAssembleIssueRequestAppService AssembleIssueRequestAppService => - LazyServiceProvider.LazyGetRequiredService(); - public AssembleIssueJobAppService( IAssembleIssueJobRepository repository, IAssembleIssueJobManager assembleIssueJobManager, ILocationAppService locationAppService, diff --git a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Requests/IssuelRequests/AssembleIssueRequests/AssembleIssueRequestAppService.cs b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Requests/IssuelRequests/AssembleIssueRequests/AssembleIssueRequestAppService.cs index d00810a4f..971031b3b 100644 --- a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Requests/IssuelRequests/AssembleIssueRequests/AssembleIssueRequestAppService.cs +++ b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Requests/IssuelRequests/AssembleIssueRequests/AssembleIssueRequestAppService.cs @@ -195,7 +195,7 @@ public class AssembleIssueRequestAppService : SfsStoreRequestAppServiceBase= detail.IssuedQty) + if (detail.Qty > detail.IssuedQty) { return; } diff --git a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Requests/IssuelRequests/CoatingIssueRequests/CoatingIssueRequestAppService.cs b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Requests/IssuelRequests/CoatingIssueRequests/CoatingIssueRequestAppService.cs index c3e7e85c5..714651fd8 100644 --- a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Requests/IssuelRequests/CoatingIssueRequests/CoatingIssueRequestAppService.cs +++ b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Requests/IssuelRequests/CoatingIssueRequests/CoatingIssueRequestAppService.cs @@ -195,7 +195,7 @@ public class CoatingIssueRequestAppService : SfsStoreRequestAppServiceBase= detail.IssuedQty) + if (detail.Qty > detail.IssuedQty) { return; } diff --git a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Requests/IssuelRequests/InjectionIssueRequests/InjectionIssueRequestAppService.cs b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Requests/IssuelRequests/InjectionIssueRequests/InjectionIssueRequestAppService.cs index 82284b72f..d5736b7ba 100644 --- a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Requests/IssuelRequests/InjectionIssueRequests/InjectionIssueRequestAppService.cs +++ b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Requests/IssuelRequests/InjectionIssueRequests/InjectionIssueRequestAppService.cs @@ -195,7 +195,7 @@ public class InjectionIssueRequestAppService : SfsStoreRequestAppServiceBase= detail.IssuedQty) + if (detail.Qty > detail.IssuedQty) { return; } diff --git a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Requests/IssuelRequests/KittingIssueRequests/KittingIssueRequestAppService.cs b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Requests/IssuelRequests/KittingIssueRequests/KittingIssueRequestAppService.cs index 1f0a0c086..9b062b596 100644 --- a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Requests/IssuelRequests/KittingIssueRequests/KittingIssueRequestAppService.cs +++ b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Requests/IssuelRequests/KittingIssueRequests/KittingIssueRequestAppService.cs @@ -198,7 +198,7 @@ public class KittingIssueRequestAppService : SfsStoreRequestAppServiceBase= detail.IssuedQty) + if (detail.Qty > detail.IssuedQty) { return; } diff --git a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Requests/IssuelRequests/SparePartIssueRequests/SparePartIssueRequestAppService.cs b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Requests/IssuelRequests/SparePartIssueRequests/SparePartIssueRequestAppService.cs index aadefd1f1..ca0de939e 100644 --- a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Requests/IssuelRequests/SparePartIssueRequests/SparePartIssueRequestAppService.cs +++ b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Requests/IssuelRequests/SparePartIssueRequests/SparePartIssueRequestAppService.cs @@ -191,7 +191,7 @@ public class SparePartIssueRequestAppService : SfsStoreRequestAppServiceBase= detail.IssuedQty) + if (detail.Qty > detail.IssuedQty) { return; } diff --git a/build/src/docker/publish/conf/settings/appsettings.Development.json b/build/src/docker/publish/conf/settings/appsettings.Development.json index c9e77bfc5..54cd1daea 100644 --- a/build/src/docker/publish/conf/settings/appsettings.Development.json +++ b/build/src/docker/publish/conf/settings/appsettings.Development.json @@ -117,8 +117,8 @@ //"BaseUrl": "http://localhost:59093/" }, "BaseData": { - "BaseUrl": "http://dev.ccwin-in.com:60084/" - //"BaseUrl": "http://localhost:59094/" + //"BaseUrl": "http://dev.ccwin-in.com:60084/" + "BaseUrl": "http://localhost:59094/" }, "Default": { "BaseUrl": "http://dev.ccwin-in.com:60083/"