using System; using System.Collections.Generic; using System.Linq; using System.Text.Json; using System.Threading.Tasks; using Microsoft.Extensions.Logging; using Win_in.Sfs.Basedata.Application.Contracts; using Win_in.Sfs.Shared.Domain.Shared; using Win_in.Sfs.Wms.DataExchange.Domain; using Win_in.Sfs.Wms.DataExchange.WMS.TransferNote; using Win_in.Sfs.Wms.Store.Application.Contracts; using Volo.Abp.ObjectMapping; using Win_in.Sfs.Wms.Store.Domain; namespace Win_in.Sfs.Wms.DataExchange.Fawtyg.MesAgent.Incoming; public class QtyrfeConverter : IIncomingConverter { private readonly IIncomingFromExternalManager _incomingFromExternalManager; private readonly IIncomingToWmsManager _incomingToWmsManager; private readonly IObjectMapper _objectMapper; private readonly IItemBasicAppService _itemBasicAppService; private readonly ILocationAppService _locationAppService; private readonly ILogger _logger; public QtyrfeConverter( IIncomingToWmsManager incomingToWmsManager , IObjectMapper objectMapper , IItemBasicAppService itemBasicAppService , ILogger logger, ILocationAppService locationAppService, IIncomingFromExternalManager incomingFromExternalManager) { _incomingToWmsManager = incomingToWmsManager; _objectMapper = objectMapper; _itemBasicAppService = itemBasicAppService; _logger = logger; _locationAppService = locationAppService; _incomingFromExternalManager = incomingFromExternalManager; } public virtual async Task ConvertAsync(List incomingFromExternalList) { if (!incomingFromExternalList.Any()) { _logger.LogInformation("no Qtyrfes"); return; } //按Number合并TransferNote单据 var transferNoteList = await BuildIncomingToWmsOfTransferNoteAsync(incomingFromExternalList).ConfigureAwait(false); await _incomingToWmsManager.CreateManyAsync(transferNoteList).ConfigureAwait(false); //归档 await _incomingFromExternalManager.ArchiveManyAsync(incomingFromExternalList).ConfigureAwait(false); } private async Task> BuildIncomingToWmsOfTransferNoteAsync(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 exchangeTransferNote = JsonSerializer.Deserialize(first.DestinationDataContent); var wmsTransferNote = _objectMapper.Map(exchangeTransferNote); wmsTransferNote.Type = EnumTransSubType.Transfer_Area.ToString();//客户储位调拨 wmsTransferNote.Details = new List(); foreach (var incomingFromExternal in group.ToList()) { var transferNote = JsonSerializer.Deserialize(incomingFromExternal.DestinationDataContent); var wmsTransferNoteDetail = _objectMapper.Map(transferNote.Detail); var item = await _itemBasicAppService.GetByCodeAsync(wmsTransferNoteDetail.ItemCode).ConfigureAwait(false); var tolocation=await _locationAppService.GetByCodeAsync(wmsTransferNoteDetail.ToLocationErpCode).ConfigureAwait(false); var fromlocation = await _locationAppService.GetByCodeAsync(wmsTransferNoteDetail.FromLocationErpCode).ConfigureAwait(false); try { wmsTransferNoteDetail.FromPackingCode = ""; wmsTransferNoteDetail.ToPackingCode = ""; wmsTransferNoteDetail.FromLot = ""; wmsTransferNoteDetail.ToLot = ""; wmsTransferNoteDetail.FromStatus = EnumInventoryStatus.OK; wmsTransferNoteDetail.ToStatus = EnumInventoryStatus.OK; if (transferNote.Remark.Contains("质量补移库"))//质量补 { wmsTransferNoteDetail.FromPackingCode = "RFE"; //质量补排序批次 wmsTransferNoteDetail.FromLot = "RFE";//质量补箱标签 wmsTransferNoteDetail.ToPackingCode = "RFE"; //质量补排序批次 wmsTransferNoteDetail.ToLot = "RFE";//质量补箱标签 } if (item != null) { wmsTransferNoteDetail.ItemName = item.Name; wmsTransferNoteDetail.ItemDesc1 = !string.IsNullOrEmpty(item.Desc1) ? item.Desc1 : ""; wmsTransferNoteDetail.ItemDesc2 = !string.IsNullOrEmpty(item.Desc2) ? item.Desc2 : ""; wmsTransferNoteDetail.Uom = !string.IsNullOrEmpty(item.BasicUom) ? item.BasicUom : ""; wmsTransferNoteDetail.StdPackQty = item.StdPackQty; } if (tolocation != null) { wmsTransferNoteDetail.ToLocationCode = tolocation.Code; wmsTransferNoteDetail.ToLocationArea = tolocation.AreaCode; wmsTransferNoteDetail.ToLocationGroup = tolocation.LocationGroupCode; wmsTransferNoteDetail.ToWarehouseCode = tolocation.WarehouseCode; if (tolocation.Type== EnumLocationType.CUST) { wmsTransferNote.Type = EnumTransSubType.Transfer_Customer.ToString();//客户储位调拨 } } if (fromlocation!=null) { wmsTransferNoteDetail.FromLocationCode = fromlocation.Code; wmsTransferNoteDetail.FromLocationArea = fromlocation.AreaCode; wmsTransferNoteDetail.FromLocationGroup = fromlocation.LocationGroupCode; wmsTransferNoteDetail.FromWarehouseCode = fromlocation.WarehouseCode; } } catch (Exception) { wmsTransferNoteDetail.ItemName = ""; wmsTransferNoteDetail.ItemDesc1 = ""; wmsTransferNoteDetail.ItemDesc2 = ""; wmsTransferNoteDetail.Uom = ""; } wmsTransferNote.Details.Add(wmsTransferNoteDetail); } incomingToWms.DataContent = JsonSerializer.Serialize(wmsTransferNote); incomingToWmsList.Add(incomingToWms); } return incomingToWmsList; } }