diff --git a/be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.Fawtyg.TyrpAgent/Outgoing/AssembleIssueNoteConverter.cs b/be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.Fawtyg.TyrpAgent/Outgoing/AssembleIssueNoteConverter.cs new file mode 100644 index 000000000..375faace0 --- /dev/null +++ b/be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.Fawtyg.TyrpAgent/Outgoing/AssembleIssueNoteConverter.cs @@ -0,0 +1,142 @@ +using System; +using System.Collections.Generic; +using System.Linq; +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 AssembleIssueNoteConverter : IOutgoingConverter +{ + private readonly string billtype = "4026"; + private readonly IOutgoingFromWmsManager _outgoingFromWmsManager; + private readonly IOutgoingToExternalManager _outgoingToExternalManager; + private readonly IObjectMapper _objectMapper; + + public AssembleIssueNoteConverter( + IOutgoingFromWmsManager outgoingFromWmsManager + , IOutgoingToExternalManager outgoingToExternalManager + , IObjectMapper objectMapper + ) + { + _outgoingFromWmsManager = outgoingFromWmsManager; + _outgoingToExternalManager = outgoingToExternalManager; + _objectMapper = objectMapper; + } + + public virtual async Task> ConvertAsync() + { + var outgoingToExternalList = new List(); + //获取要同步得数据 + var outgoingFromWmsList = await _outgoingFromWmsManager.GetToBeProcessedListAsync(EnumOutgoingDataType.AssembleIssue, EnumSystemType.ERP).ConfigureAwait(false); + foreach (var outgoingFromWms in outgoingFromWmsList) + { + string tyrpNumber = outgoingFromWms.TyrpNumber; + #region 主表 + var wmsReceipt = JsonSerializer.Deserialize(outgoingFromWms.DataContent); + var exchangeReceipt = _objectMapper.Map(wmsReceipt); + var putawayNote = BuildDataInterface(exchangeReceipt); + var outgoingToExternal = new OutgoingToExternal() + { + DataType = EnumOutgoingDataType.Issue.ToString(), + TableType = EnumExchangeTableType.MainTable, + DataAction = outgoingFromWms.DataAction, + SerialNumber = tyrpNumber, + 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 + var sumDetails = wmsReceipt.Details.GroupBy(r => new { r.ItemCode, r.HandledFromLocationErpCode, r.HandledToLocationErpCode }).Select(p => new AssembleIssueNoteDetailDTO { ItemCode = p.Key.ItemCode, HandledFromLocationErpCode = p.Key.HandledFromLocationErpCode, HandledToLocationErpCode = p.Key.HandledToLocationErpCode, HandledToQty = p.Sum(x => x.HandledToQty) }).ToList(); + #region 明细 + foreach (var detail in sumDetails) + { + var outgoingDetailToExternal = new OutgoingToExternal() + { + DataType = EnumOutgoingDataType.Issue.ToString(), + TableType = EnumExchangeTableType.DetailTable, + DataAction = outgoingFromWms.DataAction, + SerialNumber = tyrpNumber, + 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 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; + } + /// + /// 构建主表 + /// + /// + /// + private Scontrol BuildDataInterface(AssembleIssueNoteExchangeDto 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(AssembleIssueNoteExchangeDto exchangeOrder, AssembleIssueNoteDetailExchangeDto 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_date = DateTime.Now.ToString("yyyyMMdd"), + scmsend_qty = exchangeDetailOrder.Qty, + scmsend_wipd_loc = exchangeDetailOrder.ToLocationErpCode, + scmsend_userid = "WMS" + }; + return ret; + } +} diff --git a/be/DataExchange/src/Win_in.Sfs.Wms.DataExchange.Application.Contracts/WMS/IssueNote/AssembleIssueNote/AssembleIssueNoteDetailExchangeDto.cs b/be/DataExchange/src/Win_in.Sfs.Wms.DataExchange.Application.Contracts/WMS/IssueNote/AssembleIssueNote/AssembleIssueNoteDetailExchangeDto.cs new file mode 100644 index 000000000..c58436b83 --- /dev/null +++ b/be/DataExchange/src/Win_in.Sfs.Wms.DataExchange.Application.Contracts/WMS/IssueNote/AssembleIssueNote/AssembleIssueNoteDetailExchangeDto.cs @@ -0,0 +1,36 @@ +using System.ComponentModel.DataAnnotations; +using Win_in.Sfs.Shared.Domain; + +namespace Win_in.Sfs.Wms.DataExchange.WMS.PCK; + +public class AssembleIssueNoteDetailExchangeDto + +{ + + /// + /// 目标ERP库位 + /// + [Display(Name = "目标ERP库位")] + public string ToLocationErpCode { get; set; } + + public string FromPackingCode { get; set; } + /// + /// 来源ERP库位 + /// + public string FromLocationErpCode { get; set; } + + /// + /// 数量 + /// + [Display(Name = "数量")] + public decimal Qty { get; set; } + + /// + /// 物品代码 + /// + [Display(Name = "物品代码")] + [StringLength(SfsEfCorePropertyConst.CodeLength, ErrorMessage = "{0}最多输入{1}个字符")] + [Required(ErrorMessage = "{0}是必填项")] + public string ItemCode { get; set; } + +} diff --git a/be/DataExchange/src/Win_in.Sfs.Wms.DataExchange.Application.Contracts/WMS/IssueNote/AssembleIssueNote/AssembleIssueNoteExchangeDto.cs b/be/DataExchange/src/Win_in.Sfs.Wms.DataExchange.Application.Contracts/WMS/IssueNote/AssembleIssueNote/AssembleIssueNoteExchangeDto.cs new file mode 100644 index 000000000..22ff4899e --- /dev/null +++ b/be/DataExchange/src/Win_in.Sfs.Wms.DataExchange.Application.Contracts/WMS/IssueNote/AssembleIssueNote/AssembleIssueNoteExchangeDto.cs @@ -0,0 +1,29 @@ +using System; +using System.ComponentModel.DataAnnotations; + +namespace Win_in.Sfs.Wms.DataExchange.WMS.PCK; + +public class AssembleIssueNoteExchangeDto +{ + /// + /// 发料记录号 + /// + [Display(Name = "发料记录号")] + public string Number { get; set; } + /// + /// 生效日期 + /// + [Display(Name = "生效日期")] + public DateTime ActiveDate { get; set; } = DateTime.Now.Date; + + /// + /// 操作员 + /// + [Display(Name = "操作员")] + public string Worker { get; set; } + /// + /// 明细 + /// + [Display(Name = "明细")] + public AssembleIssueNoteDetailExchangeDto Detail { get; set; } = new(); +} 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 985dfb465..a2fdb0412 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 @@ -32,7 +32,20 @@ public enum EnumOutgoingDataType ProductRecycle = 24, Item_Transform = 25,//线边仓调整单 WIPAdjust = 26,//回收料调整单 - SemiPutaway=27//半成品上架 + SemiPutaway=27,//半成品上架 + /// + /// 注塑发料 + /// + InjectionIssue = 30, + /// + /// 涂装发料 + /// + CoatingIssue = 31, + /// + /// 装配发料 + /// + AssembleIssue = 32, + } public enum EnumExchangeTableType {