using System.Collections.Generic; using System.Linq; using System.Text.Json; using System.Threading.Tasks; 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.Dict; using static StackExchange.Redis.Role; namespace Win_in.Sfs.Wms.DataExchange.Fawtyg.TyrpAgent.Incoming; public class DictConverter : IIncomingConverter { private readonly IIncomingToWmsManager _incomingToWmsManager; private readonly IObjectMapper _objectMapper; private readonly ILogger _logger; private readonly IGuidGenerator _guidGenerator; private readonly IIncomingFromExternalManager _incomingFromExternalManager; public DictConverter( IIncomingToWmsManager incomingToWmsManager , IObjectMapper objectMapper , ILogger logger, IGuidGenerator guidGenerator, IIncomingFromExternalManager incomingFromExternalManager) { _guidGenerator = guidGenerator; _incomingToWmsManager = incomingToWmsManager; _objectMapper = objectMapper; _objectMapper = objectMapper; _logger = logger; _incomingFromExternalManager = incomingFromExternalManager; } public virtual async Task ConvertAsync(List incomingFromExternalList) { if (!incomingFromExternalList.Any()) { _logger.LogInformation("No Dicts"); return; } //按流水号创建单据 var materialRequestList = await BuildIncomingToWmsOfDictRequestAsync(incomingFromExternalList).ConfigureAwait(false); await _incomingToWmsManager.CreateBulkAsync(materialRequestList).ConfigureAwait(false); //归档 await _incomingFromExternalManager.ArchiveManyAsync(incomingFromExternalList).ConfigureAwait(false); } private async Task> BuildIncomingToWmsOfDictRequestAsync(List incomingDataList) { await Task.CompletedTask.ConfigureAwait(false); 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 exchangeDictRequest = JsonSerializer.Deserialize(first.DestinationDataContent); var wmsDictRequest = _objectMapper.Map(exchangeDictRequest); wmsDictRequest.Items = new List(); var masterId = _guidGenerator.Create(); foreach (var incomingFromExternal in group.ToList()) { var dictlRequest = JsonSerializer.Deserialize(incomingFromExternal.DestinationDataContent); var wmsDictItemRequest = _objectMapper.Map(dictlRequest.Detail); wmsDictItemRequest.Id = _guidGenerator.Create(); wmsDictItemRequest.MasterId = masterId; wmsDictItemRequest.Enabled = true; wmsDictRequest.Items.Add(wmsDictItemRequest); } incomingToWms.DataContent = JsonSerializer.Serialize(wmsDictRequest); incomingToWmsList.Add(incomingToWms); } return incomingToWmsList; } }