Browse Source

Merge branch 'dev_DY_CC' of http://dev.ccwin-in.com:3000/BoXu.Zheng/WZC2 into dev_DY_CC

dev_DY_CC
赵新宇 11 months ago
parent
commit
95b287ddb1
  1. 4
      be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.Domain.Fawtyg.Mes/MesOut/MesOut.cs
  2. 4
      be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.EntityFrameworkCore.Fawtyg.Mes/MesOut/MesOutDbContextModelCreatingExtensions.cs
  3. 4
      be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.Fawtyg.EosAgent/EosAgentModule.cs
  4. 11
      be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.Fawtyg.EosAgent/Incoming/EosIncomingBackgroundWorker.cs
  5. 1
      be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.Fawtyg.EosAgent/Incoming/PlanReader.cs
  6. 2
      be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.Fawtyg.EosAgent/Incoming/ShipConverter.cs
  7. 2
      be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.Fawtyg.EosAgent/Outgoing/ArriveConverter.cs
  8. 10
      be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.Fawtyg.EosAgent/Outgoing/EosOutgoingBackgroundWorker.cs
  9. 2
      be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.Fawtyg.EosAgent/Outgoing/ReturnConverter.cs
  10. 14
      be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.Fawtyg.EosAgent/appsettings.json
  11. 6
      be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.Fawtyg.InjectionMoldingTaskAgent/appsettings.json
  12. 1
      be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.Fawtyg.MesAgent/FawtygAutoMapperProfile.cs
  13. 13
      be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.Fawtyg.MesAgent/Incoming/DeliveryReader.cs
  14. 53
      be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.Fawtyg.MesAgent/Incoming/MesIncomingBackgroundWorker.cs
  15. 2
      be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.Fawtyg.MesAgent/Incoming/MesOutReader.cs
  16. 2
      be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.Fawtyg.MesAgent/appsettings.json
  17. 4
      be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.Fawtyg.TyrpAgent/FawtygAutoMapperProfile.cs
  18. 2
      be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.Fawtyg.TyrpAgent/Incoming/ItemBasicReader.cs
  19. 82
      be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.Fawtyg.TyrpAgent/Incoming/TyrpIncomingBackgroundWorker.cs
  20. 2
      be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.Fawtyg.TyrpAgent/Outgoing/CustomerReturnNoteConverter.cs
  21. 118
      be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.Fawtyg.TyrpAgent/Outgoing/TyrpOutgoingBackgroundWorker.cs
  22. 16
      be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.Fawtyg.TyrpAgent/appsettings.json
  23. 2
      be/DataExchange/src/Win_in.Sfs.Wms.DataExchange.Agent/AgentModule.cs
  24. 6
      be/DataExchange/src/Win_in.Sfs.Wms.DataExchange.Agent/IncomingToWmsExtensions.cs
  25. 7
      be/DataExchange/src/Win_in.Sfs.Wms.DataExchange.Agent/OutgoingFromWmsWorker.cs
  26. 28
      be/DataExchange/src/Win_in.Sfs.Wms.DataExchange.Agent/Program.cs
  27. 2
      be/DataExchange/src/Win_in.Sfs.Wms.DataExchange.Agent/Win_in.Sfs.Wms.DataExchange.Agent.csproj
  28. 16
      be/DataExchange/src/Win_in.Sfs.Wms.DataExchange.Agent/appsettings.json
  29. 39
      be/DataExchange/src/Win_in.Sfs.Wms.DataExchange.Agent/serilogsettings.json
  30. 15
      be/DataExchange/src/Win_in.Sfs.Wms.DataExchange.Application.Contracts/WMS/DeliverNote/DeliverNoteDetailExchangeDto.cs
  31. 15
      be/DataExchange/src/Win_in.Sfs.Wms.DataExchange.Application.Contracts/WMS/DeliverRequest/DeliverRequestDetailExchangeDto.cs
  32. 9
      be/DataExchange/src/Win_in.Sfs.Wms.DataExchange.Application.Contracts/WMS/DeliverRequest/DeliverRequestExchangeDto.cs
  33. 30
      be/DataExchange/src/Win_in.Sfs.Wms.DataExchange.Application.Contracts/Win_in.Sfs.Wms.DataExchange.Application.Contracts.xml
  34. 6
      be/Hosts/Core.Host/Win_in.Sfs.Core.Host/Properties/PublishProfiles/FolderProfile.pubxml
  35. 8
      be/Hosts/WmsPda.Host/Win_in.Sfs.Wms.Pda.Host/Controllers/Inventories/BalanceController.cs
  36. 27
      be/Hosts/WmsPda.Host/Win_in.Sfs.Wms.Pda.Host/Controllers/Jobs/IssueJobs/AssembleIssueJobsController.cs
  37. 27
      be/Hosts/WmsPda.Host/Win_in.Sfs.Wms.Pda.Host/Controllers/Jobs/IssueJobs/CoatingIssueJobsController.cs
  38. 27
      be/Hosts/WmsPda.Host/Win_in.Sfs.Wms.Pda.Host/Controllers/Jobs/IssueJobs/InjectionIssueJobsController.cs
  39. 27
      be/Hosts/WmsPda.Host/Win_in.Sfs.Wms.Pda.Host/Controllers/Jobs/IssueJobs/KittingIssueJobsController.cs
  40. 27
      be/Hosts/WmsPda.Host/Win_in.Sfs.Wms.Pda.Host/Controllers/Jobs/IssueJobs/SparePartIssueJobsController.cs
  41. 2
      be/Hosts/WmsPda.Host/Win_in.Sfs.Wms.Pda.Host/Controllers/Jobs/JobController.cs
  42. 87
      be/Hosts/WmsPda.Host/Win_in.Sfs.Wms.Pda.Host/Controllers/Jobs/ThirdLocationJobController.cs
  43. 2
      be/Hosts/WmsPda.Host/Win_in.Sfs.Wms.Pda.Host/Controllers/Jobs/TransferLibJobController.cs
  44. 45
      be/Hosts/WmsPda.Host/Win_in.Sfs.Wms.Pda.Host/Controllers/Stores/InjectionPlanRequestController.cs
  45. 2
      be/Hosts/WmsPda.Host/Win_in.Sfs.Wms.Pda.Host/Controllers/Stores/IssueRequest/InjectionRequestController.cs
  46. 15
      be/Hosts/WmsPda.Host/Win_in.Sfs.Wms.Pda.Host/Controllers/Stores/PurchaseReceiptRequestController.cs
  47. 9
      be/Hosts/WmsPda.Host/Win_in.Sfs.Wms.Pda.Host/Controllers/Stores/PurchaseReturnNoteController.cs
  48. 5
      be/Hosts/WmsPda.Host/Win_in.Sfs.Wms.Pda.Host/Controllers/Stores/PurchaseReturnRequestController.cs
  49. 11
      be/Hosts/WmsPda.Host/Win_in.Sfs.Wms.Pda.Host/Controllers/Stores/ThirdLocationNoteController.cs
  50. 11
      be/Hosts/WmsPda.Host/Win_in.Sfs.Wms.Pda.Host/Controllers/Stores/ThirdLocationRequestController.cs
  51. 6
      be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application.Contracts/Kittings/DTOs/KittingDTO.cs
  52. 5
      be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application.Contracts/Kittings/DTOs/KittingDetailDTO.cs
  53. 5
      be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application.Contracts/Kittings/Inputs/KittingDetailInput.cs
  54. 11
      be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application.Contracts/Kittings/Inputs/KittingImportInput.cs
  55. 162
      be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application.Contracts/SplitPackings/Dtos/SplitPackingRecDto.cs
  56. 7
      be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application.Contracts/SplitPackings/ISplitPackingRecAppService.cs
  57. 167
      be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application.Contracts/SplitPackings/Inputs/SplitPackingRecEditInput.cs
  58. 13
      be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application/Dicts/DictAppService.cs
  59. 24
      be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application/Kittings/KittingAppService.cs
  60. 1
      be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application/Kittings/KittingAutoMapperProfile.cs
  61. 32
      be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application/PositionCodes/PositionCodeAppService.cs
  62. 19
      be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application/ProductionLineItems/ProductionLineItemAppService.cs
  63. 77
      be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application/SplitPackings/SplitPackingRecAutoMapperProfile.cs
  64. 272
      be/Modules/BaseData/src/Win_in.Sfs.Basedata.Domain.Shared/IHasPurchaseInfo.cs
  65. 5
      be/Modules/BaseData/src/Win_in.Sfs.Basedata.Domain.Shared/Win_in.Sfs.Basedata.Domain.Shared.csproj
  66. 5
      be/Modules/BaseData/src/Win_in.Sfs.Basedata.Domain/Kittings/KittingDetail.cs
  67. 158
      be/Modules/BaseData/src/Win_in.Sfs.Basedata.Domain/SplitPackings/SplitPackingRec.cs
  68. 62
      be/Modules/BaseData/src/Win_in.Sfs.Basedata.Domain/SplitPackings/SplitPackingRecManager.cs
  69. 4443
      be/Modules/BaseData/src/Win_in.Sfs.Basedata.EntityFrameworkCore/Migrations/20240624071015_BaseData.Designer.cs
  70. 424
      be/Modules/BaseData/src/Win_in.Sfs.Basedata.EntityFrameworkCore/Migrations/20240624071015_BaseData.cs
  71. 4385
      be/Modules/BaseData/src/Win_in.Sfs.Basedata.EntityFrameworkCore/Migrations/20240627020919_Basedata20240627.Designer.cs
  72. 107
      be/Modules/BaseData/src/Win_in.Sfs.Basedata.EntityFrameworkCore/Migrations/20240627020919_Basedata20240627.cs
  73. 129
      be/Modules/BaseData/src/Win_in.Sfs.Basedata.EntityFrameworkCore/Migrations/BasedataDbContextModelSnapshot.cs
  74. 1
      be/Modules/BaseData/src/Win_in.Sfs.Basedata.EntityFrameworkCore/PositionCodes/PositionCodeDbContextModelCreatingExtensions.cs
  75. 21
      be/Modules/BaseData/src/Win_in.Sfs.Basedata.EntityFrameworkCore/SplitPackings/SplitPackingRecDbContextModelCreatingExtensions.cs
  76. 1
      be/Modules/Inventory/src/Win_in.Sfs.Wms.Inventory.Application.Contracts/Balances/IBalanceAppService.cs
  77. 18
      be/Modules/Inventory/src/Win_in.Sfs.Wms.Inventory.Application/Balances/BalanceAppService.cs
  78. 113
      be/Modules/Inventory/src/Win_in.Sfs.Wms.Inventory.Domain/Balances/BalanceManager.cs
  79. 4
      be/Modules/Inventory/src/Win_in.Sfs.Wms.Inventory.Domain/Balances/IBalanceManager.cs
  80. 3
      be/Modules/Inventory/src/Win_in.Sfs.Wms.Inventory.Domain/Transactions/Transaction.cs
  81. 29
      be/Modules/Label/src/Win_in.Sfs.Label.Application/InventoryLabels/InventoryLabelAppService.cs
  82. 2
      be/Modules/Shared/src/Win_in.Sfs.Shared.Application/ExportAndImport/ClosedXmlExportImportService.cs
  83. 4
      be/Modules/Shared/src/Win_in.Sfs.Shared.Domain.Shared/Enums/Inventory/EnumTransType.cs
  84. 4
      be/Modules/Shared/src/Win_in.Sfs.Shared.Domain.Shared/Enums/Job/EnumJobStatus.cs
  85. 6
      be/Modules/Shared/src/Win_in.Sfs.Shared.Domain.Shared/Enums/Store/EnumIssueRequestType.cs
  86. 5
      be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Jobs/DeliverJobs/DTOs/DeliverJobDTO.cs
  87. 5
      be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Jobs/DeliverJobs/Inputs/DeliverJobEditInput.cs
  88. 20
      be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Jobs/IssueJobs/AssembleIssueJobs/DTOs/AssembleIssueJobDTO.cs
  89. 21
      be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Jobs/IssueJobs/AssembleIssueJobs/Inputs/AssembleIssueJobEditInput.cs
  90. 21
      be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Jobs/IssueJobs/CoatingIssueJobs/DTOs/CoatingIssueJobDTO.cs
  91. 21
      be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Jobs/IssueJobs/CoatingIssueJobs/Inputs/CoatingIssueJobEditInput.cs
  92. 21
      be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Jobs/IssueJobs/InjectionJobs/DTOs/InjectionIssueJobDTO.cs
  93. 21
      be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Jobs/IssueJobs/InjectionJobs/Inputs/InjectionIssueJobEditInput.cs
  94. 21
      be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Jobs/IssueJobs/KittingIssueJobs/DTOs/KittingIssueJobDTO.cs
  95. 21
      be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Jobs/IssueJobs/KittingIssueJobs/Inputs/KittingIssueJobEditInput.cs
  96. 21
      be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Jobs/IssueJobs/SparePartIssueJobs/DTOs/SparePartIssueJobDTO.cs
  97. 21
      be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Jobs/IssueJobs/SparePartIssueJobs/Inputs/SparePartIssueJobEditInput.cs
  98. 40
      be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Jobs/ThirdLocationJobs/DTOs/ThirdLocationJobDTO.cs
  99. 112
      be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Jobs/ThirdLocationJobs/DTOs/ThirdLocationJobDetailDTO.cs
  100. 18
      be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Jobs/ThirdLocationJobs/IThirdLocationJobAppService.cs

4
be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.Domain.Fawtyg.Mes/MesOut/MesOut.cs

@ -13,7 +13,7 @@ public class MesOut : Entity
/// <summary>
/// 条码号(20240430添加)
/// </summary>
public string Mesout_barcode { get; set; }
// public string Mesout_barcode { get; set; }
/// <summary>
/// 调出储位
/// </summary>
@ -58,7 +58,7 @@ public class MesOut : Entity
/// 返线数量
/// </summary>
public decimal Mesout_bad { get; set; }
//public string Mes_Barcode { get; set; }
public string Mes_Barcode { get; set; }
public override object[] GetKeys()
{

4
be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.EntityFrameworkCore.Fawtyg.Mes/MesOut/MesOutDbContextModelCreatingExtensions.cs

@ -17,7 +17,7 @@ public static class MesOutDbContextModelCreatingExtensions
//Properties
b.Property(q => q.Mesout_ref_nbr).HasMaxLength(36);
b.Property(q => q.Mesout_barcode).HasMaxLength(20);
//b.Property(q => q.Mesout_barcode).HasMaxLength(20);
b.Property(q => q.Mesout_id).HasMaxLength(1);
b.Property(q => q.Mesout_part).HasMaxLength(20);
b.Property(q => q.Mesout_quality).HasMaxLength(20);
@ -30,7 +30,7 @@ public static class MesOutDbContextModelCreatingExtensions
b.Property(q => q.refno).HasMaxLength(45);
b.Property(q => q.Mesout_bad).HasPrecision(18, 2);
b.Property(q => q.Yl1);
//b.Property(q => q.Mes_Barcode).HasMaxLength(50);
b.Property(q => q.Mes_Barcode).HasMaxLength(50);
});
}

4
be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.Fawtyg.EosAgent/EosAgentModule.cs

@ -165,8 +165,8 @@ public class EosAgentModule : AbpModule
ApplicationInitializationContext context)
{
context.AddBackgroundWorkerAsync<EosIncomingBackgroundWorker>();
context.AddBackgroundWorkerAsync<EosOutgoingBackgroundWorker>();
//context.AddBackgroundWorkerAsync<EosIncomingBackgroundWorker>();
context.AddBackgroundWorkerAsync<EosOutgoingBackgroundWorker>();
}
}

11
be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.Fawtyg.EosAgent/Incoming/EosIncomingBackgroundWorker.cs

@ -11,7 +11,7 @@ namespace Win_in.Sfs.Wms.DataExchange.Fawtyg.EosAgent;
public class EosIncomingBackgroundWorker : AsyncPeriodicBackgroundWorkerBase
{
private readonly string Incoming = "EOS Incoming";
private readonly string Incoming = "EOS接收";
private readonly IOptions<EosOptions> _options;
@ -28,10 +28,10 @@ public class EosIncomingBackgroundWorker : AsyncPeriodicBackgroundWorkerBase
[UnitOfWork]
protected override async Task DoWorkAsync(PeriodicBackgroundWorkerContext workerContext)
{
Logger.LogInformation($"Starting: Handling {Incoming}");
Logger.LogInformation($"开始: 执行 {Incoming}");
if (!_options.Value.IncomingOptions.Active)
{
Logger.LogInformation($"{Incoming} is not active!");
Logger.LogInformation($"{Incoming} 已关闭没有执行!");
return;
}
@ -42,6 +42,7 @@ public class EosIncomingBackgroundWorker : AsyncPeriodicBackgroundWorkerBase
var plansFromExternalList = await planReader.ReadAsync().ConfigureAwait(false);
//转换Plan
await planConverter.ConvertAsync(plansFromExternalList).ConfigureAwait(false);
Logger.LogInformation($"处理采购订单【{plansFromExternalList.Count}】条数据");
Logger.LogInformation($"读取 发货单");
var shipHandleService = workerContext.ServiceProvider.GetRequiredService<ShipReader>();
@ -50,6 +51,7 @@ public class EosIncomingBackgroundWorker : AsyncPeriodicBackgroundWorkerBase
var shipsFromExternalList = await shipHandleService.ReadAsync().ConfigureAwait(false);
//转换Ship
await shipConverter.ConvertAsync(shipsFromExternalList).ConfigureAwait(false);
Logger.LogInformation($"处理发货单【{shipsFromExternalList.Count}】条数据");
Logger.LogInformation($"读取 产品");
var productHandleService = workerContext.ServiceProvider.GetRequiredService<ProductReader>();
@ -58,8 +60,9 @@ public class EosIncomingBackgroundWorker : AsyncPeriodicBackgroundWorkerBase
var productsFromExternalList = await productHandleService.ReadAsync().ConfigureAwait(false);
// 转换Product
await productConverter.ConvertAsync(productsFromExternalList).ConfigureAwait(false);
Logger.LogInformation($"处理产品【{productsFromExternalList.Count}】条数据");
Logger.LogInformation($"Completed: Handling {Incoming}");
Logger.LogInformation($"提交: 执行 {Incoming}");
}
}

1
be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.Fawtyg.EosAgent/Incoming/PlanReader.cs

@ -111,6 +111,7 @@ public class PlanReader : IReader
{
0 => EnumExchangeDataAction.Add,
1 => EnumExchangeDataAction.Delete,
2=> EnumExchangeDataAction.Modify,
_ => throw new ArgumentOutOfRangeException()
},
SourceSystem = EnumSystemType.SCP.ToString(),

2
be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.Fawtyg.EosAgent/Incoming/ShipConverter.cs

@ -118,7 +118,7 @@ public class ShipConverter : IIncomingConverter
purchaseLabel.LabelType = EnumLabelType.PurchaseLabel;
var supplierDto = await _supplierAppService.GetByCodeAsync(exchangeAsn.SupplierCode).ConfigureAwait(false);
purchaseLabel.SupplierCode = exchangeAsn.SupplierCode;
purchaseLabel.PoNumber = exchangeAsn.Number;
purchaseLabel.PoNumber = exchangeAsn.PoNumber;
purchaseLabel.Qty = exchangeAsn.Detail.Qty;

2
be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.Fawtyg.EosAgent/Outgoing/ArriveConverter.cs

@ -114,7 +114,7 @@ public class ArriveConverter : IOutgoingConverter
PlanBillNo = detail.PoNumber,
ShipBillNo = detail.AsnNumber,
DocNo = exchangeReceipt.Number,
DetailMatNo = detail.ToPackingCode,
DetailMatNo =string.IsNullOrEmpty(detail.Remark) ? detail.ToPackingCode: detail.Remark,
ERP = detail.ItemCode,
Qty = detail.Qty,
HgQty = detail.Qty,

10
be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.Fawtyg.EosAgent/Outgoing/EosOutgoingBackgroundWorker.cs

@ -10,7 +10,7 @@ namespace Win_in.Sfs.Wms.DataExchange.Fawtyg.EosAgent;
public class EosOutgoingBackgroundWorker : AsyncPeriodicBackgroundWorkerBase
{
private readonly string Outgoing = "EOS Outgoing";
private readonly string Outgoing = "EOS发送";
private readonly IOptions<EosOptions> _options;
@ -28,10 +28,10 @@ public class EosOutgoingBackgroundWorker : AsyncPeriodicBackgroundWorkerBase
[UnitOfWork]
protected override async Task DoWorkAsync(PeriodicBackgroundWorkerContext workerContext)
{
Logger.LogInformation($"Starting: Handling {Outgoing}");
Logger.LogInformation($"开始: 执行 {Outgoing}");
if (!_options.Value.IncomingOptions.Active)
{
Logger.LogInformation($"{Outgoing} is not active!");
Logger.LogInformation($"{Outgoing} 已关闭没有执行!");
return;
}
@ -40,14 +40,16 @@ public class EosOutgoingBackgroundWorker : AsyncPeriodicBackgroundWorkerBase
var arriveNoteList = await arriveConvert.ConvertAsync().ConfigureAwait(false);
var arriveWriter = workerContext.ServiceProvider.GetRequiredService<ArriveNoteWriter>();
await arriveWriter.WriteAsync(arriveNoteList).ConfigureAwait(false);
Logger.LogInformation($"处理采购上架单【{arriveNoteList.Count}】条数据");
Logger.LogInformation($"传出 采购退货单");
var returnConvert = workerContext.ServiceProvider.GetRequiredService<ReturnConverter>();
var returnNoteList = await returnConvert.ConvertAsync().ConfigureAwait(false);
var returnWriter = workerContext.ServiceProvider.GetRequiredService<ReturnNoteWriter>();
await returnWriter.WriteAsync(returnNoteList).ConfigureAwait(false);
Logger.LogInformation($"处理采购退货单【{returnNoteList.Count}】条数据");
Logger.LogInformation($"Completed: Handling {Outgoing}");
Logger.LogInformation($"提交: 执行 {Outgoing}");
}
}

2
be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.Fawtyg.EosAgent/Outgoing/ReturnConverter.cs

@ -80,7 +80,7 @@ public class ReturnConverter : IOutgoingConverter
PlanBillNo = exchangeReturn.PoNumber,
ShipBillNo = exchangeReturn.AsnNumber,
DocNo = exchangeReturn.Number,
DetailMatNo = detail.PackingCode,
DetailMatNo = string.IsNullOrEmpty(detail.Remark)? detail.PackingCode: detail.Remark,
ERP = detail.ItemCode,
RtQty = detail.Qty,
RtSon = detail.Reason,

14
be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.Fawtyg.EosAgent/appsettings.json

@ -1,12 +1,12 @@
{
"ConnectionStrings": {
"Default": "Server=10.164.113.32,1818\\SHDB;Database=Wms_Dy_ShangHai;uid=ShWmsUser;pwd=Faty@Wms_20230413#SH;TrustServerCertificate=True",
"DataExchange": "Server=10.164.113.32,1818\\SHDB;Database=Wms_DataExchange_Main_Dy_ShangHai;uid=ShWmsUser;pwd=Faty@Wms_20230413#SH;TrustServerCertificate=True",
"EOS": "Server=61.139.155.47;Database=EOSSH;Uid=wms;Pwd=1;TrustServerCertificate=True"
"Default": "Server=dev.ccwin-in.com,13319;Database=WMS_DongYang_Main_CC;uid=ccwin-in;pwd=Microsoft@2022;TrustServerCertificate=True;Encrypt=false",
"DataExchange": "Server=dev.ccwin-in.com,13319;Database=WMS_DongYang_DataExchange_CC;uid=ccwin-in;pwd=Microsoft@2022;TrustServerCertificate=True;Encrypt=false",
"EOS": "Server=10.164.0.224;Database=EOSNEV;Uid=wms;Pwd=1;TrustServerCertificate=True"
},
"AuthServer": {
"Authority": "http://10.164.113.31:60083/",
"Authority": "http://dev.ccwin-in.com:60083/",
"RequireHttpsMetadata": "false",
"SwaggerClientId": "admin",
"SwaggerClientSecret": "1q2w3E*",
@ -25,13 +25,13 @@
"RemoteServices": {
"BaseData": {
"BaseUrl": "http://10.164.113.31:60084/"
"BaseUrl": "http://dev.ccwin-in.com:60084/"
},
"Store": {
"BaseUrl": "http://10.164.113.31:60085/"
"BaseUrl": "http://dev.ccwin-in.com:60085/"
},
"Label": {
"BaseUrl": "http://10.164.113.31:60082/"
"BaseUrl": "http://dev.ccwin-in.com:60082/"
}
},
"EosOptions": {

6
be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.Fawtyg.InjectionMoldingTaskAgent/appsettings.json

@ -67,13 +67,13 @@
"InjectionMoldingTaskOptions": {
"AutoRemote": {
"IpAddress": "http://localhost:59094/",
"IpAddress": "http://10.164.227.103:30000/",
"UserName": "",
"Password": "",
"Token": "",
"AreaIDs": "1",
"Interval" : "3", // interval
"TimeCycle" :"5"
"Interval": "3", // interval
"TimeCycle": "5"
},
"IncomingOptions": {

1
be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.Fawtyg.MesAgent/FawtygAutoMapperProfile.cs

@ -250,7 +250,6 @@ public class FawtygAutoMapperProfile : Profile
.Ignore(x => x.StdPackQty);
CreateMap<DeliverRequestExchangeDto, DeliverRequestEditInput>()
.Ignore(x => x.DeliverPlanNumber)
.Ignore(x => x.ExtraProperties)
.Ignore(x => x.Details)
.Ignore(x => x.CustomerAddressCode)

13
be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.Fawtyg.MesAgent/Incoming/DeliveryReader.cs

@ -82,7 +82,8 @@ public class DeliveryReader : IReader
DataAction = EnumExchangeDataAction.Add,
SourceSystem = EnumSystemType.MES.ToString(),
SourceDataId = Delivery.mesout_delivery_id.ToString(),
SourceDataGroupCode =Delivery.mesout_delivery_type=="0"? Delivery.mesout_delivery_no : Delivery.mesout_delivery_plan,
// SourceDataGroupCode =Delivery.mesout_delivery_type=="0"? Delivery.mesout_delivery_no : Delivery.mesout_delivery_plan,
SourceDataGroupCode = Delivery.mesout_delivery_plan,
SourceDataDetailCode = Delivery.mesout_delivery_customer,
SourceDataContent = JsonSerializer.Serialize(Delivery),
WriteTime = DateTime.Now,
@ -98,20 +99,24 @@ public class DeliveryReader : IReader
var mesRequest = new DeliverRequestExchangeDto()
{
DeliverRequestType = Delivery.mesout_delivery_type == "0" ? EnumDeliverRequestType.FIS : EnumDeliverRequestType.Normal,
//DeliverPlanNumber= Delivery.mesout_delivery_type == "0" ? Delivery.mesout_delivery_no : Delivery.mesout_delivery_plan,
DeliverPlanNumber =Delivery.mesout_delivery_plan,
CustomerCode = Delivery.mesout_delivery_customer,
Number = Delivery.mesout_delivery_no,
Worker = "MESFY",
ActiveDate = DateTime.TryParse(Delivery.mesout_delivery_wt, out DateTime dateTime) ? dateTime : DateTime.Now,
DeliverTime = DateTime.TryParse(Delivery.mesout_delivery_wt, out DateTime dateTime1) ? dateTime1 : DateTime.Now
DeliverTime = DateTime.TryParse(Delivery.mesout_delivery_wt, out DateTime dateTime1) ? dateTime1 : DateTime.Now,
MesTruckNumber="",
};
var mesRequestDetail = new DeliverRequestDetailExchangeDto()
{
ItemCode = Delivery.mesout_delivery_part,
Qty = Delivery.mesout_delivery_num,
AreaCode = Delivery.mesout_delivery_loc,
MesDeliveryNo=Delivery.mesout_delivery_no,
//MesDeliveryNo=Delivery.mesout_delivery_no,
MesDeliveryPlan = Delivery.mesout_delivery_plan,
IdentityNo =Delivery.mesout_delivery_identity_no
IdentityNo =Delivery.mesout_delivery_identity_no,
MesDeliveryContainer= Delivery.mesout_delivery_container
};
mesRequest.Detail = mesRequestDetail;
return mesRequest;

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

@ -14,7 +14,7 @@ namespace Win_in.Sfs.Wms.DataExchange.Fawtyg.MesAgent;
public class MesIncomingBackgroundWorker : AsyncPeriodicBackgroundWorkerBase
{
private readonly string Incoming = "MES Incoming";
private readonly string Incoming = "MES接收";
private readonly IOptions<MesOptions> _options;
@ -31,10 +31,10 @@ public class MesIncomingBackgroundWorker : AsyncPeriodicBackgroundWorkerBase
[UnitOfWork]
protected override async Task DoWorkAsync(PeriodicBackgroundWorkerContext workerContext)
{
Logger.LogInformation($"Starting: Handling {Incoming}");
Logger.LogInformation($"开始: 执行 {Incoming}");
if (!_options.Value.IncomingOptions.Active)
{
Logger.LogInformation($"{Incoming} is not active!");
Logger.LogInformation($"{Incoming} 已关闭没有执行!");
return;
}
@ -45,7 +45,8 @@ public class MesIncomingBackgroundWorker : AsyncPeriodicBackgroundWorkerBase
return;
}
Logger.LogInformation($"Read MesOut");//缴库
#region 缴库 MesOut
Logger.LogInformation($"读取缴库(MesOut)");//缴库
var mesOutReader = workerContext.ServiceProvider.GetRequiredService<MesOutReader>();
var mesOutConverter = workerContext.ServiceProvider.GetRequiredService<MesOutConverter>();
var TransferNoteConverter = workerContext.ServiceProvider.GetRequiredService<QtyrfeConverter>();
@ -59,74 +60,92 @@ public class MesIncomingBackgroundWorker : AsyncPeriodicBackgroundWorkerBase
{
await TransferNoteConverter.ConvertAsync(mesOutsFromExternalList_TransferNote).ConfigureAwait(false);
}
Logger.LogInformation($"处理完工收货(缴库)【{mesOutsFromExternalList_ProductReceipt.Count}】条数据");
Logger.LogInformation($"处理储位调拨【{mesOutsFromExternalList_TransferNote.Count}】条数据");
#endregion
Logger.LogInformation($"Read Scrap");//报废
#region 报废 Scrap
Logger.LogInformation($"读取报废(Scrap)");//报废
var scrapReader = workerContext.ServiceProvider.GetRequiredService<ScrapReader>();
var scrapConverter = workerContext.ServiceProvider.GetRequiredService<ScrapConverter>();
//读取并保存Scrap
var scrapsFromExternalList = await scrapReader.ReadAsync().ConfigureAwait(false);
//转换Scrap
await scrapConverter.ConvertAsync(scrapsFromExternalList).ConfigureAwait(false);
Logger.LogInformation($"处理报废【{scrapsFromExternalList.Count}】条数据");
#endregion
Logger.LogInformation($"Read BackFlush");//耗用单
#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
Logger.LogInformation($"Read TransferNote");//储位调拨
#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
Logger.LogInformation($"Read Frozen");//冻结解冻
#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
Logger.LogInformation($"Read Delivery");//成品发运
#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($"Read 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($"Completed: Handling {Incoming}");
Logger.LogInformation($"提交: 执行 {Incoming}");
#region 未启用接口启用时需要看逻辑修改
//上海和安徽无此接口
//Logger.LogInformation($"Read PullTask");//拉动任务
//Logger.LogInformation($"读取拉动任务 (PullTask)");//拉动任务
//var pullTaskReader = workerContext.ServiceProvider.GetRequiredService<PullTaskReader>();
//var pullTaskConverter = workerContext.ServiceProvider.GetRequiredService<PullTaskConverter>();
////读取并保存PullTask
//var pullTaskFromExternalList = await pullTaskReader.ReadAsync().ConfigureAwait(false);
////转换PullTask
//await pullTaskConverter.ConvertAsync(pullTaskFromExternalList).ConfigureAwait(false);
// Logger.LogInformation($"处理拉动任务【{pullTaskFromExternalList.Count}】条数据");
//上海和安徽无此接口
//Logger.LogInformation($"Read Issue");
//Logger.LogInformation($"Read Issue");
//var pckHandleService = workerContext.ServiceProvider.GetRequiredService<IssueReader>();
//var pckConverter = workerContext.ServiceProvider.GetRequiredService<IssueConverter>();
////读取并保持Pck

2
be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.Fawtyg.MesAgent/Incoming/MesOutReader.cs

@ -167,7 +167,7 @@ public class MesOutReader : IReader
LocationErpCode = mesOut.Mesout_loc,
Remark = mesOut.memo,
ReturnQty = mesOut.Mesout_bad,
MesBarCode = mesOut.Mesout_barcode,
MesBarCode = mesOut.Mes_Barcode,
MesQuality = mesOut.Mesout_quality
};

2
be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.Fawtyg.MesAgent/appsettings.json

@ -2,7 +2,7 @@
"ConnectionStrings": {
"Default": "Server=dev.ccwin-in.com,13319;Database=WMS_DongYang_Main_CC;uid=ccwin-in;pwd=Microsoft@2022;TrustServerCertificate=True;Encrypt=false",
"DataExchange": "Server=dev.ccwin-in.com,13319;Database=WMS_DongYang_DataExchange_CC;uid=ccwin-in;pwd=Microsoft@2022;TrustServerCertificate=True;Encrypt=false",
"MES": "Server=dev.ccwin-in.com,13319;Database=MES_SH;uid=ccwin-in;pwd=Microsoft@2022;TrustServerCertificate=True;Encrypt=false"
"MES": "Server=10.164.233.7;Database=MES_JY;uid=sa;pwd=Asdf1234$;TrustServerCertificate=True;Encrypt=false"
},
"AuthServer": {

4
be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.Fawtyg.TyrpAgent/FawtygAutoMapperProfile.cs

@ -12,6 +12,8 @@ using Win_in.Sfs.Wms.DataExchange.WMS.CustomerReturnNote;
using Win_in.Sfs.Wms.DataExchange.WMS.DeliverNote;
using Win_in.Sfs.Wms.DataExchange.WMS.Deparment;
using Win_in.Sfs.Wms.DataExchange.WMS.Dict;
using Win_in.Sfs.Wms.DataExchange.WMS.ErpLocation;
using Win_in.Sfs.Wms.DataExchange.WMS.ErpLocationItem;
using Win_in.Sfs.Wms.DataExchange.WMS.InterfaceCalendar;
using Win_in.Sfs.Wms.DataExchange.WMS.ItemBasic;
using Win_in.Sfs.Wms.DataExchange.WMS.ItemTransformNote;
@ -123,5 +125,7 @@ public class FawtygAutoMapperProfile : Profile
CreateMap<ProductRecycleMaterialDetailDTO, ProductRecycleMaterialDetailExchangeDto>();
CreateMap<BackFlushNoteExchangeDto, BackFlushNoteEditInput>();
CreateMap<BackFlushNoteDetailExchangeDto, BackFlushNoteDetailInput>();
CreateMap<ErpLocationExchangeDto, ErpLocationEditInput>();
CreateMap<ErpLocationItemExchangeDto, ErpLocationItemEditInput>();
}
}

2
be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.Fawtyg.TyrpAgent/Incoming/ItemBasicReader.cs

@ -127,7 +127,7 @@ public class ItemBasicReader : IReader
Code = product.mes_product_part,
Name = product.mes_product_part_ser,
Desc1 = product.mes_product_desc,
//Desc2=product.mes_product_fih_factory,//目前没有这个字段
Desc2=product.mes_product_fih_factory,//NEV新加字段,正厂编码
Status = product.mes_product_active == "Y" ? EnumItemStatus.Active : EnumItemStatus.Disable,
#region 制造类别

82
be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.Fawtyg.TyrpAgent/Incoming/TyrpIncomingBackgroundWorker.cs

@ -14,7 +14,7 @@ namespace Win_in.Sfs.Wms.DataExchange.Fawtyg.TyrpAgent;
public class TyrpIncomingBackgroundWorker : AsyncPeriodicBackgroundWorkerBase
{
private readonly string Incoming = "TYRP Incoming";
private readonly string Incoming = "TYRP接收";
private readonly IOptions<TyrpOptions> _options;
@ -33,10 +33,10 @@ public class TyrpIncomingBackgroundWorker : AsyncPeriodicBackgroundWorkerBase
[UnitOfWork]
protected override async Task DoWorkAsync(PeriodicBackgroundWorkerContext workerContext)
{
Logger.LogInformation($"Starting: Handling {Incoming}");
Logger.LogInformation($"开始: 执行 {Incoming}");
if (!_options.Value.IncomingOptions.Active)
{
Logger.LogInformation($"{Incoming} is not active!");
Logger.LogInformation($"{Incoming} 已关闭没有执行!");
return;
}
@ -59,15 +59,20 @@ public class TyrpIncomingBackgroundWorker : AsyncPeriodicBackgroundWorkerBase
common.updatedt = DateTime.Now;
common.isupdate = false;
Logger.LogInformation($"Read ItemBasic");//物品
#region 物品 ItemBasic
Logger.LogInformation($"读取物品 ItemBasic");//物品
var itemBasicReader = workerContext.ServiceProvider.GetRequiredService<ItemBasicReader>();
var itemBasicConverter = workerContext.ServiceProvider.GetRequiredService<ItemBasicConverter>();
//读取并保存itemBasic
var itemBasicOutsFromExternalList = await itemBasicReader.ReadAsync().ConfigureAwait(false);
//转换itemBasic
await itemBasicConverter.ConvertAsync(itemBasicOutsFromExternalList).ConfigureAwait(false);
Logger.LogInformation($"处理物品【{itemBasicOutsFromExternalList.Count}】条数据");
#endregion
Logger.LogInformation($"Read User");//用户和部门
#region 用户和部门 User
Logger.LogInformation($"读取用户和部门 User");//用户和部门
var userReader = workerContext.ServiceProvider.GetRequiredService<UserReader>();
var userConverter = workerContext.ServiceProvider.GetRequiredService<UserConverter>();
var departmentConverter = workerContext.ServiceProvider.GetRequiredService<DepartmentConverter>();
@ -79,86 +84,129 @@ public class TyrpIncomingBackgroundWorker : AsyncPeriodicBackgroundWorkerBase
await userConverter.ConvertAsync(userOutsFromExternalList).ConfigureAwait(false);
//转换department
await departmentConverter.ConvertAsync(departmentOutsFromExternalList).ConfigureAwait(false);
Logger.LogInformation($"处理用户【{userOutsFromExternalList.Count}】条数据");
Logger.LogInformation($"处理部门【{departmentOutsFromExternalList.Count}】条数据");
#endregion
Logger.LogInformation($"Read InterfaceCalendar");//账期
#region 账期 InterfaceCalendar
Logger.LogInformation($"读取账期 InterfaceCalendar");//账期
var interfaceCalendarReader = workerContext.ServiceProvider.GetRequiredService<InterfaceCalendarReader>();
var interfaceCalendarConverter = workerContext.ServiceProvider.GetRequiredService<InterfaceCalendarConverter>();
//读取并保存InterfaceCalendar
var interfaceCalendarOutsFromExternalList = await interfaceCalendarReader.ReadAsync().ConfigureAwait(false);
//转换InterfaceCalendar
await interfaceCalendarConverter.ConvertAsync(interfaceCalendarOutsFromExternalList).ConfigureAwait(false);
Logger.LogInformation($"处理账期【{interfaceCalendarOutsFromExternalList.Count}】条数据");
#endregion
Logger.LogInformation($"Read Dict");//系统代码
#region 系统代码 Dict
Logger.LogInformation($"读取系统代码 Dict");//系统代码
var dictReader = workerContext.ServiceProvider.GetRequiredService<DictReader>();
var dictConverter = workerContext.ServiceProvider.GetRequiredService<DictConverter>();
//读取并保存Dict
var dictOutsFromExternalList = await dictReader.ReadAsync().ConfigureAwait(false);
//转换Dict
await dictConverter.ConvertAsync(dictOutsFromExternalList).ConfigureAwait(false);
Logger.LogInformation($"处理系统代码【{dictOutsFromExternalList.Count}】条数据");
#endregion
Logger.LogInformation($"Read Bom");
#region Bom
Logger.LogInformation($"读取报目 Bom");
var BomReader = workerContext.ServiceProvider.GetRequiredService<BomReader>();
var BomConverter = workerContext.ServiceProvider.GetRequiredService<BomConverter>();
//读取并保存Bom
var bomsFromExternalList = await BomReader.ReadAsync().ConfigureAwait(false);
//转换Bom
await BomConverter.ConvertAsync(bomsFromExternalList).ConfigureAwait(false);
Logger.LogInformation($"处理Bom【{bomsFromExternalList.Count}】条数据");
#endregion
Logger.LogInformation($"Read Supplier");//供应商
#region 供应商 Supplier
Logger.LogInformation($"读取供应商 Supplier");//供应商
var SupplierReader = workerContext.ServiceProvider.GetRequiredService<SupplierReader>();
var SupplierConverter = workerContext.ServiceProvider.GetRequiredService<SupplierConverter>();
//读取并保存Supplier
var suppliersFromExternalList = await SupplierReader.ReadAsync().ConfigureAwait(false);
//转换Supplier
await SupplierConverter.ConvertAsync(suppliersFromExternalList).ConfigureAwait(false);
Logger.LogInformation($"处理供应商【{suppliersFromExternalList.Count}】条数据");
#endregion
Logger.LogInformation($"Read Dictpj");//专案代码
#region 专案代码 Dictpj
Logger.LogInformation($"读取专案代码 Dictpj");//专案代码
var DictpjReader = workerContext.ServiceProvider.GetRequiredService<DictpjReader>();
//读取并保存Dictpj
var dictpjOutsFromExternalList = await DictpjReader.ReadAsync().ConfigureAwait(false);
//转换Dictpj
await dictConverter.ConvertAsync(dictpjOutsFromExternalList).ConfigureAwait(false);
Logger.LogInformation($"处理专案代码【{dictpjOutsFromExternalList.Count}】条数据");
#endregion
Logger.LogInformation($"Read Customer");//客户资料
#region ERP库位 ErpLocation
Logger.LogInformation($"读取ERP库位 ErpLocation");//ERP库位
var ErpLocationReader = workerContext.ServiceProvider.GetRequiredService<ErpLocationReader>();
var ErpLocationConverter = workerContext.ServiceProvider.GetRequiredService<ErpLocationConverter>();
//读取并保存ErpLocationItem
var erpLocationFromExternalList = await ErpLocationReader.ReadAsync().ConfigureAwait(false);
//转换ErpLocationItem
await ErpLocationConverter.ConvertAsync(erpLocationFromExternalList).ConfigureAwait(false);
Logger.LogInformation($"处理ERP库位【{erpLocationFromExternalList.Count}】条数据");
#endregion
#region 客户资料 Customer
Logger.LogInformation($"读取客户资料 Customer");//客户资料
var CustomerReader = workerContext.ServiceProvider.GetRequiredService<CustomerReader>();
var CustomerConverter = workerContext.ServiceProvider.GetRequiredService<CustomerConverter>();
//读取并保存Customer
var customersFromExternalList = await CustomerReader.ReadAsync().ConfigureAwait(false);
//转换Customer
await CustomerConverter.ConvertAsync(customersFromExternalList).ConfigureAwait(false);
Logger.LogInformation($"处理客户资料【{customersFromExternalList.Count}】条数据");
#endregion
Logger.LogInformation($"Read ErpLocationItem");//储位与物品对应关系(开账)
#region 储位与物品对应关系(开账) ErpLocationItem
Logger.LogInformation($"读取储位与物品对应关系(开账) ErpLocationItem");//储位与物品对应关系(开账)
var ErpLocationItemReader = workerContext.ServiceProvider.GetRequiredService<ErpLocationItemReader>();
var ErpLocationItemConverter = workerContext.ServiceProvider.GetRequiredService<ErpLocationItemConverter>();
//读取并保存ErpLocationItem
var erpLocationItemFromExternalList = await ErpLocationItemReader.ReadAsync().ConfigureAwait(false);
//转换ErpLocationItem
await ErpLocationItemConverter.ConvertAsync(erpLocationItemFromExternalList).ConfigureAwait(false);
Logger.LogInformation($"处理开账【{erpLocationItemFromExternalList.Count}】条数据");
#endregion
Logger.LogInformation($"Read PurchasePrice");//采购价格
#region 采购价格 PurchasePrice
Logger.LogInformation($"读取采购价格 PurchasePrice");//采购价格
var PurchasePriceReader = workerContext.ServiceProvider.GetRequiredService<PurchasePriceReader>();
var PurchasePriceConverter = workerContext.ServiceProvider.GetRequiredService<PurchasePriceConverter>();
//读取并保存PurchasePrice
var purchasePriceFromExternalList = await PurchasePriceReader.ReadAsync().ConfigureAwait(false);
//转换PurchasePrice
await PurchasePriceConverter.ConvertAsync(purchasePriceFromExternalList).ConfigureAwait(false);
Logger.LogInformation($"处理采购价格【{purchasePriceFromExternalList.Count}】条数据");
#endregion
Logger.LogInformation($"Read SalePrice");//销售价格
#region 销售价格 SalePrice
Logger.LogInformation($"读取销售价格 SalePrice");//销售价格
var SalePriceReader = workerContext.ServiceProvider.GetRequiredService<SalePriceReader>();
var SalePriceConverter = workerContext.ServiceProvider.GetRequiredService<SalePriceConverter>();
//读取并保存SalePrice
var salePriceFromExternalList = await SalePriceReader.ReadAsync().ConfigureAwait(false);
//转换SalePrice
await SalePriceConverter.ConvertAsync(salePriceFromExternalList).ConfigureAwait(false);
Logger.LogInformation($"处理销售价格【{salePriceFromExternalList.Count}】条数据");
#endregion
Logger.LogInformation($"Read StdCostPrice");//标准成本价格
#region 标准成本价格 StdCostPrice
Logger.LogInformation($"读取标准成本价格 StdCostPrice");//标准成本价格
var StdCostPriceReader = workerContext.ServiceProvider.GetRequiredService<StdCostPriceReader>();
var StdCostPriceConverter = workerContext.ServiceProvider.GetRequiredService<StdCostPriceConverter>();
//读取并保存StdCostPrice
var stdCostPriceFromExternalList = await StdCostPriceReader.ReadAsync().ConfigureAwait(false);
//转换StdCostPrice
await StdCostPriceConverter.ConvertAsync(stdCostPriceFromExternalList).ConfigureAwait(false);
Logger.LogInformation($"处理标准成本价格【{stdCostPriceFromExternalList.Count}】条数据");
#endregion
}
else
{
@ -174,7 +222,7 @@ public class TyrpIncomingBackgroundWorker : AsyncPeriodicBackgroundWorkerBase
////转换Customer
//await BackFlushConverter.ConvertAsync(backFlushsFromExternalList).ConfigureAwait(false);
Logger.LogInformation($"Completed: Handling {Incoming}");
Logger.LogInformation($"提交: 执行 {Incoming}");
}
}

2
be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.Fawtyg.TyrpAgent/Outgoing/CustomerReturnNoteConverter.cs

@ -41,7 +41,7 @@ public class CustomerReturnNoteConverter : IOutgoingConverter
{
var outgoingToExternalList = new List<OutgoingToExternal>();
//获取要同步得数据
var outgoingFromWmsList = await _outgoingFromWmsManager.GetToBeProcessedListAsync(EnumOutgoingDataType.UnplannedReceipt, EnumSystemType.ERP).ConfigureAwait(false);
var outgoingFromWmsList = await _outgoingFromWmsManager.GetToBeProcessedListAsync(EnumOutgoingDataType.CustomerReturn, EnumSystemType.ERP).ConfigureAwait(false);
foreach (var outgoingFromWms in outgoingFromWmsList)
{
#region 主表

118
be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.Fawtyg.TyrpAgent/Outgoing/TyrpOutgoingBackgroundWorker.cs

@ -14,7 +14,7 @@ namespace Win_in.Sfs.Wms.DataExchange.Fawtyg.TyrpAgent;
public class TyrpOutgoingBackgroundWorker : AsyncPeriodicBackgroundWorkerBase
{
private readonly string Outgoing = "TYRP Outgoing";
private readonly string Outgoing = "TYRP发送";
private readonly IOptions<TyrpOptions> _options;
@ -32,11 +32,11 @@ public class TyrpOutgoingBackgroundWorker : AsyncPeriodicBackgroundWorkerBase
[UnitOfWork(true, isolationLevel: IsolationLevel.ReadUncommitted, 50)]
protected override async Task DoWorkAsync(PeriodicBackgroundWorkerContext workerContext)
{
Logger.LogInformation($"Starting: Handling {Outgoing}");
Logger.LogInformation($"开始: 执行 {Outgoing}");
if (!_options.Value.OutgoingOptions.Active)
{
Logger.LogInformation($"{Outgoing} is not active!");
Logger.LogInformation($"{Outgoing} 已关闭没有执行!");
return;
}
var scontrolWriter = workerContext.ServiceProvider.GetRequiredService<ScontrolWriter>();//scontrol中间表服务
@ -47,93 +47,93 @@ public class TyrpOutgoingBackgroundWorker : AsyncPeriodicBackgroundWorkerBase
int mesout_asd_count = 0; //mesout_asd插入条数
#region 采购单 PurchaseOrder scontrol
Logger.LogInformation($"Write PurchaseOrder");//采购单
Logger.LogInformation($"传出采购单 PurchaseOrder");//采购单
var purchaseOrderConvert = workerContext.ServiceProvider.GetRequiredService<PurchaseOrderConverter>();
var purchaseOrderList = await purchaseOrderConvert.ConvertAsync().ConfigureAwait(false);
await scontrolWriter.WriteAsync(purchaseOrderList).ConfigureAwait(false);
Logger.LogInformation($"采购单-PurchaseOrder处理{purchaseOrderList.Count}条");
if (purchaseOrderList.Count > 0)
{
Logger.LogInformation($"采购单-PurchaseOrder处理{purchaseOrderList.Count}条");
{
scontrol_count += purchaseOrderList.Count;
}
#endregion
#region 采购退货单 PurchaseReturn scontrol
Logger.LogInformation($"Write PurchaseReturn");//采购退货单(汇总)
Logger.LogInformation($"传出采购退货单 PurchaseReturn");//采购退货单(汇总)
var purchaseReturnConvert = workerContext.ServiceProvider.GetRequiredService<PurchaseReturnConverter>();
var purchaseReturnList = await purchaseReturnConvert.ConvertAsync().ConfigureAwait(false);
await scontrolWriter.WriteAsync(purchaseReturnList).ConfigureAwait(false);
Logger.LogInformation($"采购退货单-PurchaseReturn处理{purchaseReturnList.Count}条");
if (purchaseReturnList.Count > 0)
{
Logger.LogInformation($"采购退货单-PurchaseReturn处理{purchaseReturnList.Count}条");
{
scontrol_count += purchaseReturnList.Count;
}
#endregion
#region 验收单 Putaway scontrol
Logger.LogInformation($"Write PutawayNote");//验收单(汇总)
Logger.LogInformation($"传出验收单 PutawayNote");//验收单(汇总)
var putawayNoteConvert = workerContext.ServiceProvider.GetRequiredService<PutawayNoteConverter>();
var putawayNoteList = await putawayNoteConvert.ConvertAsync().ConfigureAwait(false);
await scontrolWriter.WriteAsync(putawayNoteList).ConfigureAwait(false);
Logger.LogInformation($"验收单-Putaway处理{putawayNoteList.Count}条");
if (putawayNoteList.Count > 0)
{
Logger.LogInformation($"验收单-Putaway处理{putawayNoteList.Count}条");
{
scontrol_count += putawayNoteList.Count;
}
#endregion
#region 线边仓领料单 Issue scontrol
Logger.LogInformation($"Write IssueNote");//线边仓领料单(汇总)
Logger.LogInformation($"传出线边仓领料单 IssueNote");//线边仓领料单(汇总)
var issueNoteConvert = workerContext.ServiceProvider.GetRequiredService<IssueNoteConverter>();
var issueNoteList = await issueNoteConvert.ConvertAsync().ConfigureAwait(false);
await scontrolWriter.WriteAsync(issueNoteList).ConfigureAwait(false);
Logger.LogInformation($"线边仓领料单-Issue处理{issueNoteList.Count}条");
if (issueNoteList.Count > 0)
{
Logger.LogInformation($"线边仓领料单-Issue处理{issueNoteList.Count}条");
scontrol_count += issueNoteList.Count;
}
#endregion
#region 线边仓退料单 ProductionReturn scontrol
Logger.LogInformation($"Write ProductionReturnNote");//线边仓退料单(汇总)
Logger.LogInformation($"传出线边仓退料单 ProductionReturnNote");//线边仓退料单(汇总)
var productionReturnNoteConvert = workerContext.ServiceProvider.GetRequiredService<ProductionReturnNoteConverter>();
var productionReturnNoteList = await productionReturnNoteConvert.ConvertAsync().ConfigureAwait(false);
await scontrolWriter.WriteAsync(productionReturnNoteList).ConfigureAwait(false);
Logger.LogInformation($"线边仓退料单-ProductionReturn处理{productionReturnNoteList.Count}条");
if (productionReturnNoteList.Count > 0)
{
Logger.LogInformation($"线边仓退料单-ProductionReturn处理{productionReturnNoteList.Count}条");
scontrol_count += productionReturnNoteList.Count;
}
#endregion
#region 半成品上架 SemiPutaway scontrol
Logger.LogInformation($"Write SemiPutawayNote");//半成品上架
Logger.LogInformation($"传出半成品上架 SemiPutawayNote");//半成品上架
var semiPutawayNoteConvert = workerContext.ServiceProvider.GetRequiredService<SemiPutawayNoteConverter>();
var semiPutawayNoteList = await semiPutawayNoteConvert.ConvertAsync().ConfigureAwait(false);
await scontrolWriter.WriteAsync(semiPutawayNoteList).ConfigureAwait(false);
Logger.LogInformation($"半成品上架-SemiPutaway处理{semiPutawayNoteList.Count}条");
if (semiPutawayNoteList.Count > 0)
{
Logger.LogInformation($"半成品上架-SemiPutaway处理{semiPutawayNoteList.Count}条");
{
scontrol_count += semiPutawayNoteList.Count;
}
#endregion
#region 储位、线边仓调拨单 和 客户储位调拨单 Transfer scontrol
Logger.LogInformation($"Write TransferNote");//储位、线边仓调拨单 和 客户储位调拨单(汇总)
Logger.LogInformation($"传出储位、线边仓调拨单 和 客户储位调拨单 TransferNote");//储位、线边仓调拨单 和 客户储位调拨单(汇总)
var transferNoteConvert = workerContext.ServiceProvider.GetRequiredService<TransferNoteConverter>();
var transferNoteList = await transferNoteConvert.ConvertAsync().ConfigureAwait(false);
var transferNoteForErpList = transferNoteList.Where(r => r.DataType == EnumOutgoingDataType.TransferForErp.ToString()).ToList();//储位、线边仓调拨单
var transferNoteForCustomList = transferNoteList.Where(r => r.DataType == EnumOutgoingDataType.TransferForCustom.ToString()).ToList();//客户储位调拨单
await scontrolWriter.WriteAsync(transferNoteForErpList).ConfigureAwait(false);
await wmsoutmWriter.WriteAsync(transferNoteForCustomList).ConfigureAwait(false);
Logger.LogInformation($"储位、线边仓调拨单-Transfer处理{transferNoteForErpList.Count}条");
Logger.LogInformation($"客户储位调拨单-Transfer处理{transferNoteForCustomList.Count}条");
if (transferNoteForErpList.Count > 0)
{
Logger.LogInformation($"储位、线边仓调拨单-Transfer处理{transferNoteForErpList.Count}条");
{
scontrol_count += transferNoteForErpList.Count;
}
if (transferNoteForCustomList.Count > 0)
{
Logger.LogInformation($"客户储位调拨单-Transfer处理{transferNoteForCustomList.Count}条");
{
wmsoutm_count += transferNoteForCustomList.Count;
}
#endregion
@ -145,69 +145,73 @@ public class TyrpOutgoingBackgroundWorker : AsyncPeriodicBackgroundWorkerBase
}
#region 出货单 Deliver wmsoutm
Logger.LogInformation($"Write DeliverNote");//出货单(汇总)
Logger.LogInformation($"传出出货单 DeliverNote");//出货单(汇总)
var deliverNoteConvert = workerContext.ServiceProvider.GetRequiredService<DeliverNoteConverter>();
var deliverNoteList = await deliverNoteConvert.ConvertAsync().ConfigureAwait(false);
await wmsoutmWriter.WriteAsync(deliverNoteList).ConfigureAwait(false);
Logger.LogInformation($"出货单-Deliver处理{deliverNoteList.Count}条");
if (deliverNoteList.Count > 0)
{
Logger.LogInformation($"出货单-Deliver处理{deliverNoteList.Count}条");
{
wmsoutm_count += deliverNoteList.Count;
}
#endregion
#region --接口以关闭-- 退货单 UnplannedReceipt wmsoutm
//暂无此接口
//Logger.LogInformation($"Write CustomerReturnNote");//退货单
//var customerReturnNoteConvert = workerContext.ServiceProvider.GetRequiredService<CustomerReturnNoteConverter>();
//var customerReturnNoteList = await customerReturnNoteConvert.ConvertAsync().ConfigureAwait(false);
//await wmsoutmWriter.WriteAsync(customerReturnNoteList).ConfigureAwait(false);
#region 客户退货单 CustomerReturn wmsoutm
Logger.LogInformation($"传出退货单 CustomerReturnNote");//退货单
var customerReturnNoteConvert = workerContext.ServiceProvider.GetRequiredService<CustomerReturnNoteConverter>();
var customerReturnNoteList = await customerReturnNoteConvert.ConvertAsync().ConfigureAwait(false);
await wmsoutmWriter.WriteAsync(customerReturnNoteList).ConfigureAwait(false);
Logger.LogInformation($"退货单-CustomerReturn处理{customerReturnNoteList.Count}条");
if (customerReturnNoteList.Count > 0)
{
wmsoutm_count += customerReturnNoteList.Count;
}
#endregion
#region 非生产领料单 UnplannedIssue wmsoutm
Logger.LogInformation($"Write UnplannedIssueNote");//非生产领料单(汇总)
Logger.LogInformation($"传出非生产领料单 UnplannedIssueNote");//非生产领料单(汇总)
var unplannedIssueNoteConvert = workerContext.ServiceProvider.GetRequiredService<UnplannedIssueNoteConverter>();
var unplannedIssueNoteNoteList = await unplannedIssueNoteConvert.ConvertAsync().ConfigureAwait(false);
await wmsoutmWriter.WriteAsync(unplannedIssueNoteNoteList).ConfigureAwait(false);
Logger.LogInformation($"非生产领料单-UnplannedIssue处理{unplannedIssueNoteNoteList.Count}条");
if (unplannedIssueNoteNoteList.Count > 0)
{
Logger.LogInformation($"非生产领料单-UnplannedIssue处理{unplannedIssueNoteNoteList.Count}条");
wmsoutm_count += unplannedIssueNoteNoteList.Count;
}
#endregion
#region 非生产退料 UnplannedReceipt wmsoutm
Logger.LogInformation($"Write UnplannedReceiptNote");//非生产退料(汇总)
Logger.LogInformation($"传出非生产退料 UnplannedReceiptNote");//非生产退料(汇总)
var unplannedReceiptNoteConvert = workerContext.ServiceProvider.GetRequiredService<UnplannedReceiptNoteConverter>();
var unplannedReceiptNoteList = await unplannedReceiptNoteConvert.ConvertAsync().ConfigureAwait(false);
await wmsoutmWriter.WriteAsync(unplannedReceiptNoteList).ConfigureAwait(false);
Logger.LogInformation($"非生产退料-UnplannedReceipt处理{unplannedReceiptNoteList.Count}条");
if (unplannedReceiptNoteList.Count > 0)
{
Logger.LogInformation($"非生产退料-UnplannedReceipt处理{unplannedReceiptNoteList.Count}条");
{
wmsoutm_count += unplannedReceiptNoteList.Count;
}
#endregion
#region 回收料入库单 RecycledMaterialReceipt wmsoutm
Logger.LogInformation($"Write RecycledMaterialReceiptNote");//回收料入库单
Logger.LogInformation($"传出回收料入库单 RecycledMaterialReceiptNote");//回收料入库单
var recycledMaterialReceiptNoteConvert = workerContext.ServiceProvider.GetRequiredService<RecycledMaterialReceiptNoteConverter>();
var recycledMaterialReceiptNoteList = await recycledMaterialReceiptNoteConvert.ConvertAsync().ConfigureAwait(false);
await wmsoutmWriter.WriteAsync(recycledMaterialReceiptNoteList).ConfigureAwait(false);
Logger.LogInformation($"回收料入库单-RecycledMaterialReceipt处理{recycledMaterialReceiptNoteList.Count}条");
if (recycledMaterialReceiptNoteList.Count > 0)
{
Logger.LogInformation($"回收料入库单-RecycledMaterialReceipt处理{recycledMaterialReceiptNoteList.Count}条");
{
wmsoutm_count += recycledMaterialReceiptNoteList.Count;
}
#endregion
#region 退拆单 ProductRecycle wmsoutm
Logger.LogInformation($"Write BackFlushNote");//退拆单
Logger.LogInformation($"传出退拆单 BackFlushNote");//退拆单
var productRecycleNoteConvert = workerContext.ServiceProvider.GetRequiredService<ProductRecycleNoteConverter>();
var productRecycleNoteList = await productRecycleNoteConvert.ConvertAsync().ConfigureAwait(false);
await wmsoutmWriter.WriteAsync(productRecycleNoteList).ConfigureAwait(false);
Logger.LogInformation($"退拆单-ProductRecycle处理{productRecycleNoteList.Count}条");
if (productRecycleNoteList.Count > 0)
{
Logger.LogInformation($"退拆单-ProductRecycle处理{productRecycleNoteList.Count}条");
{
wmsoutm_count += productRecycleNoteList.Count;
}
#endregion
@ -220,44 +224,44 @@ public class TyrpOutgoingBackgroundWorker : AsyncPeriodicBackgroundWorkerBase
#region --接口以关闭-- 盘点调整单 CountAdjust mesout_asd
//东阳上海和安徽暂时关闭此接口
//Logger.LogInformation($"Write CountAdjusNote");//盘点调整单
//Logger.LogInformation($"传出 CountAdjusNote");//盘点调整单
//var countadjustNoteConvert = workerContext.ServiceProvider.GetRequiredService<CountAdjustNoteConverter>();
//var countadjustNoteList = await countadjustNoteConvert.ConvertAsync().ConfigureAwait(false);
//await countadjustWriter.WriteAsync(countadjustNoteList).ConfigureAwait(false);
#endregion
#region 线边仓调整单 WIPAdjust mesout_asd
Logger.LogInformation($"Write WIPAdjusNote");//线边仓调整单(汇总)
Logger.LogInformation($"传出线边仓调整单 WIPAdjusNote");//线边仓调整单(汇总)
var wipAdjustNoteConvert = workerContext.ServiceProvider.GetRequiredService<WIPAdjusNoteConverter>();
var wipAdjustNoteList = await wipAdjustNoteConvert.ConvertAsync().ConfigureAwait(false);
await countadjustWriter.WriteAsync(wipAdjustNoteList).ConfigureAwait(false);
Logger.LogInformation($"线边仓调整单-WIPAdjust处理{wipAdjustNoteList.Count}条");
if (wipAdjustNoteList.Count > 0)
{
Logger.LogInformation($"线边仓调整单-WIPAdjust处理{wipAdjustNoteList.Count}条");
mesout_asd_count += wipAdjustNoteList.Count;
}
#endregion
#region 回收料调整单 Item_Transform mesout_asd
Logger.LogInformation($"Write ItemTransformNote");//回收料调整单(汇总)
Logger.LogInformation($"传出回收料调整单 ItemTransformNote");//回收料调整单(汇总)
var ItemTransformNoteConvert = workerContext.ServiceProvider.GetRequiredService<ItemTransformNoteConverter>();
var ItemTransformNoteList = await ItemTransformNoteConvert.ConvertAsync().ConfigureAwait(false);
await countadjustWriter.WriteAsync(ItemTransformNoteList).ConfigureAwait(false);
Logger.LogInformation($"回收料调整单-Item_Transform处理{ItemTransformNoteList.Count}条");
if (ItemTransformNoteList.Count > 0)
{
Logger.LogInformation($"回收料调整单-Item_Transform处理{ItemTransformNoteList.Count}条");
{
mesout_asd_count += ItemTransformNoteList.Count;
}
#endregion
#region 报废单、线边仓报废单 Scrap mesout_asd
Logger.LogInformation($"Write ScrapNote");//报废单、线边仓报废单
Logger.LogInformation($"传出报废单、线边仓报废单 ScrapNote");//报废单、线边仓报废单
var scrapNoteConvert = workerContext.ServiceProvider.GetRequiredService<ScrapNoteConverter>();
var scrapNoteList = await scrapNoteConvert.ConvertAsync().ConfigureAwait(false);
await countadjustWriter.WriteAsync(scrapNoteList).ConfigureAwait(false);
Logger.LogInformation($"报废单、线边仓报废单-Scrap处理{scrapNoteList.Count}条");
if (scrapNoteList.Count > 0)
{
Logger.LogInformation($"报废单、线边仓报废单-Scrap处理{scrapNoteList.Count}条");
mesout_asd_count += scrapNoteList.Count;
}
#endregion
@ -269,18 +273,16 @@ public class TyrpOutgoingBackgroundWorker : AsyncPeriodicBackgroundWorkerBase
}
#region 缴库单 ProductReceipt mesout
Logger.LogInformation($"Write ProductReceiptNote");//缴库单
Logger.LogInformation($"传出缴库单 ProductReceiptNote");//缴库单
var productReceiptNoteConvert = workerContext.ServiceProvider.GetRequiredService<ProductReceiptNoteConverter>();
var productReceiptNoteList = await productReceiptNoteConvert.ConvertAsync().ConfigureAwait(false);
var productReceiptNoteWriter = workerContext.ServiceProvider.GetRequiredService<ProductReceiptNoteWriter>();//mesout中间表的服务
await productReceiptNoteWriter.WriteAsync(productReceiptNoteList).ConfigureAwait(false);
if (productReceiptNoteList.Count > 0)
{
Logger.LogInformation($"缴库单-ProductReceipt处理{productReceiptNoteList.Count}条");
}
Logger.LogInformation($"缴库单-ProductReceipt处理{productReceiptNoteList.Count}条");
#endregion
Logger.LogInformation($"Completed: Handling {Outgoing}");
Logger.LogInformation($"提交: 执行 {Outgoing}");
}
}

16
be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.Fawtyg.TyrpAgent/appsettings.json

@ -1,13 +1,13 @@
{
"ConnectionStrings": {
"Default": "Server=dev.ccwin-in.com,13319;Database=WMS_DongYang_Main_CC;uid=ccwin-in;pwd=Microsoft@2022;TrustServerCertificate=True;Encrypt=false",
"DataExchange": "Server=dev.ccwin-in.com,13319;Database=WMS_DongYang_DataExchange_CC;uid=ccwin-in;pwd=Microsoft@2022;TrustServerCertificate=True;Encrypt=false",
"TYRP": "Server=dev.ccwin-in.com,13319;Database=TYRP_CC;Uid=ccwin-in;Pwd=Microsoft@2022;TrustServerCertificate=True",
"Default": "Server=10.164.233.6;Database=WMS_DongYang_Main_CC;uid=ccwin-in;pwd=Microsoft@2022;TrustServerCertificate=True;Encrypt=false",
"DataExchange": "Server=10.164.233.6;Database=WMS_DongYang_DataExchange_CC;uid=ccwin-in;pwd=Microsoft@2022;TrustServerCertificate=True;Encrypt=false",
"TYRP": "Server=10.164.233.6;Database=TYRP_CC;Uid=ccwin-in;Pwd=Microsoft@2022;TrustServerCertificate=True",
"SYBASE_TYRP": "Data Source=10.164.233.4; Port=5000; Database=mesdb; Uid=sa; Pwd=dawning;Charset=cp850;" //iso_1
},
"AuthServer": {
"Authority": "http://dev.ccwin-in.com:60083/",
"Authority": "http://10.164.233.5:60083/",
"RequireHttpsMetadata": "false",
"SwaggerClientId": "admin",
"SwaggerClientSecret": "1q2w3E*",
@ -26,16 +26,16 @@
"RemoteServices": {
"BaseData": {
"BaseUrl": "http://dev.ccwin-in.com:60084/"
"BaseUrl": "http://10.164.233.5:60084/"
},
"Store": {
"BaseUrl": "http://dev.ccwin-in.com:60085/"
"BaseUrl": "http://10.164.233.5:60085/"
},
"Label": {
"BaseUrl": "http://dev.ccwin-in.com:60082/"
"BaseUrl": "http://10.164.233.5:60082/"
},
"Auth": {
"BaseUrl": "http://dev.ccwin-in.com:60083/"
"BaseUrl": "http://10.164.233.5:60083/"
}
},
"TyrpOptions": {

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

6
be/DataExchange/src/Win_in.Sfs.Wms.DataExchange.Agent/IncomingToWmsExtensions.cs

@ -85,9 +85,9 @@ public static class IncomingToWmsExtensions
}
public static async Task HandleErpLocationItemsAsync(this IncomingToWms incomingConverted, PeriodicBackgroundWorkerContext workerContext)
{
//var erpLocationItem = JsonSerializer.Deserialize<ErpLocationItemEditInput>(incomingConverted.DataContent);
//var erpLocationItemAppService = workerContext.ServiceProvider.GetRequiredService<IErpLocationItemAppService>();
//await erpLocationItemAppService.UpsertAsync(erpLocationItem).ConfigureAwait(false);
var erpLocationItem = JsonSerializer.Deserialize<ErpLocationItemEditInput>(incomingConverted.DataContent);
var erpLocationItemAppService = workerContext.ServiceProvider.GetRequiredService<IErpLocationItemAppService>();
await erpLocationItemAppService.UpsertAsync(erpLocationItem).ConfigureAwait(false);
}
public static async Task HandleErpLocationsAsync(this IncomingToWms incomingConverted, PeriodicBackgroundWorkerContext workerContext)
{

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

@ -1,6 +1,8 @@
using System;
using System.Collections.Generic;
using System.Threading.Tasks;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Logging;
using Microsoft.Extensions.Options;
using Volo.Abp.BackgroundWorkers;
using Volo.Abp.Threading;
@ -54,10 +56,9 @@ public class OutgoingFromWmsWorker : AsyncPeriodicBackgroundWorkerBase
await outgoingFromWmsManager.CreateManyAsync(outgoingFromWmsList).ConfigureAwait(false);
await exchangeDataAppService.UpdateManyAsync(exchangeDataList).ConfigureAwait(false);
}
catch (System.Exception ex)
catch (Exception ex)
{
throw ex;
Logger.LogInformation(ex.Message+ex?.InnerException.Message);
}
}
}

28
be/DataExchange/src/Win_in.Sfs.Wms.DataExchange.Agent/Program.cs

@ -1,5 +1,6 @@
using System;
using System.Threading.Tasks;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;
using Serilog;
@ -11,18 +12,25 @@ public class Program
{
public static async Task<int> Main(string[] args)
{
// Log.Logger = new LoggerConfiguration()
//#if DEBUG
// .MinimumLevel.Debug()
//#else
// .MinimumLevel.Information()
//#endif
// .MinimumLevel.Override("Microsoft", LogEventLevel.Information)
// .Enrich.FromLogContext()
// .WriteTo.Async(c => c.File("Logs/logs.txt"))
// .WriteTo.Async(c => c.Console())
// .CreateLogger();
IConfigurationRoot configuration =
new ConfigurationBuilder()
.AddJsonFile("serilogsettings.json", false, true)
.Build();
Log.Logger = new LoggerConfiguration()
#if DEBUG
.MinimumLevel.Debug()
#else
.MinimumLevel.Information()
#endif
.MinimumLevel.Override("Microsoft", LogEventLevel.Information)
.Enrich.FromLogContext()
.WriteTo.Async(c => c.File("Logs/logs.txt"))
.WriteTo.Async(c => c.Console())
.ReadFrom.Configuration(configuration)
.CreateLogger();
try
{
Log.Information("Starting console host.");

2
be/DataExchange/src/Win_in.Sfs.Wms.DataExchange.Agent/Win_in.Sfs.Wms.DataExchange.Agent.csproj

@ -11,10 +11,12 @@
<PackageReference Include="Microsoft.EntityFrameworkCore.Tools" Version="6.0.12" />
<PackageReference Include="Microsoft.Extensions.Hosting" Version="6.0.*" />
<PackageReference Include="Microsoft.Extensions.Http.Polly" Version="6.0.12" />
<PackageReference Include="Serilog.AspNetCore" Version="6.1.0" />
<PackageReference Include="Serilog.Extensions.Hosting" Version="5.0.1" />
<PackageReference Include="Serilog.Sinks.Async" Version="1.5.0" />
<PackageReference Include="Serilog.Sinks.Console" Version="4.1.0" />
<PackageReference Include="Serilog.Sinks.File" Version="5.0.0" />
<PackageReference Include="Serilog.Sinks.MSSqlServer" Version="6.3.0" />
<PackageReference Include="Volo.Abp.Autofac" Version="6.0.2" />
<PackageReference Include="Volo.Abp.EntityFrameworkCore.SqlServer" Version="5.3.5" />
<PackageReference Include="Volo.Abp.BackgroundJobs" Version="5.3.5" />

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

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

39
be/DataExchange/src/Win_in.Sfs.Wms.DataExchange.Agent/serilogsettings.json

@ -0,0 +1,39 @@
{
"Serilog": {
"Using": [ "Serilog.Sinks.File", "Serilog.Sinks.Async", "Serilog.Sinks.Console", "Serilog.Sinks.MSSqlServer" ],
"MinimumLevel": {
"Default": "Debug",
"Override": {
"Microsoft": "Information",
"Microsoft.EntityFrameworkCore": "Warning"
}
},
"WriteTo": [
{
"Name": "Async",
"Args": {
"configure": [
{
"Name": "File",
"Args": {
"path": "..//Logs//WmsAgent//WmsAgent_.log",
"rollingInterval": "Day",
"fileSizeLimitBytes": "52428800",
"rollOnFileSizeLimit": "true",
"restrictedToMinimumLevel": "Debug"
}
}
]
}
},
{
"Name": "Console",
"Args": {
"restrictedToMinimumLevel": "Debug",
"outputTemplate": "{Timestamp:HH:mm:ss.fff} [{Level:u3}] {Message} {NewLine}{Exception}"
}
}
],
"Enrich": [ "FromLogContext", "WithMachineName", "WithProcessId", "WithThreadId" ]
}
}

15
be/DataExchange/src/Win_in.Sfs.Wms.DataExchange.Application.Contracts/WMS/DeliverNote/DeliverNoteDetailExchangeDto.cs

@ -26,11 +26,11 @@ public class DeliverNoteDetailExchangeDto
/// </summary>
[Display(Name = "数量")]
public decimal Qty { get; set; }
/// <summary>
/// Mes发货单号
/// </summary>
[Display(Name = "Mes发货单号")]
public string MesDeliveryNo { get; set; }
///// <summary>
///// Mes发货单号
///// </summary>
//[Display(Name = "Mes发货单号")]
//public string MesDeliveryNo { get; set; }
/// <summary>
/// Mes发货计划号
/// </summary>
@ -41,4 +41,9 @@ public class DeliverNoteDetailExchangeDto
/// </summary>
[Display(Name = "底盘号")]
public string IdentityNo { get; set; }
/// <summary>
/// 底盘号
/// </summary>
[Display(Name = "Mes器具号")]
public string MesDeliveryContainer { get; set; }
}

15
be/DataExchange/src/Win_in.Sfs.Wms.DataExchange.Application.Contracts/WMS/DeliverRequest/DeliverRequestDetailExchangeDto.cs

@ -25,11 +25,11 @@ public class DeliverRequestDetailExchangeDto
/// </summary>
[Display(Name = "数量")]
public decimal Qty { get; set; }
/// <summary>
/// Mes发货单号
/// </summary>
[Display(Name = "Mes发货单号")]
public string MesDeliveryNo { get; set; }
///// <summary>
///// Mes发货单号
///// </summary>
//[Display(Name = "Mes发货单号")]
//public string MesDeliveryNo { get; set; }
/// <summary>
/// Mes发货计划号
/// </summary>
@ -40,4 +40,9 @@ public class DeliverRequestDetailExchangeDto
/// </summary>
[Display(Name = "底盘号")]
public string IdentityNo { get; set; }
/// <summary>
/// 底盘号
/// </summary>
[Display(Name = "Mes器具号")]
public string MesDeliveryContainer { get; set; }
}

9
be/DataExchange/src/Win_in.Sfs.Wms.DataExchange.Application.Contracts/WMS/DeliverRequest/DeliverRequestExchangeDto.cs

@ -27,7 +27,14 @@ public class DeliverRequestExchangeDto
/// 发货类型
/// </summary>
public EnumDeliverRequestType DeliverRequestType { get; set; }
/// <summary>
/// 看板件发货计划单号/JIS发货单号
/// </summary>
public string DeliverPlanNumber { get; set; }
/// <summary>
/// Mes车牌号
/// </summary>
public string MesTruckNumber { get; set; }
/// <summary>
/// 客户
/// </summary>

30
be/DataExchange/src/Win_in.Sfs.Wms.DataExchange.Application.Contracts/Win_in.Sfs.Wms.DataExchange.Application.Contracts.xml

@ -531,11 +531,6 @@
数量
</summary>
</member>
<member name="P:Win_in.Sfs.Wms.DataExchange.WMS.DeliverNote.DeliverNoteDetailExchangeDto.MesDeliveryNo">
<summary>
Mes发货单号
</summary>
</member>
<member name="P:Win_in.Sfs.Wms.DataExchange.WMS.DeliverNote.DeliverNoteDetailExchangeDto.MesDeliveryPlan">
<summary>
Mes发货计划号
@ -546,6 +541,11 @@
底盘号
</summary>
</member>
<member name="P:Win_in.Sfs.Wms.DataExchange.WMS.DeliverNote.DeliverNoteDetailExchangeDto.MesDeliveryContainer">
<summary>
底盘号
</summary>
</member>
<member name="P:Win_in.Sfs.Wms.DataExchange.WMS.DeliverNote.DeliverNoteExchangeDto.Number">
<summary>
单据号
@ -586,11 +586,6 @@
数量
</summary>
</member>
<member name="P:Win_in.Sfs.Wms.DataExchange.WMS.DeliverRequest.DeliverRequestDetailExchangeDto.MesDeliveryNo">
<summary>
Mes发货单号
</summary>
</member>
<member name="P:Win_in.Sfs.Wms.DataExchange.WMS.DeliverRequest.DeliverRequestDetailExchangeDto.MesDeliveryPlan">
<summary>
Mes发货计划号
@ -601,6 +596,11 @@
底盘号
</summary>
</member>
<member name="P:Win_in.Sfs.Wms.DataExchange.WMS.DeliverRequest.DeliverRequestDetailExchangeDto.MesDeliveryContainer">
<summary>
底盘号
</summary>
</member>
<member name="P:Win_in.Sfs.Wms.DataExchange.WMS.DeliverRequest.DeliverRequestExchangeDto.Number">
<summary>
单据号
@ -626,6 +626,16 @@
发货类型
</summary>
</member>
<member name="P:Win_in.Sfs.Wms.DataExchange.WMS.DeliverRequest.DeliverRequestExchangeDto.DeliverPlanNumber">
<summary>
看板件发货计划单号/JIS发货单号
</summary>
</member>
<member name="P:Win_in.Sfs.Wms.DataExchange.WMS.DeliverRequest.DeliverRequestExchangeDto.MesTruckNumber">
<summary>
Mes车牌号
</summary>
</member>
<member name="P:Win_in.Sfs.Wms.DataExchange.WMS.DeliverRequest.DeliverRequestExchangeDto.CustomerCode">
<summary>
客户

6
be/Hosts/Core.Host/Win_in.Sfs.Core.Host/Properties/PublishProfiles/FolderProfile.pubxml

@ -4,17 +4,17 @@ https://go.microsoft.com/fwlink/?LinkID=208121.
-->
<Project>
<PropertyGroup>
<DeleteExistingFiles>true</DeleteExistingFiles>
<DeleteExistingFiles>false</DeleteExistingFiles>
<ExcludeApp_Data>false</ExcludeApp_Data>
<LaunchSiteAfterPublish>true</LaunchSiteAfterPublish>
<LastUsedBuildConfiguration>Release</LastUsedBuildConfiguration>
<LastUsedPlatform>Any CPU</LastUsedPlatform>
<PublishProvider>FileSystem</PublishProvider>
<PublishUrl>.\..\..\..\OutPut\Core\</PublishUrl>
<PublishUrl>D:\发布\WMS\core</PublishUrl>
<WebPublishMethod>FileSystem</WebPublishMethod>
<SiteUrlToLaunchAfterPublish />
<TargetFramework>net6.0</TargetFramework>
<ProjectGuid>230d2ddc-4797-4c9b-a84c-9eb57aa16297</ProjectGuid>
<SelfContained>false</SelfContained>
</PropertyGroup>
</Project>
</Project>

8
be/Hosts/WmsPda.Host/Win_in.Sfs.Wms.Pda.Host/Controllers/Inventories/BalanceController.cs

@ -303,7 +303,7 @@ public class BalanceController : AbpController
}
/// <summary>
/// 查询库存余额 根据 物品 库位 库位类型 库存状态 批次
/// 查询库存余额 根据 物品 库位 库位类型 库存状态 批次(无箱码)
/// </summary>
/// <param name="listInput"></param>
/// <returns></returns>
@ -333,10 +333,10 @@ public class BalanceController : AbpController
input.Condition.Filters.Add(new Filter("Lot", listInput.lot));
}
if (!string.IsNullOrWhiteSpace(listInput.packingCode))
{
//if (!string.IsNullOrWhiteSpace(listInput.packingCode))
//{
input.Condition.Filters.Add(new Filter("PackingCode", listInput.packingCode));
}
//}
if (!string.IsNullOrWhiteSpace(listInput.containerCode))
{

27
be/Hosts/WmsPda.Host/Win_in.Sfs.Wms.Pda.Host/Controllers/Jobs/IssueJobs/AssembleIssueJobsController.cs

@ -35,24 +35,31 @@ public class AssembleIssueJobsController : AbpController
/// </summary>
/// <param name="pageSize"></param>
/// <param name="pageIndex"></param>
/// <param name="isFinished"></param>
/// <param name="jobStatus"></param>
/// <returns></returns>
[HttpPost("list")]
public virtual async Task<PagedResultDto<AssembleIssueJobDTO>> GetListAsync(int pageSize, int pageIndex,
bool isFinished)
public virtual async Task<PagedResultDto<AssembleIssueJobDTO>> GetListAsync(int pageSize, int pageIndex, string jobStatus)
{
var status = new List<int>();
if (isFinished)
{
status.Add((int)EnumJobStatus.Done);
}
else
if (jobStatus == "ALL")
{
status.Add((int)EnumJobStatus.Open);
status.Add((int)EnumJobStatus.Wait);
status.Add((int)EnumJobStatus.Doing);
status.Add((int)EnumJobStatus.Partial);
}
else if (jobStatus == "Open")
{
status.Add((int)EnumJobStatus.Open);
}
else if (jobStatus == "Wait")
{
status.Add((int)EnumJobStatus.Wait);
}
else
{
status.Add((int)EnumJobStatus.Done);
}
var jsonStatus = JsonSerializer.Serialize(status);
@ -60,10 +67,10 @@ public class AssembleIssueJobsController : AbpController
{
MaxResultCount = pageSize,
SkipCount = (pageIndex - 1) * pageSize,
Sorting = $"{nameof(ContainerJobDTO.CreationTime)} ASC",
Sorting = $"{nameof(AssembleIssueJobDTO.JobStatus)} ASC,{nameof(AssembleIssueJobDTO.CreationTime)} ASC",
Condition = new Condition
{
Filters = new List<Filter> { new(nameof(ContainerJobDTO.JobStatus), jsonStatus, "In") }
Filters = new List<Filter> { new(nameof(AssembleIssueJobDTO.JobStatus), jsonStatus, "In") }
}
};

27
be/Hosts/WmsPda.Host/Win_in.Sfs.Wms.Pda.Host/Controllers/Jobs/IssueJobs/CoatingIssueJobsController.cs

@ -35,24 +35,31 @@ public class CoatingIssueJobsController : AbpController
/// </summary>
/// <param name="pageSize"></param>
/// <param name="pageIndex"></param>
/// <param name="isFinished"></param>
/// <param name="jobStatus"></param>
/// <returns></returns>
[HttpPost("list")]
public virtual async Task<PagedResultDto<CoatingIssueJobDTO>> GetListAsync(int pageSize, int pageIndex,
bool isFinished)
public virtual async Task<PagedResultDto<CoatingIssueJobDTO>> GetListAsync(int pageSize, int pageIndex, string jobStatus)
{
var status = new List<int>();
if (isFinished)
{
status.Add((int)EnumJobStatus.Done);
}
else
if (jobStatus == "ALL")
{
status.Add((int)EnumJobStatus.Open);
status.Add((int)EnumJobStatus.Wait);
status.Add((int)EnumJobStatus.Doing);
status.Add((int)EnumJobStatus.Partial);
}
else if (jobStatus == "Open")
{
status.Add((int)EnumJobStatus.Open);
}
else if (jobStatus == "Wait")
{
status.Add((int)EnumJobStatus.Wait);
}
else
{
status.Add((int)EnumJobStatus.Done);
}
var jsonStatus = JsonSerializer.Serialize(status);
@ -60,10 +67,10 @@ public class CoatingIssueJobsController : AbpController
{
MaxResultCount = pageSize,
SkipCount = (pageIndex - 1) * pageSize,
Sorting = $"{nameof(ContainerJobDTO.CreationTime)} ASC",
Sorting = $"{nameof(CoatingIssueJobDTO.JobStatus)} ASC,{nameof(CoatingIssueJobDTO.CreationTime)} ASC",
Condition = new Condition
{
Filters = new List<Filter> { new(nameof(ContainerJobDTO.JobStatus), jsonStatus, "In") }
Filters = new List<Filter> { new(nameof(CoatingIssueJobDTO.JobStatus), jsonStatus, "In") }
}
};

27
be/Hosts/WmsPda.Host/Win_in.Sfs.Wms.Pda.Host/Controllers/Jobs/IssueJobs/InjectionIssueJobsController.cs

@ -35,24 +35,31 @@ public class InjectionIssueJobsController : AbpController
/// </summary>
/// <param name="pageSize"></param>
/// <param name="pageIndex"></param>
/// <param name="isFinished"></param>
/// <param name="jobStatus"></param>
/// <returns></returns>
[HttpPost("list")]
public virtual async Task<PagedResultDto<InjectionIssueJobDTO>> GetListAsync(int pageSize, int pageIndex,
bool isFinished)
public virtual async Task<PagedResultDto<InjectionIssueJobDTO>> GetListAsync(int pageSize, int pageIndex, string jobStatus)
{
var status = new List<int>();
if (isFinished)
{
status.Add((int)EnumJobStatus.Done);
}
else
if (jobStatus == "ALL")
{
status.Add((int)EnumJobStatus.Open);
status.Add((int)EnumJobStatus.Wait);
status.Add((int)EnumJobStatus.Doing);
status.Add((int)EnumJobStatus.Partial);
}
else if (jobStatus == "Open")
{
status.Add((int)EnumJobStatus.Open);
}
else if (jobStatus == "Wait")
{
status.Add((int)EnumJobStatus.Wait);
}
else
{
status.Add((int)EnumJobStatus.Done);
}
var jsonStatus = JsonSerializer.Serialize(status);
@ -60,10 +67,10 @@ public class InjectionIssueJobsController : AbpController
{
MaxResultCount = pageSize,
SkipCount = (pageIndex - 1) * pageSize,
Sorting = $"{nameof(ContainerJobDTO.CreationTime)} ASC",
Sorting = $"{nameof(InjectionIssueJobDTO.JobStatus)} ASC,{nameof(InjectionIssueJobDTO.CreationTime)} ASC",
Condition = new Condition
{
Filters = new List<Filter> { new(nameof(ContainerJobDTO.JobStatus), jsonStatus, "In") }
Filters = new List<Filter> { new(nameof(InjectionIssueJobDTO.JobStatus), jsonStatus, "In") }
}
};

27
be/Hosts/WmsPda.Host/Win_in.Sfs.Wms.Pda.Host/Controllers/Jobs/IssueJobs/KittingIssueJobsController.cs

@ -35,24 +35,31 @@ public class KittingIssueJobsController : AbpController
/// </summary>
/// <param name="pageSize"></param>
/// <param name="pageIndex"></param>
/// <param name="isFinished"></param>
/// <param name="jobStatus"></param>
/// <returns></returns>
[HttpPost("list")]
public virtual async Task<PagedResultDto<KittingIssueJobDTO>> GetListAsync(int pageSize, int pageIndex,
bool isFinished)
public virtual async Task<PagedResultDto<KittingIssueJobDTO>> GetListAsync(int pageSize, int pageIndex, string jobStatus)
{
var status = new List<int>();
if (isFinished)
{
status.Add((int)EnumJobStatus.Done);
}
else
if (jobStatus=="ALL")
{
status.Add((int)EnumJobStatus.Open);
status.Add((int)EnumJobStatus.Wait);
status.Add((int)EnumJobStatus.Doing);
status.Add((int)EnumJobStatus.Partial);
}
else if(jobStatus == "Open")
{
status.Add((int)EnumJobStatus.Open);
}
else if(jobStatus == "Wait")
{
status.Add((int)EnumJobStatus.Wait);
}
else
{
status.Add((int)EnumJobStatus.Done);
}
var jsonStatus = JsonSerializer.Serialize(status);
@ -60,10 +67,10 @@ public class KittingIssueJobsController : AbpController
{
MaxResultCount = pageSize,
SkipCount = (pageIndex - 1) * pageSize,
Sorting = $"{nameof(ContainerJobDTO.CreationTime)} ASC",
Sorting = $"{nameof(KittingIssueJobDTO.JobStatus)} ASC,{nameof(KittingIssueJobDTO.CreationTime)} ASC",
Condition = new Condition
{
Filters = new List<Filter> { new(nameof(ContainerJobDTO.JobStatus), jsonStatus, "In") }
Filters = new List<Filter> { new(nameof(KittingIssueJobDTO.JobStatus), jsonStatus, "In") }
}
};

27
be/Hosts/WmsPda.Host/Win_in.Sfs.Wms.Pda.Host/Controllers/Jobs/IssueJobs/SparePartIssueJobsController.cs

@ -35,24 +35,31 @@ public class SparePartIssueJobsController : AbpController
/// </summary>
/// <param name="pageSize"></param>
/// <param name="pageIndex"></param>
/// <param name="isFinished"></param>
/// <param name="jobStatus"></param>
/// <returns></returns>
[HttpPost("list")]
public virtual async Task<PagedResultDto<SparePartIssueJobDTO>> GetListAsync(int pageSize, int pageIndex,
bool isFinished)
public virtual async Task<PagedResultDto<SparePartIssueJobDTO>> GetListAsync(int pageSize, int pageIndex, string jobStatus)
{
var status = new List<int>();
if (isFinished)
{
status.Add((int)EnumJobStatus.Done);
}
else
if (jobStatus == "ALL")
{
status.Add((int)EnumJobStatus.Open);
status.Add((int)EnumJobStatus.Wait);
status.Add((int)EnumJobStatus.Doing);
status.Add((int)EnumJobStatus.Partial);
}
else if (jobStatus == "Open")
{
status.Add((int)EnumJobStatus.Open);
}
else if (jobStatus == "Wait")
{
status.Add((int)EnumJobStatus.Wait);
}
else
{
status.Add((int)EnumJobStatus.Done);
}
var jsonStatus = JsonSerializer.Serialize(status);
@ -60,10 +67,10 @@ public class SparePartIssueJobsController : AbpController
{
MaxResultCount = pageSize,
SkipCount = (pageIndex - 1) * pageSize,
Sorting = $"{nameof(ContainerJobDTO.CreationTime)} ASC",
Sorting = $"{nameof(SparePartIssueJobDTO.JobStatus)} ASC,{nameof(SparePartIssueJobDTO.CreationTime)} ASC",
Condition = new Condition
{
Filters = new List<Filter> { new(nameof(ContainerJobDTO.JobStatus), jsonStatus, "In") }
Filters = new List<Filter> { new(nameof(SparePartIssueJobDTO.JobStatus), jsonStatus, "In") }
}
};

2
be/Hosts/WmsPda.Host/Win_in.Sfs.Wms.Pda.Host/Controllers/Jobs/JobController.cs

@ -133,7 +133,7 @@ public class JobController : AbpController
}
}
}).ConfigureAwait(false);
list.Add(new JobCountDto { JobType = EnumJobType.CountJob_ByPackingCode, Count = countJobs_ByErpItemCode });
list.Add(new JobCountDto { JobType = EnumJobType.CountJob_ByErpItemCode, Count = countJobs_ByErpItemCode });
//成品发运
var deliverJobs = await _deliverJobAppService.GetCountByFilterAsync(new SfsJobRequestInputBase
{

87
be/Hosts/WmsPda.Host/Win_in.Sfs.Wms.Pda.Host/Controllers/Jobs/ThirdLocationJobController.cs

@ -15,6 +15,7 @@ using Win_in.Sfs.Shared.Domain;
using Win_in.Sfs.Shared.Domain.Shared;
using Win_in.Sfs.Wms.Inventory.Application.Contracts;
using Win_in.Sfs.Wms.Store.Application.Contracts;
using Win_in.Sfs.Wms.Store.Domain;
namespace Win_in.Sfs.Wms.Pda.Controllers.Jobs;
@ -47,27 +48,27 @@ public class ThirdLocationJobController : AbpController
}
/// <summary>
/// 获取任务详情
/// 执行任务明细
/// </summary>
/// <param name="id"></param>
/// <returns></returns>
[HttpGet("{id}")]
public virtual async Task<ActionResult<ThirdLocationJobDTO>> GetAsync(Guid id)
[HttpPost("ExecuteDetail")]
public virtual async Task<ThirdLocationJobDTO> ExecuteDetailAsync(List<ThirdLocationJobDetailDTO> detailDtoList)
{
var result = await _thirdLocationJobAppService.GetAsync(id).ConfigureAwait(false);
return Ok(result);
return await _thirdLocationJobAppService.ExecuteDetailAsync(detailDtoList).ConfigureAwait(false);
//return await _thirdLocationJobAppService.ExecuteDetail2Async(detailDtoList).ConfigureAwait(false);
}
/// <summary>
/// 获取列表 筛选
/// 获取上架任务详情
/// </summary>
/// <param name="sfsRequestDTO"></param>
/// <param name="id"></param>
/// <returns></returns>
[HttpPost("list")]
public virtual async Task<PagedResultDto<ThirdLocationJobDTO>> GetListAsync(SfsJobRequestInputBase sfsRequestDTO)
[HttpGet("{id}")]
public virtual async Task<ActionResult<ThirdLocationJobDTO>> GetAsync(Guid id)
{
var list = await _thirdLocationJobAppService.GetPagedListByFilterAsync(sfsRequestDTO, true).ConfigureAwait(false);
return list;
var result = await _thirdLocationJobAppService.GetAsync(id).ConfigureAwait(false);
return Ok(result);
}
/// <summary>
@ -79,53 +80,41 @@ public class ThirdLocationJobController : AbpController
[HttpGet("list")]
public virtual async Task<PagedResultDto<ThirdLocationJobDTO>> GetListAsync(int pageSize, int pageIndex)
{
var status = new List<int>() { (int)EnumJobStatus.Open, (int)EnumJobStatus.Doing, (int)EnumJobStatus.Partial };
var wlgCodes = await _userWorkGroupAppService.GetCodsOfCurrentUserAsync().ConfigureAwait(false);
//var jsonCodes = JsonSerializer.Serialize(wlgCodes);
var status = new List<int>() { (int)EnumJobStatus.Open, (int)EnumJobStatus.Doing ,(int)EnumJobStatus.Partial};
var jsonStatus = JsonSerializer.Serialize(status);
var request = new SfsJobRequestInputBase
{
MaxResultCount = pageSize,
SkipCount = (pageIndex - 1) * pageSize,
Sorting = $"{nameof(ThirdLocationJobDTO.CreationTime)} ASC",
Sorting = $"{nameof(ThirdLocationJobDTO.Priority)} ASC",
Condition = new Condition
{
Filters = new List<Filter>
{
new(nameof(IssueJobDTO.JobStatus),jsonStatus,"In")
{
//new(nameof(ThirdLocationJobDTO.WorkGroupCode),jsonCodes,"In"),
new(nameof(ThirdLocationJobDTO.JobStatus),jsonStatus,"In")
}
}
};
var list = await _thirdLocationJobAppService.GetPagedListByFilterAsync(request, true).ConfigureAwait(false);
return list;
}
/// <summary>
/// 根据Job Number 获取任务列表
/// 获取列表 筛选
/// </summary>
/// <param name="jobNumber"></param>
/// <param name="sfsRequestDTO"></param>
/// <returns></returns>
[HttpGet("by-number/{jobNumber}")]
public virtual async Task<ActionResult<ThirdLocationJobDTO>> GetByNumberAsync(string jobNumber)
[HttpPost("list")]
public virtual async Task<PagedResultDto<ThirdLocationJobDTO>> GetListAsync(SfsJobRequestInputBase sfsRequestDTO)
{
var jobDto = await _thirdLocationJobAppService.GetByNumberAsync(jobNumber).ConfigureAwait(false);
if (jobDto == null)
{
throw new UserFriendlyException($"未找到编号为 {jobNumber} 的任务");
}
var wlgCodes = await _userWorkGroupAppService.GetCodsOfCurrentUserAsync().ConfigureAwait(false);
if (!wlgCodes.Contains(jobDto.WorkGroupCode))
{
return new NotFoundObjectResult($"任务属于工作组 {jobDto.WorkGroupCode}");
}
if (jobDto.JobStatus == EnumJobStatus.Doing && jobDto.AcceptUserId != CurrentUser.Id)
{
return new NotFoundObjectResult($"任务正在被 {jobDto.AcceptUserName} 处理");
}
return jobDto;
var list = await _thirdLocationJobAppService.GetPagedListByFilterAsync(sfsRequestDTO, true).ConfigureAwait(false);
return list;
}
/// <summary>
@ -138,7 +127,7 @@ public class ThirdLocationJobController : AbpController
var wlgCodes = await _userWorkGroupAppService.GetCodsOfCurrentUserAsync().ConfigureAwait(false);
var jsonCodes = JsonSerializer.Serialize(wlgCodes);
var status = new List<int>() { (int)EnumJobStatus.Open, (int)EnumJobStatus.Doing, (int)EnumJobStatus.Partial };
var status = new List<int>() { (int)EnumJobStatus.Open, (int)EnumJobStatus.Doing ,(int)EnumJobStatus.Partial};
var jsonStatus = JsonSerializer.Serialize(status);
var request = new SfsJobRequestInputBase
@ -182,25 +171,13 @@ public class ThirdLocationJobController : AbpController
}
/// <summary>
/// 关闭任务
/// </summary>
/// <param name="id"></param>
/// <returns></returns>
[HttpPost("close-job/{id}")]
public virtual async Task CloseJobAsync(Guid id)
{
await _thirdLocationJobAppService.CloseJobAsync(id).ConfigureAwait(false);
}
/// <summary>
/// 执行任务
/// 完成任务
/// </summary>
/// <param name="id"></param>
/// <param name="dto"></param>
/// <returns></returns>
[HttpPost("finish/{id}")]
public virtual async Task FinishAsync(Guid id, [FromBody] ThirdLocationJobDTO dto)
[HttpPost("Complete/{id}")]
public async Task CompleteAsync(Guid id)
{
await _thirdLocationJobAppService.CompleteAsync(id, dto).ConfigureAwait(false);
await _thirdLocationJobAppService.CompleteAsync(id).ConfigureAwait(false);
}
}

2
be/Hosts/WmsPda.Host/Win_in.Sfs.Wms.Pda.Host/Controllers/Jobs/TransferLibJobController.cs

@ -15,7 +15,7 @@ namespace Win_in.Sfs.Wms.Pda.Controllers.Stores;
///
/// </summary>
[ApiController]
[Route($"{PdaHostConst.ROOT_ROUTE}store/transferlib-job")]
[Route($"{PdaHostConst.ROOT_ROUTE}store/transferlib-job")] //??store应该改成job
public class TransferLibJobController : AbpController
{

45
be/Hosts/WmsPda.Host/Win_in.Sfs.Wms.Pda.Host/Controllers/Stores/InjectionPlanRequestController.cs

@ -1,4 +1,5 @@
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Mvc;
using Volo.Abp.AspNetCore.Mvc;
@ -16,14 +17,16 @@ namespace Win_in.Sfs.Wms.Pda.Controllers.Stores;
public class InjectionPlanRequestController : AbpController
{
private readonly IInjectionPlanRequestAppService _injectionRequestAppService;
private readonly IItemContainerAppService _itemContainerAppService;
/// <summary>
///
/// </summary>
/// <param name="InjectionPlanRequestAppService"></param>
public InjectionPlanRequestController(IInjectionPlanRequestAppService InjectionPlanRequestAppService)
public InjectionPlanRequestController(IInjectionPlanRequestAppService InjectionPlanRequestAppService, IItemContainerAppService itemContainerAppService)
{
_injectionRequestAppService = InjectionPlanRequestAppService;
_itemContainerAppService = itemContainerAppService;
}
/// <summary>
@ -34,7 +37,7 @@ public class InjectionPlanRequestController : AbpController
[HttpPost("")]
public virtual async Task<ActionResult<InjectionPlanRequestDTO>> CreateAsync(InjectionPlanRequestEditInput input)
{
var result = await _injectionRequestAppService.CreateAsync(input).ConfigureAwait(false);
var result = await _injectionRequestAppService.CreateAndHandleAsync(input).ConfigureAwait(false);
return Ok(result);
}
@ -52,16 +55,46 @@ public class InjectionPlanRequestController : AbpController
}
/// <summary>
/// 获取物品类别列表
/// 获取物品类别名称
/// </summary>
/// <returns></returns>
[HttpGet("item-category-name")]
public virtual async Task<List<string>> GetItemCategoryNameAsync()
{
var entities = await _injectionRequestAppService.GetItemCategoryListAsync().ConfigureAwait(false);
var categoryNames = entities.Select(p => p.Category).Distinct().ToList();
return categoryNames;
}
/// <summary>
/// 根据类别名称获取物品类别列表
/// </summary>
/// <param name="type"></param>
/// <param name="categoryName"></param>
/// <returns></returns>
[HttpGet("list/item-category")]
public virtual async Task<List<ItemBasicDTO>> GetItemCategoryListAsync()
public virtual async Task<List<ItemBasicDTO>> GetItemCategoryListAsync(string categoryName)
{
var entities = await _injectionRequestAppService.GetItemCategoryListAsync().ConfigureAwait(false);
return entities;
var itemEntities = entities.Where(p => p.Category == categoryName).ToList();
foreach (var item in itemEntities)
{
var itemContainerDto = await _itemContainerAppService.GetByItemCodeAsync(item.Code).ConfigureAwait(false);
if(itemContainerDto != null)
{
item.StdPackQty = itemContainerDto.Qty;
item.BasicUom = itemContainerDto.BasicUom;
}
else
{
item.StdPackQty = 1;
}
}
return itemEntities;
}
}

2
be/Hosts/WmsPda.Host/Win_in.Sfs.Wms.Pda.Host/Controllers/Stores/IssueRequest/InjectionRequestController.cs

@ -35,7 +35,7 @@ public class InjectionRequestController : AbpController
}
/// <summary>
/// Kitting叫料申请
/// 注塑叫料申请
/// </summary>
/// <param name="input"></param>
/// <returns></returns>

15
be/Hosts/WmsPda.Host/Win_in.Sfs.Wms.Pda.Host/Controllers/Stores/PurchaseReceiptRequestController.cs

@ -48,4 +48,19 @@ public class PurchaseReceiptRequestController : AbpController
{
return await _purchaseReceiptRequestAppService.GetDetailByItemAndPackingAsync(itemCode, packingCode).ConfigureAwait(false);
}
/// <summary>
/// 【获取】【收货记录详情】根据 物品 传入箱码的根箱码
/// </summary>
/// <param name="itemCode"></param>
/// <param name="packingCode"></param>
/// <returns></returns>
[HttpGet("detail-by-item-and-rootpacking")]
public virtual async Task<PurchaseReceiptRequestDetailDTO> GetDetailByItemAndRootPackingAsync(string itemCode,
string packingCode)
{
return await _purchaseReceiptRequestAppService.GetDetailByItemAndRootPackingAsync(itemCode, packingCode).ConfigureAwait(false);
}
}

9
be/Hosts/WmsPda.Host/Win_in.Sfs.Wms.Pda.Host/Controllers/Stores/PurchaseReturnNoteController.cs

@ -7,6 +7,7 @@ using Microsoft.AspNetCore.Mvc;
using Volo.Abp;
using Volo.Abp.AspNetCore.Mvc;
using Volo.Abp.Domain.Entities.Auditing;
using Volo.Abp.Users;
using Win_in.Sfs.Label.Application.Contracts;
using Win_in.Sfs.Label.Domain;
using Win_in.Sfs.Shared.Domain.Shared;
@ -39,8 +40,8 @@ public class PurchaseReturnNoteController : AbpController
public PurchaseReturnNoteController(IPurchaseReturnNoteAppService noteAppService,
IInventoryLabelAppService labelAppService,
IBalanceAppService balanceAppService,
IPurchaseOrderAppService purchaseOrderAppService
)
IPurchaseOrderAppService purchaseOrderAppService
)
{
_noteAppService = noteAppService;
this._labelAppService = labelAppService;
@ -70,7 +71,6 @@ public class PurchaseReturnNoteController : AbpController
// await this.SetDetailPoNumberAsync(input.Details);
var noteCreateInputs = await BuildNoteCreateInputsAsync(input, EnumPurchaseReturnType.BeforePuton).ConfigureAwait(false);
foreach (var noteCreateInput in noteCreateInputs)
{
await _noteAppService.CreateAsync(noteCreateInput).ConfigureAwait(false);
@ -141,14 +141,13 @@ public class PurchaseReturnNoteController : AbpController
createInputs.Add(returnNoteEditInput);
}
return createInputs;
}
private async Task SetDetailByPoAsync(string poNumber, PurchaseReturnNoteDetailInput createInputDetail)
{
var po = await _purchaseOrderAppService.GetListByNumberAndItemCodeAsync(poNumber, createInputDetail.ItemCode).ConfigureAwait(false);
Check.NotNull(po, nameof(PurchaseOrderDTO));
var detail = po.Details.FirstOrDefault(r => r.ItemCode == createInputDetail.ItemCode);
var detail = po.Details.FirstOrDefault(r => r.ItemCode == createInputDetail.ItemCode && r.Lot== createInputDetail.Lot);
Check.NotNull(detail, nameof(PurchaseOrderDetailDTO));
createInputDetail.PoLine = detail.PoLine;
}

5
be/Hosts/WmsPda.Host/Win_in.Sfs.Wms.Pda.Host/Controllers/Stores/PurchaseReturnRequestController.cs

@ -35,7 +35,7 @@ public class PurchaseReturnRequestController : AbpController
/// 创建退货申请
/// </summary>
[HttpPost("create-many")]
public virtual async Task<ActionResult> CreateManyAsync(List<PurchaseReturnRequestPdaInput> input)
public virtual async Task<List<PurchaseReturnRequestDTO>> CreateManyAsync(List<PurchaseReturnRequestPdaInput> input)
{
List<PurchaseReturnRequestEditInput> entitys = new List<PurchaseReturnRequestEditInput>();
var groups = input.GroupBy(r => r.AsnNumber).ToList();
@ -57,8 +57,7 @@ public class PurchaseReturnRequestController : AbpController
}
entitys.Add(entity);
}
await _purchaseReturnRequestAppService.CreateManyAsync(entitys).ConfigureAwait(false);
return Ok();
return await _purchaseReturnRequestAppService.CreateManyAsync(entitys).ConfigureAwait(false);
}
/// <summary>

11
be/Hosts/WmsPda.Host/Win_in.Sfs.Wms.Pda.Host/Controllers/Stores/ThirdLocationNoteController.cs

@ -24,15 +24,4 @@ public class ThirdLocationNoteController : AbpController
_thirdLocationNoteAppService = thirdLocationNoteAppService;
}
/// <summary>
/// 创建三方库转移记录
/// </summary>
/// <param name="input">CreateInput</param>
/// <returns></returns>
[HttpPost("")]
public virtual async Task CreateAsync(ThirdLocationNoteEditInput input)
{
await _thirdLocationNoteAppService.CreateAsync(input).ConfigureAwait(false);
}
}

11
be/Hosts/WmsPda.Host/Win_in.Sfs.Wms.Pda.Host/Controllers/Stores/ThirdLocationRequestController.cs

@ -109,4 +109,15 @@ public class ThirdLocationRequestController : AbpController
return Ok(result);
}
/// <summary>
/// 完成三方库请求
/// </summary>
/// <param name="id"></param>
/// <returns></returns>
[HttpPost("complete/{id}")]
public virtual async Task<ActionResult<ThirdLocationRequestDTO>> CompleteAsync(Guid id)
{
var result = await _thirdLocationRequestAppService.CompleteAsync(id).ConfigureAwait(false);
return Ok(result);
}
}

6
be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application.Contracts/Kittings/DTOs/KittingDTO.cs

@ -19,6 +19,12 @@ public class KittingDTO : EntityDto<Guid>, IHasCode, IHasName
[Display(Name = "底盘打包数量")]
public decimal ChassisQty { get; set; }
[Display(Name = "备注")]
public string Remark { get; set; }
[Display(Name = "创建时间")]
public virtual DateTime CreationTime { get; set; }
[Display(Name = "最后修改时间")]
public virtual DateTime? LastModificationTime { get; set; }
[Display(Name = "明细")]
public List<KittingDetailDTO> Details { set; get; }= new List<KittingDetailDTO>();

5
be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application.Contracts/Kittings/DTOs/KittingDetailDTO.cs

@ -46,11 +46,6 @@ public class KittingDetailDTO: AuditedEntityDto<Guid>, IMultiTenant, IRemark
[Display(Name = "包装数量")]
public decimal Qty { set; get; }
/// <summary>
/// 配置
/// </summary>
[Display(Name = "配置")]
public string Conf { set; get; }
[Display(Name = "配置")]
public string Configuration { get; set; }

5
be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application.Contracts/Kittings/Inputs/KittingDetailInput.cs

@ -47,11 +47,6 @@ public class KittingDetailInput: EntityDto<Guid>, IMultiTenant, IRemark
/// </summary>
[Display(Name = "包装数量")]
public decimal Qty { set; get; }
/// <summary>
/// 配置
/// </summary>
[Display(Name = "配置")]
public string Conf { set; get; }
[Display(Name = "租户ID")]
public Guid? TenantId { set; get;
}

11
be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application.Contracts/Kittings/Inputs/KittingImportInput.cs

@ -22,6 +22,7 @@ public class KittingImportInput : SfsBaseDataImportInputBase
///
[Display(Name = "物料编码")]
[Required(ErrorMessage = "{0}是必填项")]
public string ItemCode { set; get; }
/// <summary>
/// 描述1
@ -51,12 +52,10 @@ public class KittingImportInput : SfsBaseDataImportInputBase
[Required(ErrorMessage = "{0}是必填项")]
public decimal Qty { set; get; }
/// <summary>
/// 配置
/// </summary>
[Display(Name = "配置")]
public string Conf { set; get; }
[Display(Name = "底盘打包数量")]
[Required(ErrorMessage = "{0}是必填项")]
public decimal ChassisQty { get; set; }
[Display(Name = "备注")]
public string Remark { get; set; }
}

162
be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application.Contracts/SplitPackings/Dtos/SplitPackingRecDto.cs

@ -11,6 +11,10 @@ using Win_in.Sfs.Basedata.Domain.Shared;
namespace Win_in.Sfs.Basedata.Application.Contracts;
public class SplitPackingRecDTO : SfsBaseDataDTOBase
//, IHasPurchaseInfoDto
//, IHasProductionInfoDto
//, IHasQualityInfoDto
{
/// <summary>
/// 操作类型
@ -156,5 +160,163 @@ public class SplitPackingRecDTO : SfsBaseDataDTOBase
[Display(Name = "标签类型")]
public EnumLabelType LabelType { get; set; }
#region InventoryLabel兼容成员
/// <summary>
/// 完整条码文本
/// </summary>
[Display(Name = "完整条码文本")]
public string FullBarcodeString { get; set; }
/// <summary>
/// 供应商批次
/// </summary>
[Display(Name = "供应商批次")]
public string SupplierBatch { get; set; }
/// <summary>
/// 到货时间
/// </summary>
[Display(Name = "summary")]
public DateTime ArriveDate { get; set; }
/// <summary>
/// 生产时间
/// </summary>
[Display(Name = "生产时间")]
public DateTime ProduceDate { get; set; }
/// <summary>
/// 过期时间
/// </summary>
[Display(Name = "过期时间")]
public DateTime ExpireDate { get; set; }
/// <summary>
/// 标签状态
/// </summary>
[Display(Name = "标签状态")]
public LabelStatus LabelStatus { get; set; }
/// <summary>
/// 建议库位
/// </summary>
[Display(Name = "建议库位")]
public string RecommendLocationCode { get; set; }
/// <summary>
/// 目标ERP库位
/// </summary>
[Display(Name = "目标ERP库位")]
public string LocationErpCode { get; set; }
/// <summary>
/// 托标签号
/// </summary>
[Display(Name = "托标签号")]
public string ContainerCode { get; set; }
#region 三个子实体成员
//-----------------------QualityInfo
/// <summary>
/// 质量级别
/// </summary>
[Display(Name = "质量级别")]
public string QLevel { get; set; }
/// <summary>
/// 质检文件
/// </summary>
[Display(Name = "质检文件")]
public string QualityFile { get; set; }
//----------------------PurchaseInfo
/// <summary>
/// 供应商代码
/// </summary>
[Display(Name = "供应商代码")]
public string SupplierCode { get; set; }
/// <summary>
/// 订单号
/// </summary>
//[Display(Name = "订单号")]
//public string PoNumber { get; set; }
/// <summary>
/// 要货看板号
/// </summary>
[Display(Name = "要货看板号")]
public string RpNumber { get; set; }
/// <summary>
/// 发货单号
/// </summary>
//[Display(Name = "发货单号")]
//public string AsnNumber { get; set; }
//--------------------------------ProductionInfo
/// <summary>
/// 生产线
/// </summary>
[Display(Name = "生产线")]
public string ProdLine { get; set; }
/// <summary>
/// 班组
/// </summary>
[Display(Name = "班组")]
public string Team { get; set; }
/// <summary>
/// 班次
/// </summary>
[Display(Name = "班次")]
public string Shift { get; set; }
#endregion
/// <summary>
/// 规格
/// </summary>
[Display(Name = "规格")]
public string Specifications { get; set; }
/// <summary>
/// 供应商名称
/// </summary>
[Display(Name = "供应商名称")]
public string SupplierName { get; set; }
/// <summary>
/// 供应商简称
/// </summary>
[Display(Name = "供应商简称")]
public string SupplierSimpleName { get; set; }
/// <summary>
/// 供应商ERP料号
/// </summary>
[Display(Name = "供应商ERP料号")]
public string SupplierItemCode { get; set; }
/// <summary>
/// 供应商物品名
/// </summary>
[Display(Name = "供应商物品名")]
public string SupplierItemName { get; set; }
/// <summary>
/// 要求到货时间
/// </summary>
[Display(Name = "要求到货时间")]
[Required(ErrorMessage = "{0}是必填项")]
public DateTime PlanArriveDate { get; set; }
#endregion
}

7
be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application.Contracts/SplitPackings/ISplitPackingRecAppService.cs

@ -30,6 +30,13 @@ public interface ISplitPackingRecAppService
Task<SplitPackingRecDTO> GetSplitPackingCode(string toPackingCode);
Task<List<SplitPackingRecDTO>> GetFirstOrDefaultPackingCode(List<string> toPackingCodeList);
/// <summary>
/// 根据to箱码取所有具有相同箱码的拆箱记录
/// </summary>
/// <param name="toPackingCode"></param>
/// <returns></returns>
Task<List<SplitPackingRecDTO>> GetSamePoNumberListByToPackingCode(string toPackingCode);
/// <summary>
///
/// </summary>

167
be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application.Contracts/SplitPackings/Inputs/SplitPackingRecEditInput.cs

@ -13,6 +13,9 @@ namespace Win_in.Sfs.Basedata.Application.Contracts;
public class SplitPackingRecEditInput : SfsBaseDataCreateOrUpdateInputBase
//, IHasPurchaseInfoDto
, IHasProductionInfoDto
, IHasQualityInfoDto
{
/// <summary>
/// 操作类型
@ -131,6 +134,12 @@ public class SplitPackingRecEditInput : SfsBaseDataCreateOrUpdateInputBase
[StringLength(SfsEfCorePropertyConst.CodeLength, ErrorMessage = "{0}最多输入{1}个字符")]
public string PurchaseInfo_AsnNumber { get; set; }
/// <summary>
/// 供应商代码
/// </summary>
[StringLength(SfsEfCorePropertyConst.CodeLength, ErrorMessage = "{0}最多输入{1}个字符")]
public string PurchaseInfo_SupplierCode { get; set; }
/// <summary>
/// 到货通知
/// </summary>
@ -159,4 +168,162 @@ public class SplitPackingRecEditInput : SfsBaseDataCreateOrUpdateInputBase
/// 标签类型
/// </summary>
public EnumLabelType LabelType { get; set; }
#region InventoryLabel兼容成员
/// <summary>
/// 完整条码文本
/// </summary>
[Display(Name = "完整条码文本")]
public string FullBarcodeString { get; set; }
/// <summary>
/// 供应商批次
/// </summary>
[Display(Name = "供应商批次")]
public string SupplierBatch { get; set; }
/// <summary>
/// 到货时间
/// </summary>
[Display(Name = "summary")]
public DateTime ArriveDate { get; set; }
/// <summary>
/// 生产时间
/// </summary>
[Display(Name = "生产时间")]
public DateTime ProduceDate { get; set; }
/// <summary>
/// 过期时间
/// </summary>
[Display(Name = "过期时间")]
public DateTime ExpireDate { get; set; }
/// <summary>
/// 标签状态
/// </summary>
[Display(Name = "标签状态")]
public LabelStatus LabelStatus { get; set; }
/// <summary>
/// 建议库位
/// </summary>
[Display(Name = "建议库位")]
public string RecommendLocationCode { get; set; }
/// <summary>
/// 目标ERP库位
/// </summary>
[Display(Name = "目标ERP库位")]
public string LocationErpCode { get; set; }
/// <summary>
/// 托标签号
/// </summary>
[Display(Name = "托标签号")]
public string ContainerCode { get; set; }
#region 三个子实体成员
//-----------------------QualityInfo
/// <summary>
/// 质量级别
/// </summary>
[Display(Name = "质量级别")]
public string QLevel { get; set; }
/// <summary>
/// 质检文件
/// </summary>
[Display(Name = "质检文件")]
public string QualityFile { get; set; }
//----------------------PurchaseInfo
/// <summary>
/// 供应商代码
/// </summary>
[Display(Name = "供应商代码")]
public string SupplierCode { get; set; }
/// <summary>
/// 订单号
/// </summary>
//[Display(Name = "订单号")]
//public string PoNumber { get; set; }
/// <summary>
/// 要货看板号
/// </summary>
[Display(Name = "要货看板号")]
public string RpNumber { get; set; }
/// <summary>
/// 发货单号
/// </summary>
//[Display(Name = "发货单号")]
//public string AsnNumber { get; set; }
//--------------------------------ProductionInfo
/// <summary>
/// 生产线
/// </summary>
[Display(Name = "生产线")]
public string ProdLine { get; set; }
/// <summary>
/// 班组
/// </summary>
[Display(Name = "班组")]
public string Team { get; set; }
/// <summary>
/// 班次
/// </summary>
[Display(Name = "班次")]
public string Shift { get; set; }
#endregion
/// <summary>
/// 规格
/// </summary>
[Display(Name = "规格")]
public string Specifications { get; set; }
/// <summary>
/// 供应商名称
/// </summary>
[Display(Name = "供应商名称")]
public string SupplierName { get; set; }
/// <summary>
/// 供应商简称
/// </summary>
[Display(Name = "供应商简称")]
public string SupplierSimpleName { get; set; }
/// <summary>
/// 供应商ERP料号
/// </summary>
[Display(Name = "供应商ERP料号")]
public string SupplierItemCode { get; set; }
/// <summary>
/// 供应商物品名
/// </summary>
[Display(Name = "供应商物品名")]
public string SupplierItemName { get; set; }
/// <summary>
/// 要求到货时间
/// </summary>
[Display(Name = "要求到货时间")]
[Required(ErrorMessage = "{0}是必填项")]
public DateTime PlanArriveDate { get; set; }
#endregion
}

13
be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application/Dicts/DictAppService.cs

@ -17,6 +17,7 @@ using System.Text;
using DocumentFormat.OpenXml.Office2010.ExcelAc;
using Microsoft.EntityFrameworkCore;
using Microsoft.Extensions.Logging;
using Volo.Abp;
using Volo.Abp.Domain.Entities;
using Volo.Abp.Domain.Repositories;
using Win_in.Sfs.Shared;
@ -60,9 +61,17 @@ public class DictAppService : SfsBaseDataWithCodeAppServiceBase<Dict, DictDTO, S
[HttpPut]
[Route("{id}")]
public override Task<DictDTO> UpdateAsync(Guid id, DictEditInput input)
public override async Task<DictDTO> UpdateAsync(Guid id, DictEditInput input)
{
return base.UpdateAsync(id, input);
//return await base.UpdateAsync(id, input).ConfigureAwait(false); //lyf at 0621, 更新报错所以注释
var entity = await _repository.GetAsync(id).ConfigureAwait(false);
if (entity == null)
{
throw new UserFriendlyException($"根据Id取字典表为空:{id}");
}
ObjectMapper.Map<DictEditInput, Dict>(input, entity);
await _repository.UpdateAsync(entity, true).ConfigureAwait(false);
return ObjectMapper.Map<Dict, DictDTO>(entity);
}
[HttpPost("update")]

24
be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application/Kittings/KittingAppService.cs

@ -108,23 +108,9 @@ public class KittingAppService : SfsBaseDataWithCodeAppServiceBase<Kitting, Kitt
[HttpPut]
[Route("{id}")]
public override Task<KittingDTO> UpdateAsync(Guid id, KittingEditInput input)
public override async Task<KittingDTO> UpdateAsync(Guid id, KittingEditInput input)
{
//var detailquery = _repository.WithDetails();
//var first = detailquery.FirstOrDefault(p => p.Id == id);
//var ids=input.Details.Select(p => p.Id);
//first.Details.Where(p =>ids.Contains(p.Id));
return base.UpdateAsync(id, input);
//var entity = ObjectMapper.Map<KittingEditInput, Kitting>(input);
////entity.SetId(id);
////entity.Code = first.Code;
//await _repository.UpsertAsync(entity).ConfigureAwait(false);
//var firstEntity = detailquery.FirstOrDefault(p => p.Id == id);
//return ObjectMapper.Map<Kitting, KittingDTO>(first);
return await base.UpdateAsync(id, input).ConfigureAwait(false);
}
[HttpPost("update")]
@ -260,7 +246,7 @@ public class KittingAppService : SfsBaseDataWithCodeAppServiceBase<Kitting, Kitt
itm.ItemDesc1 = entity.ItemDesc1;
itm.ItemDesc2 = entity.ItemDesc2;
itm.Qty = entity.Qty;
itm.Conf = entity.Conf;
itm.Configuration = entity.Configuration;
}
}
var leftExist = from itm in newDetail
@ -358,8 +344,8 @@ public class KittingAppService : SfsBaseDataWithCodeAppServiceBase<Kitting, Kitt
}
var fileContent1 = _excelService.Export(importList);
new TestResult(fileContent1.FileContents, ExportImportService.ContentType) { FileDownloadName = "导入文件" };
return new JsonResult(new { Code = 200, FileDownloadName="" });
return new TestResult(fileContent1.FileContents, ExportImportService.ContentType) { FileDownloadName = "Kitting导入文件" };
// return new JsonResult(new { Code = 200, FileDownloadName="" });
}

1
be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application/Kittings/KittingAutoMapperProfile.cs

@ -22,7 +22,6 @@ public partial class BasedataApplicationAutoMapperProfile : Profile
.Ignore(x => x.Details)
.Ignore(x => x.TenantId)
.Ignore(x => x.ExtraProperties)
.Ignore(x => x.Remark)
.Ignore(x => x.ConcurrencyStamp)
.Ignore(x => x.Id);

32
be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application/PositionCodes/PositionCodeAppService.cs

@ -56,14 +56,14 @@ public class PositionCodeAppService
var existEntity = await GetByCodeAsync(input.Code).ConfigureAwait(false);
if (existEntity != null)
{
throw new UserFriendlyException($"{input.Code} 已存在");
throw new UserFriendlyException($"位置码{input.Code} 已存在");
}
var itemEntity = await _repository.FirstOrDefaultAsync(p => p.PartCode == input.PartCode).ConfigureAwait(false);
if(itemEntity != null)
{
throw new UserFriendlyException($"{input.PartCode} 物品已存在");
}
//var itemEntity = await _repository.FirstOrDefaultAsync(p => p.LocationCode == input.LocationCode && p.PartCode == input.PartCode && p.Type == input.Type).ConfigureAwait(false);
//if (itemEntity != null)
//{
// throw new UserFriendlyException($"类型{input.Type.ToString()}物品{input.PartCode}目标库位{input.LocationCode}已存在!");
//}
var itemBasic = await ItemBasicAppService.GetByCodeAsync(input.PartCode).ConfigureAwait(false);
Check.NotNull(itemBasic, "ERP料号", $"物品 {input.PartCode} 不存在");
@ -142,8 +142,24 @@ public class PositionCodeAppService
var itemBasic = await ItemBasicAppService.GetByCodeAsync(positionCode.PartCode).ConfigureAwait(false);
positionCode.PartName = itemBasic.Name;
positionCode.PartDesc = itemBasic.Desc1;
positionCode.Code = positionCode.Type + positionCode.Code;
switch (positionCode.Type)
{
case EnumPositionCodeType.InjectionIssue:
positionCode.Code = "S"+ positionCode.Code;
break;
case EnumPositionCodeType.CoatingIssue:
positionCode.Code = "P" + positionCode.Code;
break;
case EnumPositionCodeType.AssembleIssue:
positionCode.Code = "Z" + positionCode.Code;
break;
case EnumPositionCodeType.KITTING:
positionCode.Code = "K" + positionCode.Code;
break;
default:
positionCode.Code = positionCode.Type + positionCode.Code;
break;
}
positionCode.CreatorId= CurrentUser.Id;
var location = await LocationAppService.GetByCodeAsync(positionCode.LocationCode).ConfigureAwait(false);
positionCode.LocationName = location.Name;

19
be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application/ProductionLineItems/ProductionLineItemAppService.cs

@ -10,6 +10,7 @@ using Microsoft.AspNetCore.Mvc;
using Microsoft.EntityFrameworkCore;
using Volo.Abp;
using Volo.Abp.Caching;
using Volo.Abp.Domain.Repositories;
using Volo.Abp.ObjectMapping;
using Win_in.Sfs.Basedata.Application.Contracts;
using Win_in.Sfs.Basedata.Domain;
@ -29,8 +30,9 @@ public class ProductionLineItemAppService :
{
private readonly IProductionLineAppService _productionLineAppService ;
private readonly ILocationAppService _locationAppService ;
private readonly IItemBasicAppService _itemBasicAppService;
public ProductionLineItemAppService(
IProductionLineItemRepository repository, IDistributedCache<ProductionLineItemDTO> cache, IProductionLineAppService productionLineAppService, ILocationAppService locationAppService
IProductionLineItemRepository repository, IDistributedCache<ProductionLineItemDTO> cache, IProductionLineAppService productionLineAppService, ILocationAppService locationAppService, IItemBasicAppService itemBasicAppService
) : base(repository, cache)
{
base.CreatePolicyName = ProductionLineItemPermissions.Create;
@ -38,6 +40,7 @@ public class ProductionLineItemAppService :
base.DeletePolicyName = ProductionLineItemPermissions.Delete;
_productionLineAppService = productionLineAppService;
_locationAppService = locationAppService;
_itemBasicAppService= itemBasicAppService;
}
[HttpPost("upsert")]
@ -73,6 +76,10 @@ public class ProductionLineItemAppService :
var wiplocationcodelist = list.WipLocationCodeListJson.Split(",");
list.WipLocationCodeListJson = JsonSerializer.Serialize(wiplocationcodelist);
}
var baseItem= await _itemBasicAppService.GetByCodeAsync(list.ItemCode).ConfigureAwait(false);
list.ItemName = baseItem?.Name;
list.ItemDesc1 = baseItem?.Desc1;
list.ItemDesc2 = baseItem?.Desc2;
}
return dictionary;
}
@ -82,11 +89,21 @@ public class ProductionLineItemAppService :
await base.ValidateImportModelAsync(importInput, validationRresult).ConfigureAwait(false);
await CheckItemBasicItemCodeAsync(importInput.ItemCode, validationRresult).ConfigureAwait(false);
await CheckProductionLineProdLineCodeAsync(importInput.ProdLineCode, validationRresult).ConfigureAwait(false);
await CheckSameItem(importInput.ProdLineCode, importInput.ItemCode, validationRresult).ConfigureAwait(false);
CheckProductionLineProdLineCodeJsonAsync(importInput.RawLocationCodeListJson, validationRresult);
CheckProductionLineProdLineCodeJsonAsync(importInput.ProductLocationCodeListJson, validationRresult);
CheckProductionLineProdLineCodeJsonAsync(importInput.WipLocationCodeListJson, validationRresult);
}
private async Task CheckSameItem(string ProdLineCode,string ItemCode, List<ValidationResult> validationRresult)
{
var item =await _repository.FirstOrDefaultAsync(r=>r.ProdLineCode== ProdLineCode&&r.ItemCode==ItemCode).ConfigureAwait(false);
if (item!=null)
{
validationRresult.Add(new ValidationResult($"生产线{ProdLineCode}物料号{ItemCode}已存在", new string[] { "生产线", "物料号" }));
}
}
private void CheckProductionLineProdLineCodeJsonAsync(string locationCodeList, List<ValidationResult> validationRresult)
{
if(!string.IsNullOrEmpty(locationCodeList))

77
be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application/SplitPackings/SplitPackingRecAutoMapperProfile.cs

@ -10,7 +10,14 @@ public partial class BasedataApplicationAutoMapperProfile : Profile
private void SplitPackingRecAutoMapperProfile()
{
CreateMap<SplitPackingRec, SplitPackingRecDTO>();
//.MapPurchaseInfo()
//.MapProductionInfo()
//.MapQualityInfo();
CreateMap<SplitPackingRecEditInput, SplitPackingRec>()
//.MapQualityInfoDto()
//.MapPurchaseInfoDto()
//.MapProductionInfoDto()
.Ignore(t => t.FromTopPackingCode)
.Ignore(t => t.ToTopPackingCode)
.Ignore(t => t.LastModificationTime)
@ -19,5 +26,75 @@ public partial class BasedataApplicationAutoMapperProfile : Profile
.Ignore(t => t.CreatorId)
.Ignore(t => t.ConcurrencyStamp)
.Ignore(t => t.Id);
}
}
//public static class LabelCommonMapperExtensions
//{
// public static IMappingExpression<TSource, TDestination> MapPurchaseInfo<TSource, TDestination>(
// this IMappingExpression<TSource, TDestination> m)
// where TSource : IHasPurchaseInfo
// where TDestination : IHasPurchaseInfoDto
// {
// return m
// .ForMember(dest => dest.SupplierCode, opts => opts.MapFrom(src => src.PurchaseInfo.SupplierCode))
// .ForMember(dest => dest.PoNumber, opts => opts.MapFrom(src => src.PurchaseInfo.PoNumber))
// .ForMember(dest => dest.RpNumber, opts => opts.MapFrom(src => src.PurchaseInfo.RpNumber))
// .ForMember(dest => dest.AsnNumber, opts => opts.MapFrom(src => src.PurchaseInfo.AsnNumber))
// ;
// }
// public static IMappingExpression<TSource, TDestination> MapProductionInfo<TSource, TDestination>(
// this IMappingExpression<TSource, TDestination> m)
// where TSource : IHasProductionInfo
// where TDestination : IHasProductionInfoDto
// {
// return m
// .ForMember(dest => dest.ProdLine, opts => opts.MapFrom(src => src.ProductionInfo.ProdLine))
// .ForMember(dest => dest.Team, opts => opts.MapFrom(src => src.ProductionInfo.Team))
// .ForMember(dest => dest.Shift, opts => opts.MapFrom(src => src.ProductionInfo.Shift))
// ;
// }
// public static IMappingExpression<TSource, TDestination> MapPurchaseInfoDto<TSource, TDestination>(
// this IMappingExpression<TSource, TDestination> m)
// where TSource : IHasPurchaseInfoDto
// where TDestination : IHasPurchaseInfo
// {
// return m
// .ForMember(dest => dest.PurchaseInfo, opts => opts.MapFrom(src => new PurchaseInfo(src.SupplierCode, src.PoNumber, src.RpNumber, src.AsnNumber)))
// ;
// }
// public static IMappingExpression<TSource, TDestination> MapProductionInfoDto<TSource, TDestination>(
// this IMappingExpression<TSource, TDestination> m)
// where TSource : IHasProductionInfoDto
// where TDestination : IHasProductionInfo
// {
// return m
// .ForMember(dest => dest.ProductionInfo, opts => opts.MapFrom(src => new ProductionInfo(src.ProdLine, src.Team, src.Shift)))
// ;
// }
// public static IMappingExpression<TSource, TDestination> MapQualityInfo<TSource, TDestination>(
// this IMappingExpression<TSource, TDestination> m)
// where TSource : IHasQualityInfo
// where TDestination : IHasQualityInfoDto
// {
// return m
// .ForMember(dest => dest.QLevel, opts => opts.MapFrom(src => src.QualityInfo.QLevel))
// .ForMember(dest => dest.QualityFile, opts => opts.MapFrom(src => src.QualityInfo.QualityFile))
// ;
// }
// public static IMappingExpression<TSource, TDestination> MapQualityInfoDto<TSource, TDestination>(
// this IMappingExpression<TSource, TDestination> m)
// where TSource : IHasQualityInfoDto
// where TDestination : IHasQualityInfo
// {
// return m
// .ForMember(dest => dest.QualityInfo, opts => opts.MapFrom(src => new QualityInfo(src.QLevel, src.QualityFile)))
// ;
// }
//}

272
be/Modules/BaseData/src/Win_in.Sfs.Basedata.Domain.Shared/IHasPurchaseInfo.cs

@ -0,0 +1,272 @@
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Microsoft.EntityFrameworkCore;
using Volo.Abp.Domain.Values;
using Win_in.Sfs.Shared.Domain;
namespace Win_in.Sfs.Basedata;
#region 枚举及实体
/// <summary>
/// 标签类别
/// </summary>
public enum EnumLabelType
{
/// <summary>
/// 空枚举
/// </summary>
[Display(Name = "未定义")]
None = 0,
/// <summary>
/// 采购标签
/// </summary>
[Display(Name = "采购标签")]
PurchaseLabel = 1,
/// <summary>
/// 生产标签
/// </summary>
[Display(Name = "生产标签")]
ProductionLabel = 2,
/// <summary>
/// 销售标签
/// </summary>
[Display(Name = "销售标签")]
SaleLabel = 3,
/// <summary>
/// 托盘标签
/// </summary>
[Display(Name = "托盘标签")]
PalletLabel = 4,
/// <summary>
/// 盘点标签
/// </summary>
[Display(Name = "盘点标签")]
CountLabel = 5,
}
public enum LabelStatus
{
/// <summary>
/// 未定义
/// </summary>
[Display(Name = "未定义")]
None = 0,
/// <summary>
/// 有效
/// </summary>
[Display(Name = "有效")]
Enable = 1,
/// <summary>
/// 无效
/// </summary>
[Display(Name = "无效")]
Disable = 2
}
/// <summary>
/// 质量信息
/// </summary>
public class QualityInfo : ValueObject
{
/// <summary>
/// 质量等级
/// </summary>
[MaxLength(SfsEfCorePropertyConst.CodeLength)]
public string QLevel { get; set; }
/// <summary>
/// 质检文件
/// </summary>
[MaxLength(SfsEfCorePropertyConst.CodeLength)]
public string QualityFile { get; set; }
protected override IEnumerable<object> GetAtomicValues()
{
yield return QLevel;
yield return QualityFile;
}
public QualityInfo(string qLevel, string qualityFile)
{
QLevel = qLevel;
QualityFile = qualityFile;
}
public QualityInfo()
{
}
}
/// <summary>
/// 采购信息
/// </summary>
[Owned]
public class PurchaseInfo : ValueObject
{
/// <summary>
/// 供应商代码
/// </summary>
[MaxLength(SfsEfCorePropertyConst.CodeLength)]
public string SupplierCode { get; set; }
/// <summary>
/// 订单号
/// </summary>
[MaxLength(SfsEfCorePropertyConst.CodeLength)]
public string PoNumber { get; set; }
/// <summary>
/// 要货计划号
/// </summary>
[MaxLength(SfsEfCorePropertyConst.CodeLength)]
public string RpNumber { get; set; }
/// <summary>
/// 发货单号
/// </summary>
[MaxLength(SfsEfCorePropertyConst.CodeLength)]
public string AsnNumber { get; set; }
protected override IEnumerable<object> GetAtomicValues()
{
yield return SupplierCode;
yield return PoNumber;
yield return RpNumber;
yield return AsnNumber;
}
public PurchaseInfo(string supplierCode, string poNumber, string rpNumber, string asnNumber)
{
SupplierCode = supplierCode;
PoNumber = poNumber;
RpNumber = rpNumber;
AsnNumber = asnNumber;
}
public PurchaseInfo()
{
}
}
/// <summary>
/// 生产信息
/// </summary>
public class ProductionInfo : ValueObject
{
public ProductionInfo()
{
}
public ProductionInfo(string prodLine, string team, string shift)
{
ProdLine = prodLine;
Team = team;
Shift = shift;
}
/// <summary>
/// 生产线
/// </summary>
[MaxLength(SfsEfCorePropertyConst.CodeLength)]
public string ProdLine { get; set; }
/// <summary>
/// 班组
/// </summary>
[MaxLength(SfsEfCorePropertyConst.CodeLength)]
public string Team { get; set; }
/// <summary>
/// 班次
/// </summary>
[MaxLength(SfsEfCorePropertyConst.CodeLength)]
public string Shift { get; set; }
protected override IEnumerable<object> GetAtomicValues()
{
yield return ProdLine;
yield return Team;
yield return Shift;
}
}
#endregion
#region 接口
public interface IHasPurchaseInfo
{
/// <summary>
/// 采购信息
/// </summary>
public PurchaseInfo PurchaseInfo { get; set; }
}
public interface IHasProductionInfo
{
/// <summary>
/// 生产信息
/// </summary>
public ProductionInfo ProductionInfo { get; set; }
}
public interface IHasPurchaseInfoDto
{
/// <summary>
/// 供应商编号
/// </summary>
[Display(Name = "供应商编号")]
public string SupplierCode { get; set; }
public string PoNumber { get; set; }
public string RpNumber { get; set; }
public string AsnNumber { get; set; }
}
public interface IHasProductionInfoDto
{
public string ProdLine { get; set; }
public string Team { get; set; }
public string Shift { get; set; }
}
public interface IHasQualityInfo
{
/// <summary>
/// 质量信息
/// </summary>
public QualityInfo QualityInfo { get; set; }
}
public interface IHasQualityInfoDto
{
public string QLevel { get; set; }
public string QualityFile { get; set; }
}
#endregion

5
be/Modules/BaseData/src/Win_in.Sfs.Basedata.Domain.Shared/Win_in.Sfs.Basedata.Domain.Shared.csproj

@ -10,6 +10,7 @@
<ItemGroup>
<PackageReference Include="Newtonsoft.Json" Version="13.0.3" />
<PackageReference Include="Volo.Abp.Ddd.Domain" Version="5.3.5" />
<PackageReference Include="Volo.Abp.Validation" Version="5.3.5" />
</ItemGroup>
@ -22,6 +23,10 @@
<Content Remove="Localization\Basedata\*.json" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\..\..\Shared\src\Win_in.Sfs.Shared.Domain\Win_in.Sfs.Shared.Domain.csproj" />
</ItemGroup>
<ItemGroup>
<PackageReference Update="Fody" Version="6.6.4">
<PrivateAssets>all</PrivateAssets>

5
be/Modules/BaseData/src/Win_in.Sfs.Basedata.Domain/Kittings/KittingDetail.cs

@ -43,11 +43,6 @@ public class KittingDetail : AuditedEntity<Guid>, IMultiTenant, IRemark
/// </summary>
public decimal Qty { set; get; }
/// <summary>
/// 配置
/// </summary>
public string Conf { set; get; }
public Guid? TenantId { set; get; }
public string Remark { get; set; }

158
be/Modules/BaseData/src/Win_in.Sfs.Basedata.Domain/SplitPackings/SplitPackingRec.cs

@ -1,6 +1,9 @@
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
using Microsoft.EntityFrameworkCore;
using Volo.Abp.Domain.Values;
using Win_in.Sfs.Basedata.Domain.Shared;
using Win_in.Sfs.Shared.Domain;
using Win_in.Sfs.Shared.Domain.Shared;
@ -12,6 +15,9 @@ namespace Win_in.Sfs.Basedata.Domain;
/// </summary>
public class SplitPackingRec : SfsBaseDataAggregateRootBase
, IHasItem
//, IHasPurchaseInfo
//, IHasQualityInfo
//, IHasProductionInfo
{
/// <summary>
/// 操作类型
@ -141,46 +147,150 @@ public class SplitPackingRec : SfsBaseDataAggregateRootBase
public string PutOnShelfNumber { get; set; }
public EnumLabelType LabelType { get; set; }
}
/// <summary>
/// 标签类别
/// </summary>
public enum EnumLabelType
{
#region InventoryLabel兼容成员
/// <summary>
/// 完整条码文本
/// </summary>
public string FullBarcodeString { get; set; }
/// <summary>
/// 供应商批次
/// </summary>
public string SupplierBatch { get; set; }
/// <summary>
/// 到货时间
/// </summary>
public DateTime ArriveDate { get; set; }
/// <summary>
/// 生产时间
/// </summary>
public DateTime ProduceDate { get; set; }
/// <summary>
/// 过期时间
/// </summary>
public DateTime ExpireDate { get; set; }
/// <summary>
/// 标签状态
/// </summary>
public LabelStatus LabelStatus { get; set; }
/// <summary>
/// 建议库位
/// </summary>
public string RecommendLocationCode { get; set; }
/// <summary>
/// 目标ERP库位
/// </summary>
public string LocationErpCode { get; set; }
/// <summary>
/// 托标签号
/// </summary>
public string ContainerCode { get; set; }
/// <summary>
/// 质量信息
/// </summary>
//public QualityInfo QualityInfo { get; set; } = new();
/// <summary>
/// 质量等级
/// </summary>
[MaxLength(SfsEfCorePropertyConst.CodeLength)]
public string QLevel { get; set; }
/// <summary>
/// 质检文件
/// </summary>
[MaxLength(SfsEfCorePropertyConst.CodeLength)]
public string QualityFile { get; set; }
/// <summary>
/// 采购信息
/// </summary>
//public PurchaseInfo PurchaseInfo { get; set; } = new();
/// <summary>
/// 供应商代码
/// </summary>
[MaxLength(SfsEfCorePropertyConst.CodeLength)]
public string SupplierCode { get; set; }
/// <summary>
/// 空枚举
/// 要货计划号
/// </summary>
[Display(Name = "未定义")]
None = 0,
[MaxLength(SfsEfCorePropertyConst.CodeLength)]
public string RpNumber { get; set; }
/// <summary>
/// 采购标签
/// 生产信息
/// </summary>
[Display(Name = "采购标签")]
PurchaseLabel = 1,
//public ProductionInfo ProductionInfo { get; set; } = new();
/// <summary>
/// 生产标签
/// 生产线
/// </summary>
[Display(Name = "生产标签")]
ProductionLabel = 2,
[MaxLength(SfsEfCorePropertyConst.CodeLength)]
public string ProdLine { get; set; }
/// <summary>
/// 销售标签
/// 班组
/// </summary>
[Display(Name = "销售标签")]
SaleLabel = 3,
[MaxLength(SfsEfCorePropertyConst.CodeLength)]
public string Team { get; set; }
/// <summary>
/// 托盘标签
/// 班次
/// </summary>
[Display(Name = "托盘标签")]
PalletLabel = 4,
[MaxLength(SfsEfCorePropertyConst.CodeLength)]
public string Shift { get; set; }
/// <summary>
/// 盘点标签
/// 规格
/// </summary>
[Display(Name = "盘点标签")]
CountLabel = 5,
[Display(Name = "规格")]
public string Specifications { get; set; }
/// <summary>
/// 供应商名称
/// </summary>
[Display(Name = "供应商名称")]
public string SupplierName { get; set; }
/// <summary>
/// 供应商简称
/// </summary>
[Display(Name = "供应商简称")]
public string SupplierSimpleName { get; set; }
/// <summary>
/// 供应商ERP料号
/// </summary>
[Display(Name = "供应商ERP料号")]
public string SupplierItemCode { get; set; }
/// <summary>
/// 供应商物品名
/// </summary>
[Display(Name = "供应商物品名")]
public string SupplierItemName { get; set; }
/// <summary>
/// 要求到货时间
/// </summary>
[Display(Name = "要求到货时间")]
[Required(ErrorMessage = "{0}是必填项")]
public DateTime PlanArriveDate { get; set; }
#endregion
}

62
be/Modules/BaseData/src/Win_in.Sfs.Basedata.Domain/SplitPackings/SplitPackingRecManager.cs

@ -42,22 +42,14 @@ public class SplitPackingRecManager : DomainService, ISplitPackingRecManager
{
throw new UserFriendlyException("操作类型不是拆箱或合箱状态,源箱码和目标箱码必须相同!");
}
if (item.FromTopPackingCode.IsNullOrEmpty())
{
item.FromTopPackingCode = item.FromPackingCode;
}
if (item.ToTopPackingCode.IsNullOrEmpty())
{
item.ToTopPackingCode = item.FromPackingCode;// ToPackingCode;
}
}
#endregion
if (item.OprType == OprTypeEnum.SplitBox || item.OprType == OprTypeEnum.MergeBox)
{
//设置顶级箱码
item.FromTopPackingCode = GetTopPackingCode(query, item.FromPackingCode);
item.ToTopPackingCode = GetTopPackingCode(query, item.FromPackingCode); //ToPackingCode
item.FromTopPackingCode = CalcuTopPackingCode(query, item.FromPackingCode);
item.ToTopPackingCode = CalcuTopPackingCode(query, item.FromPackingCode); //ToPackingCode
if (item.FromTopPackingCode.IsNullOrEmpty())
{
item.FromTopPackingCode = item.FromPackingCode;
@ -91,6 +83,14 @@ public class SplitPackingRecManager : DomainService, ISplitPackingRecManager
}
else
{
if (item.FromTopPackingCode.IsNullOrEmpty())
{
item.FromTopPackingCode = item.FromPackingCode;
}
if (item.ToTopPackingCode.IsNullOrEmpty())
{
item.ToTopPackingCode = item.FromPackingCode;// ToPackingCode;
}
SplitPackingRec newEntity = CommonHelper.CloneObj(item);
newEntity.SetId(GuidGenerator.Create());
var ret = await _repository.InsertAsync(newEntity, true).ConfigureAwait(false);
@ -202,24 +202,42 @@ public class SplitPackingRecManager : DomainService, ISplitPackingRecManager
/// 取顶级箱码
/// </summary>
/// <param name="historyQuery">箱码历史</param>
/// <param name="item">当前箱码</param>
/// <param name="packingCode">箱码,from to时都传入from</param>
/// <returns></returns>
private static string GetTopPackingCode(IQueryable<SplitPackingRec> historyQuery, string packingCode)
private static string CalcuTopPackingCode(IQueryable<SplitPackingRec> historyQuery, string packingCode)
{
var historyRec = historyQuery.Where(itm => itm.FromPackingCode == packingCode).OrderBy(itm => itm.CreationTime).FirstOrDefault();
if (historyRec != null)
{
return historyRec.FromTopPackingCode;
}
else
var qry = historyQuery.Where(itm => itm.OprType == OprTypeEnum.SplitBox || itm.OprType == OprTypeEnum.MergeBox);
string ret = null;
SplitPackingRec? firstObj = null;
string toCode = packingCode;
while (1 == 1)
{
historyRec = historyQuery.Where(itm => itm.ToPackingCode == packingCode).OrderBy(itm => itm.CreationTime).FirstOrDefault();
if (historyRec != null)
firstObj = qry.FirstOrDefault(itm => itm.ToPackingCode == toCode);
if (firstObj == null)
{
ret = toCode;
break;
}
else
{
return historyRec.ToTopPackingCode;
toCode = firstObj.FromPackingCode;
}
}
return null;
return ret;
//var historyRec = historyQuery.Where(itm => itm.FromPackingCode == packingCode).OrderBy(itm => itm.CreationTime).FirstOrDefault();
//if (historyRec != null)
//{
// return historyRec.FromTopPackingCode;
//}
//else
//{
// historyRec = historyQuery.Where(itm => itm.ToPackingCode == packingCode).OrderBy(itm => itm.CreationTime).FirstOrDefault();
// if (historyRec != null)
// {
// return historyRec.ToTopPackingCode;
// }
//}
//return null;
}
private static void SetBillNumber(IQueryable<SplitPackingRec> historyQuery, SplitPackingRec obj)

4443
be/Modules/BaseData/src/Win_in.Sfs.Basedata.EntityFrameworkCore/Migrations/20240624071015_BaseData.Designer.cs

File diff suppressed because it is too large

424
be/Modules/BaseData/src/Win_in.Sfs.Basedata.EntityFrameworkCore/Migrations/20240624071015_BaseData.cs

@ -0,0 +1,424 @@
using System;
using Microsoft.EntityFrameworkCore.Migrations;
#nullable disable
namespace Win_in.Sfs.Basedata.Migrations
{
public partial class BaseData : Migration
{
protected override void Up(MigrationBuilder migrationBuilder)
{
migrationBuilder.DropPrimaryKey(
name: "PK_Basedata_ProductionLineItem",
table: "Basedata_ProductionLineItem");
migrationBuilder.DropIndex(
name: "IX_Basedata_ProductionLineItem_ProdLineCode_ItemCode",
table: "Basedata_ProductionLineItem");
migrationBuilder.DropIndex(
name: "IX_Basedata_PositionCode_PartCode",
table: "Basedata_PositionCode");
migrationBuilder.RenameColumn(
name: "PartCode",
table: "Basedata_KittingDetail",
newName: "ItemCode");
migrationBuilder.RenameColumn(
name: "Desc2",
table: "Basedata_KittingDetail",
newName: "ItemDesc2");
migrationBuilder.RenameColumn(
name: "Desc1",
table: "Basedata_KittingDetail",
newName: "ItemName");
migrationBuilder.AddColumn<DateTime>(
name: "ArriveDate",
table: "Basedata_SplitPackingRec",
type: "datetime2",
nullable: false,
defaultValue: new DateTime(1, 1, 1, 0, 0, 0, 0, DateTimeKind.Unspecified));
migrationBuilder.AddColumn<string>(
name: "ContainerCode",
table: "Basedata_SplitPackingRec",
type: "nvarchar(64)",
maxLength: 64,
nullable: true);
migrationBuilder.AddColumn<DateTime>(
name: "ExpireDate",
table: "Basedata_SplitPackingRec",
type: "datetime2",
nullable: false,
defaultValue: new DateTime(1, 1, 1, 0, 0, 0, 0, DateTimeKind.Unspecified));
migrationBuilder.AddColumn<string>(
name: "FullBarcodeString",
table: "Basedata_SplitPackingRec",
type: "nvarchar(64)",
maxLength: 64,
nullable: true);
migrationBuilder.AddColumn<int>(
name: "LabelStatus",
table: "Basedata_SplitPackingRec",
type: "int",
nullable: false,
defaultValue: 0);
migrationBuilder.AddColumn<string>(
name: "LocationErpCode",
table: "Basedata_SplitPackingRec",
type: "nvarchar(64)",
maxLength: 64,
nullable: true);
migrationBuilder.AddColumn<DateTime>(
name: "PlanArriveDate",
table: "Basedata_SplitPackingRec",
type: "datetime2",
nullable: false,
defaultValue: new DateTime(1, 1, 1, 0, 0, 0, 0, DateTimeKind.Unspecified));
migrationBuilder.AddColumn<DateTime>(
name: "ProduceDate",
table: "Basedata_SplitPackingRec",
type: "datetime2",
nullable: false,
defaultValue: new DateTime(1, 1, 1, 0, 0, 0, 0, DateTimeKind.Unspecified));
migrationBuilder.AddColumn<string>(
name: "ProductionInfo_ProdLine",
table: "Basedata_SplitPackingRec",
type: "nvarchar(64)",
maxLength: 64,
nullable: true);
migrationBuilder.AddColumn<string>(
name: "ProductionInfo_Shift",
table: "Basedata_SplitPackingRec",
type: "nvarchar(64)",
maxLength: 64,
nullable: true);
migrationBuilder.AddColumn<string>(
name: "ProductionInfo_Team",
table: "Basedata_SplitPackingRec",
type: "nvarchar(64)",
maxLength: 64,
nullable: true);
migrationBuilder.AddColumn<string>(
name: "PurchaseInfo_AsnNumber1",
table: "Basedata_SplitPackingRec",
type: "nvarchar(64)",
maxLength: 64,
nullable: true);
migrationBuilder.AddColumn<string>(
name: "PurchaseInfo_PoNumber1",
table: "Basedata_SplitPackingRec",
type: "nvarchar(64)",
maxLength: 64,
nullable: true);
migrationBuilder.AddColumn<string>(
name: "PurchaseInfo_RpNumber",
table: "Basedata_SplitPackingRec",
type: "nvarchar(64)",
maxLength: 64,
nullable: true);
migrationBuilder.AddColumn<string>(
name: "PurchaseInfo_SupplierCode",
table: "Basedata_SplitPackingRec",
type: "nvarchar(64)",
maxLength: 64,
nullable: true);
migrationBuilder.AddColumn<string>(
name: "QualityInfo_QLevel",
table: "Basedata_SplitPackingRec",
type: "nvarchar(64)",
maxLength: 64,
nullable: true);
migrationBuilder.AddColumn<string>(
name: "QualityInfo_QualityFile",
table: "Basedata_SplitPackingRec",
type: "nvarchar(64)",
maxLength: 64,
nullable: true);
migrationBuilder.AddColumn<string>(
name: "RecommendLocationCode",
table: "Basedata_SplitPackingRec",
type: "nvarchar(64)",
maxLength: 64,
nullable: true);
migrationBuilder.AddColumn<string>(
name: "Specifications",
table: "Basedata_SplitPackingRec",
type: "nvarchar(64)",
maxLength: 64,
nullable: true);
migrationBuilder.AddColumn<string>(
name: "SupplierBatch",
table: "Basedata_SplitPackingRec",
type: "nvarchar(64)",
maxLength: 64,
nullable: true);
migrationBuilder.AddColumn<string>(
name: "SupplierItemCode",
table: "Basedata_SplitPackingRec",
type: "nvarchar(64)",
maxLength: 64,
nullable: true);
migrationBuilder.AddColumn<string>(
name: "SupplierItemName",
table: "Basedata_SplitPackingRec",
type: "nvarchar(64)",
maxLength: 64,
nullable: true);
migrationBuilder.AddColumn<string>(
name: "SupplierName",
table: "Basedata_SplitPackingRec",
type: "nvarchar(64)",
maxLength: 64,
nullable: true);
migrationBuilder.AddColumn<string>(
name: "SupplierSimpleName",
table: "Basedata_SplitPackingRec",
type: "nvarchar(64)",
maxLength: 64,
nullable: true);
migrationBuilder.AlterColumn<string>(
name: "ItemCode",
table: "Basedata_ProductionLineItem",
type: "nvarchar(max)",
nullable: false,
oldClrType: typeof(string),
oldType: "nvarchar(450)");
migrationBuilder.AlterColumn<string>(
name: "ProdLineCode",
table: "Basedata_ProductionLineItem",
type: "nvarchar(max)",
nullable: false,
oldClrType: typeof(string),
oldType: "nvarchar(450)");
migrationBuilder.AddColumn<int>(
name: "ProductionLineType",
table: "Basedata_ProductionLine",
type: "int",
nullable: false,
defaultValue: 0);
migrationBuilder.AddColumn<string>(
name: "Configuration",
table: "Basedata_KittingDetail",
type: "nvarchar(max)",
nullable: true);
migrationBuilder.AddColumn<string>(
name: "ItemDesc1",
table: "Basedata_KittingDetail",
type: "nvarchar(1024)",
maxLength: 1024,
nullable: true);
migrationBuilder.AddColumn<string>(
name: "LocationCode",
table: "Basedata_CustomerItem",
type: "nvarchar(64)",
maxLength: 64,
nullable: true);
migrationBuilder.AddPrimaryKey(
name: "PK_Basedata_ProductionLineItem",
table: "Basedata_ProductionLineItem",
column: "Id");
}
protected override void Down(MigrationBuilder migrationBuilder)
{
migrationBuilder.DropPrimaryKey(
name: "PK_Basedata_ProductionLineItem",
table: "Basedata_ProductionLineItem");
migrationBuilder.DropColumn(
name: "ArriveDate",
table: "Basedata_SplitPackingRec");
migrationBuilder.DropColumn(
name: "ContainerCode",
table: "Basedata_SplitPackingRec");
migrationBuilder.DropColumn(
name: "ExpireDate",
table: "Basedata_SplitPackingRec");
migrationBuilder.DropColumn(
name: "FullBarcodeString",
table: "Basedata_SplitPackingRec");
migrationBuilder.DropColumn(
name: "LabelStatus",
table: "Basedata_SplitPackingRec");
migrationBuilder.DropColumn(
name: "LocationErpCode",
table: "Basedata_SplitPackingRec");
migrationBuilder.DropColumn(
name: "PlanArriveDate",
table: "Basedata_SplitPackingRec");
migrationBuilder.DropColumn(
name: "ProduceDate",
table: "Basedata_SplitPackingRec");
migrationBuilder.DropColumn(
name: "ProductionInfo_ProdLine",
table: "Basedata_SplitPackingRec");
migrationBuilder.DropColumn(
name: "ProductionInfo_Shift",
table: "Basedata_SplitPackingRec");
migrationBuilder.DropColumn(
name: "ProductionInfo_Team",
table: "Basedata_SplitPackingRec");
migrationBuilder.DropColumn(
name: "PurchaseInfo_AsnNumber1",
table: "Basedata_SplitPackingRec");
migrationBuilder.DropColumn(
name: "PurchaseInfo_PoNumber1",
table: "Basedata_SplitPackingRec");
migrationBuilder.DropColumn(
name: "PurchaseInfo_RpNumber",
table: "Basedata_SplitPackingRec");
migrationBuilder.DropColumn(
name: "PurchaseInfo_SupplierCode",
table: "Basedata_SplitPackingRec");
migrationBuilder.DropColumn(
name: "QualityInfo_QLevel",
table: "Basedata_SplitPackingRec");
migrationBuilder.DropColumn(
name: "QualityInfo_QualityFile",
table: "Basedata_SplitPackingRec");
migrationBuilder.DropColumn(
name: "RecommendLocationCode",
table: "Basedata_SplitPackingRec");
migrationBuilder.DropColumn(
name: "Specifications",
table: "Basedata_SplitPackingRec");
migrationBuilder.DropColumn(
name: "SupplierBatch",
table: "Basedata_SplitPackingRec");
migrationBuilder.DropColumn(
name: "SupplierItemCode",
table: "Basedata_SplitPackingRec");
migrationBuilder.DropColumn(
name: "SupplierItemName",
table: "Basedata_SplitPackingRec");
migrationBuilder.DropColumn(
name: "SupplierName",
table: "Basedata_SplitPackingRec");
migrationBuilder.DropColumn(
name: "SupplierSimpleName",
table: "Basedata_SplitPackingRec");
migrationBuilder.DropColumn(
name: "ProductionLineType",
table: "Basedata_ProductionLine");
migrationBuilder.DropColumn(
name: "Configuration",
table: "Basedata_KittingDetail");
migrationBuilder.DropColumn(
name: "ItemDesc1",
table: "Basedata_KittingDetail");
migrationBuilder.DropColumn(
name: "LocationCode",
table: "Basedata_CustomerItem");
migrationBuilder.RenameColumn(
name: "ItemName",
table: "Basedata_KittingDetail",
newName: "Desc1");
migrationBuilder.RenameColumn(
name: "ItemDesc2",
table: "Basedata_KittingDetail",
newName: "Desc2");
migrationBuilder.RenameColumn(
name: "ItemCode",
table: "Basedata_KittingDetail",
newName: "PartCode");
migrationBuilder.AlterColumn<string>(
name: "ProdLineCode",
table: "Basedata_ProductionLineItem",
type: "nvarchar(450)",
nullable: false,
oldClrType: typeof(string),
oldType: "nvarchar(max)");
migrationBuilder.AlterColumn<string>(
name: "ItemCode",
table: "Basedata_ProductionLineItem",
type: "nvarchar(450)",
nullable: false,
oldClrType: typeof(string),
oldType: "nvarchar(max)");
migrationBuilder.AddPrimaryKey(
name: "PK_Basedata_ProductionLineItem",
table: "Basedata_ProductionLineItem",
column: "ProdLineCode");
migrationBuilder.CreateIndex(
name: "IX_Basedata_ProductionLineItem_ProdLineCode_ItemCode",
table: "Basedata_ProductionLineItem",
columns: new[] { "ProdLineCode", "ItemCode" },
unique: true);
migrationBuilder.CreateIndex(
name: "IX_Basedata_PositionCode_PartCode",
table: "Basedata_PositionCode",
column: "PartCode",
unique: true,
filter: "[PartCode] IS NOT NULL");
}
}
}

4385
be/Modules/BaseData/src/Win_in.Sfs.Basedata.EntityFrameworkCore/Migrations/20240627020919_Basedata20240627.Designer.cs

File diff suppressed because it is too large

107
be/Modules/BaseData/src/Win_in.Sfs.Basedata.EntityFrameworkCore/Migrations/20240627020919_Basedata20240627.cs

@ -0,0 +1,107 @@
using Microsoft.EntityFrameworkCore.Migrations;
#nullable disable
namespace Win_in.Sfs.Basedata.Migrations
{
public partial class Basedata20240627 : Migration
{
protected override void Up(MigrationBuilder migrationBuilder)
{
migrationBuilder.DropColumn(
name: "PurchaseInfo_AsnNumber1",
table: "Basedata_SplitPackingRec");
migrationBuilder.DropColumn(
name: "PurchaseInfo_PoNumber1",
table: "Basedata_SplitPackingRec");
migrationBuilder.RenameColumn(
name: "QualityInfo_QualityFile",
table: "Basedata_SplitPackingRec",
newName: "QualityFile");
migrationBuilder.RenameColumn(
name: "QualityInfo_QLevel",
table: "Basedata_SplitPackingRec",
newName: "QLevel");
migrationBuilder.RenameColumn(
name: "PurchaseInfo_SupplierCode",
table: "Basedata_SplitPackingRec",
newName: "SupplierCode");
migrationBuilder.RenameColumn(
name: "PurchaseInfo_RpNumber",
table: "Basedata_SplitPackingRec",
newName: "RpNumber");
migrationBuilder.RenameColumn(
name: "ProductionInfo_Team",
table: "Basedata_SplitPackingRec",
newName: "Team");
migrationBuilder.RenameColumn(
name: "ProductionInfo_Shift",
table: "Basedata_SplitPackingRec",
newName: "Shift");
migrationBuilder.RenameColumn(
name: "ProductionInfo_ProdLine",
table: "Basedata_SplitPackingRec",
newName: "ProdLine");
}
protected override void Down(MigrationBuilder migrationBuilder)
{
migrationBuilder.RenameColumn(
name: "Team",
table: "Basedata_SplitPackingRec",
newName: "ProductionInfo_Team");
migrationBuilder.RenameColumn(
name: "SupplierCode",
table: "Basedata_SplitPackingRec",
newName: "PurchaseInfo_SupplierCode");
migrationBuilder.RenameColumn(
name: "Shift",
table: "Basedata_SplitPackingRec",
newName: "ProductionInfo_Shift");
migrationBuilder.RenameColumn(
name: "RpNumber",
table: "Basedata_SplitPackingRec",
newName: "PurchaseInfo_RpNumber");
migrationBuilder.RenameColumn(
name: "QualityFile",
table: "Basedata_SplitPackingRec",
newName: "QualityInfo_QualityFile");
migrationBuilder.RenameColumn(
name: "QLevel",
table: "Basedata_SplitPackingRec",
newName: "QualityInfo_QLevel");
migrationBuilder.RenameColumn(
name: "ProdLine",
table: "Basedata_SplitPackingRec",
newName: "ProductionInfo_ProdLine");
migrationBuilder.AddColumn<string>(
name: "PurchaseInfo_AsnNumber1",
table: "Basedata_SplitPackingRec",
type: "nvarchar(64)",
maxLength: 64,
nullable: true);
migrationBuilder.AddColumn<string>(
name: "PurchaseInfo_PoNumber1",
table: "Basedata_SplitPackingRec",
type: "nvarchar(64)",
maxLength: 64,
nullable: true);
}
}
}

129
be/Modules/BaseData/src/Win_in.Sfs.Basedata.EntityFrameworkCore/Migrations/BasedataDbContextModelSnapshot.cs

@ -774,6 +774,10 @@ namespace Win_in.Sfs.Basedata.Migrations
.HasColumnType("uniqueidentifier")
.HasColumnName("LastModifierId");
b.Property<string>("LocationCode")
.HasMaxLength(64)
.HasColumnType("nvarchar(64)");
b.Property<string>("Remark")
.HasMaxLength(3072)
.HasColumnType("nvarchar(3072)")
@ -2289,6 +2293,9 @@ namespace Win_in.Sfs.Basedata.Migrations
b.Property<string>("Conf")
.HasColumnType("nvarchar(max)");
b.Property<string>("Configuration")
.HasColumnType("nvarchar(max)");
b.Property<DateTime>("CreationTime")
.HasColumnType("datetime2")
.HasColumnName("CreationTime");
@ -2297,14 +2304,21 @@ namespace Win_in.Sfs.Basedata.Migrations
.HasColumnType("uniqueidentifier")
.HasColumnName("CreatorId");
b.Property<string>("Desc1")
b.Property<string>("ItemCode")
.HasColumnType("nvarchar(max)");
b.Property<string>("ItemDesc1")
.HasMaxLength(1024)
.HasColumnType("nvarchar(1024)");
b.Property<string>("Desc2")
b.Property<string>("ItemDesc2")
.HasMaxLength(64)
.HasColumnType("nvarchar(64)");
b.Property<string>("ItemName")
.HasMaxLength(1024)
.HasColumnType("nvarchar(1024)");
b.Property<DateTime?>("LastModificationTime")
.HasColumnType("datetime2")
.HasColumnName("LastModificationTime");
@ -2316,9 +2330,6 @@ namespace Win_in.Sfs.Basedata.Migrations
b.Property<Guid>("MasterId")
.HasColumnType("uniqueidentifier");
b.Property<string>("PartCode")
.HasColumnType("nvarchar(max)");
b.Property<decimal>("Qty")
.HasColumnType("decimal(18,2)");
@ -2861,10 +2872,6 @@ namespace Win_in.Sfs.Basedata.Migrations
b.HasIndex("Code")
.IsUnique();
b.HasIndex("PartCode")
.IsUnique()
.HasFilter("[PartCode] IS NOT NULL");
b.HasIndex("Code", "PartCode", "LocationCode")
.IsUnique()
.HasFilter("[PartCode] IS NOT NULL AND [LocationCode] IS NOT NULL");
@ -2919,6 +2926,9 @@ namespace Win_in.Sfs.Basedata.Migrations
.HasMaxLength(64)
.HasColumnType("nvarchar(64)");
b.Property<int>("ProductionLineType")
.HasColumnType("int");
b.Property<string>("Remark")
.HasMaxLength(3072)
.HasColumnType("nvarchar(3072)")
@ -2938,8 +2948,8 @@ namespace Win_in.Sfs.Basedata.Migrations
modelBuilder.Entity("Win_in.Sfs.Basedata.Domain.ProductionLineItem", b =>
{
b.Property<string>("ProdLineCode")
.HasColumnType("nvarchar(450)");
b.Property<Guid>("Id")
.HasColumnType("uniqueidentifier");
b.Property<string>("ConcurrencyStamp")
.IsConcurrencyToken()
@ -2959,12 +2969,9 @@ namespace Win_in.Sfs.Basedata.Migrations
.HasColumnType("nvarchar(max)")
.HasColumnName("ExtraProperties");
b.Property<Guid>("Id")
.HasColumnType("uniqueidentifier");
b.Property<string>("ItemCode")
.IsRequired()
.HasColumnType("nvarchar(450)");
.HasColumnType("nvarchar(max)");
b.Property<string>("ItemDesc1")
.HasColumnType("nvarchar(max)");
@ -2983,6 +2990,10 @@ namespace Win_in.Sfs.Basedata.Migrations
.HasColumnType("uniqueidentifier")
.HasColumnName("LastModifierId");
b.Property<string>("ProdLineCode")
.IsRequired()
.HasColumnType("nvarchar(max)");
b.Property<string>("ProductLocationCodeListJson")
.HasColumnType("nvarchar(max)");
@ -3001,10 +3012,7 @@ namespace Win_in.Sfs.Basedata.Migrations
b.Property<string>("WipLocationCodeListJson")
.HasColumnType("nvarchar(max)");
b.HasKey("ProdLineCode");
b.HasIndex("ProdLineCode", "ItemCode")
.IsUnique();
b.HasKey("Id");
b.ToTable("Basedata_ProductionLineItem", (string)null);
});
@ -3288,12 +3296,19 @@ namespace Win_in.Sfs.Basedata.Migrations
.HasMaxLength(64)
.HasColumnType("nvarchar(64)");
b.Property<DateTime>("ArriveDate")
.HasColumnType("datetime2");
b.Property<string>("ConcurrencyStamp")
.IsConcurrencyToken()
.HasMaxLength(40)
.HasColumnType("nvarchar(40)")
.HasColumnName("ConcurrencyStamp");
b.Property<string>("ContainerCode")
.HasMaxLength(64)
.HasColumnType("nvarchar(64)");
b.Property<DateTime>("CreationTime")
.HasColumnType("datetime2")
.HasColumnName("CreationTime");
@ -3302,6 +3317,9 @@ namespace Win_in.Sfs.Basedata.Migrations
.HasColumnType("uniqueidentifier")
.HasColumnName("CreatorId");
b.Property<DateTime>("ExpireDate")
.HasColumnType("datetime2");
b.Property<string>("ExtraProperties")
.HasColumnType("nvarchar(max)")
.HasColumnName("ExtraProperties");
@ -3332,6 +3350,10 @@ namespace Win_in.Sfs.Basedata.Migrations
.HasMaxLength(64)
.HasColumnType("nvarchar(64)");
b.Property<string>("FullBarcodeString")
.HasMaxLength(64)
.HasColumnType("nvarchar(64)");
b.Property<string>("ItemCode")
.IsRequired()
.HasMaxLength(64)
@ -3349,6 +3371,9 @@ namespace Win_in.Sfs.Basedata.Migrations
.HasMaxLength(64)
.HasColumnType("nvarchar(64)");
b.Property<int>("LabelStatus")
.HasColumnType("int");
b.Property<int>("LabelType")
.HasColumnType("int");
@ -3360,9 +3385,23 @@ namespace Win_in.Sfs.Basedata.Migrations
.HasColumnType("uniqueidentifier")
.HasColumnName("LastModifierId");
b.Property<string>("LocationErpCode")
.HasMaxLength(64)
.HasColumnType("nvarchar(64)");
b.Property<int>("OprType")
.HasColumnType("int");
b.Property<DateTime>("PlanArriveDate")
.HasColumnType("datetime2");
b.Property<string>("ProdLine")
.HasMaxLength(64)
.HasColumnType("nvarchar(64)");
b.Property<DateTime>("ProduceDate")
.HasColumnType("datetime2");
b.Property<string>("PurchaseInfo_AsnNumber")
.HasMaxLength(64)
.HasColumnType("nvarchar(64)");
@ -3375,17 +3414,69 @@ namespace Win_in.Sfs.Basedata.Migrations
.HasMaxLength(64)
.HasColumnType("nvarchar(64)");
b.Property<string>("QLevel")
.HasMaxLength(64)
.HasColumnType("nvarchar(64)");
b.Property<string>("QualityFile")
.HasMaxLength(64)
.HasColumnType("nvarchar(64)");
b.Property<string>("ReceiptRecNumber")
.HasMaxLength(64)
.HasColumnType("nvarchar(64)");
b.Property<string>("RecommendLocationCode")
.HasMaxLength(64)
.HasColumnType("nvarchar(64)");
b.Property<string>("Remark")
.HasColumnType("nvarchar(max)");
b.Property<string>("RpNumber")
.HasMaxLength(64)
.HasColumnType("nvarchar(64)");
b.Property<string>("Shift")
.HasMaxLength(64)
.HasColumnType("nvarchar(64)");
b.Property<string>("Specifications")
.HasMaxLength(64)
.HasColumnType("nvarchar(64)");
b.Property<string>("SupplierBatch")
.HasMaxLength(64)
.HasColumnType("nvarchar(64)");
b.Property<string>("SupplierCode")
.HasMaxLength(64)
.HasColumnType("nvarchar(64)");
b.Property<string>("SupplierItemCode")
.HasMaxLength(64)
.HasColumnType("nvarchar(64)");
b.Property<string>("SupplierItemName")
.HasMaxLength(64)
.HasColumnType("nvarchar(64)");
b.Property<string>("SupplierName")
.HasMaxLength(64)
.HasColumnType("nvarchar(64)");
b.Property<string>("SupplierSimpleName")
.HasMaxLength(64)
.HasColumnType("nvarchar(64)");
b.Property<string>("TaskOrderNumber")
.HasMaxLength(64)
.HasColumnType("nvarchar(64)");
b.Property<string>("Team")
.HasMaxLength(64)
.HasColumnType("nvarchar(64)");
b.Property<Guid?>("TenantId")
.HasColumnType("uniqueidentifier")
.HasColumnName("TenantId");

1
be/Modules/BaseData/src/Win_in.Sfs.Basedata.EntityFrameworkCore/PositionCodes/PositionCodeDbContextModelCreatingExtensions.cs

@ -34,7 +34,6 @@ public static class PositionCodeDbContextModelCreatingExtensions
//Indexes
b.HasIndex(q => new { q.Code,q.PartCode,q.LocationCode }).IsUnique();
b.HasIndex(q => new { q.Code }).IsUnique();
b.HasIndex(q => new { q.PartCode }).IsUnique();
});
}
}

21
be/Modules/BaseData/src/Win_in.Sfs.Basedata.EntityFrameworkCore/SplitPackings/SplitPackingRecDbContextModelCreatingExtensions.cs

@ -46,9 +46,30 @@ public static class SplitPackingRecDbContextModelCreatingExtensions
b.Property(q => q.ReceiptRecNumber).HasMaxLength(SfsPropertyConst.CodeLength);
b.Property(q => q.PutOnShelfNumber).HasMaxLength(SfsPropertyConst.CodeLength);
#region InventoryLabel兼容成员
b.Property(q => q.FullBarcodeString).HasMaxLength(SfsPropertyConst.CodeLength);
b.Property(q => q.SupplierBatch).HasMaxLength(SfsPropertyConst.CodeLength);
b.Property(q => q.RecommendLocationCode).HasMaxLength(SfsPropertyConst.CodeLength);
b.Property(q => q.LocationErpCode).HasMaxLength(SfsPropertyConst.CodeLength);
b.Property(q => q.ContainerCode).HasMaxLength(SfsPropertyConst.CodeLength);
b.Property(q => q.Specifications).HasMaxLength(SfsPropertyConst.CodeLength);
b.Property(q => q.SupplierName).HasMaxLength(SfsPropertyConst.NameLength);
b.Property(q => q.SupplierSimpleName).HasMaxLength(SfsPropertyConst.NameLength);
b.Property(q => q.SupplierItemCode).HasMaxLength(SfsPropertyConst.CodeLength);
b.Property(q => q.SupplierItemName).HasMaxLength(SfsPropertyConst.NameLength);
//子实体成员属性中已经定义字段长度
#endregion
//Indexes
b.HasIndex(q => new { FromPackingCode = q.FromPackingCode, ToPackingCode = q.ToPackingCode });
b.HasIndex(q => new { ToPackingCode = q.ToPackingCode });
//Relations
//b.OwnsOne(q => q.PurchaseInfo);
//b.OwnsOne(q => q.ProductionInfo);
//b.OwnsOne(q => q.QualityInfo);
});
}
}

1
be/Modules/Inventory/src/Win_in.Sfs.Wms.Inventory.Application.Contracts/Balances/IBalanceAppService.cs

@ -177,4 +177,5 @@ public interface IBalanceAppService
string itemCode, string locationCode, EnumInventoryStatus status,string lot);
Task<List<BalanceDTO>> GetRecommendBalancesByLocationsExpectOldBalancesAsync(RecommendBalanceRequestInput input);
Task CountPlanActiveAsync(string packingCode, string itemCode, string lot, string locationCode, EnumInventoryStatus status, DateTime datetime, string countPlanNumber);
Task<List<BalanceDTO>> GetUsableListByTypeAsync(RecommendBalanceRequestInput input);
}

18
be/Modules/Inventory/src/Win_in.Sfs.Wms.Inventory.Application/Balances/BalanceAppService.cs

@ -687,7 +687,25 @@ public class BalanceAppService
return dtos;
}
/// <summary>
/// 获取可用库存列表
/// </summary>
/// <param name="input"></param>
/// <returns></returns>
/// <exception cref="NotImplementedException"></exception>
[HttpGet("usable-list-by-type")]
public virtual async Task<List<BalanceDTO>> GetUsableListByTypeAsync(RecommendBalanceRequestInput input)
{
List<string> locationCodes = new List<string>();
var locations=await _locationAclService.GetListByTypesAsync(input.LocationTypes).ConfigureAwait(false);
locationCodes= locations.Select(location=>location.Code).ToList();
var inventoryBalances = await _balanceManager
.GetUsableListAsync(input.ItemCode, locationCodes, input.Statuses, input.IsPackingCode).ConfigureAwait(false);
var dtos = ObjectMapper.Map<List<Balance>, List<BalanceDTO>>(inventoryBalances);
return dtos;
}
/// <summary>
/// pda发料执行查询使用
/// </summary>

113
be/Modules/Inventory/src/Win_in.Sfs.Wms.Inventory.Domain/Balances/BalanceManager.cs

@ -560,16 +560,15 @@ public class BalanceManager : DomainService, IBalanceManager
.GroupBy(p => p.ContainerCode)
.Select(d => d.Key)
.ToListAsync().ConfigureAwait(false);
usableBalances
usableBalances= usableBalances
//扣减已占用库存
.DecreaseExpectOutQty(expectOuts, locations)
//去除不可拆箱 拆托的且有预占用的库存余额
.IgnoreExpectOutOfSameContainer(expectOutContainerCodes, itemStoreRelationDict, locations)
//过滤掉不允许拣料的库位
.FilterLocationEnablePickAsync(locations)
//排序库存余额 最终可用的余额集合
.SortByFifo();
//排序库存余额 最终可用的余额集合
.SortByFifo();
LogDebug(traceId, usableBalances, "AvailableBalances");
@ -1027,6 +1026,112 @@ public class BalanceManager : DomainService, IBalanceManager
return usableBalances;
}
/// <summary>
/// 获取无箱码可用库存列表
/// </summary>
/// <param name="itemCode"></param>
/// <param name="validLocations"></param>
/// <param name="validStatuses"></param>
/// <param name="isRemovePackingCode"></param>
/// <returns></returns>
public virtual async Task<List<Balance>> GetNoPackCodeUsableListAsync(string itemCode,
List<string> validLocations,
List<EnumInventoryStatus> validStatuses, bool isRemovePackingCode)
{
var recommendBalances = new List<Balance>();//返回可使用的推荐库存余额
var item = await _itemBasicAclService.GetByCodeAsync(itemCode).ConfigureAwait(false);
if (item == null) //物品是否存在
{
// throw new UserFriendlyException($"未找到代码为 {itemCode} 的物料记录");
return recommendBalances;
}
//构造查询条件
Expression<Func<Balance, bool>> expression = p => p.ItemCode == itemCode;
expression = expression.And(p => validStatuses.Contains(p.Status));
expression = expression.And(p => p.IsActive);
//如果物品的有效期不是无限的, 要过滤掉过期库存
if (item.ValidityUnit != EnumValidityUnit.Infinite)
{
expression = expression.And(p => p.ExpireDate > DateTime.Now);
}
//排除有箱码库存
if (isRemovePackingCode)
{
expression = expression.And(p => string.IsNullOrEmpty(p.PackingCode));
}
var allBalances = await
(await _balanceRepository.GetDbSetAsync().ConfigureAwait(false))
.Where(expression)
.AsNoTracking()
.ToListAsync().ConfigureAwait(false);
var balanceLocationCodes = allBalances.Select(p => p.LocationCode).Distinct().ToList();
var locations = await _locationAclService.GetByCodesAsync(balanceLocationCodes).ConfigureAwait(false);
//筛选有效库位类型
if (validLocations.Any())
{
locations = locations.Where(p => validLocations.Contains(p.Code)).ToList();
}
var locationCodes = locations.Where(p => p.EnablePick).Select(p => p.Code).ToList();
if (!locationCodes.Any())
{
return recommendBalances;
}
//获取物品存储关系
var itemStoreRelationDict = await GetItemStoreRelationDictAsync(itemCode, locationCodes).ConfigureAwait(false);
//过滤掉无用的库位代码
locationCodes = itemStoreRelationDict.Keys.ToList();
locations = locations.Where(p => locationCodes.Contains(p.Code)).ToList();
var usableBalances = allBalances.Where(p => locationCodes.Contains(p.LocationCode)).ToList();
if (!usableBalances.Any())
{
return recommendBalances;
}
//读取该itemCode项目为空的预占用库存
var expectOuts = await
(await _expectOutRepository.GetDbSetAsync().ConfigureAwait(false))
.AsNoTracking()
.Where(p => p.ItemCode == itemCode
&& locationCodes.Contains(p.LocationCode) && string.IsNullOrEmpty(p.PackingCode)
&& validStatuses.Contains(p.Status))
.ToListAsync().ConfigureAwait(false);
var containerCodes = usableBalances
.Where(p => !string.IsNullOrEmpty(p.ContainerCode))
.Select(p => p.ContainerCode)
.ToList();
var expectOutContainerCodes = await
(await _expectOutRepository.GetDbSetAsync().ConfigureAwait(false))
.Where(p => containerCodes.Contains(p.ContainerCode))
.GroupBy(p => p.ContainerCode)
.Select(d => d.Key)
.ToListAsync().ConfigureAwait(false);
usableBalances
//扣减已占用库存
.DecreaseExpectOutQty(expectOuts, locations)
//去除不可拆箱 拆托的且有预占用的库存余额
.IgnoreExpectOutOfSameContainer(expectOutContainerCodes, itemStoreRelationDict, locations)
//过滤掉不允许拣料的库位
.FilterLocationEnablePickAsync(locations)
//排序库存余额 最终可用的余额集合
.SortByFifo();
usableBalances = usableBalances.Where(p => p.Qty != 0).ToList();
return usableBalances;
}
private decimal GetRecommendQty(Guid traceId, decimal requestQty, decimal remainingQty, Balance usableBalance, LocationDTO location, ItemStoreRelationDTO itemStoreRelation)
{
var balanceQty = usableBalance.Qty;

4
be/Modules/Inventory/src/Win_in.Sfs.Wms.Inventory.Domain/Balances/IBalanceManager.cs

@ -51,5 +51,9 @@ public interface IBalanceManager : IDomainService
Task<List<Balance>> GetUsableListAsync(string itemCode,
List<string> validLocations,
List<EnumInventoryStatus> validStatuses, bool isRemovePackingCode);
Task<List<Balance>> GetNoPackCodeUsableListAsync(string itemCode,
List<string> validLocations,
List<EnumInventoryStatus> validStatuses, bool isRemovePackingCode);
Task<List<Balance>> GetRecommendBalancesByLocationExpectOldBalancesAsync(Guid traceId, string itemCode, decimal requestQty, List<string> validLocations, List<EnumInventoryStatus> validStatuses, bool ispackingcode, List<Balance> oldBalances);
}

3
be/Modules/Inventory/src/Win_in.Sfs.Wms.Inventory.Domain/Transactions/Transaction.cs

@ -233,11 +233,12 @@ public class Transaction : SfsInventoryAggregateRootBase
public void TrySetItemAndLocation(ItemBasicDTO item, LocationDTO location)
{
ManageType = item.ManageType;
StdPackQty = item.StdPackQty;
if (string.IsNullOrEmpty(ItemName))
{
ItemName = item.Name;
ItemDesc1 = item.Desc1;
ItemDesc2 = item.Desc2;
ItemDesc2 = item.Desc2;
}
if (string.IsNullOrEmpty(WarehouseCode))
{

29
be/Modules/Label/src/Win_in.Sfs.Label.Application/InventoryLabels/InventoryLabelAppService.cs

@ -189,10 +189,39 @@ public class InventoryLabelAppService
packRec.ToLot = inputObj.Lot;
packRec.PurchaseInfo_PoNumber = inputObj.PoNumber; // 采购订单
packRec.PurchaseInfo_AsnNumber = inputObj.AsnNumber; //供应商发货单
packRec.PurchaseInfo_SupplierCode = inputObj.SupplierCode; //供应商发货单
packRec.ArrivalNoticNumber = null; //到货通知
packRec.TaskOrderNumber = null; //任务单
packRec.ReceiptRecNumber = null; //收货记录单
packRec.PutOnShelfNumber = null; //上架单
#region InventoryLabel兼容成员
packRec.FullBarcodeString = inputObj.FullBarcodeString;
packRec.SupplierBatch = inputObj.SupplierBatch;
packRec.ArriveDate = inputObj.ArriveDate;
packRec.ProduceDate = inputObj.ProduceDate;
packRec.ExpireDate = inputObj.ExpireDate;
packRec.LabelStatus = (Win_in.Sfs.Basedata.LabelStatus)((int)inputObj.LabelStatus);
packRec.RecommendLocationCode = inputObj.RecommendLocationCode;
packRec.LocationErpCode = inputObj.LocationErpCode;
packRec.ContainerCode = inputObj.ContainerCode;
packRec.QLevel = inputObj.QLevel;//
packRec.QualityFile = inputObj.QualityFile;
packRec.SupplierCode = inputObj.SupplierCode;
//packRec.PoNumber = inputObj.PoNumber;
packRec.RpNumber = inputObj.RpNumber;
//packRec.AsnNumber = inputObj.AsnNumber;
packRec.ProdLine = inputObj.ProdLine;
packRec.Team = inputObj.Team;
packRec.Shift = inputObj.Shift;//
packRec.Specifications = inputObj.Specifications;
packRec.SupplierName = inputObj.SupplierName;
packRec.SupplierSimpleName = inputObj.SupplierSimpleName;
packRec.SupplierItemCode = inputObj.SupplierItemCode;
packRec.SupplierItemName = inputObj.SupplierItemName;
packRec.PlanArriveDate = inputObj.PlanArriveDate;
#endregion
recLst.Add(packRec);
}
bool bo = await _splitPackingRecAppService.BatchInsertAsync(recLst).ConfigureAwait(false);

2
be/Modules/Shared/src/Win_in.Sfs.Shared.Application/ExportAndImport/ClosedXmlExportImportService.cs

@ -333,7 +333,7 @@ public class ClosedXmlExportImportService : IExportImportService
else
{
SetCellStyle(row.Cell(1).SetValue("失败"), rowIndex, 1, fontColor: XLColor.Red);
var desc = string.Join("\n", errors.Select(o => $"{o.MemberNames?.First()} {o.ErrorMessage}"));
string desc = string.Join("\n", errors.Select(o => $"{(o.MemberNames.Any() ? o.MemberNames.First() : String.Empty)} {o.ErrorMessage}"));
SetCellStyle(row.Cell(2).SetValue(desc), rowIndex, 2, fontColor: XLColor.Red);
}
}

4
be/Modules/Shared/src/Win_in.Sfs.Shared.Domain.Shared/Enums/Inventory/EnumTransType.cs

@ -174,8 +174,4 @@ public enum EnumTransType
MesUnFreezed = 41,
}

4
be/Modules/Shared/src/Win_in.Sfs.Shared.Domain.Shared/Enums/Job/EnumJobStatus.cs

@ -48,8 +48,8 @@ public enum EnumJobStatus
Cancelled = 9,
/// <summary>
///
/// 待库移
/// </summary>
[Display(Name = "待")]
[Display(Name = "待库移")]
Wait=30,
}

6
be/Modules/Shared/src/Win_in.Sfs.Shared.Domain.Shared/Enums/Store/EnumIssueRequestType.cs

@ -39,4 +39,10 @@ public enum EnumIssueRequestType
/// </summary>
[Display(Name = "EXCEL导入")]
ExcelImport=5,
/// <summary>
/// 注塑计划
/// </summary>
[Display(Name = "EXCEL导入")]
InjectionPlan = 6,
}

5
be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Jobs/DeliverJobs/DTOs/DeliverJobDTO.cs

@ -38,5 +38,10 @@ public class DeliverJobDTO : SfsJobDTOBase<DeliverJobDetailDTO>
/// </summary>
[Display(Name = "发货请求单号")]
public string DeliverRequestNumber { get; set; }
/// <summary>
/// Mes车牌号
/// </summary>
[Display(Name = "Mes车牌号")]
public string MesTruckNumber { get; set; }
}

5
be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Jobs/DeliverJobs/Inputs/DeliverJobEditInput.cs

@ -73,5 +73,10 @@ public class DeliverJobEditInput : SfsJobCreateUpdateInputBase, ISfsJobCreateInp
/// </summary>
[Display(Name = "发货计划单号")]
public string DeliverPlanNumber { get; set; }
/// <summary>
/// Mes车牌号
/// </summary>
[Display(Name = "Mes车牌号")]
public string MesTruckNumber { get; set; }
#endregion
}

20
be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Jobs/IssueJobs/AssembleIssueJobs/DTOs/AssembleIssueJobDTO.cs

@ -38,4 +38,24 @@ public class AssembleIssueJobDTO : SfsJobDTOBase<AssembleIssueJobDetailDTO>
public EnumIssueSendType EnumIssueSendType { get; set; }
/// <summary>
/// 已承接
/// </summary>
/// <returns></returns>
[Display(Name = "是否已承接")]
public bool IsClaims { get; set; }
/// <summary>
/// 承接人ID
/// </summary>
/// <returns></returns>
[Display(Name = "承接人ID")]
public string ClaimsUserId { get; set; }
/// <summary>
/// 承接人
/// </summary>
/// <returns></returns>
[Display(Name = "承接人")]
public string ClaimsUserName { get; set; }
}

21
be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Jobs/IssueJobs/AssembleIssueJobs/Inputs/AssembleIssueJobEditInput.cs

@ -66,5 +66,26 @@ public class AssembleIssueJobEditInput : SfsJobCreateUpdateInputBase, ISfsJobCre
public bool UseOnTheWayLocation { get; set; }
public EnumIssueSendType EnumIssueSendType { get; set; }
/// <summary>
/// 已承接
/// </summary>
/// <returns></returns>
[Display(Name = "是否已承接")]
public bool IsClaims { get; set; }
/// <summary>
/// 承接人ID
/// </summary>
/// <returns></returns>
[Display(Name = "承接人ID")]
public string ClaimsUserId { get; set; }
/// <summary>
/// 承接人
/// </summary>
/// <returns></returns>
[Display(Name = "承接人")]
public string ClaimsUserName { get; set; }
#endregion
}

21
be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Jobs/IssueJobs/CoatingIssueJobs/DTOs/CoatingIssueJobDTO.cs

@ -37,4 +37,25 @@ public class CoatingIssueJobDTO : SfsJobDTOBase<CoatingIssueJobDetailDTO>
public bool UseOnTheWayLocation { get; set; }
public EnumIssueSendType EnumIssueSendType { get; set; }
/// <summary>
/// 已承接
/// </summary>
/// <returns></returns>
[Display(Name = "是否已承接")]
public bool IsClaims { get; set; }
/// <summary>
/// 承接人ID
/// </summary>
/// <returns></returns>
[Display(Name = "承接人ID")]
public string ClaimsUserId { get; set; }
/// <summary>
/// 承接人
/// </summary>
/// <returns></returns>
[Display(Name = "承接人")]
public string ClaimsUserName { get; set; }
}

21
be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Jobs/IssueJobs/CoatingIssueJobs/Inputs/CoatingIssueJobEditInput.cs

@ -66,5 +66,26 @@ public class CoatingIssueJobEditInput : SfsJobCreateUpdateInputBase, ISfsJobCrea
public bool UseOnTheWayLocation { get; set; }
public EnumIssueSendType EnumIssueSendType { get; set; }
/// <summary>
/// 已承接
/// </summary>
/// <returns></returns>
[Display(Name = "是否已承接")]
public bool IsClaims { get; set; }
/// <summary>
/// 承接人ID
/// </summary>
/// <returns></returns>
[Display(Name = "承接人ID")]
public string ClaimsUserId { get; set; }
/// <summary>
/// 承接人
/// </summary>
/// <returns></returns>
[Display(Name = "承接人")]
public string ClaimsUserName { get; set; }
#endregion
}

21
be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Jobs/IssueJobs/InjectionJobs/DTOs/InjectionIssueJobDTO.cs

@ -37,4 +37,25 @@ public class InjectionIssueJobDTO : SfsJobDTOBase<InjectionIssueJobDetailDTO>
public bool UseOnTheWayLocation { get; set; }
public EnumIssueSendType EnumIssueSendType { get; set; }
/// <summary>
/// 已承接
/// </summary>
/// <returns></returns>
[Display(Name = "是否已承接")]
public bool IsClaims { get; set; }
/// <summary>
/// 承接人ID
/// </summary>
/// <returns></returns>
[Display(Name = "承接人ID")]
public string ClaimsUserId { get; set; }
/// <summary>
/// 承接人
/// </summary>
/// <returns></returns>
[Display(Name = "承接人")]
public string ClaimsUserName { get; set; }
}

21
be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Jobs/IssueJobs/InjectionJobs/Inputs/InjectionIssueJobEditInput.cs

@ -66,5 +66,26 @@ public class InjectionIssueJobEditInput : SfsJobCreateUpdateInputBase, ISfsJobCr
public bool UseOnTheWayLocation { get; set; }
public EnumIssueSendType EnumIssueSendType { get; set; }
/// <summary>
/// 已承接
/// </summary>
/// <returns></returns>
[Display(Name = "是否已承接")]
public bool IsClaims { get; set; }
/// <summary>
/// 承接人ID
/// </summary>
/// <returns></returns>
[Display(Name = "承接人ID")]
public string ClaimsUserId { get; set; }
/// <summary>
/// 承接人
/// </summary>
/// <returns></returns>
[Display(Name = "承接人")]
public string ClaimsUserName { get; set; }
#endregion
}

21
be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Jobs/IssueJobs/KittingIssueJobs/DTOs/KittingIssueJobDTO.cs

@ -37,4 +37,25 @@ public class KittingIssueJobDTO : SfsJobDTOBase<KittingIssueJobDetailDTO>
public bool UseOnTheWayLocation { get; set; }
public EnumIssueSendType EnumIssueSendType { get; set; }
/// <summary>
/// 已承接
/// </summary>
/// <returns></returns>
[Display(Name = "是否已承接")]
public bool IsClaims { get; set; }
/// <summary>
/// 承接人ID
/// </summary>
/// <returns></returns>
[Display(Name = "承接人ID")]
public string ClaimsUserId { get; set; }
/// <summary>
/// 承接人
/// </summary>
/// <returns></returns>
[Display(Name = "承接人")]
public string ClaimsUserName { get; set; }
}

21
be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Jobs/IssueJobs/KittingIssueJobs/Inputs/KittingIssueJobEditInput.cs

@ -66,5 +66,26 @@ public class KittingIssueJobEditInput : SfsJobCreateUpdateInputBase, ISfsJobCrea
public bool UseOnTheWayLocation { get; set; }
public EnumIssueSendType EnumIssueSendType { get; set; }
/// <summary>
/// 已承接
/// </summary>
/// <returns></returns>
[Display(Name = "是否已承接")]
public bool IsClaims { get; set; }
/// <summary>
/// 承接人ID
/// </summary>
/// <returns></returns>
[Display(Name = "承接人ID")]
public string ClaimsUserId { get; set; }
/// <summary>
/// 承接人
/// </summary>
/// <returns></returns>
[Display(Name = "承接人")]
public string ClaimsUserName { get; set; }
#endregion
}

21
be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Jobs/IssueJobs/SparePartIssueJobs/DTOs/SparePartIssueJobDTO.cs

@ -37,4 +37,25 @@ public class SparePartIssueJobDTO : SfsJobDTOBase<SparePartIssueJobDetailDTO>
public bool UseOnTheWayLocation { get; set; }
public EnumIssueSendType EnumIssueSendType { get; set; }
/// <summary>
/// 已承接
/// </summary>
/// <returns></returns>
[Display(Name = "是否已承接")]
public bool IsClaims { get; set; }
/// <summary>
/// 承接人ID
/// </summary>
/// <returns></returns>
[Display(Name = "承接人ID")]
public string ClaimsUserId { get; set; }
/// <summary>
/// 承接人
/// </summary>
/// <returns></returns>
[Display(Name = "承接人")]
public string ClaimsUserName { get; set; }
}

21
be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Jobs/IssueJobs/SparePartIssueJobs/Inputs/SparePartIssueJobEditInput.cs

@ -66,5 +66,26 @@ public class SparePartIssueJobEditInput : SfsJobCreateUpdateInputBase, ISfsJobCr
public bool UseOnTheWayLocation { get; set; }
public EnumIssueSendType EnumIssueSendType { get; set; }
/// <summary>
/// 已承接
/// </summary>
/// <returns></returns>
[Display(Name = "是否已承接")]
public bool IsClaims { get; set; }
/// <summary>
/// 承接人ID
/// </summary>
/// <returns></returns>
[Display(Name = "承接人ID")]
public string ClaimsUserId { get; set; }
/// <summary>
/// 承接人
/// </summary>
/// <returns></returns>
[Display(Name = "承接人")]
public string ClaimsUserName { get; set; }
#endregion
}

40
be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Jobs/ThirdLocationJobs/DTOs/ThirdLocationJobDTO.cs

@ -1,5 +1,7 @@
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using Win_in.Sfs.Shared.Domain;
using Win_in.Sfs.Wms.Store.Domain;
namespace Win_in.Sfs.Wms.Store.Application.Contracts;
@ -10,37 +12,35 @@ namespace Win_in.Sfs.Wms.Store.Application.Contracts;
public class ThirdLocationJobDTO : SfsJobDTOBase<ThirdLocationJobDetailDTO>
{
/// <summary>
/// 叫料请求类型
/// 请求单号
/// </summary>
[Display(Name = "叫料请求类型")]
[StringLength(SfsEfCorePropertyConst.CodeLength, ErrorMessage = "{0}最多输入{1}个字符")]
public string RequestType { get; set; }
[Display(Name = "请求单号")]
public string RequestNumber { get; set; }
/// <summary>
/// 收货单件码
/// 已承接
/// </summary>
[Display(Name = "收货单件码")]
[StringLength(SfsEfCorePropertyConst.CodeLength, ErrorMessage = "{0}最多输入{1}个字符")]
public string SingleCodeJob { get; set; }
/// <returns></returns>
[Display(Name = "是否已承接")]
public bool IsClaims { get; set; }
/// <summary>
/// 要货申请单号
/// 承接人ID
/// </summary>
[Display(Name = "要货申请单号")]
[StringLength(SfsEfCorePropertyConst.CodeLength, ErrorMessage = "{0}最多输入{1}个字符")]
public string RequestNumber { get; set; }
/// <returns></returns>
[Display(Name = "承接人ID")]
public string ClaimsUserId { get; set; }
/// <summary>
/// 车间
/// 承接人
/// </summary>
[Display(Name = "车间")]
[StringLength(SfsEfCorePropertyConst.CodeLength, ErrorMessage = "{0}最多输入{1}个字符")]
public string Workshop { get; set; }
/// <returns></returns>
[Display(Name = "承接人")]
public string ClaimsUserName { get; set; }
/// <summary>
/// 使用在途库
/// 三方库申请类型
/// </summary>
[Display(Name = "使用在途库")]
public bool UseOnTheWayLocation { get; set; }
[Display(Name = "三方库申请类型")]
public string Type { get; set; }
}

112
be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Jobs/ThirdLocationJobs/DTOs/ThirdLocationJobDetailDTO.cs

@ -1,5 +1,6 @@
using System;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
using Win_in.Sfs.Shared.Domain;
using Win_in.Sfs.Shared.Domain.Shared;
@ -7,112 +8,121 @@ namespace Win_in.Sfs.Wms.Store.Application.Contracts;
public class ThirdLocationJobDetailDTO : SfsJobRecommendFromDetailDTOBase, IHasToLocation
{
/// <summary>
/// 来源库位
/// 发出时间
/// </summary>
[Display(Name = "来源库位")]
public string FromLocationCode { get; set; }
public DateTime IssueTime { get; set; }
/// <summary>
/// 来源库区
/// 是否在在途
/// </summary>
[Display(Name = "来源库区")]
public string FromLocationArea { get; set; }
public bool IsOnTheWayLocationCode { get; set; }
#region 目标库位
/// <summary>
/// 到库位
/// 到库位
/// </summary>
[Display(Name = "到库位")]
public string ToLocationCode { get; set; }
/// <summary>
/// 到库区
/// 到库区
/// </summary>
[Display(Name = "到库区")]
public string ToLocationArea { get; set; }
/// <summary>
/// 到库位组
/// 到库位组
/// </summary>
[Display(Name = "到库位组")]
public string ToLocationGroup { get; set; }
/// <summary>
/// 到ERP库位
/// 到ERP库位
/// </summary>
[Display(Name = "到ERP库位")]
public string ToLocationErpCode { get; set; }
/// <summary>
/// 到仓库
/// 到仓库
/// </summary>
[Display(Name = "到仓库")]
public string ToWarehouseCode { get; set; }
#endregion
#region 来源库位
/// <summary>
/// 在途库库位
/// 库位
/// </summary>
[Display(Name = "在途库库位")]
public string OnTheWayLocationCode { get; set; }
public string FromLocationCode { get; set; }
/// <summary>
/// 收货单件码
/// 到库区
/// </summary>
[Display(Name = "收货单件码")]
public string SingleCodeJob { get; set; }
public string FromLocationArea { get; set; }
/// <summary>
/// 申请单件码
/// 到库位组
/// </summary>
[Display(Name = "申请单件码")]
public string SingleCodeRequest { get; set; }
public string FromLocationGroup { get; set; }
/// <summary>
/// 过期时间
/// 到ERP库位
/// </summary>
[Display(Name = "过期时间")]
public DateTime ExpiredTime { get; set; }
public string FromLocationErpCode { get; set; }
/// <summary>
/// 工序
/// 到仓库
/// </summary>
[Display(Name = "工序")]
public string Operation { get; set; }
public string FromWarehouseCode { get; set; }
#endregion
#region 在途库位
/// <summary>
/// 配送方式
/// 在途库库位
/// </summary>
[Display(Name = "配送方式")]
public EnumDistributionType DistributionType { get; set; }
public string OnTheWayLocationCode { get; set; }
#endregion
/// <summary>
/// 取整方式
/// 申请单件码
/// </summary>
[Display(Name = "取整方式")]
public EnumTruncType TruncType { get; set; }
public string SingleCodeRequest { get; set; }
/// <summary>
/// 取整后数量
/// 已发数量
/// </summary>
[Display(Name = "取整后数量")]
public decimal RoundedQty { get; set; }
public decimal IssuedQty { get; set; }
/// <summary>
/// 计划拆分规则
/// 已收数量
/// </summary>
[Display(Name = "计划拆分规则")]
public EnumPlannedSplitRule PlannedSplitRule { get; set; }
public decimal ReceivedQty { get; set; }
/// <summary>
/// 箱码
/// </summary>
public string PackingCode { get; set; }
/// <summary>
/// 批次
/// </summary>
public string Lot { get; set; }
/// <summary>
/// 过期时间
/// </summary>
public DateTime ExpiredTime { get; set; }
/// <summary>
/// 计划开始时间
/// 库位状态
/// </summary>
[Display(Name = "计划开始时间")]
public DateTime PlanBeginTime { get; set; }
public EnumInventoryStatus EnumInventoryStatus { get; set; }
/// <summary>
/// 每次配送数量
/// 请求未收
/// </summary>
[Display(Name = "每次配送数量")]
public decimal DeliveryQty { get; set; }
[NotMapped]
public decimal NotFinishQty => IssuedQty - ReceivedQty;
}

18
be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Jobs/ThirdLocationJobs/IThirdLocationJobAppService.cs

@ -9,20 +9,20 @@ namespace Win_in.Sfs.Wms.Store.Application.Contracts;
public interface IThirdLocationJobAppService
: ISfsJobAppServiceBase<ThirdLocationJobDTO, SfsJobRequestInputBase, ThirdLocationJobCheckInput, ThirdLocationJobEditInput>
{
Task<List<ThirdLocationJobDTO>> CheckJobExistByItemCodeAndLocationCode(string itemCode, string locationCode);
Task CancelByMaterialRequestAsync(string thirdLocationNumber);
Task<PagedResultDto<ThirdLocationJobDTO>> GetListByTypeAsync(SfsJobRequestInputBase requestInput, string requestType,
bool includeDetails = false, CancellationToken cancellationToken = default);
Task<List<ThirdLocationJobDTO>> GetByRequestNumberAsync(string requestNumber);
Task CloseJobAsync(Guid id);
/// <summary>
/// 保存拆箱时涉及的明细修改
/// 完成任务
/// </summary>
/// <param name="id"></param>
/// <returns></returns>
Task<ThirdLocationJobDTO> SaveDetail_SplitPackingAsync(SplitPacking_UpdateJobDetailInput input);
Task CompleteAsync(Guid id);
/// <summary>
/// 执行任务明细
/// </summary>
/// <returns></returns>
Task<ThirdLocationJobDTO> ExecuteDetailAsync(List<ThirdLocationJobDetailDTO> detailDtoList);
}

Some files were not shown because too many files changed in this diff

Loading…
Cancel
Save