using System.Collections.Generic; using System.Linq; using System.Text.Json; using System.Threading.Tasks; using Volo.Abp.Uow; using Win_in.Sfs.Wms.DataExchange.Domain; using Win_in.Sfs.Wms.DataExchange.Domain.Fawtyg.Tyrp; using Win_in.Sfs.Wms.DataExchange.Domain.Shared; namespace Win_in.Sfs.Wms.DataExchange.Fawtyg.TyrpAgent.Outgoing; public class ScontrolWriter : IWriter { private readonly IScontrolManager _dataInterfaceManager; private readonly IOutgoingToExternalManager _outgoingToExternalManager; public ScontrolWriter(IScontrolManager dataInterfaceManager, IOutgoingToExternalManager outgoingToExternalManager) { _dataInterfaceManager = dataInterfaceManager; _outgoingToExternalManager = outgoingToExternalManager; } /// /// 写入数据 /// /// /// public virtual async Task WriteAsync(List outgoingDataList) { var groups = outgoingDataList.Where(r=>r.Status!=EnumExchangeDataStatus.Error).GroupBy(r => r.SourceDataGroupCode); foreach (var group in groups) { var dataInterfaceList = new List(); var dataInterfaceDetailList = new List(); var entitys = group.ToList(); foreach (var entity in entitys) { if (entity.TableType == EnumExchangeTableType.MainTable)//主表(MainTable) { var receipt = JsonSerializer.Deserialize(entity.DestinationDataContent); dataInterfaceList.Add(receipt); } else if (entity.TableType == EnumExchangeTableType.DetailTable) // 子表(DetailTable) { var receiptDetail = JsonSerializer.Deserialize(entity.DestinationDataContent); dataInterfaceDetailList.Add(receiptDetail); } } try { //零件号和ERP库位以及单据号相同则汇总 //var groupScmsends= dataInterfaceDetailList.GroupBy(r => new { r.scmsend_type, r.scmsend_dt_w, r.scmsend_nbr, r.scmsend_stat1, r.scmsend_part, r.scmsend_delv_date, r.scmsend_orderno, r.scmsend_loc, r.scmsend_date, r.scmsend_wipd_loc, r.scmsend_userid }) // .Select(p=>new Scmsend { scmsend_type = p.Key.scmsend_type , scmsend_dt_w =p.Key.scmsend_dt_w , scmsend_nbr =p.Key.scmsend_nbr , scmsend_stat1 =p.Key.scmsend_stat1 , scmsend_part =p.Key.scmsend_part // , scmsend_delv_date =p.Key.scmsend_delv_date , scmsend_orderno =p.Key.scmsend_orderno , scmsend_loc =p.Key.scmsend_loc , scmsend_date=p.Key.scmsend_date, scmsend_wipd_loc = p.Key.scmsend_wipd_loc, // scmsend_userid=p.Key.scmsend_userid,scmsend_qty=p.Sum(itm=>itm.scmsend_qty)} ).ToList(); //dataInterface分主子表分别写入ERP await _dataInterfaceManager.PostListAsync(dataInterfaceList, dataInterfaceDetailList).ConfigureAwait(false); } catch (System.Exception ex) { foreach (var item in entitys) { item.SetError(EnumExchangeDataErrorCode.Exception, ex.Message, ex.ToString()); } } } //将数据归档 await _outgoingToExternalManager.ArchiveManyAsync(outgoingDataList).ConfigureAwait(false); } }