using System; using System.Collections.Generic; using System.Linq; using System.Threading.Tasks; using Microsoft.Extensions.Logging; using Win_in.Sfs.Wms.DataExchange.Domain.Fawtyg.Delivery; 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.DeliverRequest; using Win_in.Sfs.Shared.Domain.Shared; namespace Win_in.Sfs.Wms.DataExchange.Fawtyg.MesAgent.Incoming; public class DeliveryReader : IReader { private readonly IDeliveryManager _DeliveryManager; private readonly IIncomingFromExternalManager _incomingFromExternalManager; private readonly ILogger _logger; public DeliveryReader( IDeliveryManager pillTaskManager , IIncomingFromExternalManager incomingFromExternalManager , ILogger logger ) { _DeliveryManager = pillTaskManager; _incomingFromExternalManager = incomingFromExternalManager; _logger = logger; } public virtual async Task> ReadAsync() { //从MES读取待处理Delivery var toBeProcessedPillTasks = await _DeliveryManager.GetToBeProcessedListAsync().ConfigureAwait(false); if (!toBeProcessedPillTasks.Any()) { _logger.LogInformation("no Deliverys"); return new List(); } //Delivery逐一转换为MaterialRequest var incomingDataList = BuildIncomingFromExternalFromPillTaskAsync(toBeProcessedPillTasks); await _incomingFromExternalManager.CreateManyAsync(incomingDataList).ConfigureAwait(false); //更新MES数据状态 await _DeliveryManager.UpdateProcessedListAsync(toBeProcessedPillTasks).ConfigureAwait(false); return incomingDataList; } private static List BuildIncomingFromExternalFromPillTaskAsync(List toBeProcessedDeliverys) { var incomingDataList = new List(); foreach (var Delivery in toBeProcessedDeliverys) { var incomingData = BuildIncomingFromExternal(Delivery); incomingData.SetEffectiveDate(DateTime.Now); incomingData.SetSuccess(); try { var DetilveryRequest = BuildDeliverRequestCreateInput(Delivery); incomingData.DestinationDataContent = JsonSerializer.Serialize(DetilveryRequest); } catch (Exception ex) { incomingData.SetError(EnumExchangeDataErrorCode.Exception, ex.Message, ex.ToString()); } incomingDataList.Add(incomingData); } return incomingDataList; } private static IncomingFromExternal BuildIncomingFromExternal(Delivery Delivery) { var incomingData = new IncomingFromExternal() { DataType = EnumIncomingDataType.Delivery.ToString(), DataAction = EnumExchangeDataAction.Add, SourceSystem = EnumSystemType.MES.ToString(), SourceDataId = Delivery.mesout_delivery_id.ToString(), // SourceDataGroupCode =Delivery.mesout_delivery_type=="0"? Delivery.mesout_delivery_no : Delivery.mesout_delivery_plan, SourceDataGroupCode = Delivery.mesout_delivery_plan, SourceDataDetailCode = Delivery.mesout_delivery_customer, SourceDataContent = JsonSerializer.Serialize(Delivery), WriteTime = DateTime.Now, Writer = nameof(MesIncomingBackgroundWorker), DestinationSystem = EnumSystemType.WMS.ToString(), }; return incomingData; } private static DeliverRequestExchangeDto BuildDeliverRequestCreateInput(Delivery Delivery) { var mesRequest = new DeliverRequestExchangeDto() { DeliverRequestType = Delivery.mesout_delivery_type == "0" ? EnumDeliverRequestType.FIS : EnumDeliverRequestType.Normal, //DeliverPlanNumber= Delivery.mesout_delivery_type == "0" ? Delivery.mesout_delivery_no : Delivery.mesout_delivery_plan, DeliverPlanNumber =Delivery.mesout_delivery_plan, CustomerCode = Delivery.mesout_delivery_customer, Number = Delivery.mesout_delivery_no, Worker = "MESFY", ActiveDate = DateTime.TryParse(Delivery.mesout_delivery_wt, out DateTime dateTime) ? dateTime : DateTime.Now, DeliverTime = DateTime.TryParse(Delivery.mesout_delivery_wt, out DateTime dateTime1) ? dateTime1 : DateTime.Now, MesTruckNumber="", }; var mesRequestDetail = new DeliverRequestDetailExchangeDto() { ItemCode = Delivery.mesout_delivery_part, Qty = Delivery.mesout_delivery_num, AreaCode = Delivery.mesout_delivery_loc, //MesDeliveryNo=Delivery.mesout_delivery_no, MesDeliveryPlan = Delivery.mesout_delivery_plan, IdentityNo =Delivery.mesout_delivery_identity_no, MesDeliveryContainer= Delivery.mesout_delivery_container }; mesRequest.Detail = mesRequestDetail; return mesRequest; } }