using System; using System.Collections.Generic; using System.Linq; using System.Threading.Tasks; using Microsoft.Extensions.Logging; using Win_in.Sfs.Wms.DataExchange.Domain.Shared; using Win_in.Sfs.Wms.DataExchange.Domain; using System.Text.Json; using Win_in.Sfs.Wms.DataExchange.WMS.MesNote; using Win_in.Sfs.Basedata.Application.Contracts; using Win_in.Sfs.Shared.Domain.Shared; using Win_in.Sfs.Wms.DataExchange.Domain.Fawtyg.Chassis; using Win_in.Sfs.Wms.DataExchange.WMS.Chassis; namespace Win_in.Sfs.Wms.DataExchange.Fawtyg.MesAgent.Incoming; public class MesChassisReader : IReader { private readonly IMesChassisManager _mesChassisManager; private readonly IIncomingFromExternalManager _incomingFromExternalManager; private readonly ILogger _logger; private readonly ILocationAppService _locationAppService; public MesChassisReader( IMesChassisManager mesChassisManager , IIncomingFromExternalManager incomingFromExternalManager , ILogger logger , ILocationAppService locationAppService ) { _mesChassisManager = mesChassisManager; _incomingFromExternalManager = incomingFromExternalManager; _logger = logger; _locationAppService = locationAppService; } public virtual async Task> ReadAsync() { //从MES读取待处理MesChassis var toBeProcessedPillTasks = await _mesChassisManager.GetToBeProcessedListAsync().ConfigureAwait(false); if (!toBeProcessedPillTasks.Any()) { _logger.LogInformation("无底盘数据【读取】"); return new List(); } //MesChassis逐一转换为MaterialRequest var incomingDataList = BuildIncomingFromExternalFromPillTaskAsync(toBeProcessedPillTasks); await _incomingFromExternalManager.CreateManyAsync(incomingDataList).ConfigureAwait(false); //更新MES数据状态 await _mesChassisManager.UpdateProcessedListAsync(toBeProcessedPillTasks).ConfigureAwait(false); return incomingDataList; } private static List BuildIncomingFromExternalFromPillTaskAsync(List toBeProcessedMesChassiss) { var incomingDataList = new List(); foreach (var MesChassis in toBeProcessedMesChassiss) { var incomingData = BuildIncomingFromExternal(MesChassis); incomingData.SetEffectiveDate(DateTime.Now); incomingData.SetSuccess(); try { var MaterialRequest = BuildChassisCreateInput(MesChassis); 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(MesChassis MesChassis) { var incomingData = new IncomingFromExternal() { DataType = EnumIncomingDataType.MesChassis.ToString(), DataAction = EnumExchangeDataAction.Add, SourceSystem = EnumSystemType.MES.ToString(), SourceDataId = MesChassis.mesout_fis_id.ToString(), SourceDataGroupCode = MesChassis.mesout_fis_vin.ToString(), SourceDataDetailCode = MesChassis.mesout_fis_erpno, SourceDataContent = JsonSerializer.Serialize(MesChassis), WriteTime = DateTime.Now, Writer = nameof(MesIncomingBackgroundWorker), DestinationSystem = EnumSystemType.WMS.ToString(), }; return incomingData; } private static ChassisExchangeDto BuildChassisCreateInput(MesChassis MesChassis) { var chassis = new ChassisExchangeDto() { Number = MesChassis.mesout_fis_id.ToString(), ChassisNumber= MesChassis.mesout_fis_vin, Description= MesChassis.mesout_fis_productType, ProduceDateTime= DateTime.Now, ReceiveInterfaceDateTime= DateTime.Now, SortNumber = MesChassis.mesout_fis_id, ItemCode = MesChassis.mesout_fis_erpno, Configuration= MesChassis.mesout_fis_productColor, }; return chassis; } }