using System.Collections.Generic; using System.Linq; using System.Text.Json; using System.Threading.Tasks; using Microsoft.Extensions.Configuration; using Microsoft.Extensions.Logging; using Volo.Abp.Guids; using Volo.Abp.ObjectMapping; using Win_in.Sfs.Basedata.Application.Contracts; using Win_in.Sfs.Wms.DataExchange.Domain; using Win_in.Sfs.Wms.DataExchange.WMS.Bom; namespace Win_in.Sfs.Wms.DataExchange.Fawtyg.TyrpAgent.Incoming; public class BomConverter : IIncomingConverter { private readonly IIncomingFromExternalManager _incomingFromExternalManager; private readonly IIncomingToWmsManager _incomingToWmsManager; private readonly IItemBasicAppService _itemBasicAppService; private readonly IObjectMapper _objectMapper; private readonly ILogger _logger; private readonly IGuidGenerator _guidGenerator; private readonly IConfiguration _configuration; public BomConverter( IIncomingToWmsManager incomingToWmsManager, IItemBasicAppService itemBasicAppService, IObjectMapper objectMapper, ILogger logger, IGuidGenerator guidGenerator, IConfiguration configuration, IIncomingFromExternalManager incomingFromExternalManager) { _incomingToWmsManager = incomingToWmsManager; _itemBasicAppService = itemBasicAppService; _objectMapper = objectMapper; _logger = logger; _guidGenerator = guidGenerator; _configuration = configuration; _incomingFromExternalManager = incomingFromExternalManager; } public virtual async Task ConvertAsync(List incomingFromExternalList) { if (!incomingFromExternalList.Any()) { _logger.LogInformation("no boms"); return; } var incomingToWmsDataList = await BuildIncomingToWmsOfPurchaseOrderAsync(incomingFromExternalList).ConfigureAwait(false); await _incomingToWmsManager.CreateBulkAsync(incomingToWmsDataList).ConfigureAwait(false); //归档 await _incomingFromExternalManager.ArchiveBulkAsync(incomingFromExternalList).ConfigureAwait(false); } private async Task> BuildIncomingToWmsOfPurchaseOrderAsync(List incomingDataList) { await Task.CompletedTask.ConfigureAwait(false); var incomingToWmsList = new List(); foreach (var data in incomingDataList) { var incomingToWms = new IncomingToWms() { DataType = data.DataType, DataAction = data.DataAction, SourceSystem = data.SourceSystem, DataIdentityCode = data.SourceDataGroupCode, }; incomingToWms.SetId(_guidGenerator.Create()); incomingToWms.SetEffectiveDate(data.EffectiveDate); var exchangeBom = JsonSerializer.Deserialize(data.DestinationDataContent); var wmsBom = _objectMapper.Map(exchangeBom); wmsBom.Layer = 1; incomingToWms.DataContent = JsonSerializer.Serialize(wmsBom); incomingToWmsList.Add(incomingToWms); } return incomingToWmsList; } }