Browse Source

MES接口和报废修改

dev_DY_CC
lvzb 10 months ago
parent
commit
8e35ca6aa8
  1. 2
      be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.Domain.Fawtyg.Mes/Frozen/Frozen.cs
  2. 20
      be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.Fawtyg.EosAgent/Incoming/EosIncomingBackgroundWorker.cs
  3. 4
      be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.Fawtyg.MesAgent/Incoming/FrozenReader.cs
  4. 149
      be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.Fawtyg.MesAgent/Incoming/MesIncomingBackgroundWorker.cs
  5. 2
      be/DataExchange/src/Win_in.Sfs.Wms.DataExchange.Agent/AgentModule.cs
  6. 30
      be/DataExchange/src/Win_in.Sfs.Wms.DataExchange.Agent/IncomingToWmsWorker.cs
  7. 19
      be/DataExchange/src/Win_in.Sfs.Wms.DataExchange.Agent/OutgoingFromWmsWorker.cs
  8. 16
      be/DataExchange/src/Win_in.Sfs.Wms.DataExchange.Agent/appsettings.json
  9. 2
      be/DataExchange/src/Win_in.Sfs.Wms.DataExchange.DbMigrator/appsettings.json
  10. 7
      be/DataExchange/src/Win_in.Sfs.Wms.DataExchange.Domain/InterfaceConfig/IInterfaceConfigManager.cs
  11. 8
      be/DataExchange/src/Win_in.Sfs.Wms.DataExchange.Domain/InterfaceConfig/IInterfaceConfigRepository.cs
  12. 23
      be/DataExchange/src/Win_in.Sfs.Wms.DataExchange.Domain/InterfaceConfig/InterfaceConfig.cs
  13. 25
      be/DataExchange/src/Win_in.Sfs.Wms.DataExchange.Domain/InterfaceConfig/InterfaceConfigManager.cs
  14. 2
      be/DataExchange/src/Win_in.Sfs.Wms.DataExchange.EntityFrameworkCore/EntityFrameworkCore/DataExchangeDbContext.cs
  15. 2
      be/DataExchange/src/Win_in.Sfs.Wms.DataExchange.EntityFrameworkCore/EntityFrameworkCore/DataExchangeDbContextModelCreatingExtensions.cs
  16. 25
      be/DataExchange/src/Win_in.Sfs.Wms.DataExchange.EntityFrameworkCore/InterfaceConfig/InterfaceConfigDbContextModelCreatingExtensions.cs
  17. 25
      be/DataExchange/src/Win_in.Sfs.Wms.DataExchange.EntityFrameworkCore/InterfaceConfig/InterfaceConfigEfCoreRepository.cs
  18. 2
      be/Modules/Inventory/src/Win_in.Sfs.Wms.Inventory.Application.Contracts/TransferLogs/ITransferLogAppService.cs
  19. 21
      be/Modules/Inventory/src/Win_in.Sfs.Wms.Inventory.Application/TransferLogs/TransferLogAppService.cs
  20. 2
      be/Modules/Inventory/src/Win_in.Sfs.Wms.Inventory.Domain/TransferLogs/ITransferLogManager.cs
  21. 54
      be/Modules/Inventory/src/Win_in.Sfs.Wms.Inventory.Domain/TransferLogs/TransferLogManager.cs
  22. 7
      be/Modules/Shared/src/Win_in.Sfs.Shared.Domain.Shared/Enums/Inventory/EnumTransSubType.cs
  23. 18
      be/Modules/Store/src/Win_in.Sfs.Wms.Store.Event/DataExchanges/ScrapNoteEventHandler.cs
  24. 34
      be/Modules/Store/src/Win_in.Sfs.Wms.Store.Event/Transactions/ScrapNoteEventHandler.cs
  25. 4
      build/src/docker/publish/conf/settings/appsettings.Development.json

2
be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.Domain.Fawtyg.Mes/Frozen/Frozen.cs

@ -8,7 +8,7 @@ public class Frozen : Entity
/// 序号 /// 序号
/// </summary> /// </summary>
[Key] [Key]
public string mesout_frozen_id { get; set; } public long mesout_frozen_id { get; set; }
/// <summary> /// <summary>
/// 类型 /// 类型
/// </summary> /// </summary>

20
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.BackgroundWorkers;
using Volo.Abp.Threading; using Volo.Abp.Threading;
using Volo.Abp.Uow; using Volo.Abp.Uow;
using Win_in.Sfs.Wms.DataExchange.Domain;
using Win_in.Sfs.Wms.DataExchange.Fawtyg.EosAgent.Incoming; using Win_in.Sfs.Wms.DataExchange.Fawtyg.EosAgent.Incoming;
namespace Win_in.Sfs.Wms.DataExchange.Fawtyg.EosAgent; namespace Win_in.Sfs.Wms.DataExchange.Fawtyg.EosAgent;
@ -29,10 +30,23 @@ public class EosIncomingBackgroundWorker : AsyncPeriodicBackgroundWorkerBase
protected override async Task DoWorkAsync(PeriodicBackgroundWorkerContext workerContext) protected override async Task DoWorkAsync(PeriodicBackgroundWorkerContext workerContext)
{ {
Logger.LogInformation($"开始: 执行 {Incoming}"); Logger.LogInformation($"开始: 执行 {Incoming}");
if (!_options.Value.IncomingOptions.Active) var configManager = workerContext.ServiceProvider.GetRequiredService<IInterfaceConfigManager>();
var confitem = await configManager.GetInterfaceConfig("").ConfigureAwait(false);
if (confitem == null)
{ {
Logger.LogInformation($"{Incoming} 已关闭没有执行!"); if (!_options.Value.IncomingOptions.Active)
return; {
Logger.LogInformation($"{Incoming} 已关闭没有执行!");
return;
}
}
else
{
if (!confitem.Active)
{
Logger.LogInformation($"{Incoming} 已关闭没有执行!");
return;
}
} }
Logger.LogInformation($"读取 采购订单"); Logger.LogInformation($"读取 采购订单");

4
be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.Fawtyg.MesAgent/Incoming/FrozenReader.cs

@ -86,7 +86,7 @@ public class FrozenReader : IReader
DataAction = EnumExchangeDataAction.Add, DataAction = EnumExchangeDataAction.Add,
SourceSystem = EnumSystemType.MES.ToString(), SourceSystem = EnumSystemType.MES.ToString(),
SourceDataId = Frozen.mesout_frozen_id.ToString(), SourceDataId = Frozen.mesout_frozen_id.ToString(),
SourceDataGroupCode = Frozen.mesout_frozen_id, SourceDataGroupCode = Frozen.mesout_frozen_id.ToString(),
SourceDataDetailCode = Frozen.mesout_frozen_part, SourceDataDetailCode = Frozen.mesout_frozen_part,
SourceDataContent = JsonSerializer.Serialize(Frozen), SourceDataContent = JsonSerializer.Serialize(Frozen),
WriteTime = DateTime.Now, WriteTime = DateTime.Now,
@ -101,7 +101,7 @@ public class FrozenReader : IReader
{ {
var mesNote = new MesNoteExchangeDto() var mesNote = new MesNoteExchangeDto()
{ {
MesRequestNumber=Frozen.mesout_frozen_id, MesRequestNumber=Frozen.mesout_frozen_id.ToString(),
Worker = Frozen.mesout_frozen_user, Worker = Frozen.mesout_frozen_user,
Remark = Frozen.mesout_frozen_reason, Remark = Frozen.mesout_frozen_reason,
Type = Frozen.mesout_frozen_type == "0" ? EnumTransType.MesFreezed.ToString() : EnumTransType.MesUnFreezed.ToString(), Type = Frozen.mesout_frozen_type == "0" ? EnumTransType.MesFreezed.ToString() : EnumTransType.MesUnFreezed.ToString(),

149
be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.Fawtyg.MesAgent/Incoming/MesIncomingBackgroundWorker.cs

@ -45,24 +45,36 @@ public class MesIncomingBackgroundWorker : AsyncPeriodicBackgroundWorkerBase
return; return;
} }
#region 缴库 MesOut //#region 缴库 MesOut
Logger.LogInformation($"读取缴库(MesOut)");//缴库 //Logger.LogInformation($"读取缴库(MesOut)");//缴库
var mesOutReader = workerContext.ServiceProvider.GetRequiredService<MesOutReader>(); //var mesOutReader = workerContext.ServiceProvider.GetRequiredService<MesOutReader>();
var mesOutConverter = workerContext.ServiceProvider.GetRequiredService<MesOutConverter>(); //var mesOutConverter = workerContext.ServiceProvider.GetRequiredService<MesOutConverter>();
var TransferNoteConverter = workerContext.ServiceProvider.GetRequiredService<QtyrfeConverter>(); //var TransferNoteConverter = workerContext.ServiceProvider.GetRequiredService<QtyrfeConverter>();
//读取mes缴库 ////读取mes缴库
var mesOutsFromExternalList = await mesOutReader.ReadAsync().ConfigureAwait(false); //var mesOutsFromExternalList = await mesOutReader.ReadAsync().ConfigureAwait(false);
var mesOutsFromExternalList_ProductReceipt = mesOutsFromExternalList.Where(r => r.DataType == EnumIncomingDataType.ProductReceipt.ToString()).ToList(); //var mesOutsFromExternalList_ProductReceipt = mesOutsFromExternalList.Where(r => r.DataType == EnumIncomingDataType.ProductReceipt.ToString()).ToList();
var mesOutsFromExternalList_TransferNote = mesOutsFromExternalList.Where(r => r.DataType == EnumIncomingDataType.TransferNote.ToString()).ToList(); //var mesOutsFromExternalList_TransferNote = mesOutsFromExternalList.Where(r => r.DataType == EnumIncomingDataType.TransferNote.ToString()).ToList();
//转换缴库数据(如果有质量补得数据直接生产移库数据移到客户库位) ////转换缴库数据(如果有质量补得数据直接生产移库数据移到客户库位)
await mesOutConverter.ConvertAsync(mesOutsFromExternalList_ProductReceipt).ConfigureAwait(false); //await mesOutConverter.ConvertAsync(mesOutsFromExternalList_ProductReceipt).ConfigureAwait(false);
if (mesOutsFromExternalList_TransferNote.Count > 0)//如果有质量补则生产储位调拨任务 //if (mesOutsFromExternalList_TransferNote.Count > 0)//如果有质量补则生产储位调拨任务
{ //{
await TransferNoteConverter.ConvertAsync(mesOutsFromExternalList_TransferNote).ConfigureAwait(false); // await TransferNoteConverter.ConvertAsync(mesOutsFromExternalList_TransferNote).ConfigureAwait(false);
} //}
Logger.LogInformation($"处理完工收货(缴库)【{mesOutsFromExternalList_ProductReceipt.Count}】条数据"); //Logger.LogInformation($"处理完工收货(缴库)【{mesOutsFromExternalList_ProductReceipt.Count}】条数据");
Logger.LogInformation($"处理储位调拨【{mesOutsFromExternalList_TransferNote.Count}】条数据"); //Logger.LogInformation($"处理储位调拨【{mesOutsFromExternalList_TransferNote.Count}】条数据");
#endregion //#endregion
//#region 冻结解冻 Frozen
//Logger.LogInformation($"读取冻结解冻 (Frozen)");//冻结解冻
//var FrozenReader = workerContext.ServiceProvider.GetRequiredService<FrozenReader>();
//var FrozenConverter = workerContext.ServiceProvider.GetRequiredService<FrozenConverter>();
////读取并保存Frozen
//var mesNoteFromExternalList = await FrozenReader.ReadAsync().ConfigureAwait(false);
////转换Frozen
//await FrozenConverter.ConvertAsync(mesNoteFromExternalList).ConfigureAwait(false);
//Logger.LogInformation($"处理冻结解冻【{mesNoteFromExternalList.Count}】条数据");
//#endregion
#region 报废 Scrap #region 报废 Scrap
Logger.LogInformation($"读取报废(Scrap)");//报废 Logger.LogInformation($"读取报废(Scrap)");//报废
@ -75,61 +87,52 @@ public class MesIncomingBackgroundWorker : AsyncPeriodicBackgroundWorkerBase
Logger.LogInformation($"处理报废【{scrapsFromExternalList.Count}】条数据"); Logger.LogInformation($"处理报废【{scrapsFromExternalList.Count}】条数据");
#endregion #endregion
#region 耗用单 BackFlush //#region 耗用单 BackFlush
Logger.LogInformation($"读取耗用单 (BackFlush)");//耗用单 //Logger.LogInformation($"读取耗用单 (BackFlush)");//耗用单
var BackFlushReader = workerContext.ServiceProvider.GetRequiredService<BackFluReader>(); //var BackFlushReader = workerContext.ServiceProvider.GetRequiredService<BackFluReader>();
var BackFlushConverter = workerContext.ServiceProvider.GetRequiredService<BackFluConverter>(); //var BackFlushConverter = workerContext.ServiceProvider.GetRequiredService<BackFluConverter>();
//读取并保存BackFlush ////读取并保存BackFlush
var backFlushsFromExternalList = await BackFlushReader.ReadAsync().ConfigureAwait(false); //var backFlushsFromExternalList = await BackFlushReader.ReadAsync().ConfigureAwait(false);
//转换BackFlush ////转换BackFlush
await BackFlushConverter.ConvertAsync(backFlushsFromExternalList).ConfigureAwait(false); //await BackFlushConverter.ConvertAsync(backFlushsFromExternalList).ConfigureAwait(false);
Logger.LogInformation($"处理耗用单【{backFlushsFromExternalList.Count}】条数据"); //Logger.LogInformation($"处理耗用单【{backFlushsFromExternalList.Count}】条数据");
#endregion //#endregion
#region 储位调拨 TransferNote //#region 储位调拨 TransferNote
Logger.LogInformation($"读取储位调拨 (TransferNote)");//储位调拨 //Logger.LogInformation($"读取储位调拨 (TransferNote)");//储位调拨
var TransferNoteReader = workerContext.ServiceProvider.GetRequiredService<QtyrfeReader>(); //var TransferNoteReader = workerContext.ServiceProvider.GetRequiredService<QtyrfeReader>();
// var TransferNoteConverter = workerContext.ServiceProvider.GetRequiredService<QtyrfeConverter>(); //// var TransferNoteConverter = workerContext.ServiceProvider.GetRequiredService<QtyrfeConverter>();
//读取并保存TransferNote ////读取并保存TransferNote
var transferNoteFromExternalList = await TransferNoteReader.ReadAsync().ConfigureAwait(false); //var transferNoteFromExternalList = await TransferNoteReader.ReadAsync().ConfigureAwait(false);
//转换TransferNote ////转换TransferNote
await TransferNoteConverter.ConvertAsync(transferNoteFromExternalList).ConfigureAwait(false); //await TransferNoteConverter.ConvertAsync(transferNoteFromExternalList).ConfigureAwait(false);
Logger.LogInformation($"处理储位调拨【{transferNoteFromExternalList.Count}】条数据"); //Logger.LogInformation($"处理储位调拨【{transferNoteFromExternalList.Count}】条数据");
#endregion //#endregion
#region 冻结解冻 Frozen
Logger.LogInformation($"读取冻结解冻 (Frozen)");//冻结解冻
var FrozenReader = workerContext.ServiceProvider.GetRequiredService<FrozenReader>(); //#region 成品发运 Delivery
var FrozenConverter = workerContext.ServiceProvider.GetRequiredService<FrozenConverter>(); //Logger.LogInformation($"读取成品发运 (Delivery)");//成品发运
//读取并保存Frozen //var DeliveryReader = workerContext.ServiceProvider.GetRequiredService<DeliveryReader>();
var mesNoteFromExternalList = await FrozenReader.ReadAsync().ConfigureAwait(false); //var DeliveryConverter = workerContext.ServiceProvider.GetRequiredService<DeliveryConverter>();
//转换Frozen ////读取并保存Delivery
await FrozenConverter.ConvertAsync(mesNoteFromExternalList).ConfigureAwait(false); //var deliveryNoteFromExternalList = await DeliveryReader.ReadAsync().ConfigureAwait(false);
Logger.LogInformation($"处理冻结解冻【{mesNoteFromExternalList.Count}】条数据"); ////转换Delivery
#endregion //await DeliveryConverter.ConvertAsync(deliveryNoteFromExternalList).ConfigureAwait(false);
//Logger.LogInformation($"处理成品发运【{deliveryNoteFromExternalList.Count}】条数据");
#region 成品发运 Delivery //#endregion
Logger.LogInformation($"读取成品发运 (Delivery)");//成品发运
var DeliveryReader = workerContext.ServiceProvider.GetRequiredService<DeliveryReader>(); //#region 自动叫料 CallMtl
var DeliveryConverter = workerContext.ServiceProvider.GetRequiredService<DeliveryConverter>();
//读取并保存Delivery //Logger.LogInformation($"读取自动叫料 (CallMtl)");//自动叫料
var deliveryNoteFromExternalList = await DeliveryReader.ReadAsync().ConfigureAwait(false); //var CallMtlReader = workerContext.ServiceProvider.GetRequiredService<CallMtlReader>();
//转换Delivery //var CallMtlConverter = workerContext.ServiceProvider.GetRequiredService<CallMtlConverter>();
await DeliveryConverter.ConvertAsync(deliveryNoteFromExternalList).ConfigureAwait(false); ////读取并保存Delivery
Logger.LogInformation($"处理成品发运【{deliveryNoteFromExternalList.Count}】条数据"); //var callMtlFromExternalList = await CallMtlReader.ReadAsync().ConfigureAwait(false);
#endregion ////转换Delivery
//await CallMtlConverter.ConvertAsync(callMtlFromExternalList).ConfigureAwait(false);
#region 自动叫料 CallMtl //Logger.LogInformation($"处理自动叫料【{callMtlFromExternalList.Count}】条数据");
//#endregion
Logger.LogInformation($"读取自动叫料 (CallMtl)");//自动叫料
var CallMtlReader = workerContext.ServiceProvider.GetRequiredService<CallMtlReader>();
var CallMtlConverter = workerContext.ServiceProvider.GetRequiredService<CallMtlConverter>();
//读取并保存Delivery
var callMtlFromExternalList = await CallMtlReader.ReadAsync().ConfigureAwait(false);
//转换Delivery
await CallMtlConverter.ConvertAsync(callMtlFromExternalList).ConfigureAwait(false);
Logger.LogInformation($"处理自动叫料【{callMtlFromExternalList.Count}】条数据");
#endregion
Logger.LogInformation($"提交: 执行 {Incoming}"); Logger.LogInformation($"提交: 执行 {Incoming}");

2
be/DataExchange/src/Win_in.Sfs.Wms.DataExchange.Agent/AgentModule.cs

@ -150,6 +150,6 @@ public class AgentModule : AbpModule
ApplicationInitializationContext context) ApplicationInitializationContext context)
{ {
context.AddBackgroundWorkerAsync<IncomingToWmsWorker>(); context.AddBackgroundWorkerAsync<IncomingToWmsWorker>();
context.AddBackgroundWorkerAsync<OutgoingFromWmsWorker>(); // context.AddBackgroundWorkerAsync<OutgoingFromWmsWorker>();
} }
} }

30
be/DataExchange/src/Win_in.Sfs.Wms.DataExchange.Agent/IncomingToWmsWorker.cs

@ -49,16 +49,30 @@ public class IncomingToWmsWorker : AsyncPeriodicBackgroundWorkerBase
[UnitOfWork] [UnitOfWork]
protected override async Task DoWorkAsync(PeriodicBackgroundWorkerContext workerContext) protected override async Task DoWorkAsync(PeriodicBackgroundWorkerContext workerContext)
{ {
Logger.LogInformation("Starting: Handling Incoming Exchange data..."); Logger.LogInformation("开始接收数据...");
if (!_options.Value.IncomingOptions.Active) // var configManager = workerContext.ServiceProvider.GetRequiredService<IInterfaceConfigManager>();
{ //var confitem = await configManager.GetInterfaceConfig("").ConfigureAwait(false);
Logger.LogInformation("Incoming Exchange is not active!"); // if (confitem == null)
return; // {
} // if (!_options.Value.IncomingOptions.Active)
// {
// Logger.LogInformation("Wms接收接口已关闭!");
// return;
// }
// }
// else
// {
// if (!confitem.Active)
// {
// Logger.LogInformation("Wms接收接口已关闭!");
// return;
// }
// }
await HandleIncomingDataAsync(workerContext).ConfigureAwait(false); await HandleIncomingDataAsync(workerContext).ConfigureAwait(false);
Logger.LogInformation("Completed: Handling Incoming Exchange data..."); Logger.LogInformation("提交接收数据...");
} }
private async Task HandleIncomingDataAsync(PeriodicBackgroundWorkerContext workerContext) private async Task HandleIncomingDataAsync(PeriodicBackgroundWorkerContext workerContext)
@ -93,7 +107,7 @@ public class IncomingToWmsWorker : AsyncPeriodicBackgroundWorkerBase
incomingToWms.SetError(EnumExchangeDataErrorCode.Exception, e.Message); incomingToWms.SetError(EnumExchangeDataErrorCode.Exception, e.Message);
} }
//归档并删除 //归档并删除
await incomingToWmsManager.ArchiveAsync(incomingToWms).ConfigureAwait(false); // await incomingToWmsManager.ArchiveAsync(incomingToWms).ConfigureAwait(false);
} }
} }

19
be/DataExchange/src/Win_in.Sfs.Wms.DataExchange.Agent/OutgoingFromWmsWorker.cs

@ -29,6 +29,25 @@ public class OutgoingFromWmsWorker : AsyncPeriodicBackgroundWorkerBase
[UnitOfWork] [UnitOfWork]
protected override async Task DoWorkAsync(PeriodicBackgroundWorkerContext workerContext) protected override async Task DoWorkAsync(PeriodicBackgroundWorkerContext workerContext)
{ {
var configManager = workerContext.ServiceProvider.GetRequiredService<IInterfaceConfigManager>();
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 //Resolve dependencies
var exchangeDataAppService = workerContext.ServiceProvider.GetRequiredService<IExchangeDataAppService>(); var exchangeDataAppService = workerContext.ServiceProvider.GetRequiredService<IExchangeDataAppService>();
var objectMapper = workerContext.ServiceProvider.GetRequiredService<IObjectMapper>(); var objectMapper = workerContext.ServiceProvider.GetRequiredService<IObjectMapper>();

16
be/DataExchange/src/Win_in.Sfs.Wms.DataExchange.Agent/appsettings.json

@ -1,13 +1,13 @@
{ {
"ConnectionStrings": { "ConnectionStrings": {
"Default": "Server=10.164.233.6;Database=WMS_DongYang_Main_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=10.164.233.6;Database=WMS_DongYang_DataExchange_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": { "AuthServer": {
"Authority": "http://10.164.233.5:60083/", "Authority": "http://dev.ccwin-in.com:60083/",
"RequireHttpsMetadata": "false", "RequireHttpsMetadata": "false",
"SwaggerClientId": "admin", "SwaggerClientId": "admin",
"SwaggerClientSecret": "1q2w3E*", "SwaggerClientSecret": "1q2w3E*",
@ -26,16 +26,16 @@
"RemoteServices": { "RemoteServices": {
"BaseData": { "BaseData": {
"BaseUrl": "http://10.164.233.5:60084/" "BaseUrl": "http://localhost:59094/"
}, },
"Store": { "Store": {
"BaseUrl": "http://10.164.233.5:60085/" "BaseUrl": "http://localhost:59095/"
}, },
"Label": { "Label": {
"BaseUrl": "http://10.164.233.5:60082/" "BaseUrl": "http://dev.ccwin-in.com:60082/"
}, },
"Auth": { "Auth": {
"BaseUrl": "http://10.164.233.5:60083/" "BaseUrl": "http://dev.ccwin-in.com:60083/"
} }
}, },
"DataExchangeOptions": { "DataExchangeOptions": {
@ -44,7 +44,7 @@
"PeriodSeconds": 10, "PeriodSeconds": 10,
"RetryTimes": 1, "RetryTimes": 1,
"BatchSize": 100, "BatchSize": 100,
"apiUrl": "http://10.164.233.5:60085/" "apiUrl": "http://dev.ccwin-in.com:60085/"
}, },
"OutgoingOptions": { "OutgoingOptions": {
"Active": false, "Active": false,

2
be/DataExchange/src/Win_in.Sfs.Wms.DataExchange.DbMigrator/appsettings.json

@ -1,6 +1,6 @@
{ {
"ConnectionStrings": { "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!;" "DataExchange": "Server=dev.ccwin-in.com,21195;Database=DataExchange_Main;uid=sa;pwd=aA123456!;"
}, },
"IdentityServer": { "IdentityServer": {

7
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<InterfaceConfig> GetInterfaceConfig(string code);
}

8
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<InterfaceConfig> GetInterfaceConfig(string code);
}

23
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
{
/// <summary>
/// 接口名称
/// </summary>
public string Name { get; set; }
/// <summary>
/// 编码
/// </summary>
public string Code { get; set; }
/// <summary>
/// 是否启用
/// </summary>
public bool Active { get; set; }
/// <summary>
/// 等级
/// </summary>
public int Level { get; set; }
}

25
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<InterfaceConfig> GetInterfaceConfig(string code)
{
return await _repository.GetInterfaceConfig(code).ConfigureAwait(false);
}
}

2
be/DataExchange/src/Win_in.Sfs.Wms.DataExchange.EntityFrameworkCore/EntityFrameworkCore/DataExchangeDbContext.cs

@ -40,6 +40,8 @@ public class DataExchangeDbContext :
public DbSet<OutgoingFromWms> OutgoingFromWms { get; set; } public DbSet<OutgoingFromWms> OutgoingFromWms { get; set; }
public DbSet<ArchivedOutgoingFromWms> ArchivedOutgoingFromWms { get; set; } public DbSet<ArchivedOutgoingFromWms> ArchivedOutgoingFromWms { get; set; }
public DbSet<InterfaceConfig> InterfaceConfig { get; set; }
#region Entities from the modules #region Entities from the modules
/* Notice: We only implemented IIdentityDbContext and ITenantManagementDbContext /* Notice: We only implemented IIdentityDbContext and ITenantManagementDbContext

2
be/DataExchange/src/Win_in.Sfs.Wms.DataExchange.EntityFrameworkCore/EntityFrameworkCore/DataExchangeDbContextModelCreatingExtensions.cs

@ -27,7 +27,7 @@ public static class DataExchangeDbContextModelCreatingExtensions
builder.ConfigureArchivedIncomingFromExternal(options); builder.ConfigureArchivedIncomingFromExternal(options);
builder.ConfigureOutgoingFromWms(options); builder.ConfigureOutgoingFromWms(options);
builder.ConfigureArchivedOutgoingFromWms(options); builder.ConfigureArchivedOutgoingFromWms(options);
builder.ConfigureInterfaceConfig(options);
builder.ConfigureMessageReceive(options); builder.ConfigureMessageReceive(options);
/* Configure all entities here. Example: /* Configure all entities here. Example:

25
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<InterfaceConfig>(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();
});
}
}

25
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<DataExchangeDbContext, InterfaceConfig>, IInterfaceConfigRepository
{
public InterfaceConfigEfCoreRepository(IDbContextProvider<DataExchangeDbContext> dbContextProvider) : base(dbContextProvider)
{
}
public virtual async Task<InterfaceConfig> GetInterfaceConfig(string code)
{
var dbSet = await GetDbSetAsync().ConfigureAwait(false);
var entitie = await dbSet.FirstOrDefaultAsync(p => p.Code == code).ConfigureAwait(false);
return entitie;
}
}

2
be/Modules/Inventory/src/Win_in.Sfs.Wms.Inventory.Application.Contracts/TransferLogs/ITransferLogAppService.cs

@ -15,5 +15,5 @@ public interface ITransferLogAppService
Task<List<TransferLogDTO>> GetListByContainerAsync(string containerCode); Task<List<TransferLogDTO>> GetListByContainerAsync(string containerCode);
Task<List<TransferLogDTO>> GetListByItemAsync(string itemCode); Task<List<TransferLogDTO>> GetListByItemAsync(string itemCode);
Task<List<TransferLogDTO>> GetListByLocationAsync(string locationCode); Task<List<TransferLogDTO>> GetListByLocationAsync(string locationCode);
Task<List<TransferLogDTO>> AddManyWithTransferAsync(List<TransferLogEditInput> inputs, List<TransactionEditInput> transactionInputs);
} }

21
be/Modules/Inventory/src/Win_in.Sfs.Wms.Inventory.Application/TransferLogs/TransferLogAppService.cs

@ -75,6 +75,27 @@ public class TransferLogAppService
return dto; return dto;
} }
[HttpPost("add-many-with-transfer")]
public virtual async Task<List<TransferLogDTO>> AddManyWithTransferAsync(List<TransferLogEditInput> inputs,List<TransactionEditInput> transactionInputs)
{
var transferLogs = ObjectMapper.Map<List<TransferLogEditInput>, List<TransferLog>>(inputs);
var transactions = ObjectMapper.Map<List<TransactionEditInput>, List<Transaction>>(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<TransferLog>, List<TransferLogDTO>>(transferLogs);
return dto;
}
[HttpGet("list/by-number/{number}")] [HttpGet("list/by-number/{number}")]
public virtual async Task<List<TransferLogDTO>> GetListByNumberAsync(string number) public virtual async Task<List<TransferLogDTO>> GetListByNumberAsync(string number)
{ {

2
be/Modules/Inventory/src/Win_in.Sfs.Wms.Inventory.Domain/TransferLogs/ITransferLogManager.cs

@ -51,5 +51,5 @@ public interface ITransferLogManager : IDomainService
Task<Balance> ChangeLocationAsync(Balance inventory, Task<Balance> ChangeLocationAsync(Balance inventory,
string newWarehouseCode, string newLocationCode, string newContainerCode, string worker, string newWarehouseCode, string newLocationCode, string newContainerCode, string worker,
string jobNumber, string docNumber); string jobNumber, string docNumber);
Task AddManyWithTransferAsync(List<TransferLog> transferLogs, List<Transaction> inputTransactions);
} }

54
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<TransferLog> transferLogs, List<Transaction> excludeTransactions)
{
//TODO 功能大调整
//1. 生成并添加Transactions
var transactions = new List<Transaction>();
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<Transaction>();
allTransactions.AddRange(transactions);
allTransactions.AddRange(excludeTransactions);
var compactTransactions = new List<Transaction>();
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<Balance> ChangeBatchAsync(Balance inventory, string newLot, public virtual async Task<Balance> ChangeBatchAsync(Balance inventory, string newLot,
string newSupplierBatch, DateTime newArriveDate, DateTime newProduceDate, DateTime newExpireDate, string worker, string jobNumber, string docNumber) string newSupplierBatch, DateTime newArriveDate, DateTime newProduceDate, DateTime newExpireDate, string worker, string jobNumber, string docNumber)
{ {

7
be/Modules/Shared/src/Win_in.Sfs.Shared.Domain.Shared/Enums/Inventory/EnumTransSubType.cs

@ -114,6 +114,13 @@ public enum EnumTransSubType
[Display(Name = "完工报废")] [Display(Name = "完工报废")]
Scrap_Product = 3604, Scrap_Product = 3604,
/// <summary>
/// 报废转移
/// </summary>
[Display(Name = "报废转移")]
Scrap_Transfer = 3605,
/// <summary> /// <summary>
/// 线边调整 /// 线边调整
/// </summary> /// </summary>

18
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); await detail.TrySetLocationAsync(LocationAclService).ConfigureAwait(false);
} }
//如果WMS管理报废库,生成库存转移 ////如果WMS管理报废库,生成库存转移
if (await SettingManager.IsTrueAsync(StoreSettings.Common.EnableScrapLocation).ConfigureAwait(false)) //if (await SettingManager.IsTrueAsync(StoreSettings.Common.EnableScrapLocation).ConfigureAwait(false))
{ //{
var exchangeData = await BuildExchangeDataAsync(StoreEventConsts.WMS, StoreEventConsts.ERP, EnumExchangeDataType.Transfer, dtos).ConfigureAwait(false); // var exchangeData = await BuildExchangeDataAsync(StoreEventConsts.WMS, StoreEventConsts.ERP, EnumExchangeDataType.Transfer, dtos).ConfigureAwait(false);
await AddManyAsync(exchangeData).ConfigureAwait(false); // await AddManyAsync(exchangeData).ConfigureAwait(false);
} //}
else //else
{ //{
var exchangeData = await BuildExchangeDataAsync(StoreEventConsts.WMS, StoreEventConsts.ERP, EnumExchangeDataType.Scrap, dtos).ConfigureAwait(false); var exchangeData = await BuildExchangeDataAsync(StoreEventConsts.WMS, StoreEventConsts.ERP, EnumExchangeDataType.Scrap, dtos).ConfigureAwait(false);
await AddManyAsync(exchangeData).ConfigureAwait(false); await AddManyAsync(exchangeData).ConfigureAwait(false);
} // }
} }
} }

34
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 System.Threading.Tasks;
using Volo.Abp.EventBus; using Volo.Abp.EventBus;
using Volo.Abp.Uow; using Volo.Abp.Uow;
using Win_in.Sfs.Basedata.Application.Contracts;
using Win_in.Sfs.Shared.Domain.Shared; using Win_in.Sfs.Shared.Domain.Shared;
using Win_in.Sfs.Shared.Event; using Win_in.Sfs.Shared.Event;
using Win_in.Sfs.Wms.Inventory.Application.Contracts; 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;
using Win_in.Sfs.Wms.Store.Domain.Shared; using Win_in.Sfs.Wms.Store.Domain.Shared;
using Win_in.Sfs.Wms.Store.Event.Transaction; using Win_in.Sfs.Wms.Store.Event.Transaction;
@ -38,42 +40,53 @@ public class ScrapNoteEventHandler
private async Task AddTransactionsAsync(List<ScrapNote> scrapNotes) private async Task AddTransactionsAsync(List<ScrapNote> scrapNotes)
{ {
var holdLocation = await LocationAclService.GetFirstByTypeAsync(EnumLocationType.HOLD).ConfigureAwait(false); //隔离库位
//如果WMS管理报废库,生成库存转移 var transferLogs = new List<TransferLogEditInput>();
var transactions = new List<TransactionEditInput>();
//如果WMS管理报废库,生成报废库存转移(从HOLD库先转移到线边)
if (await SettingManager.IsTrueAsync(StoreSettings.Common.EnableScrapLocation).ConfigureAwait(false)) if (await SettingManager.IsTrueAsync(StoreSettings.Common.EnableScrapLocation).ConfigureAwait(false))
{ {
var transferLogs = new List<TransferLogEditInput>();
foreach (var scrapNote in scrapNotes) 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 else
{ {
var transactions = new List<TransactionEditInput>();
foreach (var scrapNote in scrapNotes) foreach (var scrapNote in scrapNotes)
{ {
transactions.AddRange(BuildTransactions(scrapNote)); transactions.AddRange(BuildTransactions(scrapNote));
} }
await TransactionAppService.AddManyAsync(transactions).ConfigureAwait(false); await TransactionAppService.AddManyAsync(transactions).ConfigureAwait(false);
} }
} }
private List<TransferLogEditInput> BuildTransferLogs(ScrapNote scrapNote) private List<TransferLogEditInput> BuildTransferLogs(ScrapNote scrapNote, LocationDTO holdLocation)
{ {
var transferLogs = new List<TransferLogEditInput>(); var transferLogs = new List<TransferLogEditInput>();
foreach (var detail in scrapNote.Details.Where(detail => detail.Qty != 0)) foreach (var detail in scrapNote.Details.Where(detail => detail.Qty != 0))
{ {
var transferLog = ObjectMapper.Map<ScrapNoteDetail, TransferLogEditInput>(detail); var transferLog = ObjectMapper.Map<ScrapNoteDetail, TransferLogEditInput>(detail);
transferLog.TransType = TransType; transferLog.TransType = TransType;
transferLog.TransSubType = Enum.Parse<EnumTransSubType>(scrapNote.Type); transferLog.TransSubType = EnumTransSubType.Scrap_Transfer;
transferLog.Worker = scrapNote.Worker; transferLog.Worker = scrapNote.Worker;
transferLog.DocNumber = scrapNote.Number; transferLog.DocNumber = scrapNote.Number;
transferLog.JobNumber = scrapNote.JobNumber; 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); transferLogs.Add(transferLog);
} }
@ -89,6 +102,7 @@ public class ScrapNoteEventHandler
var transaction = ObjectMapper.Map<ScrapNoteDetail, TransactionEditInput>(detail); var transaction = ObjectMapper.Map<ScrapNoteDetail, TransactionEditInput>(detail);
transaction.TransType = TransType; transaction.TransType = TransType;
transaction.TransSubType = Enum.Parse<EnumTransSubType>(deliverNote.Type);
transaction.TransInOut = EnumTransInOut.Out; transaction.TransInOut = EnumTransInOut.Out;
transaction.Worker = deliverNote.Worker; transaction.Worker = deliverNote.Worker;
transaction.DocNumber = deliverNote.Number; transaction.DocNumber = deliverNote.Number;

4
build/src/docker/publish/conf/settings/appsettings.Development.json

@ -133,8 +133,8 @@
//"BaseUrl": "http://localhost:59093/" //"BaseUrl": "http://localhost:59093/"
}, },
"BaseData": { "BaseData": {
"BaseUrl": "http://dev.ccwin-in.com:60084/" //"BaseUrl": "http://dev.ccwin-in.com:60084/"
//"BaseUrl": "http://localhost:59094/" "BaseUrl": "http://localhost:59094/"
}, },
"Default": { "Default": {
"BaseUrl": "http://dev.ccwin-in.com:60083/" "BaseUrl": "http://dev.ccwin-in.com:60083/"

Loading…
Cancel
Save