using System; using System.Collections.Generic; using System.Linq; using System.Text.Json; using System.Threading.Tasks; using Volo.Abp.ObjectMapping; using Win_in.Sfs.Label.Application.Contracts; using Win_in.Sfs.Wms.DataExchange.Domain; using Win_in.Sfs.Wms.DataExchange.Domain.Fawtyg.EOS; using Win_in.Sfs.Wms.DataExchange.Domain.Shared; using Win_in.Sfs.Wms.DataExchange.WMS.PutawayNote; using Win_in.Sfs.Wms.Store.Application.Contracts; namespace Win_in.Sfs.Wms.DataExchange.Fawtyg.EosAgent; public class ArriveConverter : IOutgoingConverter { private readonly IOutgoingFromWmsManager _outgoingFromWmsManager; private readonly IOutgoingToExternalManager _outgoingToExternalManager; private readonly ISupplierAsnAppService _supplierAsnAppService; private readonly IObjectMapper _objectMapper; private readonly IInventoryLabelAppService _inventoryLabelAppService; public ArriveConverter( IOutgoingFromWmsManager outgoingFromWmsManager , IOutgoingToExternalManager outgoingToExternalManager , ISupplierAsnAppService supplierAsnAppService , IObjectMapper objectMapper , IInventoryLabelAppService inventoryLabelAppService ) { _inventoryLabelAppService = inventoryLabelAppService; _outgoingFromWmsManager = outgoingFromWmsManager; _outgoingToExternalManager = outgoingToExternalManager; _supplierAsnAppService = supplierAsnAppService; _objectMapper = objectMapper; } public virtual async Task> ConvertAsync() { var outgoingToExternalList = new List(); var outgoingFromWmsList = await _outgoingFromWmsManager.GetToBeProcessedListAsync(EnumOutgoingDataType.Putaway, EnumSystemType.EOS).ConfigureAwait(false); foreach (var outgoingFromWms in outgoingFromWmsList) { var wmsReceipt = JsonSerializer.Deserialize(outgoingFromWms.DataContent); foreach (var detail in wmsReceipt.Details) { var outgoingToExternal = new OutgoingToExternal() { DataType = outgoingFromWms.DataType, DataAction = outgoingFromWms.DataAction, SourceSystem = EnumSystemType.WMS.ToString(), SourceDataId = detail.Id.ToString(), SourceDataGroupCode = wmsReceipt.Number, SourceDataDetailCode = detail.ToPackingCode, Writer = nameof(EosOutgoingBackgroundWorker), DestinationSystem = EnumSystemType.EOS.ToString(), DestinationDataId = "", }; outgoingToExternal.SetEffectiveDate(outgoingFromWms.EffectiveDate); var exchangeReceipt = await BuildPutawayExchangeDtoAsync(wmsReceipt, detail).ConfigureAwait(false); outgoingToExternal.SourceDataContent = JsonSerializer.Serialize(exchangeReceipt); var arrive = BuildArrive(exchangeReceipt); var label = await _inventoryLabelAppService.GetByCodeAsync(arrive.DetailMatNo).ConfigureAwait(false); if (label != null) { arrive.ShipBillNo = label.AsnNumber; } try { //通过发货单号获取发货时间 var supplierAsnDTO=await _supplierAsnAppService.GetByNumberAsync(label.AsnNumber).ConfigureAwait(false); if (supplierAsnDTO != null) { arrive.ShipDate = supplierAsnDTO.ShipDate; } } catch (Exception ex) { outgoingToExternal.SetError(EnumExchangeDataErrorCode.Exception, ex.InnerException == null ? ex.Message : ex.InnerException.Message, ex.ToString()); } outgoingToExternal.DestinationDataContent = JsonSerializer.Serialize(arrive); outgoingToExternalList.Add(outgoingToExternal); } } await _outgoingToExternalManager.CreateManyAsync(outgoingToExternalList).ConfigureAwait(false); //将outgoingFromWms数据归档 await _outgoingFromWmsManager.ArchiveManyAsync(outgoingFromWmsList).ConfigureAwait(false); return outgoingToExternalList; } private ArriveNote BuildArrive(PutawayNoteExchangeDto exchangeReceipt) { var detail = exchangeReceipt.Detail; var nulltime = Convert.ToDateTime("0001/01/01 00:00:00"); if (detail.ShipDate == nulltime) { detail.ShipDate = null; } if (detail.ProduceDate == nulltime) { detail.ProduceDate = null; } var arrive = new ArriveNote() { PlanBillNo = detail.PoNumber, ShipBillNo = detail.AsnNumber, DocNo = exchangeReceipt.Number, DetailMatNo = detail.ToPackingCode, ERP = detail.ItemCode, Qty = detail.Qty, HgQty = detail.Qty, ProductDate = detail.ProduceDate, ProductBatch = detail.ToLot, Loc = detail.ToLocationErpCode, ShipDate = detail.ShipDate, ShipBillState = 0, SupplierCode = detail.SupplierCode, PlanUserCode = detail.PlanUserCode,//筹措员 EosState = 0, // EosDate = DateTime.MinValue, WmsDate = DateTime.Now, Remark = detail.Remark }; return arrive; } private Task BuildPutawayExchangeDtoAsync(PutawayNoteDTO wmsReceipt, PutawayNoteDetailDTO wmsReceiptDetail) { var exchangeReceipt = _objectMapper.Map(wmsReceipt); var exchangeReceiptDetail = _objectMapper.Map(wmsReceiptDetail); exchangeReceipt.Detail = exchangeReceiptDetail; return Task.FromResult(exchangeReceipt); } }