You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

125 lines
5.1 KiB

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<DeliveryReader> _logger;
public DeliveryReader(
IDeliveryManager pillTaskManager
, IIncomingFromExternalManager incomingFromExternalManager
, ILogger<DeliveryReader> logger
)
{
_DeliveryManager = pillTaskManager;
_incomingFromExternalManager = incomingFromExternalManager;
_logger = logger;
}
public virtual async Task<List<IncomingFromExternal>> ReadAsync()
{
//从MES读取待处理Delivery
var toBeProcessedPillTasks = await _DeliveryManager.GetToBeProcessedListAsync().ConfigureAwait(false);
if (!toBeProcessedPillTasks.Any())
{
_logger.LogInformation("no Deliverys");
return new List<IncomingFromExternal>();
}
//Delivery逐一转换为MaterialRequest
var incomingDataList = BuildIncomingFromExternalFromPillTaskAsync(toBeProcessedPillTasks);
await _incomingFromExternalManager.CreateManyAsync(incomingDataList).ConfigureAwait(false);
//更新MES数据状态
await _DeliveryManager.UpdateProcessedListAsync(toBeProcessedPillTasks).ConfigureAwait(false);
return incomingDataList;
}
private static List<IncomingFromExternal> BuildIncomingFromExternalFromPillTaskAsync(List<Delivery> toBeProcessedDeliverys)
{
var incomingDataList = new List<IncomingFromExternal>();
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;
}
}