diff --git a/be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.Domain.Fawtyg.Mes/Frozen/Frozen.cs b/be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.Domain.Fawtyg.Mes/Frozen/Frozen.cs index 9ae130400..3a9c348db 100644 --- a/be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.Domain.Fawtyg.Mes/Frozen/Frozen.cs +++ b/be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.Domain.Fawtyg.Mes/Frozen/Frozen.cs @@ -8,7 +8,7 @@ public class Frozen : Entity /// 序号 /// [Key] - public string mesout_frozen_id { get; set; } + public long mesout_frozen_id { get; set; } /// /// 类型 /// diff --git a/be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.Fawtyg.EosAgent/Incoming/EosIncomingBackgroundWorker.cs b/be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.Fawtyg.EosAgent/Incoming/EosIncomingBackgroundWorker.cs index b3a743d81..ae5bc9f51 100644 --- a/be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.Fawtyg.EosAgent/Incoming/EosIncomingBackgroundWorker.cs +++ b/be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.Fawtyg.EosAgent/Incoming/EosIncomingBackgroundWorker.cs @@ -5,6 +5,7 @@ using Microsoft.Extensions.Options; using Volo.Abp.BackgroundWorkers; using Volo.Abp.Threading; using Volo.Abp.Uow; +using Win_in.Sfs.Wms.DataExchange.Domain; using Win_in.Sfs.Wms.DataExchange.Fawtyg.EosAgent.Incoming; namespace Win_in.Sfs.Wms.DataExchange.Fawtyg.EosAgent; @@ -29,10 +30,23 @@ public class EosIncomingBackgroundWorker : AsyncPeriodicBackgroundWorkerBase protected override async Task DoWorkAsync(PeriodicBackgroundWorkerContext workerContext) { Logger.LogInformation($"开始: 执行 {Incoming}"); - if (!_options.Value.IncomingOptions.Active) + var configManager = workerContext.ServiceProvider.GetRequiredService(); + var confitem = await configManager.GetInterfaceConfig("").ConfigureAwait(false); + if (confitem == null) { - Logger.LogInformation($"{Incoming} 已关闭没有执行!"); - return; + if (!_options.Value.IncomingOptions.Active) + { + Logger.LogInformation($"{Incoming} 已关闭没有执行!"); + return; + } + } + else + { + if (!confitem.Active) + { + Logger.LogInformation($"{Incoming} 已关闭没有执行!"); + return; + } } Logger.LogInformation($"读取 采购订单"); diff --git a/be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.Fawtyg.MesAgent/Incoming/FrozenReader.cs b/be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.Fawtyg.MesAgent/Incoming/FrozenReader.cs index 75b4f9ba5..1006d1701 100644 --- a/be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.Fawtyg.MesAgent/Incoming/FrozenReader.cs +++ b/be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.Fawtyg.MesAgent/Incoming/FrozenReader.cs @@ -86,7 +86,7 @@ public class FrozenReader : IReader DataAction = EnumExchangeDataAction.Add, SourceSystem = EnumSystemType.MES.ToString(), SourceDataId = Frozen.mesout_frozen_id.ToString(), - SourceDataGroupCode = Frozen.mesout_frozen_id, + SourceDataGroupCode = Frozen.mesout_frozen_id.ToString(), SourceDataDetailCode = Frozen.mesout_frozen_part, SourceDataContent = JsonSerializer.Serialize(Frozen), WriteTime = DateTime.Now, @@ -101,7 +101,7 @@ public class FrozenReader : IReader { var mesNote = new MesNoteExchangeDto() { - MesRequestNumber=Frozen.mesout_frozen_id, + MesRequestNumber=Frozen.mesout_frozen_id.ToString(), Worker = Frozen.mesout_frozen_user, Remark = Frozen.mesout_frozen_reason, Type = Frozen.mesout_frozen_type == "0" ? EnumTransType.MesFreezed.ToString() : EnumTransType.MesUnFreezed.ToString(), diff --git a/be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.Fawtyg.MesAgent/Incoming/MesIncomingBackgroundWorker.cs b/be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.Fawtyg.MesAgent/Incoming/MesIncomingBackgroundWorker.cs index 3824bb5e3..53d3fec9f 100644 --- a/be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.Fawtyg.MesAgent/Incoming/MesIncomingBackgroundWorker.cs +++ b/be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.Fawtyg.MesAgent/Incoming/MesIncomingBackgroundWorker.cs @@ -45,24 +45,36 @@ public class MesIncomingBackgroundWorker : AsyncPeriodicBackgroundWorkerBase return; } - #region 缴库 MesOut - Logger.LogInformation($"读取缴库(MesOut)");//缴库 - var mesOutReader = workerContext.ServiceProvider.GetRequiredService(); - var mesOutConverter = workerContext.ServiceProvider.GetRequiredService(); - var TransferNoteConverter = workerContext.ServiceProvider.GetRequiredService(); - //读取mes缴库 - var mesOutsFromExternalList = await mesOutReader.ReadAsync().ConfigureAwait(false); - var mesOutsFromExternalList_ProductReceipt = mesOutsFromExternalList.Where(r => r.DataType == EnumIncomingDataType.ProductReceipt.ToString()).ToList(); - var mesOutsFromExternalList_TransferNote = mesOutsFromExternalList.Where(r => r.DataType == EnumIncomingDataType.TransferNote.ToString()).ToList(); - //转换缴库数据(如果有质量补得数据直接生产移库数据移到客户库位) - await mesOutConverter.ConvertAsync(mesOutsFromExternalList_ProductReceipt).ConfigureAwait(false); - if (mesOutsFromExternalList_TransferNote.Count > 0)//如果有质量补则生产储位调拨任务 - { - await TransferNoteConverter.ConvertAsync(mesOutsFromExternalList_TransferNote).ConfigureAwait(false); - } - Logger.LogInformation($"处理完工收货(缴库)【{mesOutsFromExternalList_ProductReceipt.Count}】条数据"); - Logger.LogInformation($"处理储位调拨【{mesOutsFromExternalList_TransferNote.Count}】条数据"); - #endregion + //#region 缴库 MesOut + //Logger.LogInformation($"读取缴库(MesOut)");//缴库 + //var mesOutReader = workerContext.ServiceProvider.GetRequiredService(); + //var mesOutConverter = workerContext.ServiceProvider.GetRequiredService(); + //var TransferNoteConverter = workerContext.ServiceProvider.GetRequiredService(); + ////读取mes缴库 + //var mesOutsFromExternalList = await mesOutReader.ReadAsync().ConfigureAwait(false); + //var mesOutsFromExternalList_ProductReceipt = mesOutsFromExternalList.Where(r => r.DataType == EnumIncomingDataType.ProductReceipt.ToString()).ToList(); + //var mesOutsFromExternalList_TransferNote = mesOutsFromExternalList.Where(r => r.DataType == EnumIncomingDataType.TransferNote.ToString()).ToList(); + ////转换缴库数据(如果有质量补得数据直接生产移库数据移到客户库位) + //await mesOutConverter.ConvertAsync(mesOutsFromExternalList_ProductReceipt).ConfigureAwait(false); + //if (mesOutsFromExternalList_TransferNote.Count > 0)//如果有质量补则生产储位调拨任务 + //{ + // await TransferNoteConverter.ConvertAsync(mesOutsFromExternalList_TransferNote).ConfigureAwait(false); + //} + //Logger.LogInformation($"处理完工收货(缴库)【{mesOutsFromExternalList_ProductReceipt.Count}】条数据"); + //Logger.LogInformation($"处理储位调拨【{mesOutsFromExternalList_TransferNote.Count}】条数据"); + //#endregion + + //#region 冻结解冻 Frozen + //Logger.LogInformation($"读取冻结解冻 (Frozen)");//冻结解冻 + //var FrozenReader = workerContext.ServiceProvider.GetRequiredService(); + //var FrozenConverter = workerContext.ServiceProvider.GetRequiredService(); + ////读取并保存Frozen + //var mesNoteFromExternalList = await FrozenReader.ReadAsync().ConfigureAwait(false); + ////转换Frozen + //await FrozenConverter.ConvertAsync(mesNoteFromExternalList).ConfigureAwait(false); + //Logger.LogInformation($"处理冻结解冻【{mesNoteFromExternalList.Count}】条数据"); + //#endregion + #region 报废 Scrap Logger.LogInformation($"读取报废(Scrap)");//报废 @@ -75,61 +87,52 @@ public class MesIncomingBackgroundWorker : AsyncPeriodicBackgroundWorkerBase Logger.LogInformation($"处理报废【{scrapsFromExternalList.Count}】条数据"); #endregion - #region 耗用单 BackFlush - Logger.LogInformation($"读取耗用单 (BackFlush)");//耗用单 - var BackFlushReader = workerContext.ServiceProvider.GetRequiredService(); - var BackFlushConverter = workerContext.ServiceProvider.GetRequiredService(); - //读取并保存BackFlush - var backFlushsFromExternalList = await BackFlushReader.ReadAsync().ConfigureAwait(false); - //转换BackFlush - await BackFlushConverter.ConvertAsync(backFlushsFromExternalList).ConfigureAwait(false); - Logger.LogInformation($"处理耗用单【{backFlushsFromExternalList.Count}】条数据"); - #endregion - - #region 储位调拨 TransferNote - Logger.LogInformation($"读取储位调拨 (TransferNote)");//储位调拨 - var TransferNoteReader = workerContext.ServiceProvider.GetRequiredService(); - // var TransferNoteConverter = workerContext.ServiceProvider.GetRequiredService(); - //读取并保存TransferNote - var transferNoteFromExternalList = await TransferNoteReader.ReadAsync().ConfigureAwait(false); - //转换TransferNote - await TransferNoteConverter.ConvertAsync(transferNoteFromExternalList).ConfigureAwait(false); - Logger.LogInformation($"处理储位调拨【{transferNoteFromExternalList.Count}】条数据"); - #endregion - - #region 冻结解冻 Frozen - Logger.LogInformation($"读取冻结解冻 (Frozen)");//冻结解冻 - var FrozenReader = workerContext.ServiceProvider.GetRequiredService(); - var FrozenConverter = workerContext.ServiceProvider.GetRequiredService(); - //读取并保存Frozen - var mesNoteFromExternalList = await FrozenReader.ReadAsync().ConfigureAwait(false); - //转换Frozen - await FrozenConverter.ConvertAsync(mesNoteFromExternalList).ConfigureAwait(false); - Logger.LogInformation($"处理冻结解冻【{mesNoteFromExternalList.Count}】条数据"); - #endregion - - #region 成品发运 Delivery - Logger.LogInformation($"读取成品发运 (Delivery)");//成品发运 - var DeliveryReader = workerContext.ServiceProvider.GetRequiredService(); - var DeliveryConverter = workerContext.ServiceProvider.GetRequiredService(); - //读取并保存Delivery - var deliveryNoteFromExternalList = await DeliveryReader.ReadAsync().ConfigureAwait(false); - //转换Delivery - await DeliveryConverter.ConvertAsync(deliveryNoteFromExternalList).ConfigureAwait(false); - Logger.LogInformation($"处理成品发运【{deliveryNoteFromExternalList.Count}】条数据"); - #endregion - - #region 自动叫料 CallMtl - - Logger.LogInformation($"读取自动叫料 (CallMtl)");//自动叫料 - var CallMtlReader = workerContext.ServiceProvider.GetRequiredService(); - var CallMtlConverter = workerContext.ServiceProvider.GetRequiredService(); - //读取并保存Delivery - var callMtlFromExternalList = await CallMtlReader.ReadAsync().ConfigureAwait(false); - //转换Delivery - await CallMtlConverter.ConvertAsync(callMtlFromExternalList).ConfigureAwait(false); - Logger.LogInformation($"处理自动叫料【{callMtlFromExternalList.Count}】条数据"); - #endregion + //#region 耗用单 BackFlush + //Logger.LogInformation($"读取耗用单 (BackFlush)");//耗用单 + //var BackFlushReader = workerContext.ServiceProvider.GetRequiredService(); + //var BackFlushConverter = workerContext.ServiceProvider.GetRequiredService(); + ////读取并保存BackFlush + //var backFlushsFromExternalList = await BackFlushReader.ReadAsync().ConfigureAwait(false); + ////转换BackFlush + //await BackFlushConverter.ConvertAsync(backFlushsFromExternalList).ConfigureAwait(false); + //Logger.LogInformation($"处理耗用单【{backFlushsFromExternalList.Count}】条数据"); + //#endregion + + //#region 储位调拨 TransferNote + //Logger.LogInformation($"读取储位调拨 (TransferNote)");//储位调拨 + //var TransferNoteReader = workerContext.ServiceProvider.GetRequiredService(); + //// var TransferNoteConverter = workerContext.ServiceProvider.GetRequiredService(); + ////读取并保存TransferNote + //var transferNoteFromExternalList = await TransferNoteReader.ReadAsync().ConfigureAwait(false); + ////转换TransferNote + //await TransferNoteConverter.ConvertAsync(transferNoteFromExternalList).ConfigureAwait(false); + //Logger.LogInformation($"处理储位调拨【{transferNoteFromExternalList.Count}】条数据"); + //#endregion + + + + //#region 成品发运 Delivery + //Logger.LogInformation($"读取成品发运 (Delivery)");//成品发运 + //var DeliveryReader = workerContext.ServiceProvider.GetRequiredService(); + //var DeliveryConverter = workerContext.ServiceProvider.GetRequiredService(); + ////读取并保存Delivery + //var deliveryNoteFromExternalList = await DeliveryReader.ReadAsync().ConfigureAwait(false); + ////转换Delivery + //await DeliveryConverter.ConvertAsync(deliveryNoteFromExternalList).ConfigureAwait(false); + //Logger.LogInformation($"处理成品发运【{deliveryNoteFromExternalList.Count}】条数据"); + //#endregion + + //#region 自动叫料 CallMtl + + //Logger.LogInformation($"读取自动叫料 (CallMtl)");//自动叫料 + //var CallMtlReader = workerContext.ServiceProvider.GetRequiredService(); + //var CallMtlConverter = workerContext.ServiceProvider.GetRequiredService(); + ////读取并保存Delivery + //var callMtlFromExternalList = await CallMtlReader.ReadAsync().ConfigureAwait(false); + ////转换Delivery + //await CallMtlConverter.ConvertAsync(callMtlFromExternalList).ConfigureAwait(false); + //Logger.LogInformation($"处理自动叫料【{callMtlFromExternalList.Count}】条数据"); + //#endregion Logger.LogInformation($"提交: 执行 {Incoming}"); 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 28aa02cc5..59cf323ef 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 @@ -150,6 +150,6 @@ public class AgentModule : AbpModule ApplicationInitializationContext context) { context.AddBackgroundWorkerAsync(); - context.AddBackgroundWorkerAsync(); + // context.AddBackgroundWorkerAsync(); } } 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 8d93ccf90..8b5413752 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 @@ -49,16 +49,30 @@ public class IncomingToWmsWorker : AsyncPeriodicBackgroundWorkerBase [UnitOfWork] protected override async Task DoWorkAsync(PeriodicBackgroundWorkerContext workerContext) { - Logger.LogInformation("Starting: Handling Incoming Exchange data..."); - if (!_options.Value.IncomingOptions.Active) - { - Logger.LogInformation("Incoming Exchange is not active!"); - return; - } + Logger.LogInformation("开始接收数据..."); + // var configManager = workerContext.ServiceProvider.GetRequiredService(); + //var confitem = await configManager.GetInterfaceConfig("").ConfigureAwait(false); + // if (confitem == null) + // { + // if (!_options.Value.IncomingOptions.Active) + // { + // Logger.LogInformation("Wms接收接口已关闭!"); + // return; + // } + // } + // else + // { + // if (!confitem.Active) + // { + // Logger.LogInformation("Wms接收接口已关闭!"); + // return; + // } + // } + await HandleIncomingDataAsync(workerContext).ConfigureAwait(false); - Logger.LogInformation("Completed: Handling Incoming Exchange data..."); + Logger.LogInformation("提交接收数据..."); } private async Task HandleIncomingDataAsync(PeriodicBackgroundWorkerContext workerContext) @@ -93,7 +107,7 @@ public class IncomingToWmsWorker : AsyncPeriodicBackgroundWorkerBase incomingToWms.SetError(EnumExchangeDataErrorCode.Exception, e.Message); } //归档并删除 - await incomingToWmsManager.ArchiveAsync(incomingToWms).ConfigureAwait(false); + // await incomingToWmsManager.ArchiveAsync(incomingToWms).ConfigureAwait(false); } } diff --git a/be/DataExchange/src/Win_in.Sfs.Wms.DataExchange.Agent/OutgoingFromWmsWorker.cs b/be/DataExchange/src/Win_in.Sfs.Wms.DataExchange.Agent/OutgoingFromWmsWorker.cs index bafe08f81..bc8b8b739 100644 --- a/be/DataExchange/src/Win_in.Sfs.Wms.DataExchange.Agent/OutgoingFromWmsWorker.cs +++ b/be/DataExchange/src/Win_in.Sfs.Wms.DataExchange.Agent/OutgoingFromWmsWorker.cs @@ -29,6 +29,25 @@ public class OutgoingFromWmsWorker : AsyncPeriodicBackgroundWorkerBase [UnitOfWork] protected override async Task DoWorkAsync(PeriodicBackgroundWorkerContext workerContext) { + var configManager = workerContext.ServiceProvider.GetRequiredService(); + var confitem = await configManager.GetInterfaceConfig("").ConfigureAwait(false); + if (confitem == null) + { + if (!_options.Active) + { + Logger.LogInformation("Wms传出接口已关闭!"); + return; + } + } + else + { + if (!confitem.Active) + { + Logger.LogInformation("Wms传出接口已关闭!"); + return; + } + } + //Resolve dependencies var exchangeDataAppService = workerContext.ServiceProvider.GetRequiredService(); var objectMapper = workerContext.ServiceProvider.GetRequiredService(); 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 649886482..2e0324e5f 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 @@ -1,13 +1,13 @@ { "ConnectionStrings": { - "Default": "Server=10.164.233.6;Database=WMS_DongYang_Main_CC;uid=ccwin-in;pwd=Microsoft@2022;TrustServerCertificate=True", - "DataExchange": "Server=10.164.233.6;Database=WMS_DongYang_DataExchange_CC;uid=ccwin-in;pwd=Microsoft@2022;TrustServerCertificate=True" + "Default": "Server=dev.ccwin-in.com,13319;Database=WMS_DongYang_Main_CC;uid=ccwin-in;pwd=Microsoft@2022;TrustServerCertificate=True", + "DataExchange": "Server=dev.ccwin-in.com,13319;Database=WMS_DongYang_DataExchange_CC;uid=ccwin-in;pwd=Microsoft@2022;TrustServerCertificate=True" }, "AuthServer": { - "Authority": "http://10.164.233.5:60083/", + "Authority": "http://dev.ccwin-in.com:60083/", "RequireHttpsMetadata": "false", "SwaggerClientId": "admin", "SwaggerClientSecret": "1q2w3E*", @@ -26,16 +26,16 @@ "RemoteServices": { "BaseData": { - "BaseUrl": "http://10.164.233.5:60084/" + "BaseUrl": "http://localhost:59094/" }, "Store": { - "BaseUrl": "http://10.164.233.5:60085/" + "BaseUrl": "http://localhost:59095/" }, "Label": { - "BaseUrl": "http://10.164.233.5:60082/" + "BaseUrl": "http://dev.ccwin-in.com:60082/" }, "Auth": { - "BaseUrl": "http://10.164.233.5:60083/" + "BaseUrl": "http://dev.ccwin-in.com:60083/" } }, "DataExchangeOptions": { @@ -44,7 +44,7 @@ "PeriodSeconds": 10, "RetryTimes": 1, "BatchSize": 100, - "apiUrl": "http://10.164.233.5:60085/" + "apiUrl": "http://dev.ccwin-in.com:60085/" }, "OutgoingOptions": { "Active": false, diff --git a/be/DataExchange/src/Win_in.Sfs.Wms.DataExchange.DbMigrator/appsettings.json b/be/DataExchange/src/Win_in.Sfs.Wms.DataExchange.DbMigrator/appsettings.json index dec61c81a..1dfd30089 100644 --- a/be/DataExchange/src/Win_in.Sfs.Wms.DataExchange.DbMigrator/appsettings.json +++ b/be/DataExchange/src/Win_in.Sfs.Wms.DataExchange.DbMigrator/appsettings.json @@ -1,6 +1,6 @@ { "ConnectionStrings": { - "Default": "Server=dev.ccwin-in.com,21195;Database=DataExchange_Main;uid=sa;pwd=aA123456!;", + "Default": "Server=dev.ccwin-in.com,13319;Database=DataExchange_Main;uid=sa;pwd=aA123456!;", "DataExchange": "Server=dev.ccwin-in.com,21195;Database=DataExchange_Main;uid=sa;pwd=aA123456!;" }, "IdentityServer": { diff --git a/be/DataExchange/src/Win_in.Sfs.Wms.DataExchange.Domain/InterfaceConfig/IInterfaceConfigManager.cs b/be/DataExchange/src/Win_in.Sfs.Wms.DataExchange.Domain/InterfaceConfig/IInterfaceConfigManager.cs new file mode 100644 index 000000000..d72aabe2d --- /dev/null +++ b/be/DataExchange/src/Win_in.Sfs.Wms.DataExchange.Domain/InterfaceConfig/IInterfaceConfigManager.cs @@ -0,0 +1,7 @@ +using System.Threading.Tasks; + +namespace Win_in.Sfs.Wms.DataExchange.Domain; +public interface IInterfaceConfigManager +{ + Task GetInterfaceConfig(string code); +} diff --git a/be/DataExchange/src/Win_in.Sfs.Wms.DataExchange.Domain/InterfaceConfig/IInterfaceConfigRepository.cs b/be/DataExchange/src/Win_in.Sfs.Wms.DataExchange.Domain/InterfaceConfig/IInterfaceConfigRepository.cs new file mode 100644 index 000000000..4bfcc80cb --- /dev/null +++ b/be/DataExchange/src/Win_in.Sfs.Wms.DataExchange.Domain/InterfaceConfig/IInterfaceConfigRepository.cs @@ -0,0 +1,8 @@ +using System.Threading.Tasks; +using Win_in.Sfs.Wms.DataExchange.Domain; + +namespace Win_in.Sfs.Wms.DataExchange.Domain; +public interface IInterfaceConfigRepository +{ + Task GetInterfaceConfig(string code); +} diff --git a/be/DataExchange/src/Win_in.Sfs.Wms.DataExchange.Domain/InterfaceConfig/InterfaceConfig.cs b/be/DataExchange/src/Win_in.Sfs.Wms.DataExchange.Domain/InterfaceConfig/InterfaceConfig.cs new file mode 100644 index 000000000..9051cbac2 --- /dev/null +++ b/be/DataExchange/src/Win_in.Sfs.Wms.DataExchange.Domain/InterfaceConfig/InterfaceConfig.cs @@ -0,0 +1,23 @@ +using Win_in.Sfs.Shared.Domain; + +namespace Win_in.Sfs.Wms.DataExchange.Domain; +public class InterfaceConfig : SfsAggregateRootBase +{ + /// + /// 接口名称 + /// + public string Name { get; set; } + + /// + /// 编码 + /// + public string Code { get; set; } + /// + /// 是否启用 + /// + public bool Active { get; set; } + /// + /// 等级 + /// + public int Level { get; set; } +} diff --git a/be/DataExchange/src/Win_in.Sfs.Wms.DataExchange.Domain/InterfaceConfig/InterfaceConfigManager.cs b/be/DataExchange/src/Win_in.Sfs.Wms.DataExchange.Domain/InterfaceConfig/InterfaceConfigManager.cs new file mode 100644 index 000000000..6c6a2430c --- /dev/null +++ b/be/DataExchange/src/Win_in.Sfs.Wms.DataExchange.Domain/InterfaceConfig/InterfaceConfigManager.cs @@ -0,0 +1,25 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using Volo.Abp.Domain.Services; +using Volo.Abp.Uow; + +namespace Win_in.Sfs.Wms.DataExchange.Domain; +public class InterfaceConfigManager : DomainService, IInterfaceConfigManager +{ + private readonly IInterfaceConfigRepository _repository; + + public InterfaceConfigManager( + IInterfaceConfigRepository repository + ) + { + _repository = repository; + } + + public virtual async Task GetInterfaceConfig(string code) + { + return await _repository.GetInterfaceConfig(code).ConfigureAwait(false); + } +} diff --git a/be/DataExchange/src/Win_in.Sfs.Wms.DataExchange.EntityFrameworkCore/EntityFrameworkCore/DataExchangeDbContext.cs b/be/DataExchange/src/Win_in.Sfs.Wms.DataExchange.EntityFrameworkCore/EntityFrameworkCore/DataExchangeDbContext.cs index fcb0a34f3..af5ae5831 100644 --- a/be/DataExchange/src/Win_in.Sfs.Wms.DataExchange.EntityFrameworkCore/EntityFrameworkCore/DataExchangeDbContext.cs +++ b/be/DataExchange/src/Win_in.Sfs.Wms.DataExchange.EntityFrameworkCore/EntityFrameworkCore/DataExchangeDbContext.cs @@ -40,6 +40,8 @@ public class DataExchangeDbContext : public DbSet OutgoingFromWms { get; set; } public DbSet ArchivedOutgoingFromWms { get; set; } + public DbSet InterfaceConfig { get; set; } + #region Entities from the modules /* Notice: We only implemented IIdentityDbContext and ITenantManagementDbContext diff --git a/be/DataExchange/src/Win_in.Sfs.Wms.DataExchange.EntityFrameworkCore/EntityFrameworkCore/DataExchangeDbContextModelCreatingExtensions.cs b/be/DataExchange/src/Win_in.Sfs.Wms.DataExchange.EntityFrameworkCore/EntityFrameworkCore/DataExchangeDbContextModelCreatingExtensions.cs index 8fb3bb101..6703ed38b 100644 --- a/be/DataExchange/src/Win_in.Sfs.Wms.DataExchange.EntityFrameworkCore/EntityFrameworkCore/DataExchangeDbContextModelCreatingExtensions.cs +++ b/be/DataExchange/src/Win_in.Sfs.Wms.DataExchange.EntityFrameworkCore/EntityFrameworkCore/DataExchangeDbContextModelCreatingExtensions.cs @@ -27,7 +27,7 @@ public static class DataExchangeDbContextModelCreatingExtensions builder.ConfigureArchivedIncomingFromExternal(options); builder.ConfigureOutgoingFromWms(options); builder.ConfigureArchivedOutgoingFromWms(options); - + builder.ConfigureInterfaceConfig(options); builder.ConfigureMessageReceive(options); /* Configure all entities here. Example: diff --git a/be/DataExchange/src/Win_in.Sfs.Wms.DataExchange.EntityFrameworkCore/InterfaceConfig/InterfaceConfigDbContextModelCreatingExtensions.cs b/be/DataExchange/src/Win_in.Sfs.Wms.DataExchange.EntityFrameworkCore/InterfaceConfig/InterfaceConfigDbContextModelCreatingExtensions.cs new file mode 100644 index 000000000..cf48a26a6 --- /dev/null +++ b/be/DataExchange/src/Win_in.Sfs.Wms.DataExchange.EntityFrameworkCore/InterfaceConfig/InterfaceConfigDbContextModelCreatingExtensions.cs @@ -0,0 +1,25 @@ +using Microsoft.EntityFrameworkCore; +using Volo.Abp.EntityFrameworkCore.Modeling; +using Win_in.Sfs.Shared.Domain.Shared; +using Win_in.Sfs.Shared.EntityFrameworkCore; +using Win_in.Sfs.Wms.DataExchange.Domain; + +namespace Win_in.Sfs.Wms.DataExchange.EntityFrameworkCore; +public static class InterfaceConfigDbContextModelCreatingExtensions +{ + public static void ConfigureInterfaceConfig(this ModelBuilder builder, DataExchangeModelBuilderConfigurationOptions options) + { + builder.Entity(b => + { + //Configure table & schema name + b.ToTable(options.TablePrefix + nameof(InterfaceConfig), options.Schema); + //Configure ABP properties + b.ConfigureByConvention(); + //Configure Sfs base properties + b.ConfigureSfsBase(); + + b.Property(q => q.Name).HasMaxLength(SfsPropertyConst.CodeLength); + b.HasIndex(q => new { q.Code }).IsUnique(); + }); + } +} diff --git a/be/DataExchange/src/Win_in.Sfs.Wms.DataExchange.EntityFrameworkCore/InterfaceConfig/InterfaceConfigEfCoreRepository.cs b/be/DataExchange/src/Win_in.Sfs.Wms.DataExchange.EntityFrameworkCore/InterfaceConfig/InterfaceConfigEfCoreRepository.cs new file mode 100644 index 000000000..608f22595 --- /dev/null +++ b/be/DataExchange/src/Win_in.Sfs.Wms.DataExchange.EntityFrameworkCore/InterfaceConfig/InterfaceConfigEfCoreRepository.cs @@ -0,0 +1,25 @@ +using System.Collections.Generic; +using System.Linq; +using System.Threading.Tasks; +using Microsoft.EntityFrameworkCore; +using Volo.Abp.EntityFrameworkCore; +using Win_in.Sfs.Shared.EntityFrameworkCore; +using Win_in.Sfs.Wms.DataExchange.Domain; +using Win_in.Sfs.Wms.DataExchange.Domain.Shared; + +namespace Win_in.Sfs.Wms.DataExchange.EntityFrameworkCore; + +public class InterfaceConfigEfCoreRepository : SfsEfCoreRepositoryBase, IInterfaceConfigRepository +{ + public InterfaceConfigEfCoreRepository(IDbContextProvider dbContextProvider) : base(dbContextProvider) + { + } + + public virtual async Task GetInterfaceConfig(string code) + { + var dbSet = await GetDbSetAsync().ConfigureAwait(false); + var entitie = await dbSet.FirstOrDefaultAsync(p => p.Code == code).ConfigureAwait(false); + return entitie; + } + +} diff --git a/be/Modules/Inventory/src/Win_in.Sfs.Wms.Inventory.Application.Contracts/TransferLogs/ITransferLogAppService.cs b/be/Modules/Inventory/src/Win_in.Sfs.Wms.Inventory.Application.Contracts/TransferLogs/ITransferLogAppService.cs index 0c05af72e..4c0fd5395 100644 --- a/be/Modules/Inventory/src/Win_in.Sfs.Wms.Inventory.Application.Contracts/TransferLogs/ITransferLogAppService.cs +++ b/be/Modules/Inventory/src/Win_in.Sfs.Wms.Inventory.Application.Contracts/TransferLogs/ITransferLogAppService.cs @@ -15,5 +15,5 @@ public interface ITransferLogAppService Task> GetListByContainerAsync(string containerCode); Task> GetListByItemAsync(string itemCode); Task> GetListByLocationAsync(string locationCode); - + Task> AddManyWithTransferAsync(List inputs, List transactionInputs); } diff --git a/be/Modules/Inventory/src/Win_in.Sfs.Wms.Inventory.Application/TransferLogs/TransferLogAppService.cs b/be/Modules/Inventory/src/Win_in.Sfs.Wms.Inventory.Application/TransferLogs/TransferLogAppService.cs index 68b010434..1c7474a1f 100644 --- a/be/Modules/Inventory/src/Win_in.Sfs.Wms.Inventory.Application/TransferLogs/TransferLogAppService.cs +++ b/be/Modules/Inventory/src/Win_in.Sfs.Wms.Inventory.Application/TransferLogs/TransferLogAppService.cs @@ -75,6 +75,27 @@ public class TransferLogAppService return dto; } + [HttpPost("add-many-with-transfer")] + public virtual async Task> AddManyWithTransferAsync(List inputs,List transactionInputs) + { + var transferLogs = ObjectMapper.Map, List>(inputs); + var transactions = ObjectMapper.Map, List>(transactionInputs); + foreach (var entity in transferLogs) + { + if (string.IsNullOrEmpty(entity.Worker)) + { + entity.Worker = CurrentUser.GetUserName(); + } + + entity.TransferTime = Clock.Now; + entity.ActiveDate = await _interfaceCalendarAclService.GetActiveDateAsync(Clock.Now).ConfigureAwait(false); + } + + await _transferLogManager.AddManyWithTransferAsync(transferLogs, transactions).ConfigureAwait(false); + + var dto = ObjectMapper.Map, List>(transferLogs); + return dto; + } [HttpGet("list/by-number/{number}")] public virtual async Task> GetListByNumberAsync(string number) { diff --git a/be/Modules/Inventory/src/Win_in.Sfs.Wms.Inventory.Domain/TransferLogs/ITransferLogManager.cs b/be/Modules/Inventory/src/Win_in.Sfs.Wms.Inventory.Domain/TransferLogs/ITransferLogManager.cs index 34fb3cabb..1a8719a6f 100644 --- a/be/Modules/Inventory/src/Win_in.Sfs.Wms.Inventory.Domain/TransferLogs/ITransferLogManager.cs +++ b/be/Modules/Inventory/src/Win_in.Sfs.Wms.Inventory.Domain/TransferLogs/ITransferLogManager.cs @@ -51,5 +51,5 @@ public interface ITransferLogManager : IDomainService Task ChangeLocationAsync(Balance inventory, string newWarehouseCode, string newLocationCode, string newContainerCode, string worker, string jobNumber, string docNumber); - + Task AddManyWithTransferAsync(List transferLogs, List inputTransactions); } diff --git a/be/Modules/Inventory/src/Win_in.Sfs.Wms.Inventory.Domain/TransferLogs/TransferLogManager.cs b/be/Modules/Inventory/src/Win_in.Sfs.Wms.Inventory.Domain/TransferLogs/TransferLogManager.cs index 616b564fa..cbed261c3 100644 --- a/be/Modules/Inventory/src/Win_in.Sfs.Wms.Inventory.Domain/TransferLogs/TransferLogManager.cs +++ b/be/Modules/Inventory/src/Win_in.Sfs.Wms.Inventory.Domain/TransferLogs/TransferLogManager.cs @@ -147,6 +147,60 @@ public class TransferLogManager : DomainService, ITransferLogManager } + public virtual async Task AddManyWithTransferAsync(List transferLogs, List excludeTransactions) + { + //TODO 功能大调整 + + //1. 生成并添加Transactions + + var transactions = new List(); + + foreach (var transferLog in transferLogs) + { + var number = await _numberGenerator.CreateAsync().ConfigureAwait(false); + var activeDate = await _interfaceCalendarAclService.GetActiveDateAsync(Clock.Now).ConfigureAwait(false); + + await TrySetItemAndLocationAsync(transferLog).ConfigureAwait(false); + + var inOutTransactions = await transferLog.BuildAndAddTransactionsAsync(number, activeDate, + _transactionManager.AddAsync).ConfigureAwait(false); + + Logger.LogDebug($"{transferLog.DocNumber}|TransferLog:{transferLog}"); + transactions.AddRange(inOutTransactions); + } + + //2. 添加TransferLogs + await _transferLogRepository.InsertManyAsync(transferLogs).ConfigureAwait(false); + + //3. Transactions按箱码,ERP料号,批次,库位,状态汇总数量,将需要对冲的明细对冲掉 + var allTransactions = new List(); + allTransactions.AddRange(transactions); + allTransactions.AddRange(excludeTransactions); + var compactTransactions = new List(); + foreach (var transaction in allTransactions) + { + var compactTransaction = compactTransactions.FirstOrDefault(p => p.ItemCode == transaction.ItemCode + && p.PackingCode == transaction.PackingCode + && p.Lot == transaction.Lot + && p.LocationCode == transaction.LocationCode + && p.Status == transaction.Status); + if (compactTransaction == null)//如果集合中没有就创建 + { + compactTransaction = new Transaction(transaction); + compactTransactions.Add(compactTransaction); + } + else//有则加减qty + { + compactTransaction.Qty += transaction.Qty; + } + + } + + //4. 根据汇总后的Transaction列表更新库存余额和库位可用容量 + await _transactionManager.UpdateBalanceAsync(compactTransactions.Where(r=>r.Qty!=0).ToList()).ConfigureAwait(false); + + } + public virtual async Task ChangeBatchAsync(Balance inventory, string newLot, string newSupplierBatch, DateTime newArriveDate, DateTime newProduceDate, DateTime newExpireDate, string worker, string jobNumber, string docNumber) { diff --git a/be/Modules/Shared/src/Win_in.Sfs.Shared.Domain.Shared/Enums/Inventory/EnumTransSubType.cs b/be/Modules/Shared/src/Win_in.Sfs.Shared.Domain.Shared/Enums/Inventory/EnumTransSubType.cs index 5a45e7d5d..e1869bb2e 100644 --- a/be/Modules/Shared/src/Win_in.Sfs.Shared.Domain.Shared/Enums/Inventory/EnumTransSubType.cs +++ b/be/Modules/Shared/src/Win_in.Sfs.Shared.Domain.Shared/Enums/Inventory/EnumTransSubType.cs @@ -114,6 +114,13 @@ public enum EnumTransSubType [Display(Name = "完工报废")] Scrap_Product = 3604, + /// + /// 报废转移 + /// + [Display(Name = "报废转移")] + Scrap_Transfer = 3605, + + /// /// 线边调整 /// diff --git a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Event/DataExchanges/ScrapNoteEventHandler.cs b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Event/DataExchanges/ScrapNoteEventHandler.cs index 5dcc31266..22ba26566 100644 --- a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Event/DataExchanges/ScrapNoteEventHandler.cs +++ b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Event/DataExchanges/ScrapNoteEventHandler.cs @@ -39,17 +39,17 @@ public class ScrapNoteEventHandler await detail.TrySetLocationAsync(LocationAclService).ConfigureAwait(false); } - //如果WMS管理报废库,生成库存转移 - if (await SettingManager.IsTrueAsync(StoreSettings.Common.EnableScrapLocation).ConfigureAwait(false)) - { - var exchangeData = await BuildExchangeDataAsync(StoreEventConsts.WMS, StoreEventConsts.ERP, EnumExchangeDataType.Transfer, dtos).ConfigureAwait(false); - await AddManyAsync(exchangeData).ConfigureAwait(false); - } - else - { + ////如果WMS管理报废库,生成库存转移 + //if (await SettingManager.IsTrueAsync(StoreSettings.Common.EnableScrapLocation).ConfigureAwait(false)) + //{ + // var exchangeData = await BuildExchangeDataAsync(StoreEventConsts.WMS, StoreEventConsts.ERP, EnumExchangeDataType.Transfer, dtos).ConfigureAwait(false); + // await AddManyAsync(exchangeData).ConfigureAwait(false); + //} + //else + //{ var exchangeData = await BuildExchangeDataAsync(StoreEventConsts.WMS, StoreEventConsts.ERP, EnumExchangeDataType.Scrap, dtos).ConfigureAwait(false); await AddManyAsync(exchangeData).ConfigureAwait(false); - } + // } } } diff --git a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Event/Transactions/ScrapNoteEventHandler.cs b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Event/Transactions/ScrapNoteEventHandler.cs index 981f42265..caf44ed49 100644 --- a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Event/Transactions/ScrapNoteEventHandler.cs +++ b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Event/Transactions/ScrapNoteEventHandler.cs @@ -4,9 +4,11 @@ using System.Linq; using System.Threading.Tasks; using Volo.Abp.EventBus; using Volo.Abp.Uow; +using Win_in.Sfs.Basedata.Application.Contracts; using Win_in.Sfs.Shared.Domain.Shared; using Win_in.Sfs.Shared.Event; using Win_in.Sfs.Wms.Inventory.Application.Contracts; +using Win_in.Sfs.Wms.Inventory.Domain; using Win_in.Sfs.Wms.Store.Domain; using Win_in.Sfs.Wms.Store.Domain.Shared; using Win_in.Sfs.Wms.Store.Event.Transaction; @@ -38,42 +40,53 @@ public class ScrapNoteEventHandler private async Task AddTransactionsAsync(List scrapNotes) { - - //如果WMS管理报废库,生成库存转移 + var holdLocation = await LocationAclService.GetFirstByTypeAsync(EnumLocationType.HOLD).ConfigureAwait(false); //隔离库位 + var transferLogs = new List(); + var transactions = new List(); + //如果WMS管理报废库,生成报废库存转移(从HOLD库先转移到线边) if (await SettingManager.IsTrueAsync(StoreSettings.Common.EnableScrapLocation).ConfigureAwait(false)) { - var transferLogs = new List(); foreach (var scrapNote in scrapNotes) { - transferLogs.AddRange(BuildTransferLogs(scrapNote)); + + if (await SettingManager.IsTrueAsync(StoreSettings.Common.EnableScrapLocation).ConfigureAwait(false)) + { + transferLogs.AddRange(BuildTransferLogs(scrapNote, holdLocation)); + } + transactions.AddRange(BuildTransactions(scrapNote)); } - await TransferLogAppService.AddManyAsync(transferLogs).ConfigureAwait(false); + + await TransferLogAppService.AddManyWithTransferAsync(transferLogs, transactions).ConfigureAwait(false); + await TransactionAppService.AddManyEmptyAsync(transactions).ConfigureAwait(false); } else { - var transactions = new List(); foreach (var scrapNote in scrapNotes) - { + { transactions.AddRange(BuildTransactions(scrapNote)); } - await TransactionAppService.AddManyAsync(transactions).ConfigureAwait(false); } } - private List BuildTransferLogs(ScrapNote scrapNote) + private List BuildTransferLogs(ScrapNote scrapNote, LocationDTO holdLocation) { var transferLogs = new List(); + foreach (var detail in scrapNote.Details.Where(detail => detail.Qty != 0)) { var transferLog = ObjectMapper.Map(detail); transferLog.TransType = TransType; - transferLog.TransSubType = Enum.Parse(scrapNote.Type); + transferLog.TransSubType = EnumTransSubType.Scrap_Transfer; transferLog.Worker = scrapNote.Worker; transferLog.DocNumber = scrapNote.Number; transferLog.JobNumber = scrapNote.JobNumber; - + transferLog.FromLocationCode = holdLocation?.Code; + transferLog.FromLocationArea = holdLocation?.AreaCode; + transferLog.FromLocationGroup = holdLocation?.LocationGroupCode; + transferLog.FromLocationErpCode = holdLocation?.ErpLocationCode; + transferLog.FromStatus = EnumInventoryStatus.HOLD; transferLogs.Add(transferLog); } @@ -89,6 +102,7 @@ public class ScrapNoteEventHandler var transaction = ObjectMapper.Map(detail); transaction.TransType = TransType; + transaction.TransSubType = Enum.Parse(deliverNote.Type); transaction.TransInOut = EnumTransInOut.Out; transaction.Worker = deliverNote.Worker; transaction.DocNumber = deliverNote.Number; diff --git a/build/src/docker/publish/conf/settings/appsettings.Development.json b/build/src/docker/publish/conf/settings/appsettings.Development.json index c74d5217b..ec97ab563 100644 --- a/build/src/docker/publish/conf/settings/appsettings.Development.json +++ b/build/src/docker/publish/conf/settings/appsettings.Development.json @@ -133,8 +133,8 @@ //"BaseUrl": "http://localhost:59093/" }, "BaseData": { - "BaseUrl": "http://dev.ccwin-in.com:60084/" - //"BaseUrl": "http://localhost:59094/" + //"BaseUrl": "http://dev.ccwin-in.com:60084/" + "BaseUrl": "http://localhost:59094/" }, "Default": { "BaseUrl": "http://dev.ccwin-in.com:60083/"