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.

141 lines
6.4 KiB

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.PutawayNote;
using Win_in.Sfs.Wms.Store.Application.Contracts;
namespace Win_in.Sfs.Wms.DataExchange.Fawtyg.TyrpAgent.Outgoing;
public class SemiPutawayNoteConverter : IOutgoingConverter
{
private readonly string billtype = "4002";
private readonly IOutgoingFromWmsManager _outgoingFromWmsManager;
private readonly IOutgoingToExternalManager _outgoingToExternalManager;
private readonly IObjectMapper _objectMapper;
private readonly IPurchaseOrderAppService _purchaseOrderAppService;
public SemiPutawayNoteConverter(
IOutgoingFromWmsManager outgoingFromWmsManager
, IOutgoingToExternalManager outgoingToExternalManager
, IObjectMapper objectMapper
, IPurchaseOrderAppService purchaseOrderAppService
)
{
_outgoingFromWmsManager = outgoingFromWmsManager;
_outgoingToExternalManager = outgoingToExternalManager;
_objectMapper = objectMapper;
_purchaseOrderAppService = purchaseOrderAppService;
}
public virtual async Task<List<OutgoingToExternal>> ConvertAsync()
{
var outgoingToExternalList = new List<OutgoingToExternal>();
//获取要同步得数据
var outgoingFromWmsList = await _outgoingFromWmsManager.GetToBeProcessedListAsync(EnumOutgoingDataType.SemiPutaway, EnumSystemType.ERP).ConfigureAwait(false);
foreach (var outgoingFromWms in outgoingFromWmsList)
{
#region 主表
var wmsReceipt = JsonSerializer.Deserialize<PutawayNoteDTO>(outgoingFromWms.DataContent);
var exchangeReceipt = _objectMapper.Map<PutawayNoteDTO, PutawayNoteExchangeDto>(wmsReceipt);
var semiPutaway = BuildDataInterface(exchangeReceipt);
var outgoingToExternal = new OutgoingToExternal()
{
DataType = EnumOutgoingDataType.SemiPutaway.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(semiPutaway);
outgoingToExternalList.Add(outgoingToExternal);
#endregion
#region 明细
foreach (var detail in wmsReceipt.Details)
{
var outgoingDetailToExternal = new OutgoingToExternal()
{
DataType = outgoingToExternal.DataType,
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<PutawayNoteDetailDTO, PutawayNoteDetailExchangeDto>(detail);
outgoingDetailToExternal.SourceDataContent = JsonSerializer.Serialize(exchangeReceiptDetail);
var SemiPutawayDetail = BuildDataInterfaceDetail(exchangeReceipt, exchangeReceiptDetail, semiPutaway.scontrol_dt_w);
outgoingDetailToExternal.DestinationDataContent = JsonSerializer.Serialize(SemiPutawayDetail);
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(PutawayNoteExchangeDto 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(PutawayNoteExchangeDto exchangeOrder, PutawayNoteDetailExchangeDto exchangeDetailOrder, string dt_w)
{
var ret = new Scmsend()
{
scmsend_type = billtype,
scmsend_dt_w = dt_w,
scmsend_nbr = exchangeOrder.Number,
scmsend_stat1 = "0",
scmsend_part = exchangeDetailOrder.ItemCode,
scmsend_delv_date = "",
scmsend_orderno = "",
scmsend_loc = exchangeDetailOrder.FromLocationErpCode,
2 years ago
//scmsend_date = exchangeOrder.ActiveDate.ToString("yyyyMMdd"),
scmsend_date = DateTime.Now.ToString("yyyyMMdd"),
scmsend_qty = exchangeDetailOrder.Qty,
scmsend_wipd_loc = exchangeDetailOrder.ToLocationErpCode,
scmsend_userid = "WMS"
};
return ret;
}
}