lvzb 2 years ago
parent
commit
ebeaaacd3c
  1. 7
      .vs/VSWorkspaceState.json
  2. 58
      be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.Domain.Fawtyg.Mes/Backflus/Backflu.cs
  3. 28
      be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.Domain.Fawtyg.Mes/Backflus/BackfluManager.cs
  4. 10
      be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.Domain.Fawtyg.Mes/Backflus/IBackfluManager.cs
  5. 7
      be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.Domain.Fawtyg.Mes/Backflus/IBackfluRepository.cs
  6. 2
      be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.Domain.Fawtyg.Mes/PullTask/PullTask.cs
  7. 9
      be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.Domain.Fawtyg.Tyrp/Backflus/BackfluManager.cs
  8. 2
      be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.Domain.Fawtyg.Tyrp/Backflus/IBackfluManager.cs
  9. 31
      be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.EntityFrameworkCore.Fawtyg.Mes/Backflus/BackflusDbContextModelCreatingExtensions.cs
  10. 12
      be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.EntityFrameworkCore.Fawtyg.Mes/Backflus/BackflusEfCoreRepository.cs
  11. 2
      be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.EntityFrameworkCore.Fawtyg.Mes/DataExchangeDbContextModelCreatingExtensions.cs
  12. 1
      be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.EntityFrameworkCore.Fawtyg.Mes/DataExchangeEntityFrameworkCoreFawtygModule.cs
  13. 1
      be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.EntityFrameworkCore.Fawtyg.Mes/IMesDbContext.cs
  14. 1
      be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.EntityFrameworkCore.Fawtyg.Mes/MesDbContext.cs
  15. 2
      be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.EntityFrameworkCore.Fawtyg.Mes/PullTask/PullTaskDbContextModelCreatingExtensions.cs
  16. 83
      be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.Fawtyg.MesAgent/Incoming/BackFluConverter.cs
  17. 112
      be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.Fawtyg.MesAgent/Incoming/BackFluReader.cs
  18. 49
      be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.Fawtyg.MesAgent/Incoming/MesIncomingBackgroundWorker.cs
  19. 14
      be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.Fawtyg.MesAgent/Incoming/MesOutConverter.cs
  20. 9
      be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.Fawtyg.MesAgent/Incoming/PullTaskConverter.cs
  21. 3
      be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.Fawtyg.MesAgent/Incoming/PullTaskReader.cs
  22. 14
      be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.Fawtyg.MesAgent/Incoming/ScrapConverter.cs
  23. 5
      be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.Fawtyg.MesAgent/Incoming/ScrapReader.cs
  24. 18
      be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.Fawtyg.MesAgent/MesAgentModule.cs
  25. 2
      be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.Fawtyg.MesAgent/Win_in.Sfs.Wms.DataExchange.Fawtyg.MesAgent.csproj
  26. 14
      be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.Fawtyg.MesAgent/appsettings.json
  27. 2
      be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.Fawtyg.TyrpAgent/Incoming/BackFluReader.cs
  28. 2
      be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.Fawtyg.TyrpAgent/Incoming/ItemBasicConverter.cs
  29. 139
      be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.Fawtyg.TyrpAgent/Outgoing/ItemTransformNoteConverter.cs
  30. 4
      be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.Fawtyg.TyrpAgent/Outgoing/TyrpOutgoingBackgroundWorker.cs
  31. 1
      be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.Fawtyg.TyrpAgent/Win_in.Sfs.Wms.DataExchange.Fawtyg.TyrpAgent.csproj
  32. 6
      be/DataExchange/Iac/Win_in.Sfs.Wms.DataExchange.Application.Iac.Qad/PurchaseOrderAppService.cs
  33. 4
      be/DataExchange/src/Win_in.Sfs.Wms.DataExchange.Agent/AgentModule.cs
  34. 34
      be/DataExchange/src/Win_in.Sfs.Wms.DataExchange.Agent/IncomingToWmsWorker.cs
  35. 1
      be/DataExchange/src/Win_in.Sfs.Wms.DataExchange.Domain.Shared/Enums/EnumOutgoingDataType.cs
  36. 32
      be/Hosts/Win_in.Sfs.Wms.Dashboard.Host/Controllers/AsnTimeWindowController.cs
  37. 199
      be/Hosts/Win_in.Sfs.Wms.Dashboard.Host/Controllers/MaterialRequestController.cs
  38. 262
      be/Hosts/Win_in.Sfs.Wms.Dashboard.Host/Controllers/PlanAndActualController.cs
  39. 352
      be/Hosts/Win_in.Sfs.Wms.Dashboard.Host/Controllers/PurchaseReceiptController.cs
  40. 154
      be/Hosts/Wms.Host/Win_in.Sfs.Wms.Store.HttpApi.Host/scripts/db.Microsoft.EntityFrameworkCore.SqlServer.StoreDbContext.sql
  41. 16
      be/Hosts/WmsPda.Host/Win_in.Sfs.Wms.Pda.Host/Controllers/Accounts/AccountController.cs
  42. 3
      be/Hosts/WmsPda.Host/Win_in.Sfs.Wms.Pda.Host/Controllers/Inventories/BalanceController.cs
  43. 12
      be/Hosts/WmsPda.Host/Win_in.Sfs.Wms.Pda.Host/Controllers/Jobs/JobController.cs
  44. 4
      be/Hosts/WmsPda.Host/Win_in.Sfs.Wms.Pda.Host/Controllers/Jobs/PurchaseReceiptJobController.cs
  45. 3
      be/Hosts/WmsPda.Host/Win_in.Sfs.Wms.Pda.Host/Controllers/Stores/IssueNoteController.cs
  46. 2
      be/Hosts/WmsPda.Host/Win_in.Sfs.Wms.Pda.Host/Controllers/Stores/L7Controller.cs
  47. 2
      be/Hosts/WmsPda.Host/Win_in.Sfs.Wms.Pda.Host/Controllers/Stores/RecycledMaterialReceiptNoteController.cs
  48. 58
      be/Hosts/WmsPda.Host/Win_in.Sfs.Wms.Pda.Host/Controllers/TestController.cs
  49. 1
      be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application.Contracts/Uoms/Inputs/UomImportInput.cs
  50. 45
      be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application/ItemTransformNote/ItemTransformNoteDetailExchangeDto.cs
  51. 30
      be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application/ItemTransformNote/ItemTransformNoteExchangeDto.cs
  52. 5
      be/Modules/Inventory/src/Win_in.Sfs.Wms.Inventory.Application/TransferLogs/TransferLogAppService.cs
  53. 36
      be/Modules/Inventory/src/Win_in.Sfs.Wms.Inventory.Domain/Balances/BalanceManager.cs
  54. 7
      be/Modules/Label/src/Win_in.Sfs.Label.Application.Contracts/InventoryLabels/InventoryLabelWithoutCodeCreateInput.cs
  55. 39
      be/Modules/Label/src/Win_in.Sfs.Label.Application/Bases/SfsLabelAppServiceWithCodeBase.cs
  56. 76
      be/Modules/Label/src/Win_in.Sfs.Label.Application/InventoryLabels/InventoryLabelAppService.cs
  57. 4
      be/Modules/Shared/src/Win_in.Sfs.Shared.Application/SfsCrudWithDetailsAppServiceBase.cs
  58. 6
      be/Modules/Shared/src/Win_in.Sfs.Shared.Domain.Shared/Enums/Inventory/EnumTransSubType.cs
  59. 2
      be/Modules/Shared/src/Win_in.Sfs.Shared.Domain.Shared/Enums/Store/EnumMaterialRequestType.cs
  60. 12
      be/Modules/Shared/src/Win_in.Sfs.Shared.Host/HostBuilderExtensions.cs
  61. 5
      be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Bases/DTOs/SfsStoreRecommendFromDetailWithFromToDTOBase.cs
  62. 6
      be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Bases/DTOs/SfsStoreRecommendFromDetailWithLotPackingQtyLocationStatusDTOBase.cs
  63. 6
      be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Bases/DTOs/SfsStoreRecommendToDetailWithFromToDTOBase.cs
  64. 6
      be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Bases/DTOs/SfsStoreRecommendToDetailWithLotPackingQtyLocationStatusDTOBase.cs
  65. 4
      be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Bases/DTOs/SfsStoreRequestDTOBase.cs
  66. 2
      be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Bases/Inputs/SfsStoreCreateOrUpdateInputBase.cs
  67. 3
      be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Bases/Inputs/SfsStoreDetailWithFromToInputBase.cs
  68. 4
      be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Bases/Inputs/SfsStoreImportInputBase.cs
  69. 8
      be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Bases/Inputs/SfsStoreRecommendFromDetailWithFromToInputBase.cs
  70. 6
      be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Bases/Inputs/SfsStoreRecommendFromDetailWithLotPackingQtyLocationStatusInputBase.cs
  71. 8
      be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Bases/Inputs/SfsStoreRecommendToDetailWithFromToInputBase.cs
  72. 6
      be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Bases/Inputs/SfsStoreRecommendToDetailWithLotPackingQtyLocationStatusInputBase.cs
  73. 4
      be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Bases/Inputs/SfsStoreRequestCreateOrUpdateInputBase.cs
  74. 6
      be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Jobs/PurchaseReceiptJobs/IPurchaseReceiptJobAppService.cs
  75. 8
      be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Notes/CountNotes/Inputs/CountNoteImportInput.cs
  76. 26
      be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Notes/DeliverNotes/IDeliverNoteAppService.cs
  77. 2
      be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Notes/InspectNotes/IInspectNoteAppService.cs
  78. 5
      be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Notes/ItemTransformNotes/DTOs/ItemTransformNoteDTO.cs
  79. 6
      be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Notes/ItemTransformNotes/DTOs/ItemTransformNoteDetailDTO.cs
  80. 1
      be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Notes/ProductRecycleNotes/IProductRecycleNoteAppService.cs
  81. 41
      be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Notes/WipWarehouseAdjustNotes/DTOs/WipWarehouseAdjustNoteDTO.cs
  82. 24
      be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Notes/WipWarehouseAdjustNotes/DTOs/WipWarehouseAdjustNoteDetailDTO.cs
  83. 17
      be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Notes/WipWarehouseAdjustNotes/IWipWarehouseAdjustNoteAppService.cs
  84. 24
      be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Notes/WipWarehouseAdjustNotes/Inputs/WipWarehouseAdjustNoteDetailInput.cs
  85. 48
      be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Notes/WipWarehouseAdjustNotes/Inputs/WipWarehouseAdjustNoteEditInput.cs
  86. 71
      be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Notes/WipWarehouseAdjustNotes/Inputs/WipWarehouseAdjustNoteImportInput.cs
  87. 21
      be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Notes/WipWarehouseAdjustNotes/WipWarehouseAdjustNotePermissions.cs
  88. 2
      be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Orders/PurchaseOrders/IPurchaseOrderAppService.cs
  89. 12
      be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Orders/PurchaseOrders/Inputs/PurchaseOrderImportInput.cs
  90. 3
      be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Permissions/StorePermissionDefinitionProvider.cs
  91. 2
      be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Plans/SupplierAsns/ISupplierAsnAppService.cs
  92. 3
      be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Requests/ProductReceiptRequests/Inputs/ProductReceiptRequestEditInput.cs
  93. 6
      be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Requests/ProductionReturnRequests/Inputs/ProductionReturnRequestDetailInput.cs
  94. 2
      be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Requests/ProductionReturnRequests/Inputs/ProductionReturnRequestEditInput.cs
  95. 2
      be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Requests/TransferRequests/Inputs/TransferRequestImportInput.cs
  96. 15
      be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Requests/WipWarehouseAdjustRequests/DTOs/WipWarehouseAdjustRequestDTO.cs
  97. 24
      be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Requests/WipWarehouseAdjustRequests/DTOs/WipWarehouseAdjustRequestDetailDTO.cs
  98. 7
      be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Requests/WipWarehouseAdjustRequests/IWipWarehouseAdjustRequestAppService.cs
  99. 24
      be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Requests/WipWarehouseAdjustRequests/Inputs/WipWarehouseAdjustRequestDetailInput.cs
  100. 26
      be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Requests/WipWarehouseAdjustRequests/Inputs/WipWarehouseAdjustRequestEditInput.cs

7
.vs/VSWorkspaceState.json

@ -0,0 +1,7 @@
{
"ExpandedNodes": [
""
],
"SelectedNode": "\\WZC2.sln",
"PreviewInSolutionExplorer": false
}

58
be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.Domain.Fawtyg.Mes/Backflus/Backflu.cs

@ -0,0 +1,58 @@
using System.ComponentModel.DataAnnotations;
using Volo.Abp.Domain.Entities;
namespace Win_in.Sfs.Wms.DataExchange.Domain.Fawtyg.Mes;
public class Backflu : Entity
{
/// <summary>
/// MES写入时间
/// </summary>
public string scmout_dt_w { get; set; }
/// <summary>
/// 单据类型
/// </summary>
public string scmout_type { get; set; }
/// <summary>
/// TYRP单号
/// </summary>
[Key]
public string scmout_nbr { get; set; }
/// <summary>
/// 料号
/// </summary>
public string scmout_part { get; set; }
/// <summary>
/// 追加码/预定交货日/序号/储位
/// </summary>
public string scmout_no { get; set; }
/// <summary>
/// TYRP异动储位
/// </summary>
public string scmout_loc { get; set; }
/// <summary>
/// 库存交易年月
/// </summary>
public string scmout_ym { get; set; }
/// <summary>
/// 库存交易日
/// </summary>
public string scmout_date { get; set; }
/// <summary>
/// 数量
/// </summary>
public decimal scmout_qty { get; set; }
/// <summary>
/// 调入储位
/// </summary>
public string scmout_in_loc { get; set; }
/// <summary>
/// 有效码
/// </summary>
public string scmout_stat { get; set; }
public override object[] GetKeys()
{
return new object[] { scmout_nbr };
}
}

28
be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.Domain.Fawtyg.Mes/Backflus/BackfluManager.cs

@ -0,0 +1,28 @@
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Volo.Abp.Domain.Services;
namespace Win_in.Sfs.Wms.DataExchange.Domain.Fawtyg.Mes;
public class BackfluManager : DomainService, IBackfluManager
{
private readonly IBackfluRepository _repository;
public BackfluManager(IBackfluRepository repository)
{
_repository = repository;
}
public async Task<List<Backflu>> GetToBeProcessedListAsync()
{
var Backflu = await _repository.GetListAsync().ConfigureAwait(false);
return Backflu.ToList();
}
public virtual async Task UpdateProcessedListAsync(List<Backflu> entities)
{
foreach (var entitie in entities)
{
entitie.scmout_stat = "N";
await _repository.UpdateAsync(entitie).ConfigureAwait(false);
}
}
}

10
be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.Domain.Fawtyg.Mes/Backflus/IBackfluManager.cs

@ -0,0 +1,10 @@
using System.Collections.Generic;
using System.Threading.Tasks;
using Volo.Abp.Domain.Services;
namespace Win_in.Sfs.Wms.DataExchange.Domain.Fawtyg.Mes;
public interface IBackfluManager : IDomainService
{
Task<List<Backflu>> GetToBeProcessedListAsync();
Task UpdateProcessedListAsync(List<Backflu> entities);
}

7
be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.Domain.Fawtyg.Mes/Backflus/IBackfluRepository.cs

@ -0,0 +1,7 @@
using Volo.Abp.Domain.Repositories;
namespace Win_in.Sfs.Wms.DataExchange.Domain.Fawtyg.Mes;
public interface IBackfluRepository : IRepository<Backflu>
{
}

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

@ -19,7 +19,7 @@ public class PullTask : Entity<long>
/// <summary> /// <summary>
/// 数量 /// 数量
/// </summary> /// </summary>
public decimal Planqty { get; set; } public string Planqty { get; set; }
/// <summary> /// <summary>
/// 单号 /// 单号
/// </summary> /// </summary>

9
be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.Domain.Fawtyg.Tyrp/Backflus/BackfluManager.cs

@ -19,5 +19,12 @@ public class BackfluManager : DomainService, IBackfluManager
return Backflu.ToList(); return Backflu.ToList();
} }
public virtual async Task UpdateProcessedListAsync(List<scmout> entities)
{
foreach (var entitie in entities)
{
entitie.scmout_stat = "N";
await _repository.UpdateAsync(entitie).ConfigureAwait(false);
}
}
} }

2
be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.Domain.Fawtyg.Tyrp/Backflus/IBackfluManager.cs

@ -7,5 +7,5 @@ namespace Win_in.Sfs.Wms.DataExchange.Domain.Fawtyg.Tyrp;
public interface IBackfluManager : IDomainService public interface IBackfluManager : IDomainService
{ {
Task<List<scmout>> GetToBeProcessedListAsync(); Task<List<scmout>> GetToBeProcessedListAsync();
//Task UpdateProcessedListAsync(List<scmout> entities); Task UpdateProcessedListAsync(List<scmout> entities);
} }

31
be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.EntityFrameworkCore.Fawtyg.Mes/Backflus/BackflusDbContextModelCreatingExtensions.cs

@ -0,0 +1,31 @@
using Microsoft.EntityFrameworkCore;
using Volo.Abp.EntityFrameworkCore.Modeling;
using Win_in.Sfs.Wms.DataExchange.Domain.Fawtyg.Mes;
namespace Win_in.Sfs.Wms.DataExchange.EntityFrameworkCore.Fawtyg.Mes;
public static class BackfluDbContextModelCreatingExtensions
{
public static void ConfigureBackflu(this ModelBuilder builder, MesModelBuilderConfigurationOptions options)
{
builder.Entity<Backflu>(b =>
{
//Configure table & schema Name
b.ToTable(options.TablePrefix + "scmout", options.Schema);
//Configure ABP properties
b.ConfigureByConvention();
b.Property(q => q.scmout_dt_w).HasMaxLength(20);
b.Property(q => q.scmout_type).HasMaxLength(6);
b.Property(q => q.scmout_nbr).HasMaxLength(12);
b.Property(q => q.scmout_part).HasMaxLength(20);
b.Property(q => q.scmout_no).HasMaxLength(10);
b.Property(q => q.scmout_loc).HasMaxLength(10);
b.Property(q => q.scmout_ym).HasMaxLength(6);
b.Property(q => q.scmout_date).HasMaxLength(8);
b.Property(q => q.scmout_qty).HasPrecision(10, 2);
b.Property(q => q.scmout_in_loc).HasMaxLength(10);
b.Property(q => q.scmout_stat).HasMaxLength(1);
});
}
}

12
be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.EntityFrameworkCore.Fawtyg.Mes/Backflus/BackflusEfCoreRepository.cs

@ -0,0 +1,12 @@
using Volo.Abp.Domain.Repositories.EntityFrameworkCore;
using Volo.Abp.EntityFrameworkCore;
using Win_in.Sfs.Wms.DataExchange.Domain.Fawtyg.Mes;
namespace Win_in.Sfs.Wms.DataExchange.EntityFrameworkCore.Fawtyg.Mes;
public class BackfluEfCoreRepository : EfCoreRepository<MesDbContext, Backflu>, IBackfluRepository
{
public BackfluEfCoreRepository(IDbContextProvider<MesDbContext> dbContextProvider)
: base(dbContextProvider)
{
}
}

2
be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.EntityFrameworkCore.Fawtyg.Mes/DataExchangeDbContextModelCreatingExtensions.cs

@ -26,6 +26,6 @@ public static class DataExchangeDbContextModelCreatingExtensions
builder.ConfigurePullTask(options); builder.ConfigurePullTask(options);
builder.ConfigureScrap(options); builder.ConfigureScrap(options);
builder.ConfigurePck(options); builder.ConfigurePck(options);
builder.ConfigureBackflu(options);
} }
} }

1
be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.EntityFrameworkCore.Fawtyg.Mes/DataExchangeEntityFrameworkCoreFawtygModule.cs

@ -31,5 +31,6 @@ public class DataExchangeEntityFrameworkCoreFawtygModule : AbpModule
context.Services.AddTransient<IPullTaskRepository, PullTaskEfCoreRepository>(); context.Services.AddTransient<IPullTaskRepository, PullTaskEfCoreRepository>();
context.Services.AddTransient<IScrapRepository, ScrapEfCoreRepository>(); context.Services.AddTransient<IScrapRepository, ScrapEfCoreRepository>();
context.Services.AddTransient<IIssueRepository, IssueEfCoreRepository>(); context.Services.AddTransient<IIssueRepository, IssueEfCoreRepository>();
context.Services.AddTransient<IBackfluRepository, BackfluEfCoreRepository>();
} }
} }

1
be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.EntityFrameworkCore.Fawtyg.Mes/IMesDbContext.cs

@ -19,4 +19,5 @@ public interface IMesDbContext : IEfCoreDbContext
DbSet<MesOut> MesOuts { get; } DbSet<MesOut> MesOuts { get; }
DbSet<PullTask> PullTasks { get; } DbSet<PullTask> PullTasks { get; }
DbSet<Backflu> Backflu { get; }
} }

1
be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.EntityFrameworkCore.Fawtyg.Mes/MesDbContext.cs

@ -20,6 +20,7 @@ public class MesDbContext :
public virtual DbSet<PullTask> PullTasks { get; } public virtual DbSet<PullTask> PullTasks { get; }
public virtual DbSet<IssueNote> Issue { get; } public virtual DbSet<IssueNote> Issue { get; }
public virtual DbSet<Backflu> Backflu { get; }
public MesDbContext(DbContextOptions<MesDbContext> options) public MesDbContext(DbContextOptions<MesDbContext> options)
: base(options) : base(options)

2
be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.EntityFrameworkCore.Fawtyg.Mes/PullTask/PullTaskDbContextModelCreatingExtensions.cs

@ -20,7 +20,7 @@ public static class PullTaskDbContextModelCreatingExtensions
b.Property(q => q.no).HasMaxLength(255); b.Property(q => q.no).HasMaxLength(255);
b.Property(q => q.Itemno).HasMaxLength(255); b.Property(q => q.Itemno).HasMaxLength(255);
b.Property(q => q.Plant).HasMaxLength(255); b.Property(q => q.Plant).HasMaxLength(255);
b.Property(q => q.Planqty).HasPrecision(18, 2); b.Property(q => q.Planqty).HasMaxLength(255);
b.Property(q => q.Yl1); b.Property(q => q.Yl1);
}); });

83
be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.Fawtyg.MesAgent/Incoming/BackFluConverter.cs

@ -0,0 +1,83 @@
using System.Collections.Generic;
using System.Linq;
using System.Text.Json;
using System.Threading.Tasks;
using Microsoft.Extensions.Logging;
using Volo.Abp.ObjectMapping;
using Win_in.Sfs.Basedata.Application.Contracts;
using Win_in.Sfs.Wms.DataExchange.Domain;
using Win_in.Sfs.Wms.DataExchange.WMS.BackFlushNote;
using Win_in.Sfs.Wms.Store.Application.Contracts;
namespace Win_in.Sfs.Wms.DataExchange.Fawtyg.MesAgent.Incoming;
public class BackFluConverter : IIncomingConverter
{
private readonly IIncomingFromExternalManager _incomingFromExternalManager;
private readonly IIncomingToWmsManager _incomingToWmsManager;
private readonly IItemBasicAppService _itemBasicAppService;
private readonly IObjectMapper _objectMapper;
private readonly ILogger<BackFluConverter> _logger;
public BackFluConverter(
IIncomingToWmsManager incomingToWmsManager,
IItemBasicAppService itemBasicAppService,
IObjectMapper objectMapper,
ILogger<BackFluConverter> logger
,
IIncomingFromExternalManager incomingFromExternalManager
)
{
_incomingToWmsManager = incomingToWmsManager;
_itemBasicAppService = itemBasicAppService;
_objectMapper = objectMapper;
_logger = logger;
_incomingFromExternalManager = incomingFromExternalManager;
}
public virtual async Task ConvertAsync(List<IncomingFromExternal> incomingFromExternalList)
{
if (!incomingFromExternalList.Any())
{
_logger.LogInformation("no backflus");
return;
}
var incomingToWmsDataList = await BuildIncomingToWmsOfPurchaseOrderAsync(incomingFromExternalList).ConfigureAwait(false);
await _incomingToWmsManager.CreateManyAsync(incomingToWmsDataList).ConfigureAwait(false);
//归档
await _incomingFromExternalManager.ArchiveBulkAsync(incomingFromExternalList).ConfigureAwait(false);
}
private async Task<List<IncomingToWms>> BuildIncomingToWmsOfPurchaseOrderAsync(List<IncomingFromExternal> incomingDataList)
{
await Task.CompletedTask.ConfigureAwait(false);
var incomingToWmsList = new List<IncomingToWms>();
var groups = incomingDataList.GroupBy(p => p.SourceDataGroupCode);
foreach (var group in groups)
{
var first = group.First();
var incomingToWms = new IncomingToWms()
{
DataType = first.DataType,
DataAction = first.DataAction,
SourceSystem = first.SourceSystem,
DataIdentityCode = first.SourceDataGroupCode,
};
incomingToWms.SetEffectiveDate(first.EffectiveDate);
var exchangeBack = JsonSerializer.Deserialize<BackFlushNoteExchangeDto>(first.DestinationDataContent);
var wmsBack = _objectMapper.Map<BackFlushNoteExchangeDto, BackFlushNoteEditInput>(exchangeBack);
wmsBack.Details = new List<BackFlushNoteDetailInput>();
foreach (var incomingFromExternal in group.ToList())
{
var back = JsonSerializer.Deserialize<BackFlushNoteExchangeDto>(incomingFromExternal.DestinationDataContent);
var wmsBackDetail = _objectMapper.Map<BackFlushNoteDetailExchangeDto, BackFlushNoteDetailInput>(back.Detail);
wmsBack.Details.Add(wmsBackDetail);
}
incomingToWms.DataContent = JsonSerializer.Serialize(wmsBack);
incomingToWmsList.Add(incomingToWms);
}
return incomingToWmsList;
}
}

112
be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.Fawtyg.MesAgent/Incoming/BackFluReader.cs

@ -0,0 +1,112 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text.Json;
using System.Threading.Tasks;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.Logging;
using Win_in.Sfs.Wms.DataExchange.Domain;
using Win_in.Sfs.Wms.DataExchange.Domain.Fawtyg.Mes;
using Win_in.Sfs.Wms.DataExchange.Domain.Shared;
using Win_in.Sfs.Wms.DataExchange.WMS.BackFlushNote;
namespace Win_in.Sfs.Wms.DataExchange.Fawtyg.MesAgent.Incoming;
public class BackFluReader : IReader
{
private readonly IBackfluManager _ibackfluManager;
private readonly IIncomingFromExternalManager _incomingFromExternalManager;
private readonly ILogger<BackFluReader> _logger;
private readonly IConfiguration _configuration;
public BackFluReader(
IBackfluManager ibackfuManager
, IIncomingFromExternalManager incomingFromExternalManager
, ILogger<BackFluReader> logger
, IConfiguration configuration
)
{
_ibackfluManager = ibackfuManager;
_incomingFromExternalManager = incomingFromExternalManager;
_logger = logger;
_configuration = configuration;
}
public virtual async Task<List<IncomingFromExternal>> ReadAsync()
{
//从Tyrp读取待处理bom
var BackFull = await _ibackfluManager.GetToBeProcessedListAsync().ConfigureAwait(false);
var toBeProcessedBack = BackFull.Where(p => p.scmout_stat == "Y").ToList();
if (!toBeProcessedBack.Any())
{
_logger.LogInformation("no backflus");
return new List<IncomingFromExternal>();
}
//bom逐一转换为bomNote
var incomingDataList = BuildIncomingFromExternalFromBomAsync(toBeProcessedBack);
await _incomingFromExternalManager.CreateManyAsync(incomingDataList).ConfigureAwait(false);
await _ibackfluManager.UpdateProcessedListAsync(toBeProcessedBack).ConfigureAwait(false);
return incomingDataList;
}
private List<IncomingFromExternal> BuildIncomingFromExternalFromBomAsync(List<Backflu> toBeProcessedIssue)
{
var incomingDataList = new List<IncomingFromExternal>();
foreach (var backflu in toBeProcessedIssue)
{
var incomingData = BuildIncomingFromExternal(backflu);
incomingData.SetEffectiveDate(DateTime.Now);
try
{
var bm = BuildScrapNoteOrderExchangeMes(backflu);
incomingData.DestinationDataContent = JsonSerializer.Serialize(backflu);
}
catch (Exception ex)
{
incomingData.SetError(EnumExchangeDataErrorCode.Exception, ex.Message, ex.ToString());
}
incomingDataList.Add(incomingData);
}
return incomingDataList;
}
private IncomingFromExternal BuildIncomingFromExternal(Backflu backflu)
{
var incomingData = new IncomingFromExternal()
{
DataType = EnumIncomingDataType.BackFlush.ToString(),
DataAction = EnumExchangeDataAction.Add,
SourceSystem = EnumSystemType.ERP.ToString(),
SourceDataId = backflu.scmout_type,
SourceDataGroupCode = backflu.scmout_nbr,
SourceDataDetailCode = backflu.scmout_part,
SourceDataContent = JsonSerializer.Serialize(backflu),
WriteTime = DateTime.Now,
Writer = nameof(MesIncomingBackgroundWorker),
DestinationSystem = EnumSystemType.ERP.ToString(),
};
return incomingData;
}
private static BackFlushNoteExchangeDto BuildScrapNoteOrderExchangeMes(Backflu backflu)
{
var back = new BackFlushNoteExchangeDto()
{
ActiveDate = Convert.ToDateTime(backflu.scmout_dt_w.Substring(0, 4) + "-" + backflu.scmout_dt_w.Substring(4, 2) + "-" + backflu.scmout_dt_w.Substring(6, 2)),
ItemCode = backflu.scmout_part,
Number = backflu.scmout_nbr
};
var bakcdetail = new BackFlushNoteDetailExchangeDto()
{
Number = backflu.scmout_nbr,
ItemCode = backflu.scmout_part,
Qty = backflu.scmout_qty,
LocationErpCode = backflu.scmout_loc
};
back.Detail = bakcdetail;
return back;
}
}

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

@ -34,21 +34,21 @@ public class MesIncomingBackgroundWorker : AsyncPeriodicBackgroundWorkerBase
Logger.LogInformation($"{Incoming} is not active!"); Logger.LogInformation($"{Incoming} is not active!");
return; return;
} }
Logger.LogInformation($"Read MesOut");//缴库 //Logger.LogInformation($"Read MesOut");//缴库
var mesOutReader = workerContext.ServiceProvider.GetRequiredService<MesOutReader>(); //var mesOutReader = workerContext.ServiceProvider.GetRequiredService<MesOutReader>();
var mesOutConverter = workerContext.ServiceProvider.GetRequiredService<MesOutConverter>(); //var mesOutConverter = workerContext.ServiceProvider.GetRequiredService<MesOutConverter>();
//读取并保存MesOut ////读取并保存MesOut
var mesOutsFromExternalList = await mesOutReader.ReadAsync().ConfigureAwait(false); //var mesOutsFromExternalList = await mesOutReader.ReadAsync().ConfigureAwait(false);
//转换MesOut ////转换MesOut
await mesOutConverter.ConvertAsync(mesOutsFromExternalList).ConfigureAwait(false); //await mesOutConverter.ConvertAsync(mesOutsFromExternalList).ConfigureAwait(false);
Logger.LogInformation($"Read PullTask");//拉动任务 //Logger.LogInformation($"Read PullTask");//拉动任务
var pullTaskReader = workerContext.ServiceProvider.GetRequiredService<PullTaskReader>(); //var pullTaskReader = workerContext.ServiceProvider.GetRequiredService<PullTaskReader>();
var pullTaskConverter = workerContext.ServiceProvider.GetRequiredService<PullTaskConverter>(); //var pullTaskConverter = workerContext.ServiceProvider.GetRequiredService<PullTaskConverter>();
//读取并保存PullTask ////读取并保存PullTask
var pullTaskFromExternalList = await pullTaskReader.ReadAsync().ConfigureAwait(false); //var pullTaskFromExternalList = await pullTaskReader.ReadAsync().ConfigureAwait(false);
//转换PullTask ////转换PullTask
await pullTaskConverter.ConvertAsync(pullTaskFromExternalList).ConfigureAwait(false); //await pullTaskConverter.ConvertAsync(pullTaskFromExternalList).ConfigureAwait(false);
Logger.LogInformation($"Read Scrap"); Logger.LogInformation($"Read Scrap");
var scrapReader = workerContext.ServiceProvider.GetRequiredService<ScrapReader>(); var scrapReader = workerContext.ServiceProvider.GetRequiredService<ScrapReader>();
@ -58,14 +58,21 @@ public class MesIncomingBackgroundWorker : AsyncPeriodicBackgroundWorkerBase
//转换Scrap //转换Scrap
await scrapConverter.ConvertAsync(scrapsFromExternalList).ConfigureAwait(false); await scrapConverter.ConvertAsync(scrapsFromExternalList).ConfigureAwait(false);
Logger.LogInformation($"Read Issue"); //Logger.LogInformation($"Read Issue");
var pckHandleService = workerContext.ServiceProvider.GetRequiredService<IssueReader>(); //var pckHandleService = workerContext.ServiceProvider.GetRequiredService<IssueReader>();
var pckConverter = workerContext.ServiceProvider.GetRequiredService<IssueConverter>(); //var pckConverter = workerContext.ServiceProvider.GetRequiredService<IssueConverter>();
//读取并保持Pck ////读取并保持Pck
var pcksFromExternalList = await pckHandleService.ReadAsync().ConfigureAwait(false); //var pcksFromExternalList = await pckHandleService.ReadAsync().ConfigureAwait(false);
//转换Pck ////转换Pck
await pckConverter.ConvertAsync(pcksFromExternalList).ConfigureAwait(false); //await pckConverter.ConvertAsync(pcksFromExternalList).ConfigureAwait(false);
//Logger.LogInformation($"Read BackFlush");//耗用单
//var BackFlushReader = workerContext.ServiceProvider.GetRequiredService<BackFluReader>();
//var BackFlushConverter = workerContext.ServiceProvider.GetRequiredService<BackFluConverter>();
////读取并保存Customer
//var backFlushsFromExternalList = await BackFlushReader.ReadAsync().ConfigureAwait(false);
////转换Customer
//await BackFlushConverter.ConvertAsync(backFlushsFromExternalList).ConfigureAwait(false);
Logger.LogInformation($"Completed: Handling {Incoming}"); Logger.LogInformation($"Completed: Handling {Incoming}");
} }

14
be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.Fawtyg.MesAgent/Incoming/MesOutConverter.cs

@ -5,6 +5,7 @@ using System.Text.Json;
using System.Threading.Tasks; using System.Threading.Tasks;
using Microsoft.Extensions.Configuration; using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.Logging; using Microsoft.Extensions.Logging;
using Org.BouncyCastle.Asn1.Pkcs;
using Volo.Abp.ObjectMapping; using Volo.Abp.ObjectMapping;
using Win_in.Sfs.Basedata.Application.Contracts; using Win_in.Sfs.Basedata.Application.Contracts;
using Win_in.Sfs.Shared.Domain.Shared; using Win_in.Sfs.Shared.Domain.Shared;
@ -77,6 +78,7 @@ public class MesOutConverter : IIncomingConverter
wmsProductReceiptNote.WorkShop = "";//车间 wmsProductReceiptNote.WorkShop = "";//车间
wmsProductReceiptNote.Worker = _configuration["Authentication:username"];//操作人 wmsProductReceiptNote.Worker = _configuration["Authentication:username"];//操作人
wmsProductReceiptNote.ReceiptType = EnumReceiptType.MesScanReceipt;//完工收货方式 wmsProductReceiptNote.ReceiptType = EnumReceiptType.MesScanReceipt;//完工收货方式
wmsProductReceiptNote.WarehouseCode = "";
wmsProductReceiptNote.Details = new List<ProductReceiptNoteDetailInput>(); wmsProductReceiptNote.Details = new List<ProductReceiptNoteDetailInput>();
foreach (var incomingFromExternal in group.ToList()) foreach (var incomingFromExternal in group.ToList())
@ -86,20 +88,24 @@ public class MesOutConverter : IIncomingConverter
wmsProductReceiptNoteDetail.Lot = ""; //排序批次 wmsProductReceiptNoteDetail.Lot = ""; //排序批次
wmsProductReceiptNoteDetail.PackingCode = "";//箱标签 wmsProductReceiptNoteDetail.PackingCode = "";//箱标签
wmsProductReceiptNoteDetail.Status = EnumInventoryStatus.OK; wmsProductReceiptNoteDetail.Status = EnumInventoryStatus.OK;
wmsProductReceiptNoteDetail.WarehouseCode = "";
wmsProductReceiptNoteDetail.LocationArea = "";
wmsProductReceiptNoteDetail.LocationGroup = "";
var loc = await _locationAppService.GetListByTypesAndErpCodeAsync(types, wmsProductReceiptNoteDetail.LocationErpCode).ConfigureAwait(false); var loc = await _locationAppService.GetListByTypesAndErpCodeAsync(types, wmsProductReceiptNoteDetail.LocationErpCode).ConfigureAwait(false);
if (loc != null) if (loc != null)
{ {
wmsProductReceiptNoteDetail.LocationCode = loc[0].Code; wmsProductReceiptNoteDetail.LocationCode = loc[0].Code;
} }
; try try
{ {
var item = await _itemBasicAppService.GetByCodeAsync(wmsProductReceiptNoteDetail.ItemCode).ConfigureAwait(false); var item = await _itemBasicAppService.GetByCodeAsync(wmsProductReceiptNoteDetail.ItemCode).ConfigureAwait(false);
if (item != null) if (item != null)
{ {
wmsProductReceiptNoteDetail.ItemName = item.Name; wmsProductReceiptNoteDetail.ItemName = item.Name;
wmsProductReceiptNoteDetail.ItemDesc1 = item.Desc1; wmsProductReceiptNoteDetail.ItemDesc1 = !string.IsNullOrEmpty(item.Desc1) ? item.Desc1 : "";
wmsProductReceiptNoteDetail.ItemDesc2 = item.Desc2; wmsProductReceiptNoteDetail.ItemDesc2 = !string.IsNullOrEmpty(item.Desc2) ? item.Desc2 : "";
wmsProductReceiptNoteDetail.Uom = item.BasicUom; wmsProductReceiptNoteDetail.Uom = !string.IsNullOrEmpty(item.BasicUom) ? item.BasicUom : "";
} }
} }
catch (Exception) catch (Exception)

9
be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.Fawtyg.MesAgent/Incoming/PullTaskConverter.cs

@ -11,6 +11,7 @@ using Win_in.Sfs.Shared.Domain.Shared;
using Win_in.Sfs.Wms.DataExchange.Domain; using Win_in.Sfs.Wms.DataExchange.Domain;
using Win_in.Sfs.Wms.DataExchange.WMS.MaterialRequest; using Win_in.Sfs.Wms.DataExchange.WMS.MaterialRequest;
using Win_in.Sfs.Wms.Store.Application.Contracts; using Win_in.Sfs.Wms.Store.Application.Contracts;
using Win_in.Sfs.Wms.Store.Domain;
namespace Win_in.Sfs.Wms.DataExchange.Fawtyg.MesAgent.Incoming; namespace Win_in.Sfs.Wms.DataExchange.Fawtyg.MesAgent.Incoming;
@ -77,16 +78,16 @@ public class PullTaskConverter : IIncomingConverter
foreach (var incomingFromExternal in group.ToList()) foreach (var incomingFromExternal in group.ToList())
{ {
var materialRequest = JsonSerializer.Deserialize<MaterialRequestExchangeDto>(incomingFromExternal.DestinationDataContent); var materialRequest = JsonSerializer.Deserialize<MaterialRequestExchangeDto>(incomingFromExternal.DestinationDataContent);
var wmsMaterialRequestDetail = _objectMapper.Map<MaterialRequestDetailExchangeDto, MaterialRequestDetailInput>(materialRequest.Detail); var wmsMaterialRequestDetail = _objectMapper.Map<MaterialRequestDetailExchangeDto, MaterialRequestDetailInput>(materialRequest.Detail);
var item = await _itemBasicAppService.GetByCodeAsync(wmsMaterialRequestDetail.ItemCode).ConfigureAwait(false); var item = await _itemBasicAppService.GetByCodeAsync(wmsMaterialRequestDetail.ItemCode).ConfigureAwait(false);
try try
{ {
if (item != null) if (item != null)
{ {
wmsMaterialRequestDetail.ItemName = item.Name; wmsMaterialRequestDetail.ItemName = item.Name;
wmsMaterialRequestDetail.ItemDesc1 = item.Desc1; wmsMaterialRequestDetail.ItemDesc1 = !string.IsNullOrEmpty(item.Desc1) ? item.Desc1 : "";
wmsMaterialRequestDetail.ItemDesc2 = item.Desc2; wmsMaterialRequestDetail.ItemDesc2 = !string.IsNullOrEmpty(item.Desc2) ? item.Desc2 : "";
wmsMaterialRequestDetail.Uom = item.BasicUom; wmsMaterialRequestDetail.Uom = !string.IsNullOrEmpty(item.BasicUom) ? item.BasicUom : "";
} }
} }
catch (Exception) catch (Exception)

3
be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.Fawtyg.MesAgent/Incoming/PullTaskReader.cs

@ -29,6 +29,7 @@ public class PullTaskReader : IReader
} }
public virtual async Task<List<IncomingFromExternal>> ReadAsync() public virtual async Task<List<IncomingFromExternal>> ReadAsync()
{ {
//从MES读取待处理PullTask //从MES读取待处理PullTask
var toBeProcessedPillTasks = await _pullTaskManager.GetToBeProcessedListAsync().ConfigureAwait(false); var toBeProcessedPillTasks = await _pullTaskManager.GetToBeProcessedListAsync().ConfigureAwait(false);
@ -101,7 +102,7 @@ public class PullTaskReader : IReader
var materialRequestDetail = new MaterialRequestDetailExchangeDto() var materialRequestDetail = new MaterialRequestDetailExchangeDto()
{ {
ItemCode = pullTask.Itemno, ItemCode = pullTask.Itemno,
Qty = pullTask.Planqty, Qty = decimal.Parse(pullTask.Planqty),
ToLocationCode = pullTask.Plant, ToLocationCode = pullTask.Plant,
}; };

14
be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.Fawtyg.MesAgent/Incoming/ScrapConverter.cs

@ -85,15 +85,17 @@ public class ScrapConverter : IIncomingConverter
wmsScrapDetail.FromPackingCode = ""; wmsScrapDetail.FromPackingCode = "";
wmsScrapDetail.FromLot = ""; wmsScrapDetail.FromLot = "";
wmsScrapDetail.FromWarehouseCode = ""; wmsScrapDetail.FromWarehouseCode = "";
wmsScrapDetail.ToWarehouseCode = ""; wmsScrapDetail.ToWarehouseCode = "";
wmsScrapDetail.Uom = "";
wmsScrapDetail.FromStatus = EnumInventoryStatus.OK; wmsScrapDetail.FromStatus = EnumInventoryStatus.OK;
var item = await _itemBasicAppService.GetByCodeAsync(wmsScrapDetail.ItemCode).ConfigureAwait(false); wmsScrapDetail.FromLocationArea = "";
wmsScrapDetail.ToLocationGroup = "";
var item = await _itemBasicAppService.GetByCodeAsync(wmsScrapDetail.ItemCode).ConfigureAwait(false);
if (item != null) if (item != null)
{ {
wmsScrapDetail.ItemName = item.Name; wmsScrapDetail.ItemName = item.Name;
wmsScrapDetail.ItemDesc1 = item.Desc1; wmsScrapDetail.ItemDesc1 = !string.IsNullOrEmpty(item.Desc1) ? item.Desc1 : "";
wmsScrapDetail.ItemDesc2 = item.Desc2; wmsScrapDetail.ItemDesc2 = !string.IsNullOrEmpty(item.Desc2) ? item.Desc2 : "";
wmsScrapDetail.Uom = !string.IsNullOrEmpty(item.BasicUom) ? item.BasicUom : "";
} }
wmsScarp.Details.Add(wmsScrapDetail); wmsScarp.Details.Add(wmsScrapDetail);

5
be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.Fawtyg.MesAgent/Incoming/ScrapReader.cs

@ -4,6 +4,7 @@ using System.Linq;
using System.Text.Json; using System.Text.Json;
using System.Threading.Tasks; using System.Threading.Tasks;
using Microsoft.Extensions.Logging; using Microsoft.Extensions.Logging;
using Win_in.Sfs.Shared.Domain.Shared;
using Win_in.Sfs.Wms.DataExchange.Domain; using Win_in.Sfs.Wms.DataExchange.Domain;
using Win_in.Sfs.Wms.DataExchange.Domain.Fawtyg.Mes; using Win_in.Sfs.Wms.DataExchange.Domain.Fawtyg.Mes;
using Win_in.Sfs.Wms.DataExchange.Domain.Shared; using Win_in.Sfs.Wms.DataExchange.Domain.Shared;
@ -95,8 +96,8 @@ public class ScrapReader : IReader
var crap = new ScrapNoteExchangeDto() var crap = new ScrapNoteExchangeDto()
{ {
Worker = scrap.mesout_asd_user, Worker = scrap.mesout_asd_user,
ActiveDate = DateTime.ParseExact(scrap.Mesout_asd_date, "yyyyMMdd", System.Globalization.CultureInfo.CurrentCulture) ActiveDate = DateTime.ParseExact(scrap.Mesout_asd_date, "yyyyMMdd", System.Globalization.CultureInfo.CurrentCulture),
Type = EnumTransSubType.Scrap_WIP.ToString()
}; };
var crapDetail = new ScrapNoteDetailExchangeDto() var crapDetail = new ScrapNoteDetailExchangeDto()
{ {

18
be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.Fawtyg.MesAgent/MesAgentModule.cs

@ -7,6 +7,7 @@ using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting; using Microsoft.Extensions.Hosting;
using Polly; using Polly;
using Volo.Abp; using Volo.Abp;
using Volo.Abp.Account;
using Volo.Abp.Autofac; using Volo.Abp.Autofac;
using Volo.Abp.AutoMapper; using Volo.Abp.AutoMapper;
using Volo.Abp.BackgroundJobs; using Volo.Abp.BackgroundJobs;
@ -39,7 +40,8 @@ namespace Win_in.Sfs.Wms.DataExchange.Fawtyg.MesAgent;
typeof(DataExchangeDomainModule), typeof(DataExchangeDomainModule),
typeof(DataExchangeEntityFrameworkCoreModule), typeof(DataExchangeEntityFrameworkCoreModule),
typeof(DataExchangeDomainFawtygMesModule), typeof(DataExchangeDomainFawtygMesModule),
typeof(DataExchangeEntityFrameworkCoreFawtygModule) typeof(DataExchangeEntityFrameworkCoreFawtygModule),
typeof(AbpAccountApplicationContractsModule)
)] )]
public class MesAgentModule : AbpModule public class MesAgentModule : AbpModule
{ {
@ -153,13 +155,13 @@ public class MesAgentModule : AbpModule
typeof(LabelApplicationContractsModule).Assembly, typeof(LabelApplicationContractsModule).Assembly,
"Label" "Label"
); );
} }
public override void OnApplicationInitialization(
public override async Task OnApplicationInitializationAsync( ApplicationInitializationContext context)
ApplicationInitializationContext context)
{ {
await context.AddBackgroundWorkerAsync<MesIncomingBackgroundWorker>().ConfigureAwait(false);
await context.AddBackgroundWorkerAsync<MesOutgoingBackgroundWorker>().ConfigureAwait(false);
}
context.AddBackgroundWorkerAsync<MesIncomingBackgroundWorker>();
//context.AddBackgroundWorkerAsync<MesOutgoingBackgroundWorker>();
}
} }

2
be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.Fawtyg.MesAgent/Win_in.Sfs.Wms.DataExchange.Fawtyg.MesAgent.csproj

@ -11,6 +11,7 @@
<PackageReference Include="Microsoft.EntityFrameworkCore.Tools" Version="6.0.12" /> <PackageReference Include="Microsoft.EntityFrameworkCore.Tools" Version="6.0.12" />
<PackageReference Include="Microsoft.Extensions.Hosting" Version="6.0.*" /> <PackageReference Include="Microsoft.Extensions.Hosting" Version="6.0.*" />
<PackageReference Include="Microsoft.Extensions.Http.Polly" Version="6.0.12" /> <PackageReference Include="Microsoft.Extensions.Http.Polly" Version="6.0.12" />
<PackageReference Include="Serilog.Sinks.MSSqlServer" Version="6.3.0" />
<PackageReference Include="Volo.Abp.EntityFrameworkCore.SqlServer" Version="5.3.5" /> <PackageReference Include="Volo.Abp.EntityFrameworkCore.SqlServer" Version="5.3.5" />
<PackageReference Include="Volo.Abp.BackgroundJobs" Version="5.3.5" /> <PackageReference Include="Volo.Abp.BackgroundJobs" Version="5.3.5" />
<PackageReference Include="Volo.Abp.BackgroundWorkers" Version="5.3.5" /> <PackageReference Include="Volo.Abp.BackgroundWorkers" Version="5.3.5" />
@ -27,6 +28,7 @@
<ProjectReference Include="..\..\src\Win_in.Sfs.Wms.DataExchange.EntityFrameworkCore\Win_in.Sfs.Wms.DataExchange.EntityFrameworkCore.csproj" /> <ProjectReference Include="..\..\src\Win_in.Sfs.Wms.DataExchange.EntityFrameworkCore\Win_in.Sfs.Wms.DataExchange.EntityFrameworkCore.csproj" />
<ProjectReference Include="..\Win_in.Sfs.Wms.DataExchange.Domain.Fawtyg.Eos\Win_in.Sfs.Wms.DataExchange.Domain.Fawtyg.Eos.csproj" /> <ProjectReference Include="..\Win_in.Sfs.Wms.DataExchange.Domain.Fawtyg.Eos\Win_in.Sfs.Wms.DataExchange.Domain.Fawtyg.Eos.csproj" />
<ProjectReference Include="..\Win_in.Sfs.Wms.DataExchange.Domain.Fawtyg.Mes\Win_in.Sfs.Wms.DataExchange.Domain.Fawtyg.Mes.csproj" /> <ProjectReference Include="..\Win_in.Sfs.Wms.DataExchange.Domain.Fawtyg.Mes\Win_in.Sfs.Wms.DataExchange.Domain.Fawtyg.Mes.csproj" />
<ProjectReference Include="..\Win_in.Sfs.Wms.DataExchange.Domain.Fawtyg.Tyrp\Win_in.Sfs.Wms.DataExchange.Domain.Fawtyg.Tyrp.csproj" />
<ProjectReference Include="..\Win_in.Sfs.Wms.DataExchange.EntityFrameworkCore.Fawtyg.Mes\Win_in.Sfs.Wms.DataExchange.EntityFrameworkCore.Fawtyg.Mes.csproj" /> <ProjectReference Include="..\Win_in.Sfs.Wms.DataExchange.EntityFrameworkCore.Fawtyg.Mes\Win_in.Sfs.Wms.DataExchange.EntityFrameworkCore.Fawtyg.Mes.csproj" />
</ItemGroup> </ItemGroup>

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

@ -1,12 +1,12 @@
{ {
"ConnectionStrings": { "ConnectionStrings": {
"Default": "Server=dev.ccwin-in.com,13319;Database=DyWmsAuth;uid=ccwin-in;pwd=Microsoft@2022;", "Default": "Server=dev.ccwin-in.com,21195;Database= WMS;uid=sa;pwd=aA123456!;TrustServerCertificate=True;",
"DataExchange": "Server=dev.ccwin-in.com,21195;Database=DataExchange_Main;uid=sa;pwd=aA123456!;", "DataExchange": "Server=dev.ccwin-in.com,21195;Database=DataExchange_Main;uid=sa;pwd=aA123456!;TrustServerCertificate=True;",
"MES": "Server=dev.ccwin-in.com;Port=13306;Database=MES;Uid=ccwinin;Pwd=Microsoft@2022;" "MES": "Server=10.164.1.12;Port=3306;Database=erp;Uid=wms;Pwd=123456;"
}, },
"AuthServer": { "AuthServer": {
"Authority": "http://dev.ccwin-in.com:59093/", "Authority": "http://dev.ccwin-in.com:21293/",
"RequireHttpsMetadata": "false", "RequireHttpsMetadata": "false",
"SwaggerClientId": "admin", "SwaggerClientId": "admin",
"SwaggerClientSecret": "1q2w3E*", "SwaggerClientSecret": "1q2w3E*",
@ -24,13 +24,13 @@
"RemoteServices": { "RemoteServices": {
"BaseData": { "BaseData": {
"BaseUrl": "http://dev.ccwin-in.com:59094/" "BaseUrl": "http://dev.ccwin-in.com:21294/"
}, },
"Store": { "Store": {
"BaseUrl": "http://dev.ccwin-in.com:59095/" "BaseUrl": "http://dev.ccwin-in.com:21295/"
}, },
"Label": { "Label": {
"BaseUrl": "http://dev.ccwin-in.com:59092/" "BaseUrl": "http://dev.ccwin-in.com:21292/"
} }
}, },
"MesOptions": { "MesOptions": {

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

@ -43,7 +43,7 @@ public class BackFluReader : IReader
//bom逐一转换为bomNote //bom逐一转换为bomNote
var incomingDataList = BuildIncomingFromExternalFromBomAsync(toBeProcessedBack); var incomingDataList = BuildIncomingFromExternalFromBomAsync(toBeProcessedBack);
await _incomingFromExternalManager.CreateManyAsync(incomingDataList).ConfigureAwait(false); await _incomingFromExternalManager.CreateManyAsync(incomingDataList).ConfigureAwait(false);
//await _ibackfluManager.UpdateProcessedListAsync(toBeProcessedBack); await _ibackfluManager.UpdateProcessedListAsync(toBeProcessedBack).ConfigureAwait(false);
return incomingDataList; return incomingDataList;
} }
private List<IncomingFromExternal> BuildIncomingFromExternalFromBomAsync(List<scmout> toBeProcessedIssue) private List<IncomingFromExternal> BuildIncomingFromExternalFromBomAsync(List<scmout> toBeProcessedIssue)

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

@ -49,7 +49,7 @@ public class ItemBasicConverter : IIncomingConverter
var materialRequestList = await BuildIncomingToWmsOfItemBasicRequestAsync(incomingFromExternalList).ConfigureAwait(false); var materialRequestList = await BuildIncomingToWmsOfItemBasicRequestAsync(incomingFromExternalList).ConfigureAwait(false);
await _incomingToWmsManager.CreateBulkAsync(materialRequestList).ConfigureAwait(false); await _incomingToWmsManager.CreateBulkAsync(materialRequestList).ConfigureAwait(false);
//归档 //归档
await _incomingFromExternalManager.ArchiveBulkAsync(incomingFromExternalList); await _incomingFromExternalManager.ArchiveBulkAsync(incomingFromExternalList).ConfigureAwait(false);
} }
private async Task<List<IncomingToWms>> BuildIncomingToWmsOfItemBasicRequestAsync(List<IncomingFromExternal> incomingDataList) private async Task<List<IncomingToWms>> BuildIncomingToWmsOfItemBasicRequestAsync(List<IncomingFromExternal> incomingDataList)

139
be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.Fawtyg.TyrpAgent/Outgoing/ItemTransformNoteConverter.cs

@ -0,0 +1,139 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text.Json;
using System.Threading.Tasks;
using Volo.Abp.ObjectMapping;
using Win_in.Sfs.Auth.Application.Contracts;
using Win_in.Sfs.Shared.Domain.Shared;
using Win_in.Sfs.Wms.DataExchange.Domain;
using Win_in.Sfs.Wms.DataExchange.Domain.Fawtyg.Tyrp;
using Win_in.Sfs.Wms.DataExchange.Domain.Shared;
using Win_in.Sfs.Wms.DataExchange.WMS.ItemTransformNote;
using Win_in.Sfs.Wms.Store.Application.Contracts;
namespace Win_in.Sfs.Wms.DataExchange.Fawtyg.TyrpAgent.Outgoing;
public class ItemTransformNoteConverter : IOutgoingConverter
{
private readonly IOutgoingFromWmsManager _outgoingFromWmsManager;
private readonly IOutgoingToExternalManager _outgoingToExternalManager;
private readonly ISupplierAsnAppService _supplierAsnAppService;
private readonly IDepartmentAppService _departmentAppService;
private readonly IObjectMapper _objectMapper;
public ItemTransformNoteConverter(
IOutgoingFromWmsManager outgoingFromWmsManager
, IOutgoingToExternalManager outgoingToExternalManager
, ISupplierAsnAppService supplierAsnAppService
, IDepartmentAppService departmentAppService
, IObjectMapper objectMapper
)
{
_outgoingFromWmsManager = outgoingFromWmsManager;
_outgoingToExternalManager = outgoingToExternalManager;
_supplierAsnAppService = supplierAsnAppService;
_departmentAppService = departmentAppService;
_objectMapper = objectMapper;
}
public virtual async Task<List<OutgoingToExternal>> ConvertAsync()
{
var outgoingToExternalList = new List<OutgoingToExternal>();
var outgoingFromWmsList = await _outgoingFromWmsManager.GetToBeProcessedListAsync(EnumOutgoingDataType.Item_Transform, EnumSystemType.ERP).ConfigureAwait(false);
foreach (var outgoingFromWms in outgoingFromWmsList)
{
var wmsCountAdjust = JsonSerializer.Deserialize<ItemTransformNoteDTO>(outgoingFromWms.DataContent);
if (Enum.Parse<EnumTransSubType>(wmsCountAdjust.Type) == EnumTransSubType.Item_Transform)
{
var department = await _departmentAppService.GetByUsernameAsync(wmsCountAdjust.Worker).ConfigureAwait(false);
var departmentCode = department == null ? "" : department.Code;
var details = wmsCountAdjust.Details.GroupBy(r => new { r.ItemCode, r.ToItemCode, r.LocationErpCode, r.ToLocationCode }).Select(p => new ItemTransformNoteDetailExchangeDto { ToQty = p.Sum(itm => itm.ToQty), FromQty = p.Sum(itm => itm.FromQty), ItemCode = p.Key.ItemCode, ToItemCode = p.Key.ToItemCode, LocationErpCode = p.Key.LocationErpCode, ReasonCode = String.Join("、", p.Select(x => x.ReasonCode).ToArray()) });
foreach (var detail in details)
{
List<ItemTransformNoteDetailExchangeDto> ItemTransform = new List<ItemTransformNoteDetailExchangeDto>();
ItemTransformNoteDetailExchangeDto ItemTrans = new ItemTransformNoteDetailExchangeDto();
ItemTrans.ItemCode = detail.ItemCode;
ItemTrans.LocationErpCode = detail.LocationErpCode;
ItemTrans.FromQty = detail.FromQty - detail.FromQty - detail.FromQty;
ItemTrans.ReasonCode = detail.ReasonCode;
ItemTransform.Add(ItemTrans);
ItemTransformNoteDetailExchangeDto ItemTranss = new ItemTransformNoteDetailExchangeDto();
ItemTranss.ItemCode = detail.ToItemCode;
ItemTranss.LocationErpCode = detail.LocationErpCode;
ItemTranss.FromQty = detail.ToQty;
ItemTranss.ReasonCode = detail.ReasonCode;
ItemTransform.Add(ItemTranss);
foreach (var Item in ItemTransform)
{
var outgoingToExternal = new OutgoingToExternal()
{
DataType = outgoingFromWms.DataType,
DataAction = outgoingFromWms.DataAction,
SourceSystem = EnumSystemType.WMS.ToString(),
SourceDataId = wmsCountAdjust.Number,
SourceDataGroupCode = wmsCountAdjust.Number,
SourceDataDetailCode = Item.ItemCode,
Writer = nameof(TyrpOutgoingBackgroundWorker),
DestinationSystem = EnumSystemType.ERP.ToString(),
DestinationDataId = "",
};
outgoingToExternal.SetEffectiveDate(outgoingFromWms.EffectiveDate);
var exchangeIssue = await BuildPurchaseReceiptExchangeDtoAsync(wmsCountAdjust, Item).ConfigureAwait(false);
outgoingToExternal.SourceDataContent = JsonSerializer.Serialize(exchangeIssue);
var arrive = BuildIssue(exchangeIssue, departmentCode);
outgoingToExternal.DestinationDataContent = JsonSerializer.Serialize(arrive);
outgoingToExternalList.Add(outgoingToExternal);
}
}
}
}
await _outgoingToExternalManager.CreateManyAsync(outgoingToExternalList).ConfigureAwait(false); ;
//将outgoingFromWms数据归档
await _outgoingFromWmsManager.ArchiveManyAsync(outgoingFromWmsList).ConfigureAwait(false); ;
return outgoingToExternalList;
//插入到中间表OutgoingToExternal
}
private CountAdjust BuildIssue(ItemTransformNoteExchangeDto exchangeCountAdjust, string departmentCode)
{
var detail = exchangeCountAdjust.Detail;
string asdtype = "";
if (Enum.Parse<EnumTransSubType>(exchangeCountAdjust.Type) == EnumTransSubType.Item_Transform)
{
asdtype = "4003";
}
var counta = new CountAdjust()
{
mesout_asd_refc = departmentCode,
mesout_asd_dt_w = DateTime.Now.ToString("yyyyMMdd HH:mm:ss"),
mesout_asd_type = asdtype,
mesout_asd_part = detail.ItemCode,
mesout_asd_date = exchangeCountAdjust.ActiveDate.ToString("yyyyMMdd"),
mesout_asd_loc = detail.LocationErpCode,
mesout_asd_code = detail.ReasonCode,
mesout_asd_qty = detail.FromQty,
mesout_asd_user = exchangeCountAdjust.Worker,
mesout_asd_k = string.Empty,
mesout_asd_stat = "Y"
};
return counta;
}
private async Task<ItemTransformNoteExchangeDto> BuildPurchaseReceiptExchangeDtoAsync(
ItemTransformNoteDTO wmsCountAdjust, ItemTransformNoteDetailExchangeDto wmsCountAdjustDetail)
{
var exchangeCountAdjust = _objectMapper.Map<ItemTransformNoteDTO, ItemTransformNoteExchangeDto>(wmsCountAdjust);
exchangeCountAdjust.Detail = wmsCountAdjustDetail;
return exchangeCountAdjust;
}
}

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

@ -120,6 +120,10 @@ public class TyrpOutgoingBackgroundWorker : AsyncPeriodicBackgroundWorkerBase
var scrapNoteList = await scrapNoteConvert.ConvertAsync().ConfigureAwait(false); var scrapNoteList = await scrapNoteConvert.ConvertAsync().ConfigureAwait(false);
await countadjustWriter.WriteAsync(scrapNoteList).ConfigureAwait(false); await countadjustWriter.WriteAsync(scrapNoteList).ConfigureAwait(false);
Logger.LogInformation($"Write ItemTransformNote");//回收料调整单
var ItemTransformNoteConvert = workerContext.ServiceProvider.GetRequiredService<ItemTransformNoteConverter>();
var ItemTransformNoteList = await ItemTransformNoteConvert.ConvertAsync().ConfigureAwait(false);
await countadjustWriter.WriteAsync(ItemTransformNoteList).ConfigureAwait(false);
Logger.LogInformation($"Completed: Handling {Outgoing}"); Logger.LogInformation($"Completed: Handling {Outgoing}");
} }

1
be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.Fawtyg.TyrpAgent/Win_in.Sfs.Wms.DataExchange.Fawtyg.TyrpAgent.csproj

@ -31,6 +31,7 @@
<ItemGroup> <ItemGroup>
<ProjectReference Include="..\..\..\Hosts\Auth.Host\src\Win_in.Sfs.Auth.Application.Contracts\Win_in.Sfs.Auth.Application.Contracts.csproj" /> <ProjectReference Include="..\..\..\Hosts\Auth.Host\src\Win_in.Sfs.Auth.Application.Contracts\Win_in.Sfs.Auth.Application.Contracts.csproj" />
<ProjectReference Include="..\..\..\Modules\BaseData\src\Win_in.Sfs.Basedata.Application\Win_in.Sfs.Basedata.Application.csproj" />
<ProjectReference Include="..\..\..\Modules\Label\src\Win_in.Sfs.Label.Application.Contracts\Win_in.Sfs.Label.Application.Contracts.csproj" /> <ProjectReference Include="..\..\..\Modules\Label\src\Win_in.Sfs.Label.Application.Contracts\Win_in.Sfs.Label.Application.Contracts.csproj" />
<ProjectReference Include="..\..\..\Modules\Shared\src\Win_in.Sfs.Shared.Host\Win_in.Sfs.Shared.Host.csproj" /> <ProjectReference Include="..\..\..\Modules\Shared\src\Win_in.Sfs.Shared.Host\Win_in.Sfs.Shared.Host.csproj" />
<ProjectReference Include="..\..\..\Modules\Store\src\Win_in.Sfs.Wms.Store.Application.Contracts\Win_in.Sfs.Wms.Store.Application.Contracts.csproj" /> <ProjectReference Include="..\..\..\Modules\Store\src\Win_in.Sfs.Wms.Store.Application.Contracts\Win_in.Sfs.Wms.Store.Application.Contracts.csproj" />

6
be/DataExchange/Iac/Win_in.Sfs.Wms.DataExchange.Application.Iac.Qad/PurchaseOrderAppService.cs

@ -22,7 +22,7 @@ namespace Win_in.Sfs.Wms.DataExchange.Application.Iac.Qad;
[ApiExplorerSettings(GroupName = SwaggerGroupConsts.WmsWebApi)] [ApiExplorerSettings(GroupName = SwaggerGroupConsts.WmsWebApi)]
public class PurchaseOrderAppService : ApplicationService, IPurchaseOrderAppService public class PurchaseOrderAppService : ApplicationService, IPurchaseOrderAppService
{ {
private readonly Store.Application.Contracts.IPurchaseOrderAppService _purchaseOrderAppService; //private readonly Store.Application.Contracts.IPurchaseOrderAppService _purchaseOrderAppService;
private readonly IPo_mstrRepository _po_mstrRepository; private readonly IPo_mstrRepository _po_mstrRepository;
@ -34,7 +34,7 @@ public class PurchaseOrderAppService : ApplicationService, IPurchaseOrderAppServ
IConfiguration configuration IConfiguration configuration
) )
{ {
_purchaseOrderAppService = purchaseOrderAppService; //_purchaseOrderAppService = purchaseOrderAppService;
_po_mstrRepository = po_mstrRepository; _po_mstrRepository = po_mstrRepository;
_configuration = configuration; _configuration = configuration;
} }
@ -77,7 +77,7 @@ public class PurchaseOrderAppService : ApplicationService, IPurchaseOrderAppServ
targetObj.ContactEmail = ""; targetObj.ContactEmail = "";
#endregion #endregion
await _purchaseOrderAppService.UpsertAsync(targetObj).ConfigureAwait(false); //await _purchaseOrderAppService.UpsertAsync(targetObj).ConfigureAwait(false);
} }
catch (Exception ex) catch (Exception ex)
{ {

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

@ -149,7 +149,7 @@ public class AgentModule : AbpModule
public override void OnApplicationInitialization( public override void OnApplicationInitialization(
ApplicationInitializationContext context) ApplicationInitializationContext context)
{ {
// context.AddBackgroundWorkerAsync<IncomingToWmsWorker>(); context.AddBackgroundWorkerAsync<IncomingToWmsWorker>();
context.AddBackgroundWorkerAsync<OutgoingFromWmsWorker>(); //context.AddBackgroundWorkerAsync<OutgoingFromWmsWorker>();
} }
} }

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

@ -79,64 +79,64 @@ public class IncomingToWmsWorker : AsyncPeriodicBackgroundWorkerBase
switch (dataType) switch (dataType)
{ {
case EnumIncomingDataType.Department: case EnumIncomingDataType.Department:
await incomingToWms.HandleDepartmentsAsync(workerContext).ConfigureAwait(false); //await incomingToWms.HandleDepartmentsAsync(workerContext).ConfigureAwait(false);
break; break;
case EnumIncomingDataType.User: case EnumIncomingDataType.User:
await incomingToWms.HandleUsersAsync(workerContext).ConfigureAwait(false); //await incomingToWms.HandleUsersAsync(workerContext).ConfigureAwait(false);
break; break;
case EnumIncomingDataType.Item: case EnumIncomingDataType.Item:
await incomingToWms.HandleItemsAsync(workerContext).ConfigureAwait(false); //await incomingToWms.HandleItemsAsync(workerContext).ConfigureAwait(false);
break; break;
case EnumIncomingDataType.Location: case EnumIncomingDataType.Location:
await incomingToWms.HandleErpLocationsAsync(workerContext).ConfigureAwait(false); await incomingToWms.HandleErpLocationsAsync(workerContext).ConfigureAwait(false);
break; break;
case EnumIncomingDataType.Bom: case EnumIncomingDataType.Bom:
await incomingToWms.HandleBomsAsync(workerContext).ConfigureAwait(false); //await incomingToWms.HandleBomsAsync(workerContext).ConfigureAwait(false);
break; break;
case EnumIncomingDataType.Dict: case EnumIncomingDataType.Dict:
await incomingToWms.HandleDictsAsync(workerContext).ConfigureAwait(false); await incomingToWms.HandleDictsAsync(workerContext).ConfigureAwait(false);
break; break;
case EnumIncomingDataType.Supplier: case EnumIncomingDataType.Supplier:
await incomingToWms.HandleSuppliersAsync(workerContext).ConfigureAwait(false); //await incomingToWms.HandleSuppliersAsync(workerContext).ConfigureAwait(false);
break; break;
case EnumIncomingDataType.SupplierItem: case EnumIncomingDataType.SupplierItem:
await incomingToWms.HandleSupplierItemsAsync(workerContext).ConfigureAwait(false); //await incomingToWms.HandleSupplierItemsAsync(workerContext).ConfigureAwait(false);
break; break;
case EnumIncomingDataType.ItemPack: case EnumIncomingDataType.ItemPack:
await incomingToWms.HandleItemPacksAsync(workerContext).ConfigureAwait(false); //await incomingToWms.HandleItemPacksAsync(workerContext).ConfigureAwait(false);
break; break;
case EnumIncomingDataType.Customer: case EnumIncomingDataType.Customer:
await incomingToWms.HandleCustomersAsync(workerContext).ConfigureAwait(false); //await incomingToWms.HandleCustomersAsync(workerContext).ConfigureAwait(false);
break; break;
case EnumIncomingDataType.CustomerItem: case EnumIncomingDataType.CustomerItem:
await incomingToWms.HandleCustomerItemsAsync(workerContext).ConfigureAwait(false); //await incomingToWms.HandleCustomerItemsAsync(workerContext).ConfigureAwait(false);
break; break;
case EnumIncomingDataType.InterfaceCalendar: case EnumIncomingDataType.InterfaceCalendar:
await incomingToWms.HandleInterfaceCalendarsAsync(workerContext).ConfigureAwait(false); //await incomingToWms.HandleInterfaceCalendarsAsync(workerContext).ConfigureAwait(false);
break; break;
case EnumIncomingDataType.PurchaseOrder: case EnumIncomingDataType.PurchaseOrder:
await incomingToWms.HandlePurchaseOrdersAsync(workerContext).ConfigureAwait(false); //await incomingToWms.HandlePurchaseOrdersAsync(workerContext).ConfigureAwait(false);
break; break;
case EnumIncomingDataType.SaleOrder: case EnumIncomingDataType.SaleOrder:
await incomingToWms.HandleSaleOrdersAsync(workerContext).ConfigureAwait(false); //await incomingToWms.HandleSaleOrdersAsync(workerContext).ConfigureAwait(false);
break; break;
case EnumIncomingDataType.SupplierAsn: case EnumIncomingDataType.SupplierAsn:
await incomingToWms.HandleAsnsAsync(workerContext).ConfigureAwait(false); //await incomingToWms.HandleAsnsAsync(workerContext).ConfigureAwait(false);
break; break;
case EnumIncomingDataType.ProductReceipt: case EnumIncomingDataType.ProductReceipt:
await incomingToWms.HandleProductReceiptsAsync(workerContext).ConfigureAwait(false); //await incomingToWms.HandleProductReceiptsAsync(workerContext).ConfigureAwait(false);
break; break;
case EnumIncomingDataType.MaterialRequest: case EnumIncomingDataType.MaterialRequest:
await incomingToWms.HandleMaterialRequestsAsync(workerContext).ConfigureAwait(false); await incomingToWms.HandleMaterialRequestsAsync(workerContext).ConfigureAwait(false);
break; break;
case EnumIncomingDataType.Scrap: case EnumIncomingDataType.Scrap:
await incomingToWms.HandleScrapsAsync(workerContext).ConfigureAwait(false); //await incomingToWms.HandleScrapsAsync(workerContext).ConfigureAwait(false);
break; break;
case EnumIncomingDataType.IssueConfirm: case EnumIncomingDataType.IssueConfirm:
await incomingToWms.HandleIssueNoteConfirmAsync(workerContext).ConfigureAwait(false); //await incomingToWms.HandleIssueNoteConfirmAsync(workerContext).ConfigureAwait(false);
break; break;
case EnumIncomingDataType.PurchaseLabel: case EnumIncomingDataType.PurchaseLabel:
await incomingToWms.HandleInventoryLabelsAsync(workerContext).ConfigureAwait(false); //await incomingToWms.HandleInventoryLabelsAsync(workerContext).ConfigureAwait(false);
break; break;
case EnumIncomingDataType.BackFlush: case EnumIncomingDataType.BackFlush:
await incomingToWms.HandleBackFlushsAsync(workerContext).ConfigureAwait(false); await incomingToWms.HandleBackFlushsAsync(workerContext).ConfigureAwait(false);

1
be/DataExchange/src/Win_in.Sfs.Wms.DataExchange.Domain.Shared/Enums/EnumOutgoingDataType.cs

@ -30,6 +30,7 @@ public enum EnumOutgoingDataType
RecycledMaterialReceipt = 22, RecycledMaterialReceipt = 22,
Scrap = 23, Scrap = 23,
ProductRecycle = 24, ProductRecycle = 24,
Item_Transform = 25
} }
public enum EnumExchangeTableType public enum EnumExchangeTableType
{ {

32
be/Hosts/Win_in.Sfs.Wms.Dashboard.Host/Controllers/AsnTimeWindowController.cs

@ -8,6 +8,7 @@ using Win_in.Sfs.Wms.Store.Application.Contracts;
namespace Win_in.Sfs.Wms.Dashboard.Host.Controllers; namespace Win_in.Sfs.Wms.Dashboard.Host.Controllers;
using System.Diagnostics.Metrics;
using System.Linq; using System.Linq;
using Win_in.Sfs.Basedata.Application.Contracts; using Win_in.Sfs.Basedata.Application.Contracts;
@ -29,28 +30,28 @@ public class AsnTimeWindowController : AbpController
[HttpGet("asn-time-window")] [HttpGet("asn-time-window")]
public virtual async Task<List<AsnTimeWindowDashboardDto>> GetAsnTimeWindowsAsync() public virtual async Task<List<AsnTimeWindowDashboardDto>> GetAsnTimeWindowsAsync()
{ {
return await GetAsnTimeWindowDashboardsAsync().ConfigureAwait(false); return await GetAsnTimeWindowDashboardsAsync();
} }
private async Task<List<AsnTimeWindowDashboardDto>> GetAsnTimeWindowDashboardsAsync() private async Task<List<AsnTimeWindowDashboardDto>> GetAsnTimeWindowDashboardsAsync()
{ {
var supplierAsns = await GetSupplierAsnsAsync().ConfigureAwait(false); var supplierAsns = await this.GetSupplierAsnsAsync();
var supplierCodes = supplierAsns.Select(t => t.SupplierCode).Distinct(); var supplierCodes = supplierAsns.Select(t => t.SupplierCode).Distinct();
var suppliers = await GetSuppliersAsync(supplierCodes).ConfigureAwait(false); var suppliers = await GetSuppliersAsync(supplierCodes);
var asnNumbers = supplierAsns.Select(t => t.Number); var asnNumbers = supplierAsns.Select(t => t.Number);
var purchaseReceiptNotes = await GetPurchaseReceiptNotesAsync(asnNumbers).ConfigureAwait(false); var purchaseReceiptNotes = await GetPurchaseReceiptNotesAsync(asnNumbers);
return ConvertToAsnTimeWindowDashboards( return this.ConvertToAsnTimeWindowDashboards(
supplierAsns, supplierAsns,
suppliers, suppliers,
purchaseReceiptNotes); purchaseReceiptNotes);
} }
private static List<AsnTimeWindowDashboardDto> ConvertToAsnTimeWindowDashboards( private List<AsnTimeWindowDashboardDto> ConvertToAsnTimeWindowDashboards(
List<SupplierAsnDTO> supplierAsns, List<SupplierAsnDTO> supplierAsns,
List<SupplierDTO> suppliers, List<SupplierDTO> suppliers,
List<PurchaseReceiptNoteDTO> purchaseReceiptNotes) List<PurchaseReceiptNoteDTO> purchaseReceiptNotes)
@ -70,16 +71,12 @@ public class AsnTimeWindowController : AbpController
var supplier = suppliers.FirstOrDefault(t => t.Code == supplierAsn.SupplierCode); var supplier = suppliers.FirstOrDefault(t => t.Code == supplierAsn.SupplierCode);
if (supplier == null) if (supplier == null)
{
continue; continue;
}
supplierShortName = supplier.ShortName; supplierShortName = supplier.ShortName;
if (dtos.Exists(t => t.TimeSpan == timeSpan && t.SupplierShortName == supplierShortName)) if (dtos.Exists(t => t.TimeSpan == timeSpan && t.SupplierShortName == supplierShortName))
{
continue; continue;
}
var purchaseReceiptNote = var purchaseReceiptNote =
purchaseReceiptNotes.FirstOrDefault(t => t.AsnNumber == supplierAsn.Number); purchaseReceiptNotes.FirstOrDefault(t => t.AsnNumber == supplierAsn.Number);
@ -111,17 +108,26 @@ public class AsnTimeWindowController : AbpController
endTime.AddDays(-1); endTime.AddDays(-1);
} }
return await _supplierAsnApp.GetByStartTimeEndTimeAsync(startTime, endTime).ConfigureAwait(false); return await this._supplierAsnApp.GetByStartTimeEndTimeAsync(startTime, endTime);
} }
private async Task<List<SupplierDTO>> GetSuppliersAsync(IEnumerable<string> codes) private async Task<List<SupplierDTO>> GetSuppliersAsync(IEnumerable<string> codes)
{ {
return await _supplierApp.GetByCodesAsync(codes).ConfigureAwait(false); return await this._supplierApp.GetByCodesAsync(codes);
} }
private async Task<List<PurchaseReceiptNoteDTO>> GetPurchaseReceiptNotesAsync(IEnumerable<string> asnNumbers) private async Task<List<PurchaseReceiptNoteDTO>> GetPurchaseReceiptNotesAsync(IEnumerable<string> asnNumbers)
{ {
return await _purchaseReceiptNoteApp.GetListByAsnNumbers(asnNumbers).ConfigureAwait(false); return await this._purchaseReceiptNoteApp.GetListByAsnNumbers(asnNumbers);
} }
/// <summary>
///
/// </summary>
/// <returns></returns>
[HttpGet("get-server-date-time")]
public virtual async Task<string> GetServerDate()
{
return DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
}
} }

199
be/Hosts/Win_in.Sfs.Wms.Dashboard.Host/Controllers/MaterialRequestController.cs

@ -2,151 +2,156 @@ using System.Collections.Generic;
using System.Threading.Tasks; using System.Threading.Tasks;
using Microsoft.AspNetCore.Mvc; using Microsoft.AspNetCore.Mvc;
using Volo.Abp.AspNetCore.Mvc; using Volo.Abp.AspNetCore.Mvc;
using Win_in.Sfs.Label.Application.Contracts;
using Win_in.Sfs.Wms.Dashboard.Host.Models; using Win_in.Sfs.Wms.Dashboard.Host.Models;
namespace Win_in.Sfs.Wms.Dashboard.Host.Controllers; namespace Win_in.Sfs.Wms.Dashboard.Host.Controllers
{
using System.Linq; using System.Linq;
using NUglify.Helpers;
using Win_in.Sfs.Shared.Domain.Shared; using NUglify.Helpers;
using Win_in.Sfs.Wms.Store.Application.Contracts;
[ApiController] using Win_in.Sfs.Shared.Domain.Shared;
[Route($"{PdaHostConst.ROOT_ROUTE}material-request")] using Win_in.Sfs.Wms.Inventory.Application.Contracts;
using Win_in.Sfs.Wms.Store.Application.Contracts;
using static IdentityServer4.Models.IdentityResources;
public class MaterialRequestController : AbpController [ApiController]
{ [Route($"{PdaHostConst.ROOT_ROUTE}material-request")]
private readonly IMaterialRequestAppService _materialRequestApp;
private readonly IIssueNoteAppService _issueNoteApp; public class MaterialRequestController : AbpController
public MaterialRequestController(IMaterialRequestAppService materialRequestApp, IIssueNoteAppService issueNoteApp)
{ {
_materialRequestApp = materialRequestApp; private readonly IMaterialRequestAppService _materialRequestApp;
_issueNoteApp = issueNoteApp;
}
[HttpGet("un-handled-order-sum")] private readonly IIssueNoteAppService _issueNoteApp;
public virtual async Task<MaterialRequestUnHandledOrderSumDto> GetUnHandledOrderSumAsync() public MaterialRequestController(IMaterialRequestAppService materialRequestApp, IIssueNoteAppService issueNoteApp)
{ {
var dto = new MaterialRequestUnHandledOrderSumDto(); _materialRequestApp = materialRequestApp;
_issueNoteApp = issueNoteApp;
}
var list = await GetMaterialRequestAsync().ConfigureAwait(false); [HttpGet("un-handled-order-sum")]
public virtual async Task<MaterialRequestUnHandledOrderSumDto> GetUnHandledOrderSumAsync()
{
var dto = new MaterialRequestUnHandledOrderSumDto();
dto.Sum = list.Where(t => t.RequestStatus == EnumRequestStatus.New).Count(); var list = await GetMaterialRequestAsync();
return dto; dto.Sum = list.Where(t => t.RequestStatus == EnumRequestStatus.New).Count();
}
[HttpGet("un-issued-item-qty-sum")] return dto;
public virtual async Task<MaterialRequestUnIssuedItemQtySumDto> GetUnIssuedItemQtySumAsync() }
{
var dto = new MaterialRequestUnIssuedItemQtySumDto();
var list = await GetMaterialRequestAsync().ConfigureAwait(false); [HttpGet("un-issued-item-qty-sum")]
public virtual async Task<MaterialRequestUnIssuedItemQtySumDto> GetUnIssuedItemQtySumAsync()
{
var dto = new MaterialRequestUnIssuedItemQtySumDto();
dto.Sum = list.Where(t => t.RequestStatus != EnumRequestStatus.New) var list = await GetMaterialRequestAsync();
.Sum(t => t.Details.Sum(t1 => t1.Qty - t1.IssuedQty));
return dto; dto.Sum = list.Where(t => t.RequestStatus != EnumRequestStatus.New)
} .Sum(t => t.Details.Sum(t1 => t1.Qty - t1.IssuedQty));
[HttpGet("un-received-item-qty-by-item-list")] return dto;
public virtual async Task<List<MaterialRequestUnReceivedItemQtyByItemDto>> }
GetUnIssuedItemQtySumByItemListAsync()
{
var dtos = new List<MaterialRequestUnReceivedItemQtyByItemDto>();
var list = await GetMaterialRequestAsync().ConfigureAwait(false); [HttpGet("un-received-item-qty-by-item-list")]
public virtual async Task<List<MaterialRequestUnReceivedItemQtyByItemDto>>
GetUnIssuedItemQtySumByItemListAsync()
{
var dtos = new List<MaterialRequestUnReceivedItemQtyByItemDto>();
var list = await GetMaterialRequestAsync();
var details = new List<MaterialRequestDetailDTO>(); var details = new List<MaterialRequestDetailDTO>();
list.Where(t => t.RequestStatus != EnumRequestStatus.New).ForEach( list.Where(t => t.RequestStatus != EnumRequestStatus.New).ForEach(
item => item =>
{ {
item.Details.ForEach( item.Details.ForEach(
detail => detail =>
{
if (detail.IssuedQty - detail.ReceivedQty > 0)
{ {
if (detail.IssuedQty - detail.ReceivedQty > 0) details.Add(detail);
{ }
details.Add(detail); });
}
});
}); });
dtos = details.GroupBy(t => t.ItemCode).Select( dtos = details.GroupBy(t => t.ItemCode).Select(
item => new MaterialRequestUnReceivedItemQtyByItemDto() item => new MaterialRequestUnReceivedItemQtyByItemDto()
{ {
ItemCode = item.Key, ItemCode = item.Key,
Sum = item.Sum(t => t.IssuedQty - t.ReceivedQty) Sum = item.Sum(t => t.IssuedQty - t.ReceivedQty)
}).ToList(); }).ToList();
return dtos; return dtos;
} }
[HttpGet("item-qty-by-received-status-list")] [HttpGet("item-qty-by-received-status-list")]
public virtual async Task<List<MaterialRequestItemQtyByReceivedStatusDto>> GetItemQtyByReceivedStatusListAsync() public virtual async Task<List<MaterialRequestItemQtyByReceivedStatusDto>> GetItemQtyByReceivedStatusListAsync()
{ {
var dtos = new List<MaterialRequestItemQtyByReceivedStatusDto>(); var dtos = new List<MaterialRequestItemQtyByReceivedStatusDto>();
var ToBeIssuedQty = 0.0M; var ToBeIssuedQty = 0.0M;
var ToBeReceivedQty = 0.0M; var ToBeReceivedQty = 0.0M;
var Received = 0.0M; var Received = 0.0M;
var list = await GetMaterialRequestAsync().ConfigureAwait(false); var list = await GetMaterialRequestAsync();
list.ForEach( list.ForEach(
item => item =>
{ {
ToBeIssuedQty += item.Details.Sum(t => t.ToBeIssuedQty); ToBeIssuedQty += item.Details.Sum(t => t.ToBeIssuedQty);
ToBeReceivedQty += item.Details.Sum(t => t.ToBeReceivedQty); ToBeReceivedQty += item.Details.Sum(t => t.ToBeReceivedQty);
Received += item.Details.Sum(t => t.ReceivedQty); Received += item.Details.Sum(t => t.ReceivedQty);
}); });
dtos.Add(new MaterialRequestItemQtyByReceivedStatusDto() { ReceivedStatus = "请求未发", Sum = ToBeIssuedQty });
dtos.Add(new MaterialRequestItemQtyByReceivedStatusDto() { ReceivedStatus = "已发未收", Sum = ToBeReceivedQty });
dtos.Add(new MaterialRequestItemQtyByReceivedStatusDto() { ReceivedStatus = "请求已收", Sum = Received });
return dtos;
}
[HttpGet("un-received-item-list")] dtos.Add(new MaterialRequestItemQtyByReceivedStatusDto() { ReceivedStatus = "请求未发", Sum = ToBeIssuedQty });
public virtual async Task<List<MaterialRequestUnReceivedItemDto>> GetUnReceivedItemListAsync() dtos.Add(new MaterialRequestItemQtyByReceivedStatusDto() { ReceivedStatus = "已发未收", Sum = ToBeReceivedQty });
{ dtos.Add(new MaterialRequestItemQtyByReceivedStatusDto() { ReceivedStatus = "请求已收", Sum = Received });
var dtos = new List<MaterialRequestUnReceivedItemDto>();
var notes = await GetIssueNotesAsync().ConfigureAwait(false); return dtos;
}
foreach (var note in notes) [HttpGet("un-received-item-list")]
public virtual async Task<List<MaterialRequestUnReceivedItemDto>> GetUnReceivedItemListAsync()
{ {
foreach (var noteDetail in note.Details) var dtos = new List<MaterialRequestUnReceivedItemDto>();
var notes = await this.GetIssueNotesAsync();
foreach (var note in notes)
{ {
var dto = new MaterialRequestUnReceivedItemDto(); foreach (var noteDetail in note.Details)
{
var dto = new MaterialRequestUnReceivedItemDto();
dto.Number = note.RequestNumber; dto.Number = note.RequestNumber;
dto.ItemCode = noteDetail.ItemCode; dto.ItemCode = noteDetail.ItemCode;
dto.ItemDesc1 = noteDetail.ItemDesc1; dto.ItemDesc1 = noteDetail.ItemDesc1;
dto.PackingCode = noteDetail.FromPackingCode; dto.PackingCode = noteDetail.FromPackingCode;
dto.IssuedQty = noteDetail.Qty; dto.IssuedQty = noteDetail.Qty;
dto.IssuedTime = note.ActiveDate; dto.IssuedTime = note.ActiveDate;
dtos.Add(dto); dtos.Add(dto);
}
} }
}
return dtos; return dtos;
} }
private async Task<List<IssueNoteDTO>> GetIssueNotesAsync() private async Task<List<IssueNoteDTO>> GetIssueNotesAsync()
{ {
return await _issueNoteApp.GetListUnConfirmedByTypeAsync(EnumTransSubType.Issue_WIP.ToString()).ConfigureAwait(false); return await this._issueNoteApp.GetListUnConfirmedByTypeAsync(EnumTransSubType.Issue_WIP.ToString());
} }
private async Task<List<MaterialRequestDTO>> GetMaterialRequestAsync() private async Task<List<MaterialRequestDTO>> GetMaterialRequestAsync()
{ {
return await _materialRequestApp.GetListByTypeAsync(EnumTransSubType.Issue_WIP.ToString()).ConfigureAwait(false); return await this._materialRequestApp.GetListByTypeAsync(EnumTransSubType.Issue_WIP.ToString());
}
} }
} }

262
be/Hosts/Win_in.Sfs.Wms.Dashboard.Host/Controllers/PlanAndActualController.cs

@ -1,174 +1,194 @@
using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks; using System.Threading.Tasks;
using Microsoft.AspNetCore.Mvc; using Microsoft.AspNetCore.Mvc;
using Serilog;
using Volo.Abp.AspNetCore.Mvc; using Volo.Abp.AspNetCore.Mvc;
using Win_in.Sfs.Basedata.Application.Contracts;
using Win_in.Sfs.Wms.Dashboard.Host.Models; using Win_in.Sfs.Wms.Dashboard.Host.Models;
using System;
using System.Linq;
using Win_in.Sfs.Basedata.Application.Contracts;
using Win_in.Sfs.Shared.Domain.Shared;
using Win_in.Sfs.Wms.Store.Application.Contracts; using Win_in.Sfs.Wms.Store.Application.Contracts;
namespace Win_in.Sfs.Wms.Dashboard.Host.Controllers; namespace Win_in.Sfs.Wms.Dashboard.Host.Controllers
[ApiController]
[Route($"{PdaHostConst.ROOT_ROUTE}plan-and-actual")]
public class PlanAndActualController : AbpController
{ {
private readonly ISupplierAsnAppService _supplierAsnApp;
private readonly IPurchaseReceiptNoteAppService _purchaseReceiptNoteApp;
private readonly IPutawayNoteAppService _putawayNoteApp;
private readonly ISupplierAppService _supplierApp;
private readonly IItemSafetyStockAppService _itemSafetyStockApp;
public PlanAndActualController(ISupplierAsnAppService supplierAsnApp, IPurchaseReceiptNoteAppService purchaseReceiptNoteApp, IPutawayNoteAppService putawayNoteApp, ISupplierAppService supplierApp, IItemSafetyStockAppService itemSafetyStockApp) [ApiController]
{ [Route($"{PdaHostConst.ROOT_ROUTE}plan-and-actual")]
_supplierAsnApp = supplierAsnApp;
_purchaseReceiptNoteApp = purchaseReceiptNoteApp;
_putawayNoteApp = putawayNoteApp;
_supplierApp = supplierApp;
_itemSafetyStockApp = itemSafetyStockApp;
}
[HttpGet("plan-actual-list")] public class PlanAndActualController : AbpController
public virtual async Task<List<PlanAndActualDashboardDto>> GetPlanAndActualListAsync()
{ {
return await GetPlanAndActualDashboardsAsync().ConfigureAwait(false); private readonly ISupplierAsnAppService _supplierAsnApp;
} private readonly IPurchaseReceiptNoteAppService _purchaseReceiptNoteApp;
private readonly IPutawayNoteAppService _putawayNoteApp;
private readonly ISupplierAppService _supplierApp;
private readonly IItemSafetyStockAppService _itemSafetyStockApp;
private readonly IPurchaseOrderAppService _purchaseOrderApp;
private readonly IPurchaseReceiptJobAppService _purchaseReceiptJobApp;
public PlanAndActualController(ISupplierAsnAppService supplierAsnApp, IPurchaseReceiptNoteAppService purchaseReceiptNoteApp, IPutawayNoteAppService putawayNoteApp, ISupplierAppService supplierApp, IItemSafetyStockAppService itemSafetyStockApp, IPurchaseOrderAppService purchaseOrderApp, IPurchaseReceiptJobAppService purchaseReceiptJobApp)
{
_supplierAsnApp = supplierAsnApp;
_purchaseReceiptNoteApp = purchaseReceiptNoteApp;
_putawayNoteApp = putawayNoteApp;
_supplierApp = supplierApp;
_itemSafetyStockApp = itemSafetyStockApp;
_purchaseOrderApp = purchaseOrderApp;
_purchaseReceiptJobApp = purchaseReceiptJobApp;
}
private async Task<List<PlanAndActualDashboardDto>> GetPlanAndActualDashboardsAsync()
{
var supplierAsns = await GetSupplierAsnsAsync().ConfigureAwait(false);
var supplierCodes = supplierAsns.Select(t => t.SupplierCode).Distinct(); [HttpGet("plan-actual-list")]
public virtual async Task<List<PlanAndActualDashboardDto>> GetPlanAndActualListAsync()
{
return await GetPlanAndActualDashboardsAsync();
}
var suppliers = await GetSuppliersAsync(supplierCodes).ConfigureAwait(false); private async Task<List<PlanAndActualDashboardDto>> GetPlanAndActualDashboardsAsync()
{
var supplierAsns = await this.GetSupplierAsnsAsync();
var asnNumbers = supplierAsns.Select(t => t.Number); var supplierCodes = supplierAsns.Select(t => t.SupplierCode).Distinct();
var purchaseReceiptNotes = await GetPurchaseReceiptNotesAsync(asnNumbers).ConfigureAwait(false); var suppliers = await GetSuppliersAsync(supplierCodes);
var putawayNotes = await GetPutawayNotesAsync(asnNumbers).ConfigureAwait(false); var asnNumbers = supplierAsns.Select(t => t.Number);
var itemSafetyStorks = await GetItemSafetyStocksAsync(supplierAsns).ConfigureAwait(false); var purchaseReceiptNotes = await GetPurchaseReceiptNotesAsync(asnNumbers);
return ConvertToPlanAndActualDashboards( var putawayNotes = await this.GetPutawayNotesAsync(asnNumbers);
supplierAsns,
suppliers,
purchaseReceiptNotes,
putawayNotes,
itemSafetyStorks);
}
private static List<PlanAndActualDashboardDto> ConvertToPlanAndActualDashboards(List<SupplierAsnDTO> supplierAsns, List<SupplierDTO> suppliers, List<PurchaseReceiptNoteDTO> purchaseReceiptNotes, List<PutawayNoteDTO> putawayNotes, List<ItemSafetyStockDTO> itemSafetyStorks) var itemSafetyStorks = await this.GetItemSafetyStocksAsync(supplierAsns);
{
var dtos = new List<PlanAndActualDashboardDto>(); return await this.ConvertToPlanAndActualDashboards(
supplierAsns,
suppliers,
purchaseReceiptNotes,
putawayNotes,
itemSafetyStorks);
}
foreach (var supplierAsn in supplierAsns) private async Task<List<PlanAndActualDashboardDto>> ConvertToPlanAndActualDashboards(List<SupplierAsnDTO> supplierAsns, List<SupplierDTO> suppliers, List<PurchaseReceiptNoteDTO> purchaseReceiptNotes, List<PutawayNoteDTO> putawayNotes, List<ItemSafetyStockDTO> itemSafetyStorks)
{ {
var purchaseReceipts = purchaseReceiptNotes.FindAll(t => t.AsnNumber == supplierAsn.Number); var dtos = new List<PlanAndActualDashboardDto>();
var putaways = putawayNotes.FindAll(t => t.AsnNumber == supplierAsn.Number);
var supplierShortName = string.Empty; foreach (var supplierAsn in supplierAsns)
{
var purchaseReceipts = purchaseReceiptNotes.FindAll(t => t.AsnNumber == supplierAsn.Number);
var putaways = putawayNotes.FindAll(t => t.AsnNumber == supplierAsn.Number);
var supplier = suppliers.FirstOrDefault(t => t.Code == supplierAsn.SupplierCode); var supplierShortName = string.Empty;
if (supplier == null) var supplier = suppliers.FirstOrDefault(t => t.Code == supplierAsn.SupplierCode);
{
continue;
}
supplierShortName = supplier.ShortName; if (supplier == null)
continue;
foreach (var detail in supplierAsn.Details) supplierShortName = supplier.ShortName;
{
var dto = dtos.FirstOrDefault(t => t.SupplierShortName == supplierShortName && t.ItemCode == detail.ItemCode);
if (dto == null) foreach (var detail in supplierAsn.Details)
{ {
dto = new PlanAndActualDashboardDto(); var dto = dtos.FirstOrDefault(t => t.SupplierShortName == supplierShortName && t.ItemCode == detail.ItemCode);
dto.SupplierShortName = supplierShortName; if (dto == null)
dto.ItemCode = detail.ItemCode; {
dto.ItemDesc1 = detail.ItemDesc1; dto = new PlanAndActualDashboardDto();
dto.ItemName = detail.ItemName;
var itemSafetyStork = itemSafetyStorks.FirstOrDefault(t => t.ItemCode == detail.ItemCode); dto.SupplierShortName = supplierShortName;
dto.ItemCode = detail.ItemCode;
dto.ItemDesc1 = detail.ItemDesc1;
dto.ItemName = detail.ItemName;
if (itemSafetyStork != null) var itemSafetyStork = itemSafetyStorks.FirstOrDefault(t => t.ItemCode == detail.ItemCode);
{
dto.MaxQty = itemSafetyStork.MaxStock;
dto.MinQty = itemSafetyStork.MinStock;
}
dto.ReceiptNoteCount = CountReceiptNoteCount(purchaseReceipts, detail.ItemCode, detail.Lot); if (itemSafetyStork != null)
dto.ReceiptQty = CountReceiptQty(purchaseReceipts, detail.ItemCode, detail.Lot); {
dto.PutawayQty = CountPutawayQty(putawayNotes, detail.ItemCode, detail.Lot); dto.MaxQty = itemSafetyStork.MaxStock;
dto.MinQty = itemSafetyStork.MinStock;
}
dtos.Add(dto); var purchaseOrderDtos = await _purchaseOrderApp.GetListBySupplierCodeAsync(supplierAsn.SupplierCode, detail.ItemCode);
} var supllierAsn = await _supplierAsnApp.GetForTodayListAsync();
var poNumberList = supllierAsn.Select(p => p.PoNumber).ToList();
dto.SupplierAsnCount += 1; purchaseOrderDtos = purchaseOrderDtos.Where(p => poNumberList.Contains(p.Number)).ToList();
dto.PlanArriveQty += detail.Qty;
}
}
return dtos.OrderBy(t => t.SupplierShortName).ToList(); decimal allPutawayQty = 0;
} decimal allReceiptQty = 0;
decimal allPlanArriveQty = 0;
private static decimal CountPutawayQty(List<PutawayNoteDTO> putawayNotes, string itemCode, string lot) foreach (var purchaseOrderDTO in purchaseOrderDtos)
{ {
return putawayNotes.Sum(t => t.Details.Where(t => t.ItemCode == itemCode && t.ToLot == lot).Sum(t => t.Qty)); allPutawayQty += purchaseOrderDTO.Details.Where(p => p.ItemCode == detail.ItemCode).Sum(p => p.PutAwayQty);
} allReceiptQty += purchaseOrderDTO.Details.Where(p => p.ItemCode == detail.ItemCode).Sum(p => p.ReceivedQty);
allPlanArriveQty += purchaseOrderDTO.Details.Where(p => p.ItemCode == detail.ItemCode).Sum(p => p.ShippedQty);
}
private static decimal CountReceiptQty(List<PurchaseReceiptNoteDTO> purchaseReceipts, string itemCode, string lot) dto.PutawayQty = allPutawayQty;
{ dto.PlanArriveQty = allPlanArriveQty;
return purchaseReceipts.Sum(t => t.Details.Where(t => t.ItemCode == itemCode && t.HandledLot == lot).Sum(t => t.Qty)); dto.ReceiptQty = allReceiptQty;
}
private static int CountReceiptNoteCount(List<PurchaseReceiptNoteDTO> purchaseReceipts, string itemCode, string lot) dtos.Add(dto);
{ }
return purchaseReceipts.Sum(t => t.Details.Count(t => t.ItemCode == itemCode && t.Lot == lot));
}
private async Task<List<SupplierAsnDTO>> GetSupplierAsnsAsync() var purchaseReceiptJobDtos = await _purchaseReceiptJobApp.GetListBySupplierCodeOnTodayAsync(supplierAsn.SupplierCode);
{
var startTime = DateTime.Today.AddHours(DashboardConst.AsnReceiptTimeLimitHour); dto.ReceiptNoteCount = purchaseReceiptJobDtos.Count(p => p.JobStatus == EnumJobStatus.Done);
var endTime = startTime.AddDays(1).AddSeconds(-1); dto.SupplierAsnCount = purchaseReceiptJobDtos.Count();
}
}
return dtos.OrderBy(t => t.SupplierShortName).ToList();
}
if (DateTime.Now.Hour < DashboardConst.AsnReceiptTimeLimitHour) private decimal CountReceiptQty(List<PurchaseReceiptNoteDTO> purchaseReceipts, string itemCode)
{ {
startTime.AddDays(-1); return purchaseReceipts.Sum(t => t.Details.Where(t => t.ItemCode == itemCode).Sum(t => t.Qty));
endTime.AddDays(-1);
} }
return await _supplierAsnApp.GetByStartTimeEndTimeAsync(startTime, endTime).ConfigureAwait(false); private int CountReceiptNoteCount(List<PurchaseReceiptNoteDTO> purchaseReceipts, string itemCode)
} {
return purchaseReceipts.Sum(t => t.Details.Count(t => t.ItemCode == itemCode));
}
private async Task<List<SupplierDTO>> GetSuppliersAsync(IEnumerable<string> codes) private async Task<List<SupplierAsnDTO>> GetSupplierAsnsAsync()
{ {
return await _supplierApp.GetByCodesAsync(codes).ConfigureAwait(false); var startTime = DateTime.Today.AddHours(DashboardConst.AsnReceiptTimeLimitHour);
}
private async Task<List<PurchaseReceiptNoteDTO>> GetPurchaseReceiptNotesAsync(IEnumerable<string> asnNumbers) var endTime = startTime.AddDays(1).AddSeconds(-1);
{
return await _purchaseReceiptNoteApp.GetListByAsnNumbers(asnNumbers).ConfigureAwait(false);
}
private async Task<List<PutawayNoteDTO>> GetPutawayNotesAsync(IEnumerable<string> asnNumbers) if (DateTime.Now.Hour < DashboardConst.AsnReceiptTimeLimitHour)
{ {
return await _putawayNoteApp.GetListByAsnNumbers(asnNumbers).ConfigureAwait(false); startTime.AddDays(-1);
} endTime.AddDays(-1);
private async Task<List<ItemSafetyStockDTO>> GetItemSafetyStocksAsync(List<SupplierAsnDTO> supplierAsns) }
{
var itemCodes = new List<string>();
supplierAsns.ForEach(t => { itemCodes.AddRange(t.Details.Select(t => t.ItemCode).ToList()); }); return await this._supplierAsnApp.GetByStartTimeEndTimeAsync(startTime, endTime);
}
var itemSafetyStorks = await _itemSafetyStockApp.GetByItemCodesAsync(itemCodes).ConfigureAwait(false); private async Task<List<SupplierDTO>> GetSuppliersAsync(IEnumerable<string> codes)
return itemSafetyStorks; {
return await this._supplierApp.GetByCodesAsync(codes);
}
private async Task<List<PurchaseReceiptNoteDTO>> GetPurchaseReceiptNotesAsync(IEnumerable<string> asnNumbers)
{
return await this._purchaseReceiptNoteApp.GetListByAsnNumbers(asnNumbers);
}
private async Task<List<PutawayNoteDTO>> GetPutawayNotesAsync(IEnumerable<string> asnNumbers)
{
return await this._putawayNoteApp.GetListByAsnNumbers(asnNumbers);
}
private async Task<List<ItemSafetyStockDTO>> GetItemSafetyStocksAsync(List<SupplierAsnDTO> supplierAsns)
{
var itemCodes = new List<string>();
supplierAsns.ForEach(t => { itemCodes.AddRange(t.Details.Select(t => t.ItemCode).ToList()); });
var itemSafetyStorks = await this._itemSafetyStockApp.GetByItemCodesAsync(itemCodes);
return itemSafetyStorks;
}
} }
} }

352
be/Hosts/Win_in.Sfs.Wms.Dashboard.Host/Controllers/PurchaseReceiptController.cs

@ -5,233 +5,255 @@ using Volo.Abp.AspNetCore.Mvc;
using Win_in.Sfs.Basedata.Application.Contracts; using Win_in.Sfs.Basedata.Application.Contracts;
using Win_in.Sfs.Wms.Dashboard.Host.Models; using Win_in.Sfs.Wms.Dashboard.Host.Models;
namespace Win_in.Sfs.Wms.Dashboard.Host.Controllers; namespace Win_in.Sfs.Wms.Dashboard.Host.Controllers
{
using System.Linq; using System;
using System.Linq;
using Win_in.Sfs.Label.Application.Contracts; using Volo.Abp;
using Win_in.Sfs.Shared.Domain.Shared;
using Win_in.Sfs.Wms.Inventory.Application.Contracts;
using Win_in.Sfs.Wms.Store.Application.Contracts;
[ApiController] using Win_in.Sfs.Label.Application.Contracts;
[Route($"{PdaHostConst.ROOT_ROUTE}purchase-receipt")] using Win_in.Sfs.Label.Domain;
using Win_in.Sfs.Shared.Domain.Shared;
using Win_in.Sfs.Wms.Inventory.Application.Contracts;
using Win_in.Sfs.Wms.Store.Application.Contracts;
public class PurchaseReceiptController : AbpController [ApiController]
{ [Route($"{PdaHostConst.ROOT_ROUTE}purchase-receipt")]
private readonly IBalanceAppService _balanceApp;
private readonly IInventoryLabelAppService _labelService;
private readonly ISupplierAppService _supplierApp;
private readonly ISupplierAsnAppService _supplierAsnApp;
public PurchaseReceiptController(IBalanceAppService balanceApp, IInventoryLabelAppService labelService, ISupplierAppService supplierApp, ISupplierAsnAppService supplierAsnApp) public class PurchaseReceiptController : AbpController
{ {
this._balanceApp = balanceApp; private readonly IBalanceAppService _balanceApp;
this._labelService = labelService; private readonly IInventoryLabelAppService _labelService;
this._supplierApp = supplierApp; private readonly ISupplierAppService _supplierApp;
this._supplierAsnApp = supplierAsnApp; private readonly ISupplierAsnAppService _supplierAsnApp;
} private readonly IPurchaseReceiptNoteAppService _purchaseReceiptNoteAppService;
private readonly IInspectNoteAppService _inspectNoteAppService;
public PurchaseReceiptController(IBalanceAppService balanceApp, IInventoryLabelAppService labelService, ISupplierAppService supplierApp, ISupplierAsnAppService supplierAsnApp, IPurchaseReceiptNoteAppService purchaseReceiptNoteAppService, IInspectNoteAppService inspectNoteAppService)
{
this._balanceApp = balanceApp;
this._labelService = labelService;
this._supplierApp = supplierApp;
this._supplierAsnApp = supplierAsnApp;
_purchaseReceiptNoteAppService = purchaseReceiptNoteAppService;
_inspectNoteAppService = inspectNoteAppService;
}
[HttpGet("receipt-sum-qty")] /// <summary>
public virtual async Task<PurchaseReceiptSumQtyDashboardDto> GetReceiptSumQtyAsync() /// 未上架数量
{ /// </summary>
var dto = new PurchaseReceiptSumQtyDashboardDto(); /// <returns></returns>
[HttpGet("no-put-away-sum-qty")]
public virtual async Task<PurchaseReceiptSumQtyDashboardDto> GetNoPutAwaySumQtyAsync()
{
var dto = new PurchaseReceiptSumQtyDashboardDto();
var items = await GetPurchaseReceiptItemDashboardAsync().ConfigureAwait(false); var items = await GetPurchaseReceiptItemDashboardAsync();
dto = new PurchaseReceiptSumQtyDashboardDto() { Qty = items.Sum(t => t.Qty) }; dto = new PurchaseReceiptSumQtyDashboardDto() { Qty = items.Sum(t => t.Qty) };
return dto; return dto;
} }
[HttpGet("receipt-count-by-supplier")] /// <summary>
public virtual async Task<List<PurchaseReceiptCountBySupplierDashboardDto>> GetReceiptCountBySupplierQtyAsync() /// 未上架汇总
{ /// </summary>
var items = await GetPurchaseReceiptItemDashboardAsync().ConfigureAwait(false); /// <returns></returns>
[HttpGet("no-put-away-by-supplier")]
public virtual async Task<List<PurchaseReceiptCountBySupplierDashboardDto>> GetNoPutAwayBySupplierAsync()
{
var items = await GetPurchaseReceiptItemDashboardAsync();
var dtos = items.GroupBy(t => t.SupplierShortName) var dtos = items.GroupBy(t => t.SupplierShortName)
.Select( .Select(
t => new PurchaseReceiptCountBySupplierDashboardDto t => new PurchaseReceiptCountBySupplierDashboardDto
{ {
SupplierShortName = t.Key, SupplierShortName = t.Key,
Qty = t.Sum(t1 => t1.Qty) Qty = t.Sum(t1 => t1.Qty)
}).OrderBy(t => t.SupplierShortName).ToList(); }).OrderBy(t => t.SupplierShortName).ToList();
return dtos; return dtos;
} }
[HttpGet("receipt-item-list")] /// <summary>
public virtual async Task<List<PurchaseReceiptItemDashboardDto>> GetReceiptItemListAsync() /// 未上架明细
{ /// </summary>
return await GetPurchaseReceiptItemDashboardAsync().ConfigureAwait(false); /// <returns></returns>
} [HttpGet("no-put-away-item-list")]
public virtual async Task<List<PurchaseReceiptItemDashboardDto>> GetReceiptItemListAsync()
{
return await GetPurchaseReceiptItemDashboardAsync();
}
[HttpGet("un-receipt-sum-qty")] [HttpGet("un-receipt-sum-qty")]
public virtual async Task<PurchaseReceiptSumQtyDashboardDto> GetUnReceiptSumQtyAsync() public virtual async Task<PurchaseReceiptSumQtyDashboardDto> GetUnReceiptSumQtyAsync()
{ {
var dto = new PurchaseReceiptSumQtyDashboardDto(); var dto = new PurchaseReceiptSumQtyDashboardDto();
var items = await GetUnPurchaseReceiptItemDashboardAsync().ConfigureAwait(false); var items = await this.GetUnPurchaseReceiptItemDashboardAsync();
dto = new PurchaseReceiptSumQtyDashboardDto() { Qty = items.Sum(t => t.Qty) }; dto = new PurchaseReceiptSumQtyDashboardDto() { Qty = items.Sum(t => t.Qty) };
return dto; return dto;
} }
[HttpGet("un-receipt-count-by-supplier")] [HttpGet("un-receipt-count-by-supplier")]
public virtual async Task<List<PurchaseReceiptCountBySupplierDashboardDto>> GetUnReceiptCountBySupplierQtyAsync() public virtual async Task<List<PurchaseReceiptCountBySupplierDashboardDto>> GetUnReceiptCountBySupplierQtyAsync()
{ {
var items = await GetUnPurchaseReceiptItemDashboardAsync().ConfigureAwait(false); var items = await GetUnPurchaseReceiptItemDashboardAsync();
var dtos = items.GroupBy(t => t.SupplierShortName) var dtos = items.GroupBy(t => t.SupplierShortName)
.Select( .Select(
t => new PurchaseReceiptCountBySupplierDashboardDto t => new PurchaseReceiptCountBySupplierDashboardDto
{ {
SupplierShortName = t.Key, SupplierShortName = t.Key,
Qty = t.Sum(t1 => t1.Qty) Qty = t.Sum(t1 => t1.Qty)
}).OrderBy(t => t.SupplierShortName).ToList(); }).OrderBy(t => t.SupplierShortName).ToList();
return dtos; return dtos;
} }
[HttpGet("un-receipt-item-list")] [HttpGet("un-receipt-item-list")]
public virtual async Task<List<PurchaseReceiptItemDashboardDto>> GetUnReceiptItemListAsync() public virtual async Task<List<PurchaseReceiptItemDashboardDto>> GetUnReceiptItemListAsync()
{ {
return await GetUnPurchaseReceiptItemDashboardAsync().ConfigureAwait(false); return await this.GetUnPurchaseReceiptItemDashboardAsync();
} }
private async Task<List<PurchaseReceiptItemDashboardDto>> GetPurchaseReceiptItemDashboardAsync() private async Task<List<PurchaseReceiptItemDashboardDto>> GetPurchaseReceiptItemDashboardAsync()
{ {
var balances = await GetBalancesAsync("INSPECT", EnumInventoryStatus.OK).ConfigureAwait(false); var inspectNoteDetailDto = await _inspectNoteAppService.GetInspectNoteDetailByToDayTaskAsync();
var packingCodeList = inspectNoteDetailDto.Where(p => p.Status == EnumInventoryStatus.OK).Select(p => p.PackingCode).ToList();
var balances = await _balanceApp.GetListByPackingCodesAsync(packingCodeList);
balances = balances.Where(p => p.LocationCode == "INSPECT").ToList();
var packingcodes = balances.Select(t => t.PackingCode).Distinct(); //var balances = await GetBalancesAsync("INSPECT", EnumInventoryStatus.OK);
var labels = await GetLabelsAsync(packingcodes).ConfigureAwait(false); var packingcodes = balances.Select(t => t.PackingCode).Distinct();
var supplierCodes = labels.Select(t => t.SupplierCode).Distinct(); var labels = await GetLabelsAsync(packingcodes);
var suppliers = await GetSuppliersAsync(supplierCodes).ConfigureAwait(false); var supplierCodes = labels.Select(t => t.SupplierCode).Distinct();
return ConvertToPurchaseReceiptItemDashboard(balances, labels, suppliers); var suppliers = await GetSuppliersAsync(supplierCodes);
}
private static List<PurchaseReceiptItemDashboardDto> ConvertToPurchaseReceiptItemDashboard( return ConvertToPurchaseReceiptItemDashboard(balances, labels, suppliers);
List<BalanceDTO> balances, }
List<InventoryLabelDto> labels,
List<SupplierDTO> suppliers)
{
var dtos = new List<PurchaseReceiptItemDashboardDto>();
foreach (var balance in balances) private List<PurchaseReceiptItemDashboardDto> ConvertToPurchaseReceiptItemDashboard(
List<BalanceDTO> balances,
List<InventoryLabelDto> labels,
List<SupplierDTO> suppliers)
{ {
var supplierShortName = string.Empty; var dtos = new List<PurchaseReceiptItemDashboardDto>();
var label = labels.FirstOrDefault(t => t.Code == balance.PackingCode); foreach (var balance in balances)
if (label == null)
{ {
continue; var supplierShortName = string.Empty;
}
var supplier = suppliers.FirstOrDefault(t => t != null && t.Code == label.SupplierCode); var label = labels.FirstOrDefault(t => t.Code == balance.PackingCode);
if (supplier == null) if (label == null)
{ continue;
continue;
}
supplierShortName = supplier.ShortName; var supplier = suppliers.FirstOrDefault(t => t != null && t.Code == label.SupplierCode);
var dto = dtos.Find(t => t.SupplierShortName == supplierShortName && t.ItemCode == balance.ItemCode); if (supplier == null)
continue;
if (dto == null) supplierShortName = supplier.ShortName;
{
dto = new PurchaseReceiptItemDashboardDto();
dto.SupplierShortName = supplierShortName; var dto = dtos.Find(t => t.SupplierShortName == supplierShortName && t.ItemCode == balance.ItemCode);
dto.ItemCode = balance.ItemCode;
dto.ItemDesc1 = balance.ItemDesc1;
dto.Qty = 0;
dtos.Add(dto); if (dto == null)
} {
dto = new PurchaseReceiptItemDashboardDto();
dto.Qty += balance.Qty; dto.SupplierShortName = supplierShortName;
} dto.ItemCode = balance.ItemCode;
dto.ItemDesc1 = balance.ItemDesc1;
dto.Qty = 0;
return dtos.OrderBy(t => t.SupplierShortName).ToList(); dtos.Add(dto);
} }
private async Task<List<BalanceDTO>> GetBalancesAsync(string locationCode, EnumInventoryStatus status) dto.Qty += balance.Qty;
{ }
return await _balanceApp.GetListByLocationCodeAndStatusAsync(locationCode, status).ConfigureAwait(false);
}
private async Task<List<InventoryLabelDto>> GetLabelsAsync(IEnumerable<string> codes)
{
return await _labelService.GetByCodesAsync(codes).ConfigureAwait(false);
}
private async Task<List<SupplierDTO>> GetSuppliersAsync(IEnumerable<string> codes)
{
return await _supplierApp.GetByCodesAsync(codes).ConfigureAwait(false);
}
private async Task<List<SupplierAsnDTO>> GetSupplierAsnsAsync() return dtos.OrderBy(t => t.SupplierShortName).ToList();
{ }
return await _supplierAsnApp.GetForTodayUnReceivedListAsync().ConfigureAwait(false);
}
private static List<PurchaseReceiptItemDashboardDto> ConvertToUnPurchaseReceiptItemDashboard( private async Task<List<BalanceDTO>> GetBalancesAsync(string locationCode, EnumInventoryStatus status)
List<SupplierAsnDTO> supplierAsns, {
List<SupplierDTO> suppliers) return await this._balanceApp.GetListByLocationCodeAndStatusAsync(locationCode, status);
{ }
var dtos = new List<PurchaseReceiptItemDashboardDto>(); private async Task<List<InventoryLabelDto>> GetLabelsAsync(IEnumerable<string> codes)
{
return await this._labelService.GetByCodesAsync(codes);
}
private async Task<List<SupplierDTO>> GetSuppliersAsync(IEnumerable<string> codes)
{
return await this._supplierApp.GetByCodesAsync(codes);
}
foreach (var supplierAsn in supplierAsns) private async Task<List<SupplierAsnDTO>> GetSupplierAsnsAsync()
{ {
var supplierShortName = string.Empty; return await this._supplierAsnApp.GetForTodayUnReceivedListAsync();
}
var supplier = suppliers.FirstOrDefault(t => t.Code == supplierAsn.SupplierCode); private List<PurchaseReceiptItemDashboardDto> ConvertToUnPurchaseReceiptItemDashboard(
List<SupplierAsnDTO> supplierAsns,
List<SupplierDTO> suppliers)
{
var dtos = new List<PurchaseReceiptItemDashboardDto>();
if (supplier == null) foreach (var supplierAsn in supplierAsns)
{ {
continue; var supplierShortName = string.Empty;
}
supplierShortName = supplier.ShortName; var supplier = suppliers.FirstOrDefault(t => t.Code == supplierAsn.SupplierCode);
foreach (var detail in supplierAsn.Details) if (supplier == null)
{ continue;
var dto = dtos.Find(t => t.SupplierShortName == supplierShortName && t.ItemCode == detail.ItemCode);
if (dto == null) supplierShortName = supplier.ShortName;
foreach (var detail in supplierAsn.Details)
{ {
dto = new PurchaseReceiptItemDashboardDto(); var dto = dtos.Find(t => t.SupplierShortName == supplierShortName && t.ItemCode == detail.ItemCode);
dto.SupplierShortName = supplierShortName; if (dto == null)
dto.ItemCode = detail.ItemCode; {
dto.ItemDesc1 = detail.ItemDesc1; dto = new PurchaseReceiptItemDashboardDto();
dto.Qty = 0;
dtos.Add(dto); dto.SupplierShortName = supplierShortName;
} dto.ItemCode = detail.ItemCode;
dto.ItemDesc1 = detail.ItemDesc1;
dto.Qty = 0;
dtos.Add(dto);
}
dto.Qty += detail.Qty; dto.Qty += detail.Qty;
}
} }
}
return dtos.OrderBy(t => t.SupplierShortName).ToList(); return dtos.OrderBy(t => t.SupplierShortName).ToList();
} }
private async Task<List<PurchaseReceiptItemDashboardDto>> GetUnPurchaseReceiptItemDashboardAsync() private async Task<List<PurchaseReceiptItemDashboardDto>> GetUnPurchaseReceiptItemDashboardAsync()
{ {
var dtos = new List<PurchaseReceiptItemDashboardDto>(); var dtos = new List<PurchaseReceiptItemDashboardDto>();
var supplierAsns = await GetSupplierAsnsAsync().ConfigureAwait(false); var supplierAsns = await this.GetSupplierAsnsAsync();
var supplierCodes = supplierAsns.Select(t => t.SupplierCode).Distinct(); var supplierCodes = supplierAsns.Select(t => t.SupplierCode).Distinct();
var suppliers = await GetSuppliersAsync(supplierCodes).ConfigureAwait(false); var suppliers = await GetSuppliersAsync(supplierCodes);
return ConvertToUnPurchaseReceiptItemDashboard(supplierAsns, suppliers); return this.ConvertToUnPurchaseReceiptItemDashboard(supplierAsns, suppliers);
}
} }
} }

154
be/Hosts/Wms.Host/Win_in.Sfs.Wms.Store.HttpApi.Host/scripts/db.Microsoft.EntityFrameworkCore.SqlServer.StoreDbContext.sql

@ -1863,6 +1863,52 @@ CREATE TABLE [Store_WarehouseTransferNote] (
) )
CREATE TABLE [Store_WipWarehouseAdjustNote] (
[Id] uniqueidentifier NOT NULL,
[Type] nvarchar(64) NULL,
[RequestNumber] nvarchar(max) NULL,
[JobNumber] nvarchar(64) NULL,
[Confirmed] bit NOT NULL,
[ConfirmTime] datetime2 NULL,
[ExtraProperties] nvarchar(max) NULL,
[ConcurrencyStamp] nvarchar(40) NULL,
[CreationTime] datetime2 NOT NULL,
[CreatorId] uniqueidentifier NULL,
[LastModificationTime] datetime2 NULL,
[LastModifierId] uniqueidentifier NULL,
[TenantId] uniqueidentifier NULL,
[Remark] nvarchar(3072) NULL,
[Worker] nvarchar(max) NULL,
[Number] nvarchar(64) NOT NULL,
[ActiveDate] datetime2 NOT NULL,
CONSTRAINT [PK_Store_WipWarehouseAdjustNote] PRIMARY KEY ([Id])
)
CREATE TABLE [Store_WipWarehouseAdjustRequest] (
[Id] uniqueidentifier NOT NULL,
[Type] nvarchar(64) NULL,
[ExtraProperties] nvarchar(max) NULL,
[ConcurrencyStamp] nvarchar(40) NULL,
[CreationTime] datetime2 NOT NULL,
[CreatorId] uniqueidentifier NULL,
[LastModificationTime] datetime2 NULL,
[LastModifierId] uniqueidentifier NULL,
[TenantId] uniqueidentifier NULL,
[Remark] nvarchar(3072) NULL,
[Worker] nvarchar(max) NULL,
[Number] nvarchar(64) NOT NULL,
[ActiveDate] datetime2 NOT NULL,
[AutoSubmit] bit NOT NULL,
[AutoAgree] bit NOT NULL,
[AutoHandle] bit NOT NULL,
[AutoCompleteJob] bit NOT NULL,
[DirectCreateNote] bit NOT NULL,
[RequestStatus] nvarchar(64) NOT NULL,
CONSTRAINT [PK_Store_WipWarehouseAdjustRequest] PRIMARY KEY ([Id])
)
CREATE TABLE [Store_WorkOrder] ( CREATE TABLE [Store_WorkOrder] (
[Id] uniqueidentifier NOT NULL, [Id] uniqueidentifier NOT NULL,
[WorkOrderId] nvarchar(64) NULL, [WorkOrderId] nvarchar(64) NULL,
@ -3069,6 +3115,7 @@ CREATE TABLE [Store_InspectNoteDetail] (
[Weight] nvarchar(max) NULL, [Weight] nvarchar(max) NULL,
[OtherPropertyJson] nvarchar(max) NULL, [OtherPropertyJson] nvarchar(max) NULL,
[StdPackQty] decimal(18,6) NOT NULL, [StdPackQty] decimal(18,6) NOT NULL,
[InspectDate] datetime2 NOT NULL,
[CreationTime] datetime2 NOT NULL, [CreationTime] datetime2 NOT NULL,
[CreatorId] uniqueidentifier NULL, [CreatorId] uniqueidentifier NULL,
[LastModificationTime] datetime2 NULL, [LastModificationTime] datetime2 NULL,
@ -5068,6 +5115,98 @@ CREATE TABLE [Store_WarehouseTransferNoteDetail] (
) )
CREATE TABLE [Store_WipWarehouseAdjustNoteDetail] (
[Id] uniqueidentifier NOT NULL,
[Reason] nvarchar(64) NULL,
[ReasonCode] nvarchar(max) NULL,
[CreationTime] datetime2 NOT NULL,
[CreatorId] uniqueidentifier NULL,
[LastModificationTime] datetime2 NULL,
[LastModifierId] uniqueidentifier NULL,
[MasterID] uniqueidentifier NOT NULL,
[TenantId] uniqueidentifier NULL,
[Number] nvarchar(64) NOT NULL,
[Remark] nvarchar(3072) NULL,
[ItemName] nvarchar(64) NULL,
[ItemDesc1] nvarchar(64) NULL,
[ItemDesc2] nvarchar(64) NULL,
[ItemCode] nvarchar(64) NOT NULL,
[Uom] nvarchar(64) NOT NULL,
[Qty] decimal(18,6) NOT NULL,
[StdPackQty] decimal(18,6) NOT NULL,
[FromPackingCode] nvarchar(450) NULL,
[ToPackingCode] nvarchar(max) NULL,
[FromContainerCode] nvarchar(max) NULL,
[ToContainerCode] nvarchar(max) NULL,
[FromLot] nvarchar(max) NULL,
[ToLot] nvarchar(max) NULL,
[SupplierBatch] nvarchar(64) NULL,
[ArriveDate] datetime2 NOT NULL,
[ProduceDate] datetime2 NOT NULL,
[ExpireDate] datetime2 NOT NULL,
[FromLocationCode] nvarchar(64) NOT NULL,
[FromLocationArea] nvarchar(64) NULL,
[FromLocationGroup] nvarchar(64) NULL,
[FromLocationErpCode] nvarchar(64) NOT NULL,
[FromWarehouseCode] nvarchar(64) NOT NULL,
[FromStatus] nvarchar(64) NOT NULL,
[ToLocationCode] nvarchar(64) NOT NULL,
[ToLocationArea] nvarchar(64) NULL,
[ToLocationGroup] nvarchar(64) NULL,
[ToLocationErpCode] nvarchar(64) NOT NULL,
[ToWarehouseCode] nvarchar(64) NOT NULL,
[ToStatus] nvarchar(64) NOT NULL,
CONSTRAINT [PK_Store_WipWarehouseAdjustNoteDetail] PRIMARY KEY ([Id]),
CONSTRAINT [FK_Store_WipWarehouseAdjustNoteDetail_Store_WipWarehouseAdjustNote_MasterID] FOREIGN KEY ([MasterID]) REFERENCES [Store_WipWarehouseAdjustNote] ([Id]) ON DELETE CASCADE
)
CREATE TABLE [Store_WipWarehouseAdjustRequestDetail] (
[Id] uniqueidentifier NOT NULL,
[Reason] nvarchar(max) NULL,
[ReasonCode] nvarchar(max) NULL,
[CreationTime] datetime2 NOT NULL,
[CreatorId] uniqueidentifier NULL,
[LastModificationTime] datetime2 NULL,
[LastModifierId] uniqueidentifier NULL,
[MasterID] uniqueidentifier NOT NULL,
[TenantId] uniqueidentifier NULL,
[Number] nvarchar(64) NOT NULL,
[Remark] nvarchar(3072) NULL,
[ItemName] nvarchar(64) NULL,
[ItemDesc1] nvarchar(64) NULL,
[ItemDesc2] nvarchar(64) NULL,
[ItemCode] nvarchar(64) NOT NULL,
[Uom] nvarchar(64) NOT NULL,
[Qty] decimal(18,6) NOT NULL,
[StdPackQty] decimal(18,6) NOT NULL,
[FromPackingCode] nvarchar(max) NULL,
[ToPackingCode] nvarchar(max) NULL,
[FromContainerCode] nvarchar(max) NULL,
[ToContainerCode] nvarchar(max) NULL,
[FromLot] nvarchar(max) NULL,
[ToLot] nvarchar(max) NULL,
[SupplierBatch] nvarchar(64) NULL,
[ArriveDate] datetime2 NOT NULL,
[ProduceDate] datetime2 NOT NULL,
[ExpireDate] datetime2 NOT NULL,
[FromLocationCode] nvarchar(64) NOT NULL,
[FromLocationArea] nvarchar(64) NULL,
[FromLocationGroup] nvarchar(64) NULL,
[FromLocationErpCode] nvarchar(64) NOT NULL,
[FromWarehouseCode] nvarchar(64) NOT NULL,
[FromStatus] nvarchar(64) NOT NULL,
[ToLocationCode] nvarchar(64) NOT NULL,
[ToLocationArea] nvarchar(64) NULL,
[ToLocationGroup] nvarchar(64) NULL,
[ToLocationErpCode] nvarchar(64) NOT NULL,
[ToWarehouseCode] nvarchar(64) NOT NULL,
[ToStatus] nvarchar(64) NOT NULL,
CONSTRAINT [PK_Store_WipWarehouseAdjustRequestDetail] PRIMARY KEY ([Id]),
CONSTRAINT [FK_Store_WipWarehouseAdjustRequestDetail_Store_WipWarehouseAdjustRequest_MasterID] FOREIGN KEY ([MasterID]) REFERENCES [Store_WipWarehouseAdjustRequest] ([Id]) ON DELETE CASCADE
)
CREATE TABLE [Store_WorkOrderDetail] ( CREATE TABLE [Store_WorkOrderDetail] (
[Id] uniqueidentifier NOT NULL, [Id] uniqueidentifier NOT NULL,
[EffectiveDate] datetime2 NOT NULL, [EffectiveDate] datetime2 NOT NULL,
@ -5698,6 +5837,21 @@ CREATE INDEX [IX_Store_WarehouseTransferNoteDetail_MasterID] ON [Store_Warehouse
CREATE UNIQUE INDEX [IX_Store_WarehouseTransferNoteDetail_Number_FromPackingCode_FromLocationCode_ToLocationCode] ON [Store_WarehouseTransferNoteDetail] ([Number], [FromPackingCode], [FromLocationCode], [ToLocationCode]) WHERE [FromPackingCode] IS NOT NULL CREATE UNIQUE INDEX [IX_Store_WarehouseTransferNoteDetail_Number_FromPackingCode_FromLocationCode_ToLocationCode] ON [Store_WarehouseTransferNoteDetail] ([Number], [FromPackingCode], [FromLocationCode], [ToLocationCode]) WHERE [FromPackingCode] IS NOT NULL
CREATE UNIQUE INDEX [IX_Store_WipWarehouseAdjustNote_Number] ON [Store_WipWarehouseAdjustNote] ([Number])
CREATE INDEX [IX_Store_WipWarehouseAdjustNoteDetail_MasterID] ON [Store_WipWarehouseAdjustNoteDetail] ([MasterID])
CREATE UNIQUE INDEX [IX_Store_WipWarehouseAdjustNoteDetail_Number_FromPackingCode_FromLocationCode_ToLocationCode_FromStatus_ToStatus] ON [Store_WipWarehouseAdjustNoteDetail] ([Number], [FromPackingCode], [FromLocationCode], [ToLocationCode], [FromStatus], [ToStatus]) WHERE [FromPackingCode] IS NOT NULL
CREATE UNIQUE INDEX [IX_Store_WipWarehouseAdjustRequest_Number] ON [Store_WipWarehouseAdjustRequest] ([Number])
CREATE INDEX [IX_Store_WipWarehouseAdjustRequestDetail_MasterID] ON [Store_WipWarehouseAdjustRequestDetail] ([MasterID])
CREATE UNIQUE INDEX [IX_Store_WorkOrder_Number] ON [Store_WorkOrder] ([Number]) CREATE UNIQUE INDEX [IX_Store_WorkOrder_Number] ON [Store_WorkOrder] ([Number])

16
be/Hosts/WmsPda.Host/Win_in.Sfs.Wms.Pda.Host/Controllers/Accounts/AccountController.cs

@ -21,7 +21,7 @@ using PdaMenuGroupDto = Win_in.Sfs.Wms.Pda.Models.PdaMenuGroupDto;
namespace Win_in.Sfs.Wms.Pda.Controllers.Accounts; namespace Win_in.Sfs.Wms.Pda.Controllers.Accounts;
/// <summary> /// <summary>
/// ///
/// </summary> /// </summary>
[AllowAnonymous] [AllowAnonymous]
[ApiController] [ApiController]
@ -38,12 +38,15 @@ public class AccountController : AbpController
private readonly ILogger<TokenService> _logger; private readonly ILogger<TokenService> _logger;
/// <summary> /// <summary>
/// ///
/// </summary> /// </summary>
/// <param name="profileAppService"></param> /// <param name="profileAppService"></param>
/// <param name="tokenService"></param> /// <param name="tokenService"></param>
/// <param name="userMenuAppService"></param> /// <param name="userMenuAppService"></param>
/// <param name="userWorkGroupAppService"></param> /// <param name="userWorkGroupAppService"></param>
/// <param name="configuration"></param>
/// <param name="httpClientFactory"></param>
/// <param name="logger"></param>
public AccountController(IProfileAppService profileAppService public AccountController(IProfileAppService profileAppService
, ITokenService tokenService , ITokenService tokenService
, IUserMenuAppService userMenuAppService , IUserMenuAppService userMenuAppService
@ -59,13 +62,22 @@ public class AccountController : AbpController
_logger = logger; _logger = logger;
} }
/// <summary>
///
/// </summary>
[Display] [Display]
public class LoginModel public class LoginModel
{ {
/// <summary>
///
/// </summary>
[Display] [Display]
[Required] [Required]
public string UserName { get; set; } public string UserName { get; set; }
/// <summary>
///
/// </summary>
[Display] [Display]
[Required] [Required]
public string Password { get; set; } public string Password { get; set; }

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

@ -39,6 +39,7 @@ public class BalanceController : AbpController
/// <param name="balanceAppService"></param> /// <param name="balanceAppService"></param>
/// <param name="itemBasicAppService"></param> /// <param name="itemBasicAppService"></param>
/// <param name="locationAppService"></param> /// <param name="locationAppService"></param>
/// <param name="expectOutAppService"></param>
public BalanceController( public BalanceController(
IBalanceAppService balanceAppService, IBalanceAppService balanceAppService,
IItemBasicAppService itemBasicAppService, IItemBasicAppService itemBasicAppService,
@ -440,7 +441,7 @@ public class BalanceController : AbpController
public async Task<PagedResultDto<BalanceDTO>> GetListByLocationTypeAndInventoryStatusAndNotExpectOutAsync( public async Task<PagedResultDto<BalanceDTO>> GetListByLocationTypeAndInventoryStatusAndNotExpectOutAsync(
BalanceListByIssueInputByInventoryStatusAndLocationType listInput) BalanceListByIssueInputByInventoryStatusAndLocationType listInput)
{ {
var expectOut = await _expectOutAppService.GetListByPackingCodeAsync(listInput.packingCode); var expectOut = await _expectOutAppService.GetListByPackingCodeAsync(listInput.packingCode).ConfigureAwait(false);
if (expectOut != null && expectOut.Any()) if (expectOut != null && expectOut.Any())
{ {

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

@ -71,7 +71,7 @@ public class JobController : AbpController
/// </summary> /// </summary>
/// <returns></returns> /// <returns></returns>
[HttpGet("")] [HttpGet("")]
public virtual async Task<ListResultDto<JobCountDto>> CountAsync() public virtual async Task<ListResultDto<JobCountDto>> CountAsync(bool isToday)
{ {
var wlgCodes = await _userWorkGroupAppService.GetCodsOfCurrentUserAsync().ConfigureAwait(false); var wlgCodes = await _userWorkGroupAppService.GetCodsOfCurrentUserAsync().ConfigureAwait(false);
var jsonCodes = JsonSerializer.Serialize(wlgCodes); var jsonCodes = JsonSerializer.Serialize(wlgCodes);
@ -146,7 +146,7 @@ public class JobController : AbpController
}).ConfigureAwait(false); }).ConfigureAwait(false);
list.Add(new JobCountDto { JobType = EnumJobType.ProductReceiveJob, Count = productReceiveJobs }); list.Add(new JobCountDto { JobType = EnumJobType.ProductReceiveJob, Count = productReceiveJobs });
var purchaseReceiptJobs = await _purchaseReceiptJobAppService.GetCountByFilterAsync(new SfsJobRequestInputBase var purchaseReceiptJobRequest = new SfsJobRequestInputBase
{ {
Condition = new Condition Condition = new Condition
{ {
@ -156,8 +156,12 @@ public class JobController : AbpController
new(nameof(PurchaseReceiptJobDTO.JobStatus),jsonStatus,"In") new(nameof(PurchaseReceiptJobDTO.JobStatus),jsonStatus,"In")
} }
} }
}).ConfigureAwait(false); };
list.Add(new JobCountDto { JobType = EnumJobType.PurchaseReceiptJob, Count = purchaseReceiptJobs }); if (isToday)//只看当日
{
purchaseReceiptJobRequest.Condition.Filters.Add(new Filter(nameof(PurchaseReceiptJobDTO.PlanArriveDate), Clock.Now.ToString("yyyy-MM-dd"), ">=", "And"));
purchaseReceiptJobRequest.Condition.Filters.Add(new Filter(nameof(PurchaseReceiptJobDTO.PlanArriveDate), Clock.Now.AddDays(1).ToString("yyyy-MM-dd"), "<=", "And"));
}
var purchaseReturnJobs = await _purchaseReturnJobAppService.GetCountByFilterAsync(new SfsJobRequestInputBase var purchaseReturnJobs = await _purchaseReturnJobAppService.GetCountByFilterAsync(new SfsJobRequestInputBase
{ {

4
be/Hosts/WmsPda.Host/Win_in.Sfs.Wms.Pda.Host/Controllers/Jobs/PurchaseReceiptJobController.cs

@ -32,9 +32,7 @@ public class PurchaseReceiptJobController : AbpController
/// </summary> /// </summary>
/// <param name="purchaseReceiptJobAppService"></param> /// <param name="purchaseReceiptJobAppService"></param>
/// <param name="userWorkGroupAppService"></param> /// <param name="userWorkGroupAppService"></param>
/// <param name="purchaseReceiptRequestAppService"></param>
/// <param name="supplierAppService"></param> /// <param name="supplierAppService"></param>
/// <param name="fileAppService"></param>
public PurchaseReceiptJobController( public PurchaseReceiptJobController(
IPurchaseReceiptJobAppService purchaseReceiptJobAppService IPurchaseReceiptJobAppService purchaseReceiptJobAppService
, IUserWorkGroupAppService userWorkGroupAppService , IUserWorkGroupAppService userWorkGroupAppService
@ -53,7 +51,7 @@ public class PurchaseReceiptJobController : AbpController
[HttpGet("{id}")] [HttpGet("{id}")]
public virtual async Task<ActionResult<PurchaseReceiptJobDTO>> GetAsync(Guid id) public virtual async Task<ActionResult<PurchaseReceiptJobDTO>> GetAsync(Guid id)
{ {
var result = await _purchaseReceiptJobAppService.GetNoCacheAsync(id).ConfigureAwait(false); var result = await _purchaseReceiptJobAppService.GetAsync(id).ConfigureAwait(false);
var supplier = await _supplierAppService.GetByCodeAsync(result.SupplierCode).ConfigureAwait(false); var supplier = await _supplierAppService.GetByCodeAsync(result.SupplierCode).ConfigureAwait(false);
result.SupplierName = supplier.Name; result.SupplierName = supplier.Name;

3
be/Hosts/WmsPda.Host/Win_in.Sfs.Wms.Pda.Host/Controllers/Stores/IssueNoteController.cs

@ -33,7 +33,7 @@ public class IssueNoteController : AbpController
[HttpPost("")] [HttpPost("")]
public virtual async Task CreateAsync([FromBody] IssueNoteEditInput input) public virtual async Task CreateAsync([FromBody] IssueNoteEditInput input)
{ {
input.RequestType = EnumMaterialRequestType.Direct_Issue.ToString(); input.RequestType = EnumMaterialRequestType.Issue_Direct.ToString();
input.Details.ForEach(p => input.Details.ForEach(p =>
{ {
@ -54,5 +54,4 @@ public class IssueNoteController : AbpController
{ {
return await _issueNoteAppService.ConfirmAsync(id).ConfigureAwait(false); return await _issueNoteAppService.ConfirmAsync(id).ConfigureAwait(false);
} }
} }

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

@ -54,7 +54,7 @@ public class L7Controller : AbpController
[HttpPost("create-product-recycle-note-with-l7")] [HttpPost("create-product-recycle-note-with-l7")]
public virtual async Task<ProductRecycleNoteDTO> CreateProductRecycleNoteWithL7Async(ProductRecycleNoteEditInput input) public virtual async Task<ProductRecycleNoteDTO> CreateProductRecycleNoteWithL7Async(ProductRecycleNoteEditInput input)
{ {
return await _productRecycleNoteAppService.CreateWithL7Async(input).ConfigureAwait(false); return await _productRecycleNoteAppService.CreateAsync(input).ConfigureAwait(false);
} }
/// <summary> /// <summary>

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

@ -26,7 +26,7 @@ public class RecycledMaterialReceiptNoteController : AbpController
} }
/// <summary> /// <summary>
/// 获取盘点任务详情 /// 回收料调整
/// </summary> /// </summary>
/// <param name="id"></param> /// <param name="id"></param>
/// <returns></returns> /// <returns></returns>

58
be/Hosts/WmsPda.Host/Win_in.Sfs.Wms.Pda.Host/Controllers/TestController.cs

@ -1,58 +0,0 @@
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Mvc;
using Volo.Abp.Account;
using Volo.Abp.Application.Services;
using Volo.Abp.AspNetCore.Mvc;
using Win_in.Sfs.Auth.Application.Contracts;
using Win_in.Sfs.Wms.Pda.Authenticaitons;
using Win_in.Sfs.Wms.Pda.Models;
using PdaMenuDto = Win_in.Sfs.Wms.Pda.Models.PdaMenuDto;
using PdaMenuGroupDto = Win_in.Sfs.Wms.Pda.Models.PdaMenuGroupDto;
namespace Win_in.Sfs.Wms.Pda.Controllers.Accounts;
/// <summary>
///
/// </summary>
[AllowAnonymous]
[ApiController]
[Route($"{PdaHostConst.ROOT_ROUTE}asfasf")]
public class TestController: AbpController
{
//private readonly IProfileAppService _profileAppService;
//private readonly ITokenService _tokenService;
private readonly IUserMenuAppService _userMenuAppService;
//private readonly IUserWorkGroupAppService _userWorkGroupAppService;
/// <summary>
///
/// </summary>
/// <param name="profileAppService"></param>
/// <param name="tokenService"></param>
/// <param name="userMenuAppService"></param>
/// <param name="userWorkGroupAppService"></param>
public TestController(
IUserMenuAppService userMenuAppService
, IUserWorkGroupAppService userWorkGroupAppService
)
{
//_profileAppService = profileAppService;
//_tokenService = tokenService;
_userMenuAppService = userMenuAppService;
//_userWorkGroupAppService = userWorkGroupAppService;
}
/// <summary>
/// Test
/// </summary>
/// <returns></returns>
[HttpGet("Test")]
public virtual async Task<List<string>> Test()
{
return new List<string>() { "sdfsdf'" };
}
}

1
be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application.Contracts/Uoms/Inputs/UomImportInput.cs

@ -19,6 +19,7 @@ public class UomImportInput : SfsBaseDataImportInputBase
/// 名称 /// 名称
/// </summary> /// </summary>
[Display(Name = "名称")] [Display(Name = "名称")]
[Required(ErrorMessage = "{0}是必填项")]
[StringLength(SfsEfCorePropertyConst.CodeLength, ErrorMessage = "{0}最多输入{1}个字符")] [StringLength(SfsEfCorePropertyConst.CodeLength, ErrorMessage = "{0}最多输入{1}个字符")]
public string Name { get; set; } public string Name { get; set; }

45
be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application/ItemTransformNote/ItemTransformNoteDetailExchangeDto.cs

@ -0,0 +1,45 @@
using System.ComponentModel.DataAnnotations;
namespace Win_in.Sfs.Wms.DataExchange.WMS.ItemTransformNote;
public class ItemTransformNoteDetailExchangeDto
{
/// <summary>
/// 物品代码
/// </summary>
[Display(Name = "物品代码")]
public string ItemCode { get; set; }
/// <summary>
/// ERP库位
/// </summary>
[Display(Name = "ERP库位")]
public string LocationErpCode { get; set; }
/// <summary>
/// 原因代码
/// </summary>
[Display(Name = "原因代码")]
public string ReasonCode { get; set; }
/// <summary>
/// 调整数量
/// </summary>
[Display(Name = "来源数量")]
public decimal FromQty { get; set; }
/// <summary>
/// 目标数量
/// </summary>
[Display(Name = "目标数量")]
public decimal ToQty { get; set; }
/// <summary>
/// 目标库位
/// </summary>
[Display(Name = "目标库位")]
[Required(ErrorMessage = "{0}是必填项")]
public string ToLocationCode { get; set; }
/// <summary>
/// 目标物品代码
/// </summary>
[Display(Name = "目标物品代码")]
public string ToItemCode { get; set; }
}

30
be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application/ItemTransformNote/ItemTransformNoteExchangeDto.cs

@ -0,0 +1,30 @@
using System;
using System.ComponentModel.DataAnnotations;
namespace Win_in.Sfs.Wms.DataExchange.WMS.ItemTransformNote;
public class ItemTransformNoteExchangeDto
{
/// <summary>
/// 单据号
/// </summary>
public string Number { get; set; }
/// <summary>
/// 生效日期
/// </summary>
public DateTime ActiveDate { get; set; } = DateTime.Now.Date;
/// <summary>
/// 操作员
/// </summary>
public string Worker { get; set; }
/// <summary>
/// 类型
/// </summary>
public string Type { get; set; }
/// <summary>
/// 明细
/// </summary>
[Display(Name = "明细")]
public ItemTransformNoteDetailExchangeDto Detail { get; set; } = new();
}

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

@ -2,6 +2,7 @@ using System.Collections.Generic;
using System.Threading.Tasks; using System.Threading.Tasks;
using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Mvc; using Microsoft.AspNetCore.Mvc;
using Win_in.Sfs.Basedata.Application.Contracts;
using Win_in.Sfs.Shared.Application.Contracts; using Win_in.Sfs.Shared.Application.Contracts;
using Win_in.Sfs.Shared.Domain; using Win_in.Sfs.Shared.Domain;
using Win_in.Sfs.Wms.Inventory.Application.Contracts; using Win_in.Sfs.Wms.Inventory.Application.Contracts;
@ -23,15 +24,17 @@ public class TransferLogAppService
{ {
private readonly ITransferLogManager _transferLogManager; private readonly ITransferLogManager _transferLogManager;
private readonly IInterfaceCalendarAclService _interfaceCalendarAclService; private readonly IInterfaceCalendarAclService _interfaceCalendarAclService;
private readonly ILocationAppService _locationAppService;
public TransferLogAppService( public TransferLogAppService(
ITransferLogRepository repository ITransferLogRepository repository
, ITransferLogManager transferLogManager , ITransferLogManager transferLogManager
, IInterfaceCalendarAclService interfaceCalendarAclService , IInterfaceCalendarAclService interfaceCalendarAclService
) : base(repository) , ILocationAppService locationAppService) : base(repository)
{ {
_transferLogManager = transferLogManager; _transferLogManager = transferLogManager;
_interfaceCalendarAclService = interfaceCalendarAclService; _interfaceCalendarAclService = interfaceCalendarAclService;
_locationAppService = locationAppService;
} }
[HttpPost("add")] [HttpPost("add")]

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

@ -105,6 +105,15 @@ public class BalanceManager : DomainService, IBalanceManager
} }
else else
{ {
if (existBalance.IsActive == false)
{
throw new UserFriendlyException($"库位在{existBalance.LocationCode}," +
$"物品编号为{existBalance.ItemCode}," +
$"箱码为{existBalance.PackingCode}," +
$"批次为{existBalance.Lot}," +
$"状态为{existBalance.Status.GetDisplayName()}" +
$"的库存是不可用状态");
}
//如果单件管理的库存已存在,报错 //如果单件管理的库存已存在,报错
transaction.CheckSingleUnitHasExist(); transaction.CheckSingleUnitHasExist();
existBalance.IncreaseQty(transaction.Qty); existBalance.IncreaseQty(transaction.Qty);
@ -202,6 +211,16 @@ public class BalanceManager : DomainService, IBalanceManager
} }
else else
{ {
if (existBalance.IsActive == false)
{
throw new UserFriendlyException($"库位在{existBalance.LocationCode}," +
$"物品编号为{existBalance.ItemCode}," +
$"箱码为{existBalance.PackingCode}," +
$"批次为{existBalance.Lot}," +
$"状态为{existBalance.Status}" +
$"的库存是不可用状态");
}
existBalance.IncreaseQty(transaction.Qty); existBalance.IncreaseQty(transaction.Qty);
switch (existBalance.Qty) switch (existBalance.Qty)
{ {
@ -244,6 +263,16 @@ public class BalanceManager : DomainService, IBalanceManager
balance.Status balance.Status
).ConfigureAwait(false); ).ConfigureAwait(false);
//if (!existBalance.IsActive)
//{
// throw new UserFriendlyException(
// $"箱码为{balance.PackingCode}," +
// $"库位在{balance.LocationCode}," +
// $"批次为{balance.Lot}," +
// $"状态为{balance.Status.GetDisplayName()}" +
// $"的库存是不可用状态");
//}
existBalance.Qty = balance.Qty; existBalance.Qty = balance.Qty;
existBalance.ItemName = balance.ItemName; existBalance.ItemName = balance.ItemName;
existBalance.ItemDesc1 = balance.ItemDesc1; existBalance.ItemDesc1 = balance.ItemDesc1;
@ -423,9 +452,12 @@ public class BalanceManager : DomainService, IBalanceManager
expression = expression.And(p => p.ExpireDate > DateTime.Now); expression = expression.And(p => p.ExpireDate > DateTime.Now);
} }
//筛选有效库区 //筛选有效库区
if (validLocationAreas.Any()) if (validLocationAreas.Any() )
{ {
expression = expression.And(p => validLocationAreas.Contains(p.LocationArea)); if (!string.IsNullOrEmpty(validLocationAreas[0]))
{
expression = expression.And(p => validLocationAreas.Contains(p.LocationArea));
}
} }
var allBalances = await var allBalances = await
(await _balanceRepository.GetDbSetAsync().ConfigureAwait(false)) (await _balanceRepository.GetDbSetAsync().ConfigureAwait(false))

7
be/Modules/Label/src/Win_in.Sfs.Label.Application.Contracts/InventoryLabels/InventoryLabelWithoutCodeCreateInput.cs

@ -207,4 +207,11 @@ public class InventoryLabelWithoutCodeCreateInput
[Display(Name = "要求到货时间")] [Display(Name = "要求到货时间")]
[Required(ErrorMessage = "{0}是必填项")] [Required(ErrorMessage = "{0}是必填项")]
public DateTime PlanArriveDate { get; set; } public DateTime PlanArriveDate { get; set; }
/// <summary>
/// 备注
/// </summary>
[Display(Name = "备注")]
public string Remark { get; set; }
} }

39
be/Modules/Label/src/Win_in.Sfs.Label.Application/Bases/SfsLabelAppServiceWithCodeBase.cs

@ -1,5 +1,6 @@
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks; using System.Threading.Tasks;
using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Mvc; using Microsoft.AspNetCore.Mvc;
@ -38,10 +39,12 @@ public class SfsLabelAppServiceWithCodeBase<TEntity, TEntityDto, TRequestDTO, TC
[HttpGet("by-code/{code}")] [HttpGet("by-code/{code}")]
public virtual async Task<TEntityDto> GetByCodeAsync(string code) public virtual async Task<TEntityDto> GetByCodeAsync(string code)
{ {
var dto = await Cache.GetOrAddItemAsync( // var dto = await Cache.GetOrAddItemAsync(
$"{typeof(TEntityDto).Name}:{code}".ToString(), // $"{typeof(TEntityDto).Name}:{code}".ToString(),
async () => await GetFromRepositoryAsync(code).ConfigureAwait(false), // async () => await GetFromRepositoryAsync(code).ConfigureAwait(false),
SfsCacheConst.SeveralMinutes).ConfigureAwait(false); // SfsCacheConst.SeveralMinutes).ConfigureAwait(false);
var dto = await GetFromRepositoryAsync(code).ConfigureAwait(false);
return dto; return dto;
} }
@ -50,18 +53,22 @@ public class SfsLabelAppServiceWithCodeBase<TEntity, TEntityDto, TRequestDTO, TC
[HttpPost("by-codes")] [HttpPost("by-codes")]
public virtual async Task<List<TEntityDto>> GetByCodesAsync(IEnumerable<string> codes) public virtual async Task<List<TEntityDto>> GetByCodesAsync(IEnumerable<string> codes)
{ {
var dtoList = new List<TEntityDto>(); // var dtoList = new List<TEntityDto>();
foreach (var code in codes) // foreach (var code in codes)
{ // {
var dto = await Cache.GetOrAddItemAsync( // var dto = await Cache.GetOrAddItemAsync(
$"{typeof(TEntityDto).Name}:{code}".ToString(), // $"{typeof(TEntityDto).Name}:{code}".ToString(),
async () => await GetFromRepositoryAsync(code).ConfigureAwait(false), // async () => await GetFromRepositoryAsync(code).ConfigureAwait(false),
SfsCacheConst.SeveralMinutes).ConfigureAwait(false); // SfsCacheConst.SeveralMinutes).ConfigureAwait(false);
if (dto != null) // if (dto != null)
{ // {
dtoList.Add(dto); // dtoList.Add(dto);
} // }
} // }
// return dtoList;
var entities = await _repository.GetListAsync(p => codes.Contains(p.Code)).ConfigureAwait(false);
var dtoList = ObjectMapper.Map<List<TEntity>, List<TEntityDto>>(entities);
return dtoList; return dtoList;
} }

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

@ -1,3 +1,4 @@
using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.ComponentModel.DataAnnotations; using System.ComponentModel.DataAnnotations;
using System.Linq; using System.Linq;
@ -15,6 +16,7 @@ using Win_in.Sfs.Label.Application.Contracts;
using Win_in.Sfs.Label.Domain; using Win_in.Sfs.Label.Domain;
using Win_in.Sfs.Label.Domain.Shared; using Win_in.Sfs.Label.Domain.Shared;
using Win_in.Sfs.Shared.Application.Contracts; using Win_in.Sfs.Shared.Application.Contracts;
using Win_in.Sfs.Shared.Domain.Shared;
namespace Win_in.Sfs.Label.Application; namespace Win_in.Sfs.Label.Application;
@ -33,12 +35,14 @@ public class InventoryLabelAppService
private new readonly IInventoryLabelRepository _repository; private new readonly IInventoryLabelRepository _repository;
private readonly ISupplierAppService _supplierAppService; private readonly ISupplierAppService _supplierAppService;
private readonly ISupplierItemAppService _supplierItemAppService; private readonly ISupplierItemAppService _supplierItemAppService;
private readonly IItemBasicAppService _itemBasicAppService;
public InventoryLabelAppService( public InventoryLabelAppService(
IInventoryLabelRepository repository, ILabelDefinitionManager labelDefinitionManager IInventoryLabelRepository repository, ILabelDefinitionManager labelDefinitionManager
, ISupplierAppService supplierAppService , ISupplierAppService supplierAppService
, IItemPackAppService itemPackAppService , IItemPackAppService itemPackAppService
, ISupplierItemAppService supplierItemAppService , ISupplierItemAppService supplierItemAppService
, IItemBasicAppService itemBasicAppService
) : base(repository) ) : base(repository)
{ {
_repository = repository; _repository = repository;
@ -46,6 +50,7 @@ public class InventoryLabelAppService
_supplierAppService = supplierAppService; _supplierAppService = supplierAppService;
_itemPackAppService = itemPackAppService; _itemPackAppService = itemPackAppService;
_supplierItemAppService = supplierItemAppService; _supplierItemAppService = supplierItemAppService;
_itemBasicAppService = itemBasicAppService;
} }
[HttpPost("")] [HttpPost("")]
@ -60,6 +65,45 @@ public class InventoryLabelAppService
return await base.CreateAsync(input).ConfigureAwait(false); return await base.CreateAsync(input).ConfigureAwait(false);
} }
/// <summary>
/// 按Id获取实体
/// </summary>
/// <param name="id">实体Id</param>
/// <returns></returns>
[HttpGet("{id}")]
public override async Task<InventoryLabelDto> GetAsync(Guid id)
{
var dto = await base.GetAsync(id).ConfigureAwait(false);
if (dto != null)
{
var itemBasicDto = await _itemBasicAppService.GetByCodeAsync(dto.ItemCode).ConfigureAwait(false);
if (itemBasicDto != null)
{
switch (itemBasicDto.ValidityUnit)
{
case EnumValidityUnit.Infinite:
dto.ExpireDate = DateTime.MaxValue;
break;
case EnumValidityUnit.Day:
dto.ExpireDate = DateTime.Now.AddDays(itemBasicDto.Validity);
break;
case EnumValidityUnit.WeeK:
dto.ExpireDate = DateTime.Now.AddDays(itemBasicDto.Validity * 7);
break;
case EnumValidityUnit.Month:
dto.ExpireDate = DateTime.Now.AddMonths(itemBasicDto.Validity);
break;
case EnumValidityUnit.None:
default:
break;
}
}
}
return dto;
}
[HttpPost("many")] [HttpPost("many")]
[UnitOfWork] [UnitOfWork]
public virtual async Task<List<InventoryLabelDto>> CreateManyAsync(List<InventoryLabelEditInput> inputs) public virtual async Task<List<InventoryLabelDto>> CreateManyAsync(List<InventoryLabelEditInput> inputs)
@ -83,7 +127,7 @@ public class InventoryLabelAppService
[UnitOfWork] [UnitOfWork]
public virtual async Task<List<InventoryLabelDto>> CreateManyByNoCodeAsync(List<InventoryLabelEditInput> inputs) public virtual async Task<List<InventoryLabelDto>> CreateManyByNoCodeAsync(List<InventoryLabelEditInput> inputs)
{ {
var entitys= ObjectMapper.Map<List<InventoryLabelEditInput>, List<InventoryLabel>>(inputs); var entitys = ObjectMapper.Map<List<InventoryLabelEditInput>, List<InventoryLabel>>(inputs);
await _repository.InsertManyAsync(entitys).ConfigureAwait(false); await _repository.InsertManyAsync(entitys).ConfigureAwait(false);
return ObjectMapper.Map<List<InventoryLabel>, List<InventoryLabelDto>>(entitys); return ObjectMapper.Map<List<InventoryLabel>, List<InventoryLabelDto>>(entitys);
} }
@ -129,6 +173,36 @@ public class InventoryLabelAppService
var createInput = ObjectMapper.Map<InventoryLabelWithoutCodeCreateInput, InventoryLabelEditInput>(input); var createInput = ObjectMapper.Map<InventoryLabelWithoutCodeCreateInput, InventoryLabelEditInput>(input);
createInput.Code = numbers[i]; createInput.Code = numbers[i];
var dto = await base.CreateAsync(createInput).ConfigureAwait(false); var dto = await base.CreateAsync(createInput).ConfigureAwait(false);
dto.SupplierCode = input.SupplierCode;
dto.PoNumber = input.PoNumber;
dto.Remark = input.Remark;
dto.AsnNumber = input.AsnNumber;
dto.FullBarcodeString = dto.Code;
var itemBasicDto = await _itemBasicAppService.GetByCodeAsync(dto.ItemCode).ConfigureAwait(false);
if (itemBasicDto != null)
{
switch (itemBasicDto.ValidityUnit)
{
case EnumValidityUnit.Infinite:
dto.ExpireDate = DateTime.MaxValue;
break;
case EnumValidityUnit.Day:
dto.ExpireDate = DateTime.Now.AddDays(itemBasicDto.Validity);
break;
case EnumValidityUnit.WeeK:
dto.ExpireDate = DateTime.Now.AddDays(itemBasicDto.Validity * 7);
break;
case EnumValidityUnit.Month:
dto.ExpireDate = DateTime.Now.AddMonths(itemBasicDto.Validity);
break;
case EnumValidityUnit.None:
default:
break;
}
}
dtos.Add(dto); dtos.Add(dto);
} }
return dtos; return dtos;

4
be/Modules/Shared/src/Win_in.Sfs.Shared.Application/SfsCrudWithDetailsAppServiceBase.cs

@ -512,7 +512,6 @@ public abstract class SfsCrudWithDetailsAppServiceBase<TEntity, TEntityDto, TReq
/// <summary> /// <summary>
/// 导入数据具体实现,可重写 /// 导入数据具体实现,可重写
/// </summary> /// </summary>
//[UnitOfWork]
protected virtual async Task<SfsImportResult> ImportInternalAsync(SfsImportRequestInput requestInput, byte[] inputFileBytes) protected virtual async Task<SfsImportResult> ImportInternalAsync(SfsImportRequestInput requestInput, byte[] inputFileBytes)
{ {
IList<TImportInput> modelList = null; IList<TImportInput> modelList = null;
@ -559,7 +558,7 @@ public abstract class SfsCrudWithDetailsAppServiceBase<TEntity, TEntityDto, TReq
if (entityDict.Any()) if (entityDict.Any())
{ {
//加工数据 //加工数据
entityDict=await ImportProcessingEntityAsync(entityDict); entityDict=await ImportProcessingEntityAsync(entityDict).ConfigureAwait(false);
// 调用批量验证 // 调用批量验证
var entityListStatus = await ValidateImportEntities(entityDict).ConfigureAwait(false); var entityListStatus = await ValidateImportEntities(entityDict).ConfigureAwait(false);
@ -656,6 +655,7 @@ public abstract class SfsCrudWithDetailsAppServiceBase<TEntity, TEntityDto, TReq
/// <returns></returns> /// <returns></returns>
protected virtual async Task<Dictionary<TEntity, EntityState>> ImportProcessingEntityAsync(Dictionary<TEntity, EntityState> dictionary) protected virtual async Task<Dictionary<TEntity, EntityState>> ImportProcessingEntityAsync(Dictionary<TEntity, EntityState> dictionary)
{ {
await Task.CompletedTask.ConfigureAwait(false);
return dictionary; return dictionary;
} }

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

@ -127,6 +127,12 @@ public enum EnumTransSubType
[Display(Name = "安全库存拉动")] [Display(Name = "安全库存拉动")]
Issue_SafetyStock = 1504, Issue_SafetyStock = 1504,
/// <summary>
/// 直接发料
/// </summary>
[Display(Name = "直接发料")]
Issue_Direct = 1505,
/// <summary> /// <summary>
/// 标准发货 /// 标准发货
/// </summary> /// </summary>

2
be/Modules/Shared/src/Win_in.Sfs.Shared.Domain.Shared/Enums/Store/EnumMaterialRequestType.cs

@ -28,5 +28,5 @@ public enum EnumMaterialRequestType
//Issue_SfaetyStock = 1504, //Issue_SfaetyStock = 1504,
[Display(Name = "直接发料")] [Display(Name = "直接发料")]
Direct_Issue = 1505 Issue_Direct = 1505
} }

12
be/Modules/Shared/src/Win_in.Sfs.Shared.Host/HostBuilderExtensions.cs

@ -45,6 +45,7 @@ public static class HostBuilderExtensions
AddJsonByUrl(cb, $"{configUrl}appsettings.{builder.Environment.EnvironmentName}.json"); AddJsonByUrl(cb, $"{configUrl}appsettings.{builder.Environment.EnvironmentName}.json");
if (builder.Environment.IsDevelopment()) if (builder.Environment.IsDevelopment())
{ {
cb.AddJsonFile(Path.Combine(Directory.GetCurrentDirectory(), "appsettings.json"));
cb.AddJsonFile(Path.Combine(Directory.GetCurrentDirectory(), $"appsettings.{builder.Environment.EnvironmentName}.json")); cb.AddJsonFile(Path.Combine(Directory.GetCurrentDirectory(), $"appsettings.{builder.Environment.EnvironmentName}.json"));
} }
}); });
@ -79,7 +80,14 @@ public static class HostBuilderExtensions
private static void AddJsonByUrl(IConfigurationBuilder configurationBuilder, string url) private static void AddJsonByUrl(IConfigurationBuilder configurationBuilder, string url)
{ {
Console.WriteLine($"load config form:{url}"); Console.WriteLine($"load config form:{url}");
var stream = new HttpClient().GetStreamAsync(url).Result; try
configurationBuilder.AddJsonStream(stream); {
var stream = new HttpClient().GetStreamAsync(url).Result;
configurationBuilder.AddJsonStream(stream);
}
catch (Exception e)
{
Console.WriteLine(e.Message);
}
} }
} }

5
be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Bases/DTOs/SfsStoreRecommendFromDetailWithFromToDTOBase.cs

@ -79,11 +79,6 @@ public abstract class SfsStoreRecommendFromDetailWithFromToDTOBase : SfsStoreDet
[Display(Name = "推荐仓库")] [Display(Name = "推荐仓库")]
public string RecommendFromWarehouseCode { get; set; } public string RecommendFromWarehouseCode { get; set; }
/// <summary>
/// 计量单位
/// </summary>
[Display(Name = "计量单位")]
public string Uom { get; set; }
/// <summary> /// <summary>
/// 推荐数量 /// 推荐数量

6
be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Bases/DTOs/SfsStoreRecommendFromDetailWithLotPackingQtyLocationStatusDTOBase.cs

@ -79,12 +79,6 @@ public abstract class SfsStoreRecommendFromDetailWithLotPackingQtyLocationStatus
[Display(Name = "推荐仓库")] [Display(Name = "推荐仓库")]
public string RecommendFromWarehouseCode { get; set; } public string RecommendFromWarehouseCode { get; set; }
/// <summary>
/// 计量单位
/// </summary>
[Display(Name = "计量单位")]
public string Uom { get; set; }
/// <summary> /// <summary>
/// 推荐数量 /// 推荐数量
/// </summary> /// </summary>

6
be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Bases/DTOs/SfsStoreRecommendToDetailWithFromToDTOBase.cs

@ -79,12 +79,6 @@ public abstract class SfsStoreRecommendToDetailWithFromToDTOBase : SfsStoreDetai
[Display(Name = "推荐仓库")] [Display(Name = "推荐仓库")]
public string RecommendToWarehouseCode { get; set; } public string RecommendToWarehouseCode { get; set; }
/// <summary>
/// 计量单位
/// </summary>
[Display(Name = "计量单位")]
public string Uom { get; set; }
/// <summary> /// <summary>
/// 推荐数量 /// 推荐数量
/// </summary> /// </summary>

6
be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Bases/DTOs/SfsStoreRecommendToDetailWithLotPackingQtyLocationStatusDTOBase.cs

@ -79,12 +79,6 @@ public abstract class SfsStoreRecommendToDetailWithLotPackingQtyLocationStatusDT
[Display(Name = "推荐仓库")] [Display(Name = "推荐仓库")]
public string RecommendToWarehouseCode { get; set; } public string RecommendToWarehouseCode { get; set; }
/// <summary>
/// 计量单位
/// </summary>
[Display(Name = "计量单位")]
public string Uom { get; set; }
/// <summary> /// <summary>
/// 推荐数量 /// 推荐数量
/// </summary> /// </summary>

4
be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Bases/DTOs/SfsStoreRequestDTOBase.cs

@ -3,7 +3,7 @@ using Win_in.Sfs.Shared.Domain.Shared;
namespace Win_in.Sfs.Wms.Store.Application.Contracts; namespace Win_in.Sfs.Wms.Store.Application.Contracts;
public class SfsStoreRequestDTOBase<TDetailDTO> : SfsStoreDTOBase<TDetailDTO> public abstract class SfsStoreRequestDTOBase<TDetailDTO> : SfsStoreDTOBase<TDetailDTO>
{ {
/// <summary> /// <summary>
/// 自动提交审批 /// 自动提交审批
@ -18,7 +18,7 @@ public class SfsStoreRequestDTOBase<TDetailDTO> : SfsStoreDTOBase<TDetailDTO>
public bool AutoAgree { get; set; } public bool AutoAgree { get; set; }
/// <summary> /// <summary>
/// 自动执行 /// 自动执行
/// </summary> /// </summary>
[Display(Name = "自动执行")] [Display(Name = "自动执行")]
public bool AutoHandle { get; set; } public bool AutoHandle { get; set; }

2
be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Bases/Inputs/SfsStoreCreateOrUpdateInputBase.cs

@ -5,7 +5,7 @@ using Win_in.Sfs.Shared.Domain;
namespace Win_in.Sfs.Wms.Store.Application.Contracts; namespace Win_in.Sfs.Wms.Store.Application.Contracts;
public class SfsStoreCreateOrUpdateInputBase : SfsCreateOrUpdateInputBase public abstract class SfsStoreCreateOrUpdateInputBase : SfsCreateOrUpdateInputBase
{ {
/// <summary> /// <summary>
/// 操作员 /// 操作员

3
be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Bases/Inputs/SfsStoreDetailWithFromToInputBase.cs

@ -5,7 +5,7 @@ using Win_in.Sfs.Shared.Domain.Shared;
namespace Win_in.Sfs.Wms.Store.Application.Contracts; namespace Win_in.Sfs.Wms.Store.Application.Contracts;
public class SfsStoreDetailWithFromToInputBase public abstract class SfsStoreDetailWithFromToInputBase
: SfsStoreDetailWithQtyInputBase : SfsStoreDetailWithQtyInputBase
, IHasFromToPacking , IHasFromToPacking
, IHasFromToLot , IHasFromToLot
@ -149,5 +149,6 @@ public class SfsStoreDetailWithFromToInputBase
/// </summary> /// </summary>
[Display(Name = "目标库存状态")] [Display(Name = "目标库存状态")]
public EnumInventoryStatus ToStatus { get; set; } public EnumInventoryStatus ToStatus { get; set; }
} }

4
be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Bases/Inputs/SfsStoreImportInputBase.cs

@ -3,7 +3,7 @@ using Win_in.Sfs.Shared.Application.Contracts;
namespace Win_in.Sfs.Wms.Store.Application.Contracts; namespace Win_in.Sfs.Wms.Store.Application.Contracts;
public class SfsStoreImportInputBase : SfsImportInputBase public abstract class SfsStoreImportInputBase : SfsImportInputBase
{ {
//[Display(Name = "单号")] //[Display(Name = "单号")]
@ -35,7 +35,7 @@ public class SfsStoreImportInputBase : SfsImportInputBase
public bool AutoAgree { get; set; } = true; public bool AutoAgree { get; set; } = true;
/// <summary> /// <summary>
/// 自动执行 /// 自动执行
/// </summary> /// </summary>
[Display(Name = "自动执行")] [Display(Name = "自动执行")]
[ImporterHeader(IsIgnore = true)] [ImporterHeader(IsIgnore = true)]

8
be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Bases/Inputs/SfsStoreRecommendFromDetailWithFromToInputBase.cs

@ -4,7 +4,7 @@ using Win_in.Sfs.Shared.Domain;
namespace Win_in.Sfs.Wms.Store.Application.Contracts; namespace Win_in.Sfs.Wms.Store.Application.Contracts;
public class SfsStoreRecommendFromDetailWithFromToInputBase : SfsStoreDetailWithFromToInputBase, IHasRecommendAndHandledFrom public abstract class SfsStoreRecommendFromDetailWithFromToInputBase : SfsStoreDetailWithFromToInputBase, IHasRecommendAndHandledFrom
{ {
#region IHasRecommendFrom #region IHasRecommendFrom
/// <summary> /// <summary>
@ -79,12 +79,6 @@ public class SfsStoreRecommendFromDetailWithFromToInputBase : SfsStoreDetailWith
[Display(Name = "推荐仓库")] [Display(Name = "推荐仓库")]
public string RecommendFromWarehouseCode { get; set; } public string RecommendFromWarehouseCode { get; set; }
/// <summary>
/// 计量单位
/// </summary>
[Display(Name = "计量单位")]
public string Uom { get; set; }
/// <summary> /// <summary>
/// 推荐数量 /// 推荐数量
/// </summary> /// </summary>

6
be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Bases/Inputs/SfsStoreRecommendFromDetailWithLotPackingQtyLocationStatusInputBase.cs

@ -79,12 +79,6 @@ public abstract class SfsStoreRecommendFromDetailWithLotPackingQtyLocationStatus
[Display(Name = "推荐仓库")] [Display(Name = "推荐仓库")]
public string RecommendFromWarehouseCode { get; set; } public string RecommendFromWarehouseCode { get; set; }
/// <summary>
/// 计量单位
/// </summary>
[Display(Name = "计量单位")]
public string Uom { get; set; }
/// <summary> /// <summary>
/// 推荐数量 /// 推荐数量
/// </summary> /// </summary>

8
be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Bases/Inputs/SfsStoreRecommendToDetailWithFromToInputBase.cs

@ -4,7 +4,7 @@ using Win_in.Sfs.Shared.Domain;
namespace Win_in.Sfs.Wms.Store.Application.Contracts; namespace Win_in.Sfs.Wms.Store.Application.Contracts;
public class SfsStoreRecommendToDetailWithFromToInputBase : SfsStoreDetailWithFromToInputBase, IHasRecommendAndHandledTo public abstract class SfsStoreRecommendToDetailWithFromToInputBase : SfsStoreDetailWithFromToInputBase, IHasRecommendAndHandledTo
{ {
#region IHasRecommendTo #region IHasRecommendTo
/// <summary> /// <summary>
@ -79,12 +79,6 @@ public class SfsStoreRecommendToDetailWithFromToInputBase : SfsStoreDetailWithFr
[Display(Name = "推荐仓库")] [Display(Name = "推荐仓库")]
public string RecommendToWarehouseCode { get; set; } public string RecommendToWarehouseCode { get; set; }
/// <summary>
/// 计量单位
/// </summary>
[Display(Name = "计量单位")]
public string Uom { get; set; }
/// <summary> /// <summary>
/// 推荐数量 /// 推荐数量
/// </summary> /// </summary>

6
be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Bases/Inputs/SfsStoreRecommendToDetailWithLotPackingQtyLocationStatusInputBase.cs

@ -81,12 +81,6 @@ public abstract class SfsStoreRecommendToDetailWithLotPackingQtyLocationStatusIn
[Display(Name = "推荐仓库")] [Display(Name = "推荐仓库")]
public string RecommendToWarehouseCode { get; set; } public string RecommendToWarehouseCode { get; set; }
/// <summary>
/// 计量单位
/// </summary>
[Display(Name = "计量单位")]
public string Uom { get; set; }
/// <summary> /// <summary>
/// 推荐数量 /// 推荐数量
/// </summary> /// </summary>

4
be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Bases/Inputs/SfsStoreRequestCreateOrUpdateInputBase.cs

@ -2,7 +2,7 @@ using System.ComponentModel.DataAnnotations;
namespace Win_in.Sfs.Wms.Store.Application.Contracts; namespace Win_in.Sfs.Wms.Store.Application.Contracts;
public class SfsStoreRequestCreateOrUpdateInputBase : SfsStoreCreateOrUpdateInputBase public abstract class SfsStoreRequestCreateOrUpdateInputBase : SfsStoreCreateOrUpdateInputBase
{ {
/// <summary> /// <summary>
/// 自动提交审批 /// 自动提交审批
@ -17,7 +17,7 @@ public class SfsStoreRequestCreateOrUpdateInputBase : SfsStoreCreateOrUpdateInpu
public bool AutoAgree { get; set; } = true; public bool AutoAgree { get; set; } = true;
/// <summary> /// <summary>
/// 自动执行 /// 自动执行
/// </summary> /// </summary>
[Display(Name = "自动执行")] [Display(Name = "自动执行")]
public bool AutoHandle { get; set; } = true; public bool AutoHandle { get; set; } = true;

6
be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Jobs/PurchaseReceiptJobs/IPurchaseReceiptJobAppService.cs

@ -42,10 +42,8 @@ public interface IPurchaseReceiptJobAppService
Task<List<PurchaseReceiptJobDetailDTO>> SetInspectWithNotInspectAsync(Guid id); Task<List<PurchaseReceiptJobDetailDTO>> SetInspectWithNotInspectAsync(Guid id);
/// <summary> /// <summary>
/// 按Id获取实体 不走缓存 /// 根据供应商编号获取收货任务
/// </summary> /// </summary>
/// <param name="id">实体Id</param>
/// <param name="noCache"></param>
/// <returns></returns> /// <returns></returns>
Task<PurchaseReceiptJobDTO> GetNoCacheAsync(Guid id); Task<List<PurchaseReceiptJobDTO>> GetListBySupplierCodeOnTodayAsync(string supplierCode);
} }

8
be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Notes/CountNotes/Inputs/CountNoteImportInput.cs

@ -1,4 +1,5 @@
using System.ComponentModel.DataAnnotations; using System.ComponentModel.DataAnnotations;
using Win_in.Sfs.Shared.Domain.Shared;
namespace Win_in.Sfs.Wms.Store.Application.Contracts; namespace Win_in.Sfs.Wms.Store.Application.Contracts;
@ -39,6 +40,13 @@ public class CountNoteImportInput : SfsStoreImportInputBase
[Required(ErrorMessage = "{0}是必填项", AllowEmptyStrings = true)] [Required(ErrorMessage = "{0}是必填项", AllowEmptyStrings = true)]
public string PackingCode { get; set; } public string PackingCode { get; set; }
/// <summary>
/// 库存状态
/// </summary>
[Display(Name = "库存状态")]
[Required(ErrorMessage = "{0}是必填项", AllowEmptyStrings = true)]
public EnumInventoryStatus Status { get; set; }
/// <summary> /// <summary>
/// 托码 /// 托码
/// </summary> /// </summary>

26
be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Notes/DeliverNotes/IDeliverNoteAppService.cs

@ -1,4 +1,9 @@
using System.Threading;
using System.Threading.Tasks; using System.Threading.Tasks;
using Microsoft.AspNetCore.Mvc;
using Volo.Abp.Application.Dtos;
using Win_in.Sfs.Shared.Application.Contracts;
using Win_in.Sfs.Wms.Store.Domain;
namespace Win_in.Sfs.Wms.Store.Application.Contracts; namespace Win_in.Sfs.Wms.Store.Application.Contracts;
@ -9,4 +14,25 @@ public interface IDeliverNoteAppService :
Task<DeliverNoteDTO> CreateWithL7Async(DeliverNoteEditInput input); Task<DeliverNoteDTO> CreateWithL7Async(DeliverNoteEditInput input);
Task<PagedResultDto<DeliverNoteDTO>> GetForFisListAsync(
SfsStoreRequestInputBase sfsRequestDTO,
bool includeDetails = false,
CancellationToken cancellationToken = default);
Task<PagedResultDto<DeliverNoteDTO>> GetForNormalListAsync(
SfsStoreRequestInputBase sfsRequestDTO,
bool includeDetails = false,
CancellationToken cancellationToken = default);
Task<PagedResultDto<DeliverNoteDTO>> GetForRAWListAsync(
SfsStoreRequestInputBase sfsRequestDTO,
bool includeDetails = false,
CancellationToken cancellationToken = default);
Task<IActionResult> ExportForNormalAsync(SfsStoreRequestInputBase requestInput);
Task<IActionResult> ExportForRAWAsync(SfsExportRequestInput requestInput);
Task SumPrintAsync(string number);
} }

2
be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Notes/InspectNotes/IInspectNoteAppService.cs

@ -21,4 +21,6 @@ public interface IInspectNoteAppService : ISfsStoreMasterReadOnlyAppServiceBase
/// </summary> /// </summary>
/// <returns></returns> /// <returns></returns>
Task<List<InspectNoteDTO>> CreateSummaryDetailAndDetailByIdAsync(Guid id, InspectNoteEditInput input); Task<List<InspectNoteDTO>> CreateSummaryDetailAndDetailByIdAsync(Guid id, InspectNoteEditInput input);
Task<List<InspectNoteDetailDTO>> GetInspectNoteDetailByToDayTaskAsync();
} }

5
be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Notes/ItemTransformNotes/DTOs/ItemTransformNoteDTO.cs

@ -19,5 +19,8 @@ public class ItemTransformNoteDTO : SfsStoreDTOBase<ItemTransformNoteDetailDTO>,
[Display(Name = "任务单号")] [Display(Name = "任务单号")]
[StringLength(SfsEfCorePropertyConst.CodeLength, ErrorMessage = "{0}最多输入{1}个字符")] [StringLength(SfsEfCorePropertyConst.CodeLength, ErrorMessage = "{0}最多输入{1}个字符")]
public string JobNumber { get; set; } public string JobNumber { get; set; }
/// <summary>
/// 调整类型
/// </summary>
public string Type { get; set; }
} }

6
be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Notes/ItemTransformNotes/DTOs/ItemTransformNoteDetailDTO.cs

@ -214,7 +214,11 @@ public class ItemTransformNoteDetailDTO : SfsStoreDetailDTOBase
/// </summary> /// </summary>
[Display(Name = "目标ERP储位")] [Display(Name = "目标ERP储位")]
public string ToLocationErpCode { get; set; } public string ToLocationErpCode { get; set; }
/// <summary>
/// ERP库位
/// </summary>
[Display(Name = "ERP库位")]
public string LocationErpCode { get; set; }
/// <summary> /// <summary>
/// 目标仓库 /// 目标仓库
/// </summary> /// </summary>

1
be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Notes/ProductRecycleNotes/IProductRecycleNoteAppService.cs

@ -7,5 +7,4 @@ public interface IProductRecycleNoteAppService :
{ {
Task<ProductRecycleNoteDTO> CreateAsync(ProductRecycleNoteEditInput input); Task<ProductRecycleNoteDTO> CreateAsync(ProductRecycleNoteEditInput input);
Task<ProductRecycleNoteDTO> CreateWithL7Async(ProductRecycleNoteEditInput input);
} }

41
be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Notes/WipWarehouseAdjustNotes/DTOs/WipWarehouseAdjustNoteDTO.cs

@ -0,0 +1,41 @@
using System;
using System.ComponentModel.DataAnnotations;
namespace Win_in.Sfs.Wms.Store.Application.Contracts;
/// <summary>
/// 线边调整-实体DTO
/// </summary>
public class WipWarehouseAdjustNoteDTO : SfsStoreDTOBase<WipWarehouseAdjustNoteDetailDTO>, IHasNumber
{
/// <summary>
/// 线边仓调整申请单号
/// </summary>
[Display(Name = "线边仓调整申请单号")]
public string RequestNumber { get; set; }
/// <summary>
/// 任务ID
/// </summary>
[Display(Name = "任务ID")]
public string JobNumber { get; set; }
/// <summary>
/// 调整类型
/// </summary>
[Display(Name = "调整类型")]
public string Type { get; set; }
/// <summary>
/// 已确认
/// </summary>
[Display(Name = "已确认")]
public bool Confirmed { get; set; }
/// <summary>
/// 确认时间
/// </summary>
[Display(Name = "确认时间")]
public DateTime? ConfirmTime { get; set; }
}

24
be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Notes/WipWarehouseAdjustNotes/DTOs/WipWarehouseAdjustNoteDetailDTO.cs

@ -0,0 +1,24 @@
using System.ComponentModel.DataAnnotations;
using Win_in.Sfs.Shared.Domain;
namespace Win_in.Sfs.Wms.Store.Application.Contracts;
/// <summary>
/// 线边调整记录-明细表
/// </summary>
public class WipWarehouseAdjustNoteDetailDTO : SfsStoreDetailWithFromToDTOBase
{
/// <summary>
/// 原因
/// </summary>
[Display(Name = "调整原因")]
[StringLength(SfsEfCorePropertyConst.RemarkLength, ErrorMessage = "{0}最多输入{1}个字符")]
public string Reason { get; set; }
/// <summary>
/// 调整代码
/// </summary>
[Display(Name = "原因代码")]
[StringLength(SfsEfCorePropertyConst.RemarkLength, ErrorMessage = "{0}最多输入{1}个字符")]
public string ReasonCode { get; set; }
}

17
be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Notes/WipWarehouseAdjustNotes/IWipWarehouseAdjustNoteAppService.cs

@ -0,0 +1,17 @@
using System;
using System.Threading.Tasks;
namespace Win_in.Sfs.Wms.Store.Application.Contracts;
public interface IWipWarehouseAdjustNoteAppService :
ISfsStoreMasterReadOnlyAppServiceBase<WipWarehouseAdjustNoteDTO, SfsStoreRequestInputBase,
WipWarehouseAdjustNoteDetailDTO, SfsStoreRequestInputBase>
{
Task<WipWarehouseAdjustNoteDTO> ConfirmAsync(Guid id);
/// <summary>
/// 新增实体
/// </summary>
/// <param name="input">CreateInput</param>
Task<WipWarehouseAdjustNoteDTO> CreateAsync(WipWarehouseAdjustNoteEditInput input);
}

24
be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Notes/WipWarehouseAdjustNotes/Inputs/WipWarehouseAdjustNoteDetailInput.cs

@ -0,0 +1,24 @@
using System.ComponentModel.DataAnnotations;
using Win_in.Sfs.Shared.Domain;
namespace Win_in.Sfs.Wms.Store.Application.Contracts;
/// <summary>
/// 线边仓调整-明细表DTO
/// </summary>
public class WipWarehouseAdjustNoteDetailInput : SfsStoreDetailWithFromToInputBase
{
/// <summary>
/// 原因
/// </summary>
[Display(Name = "调整原因")]
[StringLength(SfsEfCorePropertyConst.RemarkLength, ErrorMessage = "{0}最多输入{1}个字符")]
public string Reason { get; set; }
/// <summary>
/// 调整代码
/// </summary>
[Display(Name = "原因代码")]
[StringLength(SfsEfCorePropertyConst.RemarkLength, ErrorMessage = "{0}最多输入{1}个字符")]
public string ReasonCode { get; set; }
}

48
be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Notes/WipWarehouseAdjustNotes/Inputs/WipWarehouseAdjustNoteEditInput.cs

@ -0,0 +1,48 @@
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
namespace Win_in.Sfs.Wms.Store.Application.Contracts;
/// <summary>
/// 新增和更新基础DTO
/// </summary>
public class WipWarehouseAdjustNoteEditInput : SfsStoreCreateOrUpdateInputBase
{
#region Base
/// <summary>
/// 已确认
/// </summary>
[Display(Name = "已确认")]
public bool Confirmed { get; set; }
#endregion
#region Update
/// <summary>
/// 确认时间
/// </summary>
[Display(Name = "确认时间")]
public DateTime? ConfirmTime { get; set; }
#endregion
/// <summary>
/// 线边仓调整申请单号
/// </summary>
[Display(Name = "线边仓调整申请单号")]
public string RequestNumber { get; set; }
/// <summary>
/// 任务ID
/// </summary>
[Display(Name = "任务ID")]
public string JobNumber { get; set; }
/// <summary>
/// 调拨类型
/// </summary>
[Display(Name = "调整类型")]
public string Type { get; set; }
[Display(Name = "详情")]
public List<WipWarehouseAdjustNoteDetailInput> Details { get; set; } = new List<WipWarehouseAdjustNoteDetailInput>();
}

71
be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Notes/WipWarehouseAdjustNotes/Inputs/WipWarehouseAdjustNoteImportInput.cs

@ -0,0 +1,71 @@
using System;
using System.ComponentModel.DataAnnotations;
using DocumentFormat.OpenXml.Drawing;
using Win_in.Sfs.Shared.Application.Contracts;
using Win_in.Sfs.Shared.Domain.Shared;
namespace Win_in.Sfs.Wms.Store.Application.Contracts;
public class WipWarehouseAdjustNoteImportInput : SfsStoreImportInputBase
{
/// <summary>
/// 调拨类型
/// </summary>
[Display(Name = "调拨类型")]
[Required(ErrorMessage = "{0}是必填项")]
[ImporterHeader(Name = "调拨类型")]
[ExporterHeader(DisplayName = "调拨类型")]
[ValueMapping("区域内调拨(储位内移库)", EnumTransSubType.Transfer_Inside)]
public string Type { get; set; }
/// <summary>
/// 已确认
/// </summary>
[Display(Name = "已确认")]
[ImporterHeader(IsIgnore = true)]
[Required(ErrorMessage = "{0}是必填项")]
public bool Confirmed { get; set; }
/// <summary>
/// 物料号
/// </summary>
[Display(Name = "物料号")]
[Required(ErrorMessage = "{0}是必填项")]
public string ItemCode { get; set; }
/// <summary>
/// 调拨数量
/// </summary>
[Display(Name = "调拨数量")]
[Required(ErrorMessage = "{0}是必填项")]
public decimal Qty { get; set; }
/// <summary>
/// 调出库位
/// </summary>
[Display(Name = "调出库位")]
[Required(ErrorMessage = "{0}是必填项")]
public string FromLocationCode { get; set; }
/// <summary>
/// 调入库位
/// </summary>
[Display(Name = "调入库位")]
[Required(ErrorMessage = "{0}是必填项")]
public string ToLocationCode { get; set; }
/// <summary>
/// 箱码
/// </summary>
[Display(Name = "箱码")]
[Required(ErrorMessage = "{0}是必填项")]
public string PackingCode { get; set; }
/// <summary>
/// 状态
/// </summary>
[Display(Name = "状态")]
[Required(ErrorMessage = "{0}是必填项")]
public EnumInventoryStatus Status { get; set; }
}

21
be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Notes/WipWarehouseAdjustNotes/WipWarehouseAdjustNotePermissions.cs

@ -0,0 +1,21 @@
using Volo.Abp.Authorization.Permissions;
using Win_in.Sfs.Wms.Store.Domain;
namespace Win_in.Sfs.Wms.Store.Application.Contracts;
public static class WipWarehouseAdjustNotePermissions
{
public const string Default = StorePermissions.GroupName + "." + nameof(WipWarehouseAdjustNote);
public const string Create = Default + "." + StorePermissions.CreateStr;
public const string Update = Default + "." + StorePermissions.UpdateStr;
public const string Delete = Default + "." + StorePermissions.DeleteStr;
public static void AddWipWarehouseAdjustNotePermission(this PermissionGroupDefinition permissionGroup)
{
var WipWarehouseAdjustNotePermission = permissionGroup.AddPermission(Default, StorePermissionDefinitionProvider.L(nameof(WipWarehouseAdjustNote)));
WipWarehouseAdjustNotePermission.AddChild(Create, StorePermissionDefinitionProvider.L(StorePermissions.CreateStr));
WipWarehouseAdjustNotePermission.AddChild(Update, StorePermissionDefinitionProvider.L(StorePermissions.UpdateStr));
WipWarehouseAdjustNotePermission.AddChild(Delete, StorePermissionDefinitionProvider.L(StorePermissions.DeleteStr));
}
}

2
be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Orders/PurchaseOrders/IPurchaseOrderAppService.cs

@ -37,4 +37,6 @@ public interface IPurchaseOrderAppService
/// <param name="inputs"></param> /// <param name="inputs"></param>
/// <returns></returns> /// <returns></returns>
Task<List<PurchaseOrderDTO>> CreateManyAsync(List<PurchaseOrderEditInput> inputs); Task<List<PurchaseOrderDTO>> CreateManyAsync(List<PurchaseOrderEditInput> inputs);
Task<List<PurchaseOrderDTO>> GetListBySupplierCodeAsync(string supplierCode, string itemCode);
} }

12
be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Orders/PurchaseOrders/Inputs/PurchaseOrderImportInput.cs

@ -20,12 +20,14 @@ public class PurchaseOrderImportInput : SfsStoreImportInputBase
/// </summary> /// </summary>
[Display(Name = "采购订单号")] [Display(Name = "采购订单号")]
[Key] [Key]
[Required(ErrorMessage = "{0}是必填项")]
public string Number { get; set; } public string Number { get; set; }
/// <summary> /// <summary>
/// 供应商代码 /// 供应商代码
/// </summary> /// </summary>
[Display(Name = "供应商代码")] [Display(Name = "供应商代码")]
[Required(ErrorMessage = "{0}是必填项")]
public string SupplierCode { get; set; } public string SupplierCode { get; set; }
/// <summary> /// <summary>
@ -52,6 +54,7 @@ public class PurchaseOrderImportInput : SfsStoreImportInputBase
/// 订单日期 /// 订单日期
/// </summary> /// </summary>
[Display(Name = "订单日期")] [Display(Name = "订单日期")]
[Required(ErrorMessage = "{0}是必填项")]
[ImporterHeader(Name = "订单日期", Format = "yyyy/MM/dd")] [ImporterHeader(Name = "订单日期", Format = "yyyy/MM/dd")]
[ExporterHeader(DisplayName = "订单日期", Format = "yyyy/MM/dd")] [ExporterHeader(DisplayName = "订单日期", Format = "yyyy/MM/dd")]
public DateTime OrderDate { get; set; } public DateTime OrderDate { get; set; }
@ -60,6 +63,7 @@ public class PurchaseOrderImportInput : SfsStoreImportInputBase
/// 截止日期 /// 截止日期
/// </summary> /// </summary>
[Display(Name = "截止日期")] [Display(Name = "截止日期")]
[Required(ErrorMessage = "{0}是必填项")]
[ImporterHeader(Name = "截止日期", Format = "yyyy/MM/dd")] [ImporterHeader(Name = "截止日期", Format = "yyyy/MM/dd")]
[ExporterHeader(DisplayName = "截止日期", Format = "yyyy/MM/dd")] [ExporterHeader(DisplayName = "截止日期", Format = "yyyy/MM/dd")]
public DateTime DueDate { get; set; } public DateTime DueDate { get; set; }
@ -81,18 +85,21 @@ public class PurchaseOrderImportInput : SfsStoreImportInputBase
/// 仓库代码 /// 仓库代码
/// </summary> /// </summary>
[Display(Name = "仓库代码")] [Display(Name = "仓库代码")]
[Required(ErrorMessage = "{0}是必填项")]
public string WarehouseCode { get; set; } public string WarehouseCode { get; set; }
/// <summary> /// <summary>
/// 明细-订单行 /// 明细-订单行
/// </summary> /// </summary>
[Display(Name = "明细-订单行")] [Display(Name = "明细-订单行")]
[Required(ErrorMessage = "{0}是必填项")]
public string PoLine { get; set; } public string PoLine { get; set; }
/// <summary> /// <summary>
/// 明细-物品代码 /// 明细-物品代码
/// </summary> /// </summary>
[Display(Name = "明细-物品代码")] [Display(Name = "明细-物品代码")]
[Required(ErrorMessage = "{0}是必填项")]
public string ItemCode { get; set; } public string ItemCode { get; set; }
/// <summary> /// <summary>
@ -106,6 +113,7 @@ public class PurchaseOrderImportInput : SfsStoreImportInputBase
/// 数量计量单位 /// 数量计量单位
/// </summary> /// </summary>
[Display(Name = "明细-数量计量单位")] [Display(Name = "明细-数量计量单位")]
[Required(ErrorMessage = "{0}是必填项")]
public string Uom { get; set; } public string Uom { get; set; }
/// <summary> /// <summary>
@ -126,6 +134,7 @@ public class PurchaseOrderImportInput : SfsStoreImportInputBase
/// 明细-供应商包装单位 /// 明细-供应商包装单位
/// </summary> /// </summary>
[Display(Name = "明细-供应商包装单位")] [Display(Name = "明细-供应商包装单位")]
[Required(ErrorMessage = "{0}是必填项")]
public string SupplierPackUom { get; set; } public string SupplierPackUom { get; set; }
/// <summary> /// <summary>
@ -146,12 +155,14 @@ public class PurchaseOrderImportInput : SfsStoreImportInputBase
/// 筹措员代码 /// 筹措员代码
/// </summary> /// </summary>
[Display(Name = "明细-筹措员代码")] [Display(Name = "明细-筹措员代码")]
[Required(ErrorMessage = "{0}是必填项")]
public string PlanUserCode { get; set; } public string PlanUserCode { get; set; }
/// <summary> /// <summary>
/// 生产批次 /// 生产批次
/// </summary> /// </summary>
[Display(Name = "明细-生产批次")] [Display(Name = "明细-生产批次")]
[Required(ErrorMessage = "{0}是必填项")]
public string Lot { get; set; } public string Lot { get; set; }
/// <summary> /// <summary>
@ -182,6 +193,7 @@ public class PurchaseOrderImportInput : SfsStoreImportInputBase
/// 过期时间 /// 过期时间
/// </summary> /// </summary>
[Display(Name = "明细-过期时间")] [Display(Name = "明细-过期时间")]
[Required(ErrorMessage = "{0}是必填项")]
public DateTime ExpireDate { get; set; } public DateTime ExpireDate { get; set; }
/// <summary> /// <summary>

3
be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Permissions/StorePermissionDefinitionProvider.cs

@ -79,6 +79,9 @@ public class StorePermissionDefinitionProvider : PermissionDefinitionProvider
storeGroup.AddReportPermission(); storeGroup.AddReportPermission();
storeGroup.AddDashboardPermission(); storeGroup.AddDashboardPermission();
storeGroup.AddWipWarehouseAdjustRequestPermission();
storeGroup.AddWipWarehouseAdjustNotePermission();
#region Jobs #region Jobs
storeGroup.AddPurchaseReceiptJobPermission(); storeGroup.AddPurchaseReceiptJobPermission();

2
be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Plans/SupplierAsns/ISupplierAsnAppService.cs

@ -34,4 +34,6 @@ public interface ISupplierAsnAppService
Task<string> GenerateSupplierAsnNumberAsync(DateTime activeDate); Task<string> GenerateSupplierAsnNumberAsync(DateTime activeDate);
Task UpdateStatusAsync(string asnNumber, EnumSupplierAsnStatus status); Task UpdateStatusAsync(string asnNumber, EnumSupplierAsnStatus status);
Task<List<SupplierAsnDTO>> GetForTodayListAsync();
} }

3
be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Requests/ProductReceiptRequests/Inputs/ProductReceiptRequestEditInput.cs

@ -2,6 +2,7 @@ using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.ComponentModel.DataAnnotations; using System.ComponentModel.DataAnnotations;
using Win_in.Sfs.Shared.Domain; using Win_in.Sfs.Shared.Domain;
using Win_in.Sfs.Shared.Domain.Shared;
namespace Win_in.Sfs.Wms.Store.Application.Contracts; namespace Win_in.Sfs.Wms.Store.Application.Contracts;
@ -70,7 +71,7 @@ public class ProductReceiptRequestEditInput : SfsStoreRequestCreateOrUpdateInput
/// 类型 /// 类型
/// </summary> /// </summary>
[Display(Name = "类型")] [Display(Name = "类型")]
public string EnumProductReceiptType { get; set; } public EnumProductReceiptType Type { get; set; }
/// <summary> /// <summary>
/// 明细列表 /// 明细列表

6
be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Requests/ProductionReturnRequests/Inputs/ProductionReturnRequestDetailInput.cs

@ -0,0 +1,6 @@
namespace Win_in.Sfs.Wms.Store.Application.Contracts;
public class ProductionReturnRequestDetailInput : SfsStoreDetailWithFromToInputBase
{
}

2
be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Requests/ProductionReturnRequests/Inputs/ProductionReturnRequestEditInput.cs

@ -24,6 +24,6 @@ public class ProductionReturnRequestEditInput : SfsStoreRequestCreateOrUpdateInp
/// 明细列表 /// 明细列表
/// </summary> /// </summary>
[Display(Name = "明细列表")] [Display(Name = "明细列表")]
public List<SfsStoreDetailWithFromToInputBase> Details { get; set; } = new List<SfsStoreDetailWithFromToInputBase>(); public List<ProductionReturnRequestDetailInput> Details { get; set; } = new List<ProductionReturnRequestDetailInput>();
#endregion #endregion
} }

2
be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Requests/TransferRequests/Inputs/TransferRequestImportInput.cs

@ -14,6 +14,8 @@ public class TransferRequestImportInput : SfsStoreImportInputBase
[Required(ErrorMessage = "{0}是必填项")] [Required(ErrorMessage = "{0}是必填项")]
[ImporterHeader(Name = "调拨类型")] [ImporterHeader(Name = "调拨类型")]
[ExporterHeader(DisplayName = "调拨类型")] [ExporterHeader(DisplayName = "调拨类型")]
[ValueMapping("区域间调拨(储位调拨)", EnumTransSubType.Transfer_Area)]
[ValueMapping("线边调拨(线边仓调拨)", EnumTransSubType.Transfer_WIP)]
[ValueMapping("客户库位调拨(客户储位调拨)", EnumTransSubType.Transfer_Customer)] [ValueMapping("客户库位调拨(客户储位调拨)", EnumTransSubType.Transfer_Customer)]
public string Type { get; set; } public string Type { get; set; }

15
be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Requests/WipWarehouseAdjustRequests/DTOs/WipWarehouseAdjustRequestDTO.cs

@ -0,0 +1,15 @@
using System.ComponentModel.DataAnnotations;
namespace Win_in.Sfs.Wms.Store.Application.Contracts;
/// <summary>
/// 线边调整-实体DTO
/// </summary>
public class WipWarehouseAdjustRequestDTO : SfsStoreRequestDTOBase<WipWarehouseAdjustRequestDetailDTO>, IHasNumber
{
/// <summary>
/// 调整类型
/// </summary>
[Display(Name = "调整类型")]
public string Type { get; set; }
}

24
be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Requests/WipWarehouseAdjustRequests/DTOs/WipWarehouseAdjustRequestDetailDTO.cs

@ -0,0 +1,24 @@
using System.ComponentModel.DataAnnotations;
using Win_in.Sfs.Shared.Domain;
namespace Win_in.Sfs.Wms.Store.Application.Contracts;
/// <summary>
/// 线边调整-明细表
/// </summary>
public class WipWarehouseAdjustRequestDetailDTO : SfsStoreDetailWithFromToDTOBase
{
/// <summary>
/// 原因
/// </summary>
[Display(Name = "调整原因")]
[StringLength(SfsEfCorePropertyConst.RemarkLength, ErrorMessage = "{0}最多输入{1}个字符")]
public string Reason { get; set; }
/// <summary>
/// 调整代码
/// </summary>
[Display(Name = "原因代码")]
[StringLength(SfsEfCorePropertyConst.RemarkLength, ErrorMessage = "{0}最多输入{1}个字符")]
public string ReasonCode { get; set; }
}

7
be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Requests/WipWarehouseAdjustRequests/IWipWarehouseAdjustRequestAppService.cs

@ -0,0 +1,7 @@
namespace Win_in.Sfs.Wms.Store.Application.Contracts;
public interface IWipWarehouseAdjustRequestAppService
: ISfsStoreRequestMasterAppServiceBase<WipWarehouseAdjustRequestDTO, SfsStoreRequestInputBase,
WipWarehouseAdjustRequestEditInput, WipWarehouseAdjustRequestDetailDTO, SfsStoreRequestInputBase>
{
}

24
be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Requests/WipWarehouseAdjustRequests/Inputs/WipWarehouseAdjustRequestDetailInput.cs

@ -0,0 +1,24 @@
using System.ComponentModel.DataAnnotations;
using Win_in.Sfs.Shared.Domain;
namespace Win_in.Sfs.Wms.Store.Application.Contracts;
/// <summary>
/// 库存转移记录-明细表
/// </summary>
public class WipWarehouseAdjustRequestDetailInput : SfsStoreDetailWithFromToInputBase
{
/// <summary>
/// 原因
/// </summary>
[Display(Name = "调整原因")]
[StringLength(SfsEfCorePropertyConst.RemarkLength, ErrorMessage = "{0}最多输入{1}个字符")]
public string Reason { get; set; }
/// <summary>
/// 调整代码
/// </summary>
[Display(Name = "原因代码")]
[StringLength(SfsEfCorePropertyConst.RemarkLength, ErrorMessage = "{0}最多输入{1}个字符")]
public string ReasonCode { get; set; }
}

26
be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Requests/WipWarehouseAdjustRequests/Inputs/WipWarehouseAdjustRequestEditInput.cs

@ -0,0 +1,26 @@
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
namespace Win_in.Sfs.Wms.Store.Application.Contracts;
/// <summary>
/// 新增和更新基础DTO
/// </summary>
public class WipWarehouseAdjustRequestEditInput : SfsStoreRequestCreateOrUpdateInputBase
{
#region Base
/// <summary>
/// 调拨类型
/// </summary>
[Display(Name = "调整类型")]
public string Type { get; set; }
/// <summary>
/// 明细列表
/// </summary>
[Display(Name = "明细列表")]
public List<WipWarehouseAdjustRequestDetailInput> Details { get; set; }
#endregion
}

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

Loading…
Cancel
Save