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. 36
      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>
[Key]
public string mesout_frozen_id { get; set; }
public long mesout_frozen_id { get; set; }
/// <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.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<IInterfaceConfigManager>();
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($"读取 采购订单");

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,
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(),

149
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<MesOutReader>();
var mesOutConverter = workerContext.ServiceProvider.GetRequiredService<MesOutConverter>();
var TransferNoteConverter = workerContext.ServiceProvider.GetRequiredService<QtyrfeConverter>();
//读取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<MesOutReader>();
//var mesOutConverter = workerContext.ServiceProvider.GetRequiredService<MesOutConverter>();
//var TransferNoteConverter = workerContext.ServiceProvider.GetRequiredService<QtyrfeConverter>();
////读取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<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
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<BackFluReader>();
var BackFlushConverter = workerContext.ServiceProvider.GetRequiredService<BackFluConverter>();
//读取并保存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<QtyrfeReader>();
// var TransferNoteConverter = workerContext.ServiceProvider.GetRequiredService<QtyrfeConverter>();
//读取并保存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<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 成品发运 Delivery
Logger.LogInformation($"读取成品发运 (Delivery)");//成品发运
var DeliveryReader = workerContext.ServiceProvider.GetRequiredService<DeliveryReader>();
var DeliveryConverter = workerContext.ServiceProvider.GetRequiredService<DeliveryConverter>();
//读取并保存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<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
//#region 耗用单 BackFlush
//Logger.LogInformation($"读取耗用单 (BackFlush)");//耗用单
//var BackFlushReader = workerContext.ServiceProvider.GetRequiredService<BackFluReader>();
//var BackFlushConverter = workerContext.ServiceProvider.GetRequiredService<BackFluConverter>();
////读取并保存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<QtyrfeReader>();
//// var TransferNoteConverter = workerContext.ServiceProvider.GetRequiredService<QtyrfeConverter>();
////读取并保存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<DeliveryReader>();
//var DeliveryConverter = workerContext.ServiceProvider.GetRequiredService<DeliveryConverter>();
////读取并保存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<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}");

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

@ -150,6 +150,6 @@ public class AgentModule : AbpModule
ApplicationInitializationContext context)
{
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]
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<IInterfaceConfigManager>();
//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);
}
}

19
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<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
var exchangeDataAppService = workerContext.ServiceProvider.GetRequiredService<IExchangeDataAppService>();
var objectMapper = workerContext.ServiceProvider.GetRequiredService<IObjectMapper>();

16
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,

2
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": {

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<ArchivedOutgoingFromWms> ArchivedOutgoingFromWms { get; set; }
public DbSet<InterfaceConfig> InterfaceConfig { get; set; }
#region Entities from the modules
/* 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.ConfigureOutgoingFromWms(options);
builder.ConfigureArchivedOutgoingFromWms(options);
builder.ConfigureInterfaceConfig(options);
builder.ConfigureMessageReceive(options);
/* 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>> GetListByItemAsync(string itemCode);
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;
}
[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}")]
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,
string newWarehouseCode, string newLocationCode, string newContainerCode, string worker,
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,
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 = "完工报废")]
Scrap_Product = 3604,
/// <summary>
/// 报废转移
/// </summary>
[Display(Name = "报废转移")]
Scrap_Transfer = 3605,
/// <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);
}
//如果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);
}
// }
}
}

36
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<ScrapNote> scrapNotes)
{
//如果WMS管理报废库,生成库存转移
var holdLocation = await LocationAclService.GetFirstByTypeAsync(EnumLocationType.HOLD).ConfigureAwait(false); //隔离库位
var transferLogs = new List<TransferLogEditInput>();
var transactions = new List<TransactionEditInput>();
//如果WMS管理报废库,生成报废库存转移(从HOLD库先转移到线边)
if (await SettingManager.IsTrueAsync(StoreSettings.Common.EnableScrapLocation).ConfigureAwait(false))
{
var transferLogs = new List<TransferLogEditInput>();
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<TransactionEditInput>();
foreach (var scrapNote in scrapNotes)
{
{
transactions.AddRange(BuildTransactions(scrapNote));
}
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>();
foreach (var detail in scrapNote.Details.Where(detail => detail.Qty != 0))
{
var transferLog = ObjectMapper.Map<ScrapNoteDetail, TransferLogEditInput>(detail);
transferLog.TransType = TransType;
transferLog.TransSubType = Enum.Parse<EnumTransSubType>(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<ScrapNoteDetail, TransactionEditInput>(detail);
transaction.TransType = TransType;
transaction.TransSubType = Enum.Parse<EnumTransSubType>(deliverNote.Type);
transaction.TransInOut = EnumTransInOut.Out;
transaction.Worker = deliverNote.Worker;
transaction.DocNumber = deliverNote.Number;

4
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/"

Loading…
Cancel
Save