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.Basedata.Domain; using Win_in.Sfs.Wms.DataExchange.Domain; using Win_in.Sfs.Wms.DataExchange.Domain.Shared; using Win_in.Sfs.Wms.DataExchange.WMS.ItemPack; namespace Win_in.Sfs.Wms.DataExchange.Fawtyg.EosAgent.Incoming; public class ProductConverter : IIncomingConverter { private readonly IIncomingFromExternalManager _incomingFromExternalManager; private readonly IIncomingToWmsManager _incomingToWmsManager; private readonly ISupplierAppService _supplierAppService; private readonly IObjectMapper _objectMapper; private readonly ILogger _logger; private readonly IGuidGenerator _guidGenerator; private readonly IConfiguration _configuration; public ProductConverter( IIncomingToWmsManager incomingToWmsManager, ISupplierAppService supplierAppService, IObjectMapper objectMapper, ILogger logger, IGuidGenerator guidGenerator, IConfiguration configuration, IIncomingFromExternalManager incomingFromExternalManager ) { _incomingFromExternalManager = incomingFromExternalManager; _incomingToWmsManager = incomingToWmsManager; _objectMapper = objectMapper; _supplierAppService = supplierAppService; _logger = logger; _guidGenerator = guidGenerator; _configuration = configuration; } public virtual async Task ConvertAsync(List incomingFromExternalList) { if (!incomingFromExternalList.Any()) { _logger.LogInformation("no products"); return; } List incomingToWmsDataList = new List(); //按ItemCode合并ItemPack var itemPackiIncomingToWmsDataList = await BuildItemPackIncomingToWmsOfProductAsync(incomingFromExternalList).ConfigureAwait(false); incomingToWmsDataList.AddRange(itemPackiIncomingToWmsDataList); //按ItemCode合并SupplierItem var supplierItemIncomingToWmsDataList = await BuildSupplierItemIncomingToWmsOfProductAsync(incomingFromExternalList).ConfigureAwait(false); incomingToWmsDataList.AddRange(supplierItemIncomingToWmsDataList); //添加IncomingToWms await _incomingToWmsManager.CreateBulkAsync(incomingToWmsDataList).ConfigureAwait(false); //归档 await _incomingFromExternalManager.ArchiveManyAsync(incomingFromExternalList).ConfigureAwait(false); } private async Task> BuildItemPackIncomingToWmsOfProductAsync(List incomingDataList) { var incomingToWmsList = new List(); var groups = incomingDataList.GroupBy(p => p.SourceDataGroupCode); foreach (var group in groups) { var first = group.First(); var incomingToWms = new IncomingToWms() { DataType = first.DataType, DataAction = first.DataAction, SourceSystem = first.SourceSystem, DataIdentityCode = first.SourceDataGroupCode, }; incomingToWms.SetId(_guidGenerator.Create()); incomingToWms.SetEffectiveDate(first.EffectiveDate); var exchangeItemPack = JsonSerializer.Deserialize(first.DestinationDataContent); var wmsItemPack = await BuildItemPackProductCreateInput(exchangeItemPack).ConfigureAwait(false); incomingToWms.DataContent = JsonSerializer.Serialize(wmsItemPack); incomingToWmsList.Add(incomingToWms); } return incomingToWmsList; } private async Task BuildItemPackProductCreateInput(ItemPackExchangeDto exchangeDto) { await Task.CompletedTask.ConfigureAwait(false); var wmsItemPack = _objectMapper.Map(exchangeDto); return wmsItemPack; } private async Task> BuildSupplierItemIncomingToWmsOfProductAsync(List incomingDataList) { var incomingToWmsList = new List(); var groups = incomingDataList.GroupBy(p => p.SourceDataGroupCode); foreach (var group in groups) { var first = group.First(); var incomingToWms = new IncomingToWms() { DataType = EnumIncomingDataType.SupplierItem.ToString(), DataAction = first.DataAction, SourceSystem = first.SourceSystem, DataIdentityCode = first.SourceDataGroupCode, }; incomingToWms.SetId(_guidGenerator.Create()); incomingToWms.SetEffectiveDate(first.EffectiveDate); var exchangeSupplierItem = JsonSerializer.Deserialize(first.DestinationDataContent); var wmsSupplierItem = await BuildProductCreateInput(exchangeSupplierItem).ConfigureAwait(false); incomingToWms.DataContent = JsonSerializer.Serialize(wmsSupplierItem); incomingToWmsList.Add(incomingToWms); } return incomingToWmsList; } private async Task BuildProductCreateInput(ItemPackExchangeDto exchangeDto) { var wmsSupplierItem = _objectMapper.Map(exchangeDto); var supplier = await _supplierAppService.GetByCodeAsync(exchangeDto.SupplierCode).ConfigureAwait(false); wmsSupplierItem.SupplierSimpleName = supplier?.ShortName; return wmsSupplierItem; } }