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.Wms.DataExchange.Domain.Fawtyg.Qtyrfe; using Win_in.Sfs.Wms.DataExchange.Domain.Shared; using Win_in.Sfs.Wms.DataExchange.Domain; using Win_in.Sfs.Wms.DataExchange.WMS.MaterialRequest; using Win_in.Sfs.Wms.DataExchange.WMS.TransferNote; namespace Win_in.Sfs.Wms.DataExchange.Fawtyg.MesAgent.Incoming; public class QtyrfeReader : IReader { private readonly IQtyrfeManager _QtyrfeManager; private readonly IIncomingFromExternalManager _incomingFromExternalManager; private readonly ILogger _logger; public QtyrfeReader( IQtyrfeManager pillTaskManager , IIncomingFromExternalManager incomingFromExternalManager , ILogger logger ) { _QtyrfeManager = pillTaskManager; _incomingFromExternalManager = incomingFromExternalManager; _logger = logger; } public virtual async Task> ReadAsync() { //从MES读取待处理Qtyrfe var toBeProcessedPillTasks = await _QtyrfeManager.GetToBeProcessedListAsync().ConfigureAwait(false); if (!toBeProcessedPillTasks.Any()) { _logger.LogInformation("no Qtyrfes"); return new List(); } //Qtyrfe逐一转换为MaterialRequest var incomingDataList = BuildIncomingFromExternalFromPillTaskAsync(toBeProcessedPillTasks); await _incomingFromExternalManager.CreateManyAsync(incomingDataList).ConfigureAwait(false); //更新MES数据状态 await _QtyrfeManager.UpdateProcessedListAsync(toBeProcessedPillTasks).ConfigureAwait(false); return incomingDataList; } private static List BuildIncomingFromExternalFromPillTaskAsync(List toBeProcessedQtyrfes) { var incomingDataList = new List(); foreach (var Qtyrfe in toBeProcessedQtyrfes) { var incomingData = BuildIncomingFromExternal(Qtyrfe); incomingData.SetEffectiveDate(DateTime.Now); incomingData.SetSuccess(); try { var MaterialRequest = BuildTransferNoteCreateInput(Qtyrfe); incomingData.DestinationDataContent = JsonSerializer.Serialize(MaterialRequest); } catch (Exception ex) { incomingData.SetError(EnumExchangeDataErrorCode.Exception, ex.Message, ex.ToString()); } incomingDataList.Add(incomingData); } return incomingDataList; } private static IncomingFromExternal BuildIncomingFromExternal(Qtyrfe Qtyrfe) { var incomingData = new IncomingFromExternal() { DataType = EnumIncomingDataType.TransferNote.ToString(), DataAction = EnumExchangeDataAction.Add, SourceSystem = EnumSystemType.MES.ToString(), SourceDataId = Qtyrfe.ID.ToString(), SourceDataGroupCode = Qtyrfe.ID.ToString(), SourceDataDetailCode = Qtyrfe.mesout_qtyrfe_part, SourceDataContent = JsonSerializer.Serialize(Qtyrfe), WriteTime = DateTime.Now, Writer = nameof(MesIncomingBackgroundWorker), DestinationSystem = EnumSystemType.WMS.ToString(), }; return incomingData; } private static TransferNoteExchangeDto BuildTransferNoteCreateInput(Qtyrfe Qtyrfe) { var transferNote = new TransferNoteExchangeDto() { Worker = Qtyrfe.mesout_qtyrfe_user, Remark = "" }; if (Qtyrfe.mesout_qtyrfe_type == "1") { transferNote.Remark = "质量补移库"; } var transferNoteDetail = new TransferNoteDetailExchangeDto() { ItemCode = Qtyrfe.mesout_qtyrfe_part, Qty =Qtyrfe.mesout_qtyrfe_num, ToLocationErpCode = Qtyrfe.mesout_qtyrfe_loc_to, FromLocationErpCode = Qtyrfe.mesout_qtyrfe_loc_from, }; transferNote.Detail = transferNoteDetail; return transferNote; } }