using System; using System.Collections.Generic; using System.Linq; using System.Text.Json; using System.Threading.Tasks; using Microsoft.Extensions.Configuration; using Microsoft.Extensions.Logging; using Win_in.Sfs.Wms.DataExchange.Domain; using Win_in.Sfs.Wms.DataExchange.Domain.Fawtyg.Mes; using Win_in.Sfs.Wms.DataExchange.Domain.Shared; using Win_in.Sfs.Wms.DataExchange.WMS.BackFlushNote; namespace Win_in.Sfs.Wms.DataExchange.Fawtyg.MesAgent.Incoming; public class BackFluReader : IReader { private readonly IBackfluManager _ibackfluManager; private readonly IIncomingFromExternalManager _incomingFromExternalManager; private readonly ILogger _logger; private readonly IConfiguration _configuration; public BackFluReader( IBackfluManager ibackfuManager , IIncomingFromExternalManager incomingFromExternalManager , ILogger logger , IConfiguration configuration ) { _ibackfluManager = ibackfuManager; _incomingFromExternalManager = incomingFromExternalManager; _logger = logger; _configuration = configuration; } public virtual async Task> ReadAsync() { //从Tyrp读取待处理bom var toBeProcessedBack = await _ibackfluManager.GetToBeProcessedListAsync().ConfigureAwait(false); toBeProcessedBack= toBeProcessedBack.OrderBy(r => r.scmout_dt_w).Take(3000).ToList(); if (!toBeProcessedBack.Any()) { _logger.LogInformation("no backflus"); return new List(); } //bom逐一转换为bomNote var incomingDataList = BuildIncomingFromExternalFromBomAsync(toBeProcessedBack); await _incomingFromExternalManager.CreateManyAsync(incomingDataList).ConfigureAwait(false); await _ibackfluManager.UpdateProcessedListAsync(toBeProcessedBack).ConfigureAwait(false); return incomingDataList; } private List BuildIncomingFromExternalFromBomAsync(List toBeProcessedIssue) { var incomingDataList = new List(); foreach (var backflu in toBeProcessedIssue) { var incomingData = BuildIncomingFromExternal(backflu); incomingData.SetEffectiveDate(DateTime.Now); try { var bm = BuildScrapNoteOrderExchangeMes(backflu); incomingData.DestinationDataContent = JsonSerializer.Serialize(bm); } catch (Exception ex) { incomingData.SetError(EnumExchangeDataErrorCode.Exception, ex.Message, ex.ToString()); } incomingDataList.Add(incomingData); } return incomingDataList; } private IncomingFromExternal BuildIncomingFromExternal(Backflu backflu) { var incomingData = new IncomingFromExternal() { DataType = EnumIncomingDataType.BackFlush.ToString(), DataAction = EnumExchangeDataAction.Add, SourceSystem = EnumSystemType.MES.ToString(), SourceDataId = backflu.scmout_nbr, SourceDataGroupCode = backflu.scmout_loc, SourceDataDetailCode = backflu.scmout_part, SourceDataContent = JsonSerializer.Serialize(backflu), WriteTime = DateTime.Now, Writer = nameof(MesIncomingBackgroundWorker), DestinationSystem = EnumSystemType.MES.ToString(), }; return incomingData; } private static BackFlushNoteExchangeDto BuildScrapNoteOrderExchangeMes(Backflu backflu) { var back = new BackFlushNoteExchangeDto() { // ActiveDate = DateTime.ParseExact(backflu.scmout_dt_w, "yyyyMMdd", System.Globalization.CultureInfo.CurrentCulture), ActiveDate = Convert.ToDateTime(backflu.scmout_dt_w.Substring(0, 4) + "-" + backflu.scmout_dt_w.Substring(4, 2) + "-" + backflu.scmout_dt_w.Substring(6, 2)), ItemCode = backflu.scmout_part, Number = backflu.scmout_nbr }; var bakcdetail = new BackFlushNoteDetailExchangeDto() { Number = backflu.scmout_nbr, ItemCode = backflu.scmout_part, Qty = backflu.scmout_qty, LocationErpCode = backflu.scmout_loc }; back.Detail = bakcdetail; return back; } }