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.ObjectMapping; using Win_in.Sfs.Basedata.Application.Contracts; using Win_in.Sfs.Wms.DataExchange.Domain; using Win_in.Sfs.Wms.DataExchange.WMS.PurchaseOrder; using Win_in.Sfs.Wms.Store.Application.Contracts; namespace Win_in.Sfs.Wms.DataExchange.Fawtyg.EosAgent; public class PlanConverter : IIncomingConverter { private readonly IIncomingFromExternalManager _incomingFromExternalManager; private readonly IIncomingToWmsManager _incomingToWmsManager; private readonly IItemBasicAppService _itemBasicAppService; private readonly IItemPackAppService _itemPackAppService; private readonly IObjectMapper _objectMapper; private readonly ILogger _logger; private readonly IConfiguration _configuration; public PlanConverter( IIncomingToWmsManager incomingToWmsManager, IItemBasicAppService itemBasicAppService, IItemPackAppService itemPackAppService, IObjectMapper objectMapper, ILogger logger, IConfiguration configuration, IIncomingFromExternalManager incomingFromExternalManager ) { _incomingFromExternalManager = incomingFromExternalManager; _incomingToWmsManager = incomingToWmsManager; _itemBasicAppService = itemBasicAppService; _itemPackAppService = itemPackAppService; _objectMapper = objectMapper; _logger = logger; _configuration = configuration; } public virtual async Task ConvertAsync(List incomingFromExternalList) { if (!incomingFromExternalList.Any()) { _logger.LogInformation("no plans"); return; } //按PlanBillNo合并PurchaseOrder var incomingToWmsDataList = await BuildIncomingToWmsOfPurchaseOrderAsync(incomingFromExternalList).ConfigureAwait(false); await _incomingToWmsManager.CreateManyAsync(incomingToWmsDataList).ConfigureAwait(false); //归档 await _incomingFromExternalManager.ArchiveManyAsync(incomingFromExternalList).ConfigureAwait(false); } private async Task> BuildIncomingToWmsOfPurchaseOrderAsync(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.SetEffectiveDate(first.EffectiveDate); var exchangePo = JsonSerializer.Deserialize(first.DestinationDataContent); var wmsPo = await BuildPurchaseOrderCreateInput(exchangePo, group).ConfigureAwait(false); incomingToWms.DataContent = JsonSerializer.Serialize(wmsPo); incomingToWmsList.Add(incomingToWms); } return incomingToWmsList; } private async Task BuildPurchaseOrderCreateInput(PurchaseOrderExchangeDto exchangePo, IGrouping group) { var wmsPo = _objectMapper.Map(exchangePo); wmsPo.PoType = "2"; wmsPo.IsConsignment = false; wmsPo.Version = ""; wmsPo.TaxRate = 0; wmsPo.Details = new List(); foreach (var incomingFromExternal in group.ToList()) { var po = JsonSerializer.Deserialize(incomingFromExternal.DestinationDataContent); var wmsPoDetail = await BuildPurchaseOrderDetailInput(po).ConfigureAwait(false); wmsPo.Details.Add(wmsPoDetail); } return wmsPo; } private async Task BuildPurchaseOrderDetailInput(PurchaseOrderExchangeDto po) { var wmsPoDetail = _objectMapper.Map(po.Detail); wmsPoDetail.PoLine = ""; wmsPoDetail.IsConsignment = false; wmsPoDetail.ConvertRate = 1; var item = await _itemBasicAppService.GetByCodeAsync(wmsPoDetail.ItemCode).ConfigureAwait(false); if (item != null) { wmsPoDetail.ItemName = item.Name; wmsPoDetail.ItemDesc1 = item.Desc1; wmsPoDetail.ItemDesc2 = item.Desc2; wmsPoDetail.SupplierPackUom = item.BasicUom; wmsPoDetail.SupplierPackQty = item.StdPackQty; wmsPoDetail.StdPackQty = item.StdPackQty; } return wmsPoDetail; } }