using System; using System.Collections.Generic; using System.Linq; using System.Text.Json; using System.Threading.Tasks; using Microsoft.Extensions.Logging; using Volo.Abp.Guids; 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.WMS.Supplier; namespace Win_in.Sfs.Wms.DataExchange.Fawtyg.TyrpAgent.Incoming; public class SupplierReader : IReader { private readonly ISupplierManager _isupplierManager; private readonly IIncomingFromExternalManager _incomingFromExternalManager; private readonly ILogger _logger; private readonly IGuidGenerator _guidGenerator; public SupplierReader( ISupplierManager supplierManager , IIncomingFromExternalManager incomingFromExternalManager , IGuidGenerator guidGenerator , ILogger logger ) { _guidGenerator = guidGenerator; _isupplierManager = supplierManager; _incomingFromExternalManager = incomingFromExternalManager; _logger = logger; } public virtual async Task> ReadAsync() { //从Tyrp读取待处理supplier var toBeProcessedIssue = await _isupplierManager.GetToBeProcessedListAsync().ConfigureAwait(false); if (!toBeProcessedIssue.Any()) { _logger.LogInformation("no supplier"); return new List(); } //supplier逐一转换为supplierNote var incomingDataList = BuildIncomingFromExternalFromBomAsync(toBeProcessedIssue); await _incomingFromExternalManager.CreateBulkAsync(incomingDataList).ConfigureAwait(false); return incomingDataList; } private List BuildIncomingFromExternalFromBomAsync(List toBeProcessedIssue) { var incomingDataList = new List(); foreach (var supplier in toBeProcessedIssue) { var incomingData = BuildIncomingFromExternal(supplier); incomingData.SetEffectiveDate(DateTime.Now); try { var supp = BuildScrapNoteOrderExchangeMes(supplier); incomingData.DestinationDataContent = JsonSerializer.Serialize(supp); incomingData.SetId(_guidGenerator.Create()); } catch (Exception ex) { incomingData.SetError(EnumExchangeDataErrorCode.Exception, ex.Message, ex.ToString()); } incomingDataList.Add(incomingData); } return incomingDataList; } private IncomingFromExternal BuildIncomingFromExternal(vmout supplier) { var dess = Cp850ToGBK(supplier.vmout_name); var incomingData = new IncomingFromExternal() { DataType = EnumIncomingDataType.Supplier.ToString(), DataAction = EnumExchangeDataAction.Add, SourceSystem = EnumSystemType.ERP.ToString(), SourceDataId = supplier.vmout_active, SourceDataGroupCode = supplier.vmout_vend, SourceDataDetailCode = "", SourceDataContent = JsonSerializer.Serialize(supplier), WriteTime = DateTime.Now, Writer = nameof(TyrpIncomingBackgroundWorker), DestinationSystem = EnumSystemType.ERP.ToString(), }; return incomingData; } private static SupplierExchangeDto BuildScrapNoteOrderExchangeMes(vmout supp) { bool state = true; if (supp.vmout_active == "N") { state = false; } var bm = new SupplierExchangeDto() { Code = supp.vmout_vend, ShortName = supp.vmout_short, Name = supp.vmout_name, IsActive = state, TaxRate = supp.vmout_rate, Contacts = supp.vmout_attn, Phone = supp.vmout_tel, Address = supp.vmout_comp_addr, Fax = supp.vmout_fax, }; return bm; } public static string Cp850ToGBK(string str) { try { var charsetGBK = System.Text.Encoding.GetEncoding("gbK").GetString(System.Text.Encoding.GetEncoding("cp850").GetBytes(str)); return charsetGBK; } catch (Exception) { return null; } } }