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 Volo.Abp.Guids; using Win_in.Sfs.Shared.Domain.Shared; using Win_in.Sfs.Wms.DataExchange.Domain; using Win_in.Sfs.Wms.DataExchange.Domain.Fawtyg.Tyrp; using Win_in.Sfs.Wms.DataExchange.Domain.Shared; using Win_in.Sfs.Wms.DataExchange.Enums; using Win_in.Sfs.Wms.DataExchange.WMS.Dict; namespace Win_in.Sfs.Wms.DataExchange.Fawtyg.TyrpAgent.Incoming; public class DictpjReader : IReader { private readonly IDictpjManager _dictpjManager; private readonly IIncomingFromExternalManager _incomingFromExternalManager; private readonly ILogger _logger; private readonly IConfiguration _configuration; private readonly IGuidGenerator _guidGenerator; public DictpjReader( IDictpjManager dictpjManager , IIncomingFromExternalManager incomingFromExternalManager , ILogger logger , IConfiguration configuration , IGuidGenerator guidGenerator ) { _guidGenerator = guidGenerator; _configuration = configuration; _dictpjManager = dictpjManager; _incomingFromExternalManager = incomingFromExternalManager; _logger = logger; } public virtual async Task> ReadAsync() { //从ERP读取待处理part var toBeProcessedDict = await _dictpjManager.GetToBeProcessedListAsync().ConfigureAwait(false); if (!toBeProcessedDict.Any()) { _logger.LogInformation("No Dictpjs"); return new List(); } //part逐一转换为Dict var incomingDataList = BuildIncomingFromExternalFromScrapAsync(toBeProcessedDict); await _incomingFromExternalManager.CreateBulkAsync(incomingDataList).ConfigureAwait(false); return incomingDataList; } private List BuildIncomingFromExternalFromScrapAsync(List toBeProcessedDict) { var incomingDataList = new List(); foreach (var dict in toBeProcessedDict) { var incomingData = BuildIncomingFromExternal(dict); incomingData.SetEffectiveDate(DateTime.Now); incomingData.SetSuccess(); incomingData.SetId(_guidGenerator.Create()); try { var DictRequest = BuildDictRequestCreateInput(dict); incomingData.DestinationDataContent = JsonSerializer.Serialize(DictRequest); } catch (Exception ex) { incomingData.SetError(EnumExchangeDataErrorCode.Exception, ex.Message, ex.ToString()); } incomingDataList.Add(incomingData); } return incomingDataList; } private IncomingFromExternal BuildIncomingFromExternal(pjtmout dict) { var incomingData = new IncomingFromExternal() { DataType = EnumIncomingDataType.Dict.ToString(), DataAction = EnumExchangeDataAction.Add, SourceSystem = EnumSystemType.ERP.ToString(), SourceDataId = dict.pjtmout_id, SourceDataGroupCode = EnumDictType.CaseCode.ToString(), SourceDataDetailCode = dict.pjtmout_desc, SourceDataContent = JsonSerializer.Serialize(dict), WriteTime = DateTime.Now, Writer = nameof(TyrpIncomingBackgroundWorker), DestinationSystem = EnumSystemType.WMS.ToString(), }; return incomingData; } private static DictExchangeDto BuildDictRequestCreateInput(pjtmout dict) { var dictRequest = new DictExchangeDto(); dictRequest.Code = EnumDictType.CaseCode.ToString(); dictRequest.Name = EnumDictType.CaseCode.GetDisplayName(); dictRequest.Description = EnumDictType.CaseCode.GetDisplayName(); var dictItem = new DictItemExchangeDto() { Code = dict.pjtmout_id, Name = dict.pjtmout_desc, Description = dict.pjtmout_desc, }; dictRequest.Detail = dictItem; return dictRequest; } }