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.
71 lines
3.4 KiB
71 lines
3.4 KiB
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;
|
|
}
|
|
/// <summary>
|
|
/// 写入数据
|
|
/// </summary>
|
|
/// <param name="outgoingDataList"></param>
|
|
/// <returns></returns>
|
|
public virtual async Task WriteAsync(List<OutgoingToExternal> outgoingDataList)
|
|
{
|
|
|
|
var groups = outgoingDataList.Where(r=>r.Status!=EnumExchangeDataStatus.Error).GroupBy(r => r.SourceDataGroupCode);
|
|
foreach (var group in groups)
|
|
{
|
|
var dataInterfaceList = new List<Scontrol>();
|
|
var dataInterfaceDetailList = new List<Scmsend>();
|
|
var entitys = group.ToList();
|
|
|
|
foreach (var entity in entitys)
|
|
{
|
|
if (entity.TableType == EnumExchangeTableType.MainTable)//主表(MainTable)
|
|
{
|
|
var receipt = JsonSerializer.Deserialize<Scontrol>(entity.DestinationDataContent);
|
|
dataInterfaceList.Add(receipt);
|
|
}
|
|
else if (entity.TableType == EnumExchangeTableType.DetailTable) // 子表(DetailTable)
|
|
{
|
|
var receiptDetail = JsonSerializer.Deserialize<Scmsend>(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);
|
|
}
|
|
}
|
|
|