|
@ -4,6 +4,8 @@ using System.Linq; |
|
|
using System.Text.Json; |
|
|
using System.Text.Json; |
|
|
using System.Threading.Tasks; |
|
|
using System.Threading.Tasks; |
|
|
using Microsoft.Extensions.Logging; |
|
|
using Microsoft.Extensions.Logging; |
|
|
|
|
|
using Win_in.Sfs.Basedata.Application.Contracts; |
|
|
|
|
|
using Win_in.Sfs.Shared.Domain.Shared; |
|
|
using Win_in.Sfs.Wms.DataExchange.Domain; |
|
|
using Win_in.Sfs.Wms.DataExchange.Domain; |
|
|
using Win_in.Sfs.Wms.DataExchange.Domain.Fawtyg.MesOut; |
|
|
using Win_in.Sfs.Wms.DataExchange.Domain.Fawtyg.MesOut; |
|
|
using Win_in.Sfs.Wms.DataExchange.Domain.Shared; |
|
|
using Win_in.Sfs.Wms.DataExchange.Domain.Shared; |
|
@ -16,33 +18,44 @@ public class MesOutReader : IReader |
|
|
private readonly IMesOutManager _mesOutManager; |
|
|
private readonly IMesOutManager _mesOutManager; |
|
|
private readonly IIncomingFromExternalManager _incomingFromExternalManager; |
|
|
private readonly IIncomingFromExternalManager _incomingFromExternalManager; |
|
|
private readonly ILogger<MesOutReader> _logger; |
|
|
private readonly ILogger<MesOutReader> _logger; |
|
|
|
|
|
private readonly ILocationAppService _locationAppService; |
|
|
public MesOutReader( |
|
|
public MesOutReader( |
|
|
IMesOutManager mesOutManager |
|
|
IMesOutManager mesOutManager |
|
|
, IIncomingFromExternalManager incomingFromExternalManager |
|
|
, IIncomingFromExternalManager incomingFromExternalManager |
|
|
, ILogger<MesOutReader> logger |
|
|
, ILogger<MesOutReader> logger |
|
|
|
|
|
, ILocationAppService locationAppService |
|
|
) |
|
|
) |
|
|
{ |
|
|
{ |
|
|
_mesOutManager = mesOutManager; |
|
|
_mesOutManager = mesOutManager; |
|
|
_incomingFromExternalManager = incomingFromExternalManager; |
|
|
_incomingFromExternalManager = incomingFromExternalManager; |
|
|
_logger = logger; |
|
|
_logger = logger; |
|
|
|
|
|
_locationAppService = locationAppService; |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
public virtual async Task<List<IncomingFromExternal>> ReadAsync() |
|
|
public virtual async Task<List<IncomingFromExternal>> ReadAsync() |
|
|
{ |
|
|
{ |
|
|
//从MES读取待处理MesOut
|
|
|
//从MES读取待处理MesOut
|
|
|
var toBeProcessedMwsOuts = await _mesOutManager.GetToBeProcessedListAsync().ConfigureAwait(false); |
|
|
var toBeProcessedMwsOuts = await _mesOutManager.GetToBeProcessedListAsync().ConfigureAwait(false); |
|
|
|
|
|
|
|
|
if (!toBeProcessedMwsOuts.Any()) |
|
|
if (!toBeProcessedMwsOuts.Any()) |
|
|
{ |
|
|
{ |
|
|
_logger.LogInformation("no productreceipts"); |
|
|
_logger.LogInformation("no productreceipts"); |
|
|
return new List<IncomingFromExternal>(); |
|
|
return new List<IncomingFromExternal>(); |
|
|
} |
|
|
} |
|
|
|
|
|
var mesoutnbr = await GetListByTypesAndErpCodeAsync(toBeProcessedMwsOuts).ConfigureAwait(false); |
|
|
|
|
|
if (mesoutnbr.Count > 0) |
|
|
|
|
|
{ |
|
|
|
|
|
toBeProcessedMwsOuts = toBeProcessedMwsOuts.Where(r => !mesoutnbr.Contains(r.Mesout_ref_nbr)).ToList(); |
|
|
|
|
|
var toBeProcessedEroMwsOuts = toBeProcessedMwsOuts.Where(r => mesoutnbr.Contains(r.Mesout_ref_nbr)).ToList(); |
|
|
|
|
|
|
|
|
|
|
|
await _mesOutManager.UpdateProcesseErrordListAsync(toBeProcessedEroMwsOuts).ConfigureAwait(false); |
|
|
|
|
|
} |
|
|
//MesOut逐一转换为ProductReceiptNote
|
|
|
//MesOut逐一转换为ProductReceiptNote
|
|
|
var incomingDataList = BuildIncomingFromExternalFromShipAsync(toBeProcessedMwsOuts); |
|
|
var incomingDataList = BuildIncomingFromExternalFromShipAsync(toBeProcessedMwsOuts); |
|
|
await _incomingFromExternalManager.CreateManyAsync(incomingDataList).ConfigureAwait(false); |
|
|
await _incomingFromExternalManager.CreateManyAsync(incomingDataList).ConfigureAwait(false); |
|
|
//更新MES数据状态
|
|
|
//更新MES数据状态
|
|
|
await _mesOutManager.UpdateProcessedListAsync(toBeProcessedMwsOuts).ConfigureAwait(false); |
|
|
await _mesOutManager.UpdateProcessedListAsync(toBeProcessedMwsOuts).ConfigureAwait(false); |
|
|
|
|
|
|
|
|
return incomingDataList; |
|
|
return incomingDataList; |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
@ -71,7 +84,25 @@ public class MesOutReader : IReader |
|
|
|
|
|
|
|
|
return incomingDataList; |
|
|
return incomingDataList; |
|
|
} |
|
|
} |
|
|
|
|
|
private async Task<List<string>> GetListByTypesAndErpCodeAsync(List<MesOut> toBeProcessedShips) |
|
|
|
|
|
{ |
|
|
|
|
|
List<string> mesoutnbr = new List<string>(); |
|
|
|
|
|
|
|
|
|
|
|
foreach (var item in toBeProcessedShips) |
|
|
|
|
|
{ |
|
|
|
|
|
if (mesoutnbr.Contains(item.Mesout_ref_nbr)) |
|
|
|
|
|
{ |
|
|
|
|
|
continue; |
|
|
|
|
|
} |
|
|
|
|
|
List<EnumLocationType> types = new List<EnumLocationType> { EnumLocationType.FG, EnumLocationType.WIP }; |
|
|
|
|
|
var loc = await _locationAppService.GetListByTypesAndErpCodeAsync(types, item.Mesout_loc).ConfigureAwait(false); |
|
|
|
|
|
if (loc.Count == 0) |
|
|
|
|
|
{ |
|
|
|
|
|
mesoutnbr.Add(item.Mesout_ref_nbr); |
|
|
|
|
|
} |
|
|
|
|
|
} |
|
|
|
|
|
return mesoutnbr; |
|
|
|
|
|
} |
|
|
private static IncomingFromExternal BuildIncomingFromExternal(MesOut mesOut) |
|
|
private static IncomingFromExternal BuildIncomingFromExternal(MesOut mesOut) |
|
|
{ |
|
|
{ |
|
|
var incomingData = new IncomingFromExternal() |
|
|
var incomingData = new IncomingFromExternal() |
|
|