diff --git a/be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.Fawtyg.MesAgent/Incoming/MesOutConverter.cs b/be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.Fawtyg.MesAgent/Incoming/MesOutConverter.cs index c02ec3312..ae1c74d65 100644 --- a/be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.Fawtyg.MesAgent/Incoming/MesOutConverter.cs +++ b/be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.Fawtyg.MesAgent/Incoming/MesOutConverter.cs @@ -6,10 +6,12 @@ using System.Threading.Tasks; using Microsoft.Extensions.Configuration; using Microsoft.Extensions.Logging; using Org.BouncyCastle.Asn1.Pkcs; +using Volo.Abp.Data; using Volo.Abp.ObjectMapping; using Win_in.Sfs.Basedata.Application.Contracts; using Win_in.Sfs.Shared.Domain.Shared; using Win_in.Sfs.Wms.DataExchange.Domain; +using Win_in.Sfs.Wms.DataExchange.Domain.Shared; using Win_in.Sfs.Wms.DataExchange.WMS.ProductReceiptNote; using Win_in.Sfs.Wms.Store.Application.Contracts; using Win_in.Sfs.Wms.Store.Domain; @@ -62,7 +64,7 @@ public class MesOutConverter : IIncomingConverter { List types = new List { EnumLocationType.FG, EnumLocationType.WIP }; var incomingToWmsList = new List(); - var groups = incomingDataList.GroupBy(p => p.SourceDataGroupCode); + var groups = incomingDataList.GroupBy(p => new { p.SourceDataGroupCode, p.TableType });//按照库位和是为为返喷分组 foreach (var group in groups) { var first = group.First(); @@ -80,15 +82,26 @@ public class MesOutConverter : IIncomingConverter wmsProductReceiptNote.Worker = "MES";//操作人 wmsProductReceiptNote.ReceiptType = EnumReceiptType.MesScanReceipt;//完工收货方式 wmsProductReceiptNote.Details = new List(); - + List sumDetails = new List(); foreach (var incomingFromExternal in group.ToList()) { + ProductReceiptNoteSumDetailExchangeDto sumdetail = new ProductReceiptNoteSumDetailExchangeDto(); var productReceiptNote = JsonSerializer.Deserialize(incomingFromExternal.DestinationDataContent); var wmsProductReceiptNoteDetail = _objectMapper.Map(productReceiptNote.Detail); - var oldNoteDetail= wmsProductReceiptNote.Details.FirstOrDefault(r => r.ItemCode == wmsProductReceiptNoteDetail.ItemCode && r.LocationErpCode == wmsProductReceiptNoteDetail.LocationErpCode); + + var oldNoteDetail= wmsProductReceiptNote.Details.FirstOrDefault(r => r.ItemCode == wmsProductReceiptNoteDetail.ItemCode && r.LocationErpCode == wmsProductReceiptNoteDetail.LocationErpCode &&(first.TableType != EnumExchangeTableType.MainTable?true:r.ReturnQty!=0 )); + + sumdetail.itemCode = wmsProductReceiptNoteDetail.ItemCode; + sumdetail.locationCode = wmsProductReceiptNoteDetail.LocationErpCode; + sumdetail.Qty = wmsProductReceiptNoteDetail.Qty; + sumdetail.BadQty = wmsProductReceiptNoteDetail.ReturnQty; + sumdetail.Memo = wmsProductReceiptNoteDetail.Remark; + sumdetail.MesGuid = incomingFromExternal.SourceDataId; + sumDetails.Add(sumdetail); if (oldNoteDetail != null) { oldNoteDetail.Qty = oldNoteDetail.Qty+wmsProductReceiptNoteDetail.Qty; + oldNoteDetail.ReturnQty = oldNoteDetail.ReturnQty + wmsProductReceiptNoteDetail.ReturnQty; } else { @@ -141,6 +154,8 @@ public class MesOutConverter : IIncomingConverter wmsProductReceiptNote.Details.Add(wmsProductReceiptNoteDetail); } } + wmsProductReceiptNote.ExtraProperties = new ExtraPropertyDictionary(); + wmsProductReceiptNote.ExtraProperties.Add(first.SourceDataGroupCode, JsonSerializer.Serialize(sumDetails)); incomingToWms.DataContent = JsonSerializer.Serialize(wmsProductReceiptNote); incomingToWmsList.Add(incomingToWms); } diff --git a/be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.Fawtyg.MesAgent/Incoming/MesOutReader.cs b/be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.Fawtyg.MesAgent/Incoming/MesOutReader.cs index 10845124b..696c7c586 100644 --- a/be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.Fawtyg.MesAgent/Incoming/MesOutReader.cs +++ b/be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.Fawtyg.MesAgent/Incoming/MesOutReader.cs @@ -65,7 +65,7 @@ public class MesOutReader : IReader foreach (var mesOut in toBeProcessedMesOuts) { var incomingData = BuildIncomingFromExternal(mesOut); - + incomingData.SetEffectiveDate(DateTime.ParseExact(mesOut.Mesout_date, "yyyyMMdd", System.Globalization.CultureInfo.CurrentCulture)); incomingData.SetSuccess(); try @@ -119,6 +119,11 @@ public class MesOutReader : IReader DestinationSystem = EnumSystemType.WMS.ToString(), }; + //返喷数不为零用tabletype标志出来,用于后续汇总 + if (mesOut.Mesout_bad != 0) + { + incomingData.TableType = EnumExchangeTableType.MainTable; + } return incomingData; } diff --git a/be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.Fawtyg.MesAgent/Properties/launchSettings.json b/be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.Fawtyg.MesAgent/Properties/launchSettings.json new file mode 100644 index 000000000..33504c948 --- /dev/null +++ b/be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.Fawtyg.MesAgent/Properties/launchSettings.json @@ -0,0 +1,8 @@ +{ + "profiles": { + "WSL": { + "commandName": "WSL2", + "distributionName": "" + } + } +} \ No newline at end of file diff --git a/be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.Fawtyg.MesAgent/appsettings.json b/be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.Fawtyg.MesAgent/appsettings.json index 865028c94..a5a6cb1d9 100644 --- a/be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.Fawtyg.MesAgent/appsettings.json +++ b/be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.Fawtyg.MesAgent/appsettings.json @@ -1,8 +1,8 @@ { "ConnectionStrings": { - "Default": "Server=10.164.113.32,1818\\SHDB;Database=Wms_Dy_ShangHai;uid=ShWmsUser;pwd=Faty@Wms_20230413#SH;TrustServerCertificate=True", - "DataExchange": "Server=10.164.113.32,1818\\SHDB;Database=Wms_DataExchange_Main_Dy_ShangHai;uid=ShWmsUser;pwd=Faty@Wms_20230413#SH;TrustServerCertificate=True", - "MES": "Server=10.164.113.32,1818\\SHDB;Database=MES_SH;uid=ShWmsUser;pwd=Faty@Wms_20230413#SH;TrustServerCertificate=True" + "Default": "Server=10.164.113.32,1818\\SHDB;Database=Wms_Dy_ShangHai;uid=ShWmsUser;pwd=Faty@Wms_20230413#SH;TrustServerCertificate=True;Encrypt=false", + "DataExchange": "Server=10.164.113.32,1818\\SHDB;Database=Wms_DataExchange_Main_Dy_ShangHai;uid=ShWmsUser;pwd=Faty@Wms_20230413#SH;TrustServerCertificate=True;Encrypt=false", + "MES": "Server=10.164.113.32,1818\\SHDB;Database=MES_SH;uid=ShWmsUser;pwd=Faty@Wms_20230413#SH;TrustServerCertificate=True;Encrypt=false" }, "AuthServer": { diff --git a/be/DataExchange/src/Win_in.Sfs.Wms.DataExchange.Agent/AgentModule.cs b/be/DataExchange/src/Win_in.Sfs.Wms.DataExchange.Agent/AgentModule.cs index 31b6599f3..ef33dc6dd 100644 --- a/be/DataExchange/src/Win_in.Sfs.Wms.DataExchange.Agent/AgentModule.cs +++ b/be/DataExchange/src/Win_in.Sfs.Wms.DataExchange.Agent/AgentModule.cs @@ -48,16 +48,16 @@ public class AgentModule : AbpModule { PreConfigure(options => { - //Polly 重试3次 - options.ProxyClientBuildActions.Add((remoteServiceName, clientBuilder) => - { - clientBuilder.AddTransientHttpErrorPolicy(policyBuilder => - policyBuilder.WaitAndRetryAsync( - 3, - i => TimeSpan.FromSeconds(Math.Pow(2, i)) - ) - ); - }); + // Polly 重试3次 + //options.ProxyClientBuildActions.Add((remoteServiceName, clientBuilder) => + //{ + // clientBuilder.AddTransientHttpErrorPolicy(policyBuilder => + // policyBuilder.WaitAndRetryAsync( + // 1, + // i => TimeSpan.FromSeconds(Math.Pow(2, i)) + // ) + // ); + //}); //默认添加Authorization Header: Bearer Token options.ProxyClientActions.Add((a, s, h) => diff --git a/be/DataExchange/src/Win_in.Sfs.Wms.DataExchange.Agent/IncomingToWmsWorker.cs b/be/DataExchange/src/Win_in.Sfs.Wms.DataExchange.Agent/IncomingToWmsWorker.cs index 02899143f..b9e81463a 100644 --- a/be/DataExchange/src/Win_in.Sfs.Wms.DataExchange.Agent/IncomingToWmsWorker.cs +++ b/be/DataExchange/src/Win_in.Sfs.Wms.DataExchange.Agent/IncomingToWmsWorker.cs @@ -237,6 +237,8 @@ public class IncomingToWmsWorker : AsyncPeriodicBackgroundWorkerBase if (!string.IsNullOrEmpty(_options.Value.IncomingOptions.apiUrl)) { var productReceiptJson = JsonSerializer.Deserialize(incomingToWms.DataContent); + var memos = productReceiptJson.Details.Select(r => r.Remark).ToList(); + string memostr = String.Join(", ", memos); productReceiptJson.Worker = "Mes"; try { @@ -256,6 +258,7 @@ public class IncomingToWmsWorker : AsyncPeriodicBackgroundWorkerBase // 读取响应内容并返回 string responseBody = await response.Content.ReadAsStringAsync().ConfigureAwait(false); + Logger.LogInformation("标签"+memostr); } catch (HttpRequestException ex) { diff --git a/be/DataExchange/src/Win_in.Sfs.Wms.DataExchange.Agent/appsettings.json b/be/DataExchange/src/Win_in.Sfs.Wms.DataExchange.Agent/appsettings.json index 3ff6fe613..156e965e2 100644 --- a/be/DataExchange/src/Win_in.Sfs.Wms.DataExchange.Agent/appsettings.json +++ b/be/DataExchange/src/Win_in.Sfs.Wms.DataExchange.Agent/appsettings.json @@ -42,14 +42,14 @@ "IncomingOptions": { "Active": true, "PeriodSeconds": 10, - "RetryTimes": 3, + "RetryTimes": 1, "BatchSize": 100, "apiUrl": "http://10.164.113.31:60085/" }, "OutgoingOptions": { "Active": false, "PeriodSeconds": 10, - "RetryTimes": 3, + "RetryTimes": 1, "BatchSize": 100, "BaseUrl": "https://localhost:7034/test", "Username": "username", diff --git a/be/DataExchange/src/Win_in.Sfs.Wms.DataExchange.Application.Contracts/WMS/ProductReceiptNote/ProductReceiptNoteSumDetailExchangeDto.cs b/be/DataExchange/src/Win_in.Sfs.Wms.DataExchange.Application.Contracts/WMS/ProductReceiptNote/ProductReceiptNoteSumDetailExchangeDto.cs new file mode 100644 index 000000000..8e3362769 --- /dev/null +++ b/be/DataExchange/src/Win_in.Sfs.Wms.DataExchange.Application.Contracts/WMS/ProductReceiptNote/ProductReceiptNoteSumDetailExchangeDto.cs @@ -0,0 +1,53 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel.DataAnnotations; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Xml.Linq; + +namespace Win_in.Sfs.Wms.DataExchange.WMS.ProductReceiptNote; +public class ProductReceiptNoteSumDetailExchangeDto +{ + /// + /// 零件编号 + /// + [Display(Name = "零件编号")] + public string itemCode { get; set; } + /// + /// 库位编码 + /// + [Display(Name = "零件编号")] + public string locationCode { get; set; } + + /// + /// MesGuid + /// + [Display(Name = "MesGuid")] + public string MesGuid { get; set; } + + /// + /// id + /// + [Display(Name = "id")] + public string Memo { get; set; } + + /// + /// 生效日期 + /// + [Display(Name = "生效日期")] + public DateTime CreatDate { get; set; } = DateTime.Now.Date; + + /// + /// 数量 + /// + [Display(Name = "数量")] + public decimal Qty { get; set; } + + /// + /// 返喷数量 + /// + [Display(Name = "返喷数量")] + public decimal BadQty { 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 01d68a873..880561d6c 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 @@ -841,6 +841,41 @@ 明细列表 + + + 零件编号 + + + + + 库位编码 + + + + + MesGuid + + + + + id + + + + + 生效日期 + + + + + 数量 + + + + + 返喷数量 + + 产成品物料号 diff --git a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Requests/DeliverRequests/DeliverRequestFisAppService.cs b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Requests/DeliverRequests/DeliverRequestFisAppService.cs index 9e25e6475..d25188d64 100644 --- a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Requests/DeliverRequests/DeliverRequestFisAppService.cs +++ b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Requests/DeliverRequests/DeliverRequestFisAppService.cs @@ -196,6 +196,13 @@ public class DeliverRequestFisAppService : #region import + protected override async Task ValidateImportModelAsync(DeliverRequestFisImportInput model, List validationRresult) + { + await CheckImportInputBusinessAsync(model,EnumImportMethod.Append,validationRresult).ConfigureAwait(false); + + await base.ValidateImportModelAsync(model, validationRresult).ConfigureAwait(false); + } + protected virtual async Task CheckImportInputBusinessAsync( DeliverRequestFisImportInput importInput, EnumImportMethod importMethod,