using System.Collections.Generic; using System.Threading.Tasks; using Volo.Abp.EventBus; using Volo.Abp.Uow; using Win_in.Sfs.Shared.Event; using Win_in.Sfs.Wms.Inventory.Application.Contracts; using Win_in.Sfs.Wms.Job.Domain; namespace Win_in.Sfs.Wms.Job.Event.Inventories; public class IssueJobEventHandler : JobExpectInOutEventHandlerBase , ILocalEventHandler> , ILocalEventHandler>> , ILocalEventHandler> , ILocalEventHandler> { [UnitOfWork] public virtual async Task HandleEventAsync(SfsCreatedEntityEventData eventData) { var entity = eventData.Entity; await AddExpectInsAsync(new List { entity }).ConfigureAwait(false); await AddExpectOutsAsync(new List { entity }).ConfigureAwait(false); } [UnitOfWork] public virtual async Task HandleEventAsync(SfsCreatedEntityEventData> eventData) { var entities = eventData.Entity; await AddExpectInsAsync(entities).ConfigureAwait(false); await AddExpectOutsAsync(entities).ConfigureAwait(false); } [UnitOfWork] public virtual async Task HandleEventAsync(SfsCompletedEntityEventData eventData) { var entity = eventData.Entity; await ExpectInAppService.RemoveAsync(entity.Number).ConfigureAwait(false); await ExpectOutAppService.RemoveAsync(entity.Number).ConfigureAwait(false); } [UnitOfWork] public virtual async Task HandleEventAsync(SfsCancelledEntityEventData eventData) { var entity = eventData.Entity; await ExpectInAppService.RemoveAsync(entity.Number).ConfigureAwait(false); await ExpectOutAppService.RemoveAsync(entity.Number).ConfigureAwait(false); } private async Task AddExpectOutsAsync(List entities) { var expectOuts = new List(); foreach (var entity in entities) { var entityExpectOuts = BuildExpectOutInventoryAsync(entity); expectOuts.AddRange(entityExpectOuts); } await ExpectOutAppService.AddManyAsync(expectOuts).ConfigureAwait(false); } private async Task AddExpectInsAsync(List entities) { var expectIns = new List(); foreach (var entity in entities) { var entityExpectIns = BuildExpectInInventoryAsync(entity); expectIns.AddRange(entityExpectIns); } await ExpectInAppService.AddManyAsync(expectIns).ConfigureAwait(false); } private List BuildExpectInInventoryAsync(IssueJob issueJob) { var inputs = ObjectMapper.Map, List>(issueJob.Details); foreach (var input in inputs) { input.WarehouseCode = issueJob.WarehouseCode; input.Worker = issueJob.Worker; input.JobNumber = issueJob.Number; } return inputs; } private List BuildExpectOutInventoryAsync(IssueJob issueJob) { var inputs = ObjectMapper.Map, List>(issueJob.Details); foreach (var input in inputs) { input.WarehouseCode = issueJob.WarehouseCode; input.Worker = issueJob.Worker; input.JobNumber = issueJob.Number; } return inputs; } }