diff --git a/be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.Fawtyg.TyrpAgent/Outgoing/SemiPutawayNoteConverter.cs b/be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.Fawtyg.TyrpAgent/Outgoing/SemiPutawayNoteConverter.cs new file mode 100644 index 000000000..6b449dfa2 --- /dev/null +++ b/be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.Fawtyg.TyrpAgent/Outgoing/SemiPutawayNoteConverter.cs @@ -0,0 +1,139 @@ +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> ConvertAsync() + { + var outgoingToExternalList = new List(); + //获取要同步得数据 + var outgoingFromWmsList = await _outgoingFromWmsManager.GetToBeProcessedListAsync(EnumOutgoingDataType.SemiPutaway, EnumSystemType.ERP).ConfigureAwait(false); + foreach (var outgoingFromWms in outgoingFromWmsList) + { + #region 主表 + var wmsReceipt = JsonSerializer.Deserialize(outgoingFromWms.DataContent); + var exchangeReceipt = _objectMapper.Map(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(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; + } + /// + /// 构建主表 + /// + /// + /// + 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; + } + /// + /// 构建明细 + /// + /// + /// + /// + 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, + scmsend_date = exchangeOrder.ActiveDate.ToString("yyyyMMdd"), + scmsend_qty = exchangeDetailOrder.Qty, + scmsend_wipd_loc = exchangeDetailOrder.ToLocationErpCode, + scmsend_userid = "WMS" + }; + return ret; + } +} diff --git a/be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.Fawtyg.TyrpAgent/Outgoing/TyrpOutgoingBackgroundWorker.cs b/be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.Fawtyg.TyrpAgent/Outgoing/TyrpOutgoingBackgroundWorker.cs index 7154286ad..8d2afaa7b 100644 --- a/be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.Fawtyg.TyrpAgent/Outgoing/TyrpOutgoingBackgroundWorker.cs +++ b/be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.Fawtyg.TyrpAgent/Outgoing/TyrpOutgoingBackgroundWorker.cs @@ -74,6 +74,11 @@ public class TyrpOutgoingBackgroundWorker : AsyncPeriodicBackgroundWorkerBase await scontrolWriter.WriteAsync(transferNoteForErpList).ConfigureAwait(false); await wmsoutmWriter.WriteAsync(transferNoteForCustomList).ConfigureAwait(false); + Logger.LogInformation($"Write SemiPutawayNote");//半成品上架 + var semiPutawayNoteConvert = workerContext.ServiceProvider.GetRequiredService(); + var semiPutawayNoteList = await semiPutawayNoteConvert.ConvertAsync().ConfigureAwait(false); + await scontrolWriter.WriteAsync(putawayNoteList).ConfigureAwait(false); + Logger.LogInformation($"Write ProductReceiptNote");//缴库单 var productReceiptNoteConvert = workerContext.ServiceProvider.GetRequiredService(); var productReceiptNoteList = await productReceiptNoteConvert.ConvertAsync().ConfigureAwait(false); diff --git a/be/DataExchange/src/Win_in.Sfs.Wms.DataExchange.Application.Contracts/WMS/PutawayNote/PutawayNoteDetailExchangeDto.cs b/be/DataExchange/src/Win_in.Sfs.Wms.DataExchange.Application.Contracts/WMS/PutawayNote/PutawayNoteDetailExchangeDto.cs index 21b82f5e1..bde760890 100644 --- a/be/DataExchange/src/Win_in.Sfs.Wms.DataExchange.Application.Contracts/WMS/PutawayNote/PutawayNoteDetailExchangeDto.cs +++ b/be/DataExchange/src/Win_in.Sfs.Wms.DataExchange.Application.Contracts/WMS/PutawayNote/PutawayNoteDetailExchangeDto.cs @@ -27,6 +27,12 @@ public class PutawayNoteDetailExchangeDto [Display(Name = "目标ERP库位")] public string ToLocationErpCode { get; set; } + /// + /// 来源ERP库位 + /// + [Display(Name = "来源ERP库位")] + public string FromLocationErpCode { get; set; } + /// /// 箱标签 /// diff --git a/be/DataExchange/src/Win_in.Sfs.Wms.DataExchange.Application.Contracts/Win_in.Sfs.Wms.DataExchange.Application.Contracts.xml b/be/DataExchange/src/Win_in.Sfs.Wms.DataExchange.Application.Contracts/Win_in.Sfs.Wms.DataExchange.Application.Contracts.xml index 61a7f4f0c..a3222aafa 100644 --- a/be/DataExchange/src/Win_in.Sfs.Wms.DataExchange.Application.Contracts/Win_in.Sfs.Wms.DataExchange.Application.Contracts.xml +++ b/be/DataExchange/src/Win_in.Sfs.Wms.DataExchange.Application.Contracts/Win_in.Sfs.Wms.DataExchange.Application.Contracts.xml @@ -1146,6 +1146,11 @@ 目标ERP库位 + + + 来源ERP库位 + + 箱标签 diff --git a/be/DataExchange/src/Win_in.Sfs.Wms.DataExchange.Domain.Shared/Enums/EnumOutgoingDataType.cs b/be/DataExchange/src/Win_in.Sfs.Wms.DataExchange.Domain.Shared/Enums/EnumOutgoingDataType.cs index 74cb9fe37..985dfb465 100644 --- a/be/DataExchange/src/Win_in.Sfs.Wms.DataExchange.Domain.Shared/Enums/EnumOutgoingDataType.cs +++ b/be/DataExchange/src/Win_in.Sfs.Wms.DataExchange.Domain.Shared/Enums/EnumOutgoingDataType.cs @@ -31,7 +31,8 @@ public enum EnumOutgoingDataType Scrap = 23, ProductRecycle = 24, Item_Transform = 25,//线边仓调整单 - WIPAdjust = 26//回收料调整单 + WIPAdjust = 26,//回收料调整单 + SemiPutaway=27//半成品上架 } public enum EnumExchangeTableType {