Browse Source

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

dev_DY_CC
郑勃旭 1 year ago
parent
commit
9bf57831a3
  1. 6
      be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.Dapper.Fawtyg.Tyrp/DataExchangeDapperFawtygModule.cs
  2. 13
      be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.Dapper.Fawtyg.Tyrp/ErpLocation/ErpLocationLinq2DbRepository.cs
  3. 12
      be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.Dapper.Fawtyg.Tyrp/ErpLocationItems/ErpLocationItemLinq2DbRepository.cs
  4. 7
      be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.Dapper.Fawtyg.Tyrp/TyrpDb.cs
  5. 22
      be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.Domain.Fawtyg.Tyrp/ErpLocation/ErpLocationManager.cs
  6. 6
      be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.Domain.Fawtyg.Tyrp/ErpLocation/IErpLocationLinq2DbRepository.cs
  7. 9
      be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.Domain.Fawtyg.Tyrp/ErpLocation/IErpLocationManager.cs
  8. 21
      be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.Domain.Fawtyg.Tyrp/ErpLocation/locmout.cs
  9. 22
      be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.Domain.Fawtyg.Tyrp/ErpLocationItems/ErpLocationItemManager.cs
  10. 6
      be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.Domain.Fawtyg.Tyrp/ErpLocationItems/IErpLocationItemLinq2DbRepository.cs
  11. 8
      be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.Domain.Fawtyg.Tyrp/ErpLocationItems/IErpLocationItemManager.cs
  12. 25
      be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.Domain.Fawtyg.Tyrp/ErpLocationItems/locdout.cs
  13. 69
      be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.Fawtyg.TyrpAgent/Incoming/ErpLocationConverter.cs
  14. 76
      be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.Fawtyg.TyrpAgent/Incoming/ErpLocationItemConverter.cs
  15. 109
      be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.Fawtyg.TyrpAgent/Incoming/ErpLocationItemReader.cs
  16. 106
      be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.Fawtyg.TyrpAgent/Incoming/ErpLocationReader.cs
  17. 9
      be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.Fawtyg.TyrpAgent/Incoming/TyrpIncomingBackgroundWorker.cs
  18. 6
      be/DataExchange/src/Win_in.Sfs.Wms.DataExchange.Agent/IncomingToWmsExtensions.cs
  19. 5
      be/DataExchange/src/Win_in.Sfs.Wms.DataExchange.Agent/IncomingToWmsWorker.cs
  20. 48
      be/DataExchange/src/Win_in.Sfs.Wms.DataExchange.Application.Contracts/WMS/ErpLocation/ErpLocationExchangeDto.cs
  21. 23
      be/DataExchange/src/Win_in.Sfs.Wms.DataExchange.Application.Contracts/WMS/ErpLocationItem/ErpLocationItem.cs
  22. 35
      be/DataExchange/src/Win_in.Sfs.Wms.DataExchange.Application.Contracts/Win_in.Sfs.Wms.DataExchange.Application.Contracts.xml
  23. 7
      be/DataExchange/src/Win_in.Sfs.Wms.DataExchange.Domain.Shared/Enums/EnumIncomingDataType.cs
  24. 4
      be/Hosts/Wms.Host/Win_in.Sfs.Wms.Store.HttpApi.Host/StoreHttpApiHostModule.cs
  25. 1
      be/Hosts/Wms.Host/Win_in.Sfs.Wms.Store.HttpApi.Host/Win_in.Sfs.Wms.Store.HttpApi.Host.csproj
  26. 9
      be/Hosts/WmsPda.Host/Win_in.Sfs.Wms.Pda.Host/Controllers/Jobs/ProductionReturnRequestController .cs
  27. 6
      be/Hosts/WmsPda.Host/Win_in.Sfs.Wms.Pda.Host/Controllers/Stores/CustomerReturnNoteController.cs
  28. 35
      be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application.Contracts/Boms/DTOs/BomComponentDTO.cs
  29. 6
      be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application.Contracts/Boms/IBomAppService.cs
  30. 25
      be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application.Contracts/ErpLocationItems/DTOs/ErpLocationItemDTO.cs
  31. 21
      be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application.Contracts/ErpLocationItems/ErpLocationItemPermissions.cs
  32. 11
      be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application.Contracts/ErpLocationItems/IErpLocationItemAppService.cs
  33. 26
      be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application.Contracts/ErpLocationItems/Inputs/ErpLocationItemEditInput.cs
  34. 27
      be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application.Contracts/ErpLocationItems/Inputs/ErpLocationItemImportInput.cs
  35. 1
      be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application.Contracts/Permissions/BasedataPermissionDefinitionProvider.cs
  36. 1
      be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application.Contracts/PositionCode/PositionCodePermissions.cs
  37. 2
      be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application.Contracts/Settings/BasedataSettingsDto.cs
  38. 1
      be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application.Contracts/Settings/BasedataSettingsUpdateInput.cs
  39. 1
      be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application/BasedataApplicationAutoMapperProfile.cs
  40. 1
      be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application/Bases/SfsBaseDataAppServiceBase.cs
  41. 52
      be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application/Boms/BomAppService.cs
  42. 6
      be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application/Boms/BomAutoMapperProfile.cs
  43. 113
      be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application/ErpLocationItems/ErpLocationItemAppService.cs
  44. 34
      be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application/ErpLocationItems/ErpLocationItemAutoMapperProfile.cs
  45. 0
      be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application/PositionCodes/PositionCodeAppService.cs
  46. 0
      be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application/PositionCodes/PositionCodeAutoMapperProfile.cs
  47. 3
      be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application/Setttings/BasedataSettingsAppService.cs
  48. 73
      be/Modules/BaseData/src/Win_in.Sfs.Basedata.Domain.Shared/Commons/Cache.cs
  49. 24
      be/Modules/BaseData/src/Win_in.Sfs.Basedata.Domain.Shared/Enum/EnumBomSelectedType.cs
  50. 2
      be/Modules/BaseData/src/Win_in.Sfs.Basedata.Domain/Boms/Bom.cs
  51. 24
      be/Modules/BaseData/src/Win_in.Sfs.Basedata.Domain/Boms/BomComponent.cs
  52. 149
      be/Modules/BaseData/src/Win_in.Sfs.Basedata.Domain/Boms/BomManager.cs
  53. 4
      be/Modules/BaseData/src/Win_in.Sfs.Basedata.Domain/Boms/IBomManager.cs
  54. 60
      be/Modules/BaseData/src/Win_in.Sfs.Basedata.Domain/Caches/Cache.cs
  55. 21
      be/Modules/BaseData/src/Win_in.Sfs.Basedata.Domain/ErpLocationItems/ErpLocationItem.cs
  56. 31
      be/Modules/BaseData/src/Win_in.Sfs.Basedata.Domain/ErpLocationItems/ErpLocationItemManager.cs
  57. 9
      be/Modules/BaseData/src/Win_in.Sfs.Basedata.Domain/ErpLocationItems/IErpLocationItemManager.cs
  58. 9
      be/Modules/BaseData/src/Win_in.Sfs.Basedata.Domain/ErpLocationItems/IErpLocationItemRepository.cs
  59. 0
      be/Modules/BaseData/src/Win_in.Sfs.Basedata.Domain/PositionCodes/IPositionCodeManager.cs
  60. 0
      be/Modules/BaseData/src/Win_in.Sfs.Basedata.Domain/PositionCodes/IPositionCodeRepository.cs
  61. 0
      be/Modules/BaseData/src/Win_in.Sfs.Basedata.Domain/PositionCodes/PositionCode.cs
  62. 0
      be/Modules/BaseData/src/Win_in.Sfs.Basedata.Domain/PositionCodes/PositionCodeManager.cs
  63. 5
      be/Modules/BaseData/src/Win_in.Sfs.Basedata.Domain/Settings/BasedataSettingDefinitionProvider.cs
  64. 6
      be/Modules/BaseData/src/Win_in.Sfs.Basedata.Domain/Settings/BasedataSettings.cs
  65. 1
      be/Modules/BaseData/src/Win_in.Sfs.Basedata.Domain/Win_in.Sfs.Basedata.Domain.csproj
  66. 1
      be/Modules/BaseData/src/Win_in.Sfs.Basedata.EntityFrameworkCore/BasedataDbContext.cs
  67. 1
      be/Modules/BaseData/src/Win_in.Sfs.Basedata.EntityFrameworkCore/BasedataDbContextModelCreatingExtensions.cs
  68. 1
      be/Modules/BaseData/src/Win_in.Sfs.Basedata.EntityFrameworkCore/BasedataEntityFrameworkCoreModule.cs
  69. 2
      be/Modules/BaseData/src/Win_in.Sfs.Basedata.EntityFrameworkCore/Equipments/EquipmentDbContextModelCreatingExtensions.cs
  70. 35
      be/Modules/BaseData/src/Win_in.Sfs.Basedata.EntityFrameworkCore/ErpLocationItems/ErpLocationItemDbContextModelCreatingExtensions.cs
  71. 25
      be/Modules/BaseData/src/Win_in.Sfs.Basedata.EntityFrameworkCore/ErpLocationItems/ErpLocationItemEfCoreRepository.cs
  72. 1
      be/Modules/BaseData/src/Win_in.Sfs.Basedata.EntityFrameworkCore/IBasedataDbContext.cs
  73. 0
      be/Modules/BaseData/src/Win_in.Sfs.Basedata.EntityFrameworkCore/PositionCodes/PositionCodeDbContextModelCreatingExtensions.cs
  74. 0
      be/Modules/BaseData/src/Win_in.Sfs.Basedata.EntityFrameworkCore/PositionCodes/PositionCodeEfCoreRepository.cs
  75. 5
      be/Modules/Inventory/src/Win_in.Sfs.Wms.Inventory.Application/Balances/BalanceAppService.cs
  76. 36
      be/Modules/Inventory/src/Win_in.Sfs.Wms.Inventory.Domain.Acl/ErpLocationItem/ErpLocationItemAclService.cs
  77. 9
      be/Modules/Inventory/src/Win_in.Sfs.Wms.Inventory.Domain.Acl/ErpLocationItem/IErpLocationItemAclService.cs
  78. 25
      be/Modules/Inventory/src/Win_in.Sfs.Wms.Inventory.Domain/Balances/BalanceManager.cs
  79. 5
      be/Modules/Shared/src/Win_in.Sfs.Shared.Domain.Shared/Enums/Basedata/EnumLocationType.cs
  80. 4
      be/Modules/Shared/src/Win_in.Sfs.Shared.Domain.Shared/Enums/Inventory/EnumTransType.cs
  81. 37
      be/Modules/Shared/src/Win_in.Sfs.Shared.Domain.Shared/Enums/Store/Statuses/EnumMesStatus.cs
  82. 17
      be/Modules/Shared/src/Win_in.Sfs.Shared.Domain.Shared/Enums/Store/Statuses/EnumRequestStatus.cs
  83. 15
      be/Modules/Shared/src/Win_in.Sfs.Shared.Domain.Shared/Enums/Store/Types/EnumMesType.cs
  84. 46
      be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Jobs/ThirdLocationJobs/DTOs/ThirdLocationJobDTO.cs
  85. 112
      be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Jobs/ThirdLocationJobs/DTOs/ThirdLocationJobDetailDTO.cs
  86. 26
      be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Jobs/ThirdLocationJobs/IThirdLocationJobAppService.cs
  87. 6
      be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Jobs/ThirdLocationJobs/Inputs/ThirdLocationJobCheckInput.cs
  88. 134
      be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Jobs/ThirdLocationJobs/Inputs/ThirdLocationJobDetailInput.cs
  89. 82
      be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Jobs/ThirdLocationJobs/Inputs/ThirdLocationJobEditInput.cs
  90. 27
      be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Jobs/ThirdLocationJobs/ThirdLocationJobPermissions.cs
  91. 20
      be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Notes/CustomerProductionReturnNotes/CustomerProductionReturnNotePermissions.cs
  92. 29
      be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Notes/CustomerProductionReturnNotes/DTOs/CustomerProductionReturnNoteDTO.cs
  93. 9
      be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Notes/CustomerProductionReturnNotes/DTOs/CustomerProductionReturnNoteDetailDTO.cs
  94. 9
      be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Notes/CustomerProductionReturnNotes/ICustomerProductionReturnNoteAppService.cs
  95. 9
      be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Notes/CustomerProductionReturnNotes/Inputs/CustomerProductionReturnNoteDetailInput.cs
  96. 47
      be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Notes/CustomerProductionReturnNotes/Inputs/CustomerProductionReturnNoteEditInput.cs
  97. 34
      be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Notes/CustomerProductionReturnNotes/Inputs/CustomerProductionReturnNoteImportInput.cs
  98. 30
      be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Notes/MesNotes/DTOs/MesRecordDTO.cs
  99. 13
      be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Notes/MesNotes/DTOs/MesRecordDetailDTO.cs
  100. 17
      be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Notes/MesNotes/IMesRecordAppService.cs

6
be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.Dapper.Fawtyg.Tyrp/DataExchangeDapperFawtygModule.cs

@ -10,6 +10,9 @@ using Win_in.Sfs.Wms.DataExchange.LinqToDB.Fawtyg.Tyrp.Backflushs;
using Win_in.Sfs.Wms.DataExchange.LinqToDB.Fawtyg.Tyrp.Boms; using Win_in.Sfs.Wms.DataExchange.LinqToDB.Fawtyg.Tyrp.Boms;
using Win_in.Sfs.Wms.DataExchange.LinqToDB.Fawtyg.Tyrp.Customers; using Win_in.Sfs.Wms.DataExchange.LinqToDB.Fawtyg.Tyrp.Customers;
using Win_in.Sfs.Wms.DataExchange.LinqToDB.Fawtyg.Tyrp.Dictpjs; using Win_in.Sfs.Wms.DataExchange.LinqToDB.Fawtyg.Tyrp.Dictpjs;
using Win_in.Sfs.Wms.DataExchange.LinqToDB.Fawtyg.Tyrp.ErpLocationItems;
using Win_in.Sfs.Wms.DataExchange.LinqToDB.Fawtyg.Tyrp.ErpLocations;
using Win_in.Sfs.Wms.DataExchange.LinqToDB.Fawtyg.Tyrp.InterfaceCalendars;
using Win_in.Sfs.Wms.DataExchange.LinqToDB.Fawtyg.Tyrp.Products; using Win_in.Sfs.Wms.DataExchange.LinqToDB.Fawtyg.Tyrp.Products;
using Win_in.Sfs.Wms.DataExchange.LinqToDB.Fawtyg.Tyrp.PurchasePrices; using Win_in.Sfs.Wms.DataExchange.LinqToDB.Fawtyg.Tyrp.PurchasePrices;
using Win_in.Sfs.Wms.DataExchange.LinqToDB.Fawtyg.Tyrp.SalePrices; using Win_in.Sfs.Wms.DataExchange.LinqToDB.Fawtyg.Tyrp.SalePrices;
@ -46,8 +49,11 @@ public class DataExchangeDapperFawtygModule : AbpModule
context.Services.AddTransient<IProductLinq2DbRepository, ProductLinq2DbRepository>(); context.Services.AddTransient<IProductLinq2DbRepository, ProductLinq2DbRepository>();
context.Services.AddTransient<IDictpjLinq2DbRepository, DictpjLinq2DbRepository>(); context.Services.AddTransient<IDictpjLinq2DbRepository, DictpjLinq2DbRepository>();
context.Services.AddTransient<ICustomerLinq2DbRepository, CustomerLinq2DbRepository>(); context.Services.AddTransient<ICustomerLinq2DbRepository, CustomerLinq2DbRepository>();
context.Services.AddTransient<IErpLocationLinq2DbRepository, ErpLocationLinq2DbRepository>();
context.Services.AddTransient<IBackfluLinq2DbRepository, BackfluLinq2DbRepository>(); context.Services.AddTransient<IBackfluLinq2DbRepository, BackfluLinq2DbRepository>();
context.Services.AddTransient<IPurchasePriceLinq2DbRepository, PurchasePriceLinq2DbRepository>(); context.Services.AddTransient<IPurchasePriceLinq2DbRepository, PurchasePriceLinq2DbRepository>();
context.Services.AddTransient<ISalePriceLinq2DbRepository, SalePriceLinq2DbRepository>(); context.Services.AddTransient<ISalePriceLinq2DbRepository, SalePriceLinq2DbRepository>();
context.Services.AddTransient<IErpLocationItemLinq2DbRepository, ErpLocationItemLinq2DbRepository>();
context.Services.AddTransient<IInterfaceCalendarLinq2DbRepository, InterfaceCalendarLinq2DbRepository>();
} }
} }

13
be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.Dapper.Fawtyg.Tyrp/ErpLocation/ErpLocationLinq2DbRepository.cs

@ -0,0 +1,13 @@
using Win_in.Sfs.Wms.DataExchange.Dapper.Fawtyg.Tyrp;
using Win_in.Sfs.Wms.DataExchange.Dapper.Fawtyg.Tyrp.Bases;
using Win_in.Sfs.Wms.DataExchange.Domain.Fawtyg.Tyrp;
namespace Win_in.Sfs.Wms.DataExchange.LinqToDB.Fawtyg.Tyrp.ErpLocations;
public class ErpLocationLinq2DbRepository : Linq2DbCrudRepository<locmout>, IErpLocationLinq2DbRepository
{
public ErpLocationLinq2DbRepository(TyrpDb tyrpDb) : base(tyrpDb)
{
}
}

12
be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.Dapper.Fawtyg.Tyrp/ErpLocationItems/ErpLocationItemLinq2DbRepository.cs

@ -0,0 +1,12 @@
using Win_in.Sfs.Wms.DataExchange.Dapper.Fawtyg.Tyrp.Bases;
using Win_in.Sfs.Wms.DataExchange.Dapper.Fawtyg.Tyrp;
using Win_in.Sfs.Wms.DataExchange.Domain.Fawtyg.Tyrp;
namespace Win_in.Sfs.Wms.DataExchange.LinqToDB.Fawtyg.Tyrp.ErpLocationItems;
public class ErpLocationItemLinq2DbRepository : Linq2DbCrudRepository<locdout>, IErpLocationItemLinq2DbRepository
{
public ErpLocationItemLinq2DbRepository(TyrpDb tyrpDb) : base(tyrpDb)
{
}
}

7
be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.Dapper.Fawtyg.Tyrp/TyrpDb.cs

@ -18,10 +18,11 @@ public class TyrpDb : DataConnection, ITransientDependency
public ITable<vmout> Supplier => this.GetTable<vmout>(); public ITable<vmout> Supplier => this.GetTable<vmout>();
public ITable<pjtmout> Dictpj => this.GetTable<pjtmout>(); public ITable<pjtmout> Dictpj => this.GetTable<pjtmout>();
public ITable<cmout> Customer => this.GetTable<cmout>(); public ITable<cmout> Customer => this.GetTable<cmout>();
public ITable<locmout> ErpLocation => this.GetTable<locmout>();
public ITable<ismout> PurchasePrice => this.GetTable<ismout>(); public ITable<ismout> PurchasePrice => this.GetTable<ismout>();
public ITable<spriceout> SalePrice => this.GetTable<spriceout>(); public ITable<spriceout> SalePrice => this.GetTable<spriceout>();
public ITable<scmout> Backflu => this.GetTable<scmout>(); public ITable<scmout> Backflu => this.GetTable<scmout>();
public ITable<locdout> ErpLocationItem => this.GetTable<locdout>();
public ITable<mes_product> mes_product => this.GetTable<mes_product>(); public ITable<mes_product> Product => this.GetTable<mes_product>();
public ITable<mes_period> InterfaceCalendar => this.GetTable<mes_period>();
} }

22
be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.Domain.Fawtyg.Tyrp/ErpLocation/ErpLocationManager.cs

@ -0,0 +1,22 @@
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Volo.Abp.Domain.Services;
namespace Win_in.Sfs.Wms.DataExchange.Domain.Fawtyg.Tyrp;
public class ErpLocationManager : DomainService, IErpLocationManager
{
private readonly IErpLocationLinq2DbRepository _repository;
public ErpLocationManager(IErpLocationLinq2DbRepository repository)
{
_repository = repository;
}
public virtual async Task<List<locmout>> GetToBeProcessedListAsync()
{
var products = await _repository.GetListAsync().ConfigureAwait(false);
return products.ToList();
}
}

6
be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.Domain.Fawtyg.Tyrp/ErpLocation/IErpLocationLinq2DbRepository.cs

@ -0,0 +1,6 @@
namespace Win_in.Sfs.Wms.DataExchange.Domain.Fawtyg.Tyrp;
public interface IErpLocationLinq2DbRepository : ILinq2DbRepository<locmout>
{
}

9
be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.Domain.Fawtyg.Tyrp/ErpLocation/IErpLocationManager.cs

@ -0,0 +1,9 @@
using System.Collections.Generic;
using System.Threading.Tasks;
namespace Win_in.Sfs.Wms.DataExchange.Domain.Fawtyg.Tyrp;
public interface IErpLocationManager
{
Task<List<locmout>> GetToBeProcessedListAsync();
}

21
be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.Domain.Fawtyg.Tyrp/ErpLocation/locmout.cs

@ -0,0 +1,21 @@
using Volo.Abp.Domain.Entities;
namespace Win_in.Sfs.Wms.DataExchange.Domain.Fawtyg.Tyrp;
public class locmout : Entity
{
/// <summary>
/// 储位
/// </summary>
public string locmout_loc { get; set; }
/// <summary>
/// 储位类型
/// </summary>
public string locmout_stat2 { get; set; }
public override object[] GetKeys()
{
return new object[] { locmout_loc };
}
}

22
be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.Domain.Fawtyg.Tyrp/ErpLocationItems/ErpLocationItemManager.cs

@ -0,0 +1,22 @@
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Volo.Abp.Domain.Services;
namespace Win_in.Sfs.Wms.DataExchange.Domain.Fawtyg.Tyrp;
public class ErpLocationItemManager : DomainService, IErpLocationItemManager
{
private readonly IErpLocationItemLinq2DbRepository _repository;
public ErpLocationItemManager(IErpLocationItemLinq2DbRepository repository)
{
_repository = repository;
}
public virtual async Task<List<locdout>> GetToBeProcessedListAsync()
{
var locdouts = await _repository.GetListAsync().ConfigureAwait(false);
return locdouts.ToList();
}
}

6
be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.Domain.Fawtyg.Tyrp/ErpLocationItems/IErpLocationItemLinq2DbRepository.cs

@ -0,0 +1,6 @@
namespace Win_in.Sfs.Wms.DataExchange.Domain.Fawtyg.Tyrp;
public interface IErpLocationItemLinq2DbRepository : ILinq2DbRepository<locdout>
{
}

8
be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.Domain.Fawtyg.Tyrp/ErpLocationItems/IErpLocationItemManager.cs

@ -0,0 +1,8 @@
using System.Collections.Generic;
using System.Threading.Tasks;
namespace Win_in.Sfs.Wms.DataExchange.Domain.Fawtyg.Tyrp;
public interface IErpLocationItemManager
{
Task<List<locdout>> GetToBeProcessedListAsync();
}

25
be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.Domain.Fawtyg.Tyrp/ErpLocationItems/locdout.cs

@ -0,0 +1,25 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Volo.Abp.Domain.Entities;
namespace Win_in.Sfs.Wms.DataExchange.Domain.Fawtyg.Tyrp;
public class locdout : Entity
{
/// <summary>
/// 储位
/// </summary>
public string locdout_loc { get; set; }
/// <summary>
/// 零件
/// </summary>
public string locdout_part { get; set; }
public override object[] GetKeys()
{
return new object[] { locdout_loc, locdout_part };
}
}

69
be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.Fawtyg.TyrpAgent/Incoming/ErpLocationConverter.cs

@ -0,0 +1,69 @@
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.ErpLocation;
namespace Win_in.Sfs.Wms.DataExchange.Fawtyg.TyrpAgent.Incoming;
public class ErpLocationConverter : IIncomingConverter
{
private readonly IIncomingToWmsManager _incomingToWmsManager;
private readonly IObjectMapper _objectMapper;
private readonly ILogger<ErpLocationConverter> _logger;
private readonly IIncomingFromExternalManager _incomingFromExternalManager;
public ErpLocationConverter(
IIncomingToWmsManager incomingToWmsManager
, IObjectMapper objectMapper
, ILogger<ErpLocationConverter> logger,
IIncomingFromExternalManager incomingFromExternalManager)
{
_incomingToWmsManager = incomingToWmsManager;
_objectMapper = objectMapper;
_logger = logger;
_incomingFromExternalManager = incomingFromExternalManager;
}
public virtual async Task ConvertAsync(List<IncomingFromExternal> incomingFromExternalList)
{
if (!incomingFromExternalList.Any())
{
_logger.LogInformation("No ErpLocations");
return;
}
//按流水号创建单据
var erpLocationRequestList = await BuildIncomingToWmsOfErpLocationRequestAsync(incomingFromExternalList).ConfigureAwait(false);
await _incomingToWmsManager.CreateManyAsync(erpLocationRequestList).ConfigureAwait(false);
//归档
await _incomingFromExternalManager.ArchiveManyAsync(incomingFromExternalList).ConfigureAwait(false);
}
private async Task<List<IncomingToWms>> BuildIncomingToWmsOfErpLocationRequestAsync(List<IncomingFromExternal> incomingDataList)
{
await Task.CompletedTask.ConfigureAwait(false);
var incomingToWmsList = new List<IncomingToWms>();
foreach (var item in incomingDataList)
{
var incomingToWms = new IncomingToWms()
{
DataType = item.DataType,
DataAction = item.DataAction,
SourceSystem = item.SourceSystem,
DataIdentityCode = item.SourceDataGroupCode,
};
incomingToWms.SetEffectiveDate(item.EffectiveDate);
var exchangeErpLocationRequest = JsonSerializer.Deserialize<ErpLocationExchangeDto>(item.DestinationDataContent);
var wmsErpLocationRequest = _objectMapper.Map<ErpLocationExchangeDto, ErpLocationEditInput>(exchangeErpLocationRequest);
incomingToWms.DataContent = JsonSerializer.Serialize(wmsErpLocationRequest);
incomingToWmsList.Add(incomingToWms);
}
return incomingToWmsList;
}
}

76
be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.Fawtyg.TyrpAgent/Incoming/ErpLocationItemConverter.cs

@ -0,0 +1,76 @@
using System.Collections.Generic;
using System.Linq;
using System.Text.Json;
using System.Threading.Tasks;
using Microsoft.Extensions.Logging;
using Volo.Abp.Guids;
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.ErpLocationItem;
namespace Win_in.Sfs.Wms.DataExchange.Fawtyg.TyrpAgent.Incoming;
public class ErpLocationItemConverter : IIncomingConverter
{
private readonly IIncomingToWmsManager _incomingToWmsManager;
private readonly IObjectMapper _objectMapper;
private readonly ILogger<ErpLocationItemConverter> _logger;
private readonly IGuidGenerator _guidGenerator;
private readonly IIncomingFromExternalManager _incomingFromExternalManager;
public ErpLocationItemConverter(
IIncomingToWmsManager incomingToWmsManager,
IObjectMapper objectMapper,
ILogger<ErpLocationItemConverter> logger,
IGuidGenerator guidGenerator
,
IIncomingFromExternalManager incomingFromExternalManager
)
{
_incomingToWmsManager = incomingToWmsManager;
_objectMapper = objectMapper;
_logger = logger;
_guidGenerator = guidGenerator;
_incomingFromExternalManager = incomingFromExternalManager;
}
public virtual async Task ConvertAsync(List<IncomingFromExternal> incomingFromExternalList)
{
if (!incomingFromExternalList.Any())
{
_logger.LogInformation("无开账数据转换");
return;
}
var incomingToWmsDataList = await BuildIncomingToWmsOfPurchaseOrderAsync(incomingFromExternalList).ConfigureAwait(false);
await _incomingToWmsManager.CreateBulkAsync(incomingToWmsDataList).ConfigureAwait(false);
//归档
await _incomingFromExternalManager.ArchiveManyAsync(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.SetId(_guidGenerator.Create());
incomingToWms.SetEffectiveDate(first.EffectiveDate);
var exchangeErpLocationItem = JsonSerializer.Deserialize<ErpLocationItemExchangeDto>(first.DestinationDataContent);
var wmsErpLocationItem = _objectMapper.Map<ErpLocationItemExchangeDto, ErpLocationItemEditInput>(exchangeErpLocationItem);
incomingToWms.DataContent = JsonSerializer.Serialize(wmsErpLocationItem);
incomingToWmsList.Add(incomingToWms);
}
return incomingToWmsList;
}
}

109
be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.Fawtyg.TyrpAgent/Incoming/ErpLocationItemReader.cs

@ -0,0 +1,109 @@
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 Volo.Abp.Guids;
using Volo.Abp.ObjectMapping;
using Win_in.Sfs.Basedata.Application.Contracts;
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.ErpLocationItem;
namespace Win_in.Sfs.Wms.DataExchange.Fawtyg.TyrpAgent.Incoming;
public class ErpLocationItemReader : IReader
{
private readonly IErpLocationItemManager _ilocdoutManager;
private readonly IIncomingFromExternalManager _incomingFromExternalManager;
private readonly ILogger<ErpLocationItemReader> _logger;
private readonly IGuidGenerator _guidGenerator;
private readonly IConfiguration _configuration;
public ErpLocationItemReader(
IErpLocationItemManager ilocdoutManager
, IIncomingFromExternalManager incomingFromExternalManager
, IGuidGenerator guidGenerator
, ILogger<ErpLocationItemReader> logger
, IConfiguration configuration
)
{
_guidGenerator = guidGenerator;
_configuration = configuration;
_ilocdoutManager = ilocdoutManager;
_incomingFromExternalManager = incomingFromExternalManager;
_logger = logger;
}
public virtual async Task<List<IncomingFromExternal>> ReadAsync()
{
//从Tyrp读取待处理locdout
var toBeProcessedIssue = await _ilocdoutManager.GetToBeProcessedListAsync().ConfigureAwait(false);
if (!toBeProcessedIssue.Any())
{
_logger.LogInformation("未读到EOS开账数据");
return new List<IncomingFromExternal>();
}
//locdout逐一转换为locdout
var incomingDataList = BuildIncomingFromExternalFromBomAsync(toBeProcessedIssue);
await _incomingFromExternalManager.CreateBulkAsync(incomingDataList).ConfigureAwait(false);
return incomingDataList;
}
private List<IncomingFromExternal> BuildIncomingFromExternalFromBomAsync(List<locdout> toBeProcessedIssue)
{
var incomingDataList = new List<IncomingFromExternal>();
foreach (var locdout in toBeProcessedIssue)
{
var incomingData = BuildIncomingFromExternal(locdout);
incomingData.SetEffectiveDate(DateTime.Now);
try
{
var bm = BuildScrapNoteOrderExchangeMes(locdout);
incomingData.DestinationDataContent = JsonSerializer.Serialize(bm);
incomingData.SetId(_guidGenerator.Create());
}
catch (Exception ex)
{
incomingData.SetError(EnumExchangeDataErrorCode.Exception, ex.Message, ex.ToString());
}
incomingDataList.Add(incomingData);
}
return incomingDataList;
}
private IncomingFromExternal BuildIncomingFromExternal(locdout locdout)
{
var incomingData = new IncomingFromExternal()
{
DataType = EnumIncomingDataType.ErpLocationItem.ToString(),
DataAction = EnumExchangeDataAction.Add,
SourceSystem = EnumSystemType.ERP.ToString(),
SourceDataId = locdout.locdout_loc,
SourceDataGroupCode = locdout.locdout_loc,
SourceDataDetailCode = locdout.locdout_part,
SourceDataContent = JsonSerializer.Serialize(locdout),
WriteTime = DateTime.Now,
Writer = nameof(TyrpIncomingBackgroundWorker),
DestinationSystem = EnumSystemType.ERP.ToString(),
};
return incomingData;
}
private static ErpLocationItemExchangeDto BuildScrapNoteOrderExchangeMes(locdout locdout)
{
var cust = new ErpLocationItemExchangeDto()
{
ErpLocationCode = locdout.locdout_loc,
ItemCode = locdout.locdout_part,
};
return cust;
}
}

106
be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.Fawtyg.TyrpAgent/Incoming/ErpLocationReader.cs

@ -0,0 +1,106 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text.Json;
using System.Threading.Tasks;
using Microsoft.Extensions.Logging;
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.ErpLocation;
namespace Win_in.Sfs.Wms.DataExchange.Fawtyg.TyrpAgent.Incoming;
public class ErpLocationReader : IReader
{
private readonly IErpLocationManager _erpLocationManager;
private readonly IIncomingFromExternalManager _incomingFromExternalManager;
private readonly ILogger<ErpLocationReader> _logger;
public ErpLocationReader(
IErpLocationManager erpLocationManager
, IIncomingFromExternalManager incomingFromExternalManager
, ILogger<ErpLocationReader> logger
)
{
_erpLocationManager = erpLocationManager;
_incomingFromExternalManager = incomingFromExternalManager;
_logger = logger;
}
public virtual async Task<List<IncomingFromExternal>> ReadAsync()
{
//从MES读取待处理locmout
var toBeProcessedDatas = await _erpLocationManager.GetToBeProcessedListAsync().ConfigureAwait(false);
if (!toBeProcessedDatas.Any())
{
_logger.LogInformation("no erpLocations");
return new List<IncomingFromExternal>();
}
//locmout逐一转换为ErpLocation
var incomingDataList = BuildIncomingFromExternalFromShipAsync(toBeProcessedDatas);
await _incomingFromExternalManager.CreateManyAsync(incomingDataList).ConfigureAwait(false);
return incomingDataList;
}
private static List<IncomingFromExternal> BuildIncomingFromExternalFromShipAsync(List<locmout> toBeProcessedDatas)
{
var incomingDataList = new List<IncomingFromExternal>();
foreach (var item in toBeProcessedDatas)
{
var incomingData = BuildIncomingFromExternal(item);
incomingData.SetEffectiveDate(DateTime.Now);
incomingData.SetSuccess();
try
{
var erpLocationNote = BuildErpLocationCreateInput(item);
incomingData.DestinationDataContent = JsonSerializer.Serialize(erpLocationNote);
}
catch (Exception ex)
{
incomingData.SetError(EnumExchangeDataErrorCode.Exception, ex.Message, ex.ToString());
}
incomingDataList.Add(incomingData);
}
return incomingDataList;
}
private static IncomingFromExternal BuildIncomingFromExternal(locmout locmout)
{
var incomingData = new IncomingFromExternal()
{
DataType = EnumIncomingDataType.ErpLocation.ToString(),
DataAction = EnumExchangeDataAction.Add,
SourceSystem = EnumSystemType.ERP.ToString(),
SourceDataId = locmout.locmout_loc,
SourceDataGroupCode = locmout.locmout_loc,
SourceDataDetailCode = locmout.locmout_loc,
SourceDataContent = JsonSerializer.Serialize(locmout),
WriteTime = DateTime.Now,
Writer = nameof(TyrpIncomingBackgroundWorker),
DestinationSystem = EnumSystemType.WMS.ToString(),
};
return incomingData;
}
private static ErpLocationExchangeDto BuildErpLocationCreateInput(locmout locmout)
{
var erpLocation = new ErpLocationExchangeDto()
{
Code = locmout.locmout_loc,
Name = locmout.locmout_loc,
Type = locmout.locmout_stat2,
WarehouseCode = locmout.locmout_stat2,
};
return erpLocation;
}
}

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

@ -127,6 +127,15 @@ public class TyrpIncomingBackgroundWorker : AsyncPeriodicBackgroundWorkerBase
//转换Customer //转换Customer
await CustomerConverter.ConvertAsync(customersFromExternalList).ConfigureAwait(false); await CustomerConverter.ConvertAsync(customersFromExternalList).ConfigureAwait(false);
Logger.LogInformation($"Read ErpLocationItem");//储位与零件对应关系(开账)
var ErpLocationItemReader = workerContext.ServiceProvider.GetRequiredService<ErpLocationItemReader>();
var ErpLocationItemConverter = workerContext.ServiceProvider.GetRequiredService<ErpLocationItemConverter>();
//读取并保存ErpLocationItem
var erpLocationItemFromExternalList = await ErpLocationItemReader.ReadAsync().ConfigureAwait(false);
//转换ErpLocationItem
await ErpLocationItemConverter.ConvertAsync(erpLocationItemFromExternalList).ConfigureAwait(false);
Logger.LogInformation($"Read PurchasePrice");//采购价格 Logger.LogInformation($"Read PurchasePrice");//采购价格
var PurchasePriceReader = workerContext.ServiceProvider.GetRequiredService<PurchasePriceReader>(); var PurchasePriceReader = workerContext.ServiceProvider.GetRequiredService<PurchasePriceReader>();
var PurchasePriceConverter = workerContext.ServiceProvider.GetRequiredService<PurchasePriceConverter>(); var PurchasePriceConverter = workerContext.ServiceProvider.GetRequiredService<PurchasePriceConverter>();

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

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

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

@ -120,9 +120,12 @@ public class IncomingToWmsWorker : AsyncPeriodicBackgroundWorkerBase
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.ErpLocation:
await incomingToWms.HandleErpLocationsAsync(workerContext).ConfigureAwait(false); await incomingToWms.HandleErpLocationsAsync(workerContext).ConfigureAwait(false);
break; break;
case EnumIncomingDataType.ErpLocationItem:
await incomingToWms.HandleErpLocationItemsAsync(workerContext).ConfigureAwait(false);
break;
case EnumIncomingDataType.Bom: case EnumIncomingDataType.Bom:
await incomingToWms.HandleBomsAsync(workerContext).ConfigureAwait(false); await incomingToWms.HandleBomsAsync(workerContext).ConfigureAwait(false);
break; break;

48
be/DataExchange/src/Win_in.Sfs.Wms.DataExchange.Application.Contracts/WMS/ErpLocation/ErpLocationExchangeDto.cs

@ -0,0 +1,48 @@
using System.ComponentModel.DataAnnotations;
using Win_in.Sfs.Shared.Domain;
namespace Win_in.Sfs.Wms.DataExchange.WMS.ErpLocation;
public class ErpLocationExchangeDto
{
/// <summary>
/// 代码
/// </summary>
[Display(Name = "代码")]
[Required]
[StringLength(SfsEfCorePropertyConst.CodeLength, ErrorMessage = "{0}最多输入{1}个字符")]
public string Code { get; set; }
/// <summary>
/// 名称
/// </summary>
[Display(Name = "名称")]
[Required(ErrorMessage = "{0}是必填项")]
[StringLength(SfsEfCorePropertyConst.CodeLength, ErrorMessage = "{0}最多输入{1}个字符")]
public string Name { get; set; }
/// <summary>
/// 描述
/// </summary>
[Display(Name = "描述")]
[StringLength(SfsEfCorePropertyConst.NameLength, ErrorMessage = "{0}最多输入{1}个字符")]
public string Description { get; set; }
/// <summary>
/// 类型
/// </summary>
[Display(Name = "类型")]
[Required(ErrorMessage = "{0}是必填项")]
[StringLength(SfsEfCorePropertyConst.CodeLength, ErrorMessage = "{0}最多输入{1}个字符")]
public string Type { get; set; }
/// <summary>
/// 仓库代码
/// </summary>
[Display(Name = "仓库代码")]
[StringLength(SfsEfCorePropertyConst.CodeLength, ErrorMessage = "{0}最多输入{1}个字符")]
public string WarehouseCode { get; set; }
}

23
be/DataExchange/src/Win_in.Sfs.Wms.DataExchange.Application.Contracts/WMS/ErpLocationItem/ErpLocationItem.cs

@ -0,0 +1,23 @@
using System.ComponentModel.DataAnnotations;
using Win_in.Sfs.Shared.Domain;
namespace Win_in.Sfs.Wms.DataExchange.WMS.ErpLocationItem;
public class ErpLocationItemExchangeDto
{
/// <summary>
/// 储位代码
/// </summary>
[Display(Name = "储位代码")]
[Required(ErrorMessage = "{0}是必填项")]
[StringLength(SfsEfCorePropertyConst.CodeLength, ErrorMessage = "{0}最多输入{1}个字符")]
public string ErpLocationCode { get; set; }
/// <summary>
/// 物品代码
/// </summary>
[Display(Name = "物品代码")]
[Required(ErrorMessage = "{0}是必填项")]
[StringLength(SfsEfCorePropertyConst.CodeLength, ErrorMessage = "{0}最多输入{1}个字符")]
public string ItemCode { get; set; }
}

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

@ -596,6 +596,41 @@
字典项描述 字典项描述
</summary> </summary>
</member> </member>
<member name="P:Win_in.Sfs.Wms.DataExchange.WMS.ErpLocationItem.ErpLocationItemExchangeDto.ErpLocationCode">
<summary>
储位代码
</summary>
</member>
<member name="P:Win_in.Sfs.Wms.DataExchange.WMS.ErpLocationItem.ErpLocationItemExchangeDto.ItemCode">
<summary>
物品代码
</summary>
</member>
<member name="P:Win_in.Sfs.Wms.DataExchange.WMS.ErpLocation.ErpLocationExchangeDto.Code">
<summary>
代码
</summary>
</member>
<member name="P:Win_in.Sfs.Wms.DataExchange.WMS.ErpLocation.ErpLocationExchangeDto.Name">
<summary>
名称
</summary>
</member>
<member name="P:Win_in.Sfs.Wms.DataExchange.WMS.ErpLocation.ErpLocationExchangeDto.Description">
<summary>
描述
</summary>
</member>
<member name="P:Win_in.Sfs.Wms.DataExchange.WMS.ErpLocation.ErpLocationExchangeDto.Type">
<summary>
类型
</summary>
</member>
<member name="P:Win_in.Sfs.Wms.DataExchange.WMS.ErpLocation.ErpLocationExchangeDto.WarehouseCode">
<summary>
仓库代码
</summary>
</member>
<member name="P:Win_in.Sfs.Wms.DataExchange.WMS.InterfaceCalendar.InterfaceCalendarExchangeDto.Enabled"> <member name="P:Win_in.Sfs.Wms.DataExchange.WMS.InterfaceCalendar.InterfaceCalendarExchangeDto.Enabled">
<summary> <summary>
是否可用 是否可用

7
be/DataExchange/src/Win_in.Sfs.Wms.DataExchange.Domain.Shared/Enums/EnumIncomingDataType.cs

@ -13,7 +13,7 @@ public enum EnumIncomingDataType
/// <summary> /// <summary>
/// ERP库位 /// ERP库位
/// </summary> /// </summary>
Location = 2, ErpLocation = 2,
/// <summary> /// <summary>
/// 物料清单 /// 物料清单
/// </summary> /// </summary>
@ -110,5 +110,8 @@ public enum EnumIncomingDataType
/// 标准成本价格 /// 标准成本价格
/// </summary> /// </summary>
StdCostPrice=26, StdCostPrice=26,
/// <summary>
/// Erp库位零件(开账)
/// </summary>
ErpLocationItem = 27,
} }

4
be/Hosts/Wms.Host/Win_in.Sfs.Wms.Store.HttpApi.Host/StoreHttpApiHostModule.cs

@ -19,6 +19,7 @@ using Volo.Abp.Modularity;
using Volo.Abp.PermissionManagement.EntityFrameworkCore; using Volo.Abp.PermissionManagement.EntityFrameworkCore;
using Volo.Abp.SettingManagement.EntityFrameworkCore; using Volo.Abp.SettingManagement.EntityFrameworkCore;
using Volo.Abp.Swashbuckle; using Volo.Abp.Swashbuckle;
using Volo.Abp.TenantManagement.EntityFrameworkCore;
using Volo.Abp.VirtualFileSystem; using Volo.Abp.VirtualFileSystem;
using Win_in.Sfs.Auth; using Win_in.Sfs.Auth;
using Win_in.Sfs.Basedata.Application.Contracts; using Win_in.Sfs.Basedata.Application.Contracts;
@ -77,7 +78,8 @@ namespace Win_in.Sfs.Wms.Store;
typeof(BasedataApplicationContractsModule), typeof(BasedataApplicationContractsModule),
typeof(FileStorageApplicationContractsModule), typeof(FileStorageApplicationContractsModule),
typeof(MessageApplicationContractsModule), typeof(MessageApplicationContractsModule),
typeof(LabelApplicationContractsModule) typeof(LabelApplicationContractsModule),
typeof(AbpTenantManagementEntityFrameworkCoreModule)
)] )]
public class StoreHttpApiHostModule : ModuleBase<StoreHttpApiHostModule> public class StoreHttpApiHostModule : ModuleBase<StoreHttpApiHostModule>
{ {

1
be/Hosts/Wms.Host/Win_in.Sfs.Wms.Store.HttpApi.Host/Win_in.Sfs.Wms.Store.HttpApi.Host.csproj

@ -30,6 +30,7 @@
<PackageReference Include="Volo.Abp.PermissionManagement.EntityFrameworkCore" Version="5.3.5" /> <PackageReference Include="Volo.Abp.PermissionManagement.EntityFrameworkCore" Version="5.3.5" />
<PackageReference Include="Volo.Abp.SettingManagement.EntityFrameworkCore" Version="5.3.5" /> <PackageReference Include="Volo.Abp.SettingManagement.EntityFrameworkCore" Version="5.3.5" />
<PackageReference Include="Volo.Abp.AuditLogging.EntityFrameworkCore" Version="5.3.5" /> <PackageReference Include="Volo.Abp.AuditLogging.EntityFrameworkCore" Version="5.3.5" />
<PackageReference Include="Volo.Abp.TenantManagement.EntityFrameworkCore" Version="5.3.5" />
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>

9
be/Hosts/WmsPda.Host/Win_in.Sfs.Wms.Pda.Host/Controllers/Jobs/ProductionReturnRequestController .cs

@ -23,6 +23,7 @@ public class ProductionReturnRequestController : AbpController
{ {
private readonly IProductionReturnJobAppService _productionReturnJobAppService; private readonly IProductionReturnJobAppService _productionReturnJobAppService;
private readonly IProductionReturnRequestAppService _productionReturnRequestAppService; private readonly IProductionReturnRequestAppService _productionReturnRequestAppService;
private readonly ICustomerProductionReturnNoteAppService _customerReturnAppService;
private readonly IUserWorkGroupAppService _userWorkGroupAppService; private readonly IUserWorkGroupAppService _userWorkGroupAppService;
@ -38,9 +39,11 @@ public class ProductionReturnRequestController : AbpController
IProductionReturnJobAppService productionReturnJobAppService IProductionReturnJobAppService productionReturnJobAppService
, IUserWorkGroupAppService userWorkGroupAppService , IUserWorkGroupAppService userWorkGroupAppService
, ILocationAppService locationApp , ILocationAppService locationApp
, IProductionReturnRequestAppService productionReturnRequestAppService , IProductionReturnRequestAppService productionReturnRequestAppService,
ICustomerProductionReturnNoteAppService customerReturnAppService
) )
{ {
_customerReturnAppService = customerReturnAppService;
_productionReturnRequestAppService = productionReturnRequestAppService; _productionReturnRequestAppService = productionReturnRequestAppService;
_userWorkGroupAppService = userWorkGroupAppService; _userWorkGroupAppService = userWorkGroupAppService;
this._productionReturnJobAppService = productionReturnJobAppService; this._productionReturnJobAppService = productionReturnJobAppService;
@ -62,9 +65,9 @@ public class ProductionReturnRequestController : AbpController
[HttpPost("")] [HttpPost("")]
public virtual async Task<ProductionReturnRequestDTO> CreateAsync(ProductionReturnRequestEditInput input) public virtual async Task<CustomerProductionReturnNoteDTO> CreateAsync(CustomerProductionReturnNoteEditInput input)
{ {
return await _productionReturnRequestAppService.CreateAsync(input).ConfigureAwait(false); return await _customerReturnAppService.CreateAsync(input).ConfigureAwait(false);
} }

6
be/Hosts/WmsPda.Host/Win_in.Sfs.Wms.Pda.Host/Controllers/Stores/CustomerReturnNoteController.cs

@ -12,14 +12,14 @@ namespace Win_in.Sfs.Wms.Pda.Controllers.Stores;
[Route($"{PdaHostConst.ROOT_ROUTE}store/return-from-customer")] [Route($"{PdaHostConst.ROOT_ROUTE}store/return-from-customer")]
public class CustomerReturnNoteController : AbpController public class CustomerReturnNoteController : AbpController
{ {
private readonly ICustomerReturnNoteAppService _customerReturnNoteAppService; private readonly ICustomerProductionReturnNoteAppService _customerReturnNoteAppService;
/// <summary> /// <summary>
/// ///
/// </summary> /// </summary>
/// <param name="customerReturnNoteAppService"></param> /// <param name="customerReturnNoteAppService"></param>
public CustomerReturnNoteController( public CustomerReturnNoteController(
ICustomerReturnNoteAppService customerReturnNoteAppService) ICustomerProductionReturnNoteAppService customerReturnNoteAppService)
{ {
_customerReturnNoteAppService = customerReturnNoteAppService; _customerReturnNoteAppService = customerReturnNoteAppService;
} }
@ -30,7 +30,7 @@ public class CustomerReturnNoteController : AbpController
/// <param name="input"></param> /// <param name="input"></param>
/// <returns></returns> /// <returns></returns>
[HttpPost("")] [HttpPost("")]
public virtual async Task<CustomerReturnNoteDTO> CreateAsync(CustomerReturnNoteEditInput input) public virtual async Task<CustomerProductionReturnNoteDTO> CreateAsync(CustomerProductionReturnNoteEditInput input)
{ {
return await _customerReturnNoteAppService.CreateAsync(input).ConfigureAwait(false); return await _customerReturnNoteAppService.CreateAsync(input).ConfigureAwait(false);
} }

35
be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application.Contracts/Boms/DTOs/BomComponentDTO.cs

@ -0,0 +1,35 @@
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Xml.Linq;
namespace Win_in.Sfs.Basedata.Boms.DTOs;
public class BomComponentDTO
{
[Display(Name = "根物料号")]
public string Root { get; set; }
[Display(Name = "物料号")]
public string Component { get; set; }
[Display(Name = "单位")]
public string ComponentUom { get; set; }
[Display(Name = "用量")]
public decimal ComponentQty { get; set; }
[Display(Name = "父物料号")]
public string ParentComponent { get; set; }
[Display(Name = "合计数量")]
public decimal SumQty { get; set; }
[Display(Name = "层数")]
public int Level { get; set; }
public List<BomComponent> SubComponents { get; set; }
[Display(Name = "拆解路径")]
public string Path { set; get; }
}

6
be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application.Contracts/Boms/IBomAppService.cs

@ -1,7 +1,10 @@
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Threading.Tasks; using System.Threading.Tasks;
using Win_in.Sfs.Basedata.Boms;
using Win_in.Sfs.Basedata.Boms.DTOs;
using Win_in.Sfs.Basedata.Domain; using Win_in.Sfs.Basedata.Domain;
using Win_in.Sfs.Basedata.Domain.Shared;
using Win_in.Sfs.Shared.Application.Contracts; using Win_in.Sfs.Shared.Application.Contracts;
namespace Win_in.Sfs.Basedata.Application.Contracts; namespace Win_in.Sfs.Basedata.Application.Contracts;
@ -41,5 +44,8 @@ public interface IBomAppService
/// <param name="productNum">总成数量</param> /// <param name="productNum">总成数量</param>
/// <returns></returns> /// <returns></returns>
Task<List<BomDTO>> GetMaterialTotalQtyAsync(string productCode, int productNum); Task<List<BomDTO>> GetMaterialTotalQtyAsync(string productCode, int productNum);
Task<List<BomDTO>> GetBomTreeByCodeAsync(string productCode);
Task<List<BomComponentDTO>> GetSubcomponentsRecursiveList(List<BomComponentDTO> p_lst, EnumBomSelectedType p_type);
} }

25
be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application.Contracts/ErpLocationItems/DTOs/ErpLocationItemDTO.cs

@ -0,0 +1,25 @@
using System.ComponentModel.DataAnnotations;
using Win_in.Sfs.Shared.Domain;
namespace Win_in.Sfs.Basedata.Application.Contracts;
[Display(Name = "物料和储位对应关系")]
public class ErpLocationItemDTO : SfsBaseDataDTOBase
{
/// <summary>
/// 物料代码
/// </summary>
[Display(Name = "物料代码")]
[Required(ErrorMessage = "{0}是必填项")]
[StringLength(SfsEfCorePropertyConst.CodeLength, ErrorMessage = "{0}最多输入{1}个字符")]
public string ItemCode { get; set; }
/// <summary>
/// 储位代码
/// </summary>
[Display(Name = "储位代码")]
[Required(ErrorMessage = "{0}是必填项")]
[StringLength(SfsEfCorePropertyConst.CodeLength, ErrorMessage = "{0}最多输入{1}个字符")]
public string ErpLocationCode { get; set; }
}

21
be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application.Contracts/ErpLocationItems/ErpLocationItemPermissions.cs

@ -0,0 +1,21 @@
using Volo.Abp.Authorization.Permissions;
using Win_in.Sfs.Basedata.Domain;
namespace Win_in.Sfs.Basedata.Application.Contracts;
public static class ErpLocationItemPermissions
{
public const string Default = BasedataPermissions.GroupName + "." + nameof(ErpLocationItem);
public const string Create = Default + "." + BasedataPermissions.CreateStr;
public const string Update = Default + "." + BasedataPermissions.UpdateStr;
public const string Delete = Default + "." + BasedataPermissions.DeleteStr;
public static void AddErpLocationItemPermission(this PermissionGroupDefinition permissionGroup)
{
var erpLocationItemPermission = permissionGroup.AddPermission(Default, BasedataPermissionDefinitionProvider.L(nameof(ErpLocationItem)));
erpLocationItemPermission.AddChild(Create, BasedataPermissionDefinitionProvider.L(BasedataPermissions.CreateStr));
erpLocationItemPermission.AddChild(Update, BasedataPermissionDefinitionProvider.L(BasedataPermissions.UpdateStr));
erpLocationItemPermission.AddChild(Delete, BasedataPermissionDefinitionProvider.L(BasedataPermissions.DeleteStr));
}
}

11
be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application.Contracts/ErpLocationItems/IErpLocationItemAppService.cs

@ -0,0 +1,11 @@
using System.Collections.Generic;
using System.Threading.Tasks;
using Win_in.Sfs.Shared.Application.Contracts;
namespace Win_in.Sfs.Basedata.Application.Contracts;
public interface IErpLocationItemAppService : ISfsBaseDataAppServiceBase<ErpLocationItemDTO, SfsBaseDataRequestInputBase, ErpLocationItemEditInput>, ISfsUpsertAppService<ErpLocationItemEditInput>
{
Task<ErpLocationItemDTO> CheckItemErpLocationIsAvailable(string itemCode, string erpLocationCode);
Task<List<ErpLocationItemDTO>> GetListByItemCodeAsync(string itemCode);
}

26
be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application.Contracts/ErpLocationItems/Inputs/ErpLocationItemEditInput.cs

@ -0,0 +1,26 @@
using System.ComponentModel.DataAnnotations;
using Win_in.Sfs.Basedata.Domain.Shared;
using Win_in.Sfs.Shared.Domain;
namespace Win_in.Sfs.Basedata.Application.Contracts;
public class ErpLocationItemEditInput : SfsBaseDataCreateOrUpdateInputBase
{
/// <summary>
/// 物料代码
/// </summary>
[Display(Name = "物料代码")]
[Required(ErrorMessage = "{0}是必填项")]
[StringLength(SfsEfCorePropertyConst.CodeLength, ErrorMessage = "{0}最多输入{1}个字符")]
public string ItemCode { get; set; }
/// <summary>
/// 储位代码
/// </summary>
[Display(Name = "储位代码")]
[Required(ErrorMessage = "{0}是必填项")]
[StringLength(SfsEfCorePropertyConst.CodeLength, ErrorMessage = "{0}最多输入{1}个字符")]
public string ErpLocationCode { get; set; }
}

27
be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application.Contracts/ErpLocationItems/Inputs/ErpLocationItemImportInput.cs

@ -0,0 +1,27 @@
using System.ComponentModel.DataAnnotations;
using Win_in.Sfs.Shared.Application.Contracts;
using Win_in.Sfs.Shared.Domain;
namespace Win_in.Sfs.Basedata.Application.Contracts;
[Display(Name = "物料和储位对应关系")]
public class ErpLocationItemImportInput : SfsBaseDataImportInputBase
{
/// <summary>
/// 物料代码
/// </summary>
[Key]
[Display(Name = "物料代码")]
[Required(ErrorMessage = "{0}不能为空")]
[StringLength(SfsEfCorePropertyConst.CodeLength, ErrorMessage = "{0}最多输入{1}个字符")]
public string ItemCode { get; set; }
/// <summary>
/// 储位代码
/// </summary>
[Display(Name = "储位代码")]
[StringLength(SfsEfCorePropertyConst.CodeLength, ErrorMessage = "{0}最多输入{1}个字符")]
public string ErpLocationCode { get; set; }
}

1
be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application.Contracts/Permissions/BasedataPermissionDefinitionProvider.cs

@ -35,6 +35,7 @@ public class BasedataPermissionDefinitionProvider : PermissionDefinitionProvider
basedataGroup.AddItemBasicPermission(); basedataGroup.AddItemBasicPermission();
basedataGroup.AddItemCategoryPermission(); basedataGroup.AddItemCategoryPermission();
basedataGroup.AddItemPackPermission(); basedataGroup.AddItemPackPermission();
basedataGroup.AddErpLocationItemPermission();
basedataGroup.AddItemContainerPermission(); basedataGroup.AddItemContainerPermission();
basedataGroup.AddCategoryPermission(); basedataGroup.AddCategoryPermission();
basedataGroup.AddPositionCodePermission(); basedataGroup.AddPositionCodePermission();

1
be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application.Contracts/PositionCode/PositionCodePermissions.cs

@ -5,7 +5,6 @@ namespace Win_in.Sfs.Basedata.Application.Contracts;
public static class PositionCodePermissions public static class PositionCodePermissions
{ {
public const string Default = BasedataPermissions.GroupName + "." + nameof(PositionCode); public const string Default = BasedataPermissions.GroupName + "." + nameof(PositionCode);
public const string Create = Default + "." + BasedataPermissions.CreateStr; public const string Create = Default + "." + BasedataPermissions.CreateStr;
public const string Update = Default + "." + BasedataPermissions.UpdateStr; public const string Update = Default + "." + BasedataPermissions.UpdateStr;

2
be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application.Contracts/Settings/BasedataSettingsDto.cs

@ -6,6 +6,8 @@ public class BasedataSettingsDto
public string ItemStoreRelation_LocationTypes { get; set; } public string ItemStoreRelation_LocationTypes { get; set; }
public string ItemStoreRelation_NotFoundReturnInfinity { get; set; } public string ItemStoreRelation_NotFoundReturnInfinity { get; set; }
public string ErpLocationItem_NotFoundReturnInfinity { get; set; }
public string ItemQuality_NotFoundReturnExempt { get; set; } public string ItemQuality_NotFoundReturnExempt { get; set; }
public string AQL_DefaultSampleQty { get; set; } public string AQL_DefaultSampleQty { get; set; }

1
be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application.Contracts/Settings/BasedataSettingsUpdateInput.cs

@ -5,6 +5,7 @@ public class BasedataSettingsUpdateInput
public string ItemStoreRelation_LocationTypes { get; set; } public string ItemStoreRelation_LocationTypes { get; set; }
public string ItemStoreRelation_NotFoundReturnInfinity { get; set; } public string ItemStoreRelation_NotFoundReturnInfinity { get; set; }
public string ErpLocationItem_NotFoundReturnInfinity { get; set; }
public string ItemQuality_NotFoundReturnExempt { get; set; } public string ItemQuality_NotFoundReturnExempt { get; set; }
public string AQL_DefaultSampleQty { get; set; } public string AQL_DefaultSampleQty { get; set; }

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

@ -27,6 +27,7 @@ public partial class BasedataApplicationAutoMapperProfile : Profile
ItemBasicAutoMapperProfile(); ItemBasicAutoMapperProfile();
ItemCategoryAutoMapperProfile(); ItemCategoryAutoMapperProfile();
ItemPackAutoMapperProfile(); ItemPackAutoMapperProfile();
ErpLocationItemAutoMapperProfile();
ItemContainerAutoMapperProfile(); ItemContainerAutoMapperProfile();
ItemStoreRelationAutoMapperProfile(); ItemStoreRelationAutoMapperProfile();
ItemSafetyStockAutoMapperProfile(); ItemSafetyStockAutoMapperProfile();

1
be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application/Bases/SfsBaseDataAppServiceBase.cs

@ -27,6 +27,7 @@ public abstract class SfsBaseDataAppServiceBase<TEntity, TEntityDto, TRequestInp
{ {
protected IItemBasicAppService ItemBasicAppService => LazyServiceProvider.LazyGetRequiredService<IItemBasicAppService>(); protected IItemBasicAppService ItemBasicAppService => LazyServiceProvider.LazyGetRequiredService<IItemBasicAppService>();
protected ILocationAppService LocationAppService => LazyServiceProvider.LazyGetRequiredService<ILocationAppService>(); protected ILocationAppService LocationAppService => LazyServiceProvider.LazyGetRequiredService<ILocationAppService>();
protected IErpLocationAppService ErpLocationAppService => LazyServiceProvider.LazyGetRequiredService<IErpLocationAppService>();
protected IWarehouseAppService WarehouseAppService => LazyServiceProvider.LazyGetRequiredService<IWarehouseAppService>(); protected IWarehouseAppService WarehouseAppService => LazyServiceProvider.LazyGetRequiredService<IWarehouseAppService>();
protected ISupplierAppService SupplierAppService => LazyServiceProvider.LazyGetRequiredService<ISupplierAppService>(); protected ISupplierAppService SupplierAppService => LazyServiceProvider.LazyGetRequiredService<ISupplierAppService>();
protected IAreaAppService AreaAppService => LazyServiceProvider.LazyGetRequiredService<IAreaAppService>(); protected IAreaAppService AreaAppService => LazyServiceProvider.LazyGetRequiredService<IAreaAppService>();

52
be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application/Boms/BomAppService.cs

@ -2,12 +2,15 @@ using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.ComponentModel.DataAnnotations; using System.ComponentModel.DataAnnotations;
using System.Threading.Tasks; using System.Threading.Tasks;
using DocumentFormat.OpenXml.Spreadsheet;
using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Mvc; using Microsoft.AspNetCore.Mvc;
using Microsoft.EntityFrameworkCore; using Microsoft.EntityFrameworkCore;
using Volo.Abp.Caching; using Volo.Abp.Caching;
using Volo.Abp.Domain.Repositories; using Volo.Abp.Domain.Repositories;
using Win_in.Sfs.Basedata.Application.Contracts; using Win_in.Sfs.Basedata.Application.Contracts;
using Win_in.Sfs.Basedata.Boms;
using Win_in.Sfs.Basedata.Boms.DTOs;
using Win_in.Sfs.Basedata.Domain; using Win_in.Sfs.Basedata.Domain;
using Win_in.Sfs.Basedata.Domain.Shared; using Win_in.Sfs.Basedata.Domain.Shared;
@ -22,6 +25,8 @@ public class BomAppService :
private new readonly IBomRepository _repository; private new readonly IBomRepository _repository;
private readonly IBomManager _bomManager; private readonly IBomManager _bomManager;
List<BomComponent> _bomList=new List<BomComponent>();
public BomAppService(IBomRepository repository public BomAppService(IBomRepository repository
, IBomManager bomManager , IBomManager bomManager
, IDistributedCache<BomDTO> cache , IDistributedCache<BomDTO> cache
@ -32,8 +37,19 @@ public class BomAppService :
base.CreatePolicyName = BomPermissions.Create; base.CreatePolicyName = BomPermissions.Create;
base.UpdatePolicyName = BomPermissions.Update; base.UpdatePolicyName = BomPermissions.Update;
base.DeletePolicyName = BomPermissions.Delete; base.DeletePolicyName = BomPermissions.Delete;
} }
#region Get #region Get
[HttpGet("get-by-productitemcode")] [HttpGet("get-by-productitemcode")]
@ -90,7 +106,20 @@ public class BomAppService :
{ {
return await _bomManager.GetListOfComponentAsync(component).ConfigureAwait(false); return await _bomManager.GetListOfComponentAsync(component).ConfigureAwait(false);
} }
/// <summary>
/// 获取bomtree
/// </summary>
/// <param name="productCode"></param>
/// <returns></returns>
[HttpGet("get-bom-tree-by-code")]
public virtual async Task<List<BomDTO>> GetBomTreeByCodeAsync(string productCode)
{
var entities = await _bomManager.GetAllItemByCode(productCode).ConfigureAwait(false);
var dtos = ObjectMapper.Map<List<Bom>, List<BomDTO>>(entities);
return dtos;
}
/// <summary> /// <summary>
/// 获取所有子物料关系 /// 获取所有子物料关系
/// </summary> /// </summary>
@ -197,5 +226,28 @@ public class BomAppService :
} }
[HttpPost("get_bom_sublist")]
public async Task<List<BomComponentDTO>> GetSubcomponentsRecursiveList(List<BomComponentDTO> p_lst, EnumBomSelectedType p_type
)
{
var entities=ObjectMapper.Map<List<BomComponentDTO>, List<BomComponent>>(p_lst);
var list=await _bomManager.GetSubcomponentsRecursiveList(entities, p_type).ConfigureAwait(false);
var sublist = ObjectMapper.Map<List<BomComponent>, List<BomComponentDTO>>(list);
return sublist;
}
} }

6
be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application/Boms/BomAutoMapperProfile.cs

@ -1,6 +1,8 @@
using AutoMapper; using AutoMapper;
using Volo.Abp.AutoMapper; using Volo.Abp.AutoMapper;
using Win_in.Sfs.Basedata.Application.Contracts; using Win_in.Sfs.Basedata.Application.Contracts;
using Win_in.Sfs.Basedata.Boms;
using Win_in.Sfs.Basedata.Boms.DTOs;
using Win_in.Sfs.Basedata.Domain; using Win_in.Sfs.Basedata.Domain;
namespace Win_in.Sfs.Basedata.Application; namespace Win_in.Sfs.Basedata.Application;
@ -29,5 +31,9 @@ public partial class BasedataApplicationAutoMapperProfile : Profile
CreateMap<BomEditInput, Bom>() CreateMap<BomEditInput, Bom>()
.IgnoreAuditedObjectProperties() .IgnoreAuditedObjectProperties()
.Ignore(x => x.ConcurrencyStamp).Ignore(x => x.Id); .Ignore(x => x.ConcurrencyStamp).Ignore(x => x.Id);
CreateMap<BomComponent, BomComponentDTO>().ReverseMap();
} }
} }

113
be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application/ErpLocationItems/ErpLocationItemAppService.cs

@ -0,0 +1,113 @@
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Mvc;
using Volo.Abp;
using Volo.Abp.Caching;
using Volo.Abp.Domain.Repositories;
using Volo.Abp.ObjectMapping;
using Volo.Abp.Uow;
using Win_in.Sfs.Basedata.Application.Contracts;
using Win_in.Sfs.Basedata.Domain;
using Win_in.Sfs.Basedata.Domain.Shared;
using Win_in.Sfs.Shared.Domain.Shared;
namespace Win_in.Sfs.Basedata.Application;
[Authorize]
[Route($"{BasedataConsts.RootPath}erplocation-item")]
public class ErpLocationItemAppService
: SfsBaseDataAppServiceBase<ErpLocationItem, ErpLocationItemDTO, SfsBaseDataRequestInputBase, ErpLocationItemEditInput, ErpLocationItemImportInput>
, IErpLocationItemAppService
{
private readonly IErpLocationItemManager _manager;
private new readonly IErpLocationItemRepository _repository;
public ErpLocationItemAppService(
IErpLocationItemRepository repository
, IDistributedCache<ErpLocationItemDTO> cache
, IErpLocationItemManager manager
, IItemBasicAppService itemBasicAppService) : base(repository, cache)
{
base.CreatePolicyName = ErpLocationItemPermissions.Create;
base.UpdatePolicyName = ErpLocationItemPermissions.Update;
base.DeletePolicyName = ErpLocationItemPermissions.Delete;
_repository = repository;
_manager = manager;
}
/// <summary>
/// 用来重写 新增实体
/// </summary>
/// <param name="input"></param>
/// <returns></returns>
/// <exception cref="UserFriendlyException"></exception>
[HttpPost("")]
[UnitOfWork]
public override async Task<ErpLocationItemDTO> CreateAsync(ErpLocationItemEditInput input)
{
var itemBasic = await ItemBasicAppService.GetByCodeAsync(input.ItemCode).ConfigureAwait(false);
Check.NotNull(itemBasic, "物品代码", $"物品 {input.ItemCode} 不存在");
var erpLocation = await ErpLocationAppService.GetByCodeAsync(input.ErpLocationCode).ConfigureAwait(false);
Check.NotNull(erpLocation, "储位代码", $"储位 {input.ErpLocationCode} 不存在");
var entity = await _repository.FirstOrDefaultAsync(p => p.ItemCode == input.ItemCode && p.ErpLocationCode == input.ErpLocationCode).ConfigureAwait(false);
if(entity != null)
{
throw new UserFriendlyException($"物品{input.ItemCode}和储位{input.ErpLocationCode} 对应关系已存在");
}
return await base.CreateAsync(input).ConfigureAwait(false);
}
/// <summary>
/// 检查物料和储位对应关系是否存在
/// </summary>
/// <param name="itemCode"></param>
/// <param name="erpLocationCode"></param>
/// <returns></returns>
[HttpGet("check-item-erplocation-is-available")]
public virtual async Task<ErpLocationItemDTO> CheckItemErpLocationIsAvailable(string itemCode,string erpLocationCode)
{
var entity = await _repository.FirstOrDefaultAsync(p => p.ItemCode == itemCode && p.ErpLocationCode== erpLocationCode).ConfigureAwait(false);
if (entity == null)
{
if (await SettingManager.IsTrueAsync(BasedataSettings.ErpLocationItem.NotFoundReturnInfinity).ConfigureAwait(false))
{
entity = new ErpLocationItem()
{
ItemCode = itemCode,
ErpLocationCode= erpLocationCode
};
}
}
var dto = ObjectMapper.Map<ErpLocationItem, ErpLocationItemDTO>(entity);
return dto;
}
[HttpPost("upsert")]
public virtual async Task UpsertAsync(ErpLocationItemEditInput input)
{
var entity = ObjectMapper.Map<ErpLocationItemEditInput, ErpLocationItem>(input);
await _repository.UpsertAsync(entity).ConfigureAwait(false);
}
[HttpGet("list/by-item")]
public virtual async Task<List<ErpLocationItemDTO>> GetListByItemCodeAsync(string itemCode)
{
var entities = await _repository.GetListAsync(c => c.ItemCode == itemCode).ConfigureAwait(false);
var dtos = ObjectMapper.Map<List<ErpLocationItem>, List<ErpLocationItemDTO>>(entities);
return dtos;
}
}

34
be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application/ErpLocationItems/ErpLocationItemAutoMapperProfile.cs

@ -0,0 +1,34 @@
using AutoMapper;
using Volo.Abp.AutoMapper;
using Win_in.Sfs.Basedata.Application.Contracts;
using Win_in.Sfs.Basedata.Domain;
namespace Win_in.Sfs.Basedata.Application;
public partial class BasedataApplicationAutoMapperProfile : Profile
{
private void ErpLocationItemAutoMapperProfile()
{
CreateMap<ErpLocationItem, ErpLocationItemDTO>()
.ReverseMap();
CreateMap<ErpLocationItemImportInput, ErpLocationItem>()
.IgnoreAuditedObjectProperties()
.Ignore(x => x.Remark)
.Ignore(x => x.TenantId)
.Ignore(x => x.ExtraProperties)
.Ignore(x => x.ConcurrencyStamp)
;
CreateMap<ErpLocationItemEditInput, ErpLocationItem>()
.IgnoreAuditedObjectProperties()
.Ignore(x => x.TenantId)
.Ignore(x=>x.Id)
.Ignore(x => x.ExtraProperties)
.Ignore(x => x.ConcurrencyStamp)
;
CreateMap<ErpLocationItemEditInput, ErpLocationItem>()
.IgnoreAuditedObjectProperties()
.Ignore(x => x.ConcurrencyStamp).Ignore(x => x.Id);
}
}

0
be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application/PositionCode/PositionCodeAppService.cs → be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application/PositionCodes/PositionCodeAppService.cs

0
be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application/PositionCode/PositionCodeAutoMapperProfile.cs → be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application/PositionCodes/PositionCodeAutoMapperProfile.cs

3
be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application/Setttings/BasedataSettingsAppService.cs

@ -31,6 +31,8 @@ public class BasedataSettingsAppService :
settings.Find(p => p.Name == BasedataSettings.ItemStoreRelation.LocationTypes)?.Value; settings.Find(p => p.Name == BasedataSettings.ItemStoreRelation.LocationTypes)?.Value;
dto.ItemStoreRelation_NotFoundReturnInfinity = dto.ItemStoreRelation_NotFoundReturnInfinity =
settings.Find(p => p.Name == BasedataSettings.ItemStoreRelation.NotFoundReturnInfinity)?.Value; settings.Find(p => p.Name == BasedataSettings.ItemStoreRelation.NotFoundReturnInfinity)?.Value;
dto.ErpLocationItem_NotFoundReturnInfinity =
settings.Find(p => p.Name == BasedataSettings.ErpLocationItem.NotFoundReturnInfinity)?.Value;
dto.ItemQuality_NotFoundReturnExempt = dto.ItemQuality_NotFoundReturnExempt =
settings.Find(p => p.Name == BasedataSettings.ItemQuality.NotFoundReturnExempt)?.Value; settings.Find(p => p.Name == BasedataSettings.ItemQuality.NotFoundReturnExempt)?.Value;
dto.AQL_DefaultSampleQty = dto.AQL_DefaultSampleQty =
@ -49,6 +51,7 @@ public class BasedataSettingsAppService :
{ {
await _settingManager.SetGlobalAsync(BasedataSettings.ItemStoreRelation.LocationTypes, input.ItemStoreRelation_LocationTypes).ConfigureAwait(false); await _settingManager.SetGlobalAsync(BasedataSettings.ItemStoreRelation.LocationTypes, input.ItemStoreRelation_LocationTypes).ConfigureAwait(false);
await _settingManager.SetGlobalAsync(BasedataSettings.ItemStoreRelation.NotFoundReturnInfinity, input.ItemStoreRelation_NotFoundReturnInfinity).ConfigureAwait(false); await _settingManager.SetGlobalAsync(BasedataSettings.ItemStoreRelation.NotFoundReturnInfinity, input.ItemStoreRelation_NotFoundReturnInfinity).ConfigureAwait(false);
await _settingManager.SetGlobalAsync(BasedataSettings.ErpLocationItem.NotFoundReturnInfinity, input.ErpLocationItem_NotFoundReturnInfinity).ConfigureAwait(false);
await _settingManager.SetGlobalAsync(BasedataSettings.ItemQuality.NotFoundReturnExempt, input.ItemQuality_NotFoundReturnExempt).ConfigureAwait(false); await _settingManager.SetGlobalAsync(BasedataSettings.ItemQuality.NotFoundReturnExempt, input.ItemQuality_NotFoundReturnExempt).ConfigureAwait(false);
await _settingManager.SetGlobalAsync(BasedataSettings.AQL.DefaultSampleQty, input.AQL_DefaultSampleQty).ConfigureAwait(false); await _settingManager.SetGlobalAsync(BasedataSettings.AQL.DefaultSampleQty, input.AQL_DefaultSampleQty).ConfigureAwait(false);
await _settingManager.SetGlobalAsync(BasedataSettings.ItemPack.DefaultPackQty, input.ItemPack_DefaultPackQty).ConfigureAwait(false); await _settingManager.SetGlobalAsync(BasedataSettings.ItemPack.DefaultPackQty, input.ItemPack_DefaultPackQty).ConfigureAwait(false);

73
be/Modules/BaseData/src/Win_in.Sfs.Basedata.Domain.Shared/Commons/Cache.cs

@ -0,0 +1,73 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Collections.Generic;
namespace Win_in.Sfs.Basedata.Domain.Shared;
public class SingletonCacheList<T>
{
private static volatile SingletonCacheList<T> instance;
private static object syncRoot = new object();
private List<T> cacheList;
private SingletonCacheList()
{
cacheList = new List<T>();
}
public static SingletonCacheList<T> Instance
{
get
{
if (instance == null)
{
lock (syncRoot)
{
if (instance == null)
{
instance = new SingletonCacheList<T>();
}
}
}
return instance;
}
}
public void Add(T item)
{
cacheList.Add(item);
}
public void Remove(T item)
{
cacheList.Remove(item);
}
public bool Contains(T item)
{
return cacheList.Contains(item);
}
public T this[int index]
{
get
{
return cacheList[index];
}
set
{
cacheList[index] = value;
}
}
public int Count()
{
return cacheList.Count();
}
}

24
be/Modules/BaseData/src/Win_in.Sfs.Basedata.Domain.Shared/Enum/EnumBomSelectedType.cs

@ -0,0 +1,24 @@
using System.ComponentModel.DataAnnotations;
namespace Win_in.Sfs.Basedata.Domain.Shared;
public enum EnumBomSelectedType
{
/// <summary>
/// 树状
/// </summary>
[Display(Name = "树装")]
Tree = 0,
/// <summary>
/// 一维
/// </summary>
[Display(Name = "一维")]
Dimension = 1,
/// <summary>
/// 最终子节点
/// </summary>
[Display(Name = "最终子节点")]
Last = 2,
}

2
be/Modules/BaseData/src/Win_in.Sfs.Basedata.Domain/Boms/Bom.cs

@ -83,3 +83,5 @@ public class Bom : SfsBaseDataAggregateRootBase, IHasTimeRange
/// </summary> /// </summary>
public EnumPlannedSplitRule PlannedSplitRule { get; set; } public EnumPlannedSplitRule PlannedSplitRule { get; set; }
} }

24
be/Modules/BaseData/src/Win_in.Sfs.Basedata.Domain/Boms/BomComponent.cs

@ -0,0 +1,24 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Win_in.Sfs.Basedata.Boms;
public class BomComponent
{
public string Root { get; set; }
public string Component { get; set; }
public string ComponentUom { get; set; }
public decimal ComponentQty { get; set; }
public string ParentComponent { get; set; }
public decimal SumQty { get; set; }
public int Level { get; set; }
public List<BomComponent> SubComponents { get; set; }
public string Path { set; get; }
}

149
be/Modules/BaseData/src/Win_in.Sfs.Basedata.Domain/Boms/BomManager.cs

@ -4,9 +4,14 @@ using System.Linq;
using System.Linq.Expressions; using System.Linq.Expressions;
using System.Threading.Tasks; using System.Threading.Tasks;
using Microsoft.EntityFrameworkCore; using Microsoft.EntityFrameworkCore;
using NetTopologySuite.Geometries;
using Omu.ValueInjecter;
using Volo.Abp; using Volo.Abp;
using Volo.Abp.Domain.Repositories; using Volo.Abp.Domain.Repositories;
using Volo.Abp.Domain.Services; using Volo.Abp.Domain.Services;
using Win_in.Sfs.Basedata.Boms;
using Win_in.Sfs.Basedata.Caches;
using Win_in.Sfs.Basedata.Domain.Shared;
using Win_in.Sfs.Shared.Domain; using Win_in.Sfs.Shared.Domain;
using Win_in.Sfs.Shared.Domain.Shared; using Win_in.Sfs.Shared.Domain.Shared;
@ -21,6 +26,15 @@ public class BomManager : DomainService, IBomManager
{ {
_repository = repository; _repository = repository;
_itemBasicRepository = itemBasicRepository; _itemBasicRepository = itemBasicRepository;
InitBomComponent();
}
private void InitBomComponent()
{
int count = _repository.CountAsync().Result;
if (Cache.Boms.Count!=count)
{
Cache.Boms=_repository.ToListAsync().Result;
}
} }
/// <summary> /// <summary>
@ -70,7 +84,6 @@ public class BomManager : DomainService, IBomManager
} }
} }
return totalBoms; return totalBoms;
} }
@ -213,4 +226,138 @@ public class BomManager : DomainService, IBomManager
} }
return lst; return lst;
} }
public async Task<List<BomComponent>> GetSubcomponentsRecursiveList(List<BomComponent> p_lst, EnumBomSelectedType p_type
)
{
List<BomComponent> list = new List<BomComponent>();
foreach (var item in p_lst)
{
var sublist= await GetSubcomponentsRecursive(item, p_type).ConfigureAwait(false);
list.AddRange(sublist);
}
return list;
}
/// <summary>
/// Bom操作
/// </summary>
/// <param name="p_component"></param>
/// <param name="p_type"></param>
/// <returns></returns>
public async Task<List<BomComponent>> GetSubcomponentsRecursive(BomComponent p_component, EnumBomSelectedType p_type
)
{
List<BomComponent> lastList = new List<BomComponent>();
List<BomComponent> dimensionList=new List<BomComponent>();
var treeList=await GetSubcomponentsRecursive(p_component, 1, p_component.ComponentQty, p_component.Component,
(rs) => lastList.Add(rs)
,
(rs1)=>{
dimensionList.Add(rs1);
}).ConfigureAwait(false);
List<BomComponent> returnList=new List<BomComponent>();
switch (p_type)
{
case EnumBomSelectedType.Last:
returnList = lastList;
break;
case EnumBomSelectedType.Tree:
returnList=treeList;
break;
case EnumBomSelectedType.Dimension:
returnList=dimensionList;
break;
}
return returnList;
}
/// <summary>
/// 层级、拆解、一维结构、树状结构
/// </summary>
/// <param name="p_component">上级组件(初始时为根元素)</param>
/// <param name="level">层级一般为1</param>
/// <param name="sumQty">累计数量</param>
/// <param name="root">根</param>
/// <param name="p_actionLast">拆解到最终零件时</param>
/// <param name="p_actionDimension">树型转成一维表用</param>
/// <param name="bomList"></param>
/// <returns></returns>
private async Task<List<BomComponent>> GetSubcomponentsRecursive(BomComponent p_component, int level, decimal sumQty, string root, Action<BomComponent> p_actionLast,
Action<BomComponent> p_actionDimension
/* ,List<Bom> bomList =null*/
)
{
List<BomComponent> subComponents = new List<BomComponent>();
// 假设 GetComponentsByProduct 方法可获取某个物料号下的所有子零件
List<BomComponent> directSubComponents =await GetComponentsByProduct(p_component.Component).ConfigureAwait(false);
if (!directSubComponents.Any() && level != 1)//不是根元素
{
p_actionLast(p_component);
}
foreach (var component in directSubComponents)
{
component.Root = root;
component.SumQty = sumQty * component.ComponentQty;
component.ParentComponent = p_component.Component;
component.Level = level;
component.Path = (p_component.Component != root) ? p_component.Path + $"->{component.Component}" : p_component.Component + $"->{component.Component}";
component.SubComponents =await GetSubcomponentsRecursive(component, level + 1, sumQty * component.ComponentQty, component.Root, p_actionLast, p_actionDimension).ConfigureAwait(false);
p_actionDimension(component);
subComponents.Add(component);
}
return subComponents;
}
private async Task<List<BomComponent>> GetComponentsByProduct(string product)
{
List<Bom> list=new List<Bom>();
if (Cache.Boms.Count == 0)
{
InitBomComponent();
}
list=Cache.Boms.Count > 0 ? Cache.Boms.Where(p => p.Product == product).ToList() :
await _repository.GetListAsync(p => p.Product == product).ConfigureAwait(false);
List<BomComponent> components = new List<BomComponent>();
foreach (var component in list)
{
BomComponent bomComponent = new BomComponent();
bomComponent.InjectFrom(component);
components.Add(bomComponent);
}
// 其他物料号的子零件信息类似添加
return components;
}
/// <summary>
/// 获取所有bomtree
/// </summary>
/// <param name="productCode"></param>
/// <returns></returns>
public virtual async Task<List<Bom>> GetAllItemByCode(string productCode)
{
List<Bom> boms = new List<Bom>();
var lst = await _repository.GetListAsync(p => p.Product == productCode).ConfigureAwait(false);
foreach (var bom in lst)
{
boms.Add(bom);
var results= await GetAllItemByCode(bom.Component).ConfigureAwait(false);
boms.AddRange(results);
}
return boms;
}
} }

4
be/Modules/BaseData/src/Win_in.Sfs.Basedata.Domain/Boms/IBomManager.cs

@ -2,6 +2,8 @@ using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Threading.Tasks; using System.Threading.Tasks;
using Volo.Abp.Domain.Services; using Volo.Abp.Domain.Services;
using Win_in.Sfs.Basedata.Boms;
using Win_in.Sfs.Basedata.Domain.Shared;
using Win_in.Sfs.Shared.Domain; using Win_in.Sfs.Shared.Domain;
namespace Win_in.Sfs.Basedata.Domain; namespace Win_in.Sfs.Basedata.Domain;
@ -40,5 +42,7 @@ public interface IBomManager : IDomainService, IBulkImportService<Bom>
/// <param name="productNum">总成数量</param> /// <param name="productNum">总成数量</param>
/// <returns></returns> /// <returns></returns>
Task<List<Bom>> GetMaterialTotalQtyAsync(string productCode, int productNum); Task<List<Bom>> GetMaterialTotalQtyAsync(string productCode, int productNum);
Task<List<Bom>> GetAllItemByCode(string productCode);
Task<List<BomComponent>> GetSubcomponentsRecursiveList(List<BomComponent> p_lst, EnumBomSelectedType p_type);
} }

60
be/Modules/BaseData/src/Win_in.Sfs.Basedata.Domain/Caches/Cache.cs

@ -0,0 +1,60 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Win_in.Sfs.Basedata.Domain;
namespace Win_in.Sfs.Basedata.Caches;
public static class Cache
{
public static List<Bom> Boms = new List<Bom>();
public static async void BomsLifeCycle(int lifetime)
{
var reassigner = new Reassigner(DateTime.Now,new TimeSpan(0,5,0));
await reassigner.RunAsync(() => {
Boms.Clear();
}).ConfigureAwait(false);
}
}
public class Reassigner
{
private readonly TimeSpan _interval;
private DateTime _lasttime;
public Reassigner(DateTime lasttime, TimeSpan interval)
{
_lasttime = lasttime;
_interval = interval;
}
public async Task RunAsync(Action p_action)
{
while (true)
{
// 获取当前时间
var currentTime = DateTime.Now;
// 计算上次重新赋值到现在的时间间隔
var elapsed = currentTime - _lasttime;
// 检查时间间隔是否满足条件
if (elapsed >= _interval)
{
p_action();
// 重新赋值
//_value = await GetValueAsync();
// 更新最后更新时间
_lasttime = currentTime;
}
// 等待下一刻钟
await Task.Delay(_interval);
}
}
}

21
be/Modules/BaseData/src/Win_in.Sfs.Basedata.Domain/ErpLocationItems/ErpLocationItem.cs

@ -0,0 +1,21 @@
using Win_in.Sfs.Shared.Domain;
using Win_in.Sfs.Shared.Domain.Entities;
namespace Win_in.Sfs.Basedata.Domain;
public class ErpLocationItem : SfsBaseDataAggregateRootBase
{
/// <summary>
/// 物料代码
/// </summary>
[IgnoreUpdate]
public string ItemCode { get; set; }
/// <summary>
/// 储位代码
/// </summary>
[IgnoreUpdate]
public string ErpLocationCode { get; set; }
}

31
be/Modules/BaseData/src/Win_in.Sfs.Basedata.Domain/ErpLocationItems/ErpLocationItemManager.cs

@ -0,0 +1,31 @@
using System.Collections.Generic;
using System.Threading.Tasks;
using Volo.Abp.Domain.Services;
namespace Win_in.Sfs.Basedata.Domain;
public class ErpLocationItemManager : DomainService, IErpLocationItemManager
{
private readonly IErpLocationItemRepository _repository;
private readonly IItemBasicRepository _itemBasicRepository;
public ErpLocationItemManager(IErpLocationItemRepository repository, IItemBasicRepository itemBasicRepository)
{
_repository = repository;
_itemBasicRepository = itemBasicRepository;
}
/// <summary>
/// 执行导入
/// </summary>
public virtual async Task ImportDataAsync(List<ErpLocationItem> mergeEntities, List<ErpLocationItem> deleteEntities = null)
{
if (deleteEntities != null && deleteEntities.Count > 0)
{
await _repository.BulkDeleteAsync(deleteEntities).ConfigureAwait(false);
}
await _repository.BulkMergeAsync(mergeEntities).ConfigureAwait(false);
}
}

9
be/Modules/BaseData/src/Win_in.Sfs.Basedata.Domain/ErpLocationItems/IErpLocationItemManager.cs

@ -0,0 +1,9 @@
using Volo.Abp.Domain.Services;
using Win_in.Sfs.Shared.Domain;
namespace Win_in.Sfs.Basedata.Domain;
public interface IErpLocationItemManager : IDomainService, IBulkImportService<ErpLocationItem>
{
}

9
be/Modules/BaseData/src/Win_in.Sfs.Basedata.Domain/ErpLocationItems/IErpLocationItemRepository.cs

@ -0,0 +1,9 @@
using System.Threading.Tasks;
using Win_in.Sfs.Shared.Domain;
namespace Win_in.Sfs.Basedata.Domain;
public interface IErpLocationItemRepository : ISfsBaseDataRepositoryBase<ErpLocationItem>, ISfsBulkRepositoryBase<ErpLocationItem>
{
public Task UpsertAsync(ErpLocationItem entity);
}

0
be/Modules/BaseData/src/Win_in.Sfs.Basedata.Domain/PositionCode/IPositionCodeManager.cs → be/Modules/BaseData/src/Win_in.Sfs.Basedata.Domain/PositionCodes/IPositionCodeManager.cs

0
be/Modules/BaseData/src/Win_in.Sfs.Basedata.Domain/PositionCode/IPositionCodeRepository.cs → be/Modules/BaseData/src/Win_in.Sfs.Basedata.Domain/PositionCodes/IPositionCodeRepository.cs

0
be/Modules/BaseData/src/Win_in.Sfs.Basedata.Domain/PositionCode/PositionCode.cs → be/Modules/BaseData/src/Win_in.Sfs.Basedata.Domain/PositionCodes/PositionCode.cs

0
be/Modules/BaseData/src/Win_in.Sfs.Basedata.Domain/PositionCode/PositionCodeManager.cs → be/Modules/BaseData/src/Win_in.Sfs.Basedata.Domain/PositionCodes/PositionCodeManager.cs

5
be/Modules/BaseData/src/Win_in.Sfs.Basedata.Domain/Settings/BasedataSettingDefinitionProvider.cs

@ -23,6 +23,11 @@ public class BasedataSettingDefinitionProvider : SettingDefinitionProvider
BasedataSettings.ItemStoreRelation.NotFoundReturnInfinity, BasedataSettings.ItemStoreRelation.NotFoundReturnInfinity,
"true", "true",
LocalizableString.Create<BasedataResource>(BasedataSettings.ItemStoreRelation.NotFoundReturnInfinity) LocalizableString.Create<BasedataResource>(BasedataSettings.ItemStoreRelation.NotFoundReturnInfinity)
),
new SettingDefinition(
BasedataSettings.ErpLocationItem.NotFoundReturnInfinity,
"false",
LocalizableString.Create<BasedataResource>(BasedataSettings.ErpLocationItem.NotFoundReturnInfinity)
), ),
//找不到质量信息, 默认为免检 //找不到质量信息, 默认为免检
new SettingDefinition( new SettingDefinition(

6
be/Modules/BaseData/src/Win_in.Sfs.Basedata.Domain/Settings/BasedataSettings.cs

@ -10,7 +10,11 @@ public static class BasedataSettings
public const string LocationTypes = Default + "." + nameof(LocationTypes); public const string LocationTypes = Default + "." + nameof(LocationTypes);
public const string NotFoundReturnInfinity = Default + "." + nameof(NotFoundReturnInfinity); public const string NotFoundReturnInfinity = Default + "." + nameof(NotFoundReturnInfinity);
} }
public static class ErpLocationItem
{
private const string Default = GroupName + "." + nameof(ErpLocationItem);
public const string NotFoundReturnInfinity = Default + "." + nameof(NotFoundReturnInfinity);
}
public static class ItemQuality public static class ItemQuality
{ {
private const string Default = GroupName + "." + nameof(ItemQuality); private const string Default = GroupName + "." + nameof(ItemQuality);

1
be/Modules/BaseData/src/Win_in.Sfs.Basedata.Domain/Win_in.Sfs.Basedata.Domain.csproj

@ -8,6 +8,7 @@
</PropertyGroup> </PropertyGroup>
<ItemGroup> <ItemGroup>
<PackageReference Include="ValueInjecter" Version="3.2.0" />
<PackageReference Include="Volo.Abp.Ddd.Domain" Version="5.3.5" /> <PackageReference Include="Volo.Abp.Ddd.Domain" Version="5.3.5" />
<ProjectReference Include="..\..\..\Shared\src\Win_in.Sfs.Shared.Domain\Win_in.Sfs.Shared.Domain.csproj" /> <ProjectReference Include="..\..\..\Shared\src\Win_in.Sfs.Shared.Domain\Win_in.Sfs.Shared.Domain.csproj" />
<ProjectReference Include="..\Win_in.Sfs.Basedata.Domain.Shared\Win_in.Sfs.Basedata.Domain.Shared.csproj" /> <ProjectReference Include="..\Win_in.Sfs.Basedata.Domain.Shared\Win_in.Sfs.Basedata.Domain.Shared.csproj" />

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

@ -36,6 +36,7 @@ public class BasedataDbContext : AbpDbContext<BasedataDbContext>, IBasedataDbCon
public DbSet<ItemBasic> ItemBasics { get; set; } public DbSet<ItemBasic> ItemBasics { get; set; }
public DbSet<ItemCategory> ItemCategories { get; set; } public DbSet<ItemCategory> ItemCategories { get; set; }
public DbSet<ItemPack> ItemPacks { get; set; } public DbSet<ItemPack> ItemPacks { get; set; }
public DbSet<ErpLocationItem> ErpLocationItems { get; set; }
public DbSet<ItemContainer> ItemContainers { get; set; } public DbSet<ItemContainer> ItemContainers { get; set; }
public DbSet<ItemStoreRelation> ItemStoreRelations { get; set; } public DbSet<ItemStoreRelation> ItemStoreRelations { get; set; }
public DbSet<ItemSafetyStock> ItemSafetyStocks { get; set; } public DbSet<ItemSafetyStock> ItemSafetyStocks { get; set; }

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

@ -47,6 +47,7 @@ public static class BasedataDbContextModelCreatingExtensions
builder.ConfigureItemBasic(options); builder.ConfigureItemBasic(options);
builder.ConfigureItemCategory(options); builder.ConfigureItemCategory(options);
builder.ConfigureItemPack(options); builder.ConfigureItemPack(options);
builder.ConfigureErpLocationItem(options);
builder.ConfigureItemContainer(options); builder.ConfigureItemContainer(options);
builder.ConfigureItemStoreRelation(options); builder.ConfigureItemStoreRelation(options);
builder.ConfigureItemSafetyStock(options); builder.ConfigureItemSafetyStock(options);

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

@ -51,6 +51,7 @@ public class BasedataEntityFrameworkCoreModule : AbpModule
context.Services.AddTransient<IItemBasicRepository, ItemBasicEfCoreRepository>(); context.Services.AddTransient<IItemBasicRepository, ItemBasicEfCoreRepository>();
context.Services.AddTransient<IItemCategoryRepository, ItemCategoryEfCoreRepository>(); context.Services.AddTransient<IItemCategoryRepository, ItemCategoryEfCoreRepository>();
context.Services.AddTransient<IItemPackRepository, ItemPackEfCoreRepository>(); context.Services.AddTransient<IItemPackRepository, ItemPackEfCoreRepository>();
context.Services.AddTransient<IErpLocationItemRepository, ErpLocationItemEfCoreRepository>();
context.Services.AddTransient<IItemContainerRepository, ItemContainerEfCoreRepository>(); context.Services.AddTransient<IItemContainerRepository, ItemContainerEfCoreRepository>();
context.Services.AddTransient<IItemStoreRelationRepository, ItemStoreRelationEfCoreRepository>(); context.Services.AddTransient<IItemStoreRelationRepository, ItemStoreRelationEfCoreRepository>();
context.Services.AddTransient<IItemSafetyStockRepository, ItemSafetyStockEfCoreRepository>(); context.Services.AddTransient<IItemSafetyStockRepository, ItemSafetyStockEfCoreRepository>();

2
be/Modules/BaseData/src/Win_in.Sfs.Basedata.EntityFrameworkCore/Equipments/EquipmentDbContextModelCreatingExtensions.cs

@ -21,6 +21,8 @@ public static class EquipmentDbContextModelCreatingExtensions
//Properties //Properties
b.Property(q => q.Code).IsRequired().HasMaxLength(SfsPropertyConst.CodeLength).IsRequired(true); b.Property(q => q.Code).IsRequired().HasMaxLength(SfsPropertyConst.CodeLength).IsRequired(true);
b.Property(q => q.Model).HasMaxLength(SfsPropertyConst.CodeLength);
b.Property(q => q.Model).HasMaxLength(SfsPropertyConst.CodeLength); b.Property(q => q.Model).HasMaxLength(SfsPropertyConst.CodeLength);
b.Property(q => q.LocCode).HasMaxLength(SfsPropertyConst.CodeLength); b.Property(q => q.LocCode).HasMaxLength(SfsPropertyConst.CodeLength);

35
be/Modules/BaseData/src/Win_in.Sfs.Basedata.EntityFrameworkCore/ErpLocationItems/ErpLocationItemDbContextModelCreatingExtensions.cs

@ -0,0 +1,35 @@
using Microsoft.EntityFrameworkCore;
using Volo.Abp.EntityFrameworkCore.Modeling;
using Win_in.Sfs.Basedata.Domain;
using Win_in.Sfs.Shared.Domain.Shared;
using Win_in.Sfs.Shared.EntityFrameworkCore;
namespace Win_in.Sfs.Basedata.EntityFrameworkCore;
public static class ErpLocationItemDbContextModelCreatingExtensions
{
public static void ConfigureErpLocationItem(this ModelBuilder builder, BasedataModelBuilderConfigurationOptions options)
{
builder.Entity<ErpLocationItem>(b =>
{
//Configure table & schema name
b.ToTable(options.TablePrefix + nameof(ErpLocationItem), options.Schema);
//Configure ABP properties
b.ConfigureByConvention();
//Configure Sfs base properties
b.ConfigureSfsBase();
//Properties
b.Property(q => q.ItemCode).IsRequired().HasMaxLength(SfsPropertyConst.CodeLength);
b.Property(q => q.ErpLocationCode).IsRequired().HasMaxLength(SfsPropertyConst.CodeLength);
//Relations
//None
//Indexes
b.HasIndex(q => new { q.ItemCode, q.ErpLocationCode }).IsUnique();
});
}
}

25
be/Modules/BaseData/src/Win_in.Sfs.Basedata.EntityFrameworkCore/ErpLocationItems/ErpLocationItemEfCoreRepository.cs

@ -0,0 +1,25 @@
using System.Threading.Tasks;
using Microsoft.EntityFrameworkCore;
using Volo.Abp.EntityFrameworkCore;
using Win_in.Sfs.Basedata.Domain;
using Win_in.Sfs.Shared.Domain;
namespace Win_in.Sfs.Basedata.EntityFrameworkCore;
public class ErpLocationItemEfCoreRepository : SfsBaseDataEfCoreRepositoryBase<BasedataDbContext, ErpLocationItem>, IErpLocationItemRepository, ISfsBulkRepositoryBase<ErpLocationItem>
{
public ErpLocationItemEfCoreRepository(IDbContextProvider<BasedataDbContext> dbContextProvider) : base(dbContextProvider)
{
}
public virtual async Task UpsertAsync(ErpLocationItem entity)
{
var dbSet = await GetDbSetAsync().ConfigureAwait(false);
var exist = await dbSet.FirstOrDefaultAsync(p => p.ItemCode == entity.ItemCode&&p.ErpLocationCode == entity.ErpLocationCode).ConfigureAwait(false);
if (exist == null)
{
var insRet = await InsertAsync(entity).ConfigureAwait(false);
}
}
}

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

@ -36,6 +36,7 @@ public interface IBasedataDbContext : IEfCoreDbContext
public DbSet<ItemBasic> ItemBasics { get; } public DbSet<ItemBasic> ItemBasics { get; }
public DbSet<ItemCategory> ItemCategories { get; } public DbSet<ItemCategory> ItemCategories { get; }
public DbSet<ItemPack> ItemPacks { get; } public DbSet<ItemPack> ItemPacks { get; }
public DbSet<ErpLocationItem> ErpLocationItems { get; }
public DbSet<ItemContainer> ItemContainers { get; } public DbSet<ItemContainer> ItemContainers { get; }
public DbSet<PositionCode> PositionCodes { get; } public DbSet<PositionCode> PositionCodes { get; }
public DbSet<ItemStoreRelation> ItemStoreRelations { get; } public DbSet<ItemStoreRelation> ItemStoreRelations { get; }

0
be/Modules/BaseData/src/Win_in.Sfs.Basedata.EntityFrameworkCore/PositionCode/PositionCodeDbContextModelCreatingExtensions.cs → be/Modules/BaseData/src/Win_in.Sfs.Basedata.EntityFrameworkCore/PositionCodes/PositionCodeDbContextModelCreatingExtensions.cs

0
be/Modules/BaseData/src/Win_in.Sfs.Basedata.EntityFrameworkCore/PositionCode/PositionCodeEfCoreRepository.cs → be/Modules/BaseData/src/Win_in.Sfs.Basedata.EntityFrameworkCore/PositionCodes/PositionCodeEfCoreRepository.cs

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

@ -654,24 +654,19 @@ public class BalanceAppService
{ {
input.Condition.Filters.Add(new Filter("ContainerCode", listInput.containerCode)); input.Condition.Filters.Add(new Filter("ContainerCode", listInput.containerCode));
} }
if (listInput.locationTypes != null && listInput.locationTypes.Any()) if (listInput.locationTypes != null && listInput.locationTypes.Any())
{ {
var locationCodes = (await _locationAclService.GetListByTypesAsync(listInput.locationTypes).ConfigureAwait(false)).Select(t => t.Code).ToList(); var locationCodes = (await _locationAclService.GetListByTypesAsync(listInput.locationTypes).ConfigureAwait(false)).Select(t => t.Code).ToList();
if (locationCodes.Any()) if (locationCodes.Any())
{ {
input.Condition.Filters.Add(new Filter("LocationCode", JsonSerializer.Serialize(locationCodes), "In")); input.Condition.Filters.Add(new Filter("LocationCode", JsonSerializer.Serialize(locationCodes), "In"));
} }
} }
if (listInput.inventoryStatuses != null && listInput.inventoryStatuses.Any()) if (listInput.inventoryStatuses != null && listInput.inventoryStatuses.Any())
{ {
input.Condition.Filters.Add(new Filter("Status", JsonSerializer.Serialize(listInput.inventoryStatuses), "In")); input.Condition.Filters.Add(new Filter("Status", JsonSerializer.Serialize(listInput.inventoryStatuses), "In"));
} }
var balanceDTOs = await GetPagedListByFilterAsync(input, false).ConfigureAwait(false); var balanceDTOs = await GetPagedListByFilterAsync(input, false).ConfigureAwait(false);
return balanceDTOs; return balanceDTOs;
} }

36
be/Modules/Inventory/src/Win_in.Sfs.Wms.Inventory.Domain.Acl/ErpLocationItem/ErpLocationItemAclService.cs

@ -0,0 +1,36 @@
using System.Collections.Generic;
using System.Threading.Tasks;
using Volo.Abp.Caching;
using Win_in.Sfs.Basedata.Application.Contracts;
using Win_in.Sfs.Shared.Application;
namespace Win_in.Sfs.Wms.Inventory.Domain.Acl.ErpLocationItem;
public class ErpLocationItemAclService
: AclServiceBase, IErpLocationItemAclService
{
private readonly IErpLocationItemAppService _appService;
private readonly IDistributedCache<ErpLocationItemDTO> _cache;
public ErpLocationItemAclService(
IErpLocationItemAppService appService
, IDistributedCache<ErpLocationItemDTO> cache
)
{
_appService = appService;
_cache = cache;
}
public virtual async Task<ErpLocationItemDTO> GetFirstAsync(string itemCode, string locationCode)
{
var dto = await _cache.GetOrAddItemAsync(
$"{itemCode}:{locationCode}",
async () => await GetFromAppServiceAsync(itemCode, locationCode).ConfigureAwait(false),
CacheMinutes).ConfigureAwait(false);
return dto;
}
private async Task<ErpLocationItemDTO> GetFromAppServiceAsync(string itemCode, string locationCode)
{
return await _appService.CheckItemErpLocationIsAvailable(itemCode, locationCode).ConfigureAwait(false);
}
}

9
be/Modules/Inventory/src/Win_in.Sfs.Wms.Inventory.Domain.Acl/ErpLocationItem/IErpLocationItemAclService.cs

@ -0,0 +1,9 @@
using System.Collections.Generic;
using System.Threading.Tasks;
using Win_in.Sfs.Basedata.Application.Contracts;
namespace Win_in.Sfs.Wms.Inventory.Domain.Acl.ErpLocationItem;
public interface IErpLocationItemAclService
{
Task<ErpLocationItemDTO> GetFirstAsync(string itemCode, string locationCode);
}

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

@ -14,6 +14,7 @@ using Volo.Abp.SettingManagement;
using Win_in.Sfs.Basedata.Application.Contracts; using Win_in.Sfs.Basedata.Application.Contracts;
using Win_in.Sfs.Shared.Domain; using Win_in.Sfs.Shared.Domain;
using Win_in.Sfs.Shared.Domain.Shared; using Win_in.Sfs.Shared.Domain.Shared;
using Win_in.Sfs.Wms.Inventory.Domain.Acl.ErpLocationItem;
using Win_in.Sfs.Wms.Inventory.Domain.Acl.ItemBasic; using Win_in.Sfs.Wms.Inventory.Domain.Acl.ItemBasic;
using Win_in.Sfs.Wms.Inventory.Domain.Acl.ItemStoreRelation; using Win_in.Sfs.Wms.Inventory.Domain.Acl.ItemStoreRelation;
using Win_in.Sfs.Wms.Inventory.Domain.Acl.Location; using Win_in.Sfs.Wms.Inventory.Domain.Acl.Location;
@ -29,6 +30,7 @@ public class BalanceManager : DomainService, IBalanceManager
private readonly IItemBasicAclService _itemBasicAclService; private readonly IItemBasicAclService _itemBasicAclService;
private readonly ILocationAclService _locationAclService; private readonly ILocationAclService _locationAclService;
private readonly IItemStoreRelationAclService _itemStoreRelationAclService; private readonly IItemStoreRelationAclService _itemStoreRelationAclService;
private readonly IErpLocationItemAclService _erpLocationItemAclService;
private readonly ISettingManager _settingManager; private readonly ISettingManager _settingManager;
private readonly IExpectInRepository _expectInRepository; private readonly IExpectInRepository _expectInRepository;
private readonly IExpectOutRepository _expectOutRepository; private readonly IExpectOutRepository _expectOutRepository;
@ -41,6 +43,7 @@ public class BalanceManager : DomainService, IBalanceManager
, IExpectOutRepository expectOutRepository , IExpectOutRepository expectOutRepository
, IItemStoreRelationAclService itemStoreRelationAclService , IItemStoreRelationAclService itemStoreRelationAclService
, ISettingManager settingManager , ISettingManager settingManager
, IErpLocationItemAclService erpLocationItemAclService
) )
{ {
_objectMapper = objectMapper; _objectMapper = objectMapper;
@ -51,6 +54,7 @@ public class BalanceManager : DomainService, IBalanceManager
_itemStoreRelationAclService = itemStoreRelationAclService; _itemStoreRelationAclService = itemStoreRelationAclService;
_settingManager = settingManager; _settingManager = settingManager;
_expectOutRepository = expectOutRepository; _expectOutRepository = expectOutRepository;
_erpLocationItemAclService = erpLocationItemAclService;
} }
#region Modify #region Modify
@ -83,7 +87,8 @@ public class BalanceManager : DomainService, IBalanceManager
//检查是否存在物料存储关系 //检查是否存在物料存储关系
await CheckItemStoreRelationAsync(transaction, location).ConfigureAwait(false); await CheckItemStoreRelationAsync(transaction, location).ConfigureAwait(false);
//校验开账信息
await CheckErpLocationItemAsync(transaction).ConfigureAwait(false);
//获取已存在库存 //获取已存在库存
var existBalance = await GetFirstAsync( var existBalance = await GetFirstAsync(
transaction.PackingCode, transaction.PackingCode,
@ -150,6 +155,21 @@ public class BalanceManager : DomainService, IBalanceManager
throw new UserFriendlyException($"未找到零件【{transaction.ItemCode}】与库位【{transaction.LocationCode}】的映射关系"); throw new UserFriendlyException($"未找到零件【{transaction.ItemCode}】与库位【{transaction.LocationCode}】的映射关系");
} }
} }
/// <summary>
/// 校验开账信息
/// </summary>
/// <param name="transaction"></param>
/// <returns></returns>
/// <exception cref="UserFriendlyException"></exception>
private async Task CheckErpLocationItemAsync(Transaction transaction)
{
var erpLocationItem =await _erpLocationItemAclService.GetFirstAsync( transaction.ItemCode, transaction.LocationErpCode).ConfigureAwait(false);
if (erpLocationItem == null)
{
throw new UserFriendlyException($"未找到零件【{transaction.ItemCode}】与ERP储位【{transaction.LocationErpCode}】的开账信息");
}
}
/// <summary> /// <summary>
/// 出库形式 /// 出库形式
@ -178,6 +198,9 @@ public class BalanceManager : DomainService, IBalanceManager
//TODO 物品状态判断 //TODO 物品状态判断
item.CheckStatus(validStatusList: new List<EnumItemStatus>()); item.CheckStatus(validStatusList: new List<EnumItemStatus>());
//校验开账信息
await CheckErpLocationItemAsync(transaction).ConfigureAwait(false);
var existBalance = await GetFirstAsync( var existBalance = await GetFirstAsync(
transaction.PackingCode, transaction.PackingCode,
transaction.ItemCode, transaction.ItemCode,

5
be/Modules/Shared/src/Win_in.Sfs.Shared.Domain.Shared/Enums/Basedata/EnumLocationType.cs

@ -73,4 +73,9 @@ public enum EnumLocationType
/// 在途库 /// 在途库
/// </summary> /// </summary>
[Display(Name = "在途库")] TRANSPORT = 13, [Display(Name = "在途库")] TRANSPORT = 13,
/// <summary>
/// 三方库
/// </summary>
[Display(Name = "三方库")] THIRDPARTY = 14,
} }

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

@ -157,4 +157,8 @@ public enum EnumTransType
/// </summary> /// </summary>
[Display(Name = "初始化")] [Display(Name = "初始化")]
Initial = 99, Initial = 99,
} }

37
be/Modules/Shared/src/Win_in.Sfs.Shared.Domain.Shared/Enums/Store/Statuses/EnumMesStatus.cs

@ -0,0 +1,37 @@
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Win_in.Sfs.Shared.Domain.Shared.Enums.Store.Types;
public enum EnumMesStatus
{
/// <summary>
/// 执行中
/// </summary>
[Display(Name = "执行中")]
Handling = 2,
/// <summary>
/// 已过时
/// </summary>
[Display(Name = "已过时")]
OverTime =3 ,
/// <summary>
/// 有更新
/// </summary>
[Display(Name = "有更新")]
Update = 4,
/// <summary>
/// WEI
/// </summary>
[Display(Name = "未开启")]
New =1 ,
}

17
be/Modules/Shared/src/Win_in.Sfs.Shared.Domain.Shared/Enums/Store/Statuses/EnumRequestStatus.cs

@ -63,4 +63,21 @@ public enum EnumRequestStatus
/// </summary> /// </summary>
[Display(Name = "部分完成")] [Display(Name = "部分完成")]
Partial = 9, Partial = 9,
/// <summary>
/// 部分完成
/// </summary>
[Display(Name = "已过时")]
Deprecated = 10,
/// <summary>
/// 有更新
/// </summary>
[Display(Name = "有更新")]
Updated = 10,
} }

15
be/Modules/Shared/src/Win_in.Sfs.Shared.Domain.Shared/Enums/Store/Types/EnumMesType.cs

@ -11,3 +11,18 @@ public enum EnumMesType
MesUnFreeze=10002, MesUnFreeze=10002,
MesUnQualified=10003 MesUnQualified=10003
} }
public enum EnumMesRecordSTATE
{
MesFreeze = 10001,
MesUnFreeze = 10002,
MesUnQualified = 10003
}

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

@ -0,0 +1,46 @@
using System.ComponentModel.DataAnnotations;
using Win_in.Sfs.Shared.Domain;
namespace Win_in.Sfs.Wms.Store.Application.Contracts;
/// <summary>
/// 三方库库移任务
/// </summary>
[Display(Name = "三方库库移任务")]
public class ThirdLocationJobDTO : SfsJobDTOBase<ThirdLocationJobDetailDTO>
{
/// <summary>
/// 叫料请求类型
/// </summary>
[Display(Name = "叫料请求类型")]
[StringLength(SfsEfCorePropertyConst.CodeLength, ErrorMessage = "{0}最多输入{1}个字符")]
public string RequestType { get; set; }
/// <summary>
/// 生产线
/// </summary>
[Display(Name = "生产线")]
[StringLength(SfsEfCorePropertyConst.CodeLength, ErrorMessage = "{0}最多输入{1}个字符")]
public string ProdLine { get; set; }
/// <summary>
/// 要货申请单号
/// </summary>
[Display(Name = "要货申请单号")]
[StringLength(SfsEfCorePropertyConst.CodeLength, ErrorMessage = "{0}最多输入{1}个字符")]
public string RequestNumber { get; set; }
/// <summary>
/// 车间
/// </summary>
[Display(Name = "车间")]
[StringLength(SfsEfCorePropertyConst.CodeLength, ErrorMessage = "{0}最多输入{1}个字符")]
public string Workshop { get; set; }
/// <summary>
/// 使用在途库
/// </summary>
[Display(Name = "使用在途库")]
public bool UseOnTheWayLocation { get; set; }
}

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

@ -0,0 +1,112 @@
using System;
using System.ComponentModel.DataAnnotations;
using Win_in.Sfs.Shared.Domain;
using Win_in.Sfs.Shared.Domain.Shared;
namespace Win_in.Sfs.Wms.Store.Application.Contracts;
public class ThirdLocationJobDetailDTO : SfsJobRecommendFromDetailDTOBase, IHasToLocation
{
/// <summary>
/// 请求库位
/// </summary>
[Display(Name = "请求库位")]
public string RequestLocationCode { get; set; }
/// <summary>
/// 到库位
/// </summary>
[Display(Name = "到库位")]
public string ToLocationCode { get; set; }
/// <summary>
/// 到库区
/// </summary>
[Display(Name = "到库区")]
public string ToLocationArea { get; set; }
/// <summary>
/// 到库位组
/// </summary>
[Display(Name = "到库位组")]
public string ToLocationGroup { get; set; }
/// <summary>
/// 到ERP库位
/// </summary>
[Display(Name = "到ERP库位")]
public string ToLocationErpCode { get; set; }
/// <summary>
/// 到仓库
/// </summary>
[Display(Name = "到仓库")]
public string ToWarehouseCode { get; set; }
/// <summary>
/// 在途库库位
/// </summary>
[Display(Name = "在途库库位")]
public string OnTheWayLocationCode { get; set; }
/// <summary>
/// 生产线
/// </summary>
[Display(Name = "生产线")]
public string ProdLine { get; set; }
/// <summary>
/// 工作中心
/// </summary>
[Display(Name = "工作中心")]
public string WorkStation { get; set; }
/// <summary>
/// 过期时间
/// </summary>
[Display(Name = "过期时间")]
public DateTime ExpiredTime { get; set; }
/// <summary>
/// 工序
/// </summary>
[Display(Name = "工序")]
public string Operation { get; set; }
/// <summary>
/// 配送方式
/// </summary>
[Display(Name = "配送方式")]
public EnumDistributionType DistributionType { get; set; }
/// <summary>
/// 取整方式
/// </summary>
[Display(Name = "取整方式")]
public EnumTruncType TruncType { get; set; }
/// <summary>
/// 取整后数量
/// </summary>
[Display(Name = "取整后数量")]
public decimal RoundedQty { get; set; }
/// <summary>
/// 计划拆分规则
/// </summary>
[Display(Name = "计划拆分规则")]
public EnumPlannedSplitRule PlannedSplitRule { get; set; }
/// <summary>
/// 计划开始时间
/// </summary>
[Display(Name = "计划开始时间")]
public DateTime PlanBeginTime { get; set; }
/// <summary>
/// 每次配送数量
/// </summary>
[Display(Name = "每次配送数量")]
public decimal DeliveryQty { get; set; }
}

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

@ -0,0 +1,26 @@
using System.Collections.Generic;
using System.Threading;
using System.Threading.Tasks;
using Volo.Abp.Application.Dtos;
namespace Win_in.Sfs.Wms.Store.Application.Contracts;
public interface IThirdLocationJobAppService
: ISfsJobAppServiceBase<ThirdLocationJobDTO, SfsJobRequestInputBase, ThirdLocationJobCheckInput, ThirdLocationJobEditInput>
{
Task<List<ThirdLocationJobDTO>> CheckJobExistByItemCodeAndLocationCode(string itemCode, string locationCode);
Task CancelByMaterialRequestAsync(string thirdLocationNumber);
Task<PagedResultDto<ThirdLocationJobDTO>> GetListByTypeAsync(SfsJobRequestInputBase requestInput, string requestType,
bool includeDetails = false, CancellationToken cancellationToken = default);
Task<List<ThirdLocationJobDTO>> GetByRequestNumberAsync(string requestNumber);
/// <summary>
/// 保存拆箱时涉及的明细修改
/// </summary>
/// <returns></returns>
Task<ThirdLocationJobDTO> SaveDetail_SplitPackingAsync(SplitPacking_UpdateJobDetailInput input);
}

6
be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Jobs/ThirdLocationJobs/Inputs/ThirdLocationJobCheckInput.cs

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

134
be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Jobs/ThirdLocationJobs/Inputs/ThirdLocationJobDetailInput.cs

@ -0,0 +1,134 @@
using System;
using System.ComponentModel.DataAnnotations;
using Win_in.Sfs.Shared.Domain;
using Win_in.Sfs.Shared.Domain.Shared;
namespace Win_in.Sfs.Wms.Store.Application.Contracts;
public class ThirdLocationJobDetailInput : SfsJobRecommendFromDetailInputBase, IHasToLocation
{
/// <summary>
/// 请求库位
/// </summary>
[Display(Name = "请求库位")]
[Required(ErrorMessage = "{0}是必填项")]
[StringLength(SfsEfCorePropertyConst.CodeLength, ErrorMessage = "{0}最多输入{1}个字符")]
public string RequestLocationCode { get; set; }
/// <summary>
/// 到库位
/// </summary>
[Display(Name = "到库位")]
[Required(ErrorMessage = "{0}是必填项")]
[StringLength(SfsEfCorePropertyConst.CodeLength, ErrorMessage = "{0}最多输入{1}个字符")]
public string ToLocationCode { get; set; }
/// <summary>
/// 到库区
/// </summary>
[Display(Name = "到库区")]
public string ToLocationArea { get; set; }
/// <summary>
/// 到库位组
/// </summary>
[Display(Name = "到库位组")]
public string ToLocationGroup { get; set; }
/// <summary>
/// 到ERP库位
/// </summary>
[Display(Name = "到ERP库位")]
[Required(ErrorMessage = "{0}是必填项")]
[StringLength(SfsEfCorePropertyConst.CodeLength, ErrorMessage = "{0}最多输入{1}个字符")]
public string ToLocationErpCode { get; set; }
/// <summary>
/// 到仓库
/// </summary>
[Display(Name = "到仓库")]
[Required(ErrorMessage = "{0}是必填项")]
[StringLength(SfsEfCorePropertyConst.CodeLength, ErrorMessage = "{0}最多输入{1}个字符")]
public string ToWarehouseCode { get; set; }
/// <summary>
/// 在途库库位
/// </summary>
[Display(Name = "在途库库位")]
public string OnTheWayLocationCode { get; set; }
/// <summary>
/// 生产线
/// </summary>
[Display(Name = "生产线")]
[StringLength(SfsEfCorePropertyConst.CodeLength, ErrorMessage = "{0}最多输入{1}个字符")]
public string ProdLine { get; set; }
/// <summary>
/// 工作中心
/// </summary>
[Display(Name = "工作中心")]
[StringLength(SfsEfCorePropertyConst.CodeLength, ErrorMessage = "{0}最多输入{1}个字符")]
public string WorkStation { get; set; }
/// <summary>
/// 过期时间
/// </summary>
[Display(Name = "过期时间")]
[Required(ErrorMessage = "{0}是必填项")]
public DateTime ExpiredTime { get; set; }
/// <summary>
/// 工序
/// </summary>
[Display(Name = "工序")]
[StringLength(SfsEfCorePropertyConst.CodeLength, ErrorMessage = "{0}最多输入{1}个字符")]
public string Operation { get; set; }
/// <summary>
/// 配送方式
/// </summary>
[Display(Name = "配送方式")]
public EnumDistributionType DistributionType { get; set; }
/// <summary>
/// 取整方式
/// </summary>
[Display(Name = "取整方式")]
public EnumTruncType TruncType { get; set; }
/// <summary>
/// 取整后数量
/// </summary>
[Display(Name = "取整后数量")]
public decimal RoundedQty { get; set; }
/// <summary>
/// 计划拆分规则
/// </summary>
[Display(Name = "计划拆分规则")]
public EnumPlannedSplitRule PlannedSplitRule { get; set; }
/// <summary>
/// 计划开始时间
/// </summary>
[Display(Name = "计划开始时间")]
public DateTime PlanBeginTime { get; set; }
/// <summary>
/// 每次配送数量
/// </summary>
[Display(Name = "每次配送数量")]
public decimal DeliveryQty { get; set; }
/// <summary>
/// 位置码
/// </summary>
public string PositionCode { get; set; }
/// <summary>
/// 推荐类型
/// </summary>
public EnumRecommendType RecommendType { get; set; }
}

82
be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Jobs/ThirdLocationJobs/Inputs/ThirdLocationJobEditInput.cs

@ -0,0 +1,82 @@
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using Win_in.Sfs.Shared.Domain;
using Win_in.Sfs.Shared.Domain.Shared;
namespace Win_in.Sfs.Wms.Store.Application.Contracts;
public class ThirdLocationJobEditInput : SfsJobCreateUpdateInputBase, ISfsJobCreateInput<ThirdLocationJobDetailInput>
{
#region Create
/// <summary>
/// 上游任务编号
/// </summary>
[Display(Name = "上游任务编号")]
[StringLength(SfsEfCorePropertyConst.CodeLength, ErrorMessage = "{0}最多输入{1}个字符")]
public string UpStreamJobNumber { get; set; }
/// <summary>
/// 要货单号
/// </summary>
[Display(Name = "要货单号")]
[Required(ErrorMessage = "{0}是必填项")]
[StringLength(SfsEfCorePropertyConst.CodeLength, ErrorMessage = "{0}最多输入{1}个字符")]
public string RequestNumber { get; set; }
/// <summary>
/// 叫料请求类型
/// </summary>
[Display(Name = "叫料请求类型")]
[StringLength(SfsEfCorePropertyConst.CodeLength, ErrorMessage = "{0}最多输入{1}个字符")]
public string RequestType { get; set; }
/// <summary>
/// 任务类型
/// </summary>
[Display(Name = "任务类型")]
[Required(ErrorMessage = "{0}是必填项")]
public EnumJobType JobType { get; set; }
/// <summary>
/// 是否自动完成
/// </summary>
[Display(Name = "是否自动完成")]
[Required(ErrorMessage = "{0}是必填项")]
public bool IsAutoComplete { get; set; }
/// <summary>
/// 过期时间
/// </summary>
[Display(Name = "过期时间")]
[Required(ErrorMessage = "{0}是必填项")]
public DateTime ExpiredTime { get; set; }
/// <summary>
/// 任务明细
/// </summary>
[Display(Name = "任务明细")]
[Required(ErrorMessage = "{0}是必填项")]
public List<ThirdLocationJobDetailInput> Details { get; set; } = new();
/// <summary>
/// 车间
/// </summary>
[Display(Name = "车间")]
[StringLength(SfsEfCorePropertyConst.CodeLength, ErrorMessage = "{0}最多输入{1}个字符")]
public string Workshop { get; set; }
/// <summary>
/// 生产线
/// </summary>
[Display(Name = "生产线")]
[StringLength(SfsEfCorePropertyConst.CodeLength, ErrorMessage = "{0}最多输入{1}个字符")]
public string ProdLine { get; set; }
/// <summary>
/// 使用在途库
/// </summary>
[Display(Name = "使用在途库")]
public bool UseOnTheWayLocation { get; set; }
#endregion
}

27
be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Jobs/ThirdLocationJobs/ThirdLocationJobPermissions.cs

@ -0,0 +1,27 @@
using Volo.Abp.Authorization.Permissions;
using Win_in.Sfs.Wms.Store.Domain;
namespace Win_in.Sfs.Wms.Store.Application.Contracts;
public static class ThirdLocationJobPermissions
{
public const string Default = StorePermissions.GroupName + "." + nameof(ThirdLocationJob);
public const string Create = Default + "." + StorePermissions.CreateStr;
public const string Update = Default + "." + StorePermissions.UpdateStr;
public const string Delete = Default + "." + StorePermissions.DeleteStr;
//自动发料任务
public const string AutoThirdLocationJob = StorePermissions.GroupName + "." + nameof(AutoThirdLocationJob);
public static void AddThirdLocationJobPermission(this PermissionGroupDefinition permissionGroup)
{
var thirdLocationJobPermission = permissionGroup.AddPermission(Default, StorePermissionDefinitionProvider.L(nameof(ThirdLocationJob)));
thirdLocationJobPermission.AddChild(Create, StorePermissionDefinitionProvider.L(StorePermissions.CreateStr));
thirdLocationJobPermission.AddChild(Update, StorePermissionDefinitionProvider.L(StorePermissions.UpdateStr));
thirdLocationJobPermission.AddChild(Delete, StorePermissionDefinitionProvider.L(StorePermissions.DeleteStr));
permissionGroup.AddPermission(AutoThirdLocationJob, StorePermissionDefinitionProvider.L(nameof(AutoThirdLocationJob)));
}
}

20
be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Notes/CustomerProductionReturnNotes/CustomerProductionReturnNotePermissions.cs

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

29
be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Notes/CustomerProductionReturnNotes/DTOs/CustomerProductionReturnNoteDTO.cs

@ -0,0 +1,29 @@
using System;
using System.ComponentModel.DataAnnotations;
namespace Win_in.Sfs.Wms.Store.Application.Contracts;
/// <summary>
/// 退库记录-实体DTO
/// </summary>
[Display(Name = "退库记录")]
public class CustomerProductionReturnNoteDTO : SfsStoreDTOBase<CustomerProductionReturnNoteDetailDTO>
{
/// <summary>
/// 任务ID
/// </summary>
[Display(Name = "任务ID")]
public string JobNumber { get; set; }
/// <summary>
/// 退料单号
/// </summary>
[Display(Name = "退料单号")]
public string ProductionReturnRequestNumber { get; set; }
/// <summary>
/// 退料时间
/// </summary>
[Display(Name = "退料时间")]
public DateTime ReturnTime { get; set; }
}

9
be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Notes/CustomerProductionReturnNotes/DTOs/CustomerProductionReturnNoteDetailDTO.cs

@ -0,0 +1,9 @@
namespace Win_in.Sfs.Wms.Store.Application.Contracts;
/// <summary>
/// 退库记录-明细表-实体DTO
/// </summary>
public class CustomerProductionReturnNoteDetailDTO : SfsStoreRecommendToDetailWithFromToDTOBase
{
}

9
be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Notes/CustomerProductionReturnNotes/ICustomerProductionReturnNoteAppService.cs

@ -0,0 +1,9 @@
using System.Threading.Tasks;
namespace Win_in.Sfs.Wms.Store.Application.Contracts;
public interface ICustomerProductionReturnNoteAppService :
ISfsStoreMasterReadOnlyAppServiceBase<CustomerProductionReturnNoteDTO, SfsStoreRequestInputBase, CustomerProductionReturnNoteDetailDTO, SfsStoreRequestInputBase>
{
Task<CustomerProductionReturnNoteDTO> CreateAsync(CustomerProductionReturnNoteEditInput input);
}

9
be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Notes/CustomerProductionReturnNotes/Inputs/CustomerProductionReturnNoteDetailInput.cs

@ -0,0 +1,9 @@
namespace Win_in.Sfs.Wms.Store.Application.Contracts;
/// <summary>
/// 退库记录-明细表-实体DTO
/// </summary>
public class CustomerProductionReturnNoteDetailInput : SfsStoreRecommendToDetailWithFromToDTOBase
{
}

47
be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Notes/CustomerProductionReturnNotes/Inputs/CustomerProductionReturnNoteEditInput.cs

@ -0,0 +1,47 @@
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using Win_in.Sfs.Shared.Domain;
namespace Win_in.Sfs.Wms.Store.Application.Contracts;
/// <summary>
/// 退库记录-新增和更新基础DTO
/// </summary>
public class CustomerProductionReturnNoteEditInput : SfsStoreCreateOrUpdateInputBase
{
#region Base
/// <summary>
/// 任务ID
/// </summary>
[Display(Name = "任务ID")]
public string JobNumber { get; set; }
/// <summary>
/// 退料时间
/// </summary>
[Display(Name = "退料时间")]
public DateTime ReturnTime { get; set; }
/// <summary>
/// 退料申请单号
/// </summary>
[Display(Name = "退料申请单号")]
public string ProductionReturnRequestNumber { get; set; }
#endregion
#region Create
/// <summary>
/// 退库记录单号
/// </summary>
[Display(Name = "退库记录单号")]
[StringLength(SfsEfCorePropertyConst.CodeLength, ErrorMessage = "{0}最多输入{1}个字符")]
public string Number { get; set; }
/// <summary>
/// 明细列表
/// </summary>
[Display(Name = "明细列表")]
public List<CustomerProductionReturnNoteDetailInput> Details { get; set; }
#endregion
}

34
be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Notes/CustomerProductionReturnNotes/Inputs/CustomerProductionReturnNoteImportInput.cs

@ -0,0 +1,34 @@
using System;
using System.ComponentModel.DataAnnotations;
namespace Win_in.Sfs.Wms.Store.Application.Contracts;
/// <summary>
/// 退库记录-实体DTO
/// </summary>
public class CustomerProductionReturnNoteImportInput : SfsStoreImportInputBase
{
/// <summary>
/// 任务ID
/// </summary>
[Display(Name = "任务ID")]
public string JobNumber { get; set; }
/// <summary>
/// 退料时间
/// </summary>
[Display(Name = "退料时间")]
public DateTime ReturnTime { get; set; }
/// <summary>
/// 退料单号
/// </summary>
[Display(Name = "退料单号")]
public string ProductionReturnRequestNumber { get; set; }
/// <summary>
/// 采购订单号
/// </summary>
[Display(Name = "采购订单号")]
public string PoNumber { get; set; }
}

30
be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Notes/MesNotes/DTOs/MesRecordDTO.cs

@ -0,0 +1,30 @@
using System.ComponentModel.DataAnnotations;
using Win_in.Sfs.Shared.Domain.Shared.Enums.Store.Types;
namespace Win_in.Sfs.Wms.Store.Application.Contracts;
public class MesRecordDTO : SfsStoreDTOBase<MesRecordDetailDTO>, IHasNumber
{
/// <summary>
/// 任务ID
/// </summary>
[Display(Name = "任务ID")]
public string JobNumber { get; set; }
/// <summary>
/// 类型
/// </summary>
[Display(Name = "类型")]
public string Type { get; set; }
public EnumMesStatus State { get; set; }
/// <summary>
/// 请求单号
/// </summary>
[Display(Name = "请求单号")]
public string ScrapRequestNumber { get; set; }
}

13
be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Notes/MesNotes/DTOs/MesRecordDetailDTO.cs

@ -0,0 +1,13 @@
using System.ComponentModel.DataAnnotations;
namespace Win_in.Sfs.Wms.Store.Application.Contracts;
public class MesRecordDetailDTO : SfsStoreDetailWithFromToDTOBase
{
/// <summary>
/// 原因代码
/// </summary>
[Display(Name = "原因代码")]
public string ReasonCode { get; set; }
}

17
be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Notes/MesNotes/IMesRecordAppService.cs

@ -0,0 +1,17 @@
using System.Threading.Tasks;
using Volo.Abp.Application.Dtos;
namespace Win_in.Sfs.Wms.Store.Application.Contracts;
using System.Threading;
public interface IMesRecordAppService : ISfsStoreMasterReadOnlyAppServiceBase<MesRecordDTO, SfsStoreRequestInputBase, MesRecordDetailDTO, SfsStoreRequestInputBase>
{
Task<MesRecordDTO> CreateAsync(MesRecordEditInput input);
Task<PagedResultDto<MesRecordDTO>> GetListByTypeAsync(
SfsStoreRequestInputBase requestInput,
string type,
bool includeDetails = false,
CancellationToken cancellationToken = default);
}

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

Loading…
Cancel
Save