|
|
|
using System;
|
|
|
|
using System.Collections.Generic;
|
|
|
|
using System.Text.Json;
|
|
|
|
using System.Threading.Tasks;
|
|
|
|
using Volo.Abp.ObjectMapping;
|
|
|
|
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.PCK;
|
|
|
|
using Win_in.Sfs.Wms.Store.Application.Contracts;
|
|
|
|
|
|
|
|
namespace Win_in.Sfs.Wms.DataExchange.Fawtyg.TyrpAgent.Outgoing;
|
|
|
|
|
|
|
|
public class IssueNoteConverter : IOutgoingConverter
|
|
|
|
{
|
|
|
|
private readonly string billtype = "4026";
|
|
|
|
private readonly IOutgoingFromWmsManager _outgoingFromWmsManager;
|
|
|
|
private readonly IOutgoingToExternalManager _outgoingToExternalManager;
|
|
|
|
private readonly IObjectMapper _objectMapper;
|
|
|
|
|
|
|
|
public IssueNoteConverter(
|
|
|
|
IOutgoingFromWmsManager outgoingFromWmsManager
|
|
|
|
, IOutgoingToExternalManager outgoingToExternalManager
|
|
|
|
, IObjectMapper objectMapper
|
|
|
|
)
|
|
|
|
{
|
|
|
|
_outgoingFromWmsManager = outgoingFromWmsManager;
|
|
|
|
_outgoingToExternalManager = outgoingToExternalManager;
|
|
|
|
_objectMapper = objectMapper;
|
|
|
|
}
|
|
|
|
|
|
|
|
public virtual async Task<List<OutgoingToExternal>> ConvertAsync()
|
|
|
|
{
|
|
|
|
var outgoingToExternalList = new List<OutgoingToExternal>();
|
|
|
|
//获取要同步得数据
|
|
|
|
var outgoingFromWmsList = await _outgoingFromWmsManager.GetToBeProcessedListAsync(EnumOutgoingDataType.Issue, EnumSystemType.ERP).ConfigureAwait(false);
|
|
|
|
foreach (var outgoingFromWms in outgoingFromWmsList)
|
|
|
|
{
|
|
|
|
#region 主表
|
|
|
|
var wmsReceipt = JsonSerializer.Deserialize<IssueNoteDTO>(outgoingFromWms.DataContent);
|
|
|
|
var exchangeReceipt = _objectMapper.Map<IssueNoteDTO, IssueNoteExchangeDto>(wmsReceipt);
|
|
|
|
var putawayNote = BuildDataInterface(exchangeReceipt);
|
|
|
|
var outgoingToExternal = new OutgoingToExternal()
|
|
|
|
{
|
|
|
|
DataType = EnumOutgoingDataType.Issue.ToString(),
|
|
|
|
TableType = EnumExchangeTableType.MainTable,
|
|
|
|
DataAction = outgoingFromWms.DataAction,
|
|
|
|
SourceSystem = EnumSystemType.WMS.ToString(),
|
|
|
|
SourceDataId = wmsReceipt.Id.ToString(),
|
|
|
|
SourceDataGroupCode = wmsReceipt.Number,
|
|
|
|
SourceDataDetailCode = wmsReceipt.Number,
|
|
|
|
Writer = nameof(TyrpOutgoingBackgroundWorker),
|
|
|
|
DestinationSystem = EnumSystemType.ERP.ToString(),
|
|
|
|
DestinationDataId = "",
|
|
|
|
};
|
|
|
|
outgoingToExternal.SetEffectiveDate(outgoingFromWms.EffectiveDate);
|
|
|
|
outgoingToExternal.SourceDataContent = JsonSerializer.Serialize(exchangeReceipt);
|
|
|
|
outgoingToExternal.DestinationDataContent = JsonSerializer.Serialize(putawayNote);
|
|
|
|
outgoingToExternalList.Add(outgoingToExternal);
|
|
|
|
#endregion
|
|
|
|
|
|
|
|
#region 明细
|
|
|
|
foreach (var detail in wmsReceipt.Details)
|
|
|
|
{
|
|
|
|
var outgoingDetailToExternal = new OutgoingToExternal()
|
|
|
|
{
|
|
|
|
DataType = EnumOutgoingDataType.Issue.ToString(),
|
|
|
|
TableType = EnumExchangeTableType.DetailTable,
|
|
|
|
DataAction = outgoingFromWms.DataAction,
|
|
|
|
SourceSystem = EnumSystemType.WMS.ToString(),
|
|
|
|
SourceDataId = detail.Id.ToString(),
|
|
|
|
SourceDataGroupCode = wmsReceipt.Number,
|
|
|
|
SourceDataDetailCode = detail.ItemCode,
|
|
|
|
Writer = nameof(TyrpOutgoingBackgroundWorker),
|
|
|
|
DestinationSystem = EnumSystemType.ERP.ToString(),
|
|
|
|
DestinationDataId = "",
|
|
|
|
};
|
|
|
|
outgoingDetailToExternal.SetEffectiveDate(outgoingFromWms.EffectiveDate);
|
|
|
|
var exchangeReceiptDetail = _objectMapper.Map<IssueNoteDetailDTO, IssueNoteDetailExchangeDto>(detail);
|
|
|
|
outgoingDetailToExternal.SourceDataContent = JsonSerializer.Serialize(exchangeReceiptDetail);
|
|
|
|
var putawayNoteDetail = BuildDataInterfaceDetail(exchangeReceipt, exchangeReceiptDetail, putawayNote.scontrol_dt_w);
|
|
|
|
outgoingDetailToExternal.DestinationDataContent = JsonSerializer.Serialize(putawayNoteDetail);
|
|
|
|
outgoingToExternalList.Add(outgoingDetailToExternal);
|
|
|
|
}
|
|
|
|
#endregion
|
|
|
|
}
|
|
|
|
//插入到中间表OutgoingToExternal
|
|
|
|
await _outgoingToExternalManager.CreateManyAsync(outgoingToExternalList).ConfigureAwait(false);
|
|
|
|
//将outgoingFromWms数据归档
|
|
|
|
await _outgoingFromWmsManager.ArchiveManyAsync(outgoingFromWmsList).ConfigureAwait(false);
|
|
|
|
|
|
|
|
return outgoingToExternalList;
|
|
|
|
}
|
|
|
|
/// <summary>
|
|
|
|
/// 构建主表
|
|
|
|
/// </summary>
|
|
|
|
/// <param name="exchangeOrder"></param>
|
|
|
|
/// <returns></returns>
|
|
|
|
private Scontrol BuildDataInterface(IssueNoteExchangeDto exchangeOrder)
|
|
|
|
{
|
|
|
|
var ret = new Scontrol()
|
|
|
|
{
|
|
|
|
scontrol_nbr = exchangeOrder.Number,
|
|
|
|
scontrol_dt_w = DateTime.Now.ToString("yyyyMMdd HH:mm:ss"),
|
|
|
|
scontrol_stat = "Y",
|
|
|
|
scontrol_dt_k = "",
|
|
|
|
scontrol_type = billtype,
|
|
|
|
scontrol_id = 0,//明细中最大scmsend_id
|
|
|
|
};
|
|
|
|
return ret;
|
|
|
|
}
|
|
|
|
/// <summary>
|
|
|
|
/// 构建明细
|
|
|
|
/// </summary>
|
|
|
|
/// <param name="exchangeOrder"></param>
|
|
|
|
/// <param name="exchangeDetailOrder"></param>
|
|
|
|
/// <returns></returns>
|
|
|
|
private Scmsend BuildDataInterfaceDetail(IssueNoteExchangeDto exchangeOrder, IssueNoteDetailExchangeDto exchangeDetailOrder, string dt_w)
|
|
|
|
{
|
|
|
|
var ret = new Scmsend()
|
|
|
|
{
|
|
|
|
scmsend_type = billtype,
|
|
|
|
scmsend_dt_w = dt_w,
|
|
|
|
scmsend_nbr = exchangeOrder.Number,
|
|
|
|
scmsend_stat1 = "1",
|
|
|
|
scmsend_part = exchangeDetailOrder.ItemCode,
|
|
|
|
scmsend_delv_date = "",
|
|
|
|
scmsend_orderno = "",
|
|
|
|
scmsend_loc = exchangeDetailOrder.FromLocationErpCode,
|
|
|
|
scmsend_date = exchangeOrder.ActiveDate.ToString("yyyyMMdd"),
|
|
|
|
scmsend_qty = exchangeDetailOrder.Qty,
|
|
|
|
scmsend_wipd_loc = exchangeDetailOrder.ToLocationErpCode,
|
|
|
|
scmsend_userid ="WMS"
|
|
|
|
};
|
|
|
|
return ret;
|
|
|
|
}
|
|
|
|
}
|