Browse Source

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

dev_DY_CC
lvzb 1 year ago
parent
commit
907aee7597
  1. 6
      be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.Fawtyg.InjectionMoldingTaskAgent/Incoming/InjectionMoldingRequestReader.cs
  2. 12
      be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application/PositionCodes/PositionCodeAppService.cs
  3. 20
      be/Modules/Inventory/src/Win_in.Sfs.Wms.Inventory.Application.Contracts/ExpectOuts/IExpectOutAppService.cs
  4. 3
      be/Modules/Inventory/src/Win_in.Sfs.Wms.Inventory.Application/Balances/BalanceAppService.cs
  5. 33
      be/Modules/Inventory/src/Win_in.Sfs.Wms.Inventory.Application/ExpectOuts/ExpectOutAppService.cs
  6. 1
      be/Modules/Inventory/src/Win_in.Sfs.Wms.Inventory.Domain/Balances/BalanceManager.cs
  7. 5
      be/Modules/Shared/src/Win_in.Sfs.Shared.Domain.Shared/Enums/Basedata/EnumLocationType.cs
  8. 7
      be/Modules/Shared/src/Win_in.Sfs.Shared.Domain.Shared/Enums/Basedata/EnumProductionLineType.cs
  9. 18
      be/Modules/Shared/src/Win_in.Sfs.Shared.Domain.Shared/Enums/Store/EnumIssueRequestType - 复制.cs
  10. 36
      be/Modules/Shared/src/Win_in.Sfs.Shared.Domain.Shared/Enums/Store/EnumIssueRequestType.cs
  11. 29
      be/Modules/Shared/src/Win_in.Sfs.Shared.Domain.Shared/Enums/Store/EnumIssueType.cs
  12. 6
      be/Modules/Shared/src/Win_in.Sfs.Shared.Domain.Shared/Enums/Store/EnumRecommendType.cs
  13. 8
      be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Jobs/IssueJobs/AssembleIssueJobs/DTOs/AssembleIssueJobDTO.cs
  14. 8
      be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Jobs/IssueJobs/AssembleIssueJobs/Inputs/AssembleIssueJobEditInput.cs
  15. 8
      be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Jobs/IssueJobs/CoatingIssueJobs/DTOs/CoatingIssueJobDTO.cs
  16. 0
      be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Jobs/IssueJobs/CoatingIssueJobs/DTOs/CoatingIssueJobDetailDTO.cs
  17. 0
      be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Jobs/IssueJobs/CoatingIssueJobs/Inputs/CoatingIssueJobCheckInput.cs
  18. 0
      be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Jobs/IssueJobs/CoatingIssueJobs/Inputs/CoatingIssueJobDetailInput.cs
  19. 8
      be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Jobs/IssueJobs/CoatingIssueJobs/Inputs/CoatingIssueJobEditInput.cs
  20. 8
      be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Jobs/IssueJobs/InjectionJobs/DTOs/InjectionIssueJobDTO.cs
  21. 1
      be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Jobs/IssueJobs/InjectionJobs/DTOs/InjectionIssueJobDetailDTO.cs
  22. 1
      be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Jobs/IssueJobs/InjectionJobs/Inputs/InjectionIssueJobDetailInput.cs
  23. 29
      be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Jobs/IssueJobs/InjectionJobs/Inputs/InjectionIssueJobEditInput.cs
  24. 11
      be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Jobs/IssueJobs/KittingIssueJobs/DTOs/KittingIssueJobDTO.cs
  25. 7
      be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Jobs/IssueJobs/KittingIssueJobs/IKittingIssueJobAppService.cs
  26. 9
      be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Jobs/IssueJobs/KittingIssueJobs/Inputs/KittingIssueJobEditInput.cs
  27. 8
      be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Notes/IssueNotes/AssembleIssueNotes/DTOs/AssembleIssueNoteDTO.cs
  28. 7
      be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Notes/IssueNotes/AssembleIssueNotes/IAssembleIssueNoteAppService.cs
  29. 8
      be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Notes/IssueNotes/AssembleIssueNotes/Inputs/AssembleIssueNoteEditInput.cs
  30. 7
      be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Notes/IssueNotes/AssembleIssueNotes/Inputs/AssembleIssueNoteImportInput.cs
  31. 9
      be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Notes/IssueNotes/CoatingIssueNotes/DTOs/CoatingIssueNoteDTO.cs
  32. 0
      be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Notes/IssueNotes/CoatingIssueNotes/DTOs/CoatingIssueNoteDetailDTO.cs
  33. 7
      be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Notes/IssueNotes/CoatingIssueNotes/ICoatingIssueNoteAppService.cs
  34. 0
      be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Notes/IssueNotes/CoatingIssueNotes/Inputs/CoatingIssueNoteDetailInput.cs
  35. 8
      be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Notes/IssueNotes/CoatingIssueNotes/Inputs/CoatingIssueNoteEditInput.cs
  36. 7
      be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Notes/IssueNotes/CoatingIssueNotes/Inputs/CoatingIssueNoteImportInput.cs
  37. 8
      be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Notes/IssueNotes/InjectionIssueNotes/DTOs/InjectionIssueNoteDTO.cs
  38. 1
      be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Notes/IssueNotes/InjectionIssueNotes/DTOs/InjectionIssueNoteDetailDTO.cs
  39. 11
      be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Notes/IssueNotes/InjectionIssueNotes/IInjectionIssueNoteAppService.cs
  40. 1
      be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Notes/IssueNotes/InjectionIssueNotes/Inputs/InjectionIssueNoteDetailInput.cs
  41. 8
      be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Notes/IssueNotes/InjectionIssueNotes/Inputs/InjectionIssueNoteEditInput.cs
  42. 13
      be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Notes/IssueNotes/InjectionIssueNotes/Inputs/InjectionIssueNoteImportInput.cs
  43. 9
      be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Notes/IssueNotes/KittingIssueNotes/DTOs/KittingIssueNoteDTO.cs
  44. 7
      be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Notes/IssueNotes/KittingIssueNotes/IKittingIssueNoteAppService.cs
  45. 10
      be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Notes/IssueNotes/KittingIssueNotes/Inputs/KittingIssueNoteEditInput.cs
  46. 9
      be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Notes/IssueNotes/KittingIssueNotes/Inputs/KittingIssueNoteImportInput.cs
  47. 6
      be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Requests/IssueRequest/InjectionIssueRequests/DTOs/InjectionIssueRequestDTO.cs
  48. 77
      be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Requests/IssueRequest/InjectionIssueRequests/DTOs/InjectionIssueRequestDetailDTO.cs
  49. 8
      be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Requests/IssueRequest/InjectionIssueRequests/DTOs/UnCompletedRequestDto.cs
  50. 8
      be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Requests/IssueRequest/InjectionIssueRequests/IInjectionIssueRequestAppService.cs
  51. 21
      be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Requests/IssueRequest/InjectionIssueRequests/Inputs/InjectionIssueRequestEditInput.cs
  52. 21
      be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Requests/IssueRequest/InjectionIssueRequests/Inputs/InjectionIssueRequestImportInput.cs
  53. 4
      be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Requests/IssueRequest/KittingIssueRequests/DTOs/KittingIssueRequestDTO.cs
  54. 70
      be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Requests/IssueRequest/KittingIssueRequests/DTOs/KittingIssueRequestDetailDTO.cs
  55. 2
      be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Requests/IssueRequest/KittingIssueRequests/IKittingIssueRequestAppService.cs
  56. 5
      be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Requests/IssueRequest/KittingIssueRequests/Inputs/KittingIssueRequestEditInput.cs
  57. 9
      be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Requests/IssueRequest/KittingIssueRequests/Inputs/KittingIssueRequestImportInput.cs
  58. 2
      be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Jobs/IssueJobs/AssembleIssueJobs/AssembleIssueJobAppService.cs
  59. 2
      be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Jobs/IssueJobs/CoatingIssueJobs/CoatingIssueJobAppService.cs
  60. 11
      be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Jobs/IssueJobs/InjectionIssueJobs/InjectionIssueJobAppService.cs
  61. 251
      be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Jobs/IssueJobs/KittingIssueJobs/KittingIssueJobAppService.cs
  62. 47
      be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Notes/IssueNotes/AssembleIssueNotes/AssembleIssueNoteAppService.cs
  63. 46
      be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Notes/IssueNotes/CoatingIssueNotes/CoatingIssueNoteAppService.cs
  64. 11
      be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Notes/IssueNotes/InjectionIssueNotes/InjectionIssueNoteAppService.cs
  65. 46
      be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Notes/IssueNotes/KittingIssueNotes/KittingIssueNoteAppService.cs
  66. 169
      be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Requests/IssuelRequests/AssembleIssueRequests/AssembleIssueRequestAppService.cs
  67. 1
      be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Requests/IssuelRequests/AssembleIssueRequests/AssembleIssueRequestAutoMapperProfile.cs
  68. 137
      be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Requests/IssuelRequests/CoatingIssueRequests/CoatingIssueRequestAppService.cs
  69. 1
      be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Requests/IssuelRequests/CoatingIssueRequests/CoatingIssueRequestAutoMapperProfile.cs
  70. 249
      be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Requests/IssuelRequests/InjectionIssueRequests/InjectionIssueRequestAppService.cs
  71. 1
      be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Requests/IssuelRequests/InjectionIssueRequests/InjectionIssueRequestAutoMapperProfile.cs
  72. 241
      be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Requests/IssuelRequests/KittingIssueRequests/KittingIssueRequestAppService.cs
  73. 1
      be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Requests/IssuelRequests/KittingIssueRequests/KittingIssueRequestAutoMapperProfile.cs
  74. 8
      be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain/Jobs/IssueJobs/AssembleIssueJobs/AssembleIssueJob.cs
  75. 7
      be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain/Jobs/IssueJobs/CoatingIssueJobs/CoatingIssueJob.cs
  76. 23
      be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain/Jobs/IssueJobs/InjectionIssueJobs/InjectionIssueJob.cs
  77. 201
      be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain/Jobs/IssueJobs/InjectionIssueJobs/InjectionIssueJobDetail.cs
  78. 13
      be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain/Jobs/IssueJobs/KittingIssueJobs/KittingIssueJob.cs
  79. 7
      be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain/Notes/IssueNotes/AssembleIssueNotes/AssembleIssueNote.cs
  80. 7
      be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain/Notes/IssueNotes/CoatingIssueNotes/CoatingIssueNote.cs
  81. 7
      be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain/Notes/IssueNotes/InjectionIssueNotes/InjectionIssueNote.cs
  82. 1
      be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain/Notes/IssueNotes/InjectionIssueNotes/InjectionIssueNoteDetail.cs
  83. 14
      be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain/Notes/IssueNotes/KittingIssueNotes/KittingIssueNote.cs
  84. 6
      be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain/Requests/IssueRequests/AssembleIssueRequests/AssembleIssueRequest.cs
  85. 6
      be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain/Requests/IssueRequests/CoatingIssuelRequests/CoatingIssueRequest.cs
  86. 14
      be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain/Requests/IssueRequests/InjectionIssueRequests/InjectionIssueRequest.cs
  87. 34
      be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain/Requests/IssueRequests/InjectionIssueRequests/InjectionIssueRequestDetail.cs
  88. 15
      be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain/Requests/IssueRequests/KittingIssueRequests/KittingIssueRequest.cs
  89. 23
      be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain/Requests/IssueRequests/KittingIssueRequests/KittingIssueRequestManager.cs
  90. 1
      be/Modules/Store/src/Win_in.Sfs.Wms.Store.EntityFrameworkCore/Jobs/IssueJobs/AssembleIssueJobs/AssembleIssueJobDbContextModelCreatingExtensions.cs
  91. 1
      be/Modules/Store/src/Win_in.Sfs.Wms.Store.EntityFrameworkCore/Jobs/IssueJobs/CoatingIssueJob/CoatingIssueJobDbContextModelCreatingExtensions.cs
  92. 1
      be/Modules/Store/src/Win_in.Sfs.Wms.Store.EntityFrameworkCore/Jobs/IssueJobs/InjectionIssueJobs/InjectionIssueJobDbContextModelCreatingExtensions.cs
  93. 1
      be/Modules/Store/src/Win_in.Sfs.Wms.Store.EntityFrameworkCore/Jobs/IssueJobs/KittingIssueJobs/KittingIssueJobDbContextModelCreatingExtensions.cs
  94. 32114
      be/Modules/Store/src/Win_in.Sfs.Wms.Store.EntityFrameworkCore/Migrations/20240426024936_Update_Issue.Designer.cs
  95. 181
      be/Modules/Store/src/Win_in.Sfs.Wms.Store.EntityFrameworkCore/Migrations/20240426024936_Update_Issue.cs
  96. 55
      be/Modules/Store/src/Win_in.Sfs.Wms.Store.EntityFrameworkCore/Migrations/StoreDbContextModelSnapshot.cs
  97. 1
      be/Modules/Store/src/Win_in.Sfs.Wms.Store.EntityFrameworkCore/Notes/IssueNotes/AssembleIssueNotes/AssembleIssueNoteDbContextModelCreatingExtensions.cs
  98. 1
      be/Modules/Store/src/Win_in.Sfs.Wms.Store.EntityFrameworkCore/Notes/IssueNotes/CoatingIssueNotes/CoatingIssueNoteDbContextModelCreatingExtensions.cs
  99. 1
      be/Modules/Store/src/Win_in.Sfs.Wms.Store.EntityFrameworkCore/Notes/IssueNotes/InjectionIssueNotes/InjectionIssueNoteDbContextModelCreatingExtensions.cs
  100. 1
      be/Modules/Store/src/Win_in.Sfs.Wms.Store.EntityFrameworkCore/Notes/IssueNotes/KittingIssueNotes/KittingIssueNoteDbContextModelCreatingExtensions.cs

6
be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.Fawtyg.InjectionMoldingTaskAgent/Incoming/InjectionMoldingRequestReader.cs

@ -20,6 +20,8 @@ using System.Text.Json.Serialization;
using System.IdentityModel.Tokens.Jwt;
using Volo.Abp;
using System.Net.NetworkInformation;
using Win_in.Sfs.Shared.Domain.Shared.Enums.Store;
namespace Win_in.Sfs.Wms.DataExchange.Fawtyg.InjectionMoldingTaskAgent.Incoming;
public class InjectionMoldingRequestReader : IReader
{
@ -121,7 +123,7 @@ public class InjectionMoldingRequestReader : IReader
InjectionIssueRequestEditInput input = new InjectionIssueRequestEditInput();
input.Worker = "Vision";
input.Type = "Vision";
input.IssueRequestType = EnumIssueRequestType.Vision;
input.AutoSubmit = true;
input.ActiveDate = DateTime.Now;
input.UseOnTheWayLocation = false;
@ -135,7 +137,7 @@ public class InjectionMoldingRequestReader : IReader
ToLocationCode = inject.AreaID.ToString(),
PositionCode=inject.CargoID,
Qty = 1,
RecommendType = EnumRecommendType.W,
RecommendType = EnumRecommendType.RAW,
IssuedQty = 0,
ReceivedQty = 0,
Status = EnumStatus.Open,

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

@ -68,7 +68,7 @@ public class PositionCodeAppService
var itemBasic = await ItemBasicAppService.GetByCodeAsync(input.PartCode).ConfigureAwait(false);
Check.NotNull(itemBasic, "物品代码", $"物品 {input.PartCode} 不存在");
//如果类型选择为原料,校验物料号类型必须为原料,器具、KItting 的不用加校验
if (input.Type == EnumRecommendType.W && itemBasic.CanBuy != true)
if (input.Type == EnumRecommendType.RAW && itemBasic.CanBuy != true)
{
throw new UserFriendlyException($"{input.PartCode} 物料号类型必须为采购件");
}
@ -80,7 +80,7 @@ public class PositionCodeAppService
var location = await LocationAppService.GetByCodeAsync(input.LocationCode).ConfigureAwait(false);
Check.NotNull(location, "库位代码", $"库位 {input.LocationCode} 不存在");
//如果类型选择为原料,库位的类型必须为原料库位
if (input.Type == EnumRecommendType.W && location.Type != EnumLocationType.RAW)
if (input.Type == EnumRecommendType.RAW && location.Type != EnumLocationType.RAW)
{
throw new UserFriendlyException($"{input.LocationCode} 库位的类型必须为原料库位");
}
@ -120,7 +120,7 @@ public class PositionCodeAppService
var itemBasic = await ItemBasicAppService.GetByCodeAsync(input.PartCode).ConfigureAwait(false);
Check.NotNull(itemBasic, "物品代码", $"物品 {input.PartCode} 不存在");
//如果类型选择为原料,校验物料号类型必须为原料,器具、KItting 的不用加校验
if (input.Type == EnumRecommendType.W && itemBasic.Type != "10C02")
if (input.Type == EnumRecommendType.RAW && itemBasic.Type != "10C02")
{
throw new UserFriendlyException($"{input.PartCode} 物料号类型必须为原料");
}
@ -132,7 +132,7 @@ public class PositionCodeAppService
var location = await LocationAppService.GetByCodeAsync(input.LocationCode).ConfigureAwait(false);
Check.NotNull(location, "库位代码", $"库位 {input.LocationCode} 不存在");
//如果类型选择为原料,库位的类型必须为原料库位
if (input.Type == EnumRecommendType.W && location.Type!= EnumLocationType.RAW)
if (input.Type == EnumRecommendType.RAW && location.Type!= EnumLocationType.RAW)
{
throw new UserFriendlyException($"{input.LocationCode} 库位的类型必须为原料库位");
}
@ -180,13 +180,13 @@ public class PositionCodeAppService
}
var itemBasic = await ItemBasicAppService.GetByCodeAsync(input.PartCode).ConfigureAwait(false);
//如果类型选择为原料,校验物料号类型必须为原料,器具、KItting 的不用加校验
if (input.Type == EnumRecommendType.W && itemBasic.Type != "10C02")
if (input.Type == EnumRecommendType.RAW && itemBasic.Type != "10C02")
{
validationRresult.Add(new ValidationResult($"物品代码{input.PartCode} 物料号类型必须为原料", new string[] { "物料号类型" }));
}
var location = await LocationAppService.GetByCodeAsync(input.LocationCode).ConfigureAwait(false);
//如果类型选择为原料,库位的类型必须为原料库位
if (input.Type==EnumRecommendType.W && location.Type != EnumLocationType.RAW)
if (input.Type==EnumRecommendType.RAW && location.Type != EnumLocationType.RAW)
{
validationRresult.Add(new ValidationResult($"库位代码{input.LocationCode} 库位的类型必须为原料库位", new string[] { "库位类型" }));
}

20
be/Modules/Inventory/src/Win_in.Sfs.Wms.Inventory.Application.Contracts/ExpectOuts/IExpectOutAppService.cs

@ -24,23 +24,25 @@ public interface IExpectOutAppService
EnumInventoryStatus enumInventoryStatus,
string lot);
Task RemoveListByItemCodeAndStatusAndPackingCodeAsync(
string itemCode,
string locationCode,
string packingCode,
EnumInventoryStatus enumInventoryStatus,
string lot);
/// <summary>
/// 保存拆箱时涉及的明细修改
/// 保存拆箱时涉及的明细修改
/// </summary>
/// <returns></returns>
Task<List<ExpectOutDTO>> SaveDetail_SplitPackingAsync(SplitPacking_UpdateDetailInput input);
/// <summary>
/// 根据任务号、箱码、数量、库位取预计出列表
/// 根据任务号、箱码、数量、库位取预计出列表
/// </summary>
/// <returns></returns>
Task<List<ExpectOutDTO>> GetListByJobNumberAsync(SplitPacking_UpdateDetailInput input);
Task RemoveByNumberAndInventoryAsync(
string jobNumber,
string itemCode,
string locationCode,
string packingCode,
EnumInventoryStatus enumInventoryStatus,
string lot,
decimal qty);
}

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

@ -604,8 +604,9 @@ public class BalanceAppService
[HttpGet("usable-list")]
public virtual async Task<List<BalanceDTO>> GetUsableListAsync(RecommendBalanceRequestInput input)
{
var inventoryBalances = await _balanceManager
.GetUsableListAsync(input.ItemCode, input.Locations, input.Statuses, true).ConfigureAwait(false);
.GetUsableListAsync(input.ItemCode, input.Locations, input.Statuses, input.IsPackingCode).ConfigureAwait(false);
var dtos = ObjectMapper.Map<List<Balance>, List<BalanceDTO>>(inventoryBalances);

33
be/Modules/Inventory/src/Win_in.Sfs.Wms.Inventory.Application/ExpectOuts/ExpectOutAppService.cs

@ -43,6 +43,39 @@ public class ExpectOutAppService
await _expectOutManager.RemoveAsync(jobNumber).ConfigureAwait(false);
}
[HttpPost("remove/job-number-and-inventory-balance")]
public virtual async Task RemoveByNumberAndInventoryAsync(
string jobNumber,
string itemCode,
string locationCode,
string packingCode,
EnumInventoryStatus enumInventoryStatus,
string lot,
decimal qty)
{
var expectOut= await _repository.FindAsync(p =>
p.ItemCode == itemCode &&
p.Status == enumInventoryStatus &&
p.PackingCode == packingCode &&
p.Lot == lot&&
p.JobNumber==jobNumber
).ConfigureAwait(false);
if (expectOut != null)
{
expectOut.Qty -= qty;
}
if (expectOut.Qty == 0)
{
await _repository.DeleteAsync(expectOut).ConfigureAwait(false);
}
else
{
await _repository.UpdateAsync(expectOut).ConfigureAwait(false);
}
}
[HttpPost("remove/{id}")]
public virtual async Task RemoveAsync(Guid id)
{

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

@ -867,6 +867,7 @@ public class BalanceManager : DomainService, IBalanceManager
.FilterLocationEnablePickAsync(locations)
//排序库存余额 最终可用的余额集合
.SortByFifo();
usableBalances = usableBalances.Where(p => p.Qty != 0).ToList();
return usableBalances;
}

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

@ -83,4 +83,9 @@ public enum EnumLocationType
/// Kitting线边
/// </summary>
[Display(Name = "Kitting线边")] KittingWip = 15,
/// <summary>
/// 立体库
/// </summary>
[Display(Name = "立体库")] DimensionalStorehouse = 16,
}

7
be/Modules/Shared/src/Win_in.Sfs.Shared.Domain.Shared/Enums/Basedata/EnumProductionLineType.cs

@ -19,5 +19,10 @@ public enum EnumProductionLineType
/// <summary>
/// 装配
/// </summary>
[Display(Name = "装配")] Assemble = 3
[Display(Name = "装配")] Assemble = 3,
/// <summary>
/// Kitting
/// </summary>
[Display(Name = "Kitting")] Kitting = 4
}

18
be/Modules/Shared/src/Win_in.Sfs.Shared.Domain.Shared/Enums/Store/EnumIssueRequestType - 复制.cs

@ -0,0 +1,18 @@
using System.ComponentModel.DataAnnotations;
namespace Win_in.Sfs.Shared.Domain.Shared.Enums.Store;
public enum EnumIssueSendType
{
None = 0,
/// <summary>
/// 按数量
/// </summary>
[Display(Name = "按数量")] QtyType = 1,
/// <summary>
/// 按箱数
/// </summary>
[Display(Name = "按箱数")] BoxQtyType = 2
}

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

@ -0,0 +1,36 @@
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;
public enum EnumIssueRequestType
{
None = 0,
/// <summary>
/// 视觉
/// </summary>
[Display(Name = "视觉发起")]
Vision =1,
/// <summary>
/// Mes
/// </summary>
[Display(Name = "Mes发起")]
Mes =2,
/// <summary>
/// 立体库
/// </summary>
[Display(Name = "立体库发起")]
DimensionalStorehouse=3,
/// <summary>
/// 位置码
/// </summary>
[Display(Name = "位置码")]
PositionCode =4,
}

29
be/Modules/Shared/src/Win_in.Sfs.Shared.Domain.Shared/Enums/Store/EnumIssueType.cs

@ -1,29 +0,0 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Win_in.Sfs.Shared.Domain.Shared.Enums.Store;
public enum EnumIssueType
{
None=0,
/// <summary>
/// 按箱 叫料
/// </summary>
BoxQty=1,
/// <summary>
/// 按数量 叫料
/// </summary>
Qty=2,
/// <summary>
/// 按视觉 叫料
/// </summary>
Vision = 3,
}

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

@ -16,17 +16,17 @@ public enum EnumRecommendType
/// 原料
/// </summary>
[Display(Name = "原料")]
W = 1,
RAW = 1,
/// <summary>
/// 半成品
/// </summary>
[Display(Name = "半成品")]
B = 2,
SEMI = 2,
/// <summary>
/// kitting区
/// </summary>
[Display(Name = "Kitting区")]
K = 3
KITTING = 3
}

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

@ -1,5 +1,6 @@
using System.ComponentModel.DataAnnotations;
using Win_in.Sfs.Shared.Domain;
using Win_in.Sfs.Shared.Domain.Shared.Enums.Store;
namespace Win_in.Sfs.Wms.Store.Application.Contracts;
@ -10,11 +11,10 @@ namespace Win_in.Sfs.Wms.Store.Application.Contracts;
public class AssembleIssueJobDTO : SfsJobDTOBase<AssembleIssueJobDetailDTO>
{
/// <summary>
/// 叫料请求类型
/// 叫料类型
/// </summary>
[Display(Name = "叫料请求类型")]
[StringLength(SfsEfCorePropertyConst.CodeLength, ErrorMessage = "{0}最多输入{1}个字符")]
public string RequestType { get; set; }
[Display(Name = "叫料类型")]
public EnumIssueRequestType IssueRequestType { get; set; }
/// <summary>
/// 生产线

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

@ -3,6 +3,7 @@ using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using Win_in.Sfs.Shared.Domain;
using Win_in.Sfs.Shared.Domain.Shared;
using Win_in.Sfs.Shared.Domain.Shared.Enums.Store;
namespace Win_in.Sfs.Wms.Store.Application.Contracts;
@ -25,11 +26,10 @@ public class AssembleIssueJobEditInput : SfsJobCreateUpdateInputBase, ISfsJobCre
public string AssembleRequestNumber { get; set; }
/// <summary>
/// 叫料请求类型
/// 叫料类型
/// </summary>
[Display(Name = "叫料请求类型")]
[StringLength(SfsEfCorePropertyConst.CodeLength, ErrorMessage = "{0}最多输入{1}个字符")]
public string RequestType { get; set; }
[Display(Name = "叫料类型")]
public EnumIssueRequestType IssueRequestType { get; set; }
/// <summary>
/// 任务类型

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

@ -1,5 +1,6 @@
using System.ComponentModel.DataAnnotations;
using Win_in.Sfs.Shared.Domain;
using Win_in.Sfs.Shared.Domain.Shared.Enums.Store;
using Win_in.Sfs.Wms.Store.Application.Contracts;
namespace Win_in.Sfs.Wms.Store.Jobs.IssueJobs;
@ -11,11 +12,10 @@ namespace Win_in.Sfs.Wms.Store.Jobs.IssueJobs;
public class CoatingIssueJobDTO : SfsJobDTOBase<CoatingIssueJobDetailDTO>
{
/// <summary>
/// 叫料请求类型
/// 叫料类型
/// </summary>
[Display(Name = "叫料请求类型")]
[StringLength(SfsEfCorePropertyConst.CodeLength, ErrorMessage = "{0}最多输入{1}个字符")]
public string RequestType { get; set; }
[Display(Name = "叫料类型")]
public EnumIssueRequestType IssueRequestType { get; set; }
/// <summary>
/// 生产线

0
be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Jobs/IssueJobs/CoatingIssueJobs/CoatingIssueJobDetailDTO.cs → be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Jobs/IssueJobs/CoatingIssueJobs/DTOs/CoatingIssueJobDetailDTO.cs

0
be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Jobs/IssueJobs/CoatingIssueJobs/CoatingIssueJobCheckInput.cs → be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Jobs/IssueJobs/CoatingIssueJobs/Inputs/CoatingIssueJobCheckInput.cs

0
be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Jobs/IssueJobs/CoatingIssueJobs/CoatingIssueJobDetailInput.cs → be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Jobs/IssueJobs/CoatingIssueJobs/Inputs/CoatingIssueJobDetailInput.cs

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

@ -3,6 +3,7 @@ using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using Win_in.Sfs.Shared.Domain;
using Win_in.Sfs.Shared.Domain.Shared;
using Win_in.Sfs.Shared.Domain.Shared.Enums.Store;
using Win_in.Sfs.Wms.Store.Application.Contracts;
namespace Win_in.Sfs.Wms.Store.Jobs.IssueJobs;
@ -26,11 +27,10 @@ public class CoatingIssueJobEditInput : SfsJobCreateUpdateInputBase, ISfsJobCrea
public string MaterialRequestNumber { get; set; }
/// <summary>
/// 叫料请求类型
/// 叫料类型
/// </summary>
[Display(Name = "叫料请求类型")]
[StringLength(SfsEfCorePropertyConst.CodeLength, ErrorMessage = "{0}最多输入{1}个字符")]
public string RequestType { get; set; }
[Display(Name = "叫料类型")]
public EnumIssueRequestType IssueRequestType { get; set; }
/// <summary>
/// 任务类型

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

@ -1,5 +1,6 @@
using System.ComponentModel.DataAnnotations;
using Win_in.Sfs.Shared.Domain;
using Win_in.Sfs.Shared.Domain.Shared.Enums.Store;
namespace Win_in.Sfs.Wms.Store.Application.Contracts;
@ -10,11 +11,10 @@ namespace Win_in.Sfs.Wms.Store.Application.Contracts;
public class InjectionIssueJobDTO : SfsJobDTOBase<InjectionIssueJobDetailDTO>
{
/// <summary>
/// 叫料请求类型
/// 叫料类型
/// </summary>
[Display(Name = "叫料请求类型")]
[StringLength(SfsEfCorePropertyConst.CodeLength, ErrorMessage = "{0}最多输入{1}个字符")]
public string RequestType { get; set; }
[Display(Name = "叫料类型")]
public EnumIssueRequestType IssueRequestType { get; set; }
/// <summary>
/// 生产线

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

@ -3,6 +3,7 @@ using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
using Win_in.Sfs.Shared.Application.Contracts;
using Win_in.Sfs.Shared.Domain.Shared;
using Win_in.Sfs.Shared.Domain.Shared.Enums.Store;
namespace Win_in.Sfs.Wms.Store.Application.Contracts;

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

@ -3,6 +3,7 @@ using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
using Win_in.Sfs.Shared.Application.Contracts;
using Win_in.Sfs.Shared.Domain.Shared;
using Win_in.Sfs.Shared.Domain.Shared.Enums.Store;
namespace Win_in.Sfs.Wms.Store.Application.Contracts;

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

@ -9,16 +9,15 @@ namespace Win_in.Sfs.Wms.Store.Application.Contracts;
public class InjectionIssueJobEditInput : SfsJobCreateUpdateInputBase, ISfsJobCreateInput<InjectionIssueJobDetailInput>
{
#region Create
/// <summary>
/// 上游任务编号
/// 上游任务编号
/// </summary>
[Display(Name = "上游任务编号")]
[StringLength(SfsEfCorePropertyConst.CodeLength, ErrorMessage = "{0}最多输入{1}个字符")]
public string UpStreamJobNumber { get; set; }
/// <summary>
/// 要货单号
/// 要货单号
/// </summary>
[Display(Name = "要货单号")]
[Required(ErrorMessage = "{0}是必填项")]
@ -26,44 +25,42 @@ public class InjectionIssueJobEditInput : SfsJobCreateUpdateInputBase, ISfsJobCr
public string InjectionIssueRequestNumber { 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<InjectionIssueJobDetailInput> Details { get; set; } = new();
/// <summary>
/// 使用在途库
/// 使用在途库
/// </summary>
[Display(Name = "使用在途库")]
public bool UseOnTheWayLocation { get; set; }
#endregion
/// <summary>
/// 叫料类型
/// </summary>
[Display(Name = "叫料类型")]
public EnumIssueRequestType IssueRequestType { get; set; }
}

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

@ -1,5 +1,6 @@
using System.ComponentModel.DataAnnotations;
using Win_in.Sfs.Shared.Domain;
using Win_in.Sfs.Shared.Domain.Shared.Enums.Store;
namespace Win_in.Sfs.Wms.Store.Application.Contracts;
@ -10,12 +11,10 @@ namespace Win_in.Sfs.Wms.Store.Application.Contracts;
public class KittingIssueJobDTO : SfsJobDTOBase<KittingIssueJobDetailDTO>
{
/// <summary>
/// 叫料请求类型
/// 叫料类型
/// </summary>
[Display(Name = "叫料请求类型")]
[StringLength(SfsEfCorePropertyConst.CodeLength, ErrorMessage = "{0}最多输入{1}个字符")]
public string RequestType { get; set; }
[Display(Name = "叫料类型")]
public EnumIssueRequestType IssueRequestType { get; set; }
/// <summary>
/// 生产线
/// </summary>
@ -35,4 +34,6 @@ public class KittingIssueJobDTO : SfsJobDTOBase<KittingIssueJobDetailDTO>
/// </summary>
[Display(Name = "使用在途库")]
public bool UseOnTheWayLocation { get; set; }
public EnumIssueSendType EnumIssueSendType { get; set; }
}

7
be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Jobs/IssueJobs/KittingIssueJobs/IKittingIssueJobAppService.cs

@ -1,3 +1,4 @@
using System;
using System.Collections.Generic;
using System.Threading;
using System.Threading.Tasks;
@ -11,4 +12,10 @@ public interface IKittingIssueJobAppService
Task CancelByMaterialRequestAsync(string requestNumber);
Task<List<KittingIssueJobDTO>> GetByRequestNumberAsync(string requestNumber);
/// <summary>
/// 执行任务明细
/// </summary>
/// <returns></returns>
Task ExecuteDetailAsync(Guid masterId,Guid detailId, KittingIssueJobDetailDTO issueJobDetailDto);
}

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

@ -26,11 +26,10 @@ public class KittingIssueJobEditInput : SfsJobCreateUpdateInputBase, ISfsJobCrea
public string KittingRequestNumber { get; set; }
/// <summary>
/// 叫料请求类型
/// 叫料类型
/// </summary>
[Display(Name = "叫料请求类型")]
[StringLength(SfsEfCorePropertyConst.CodeLength, ErrorMessage = "{0}最多输入{1}个字符")]
public string RequestType { get; set; }
[Display(Name = "叫料类型")]
public EnumIssueRequestType IssueRequestType { get; set; }
/// <summary>
/// 任务类型
@ -65,5 +64,7 @@ public class KittingIssueJobEditInput : SfsJobCreateUpdateInputBase, ISfsJobCrea
/// </summary>
[Display(Name = "使用在途库")]
public bool UseOnTheWayLocation { get; set; }
public EnumIssueSendType EnumIssueSendType { get; set; }
#endregion
}

8
be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Notes/IssueNotes/AssembleIssueNotes/DTOs/AssembleIssueNoteDTO.cs

@ -1,6 +1,7 @@
using System;
using System.ComponentModel.DataAnnotations;
using Win_in.Sfs.Shared.Domain;
using Win_in.Sfs.Shared.Domain.Shared.Enums.Store;
namespace Win_in.Sfs.Wms.Store.Application.Contracts;
@ -20,11 +21,10 @@ public class AssembleIssueNoteDTO : SfsStoreDTOBase<AssembleIssueNoteDetailDTO>,
public string RequestNumber { get; set; }
/// <summary>
/// 叫料请求类型
/// 叫料类型
/// </summary>
[Display(Name = "叫料请求类型")]
[StringLength(SfsEfCorePropertyConst.CodeLength, ErrorMessage = "{0}最多输入{1}个字符")]
public string RequestType { get; set; }
[Display(Name = "叫料类型")]
public EnumIssueRequestType IssueRequestType { get; set; }
/// <summary>
/// 使用在途库

7
be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Notes/IssueNotes/AssembleIssueNotes/IAssembleIssueNoteAppService.cs

@ -12,10 +12,5 @@ public interface IAssembleIssueNoteAppService : ISfsStoreMasterReadOnlyAppServic
Task<AssembleIssueNoteDTO> ConfirmAsync(Guid id);
Task<AssembleIssueNoteDTO> ConfirmAsync(string number);
Task<PagedResultDto<AssembleIssueNoteDTO>> GetListByTypeAsync(SfsStoreRequestInputBase requestInput,
string requestType, bool includeDetails = false, CancellationToken cancellationToken = default);
Task<List<AssembleIssueNoteDTO>> GetListUnConfirmedByTypeAsync(string requestType);
}

8
be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Notes/IssueNotes/AssembleIssueNotes/Inputs/AssembleIssueNoteEditInput.cs

@ -1,6 +1,7 @@
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using Win_in.Sfs.Shared.Domain;
using Win_in.Sfs.Shared.Domain.Shared.Enums.Store;
namespace Win_in.Sfs.Wms.Store.Application.Contracts;
@ -41,11 +42,10 @@ public class AssembleIssueNoteEditInput : SfsStoreCreateOrUpdateInputBase
public string RequestNumber { get; set; }
/// <summary>
/// 叫料请求类型
/// 叫料类型
/// </summary>
[Display(Name = "叫料请求类型")]
[StringLength(SfsEfCorePropertyConst.CodeLength, ErrorMessage = "{0}最多输入{1}个字符")]
public string RequestType { get; set; }
[Display(Name = "叫料类型")]
public EnumIssueRequestType IssueRequestType { get; set; }
/// <summary>
/// 使用在途库

7
be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Notes/IssueNotes/AssembleIssueNotes/Inputs/AssembleIssueNoteImportInput.cs

@ -1,4 +1,5 @@
using System.ComponentModel.DataAnnotations;
using Win_in.Sfs.Shared.Domain.Shared.Enums.Store;
namespace Win_in.Sfs.Wms.Store.Application.Contracts;
@ -19,10 +20,10 @@ public class AssembleIssueNoteImportInput : SfsStoreImportInputBase, IHasJobNumb
public string RequestNumber { get; set; }
/// <summary>
/// 叫料请求类型
/// 叫料类型
/// </summary>
[Display(Name = "叫料请求类型")]
public string RequestType { get; set; }
[Display(Name = "叫料类型")]
public EnumIssueRequestType IssueRequestType { get; set; }
/// <summary>
/// 使用在途库

9
be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Notes/IssueNotes/CoatingIssueNotes/CoatingIssueNoteDTO.cs → be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Notes/IssueNotes/CoatingIssueNotes/DTOs/CoatingIssueNoteDTO.cs

@ -1,6 +1,7 @@
using System;
using System.ComponentModel.DataAnnotations;
using Win_in.Sfs.Shared.Domain;
using Win_in.Sfs.Shared.Domain.Shared.Enums.Store;
using Win_in.Sfs.Wms.Store.Application.Contracts;
namespace Win_in.Sfs.Wms.Store.Notes.IssueNotes;
@ -18,13 +19,11 @@ public class CoatingIssueNoteDTO : SfsStoreDTOBase<CoatingIssueNoteDetailDTO>, I
/// </summary>
[Display(Name = "请求代码")]
public string RequestNumber { get; set; }
/// <summary>
/// 叫料请求类型
/// 叫料类型
/// </summary>
[Display(Name = "叫料请求类型")]
[StringLength(SfsEfCorePropertyConst.CodeLength, ErrorMessage = "{0}最多输入{1}个字符")]
public string RequestType { get; set; }
[Display(Name = "叫料类型")]
public EnumIssueRequestType IssueRequestType { get; set; }
/// <summary>
/// 使用在途库

0
be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Notes/IssueNotes/CoatingIssueNotes/CoatingIssueNoteDetailDTO.cs → be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Notes/IssueNotes/CoatingIssueNotes/DTOs/CoatingIssueNoteDetailDTO.cs

7
be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Notes/IssueNotes/CoatingIssueNotes/ICoatingIssueNoteAppService.cs

@ -13,10 +13,5 @@ public interface ICoatingIssueNoteAppService : ISfsStoreMasterReadOnlyAppService
Task<CoatingIssueNoteDTO> ConfirmAsync(Guid id);
Task<CoatingIssueNoteDTO> ConfirmAsync(string number);
Task<PagedResultDto<CoatingIssueNoteDTO>> GetListByTypeAsync(SfsStoreRequestInputBase requestInput,
string requestType, bool includeDetails = false, CancellationToken cancellationToken = default);
Task<List<CoatingIssueNoteDTO>> GetListUnConfirmedByTypeAsync(string requestType);
}

0
be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Notes/IssueNotes/CoatingIssueNotes/CoatingIssueNoteDetailInput.cs → be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Notes/IssueNotes/CoatingIssueNotes/Inputs/CoatingIssueNoteDetailInput.cs

8
be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Notes/IssueNotes/CoatingIssueNotes/CoatingIssueNoteEditInput.cs → be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Notes/IssueNotes/CoatingIssueNotes/Inputs/CoatingIssueNoteEditInput.cs

@ -1,6 +1,7 @@
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using Win_in.Sfs.Shared.Domain;
using Win_in.Sfs.Shared.Domain.Shared.Enums.Store;
using Win_in.Sfs.Wms.Store.Application.Contracts;
namespace Win_in.Sfs.Wms.Store.Notes.IssueNotes;
@ -42,11 +43,10 @@ public class CoatingIssueNoteEditInput : SfsStoreCreateOrUpdateInputBase
public string RequestNumber { get; set; }
/// <summary>
/// 叫料请求类型
/// 叫料类型
/// </summary>
[Display(Name = "叫料请求类型")]
[StringLength(SfsEfCorePropertyConst.CodeLength, ErrorMessage = "{0}最多输入{1}个字符")]
public string RequestType { get; set; }
[Display(Name = "叫料类型")]
public EnumIssueRequestType IssueRequestType { get; set; }
/// <summary>
/// 使用在途库

7
be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Notes/IssueNotes/CoatingIssueNotes/CoatingIssueNoteImportInput.cs → be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Notes/IssueNotes/CoatingIssueNotes/Inputs/CoatingIssueNoteImportInput.cs

@ -1,4 +1,5 @@
using System.ComponentModel.DataAnnotations;
using Win_in.Sfs.Shared.Domain.Shared.Enums.Store;
using Win_in.Sfs.Wms.Store.Application.Contracts;
namespace Win_in.Sfs.Wms.Store.Notes.IssueNotes;
@ -20,10 +21,10 @@ public class CoatingIssueNoteImportInput : SfsStoreImportInputBase, IHasJobNumbe
public string RequestNumber { get; set; }
/// <summary>
/// 叫料请求类型
/// 叫料类型
/// </summary>
[Display(Name = "叫料请求类型")]
public string RequestType { get; set; }
[Display(Name = "叫料类型")]
public EnumIssueRequestType IssueRequestType { get; set; }
/// <summary>
/// 使用在途库

8
be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Notes/IssueNotes/InjectionIssueNotes/DTOs/InjectionIssueNoteDTO.cs

@ -1,6 +1,7 @@
using System;
using System.ComponentModel.DataAnnotations;
using Win_in.Sfs.Shared.Domain;
using Win_in.Sfs.Shared.Domain.Shared.Enums.Store;
namespace Win_in.Sfs.Wms.Store.Application.Contracts;
@ -20,11 +21,10 @@ public class InjectionIssueNoteDTO : SfsStoreDTOBase<InjectionIssueNoteDetailDTO
public string RequestNumber { get; set; }
/// <summary>
/// 叫料请求类型
/// 叫料类型
/// </summary>
[Display(Name = "叫料请求类型")]
[StringLength(SfsEfCorePropertyConst.CodeLength, ErrorMessage = "{0}最多输入{1}个字符")]
public string RequestType { get; set; }
[Display(Name = "叫料类型")]
public EnumIssueRequestType IssueRequestType { get; set; }
/// <summary>
/// 使用在途库

1
be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Notes/IssueNotes/InjectionIssueNotes/DTOs/InjectionIssueNoteDetailDTO.cs

@ -3,6 +3,7 @@ using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
using Win_in.Sfs.Shared.Application.Contracts;
using Win_in.Sfs.Shared.Domain.Shared;
using Win_in.Sfs.Shared.Domain.Shared.Enums.Store;
namespace Win_in.Sfs.Wms.Store.Application.Contracts;

11
be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Notes/IssueNotes/InjectionIssueNotes/IInjectionIssueNoteAppService.cs

@ -3,10 +3,12 @@ using System.Collections.Generic;
using System.Threading;
using System.Threading.Tasks;
using Volo.Abp.Application.Dtos;
using Win_in.Sfs.Shared.Domain.Shared.Enums.Store;
namespace Win_in.Sfs.Wms.Store.Application.Contracts;
public interface IInjectionIssueNoteAppService : ISfsStoreMasterReadOnlyAppServiceBase<InjectionIssueNoteDTO, SfsStoreRequestInputBase, InjectionIssueNoteDetailDTO, SfsStoreRequestInputBase>
public interface IInjectionIssueNoteAppService : ISfsStoreMasterReadOnlyAppServiceBase<InjectionIssueNoteDTO,
SfsStoreRequestInputBase, InjectionIssueNoteDetailDTO, SfsStoreRequestInputBase>
{
Task<InjectionIssueNoteDTO> CreateAsync(InjectionIssueNoteEditInput input);
@ -14,8 +16,9 @@ public interface IInjectionIssueNoteAppService : ISfsStoreMasterReadOnlyAppServi
Task<InjectionIssueNoteDTO> ConfirmAsync(string number);
Task<PagedResultDto<InjectionIssueNoteDTO>> GetListByTypeAsync(SfsStoreRequestInputBase requestInput,
string requestType, bool includeDetails = false, CancellationToken cancellationToken = default);
Task<List<InjectionIssueNoteDTO>> GetListUnConfirmedByTypeAsync(EnumIssueRequestType issueRequestType);
Task<List<InjectionIssueNoteDTO>> GetListUnConfirmedByTypeAsync(string requestType);
Task<PagedResultDto<InjectionIssueNoteDTO>> GetListByTypeAsync(SfsStoreRequestInputBase requestInput,
EnumIssueRequestType issueRequestType, bool includeDetails = false,
CancellationToken cancellationToken = default);
}

1
be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Notes/IssueNotes/InjectionIssueNotes/Inputs/InjectionIssueNoteDetailInput.cs

@ -3,6 +3,7 @@ using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
using Win_in.Sfs.Shared.Application.Contracts;
using Win_in.Sfs.Shared.Domain.Shared;
using Win_in.Sfs.Shared.Domain.Shared.Enums.Store;
namespace Win_in.Sfs.Wms.Store.Application.Contracts;

8
be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Notes/IssueNotes/InjectionIssueNotes/Inputs/InjectionIssueNoteEditInput.cs

@ -1,6 +1,7 @@
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using Win_in.Sfs.Shared.Domain;
using Win_in.Sfs.Shared.Domain.Shared.Enums.Store;
namespace Win_in.Sfs.Wms.Store.Application.Contracts;
@ -41,11 +42,10 @@ public class InjectionIssueNoteEditInput : SfsStoreCreateOrUpdateInputBase
public string RequestNumber { get; set; }
/// <summary>
/// 叫料请求类型
/// 叫料类型
/// </summary>
[Display(Name = "叫料请求类型")]
[StringLength(SfsEfCorePropertyConst.CodeLength, ErrorMessage = "{0}最多输入{1}个字符")]
public string RequestType { get; set; }
[Display(Name = "叫料类型")]
public EnumIssueRequestType IssueRequestType { get; set; }
/// <summary>
/// 使用在途库

13
be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Notes/IssueNotes/InjectionIssueNotes/Inputs/InjectionIssueNoteImportInput.cs

@ -1,17 +1,18 @@
using System.ComponentModel.DataAnnotations;
using Win_in.Sfs.Shared.Domain.Shared.Enums.Store;
namespace Win_in.Sfs.Wms.Store.Application.Contracts;
public class InjectionIssueNoteImportInput : SfsStoreImportInputBase, IHasJobNumber, IHasRequestNumber
{
/// <summary>
/// 任务ID
/// 任务ID
/// </summary>
[Display(Name = "任务ID")]
public string JobNumber { get; set; }
/// <summary>
/// 车间
/// 车间
/// </summary>
[Display(Name = "车间")]
public string Workshop { get; set; }
@ -19,13 +20,13 @@ public class InjectionIssueNoteImportInput : SfsStoreImportInputBase, IHasJobNum
public string RequestNumber { get; set; }
/// <summary>
/// 叫料请求类型
/// 叫料类型
/// </summary>
[Display(Name = "叫料请求类型")]
public string RequestType { get; set; }
[Display(Name = "叫料类型")]
public EnumIssueRequestType IssueRequestType { get; set; }
/// <summary>
/// 使用在途库
/// 使用在途库
/// </summary>
[Display(Name = "使用在途库")]
[Required(ErrorMessage = "{0}是必填项")]

9
be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Notes/IssueNotes/KittingIssueNotes/DTOs/KittingIssueNoteDTO.cs

@ -1,6 +1,7 @@
using System;
using System.ComponentModel.DataAnnotations;
using Win_in.Sfs.Shared.Domain;
using Win_in.Sfs.Shared.Domain.Shared.Enums.Store;
namespace Win_in.Sfs.Wms.Store.Application.Contracts;
@ -20,11 +21,10 @@ public class KittingIssueNoteDTO : SfsStoreDTOBase<KittingIssueNoteDetailDTO>, I
public string RequestNumber { get; set; }
/// <summary>
/// 叫料请求类型
/// 叫料类型
/// </summary>
[Display(Name = "叫料请求类型")]
[StringLength(SfsEfCorePropertyConst.CodeLength, ErrorMessage = "{0}最多输入{1}个字符")]
public string RequestType { get; set; }
[Display(Name = "叫料类型")]
public EnumIssueRequestType IssueRequestType { get; set; }
/// <summary>
/// 使用在途库
@ -44,4 +44,5 @@ public class KittingIssueNoteDTO : SfsStoreDTOBase<KittingIssueNoteDetailDTO>, I
[Display(Name = "确认时间")]
public DateTime? ConfirmTime { get; set; }
public EnumIssueSendType EnumIssueSendType { get; set; }
}

7
be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Notes/IssueNotes/KittingIssueNotes/IKittingIssueNoteAppService.cs

@ -12,10 +12,5 @@ public interface IKittingIssueNoteAppService : ISfsStoreMasterReadOnlyAppService
Task<KittingIssueNoteDTO> ConfirmAsync(Guid id);
Task<KittingIssueNoteDTO> ConfirmAsync(string number);
Task<PagedResultDto<KittingIssueNoteDTO>> GetListByTypeAsync(SfsStoreRequestInputBase requestInput,
string requestType, bool includeDetails = false, CancellationToken cancellationToken = default);
Task<List<KittingIssueNoteDTO>> GetListUnConfirmedByTypeAsync(string requestType);
}

10
be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Notes/IssueNotes/KittingIssueNotes/Inputs/KittingIssueNoteEditInput.cs

@ -1,6 +1,7 @@
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using Win_in.Sfs.Shared.Domain;
using Win_in.Sfs.Shared.Domain.Shared.Enums.Store;
namespace Win_in.Sfs.Wms.Store.Application.Contracts;
@ -41,16 +42,17 @@ public class KittingIssueNoteEditInput : SfsStoreCreateOrUpdateInputBase
public string RequestNumber { get; set; }
/// <summary>
/// 叫料请求类型
/// 叫料类型
/// </summary>
[Display(Name = "叫料请求类型")]
[StringLength(SfsEfCorePropertyConst.CodeLength, ErrorMessage = "{0}最多输入{1}个字符")]
public string RequestType { get; set; }
[Display(Name = "叫料类型")]
public EnumIssueRequestType IssueRequestType { get; set; }
/// <summary>
/// 使用在途库
/// </summary>
[Display(Name = "使用在途库")]
public bool UseOnTheWayLocation { get; set; }
public EnumIssueSendType EnumIssueSendType { get; set; }
#endregion
}

9
be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Notes/IssueNotes/KittingIssueNotes/Inputs/KittingIssueNoteImportInput.cs

@ -1,4 +1,5 @@
using System.ComponentModel.DataAnnotations;
using Win_in.Sfs.Shared.Domain.Shared.Enums.Store;
namespace Win_in.Sfs.Wms.Store.Application.Contracts;
@ -19,10 +20,10 @@ public class KittingIssueNoteImportInput : SfsStoreImportInputBase, IHasJobNumbe
public string RequestNumber { get; set; }
/// <summary>
/// 叫料请求类型
/// 叫料类型
/// </summary>
[Display(Name = "叫料请求类型")]
public string RequestType { get; set; }
[Display(Name = "叫料类型")]
public EnumIssueRequestType IssueRequestType { get; set; }
/// <summary>
/// 使用在途库
@ -30,4 +31,6 @@ public class KittingIssueNoteImportInput : SfsStoreImportInputBase, IHasJobNumbe
[Display(Name = "使用在途库")]
[Required(ErrorMessage = "{0}是必填项")]
public bool UseOnTheWayLocation { get; set; }
public EnumIssueSendType EnumIssueSendType { get; set; }
}

6
be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Requests/IssueRequest/InjectionIssueRequests/DTOs/InjectionIssueRequestDTO.cs

@ -1,14 +1,16 @@
using System.ComponentModel.DataAnnotations;
using Win_in.Sfs.Shared.Domain.Entities;
using Win_in.Sfs.Shared.Domain.Shared.Enums.Store;
namespace Win_in.Sfs.Wms.Store.Application.Contracts;
public class InjectionIssueRequestDTO : SfsStoreRequestDTOBase<InjectionIssueRequestDetailDTO>, IHasNumber
{
/// <summary>
/// 叫料类型
/// 叫料类型
/// </summary>
[Display(Name = "叫料类型")]
public string Type { get; set; }
public EnumIssueRequestType IssueRequestType { get; set; }
/// <summary>
/// 是否使用在途库

77
be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Requests/IssueRequest/InjectionIssueRequests/DTOs/InjectionIssueRequestDetailDTO.cs

@ -8,55 +8,92 @@ namespace Win_in.Sfs.Wms.Store.Application.Contracts;
public class InjectionIssueRequestDetailDTO : SfsStoreDetailWithQtyDTOBase
{
#region 目标库位信息
/// <summary>
/// 目标库位
/// </summary>
[Display(Name = "目标库位")]
[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储位")]
public string ToLocationErpCode { get; set; }
/// <summary>
/// 已发数量
/// 目标仓库
/// </summary>
[Display(Name = "目标仓库")]
public string ToWarehouseCode { get; set; }
#endregion
/// <summary>
/// 生产线
/// </summary>
public string ProdLine { get; set; }
/// <summary>
/// 已发数量
/// </summary>
[Display(Name = "已发数量")]
public decimal IssuedQty { get; set; }
/// <summary>
/// 已收数量
/// 已收数量
/// </summary>
[Display(Name = "已收数量")]
public decimal ReceivedQty { get; set; }
/// <summary>
/// 明细状态
/// 明细状态
/// </summary>
[Display(Name = "明细状态")]
public EnumStatus Status { get; set; }
/// <summary>
/// 请求未发
/// 请求未发 还未发送的数量
/// </summary>
[Display(Name = "请求未发")]
[NotMapped]
public decimal ToBeIssuedQty => Qty - IssuedQty;
/// <summary>
/// 已发未收
/// 已发未收
/// </summary>
[Display(Name = "已发未收")]
[NotMapped]
public decimal ToBeReceivedQty => IssuedQty - ReceivedQty;
/// <summary>
/// 请求未收
/// 请求未收
/// </summary>
[Display(Name = "请求未收")]
[NotMapped]
public decimal NotFinishQty => Qty - ReceivedQty;
/// <summary>
/// 需求箱数量
/// 位置码
/// </summary>
[Display(Name = "需求箱数量")]
public decimal BoxQty { get; set; }
}
public class UnCompletedRequestDto
{
public string ItemCode { get; set; }
public string LocCode { get; set; }
public string PositionCode { get; set; }
/// <summary>
/// 推荐类型
/// </summary>
public EnumRecommendType RecommendType { get; set; }
/// <summary>
/// 需求箱数量
/// </summary>
[Display(Name = "需求箱数量")]
public decimal BoxQty { get; set; }
}

8
be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Requests/IssueRequest/InjectionIssueRequests/DTOs/UnCompletedRequestDto.cs

@ -0,0 +1,8 @@
namespace Win_in.Sfs.Wms.Store.Application.Contracts;
public class UnCompletedRequestDto
{
public string ItemCode { get; set; }
public string LocCode { get; set; }
public string PositionCode { get; set; }
}

8
be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Requests/IssueRequest/InjectionIssueRequests/IInjectionIssueRequestAppService.cs

@ -10,14 +10,6 @@ public interface IInjectionIssueRequestAppService
: ISfsStoreRequestMasterAppServiceBase<InjectionIssueRequestDTO, SfsStoreRequestInputBase, InjectionIssueRequestEditInput, InjectionIssueRequestDetailDTO, SfsStoreRequestInputBase>
{
Task<InjectionIssueRequestDTO> CreateAndHandleAsync(InjectionIssueRequestEditInput input);
/// <summary>
/// 获取已完成的叫料单数量
/// </summary>
/// <returns></returns>
Task<long> GetCountAsync();
/// <summary>
/// 获取物品类别列表
/// </summary>

21
be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Requests/IssueRequest/InjectionIssueRequests/Inputs/InjectionIssueRequestEditInput.cs

@ -1,33 +1,26 @@
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using Win_in.Sfs.Shared.Domain;
using Win_in.Sfs.Shared.Domain.Shared.Enums.Store;
namespace Win_in.Sfs.Wms.Store.Application.Contracts;
public class InjectionIssueRequestEditInput : SfsStoreRequestCreateOrUpdateInputBase
{
#region Base
/// <summary>
/// 叫料类型
/// 叫料类型
/// </summary>
[Display(Name = "叫料类型")]
public string Type { get; set; }
public EnumIssueRequestType IssueRequestType { get; set; }
/// <summary>
/// 使用在途库
/// 使用在途库
/// </summary>
[Display(Name = "使用在途库")]
public bool UseOnTheWayLocation { get; set; }
public bool UseOnTheWayLocation { get; set; }
/// <summary>
/// 明细列表
/// 明细列表
/// </summary>
[Display(Name = "明细列表")]
public List<InjectionIssueRequestDetailInput> Details { get; set; } = new List<InjectionIssueRequestDetailInput>();
#endregion
#region Create
#endregion
public List<InjectionIssueRequestDetailInput> Details { get; set; } = new();
}

21
be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Requests/IssueRequest/InjectionIssueRequests/Inputs/InjectionIssueRequestImportInput.cs

@ -1,6 +1,5 @@
using System.ComponentModel.DataAnnotations;
using Win_in.Sfs.Shared.Application.Contracts;
using Win_in.Sfs.Shared.Domain.Shared;
using Win_in.Sfs.Shared.Domain.Shared.Enums.Store;
namespace Win_in.Sfs.Wms.Store.Application.Contracts;
@ -8,45 +7,41 @@ namespace Win_in.Sfs.Wms.Store.Application.Contracts;
public class InjectionIssueRequestImportInput : SfsStoreImportInputBase
{
/// <summary>
/// 叫料类型
/// 叫料类型
/// </summary>
[Display(Name = "叫料类型")]
[Required(ErrorMessage = "{0}是必填项")]
[ImporterHeader(Name = "叫料类型")]
[ExporterHeader(DisplayName = "叫料类型")]
[ValueMapping("人工拉动", EnumMaterialRequestType.Issue_Manual)]
public string Type { get; set; }
public EnumIssueRequestType IssueRequestType { get; set; }
/// <summary>
/// 物品代码
/// 物品代码
/// </summary>
[Display(Name = "物品代码")]
[Required]
public string ItemCode { get; set; }
/// <summary>
/// 目标库位
/// 目标库位
/// </summary>
[Display(Name = "目标库位")]
[Required]
public string ToLocationCode { get; set; }
/// <summary>
/// 来源库区
/// 来源库区
/// </summary>
[Display(Name = "调出库区")]
[Required]
public string FromLocationArea { get; set; }
/// <summary>
/// 数量
/// 数量
/// </summary>
[Display(Name = "数量")]
[Required(ErrorMessage = "{0}是必填项")]
public decimal Qty { get; set; }
/// <summary>
/// 备注
/// 备注
/// </summary>
[Display(Name = "备注")]
public string Remark { get; set; }

4
be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Requests/IssueRequest/KittingIssueRequests/DTOs/KittingIssueRequestDTO.cs

@ -1,4 +1,5 @@
using System.ComponentModel.DataAnnotations;
using Win_in.Sfs.Shared.Domain.Shared.Enums.Store;
namespace Win_in.Sfs.Wms.Store.Application.Contracts;
@ -8,8 +9,7 @@ public class KittingIssueRequestDTO : SfsStoreRequestDTOBase<KittingIssueRequest
/// 叫料类型
/// </summary>
[Display(Name = "叫料类型")]
public string Type { get; set; }
public EnumIssueRequestType IssueRequestType { get; set; }
/// <summary>
/// 是否使用在途库
/// </summary>

70
be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Requests/IssueRequest/KittingIssueRequests/DTOs/KittingIssueRequestDetailDTO.cs

@ -8,47 +8,91 @@ namespace Win_in.Sfs.Wms.Store.Application.Contracts;
public class KittingIssueRequestDetailDTO : SfsStoreDetailWithQtyDTOBase
{
#region 目标库位信息
/// <summary>
/// 目标库位
/// </summary>
[Display(Name = "目标库位")]
[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储位")]
public string ToLocationErpCode { get; set; }
/// <summary>
/// 已发数量
/// 目标仓库
/// </summary>
[Display(Name = "目标仓库")]
public string ToWarehouseCode { get; set; }
#endregion
/// <summary>
/// 生产线
/// </summary>
public string ProdLine { get; set; }
/// <summary>
/// 已发数量
/// </summary>
[Display(Name = "已发数量")]
public decimal IssuedQty { get; set; }
/// <summary>
/// 已收数量
/// 已收数量
/// </summary>
[Display(Name = "已收数量")]
public decimal ReceivedQty { get; set; }
/// <summary>
/// 明细状态
/// 明细状态
/// </summary>
[Display(Name = "明细状态")]
public EnumStatus Status { get; set; }
/// <summary>
/// 请求未发
/// 请求未发 还未发送的数量
/// </summary>
[Display(Name = "请求未发")]
[NotMapped]
public decimal ToBeIssuedQty => Qty - IssuedQty;
/// <summary>
/// 已发未收
/// 已发未收
/// </summary>
[Display(Name = "已发未收")]
[NotMapped]
public decimal ToBeReceivedQty => IssuedQty - ReceivedQty;
/// <summary>
/// 请求未收
/// 请求未收
/// </summary>
[Display(Name = "请求未收")]
[NotMapped]
public decimal NotFinishQty => Qty - ReceivedQty;
/// <summary>
/// 需求箱数量
/// 位置码
/// </summary>
public string PositionCode { get; set; }
/// <summary>
/// 推荐类型
/// </summary>
public EnumRecommendType RecommendType { get; set; }
/// <summary>
/// 需求箱数量
/// </summary>
[Display(Name = "需求箱数量")]
public decimal BoxQty { get; set; }

2
be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Requests/IssueRequest/KittingIssueRequests/IKittingIssueRequestAppService.cs

@ -1,3 +1,4 @@
using System;
using System.Collections.Generic;
using System.Threading;
using System.Threading.Tasks;
@ -10,4 +11,5 @@ public interface IKittingIssueRequestAppService
{
Task<KittingIssueRequestDTO> CreateAndHandleAsync(KittingIssueRequestEditInput input);
Task UpdateStatusCompletedAsync(string number);
}

5
be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Requests/IssueRequest/KittingIssueRequests/Inputs/KittingIssueRequestEditInput.cs

@ -1,6 +1,7 @@
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using Win_in.Sfs.Shared.Domain;
using Win_in.Sfs.Shared.Domain.Shared.Enums.Store;
namespace Win_in.Sfs.Wms.Store.Application.Contracts;
@ -9,10 +10,10 @@ public class KittingIssueRequestEditInput : SfsStoreRequestCreateOrUpdateInputBa
#region Base
/// <summary>
/// 叫料类型
/// 叫料类型
/// </summary>
[Display(Name = "叫料类型")]
public string Type { get; set; }
public EnumIssueRequestType IssueRequestType { get; set; }
/// <summary>
/// 使用在途库

9
be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Requests/IssueRequest/KittingIssueRequests/Inputs/KittingIssueRequestImportInput.cs

@ -1,6 +1,7 @@
using System.ComponentModel.DataAnnotations;
using Win_in.Sfs.Shared.Application.Contracts;
using Win_in.Sfs.Shared.Domain.Shared;
using Win_in.Sfs.Shared.Domain.Shared.Enums.Store;
namespace Win_in.Sfs.Wms.Store.Application.Contracts;
@ -8,14 +9,10 @@ namespace Win_in.Sfs.Wms.Store.Application.Contracts;
public class KittingIssueRequestImportInput : SfsStoreImportInputBase
{
/// <summary>
/// 叫料类型
/// 叫料类型
/// </summary>
[Display(Name = "叫料类型")]
[Required(ErrorMessage = "{0}是必填项")]
[ImporterHeader(Name = "叫料类型")]
[ExporterHeader(DisplayName = "叫料类型")]
[ValueMapping("人工拉动", EnumMaterialRequestType.Issue_Manual)]
public string Type { get; set; }
public EnumIssueRequestType IssueRequestType { get; set; }
/// <summary>
/// 物品代码

2
be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Jobs/IssueJobs/AssembleIssueJobs/AssembleIssueJobAppService.cs

@ -72,7 +72,7 @@ public class AssembleIssueJobAppService
var loctionDto = await _locationAppService.GetByCodeAsync(jobDetailInputdetail.RecommendFromLocationCode)
.ConfigureAwait(false);
if (loctionDto.RowCode != 1)
if (loctionDto.Type == EnumLocationType.RAW && loctionDto.RowCode != 1)
{
input.JobStatus = EnumJobStatus.Wait;

2
be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Jobs/IssueJobs/CoatingIssueJobs/CoatingIssueJobAppService.cs

@ -73,7 +73,7 @@ public class CoatingIssueJobAppService
var loctionDto = await _locationAppService.GetByCodeAsync(jobDetailInputdetail.RecommendFromLocationCode)
.ConfigureAwait(false);
if (loctionDto.RowCode != 1)
if (loctionDto.Type == EnumLocationType.RAW && loctionDto.RowCode != 1)
{
input.JobStatus = EnumJobStatus.Wait;

11
be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Jobs/IssueJobs/InjectionIssueJobs/InjectionIssueJobAppService.cs

@ -74,8 +74,8 @@ public class InjectionIssueJobAppService
var loctionDto = await _locationAppService.GetByCodeAsync(jobDetailInputdetail.RecommendFromLocationCode)
.ConfigureAwait(false);
if (loctionDto.RowCode != 1)
if (loctionDto.Type == EnumLocationType.RAW && loctionDto.RowCode != 1)
{
input.JobStatus = EnumJobStatus.Wait;
@ -184,11 +184,4 @@ public class InjectionIssueJobAppService
return;
}
[HttpPost("test")]
public virtual async Task Test()
{
Console.WriteLine("FuAZCZXVZXVXZVZ");
await Task.CompletedTask;
}
}

251
be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Jobs/IssueJobs/KittingIssueJobs/KittingIssueJobAppService.cs

@ -1,19 +1,14 @@
using System;
using System.Collections.Generic;
using System.Data;
using System.Linq;
using System.Linq.Expressions;
using System.Threading;
using System.Threading.Tasks;
using Castle.Components.DictionaryAdapter;
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Mvc;
using Volo.Abp;
using Volo.Abp.Application.Dtos;
using Win_in.Sfs.Basedata.Application.Contracts;
using Win_in.Sfs.Basedata.Domain.Shared;
using Win_in.Sfs.Shared.Domain;
using Win_in.Sfs.Shared.Domain.Shared;
using Win_in.Sfs.Shared.Domain.Shared.Enums.Store;
using Win_in.Sfs.Wms.Inventory.Application.Contracts;
using Win_in.Sfs.Wms.Store.Application.Contracts;
using Win_in.Sfs.Wms.Store.Domain;
using Win_in.Sfs.Wms.Store.Domain.Shared;
@ -31,14 +26,23 @@ public class KittingIssueJobAppService
private readonly IKittingIssueJobManager _kittingIssueJobManager;
private readonly ILocationAppService _locationAppService;
private readonly ITransferLibJobAppService _transferLibJobAppService;
private readonly IKittingIssueNoteAppService _kittingIssueNoteAppService;
private readonly IExpectOutAppService _expectOutAppService;
protected IKittingIssueRequestAppService KittingIssueRequestAppService =>
LazyServiceProvider.LazyGetRequiredService<IKittingIssueRequestAppService>();
public KittingIssueJobAppService(
IKittingIssueJobRepository repository, IKittingIssueJobManager kittingIssueJobManager,
ILocationAppService locationAppService, ITransferLibJobAppService transferLibJobAppService) : base(repository, kittingIssueJobManager)
ILocationAppService locationAppService, ITransferLibJobAppService transferLibJobAppService,
IKittingIssueNoteAppService kittingIssueNoteAppService, IExpectOutAppService expectOutAppService) : base(
repository, kittingIssueJobManager)
{
_kittingIssueJobManager = kittingIssueJobManager;
_locationAppService = locationAppService;
_transferLibJobAppService = transferLibJobAppService;
_kittingIssueNoteAppService = kittingIssueNoteAppService;
_expectOutAppService = expectOutAppService;
}
[HttpPost("add-many")]
@ -47,6 +51,7 @@ public class KittingIssueJobAppService
foreach (var input in inputs)
{
await CheckMinRowAndSetStatusAsync(input).ConfigureAwait(false);
await CheckDimensionalStorehouseAsync(input).ConfigureAwait(false);
}
return await base.CreateManyAsync(inputs).ConfigureAwait(false);
@ -56,10 +61,139 @@ public class KittingIssueJobAppService
public override async Task<KittingIssueJobDTO> CreateAsync(KittingIssueJobEditInput input)
{
await CheckMinRowAndSetStatusAsync(input).ConfigureAwait(false);
await CheckDimensionalStorehouseAsync(input).ConfigureAwait(false);
return await base.CreateAsync(input).ConfigureAwait(false);
}
[HttpPost("invalid")]
public override async Task CancelAsync(Guid id)
{
var injectionJob = await _repository.GetAsync(id).ConfigureAwait(false);
if (injectionJob == null)
{
throw new UserFriendlyException($"未找到ID为 {id} 的任务");
}
await _kittingIssueJobManager.CancelAsync(injectionJob).ConfigureAwait(false);
}
[HttpPost("cancel-by-request/{injectionNumber}")]
public virtual async Task CancelByMaterialRequestAsync(string injectionNumber)
{
var entities = await _repository.GetListAsync(p => p.KittingRequestNumber == injectionNumber)
.ConfigureAwait(false);
foreach (var entity in entities)
{
await _kittingIssueJobManager.CancelAsync(entity).ConfigureAwait(false);
}
}
[HttpPost("by-request-number/{requestNumber}")]
public virtual async Task<List<KittingIssueJobDTO>> GetByRequestNumberAsync(string requestNumber)
{
var entitys = await _repository.GetListAsync(p => p.KittingRequestNumber == requestNumber)
.ConfigureAwait(false);
return ObjectMapper.Map<List<KittingIssueJob>, List<KittingIssueJobDTO>>(entitys);
}
/// <summary>
/// 库移回调
/// </summary>
/// <param name="dto"></param>
/// <returns></returns>
[HttpPost("Do-Call-Back")]
public async Task DoTransferLibCallbackAsync(TransferLibJobDTO dto)
{
var job = await _repository.FindAsync(p => p.Number == dto.CallJobNumber).ConfigureAwait(false);
var transferLibJobDto = await _transferLibJobAppService.GetByNumberAsync(dto.Number).ConfigureAwait(false);
var transferLibNoteDetail = dto.Details.First();
var jobDetail = job.Details.First();
job.JobStatus = EnumJobStatus.Open;
jobDetail.TransferLibFromArriveDate = transferLibNoteDetail.HandledFromArriveDate;
jobDetail.TransferLibFromContainerCode = transferLibNoteDetail.HandledFromContainerCode;
jobDetail.TransferLibFromExpireDate = transferLibNoteDetail.HandledFromExpireDate;
jobDetail.TransferLibFromLocationArea = transferLibNoteDetail.HandledFromLocationArea;
jobDetail.TransferLibFromLocationCode = transferLibNoteDetail.HandledFromLocationCode;
jobDetail.TransferLibFromLocationErpCode = transferLibNoteDetail.HandledFromLocationErpCode;
jobDetail.TransferLibFromLocationGroup = transferLibNoteDetail.HandledFromLocationGroup;
jobDetail.TransferLibFromLot = transferLibNoteDetail.HandledFromLot;
jobDetail.TransferLibFromPackingCode = transferLibNoteDetail.HandledFromPackingCode;
jobDetail.TransferLibFromProduceDate = transferLibNoteDetail.HandledFromProduceDate;
jobDetail.TransferLibFromQty = transferLibNoteDetail.HandledFromQty;
jobDetail.TransferLibFromSupplierBatch = transferLibNoteDetail.HandledFromSupplierBatch;
jobDetail.TransferLibFromWarehouseCode = transferLibNoteDetail.HandledFromWarehouseCode;
jobDetail.TransferLibToArriveDate = transferLibNoteDetail.HandledToArriveDate;
jobDetail.TransferLibToContainerCode = transferLibNoteDetail.HandledToContainerCode;
jobDetail.TransferLibToExpireDate = transferLibNoteDetail.HandledToExpireDate;
jobDetail.TransferLibToLocationArea = transferLibNoteDetail.HandledToLocationArea;
jobDetail.TransferLibToLocationCode = transferLibNoteDetail.HandledToLocationCode;
jobDetail.TransferLibToLocationErpCode = transferLibNoteDetail.HandledToLocationErpCode;
jobDetail.TransferLibToLocationGroup = transferLibNoteDetail.HandledToLocationGroup;
jobDetail.TransferLibToLot = transferLibNoteDetail.HandledToLot;
jobDetail.TransferLibToPackingCode = transferLibNoteDetail.HandledToPackingCode;
jobDetail.TransferLibToProduceDate = transferLibNoteDetail.HandledToProduceDate;
jobDetail.TransferLibToQty = transferLibNoteDetail.HandledToQty;
jobDetail.TransferLibToSupplierBatch = transferLibNoteDetail.HandledToSupplierBatch;
jobDetail.TransferLibToWarehouseCode = transferLibNoteDetail.HandledToWarehouseCode;
await _repository.UpdateAsync(job).ConfigureAwait(false);
}
/// <summary>
/// 执行任务明细
/// </summary>
/// <returns></returns>
[HttpPost("ExecuteDetail/{masterId}")]
public async Task ExecuteDetailAsync(Guid masterId, Guid detailId, KittingIssueJobDetailDTO issueJobDetailDto)
{
var kittingIssueJob = await _repository.GetAsync(masterId).ConfigureAwait(false);
var kittingIssueJobDto = ObjectMapper.Map<KittingIssueJob, KittingIssueJobDTO>(kittingIssueJob);
kittingIssueJobDto.Details = new List<KittingIssueJobDetailDTO> { issueJobDetailDto };
var kittingIssueNoteEditInput = await BuildKittingIssueNoteAsync(kittingIssueJobDto).ConfigureAwait(false);
await _kittingIssueNoteAppService.CreateAsync(kittingIssueNoteEditInput).ConfigureAwait(false);
kittingIssueJobDto = ObjectMapper.Map<KittingIssueJob, KittingIssueJobDTO>(kittingIssueJob);
if (kittingIssueJob.EnumIssueSendType == EnumIssueSendType.QtyType) //按箱叫料 因为任务只有1箱 所以可以直接完成
{
await UpdateJobStatusDoneAsync(kittingIssueJob, issueJobDetailDto).ConfigureAwait(false);
}
else
{
var detail = kittingIssueJob.Details.First(p => p.Id == issueJobDetailDto.Id);
if (issueJobDetailDto.HandledToQty >= detail.RequestQty)
{
await UpdateJobStatusDoneAsync(kittingIssueJob, issueJobDetailDto).ConfigureAwait(false);
}
}
}
#region 私有
/// <summary>
/// 创建补料记录实体
/// </summary>
/// <param name="kittingIssueJobDto"></param>
/// <returns></returns>
private async Task<KittingIssueNoteEditInput> BuildKittingIssueNoteAsync(KittingIssueJobDTO kittingIssueJobDto)
{
var kittingIssueNoteCreateInput =
ObjectMapper.Map<KittingIssueJobDTO, KittingIssueNoteEditInput>(kittingIssueJobDto);
kittingIssueNoteCreateInput.JobNumber = kittingIssueJobDto.Number;
await Task.CompletedTask.ConfigureAwait(false);
return kittingIssueNoteCreateInput;
}
/// <summary>
/// 判断是不是在最底层 如果不是则把状态变更为等待 并把库移推荐的From和To赋值
/// </summary>
@ -71,8 +205,8 @@ public class KittingIssueJobAppService
var loctionDto = await _locationAppService.GetByCodeAsync(jobDetailInputdetail.RecommendFromLocationCode)
.ConfigureAwait(false);
if (loctionDto.RowCode != 1)
if (loctionDto.Type == EnumLocationType.RAW && loctionDto.RowCode != 1)
{
input.JobStatus = EnumJobStatus.Wait;
@ -106,86 +240,49 @@ public class KittingIssueJobAppService
}
}
[HttpPost("cancel-by-request/{requestNumber}")]
public virtual async Task CancelByMaterialRequestAsync(string requestNumber)
/// <summary>
/// 判断是不是在立体库
/// </summary>
/// <param name="input"></param>
/// <returns></returns>
private async Task CheckDimensionalStorehouseAsync(KittingIssueJobEditInput input)
{
var entities = await _repository.GetListAsync(p => p.KittingRequestNumber == requestNumber)
var jobDetailInputdetail = input.Details.FirstOrDefault();
var loctionDto = await _locationAppService.GetByCodeAsync(jobDetailInputdetail.RecommendFromLocationCode)
.ConfigureAwait(false);
foreach (var entity in entities)
if (loctionDto.Type == EnumLocationType.DimensionalStorehouse)
{
await _kittingIssueJobManager.CancelAsync(entity).ConfigureAwait(false);
input.JobStatus = EnumJobStatus.Wait;
//todo 调用立库接口
}
}
[HttpPost("invalid")]
public override async Task CancelAsync(Guid id)
private async Task UpdateJobStatusDoneAsync(KittingIssueJob kittingIssueJob,
KittingIssueJobDetailDTO kittingIssueJobDetailDto)
{
var kittingIssueJob = await _repository.GetAsync(id).ConfigureAwait(false);
if (kittingIssueJob == null)
if (kittingIssueJob.JobStatus is EnumJobStatus.Closed or EnumJobStatus.Cancelled or EnumJobStatus.None
or EnumJobStatus.Done) //需要考虑下 多次提交的问题 所以不判断 进行中
{
throw new UserFriendlyException($"未找到ID为 {id} 的任务");
throw new UserFriendlyException(
$"任务状态错误:编号为【{kittingIssueJob.Number}】的任务已经【{kittingIssueJob.JobStatus.GetDisplayName()}】");
}
await _kittingIssueJobManager.CancelAsync(kittingIssueJob).ConfigureAwait(false);
}
[HttpPost("by-request-number/{requestNumber}")]
public virtual async Task<List<KittingIssueJobDTO>> GetByRequestNumberAsync(string requestNumber)
{
var entitys = await _repository.GetListAsync(p => p.KittingRequestNumber == requestNumber)
.ConfigureAwait(false);
return ObjectMapper.Map<List<KittingIssueJob>, List<KittingIssueJobDTO>>(entitys);
}
[HttpPost("Do-Call-Back")]
public async Task DoTransferLibCallbackAsync(TransferLibJobDTO dto)
{
var job = await _repository.FindAsync(p => p.Number == dto.CallJobNumber).ConfigureAwait(false);
var transferLibJobDto= await _transferLibJobAppService.GetByNumberAsync(dto.Number).ConfigureAwait(false);
var transferLibNoteDetail= dto.Details.First();
kittingIssueJob.JobStatus = EnumJobStatus.Done;
var jobDetail = job.Details.First();
job.JobStatus = EnumJobStatus.Open;
await _expectOutAppService.RemoveByNumberAndInventoryAsync(kittingIssueJob.Number,
kittingIssueJobDetailDto.ItemCode,
kittingIssueJobDetailDto.HandledToLocationCode, kittingIssueJobDetailDto.HandledToPackingCode,
kittingIssueJobDetailDto.Status, kittingIssueJobDetailDto.HandledToLot,
kittingIssueJobDetailDto.HandledToQty).ConfigureAwait(false);
jobDetail.TransferLibFromArriveDate = transferLibNoteDetail.HandledFromArriveDate;
jobDetail.TransferLibFromContainerCode=transferLibNoteDetail.HandledFromContainerCode;
jobDetail.TransferLibFromExpireDate=transferLibNoteDetail.HandledFromExpireDate;
jobDetail.TransferLibFromLocationArea=transferLibNoteDetail.HandledFromLocationArea;
jobDetail.TransferLibFromLocationCode=transferLibNoteDetail.HandledFromLocationCode;
jobDetail.TransferLibFromLocationErpCode = transferLibNoteDetail.HandledFromLocationErpCode;
jobDetail.TransferLibFromLocationGroup=transferLibNoteDetail.HandledFromLocationGroup;
jobDetail.TransferLibFromLot=transferLibNoteDetail.HandledFromLot;
jobDetail.TransferLibFromPackingCode = transferLibNoteDetail.HandledFromPackingCode;
jobDetail.TransferLibFromProduceDate = transferLibNoteDetail.HandledFromProduceDate;
jobDetail.TransferLibFromQty=transferLibNoteDetail.HandledFromQty;
jobDetail.TransferLibFromSupplierBatch=transferLibNoteDetail.HandledFromSupplierBatch;
jobDetail.TransferLibFromWarehouseCode = transferLibNoteDetail.HandledFromWarehouseCode;
jobDetail.TransferLibToArriveDate = transferLibNoteDetail.HandledToArriveDate;
jobDetail.TransferLibToContainerCode = transferLibNoteDetail.HandledToContainerCode;
jobDetail.TransferLibToExpireDate = transferLibNoteDetail.HandledToExpireDate;
jobDetail.TransferLibToLocationArea = transferLibNoteDetail.HandledToLocationArea;
jobDetail.TransferLibToLocationCode = transferLibNoteDetail.HandledToLocationCode;
jobDetail.TransferLibToLocationErpCode = transferLibNoteDetail.HandledToLocationErpCode;
jobDetail.TransferLibToLocationGroup = transferLibNoteDetail.HandledToLocationGroup;
jobDetail.TransferLibToLot = transferLibNoteDetail.HandledToLot;
jobDetail.TransferLibToPackingCode = transferLibNoteDetail.HandledToPackingCode;
jobDetail.TransferLibToProduceDate = transferLibNoteDetail.HandledToProduceDate;
jobDetail.TransferLibToQty = transferLibNoteDetail.HandledToQty;
jobDetail.TransferLibToSupplierBatch = transferLibNoteDetail.HandledToSupplierBatch;
jobDetail.TransferLibToWarehouseCode = transferLibNoteDetail.HandledToWarehouseCode;
await _repository.UpdateAsync(job).ConfigureAwait(false);
await KittingIssueRequestAppService.UpdateStatusCompletedAsync(kittingIssueJob.KittingRequestNumber)
.ConfigureAwait(false);
return;
await Task.CompletedTask.ConfigureAwait(false);
}
[HttpPost("test")]
public virtual async Task Test()
{
Console.WriteLine("FuAZCZXVZXVXZVZ");
await Task.CompletedTask;
}
#endregion
}

47
be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Notes/IssueNotes/AssembleIssueNotes/AssembleIssueNoteAppService.cs

@ -58,51 +58,4 @@ public class AssembleIssueNoteAppService :
await LocalEventBus.PublishAsync(new SfsConfirmedEntityEventData<AssembleIssueNote>(assembleNote), false).ConfigureAwait(false);
return ObjectMapper.Map<AssembleIssueNote, AssembleIssueNoteDTO>(assembleNote);
}
[HttpPost("confirm-by-number/{number}")]
public virtual async Task<AssembleIssueNoteDTO> ConfirmAsync(string number)
{
var entity = await _repository.FindAsync(p => p.Number == number).ConfigureAwait(false);
Check.NotNull(entity, nameof(AssembleIssueNote));
var result = await _assembleNoteManager.ConfirmAsync(entity.Id).ConfigureAwait(false);
var dto = ObjectMapper.Map<AssembleIssueNote, AssembleIssueNoteDTO>(result);
return dto;
}
/// <summary>
/// 根据叫料请求类型获取发料记录
/// </summary>
/// <param name="requestInput"></param>
/// <param name="requestType">
/// 叫料请求类型:
/// 人工拉动:Issue_Manual;
/// 线边拉动:Issue_WIP;
/// </param>
/// <param name="includeDetails"></param>
/// <param name="cancellationToken"></param>
/// <returns></returns>
[HttpPost("by-type/{requestType}")]
public virtual async Task<PagedResultDto<AssembleIssueNoteDTO>> GetListByTypeAsync(SfsStoreRequestInputBase requestInput,
string requestType, bool includeDetails = false, CancellationToken cancellationToken = default)
{
Expression<Func<AssembleIssueNote, bool>> expression = p => p.RequestType == requestType;
if (requestInput.Condition.Filters?.Count > 0)
{
expression = expression.And(requestInput.Condition.Filters.ToLambda<AssembleIssueNote>());
}
return await GetPagedListAsync(expression, requestInput.SkipCount, requestInput.MaxResultCount,
requestInput.Sorting, includeDetails, cancellationToken).ConfigureAwait(false);
}
[HttpGet("list/un-confirmed/{requestType}")]
public virtual async Task<List<AssembleIssueNoteDTO>> GetListUnConfirmedByTypeAsync(string requestType)
{
var entities = await _repository.GetListAsync(c => !c.Confirmed && c.RequestType == requestType)
.ConfigureAwait(false);
var dtos = ObjectMapper.Map<List<AssembleIssueNote>, List<AssembleIssueNoteDTO>>(entities);
return dtos;
}
}

46
be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Notes/IssueNotes/CoatingIssueNotes/CoatingIssueNoteAppService.cs

@ -60,50 +60,6 @@ public class CoatingIssueNoteAppService :
return ObjectMapper.Map<CoatingIssueNote, CoatingIssueNoteDTO>(coatingIssueNote);
}
[HttpPost("confirm-by-number/{number}")]
public virtual async Task<CoatingIssueNoteDTO> ConfirmAsync(string number)
{
var entity = await _repository.FindAsync(p => p.Number == number).ConfigureAwait(false);
Check.NotNull(entity, nameof(CoatingIssueNote));
var result = await _coatingIssueNoteManager.ConfirmAsync(entity.Id).ConfigureAwait(false);
var dto = ObjectMapper.Map<CoatingIssueNote, CoatingIssueNoteDTO>(result);
return dto;
}
/// <summary>
/// 根据叫料请求类型获取发料记录
/// </summary>
/// <param name="requestInput"></param>
/// <param name="requestType">
/// 叫料请求类型:
/// 人工拉动:Issue_Manual;
/// 线边拉动:Issue_WIP;
/// </param>
/// <param name="includeDetails"></param>
/// <param name="cancellationToken"></param>
/// <returns></returns>
[HttpPost("by-type/{requestType}")]
public virtual async Task<PagedResultDto<CoatingIssueNoteDTO>> GetListByTypeAsync(SfsStoreRequestInputBase requestInput,
string requestType, bool includeDetails = false, CancellationToken cancellationToken = default)
{
Expression<Func<CoatingIssueNote, bool>> expression = p => p.RequestType == requestType;
if (requestInput.Condition.Filters?.Count > 0)
{
expression = expression.And(requestInput.Condition.Filters.ToLambda<CoatingIssueNote>());
}
return await GetPagedListAsync(expression, requestInput.SkipCount, requestInput.MaxResultCount,
requestInput.Sorting, includeDetails, cancellationToken).ConfigureAwait(false);
}
[HttpGet("list/un-confirmed/{requestType}")]
public virtual async Task<List<CoatingIssueNoteDTO>> GetListUnConfirmedByTypeAsync(string requestType)
{
var entities = await _repository.GetListAsync(c => !c.Confirmed && c.RequestType == requestType)
.ConfigureAwait(false);
var dtos = ObjectMapper.Map<List<CoatingIssueNote>, List<CoatingIssueNoteDTO>>(entities);
return dtos;
}
}

11
be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Notes/IssueNotes/InjectionIssueNotes/InjectionIssueNoteAppService.cs

@ -10,6 +10,7 @@ using Volo.Abp;
using Volo.Abp.Application.Dtos;
using Volo.Abp.Domain.Entities;
using Win_in.Sfs.Shared.Domain;
using Win_in.Sfs.Shared.Domain.Shared.Enums.Store;
using Win_in.Sfs.Shared.Event;
using Win_in.Sfs.Wms.Store.Application.Contracts;
using Win_in.Sfs.Wms.Store.Domain;
@ -85,9 +86,9 @@ public class InjectionIssueNoteAppService :
/// <returns></returns>
[HttpPost("by-type/{requestType}")]
public virtual async Task<PagedResultDto<InjectionIssueNoteDTO>> GetListByTypeAsync(SfsStoreRequestInputBase requestInput,
string requestType, bool includeDetails = false, CancellationToken cancellationToken = default)
EnumIssueRequestType issueRequestType, bool includeDetails = false, CancellationToken cancellationToken = default)
{
Expression<Func<InjectionIssueNote, bool>> expression = p => p.RequestType == requestType;
Expression<Func<InjectionIssueNote, bool>> expression = p => p.IssueRequestType == issueRequestType;
if (requestInput.Condition.Filters?.Count > 0)
{
expression = expression.And(requestInput.Condition.Filters.ToLambda<InjectionIssueNote>());
@ -97,10 +98,10 @@ public class InjectionIssueNoteAppService :
requestInput.Sorting, includeDetails, cancellationToken).ConfigureAwait(false);
}
[HttpGet("list/un-confirmed/{requestType}")]
public virtual async Task<List<InjectionIssueNoteDTO>> GetListUnConfirmedByTypeAsync(string requestType)
[HttpPost("list-by-type-and-un-confirmed")]
public virtual async Task<List<InjectionIssueNoteDTO>> GetListUnConfirmedByTypeAsync(EnumIssueRequestType issueRequestType)
{
var entities = await _repository.GetListAsync(c => !c.Confirmed && c.RequestType == requestType)
var entities = await _repository.GetListAsync(c => !c.Confirmed && c.IssueRequestType == issueRequestType)
.ConfigureAwait(false);
var dtos = ObjectMapper.Map<List<InjectionIssueNote>, List<InjectionIssueNoteDTO>>(entities);

46
be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Notes/IssueNotes/KittingIssueNotes/KittingIssueNoteAppService.cs

@ -59,50 +59,4 @@ public class KittingIssueNoteAppService :
return ObjectMapper.Map<KittingIssueNote, KittingIssueNoteDTO>(kittingIssueNote);
}
[HttpPost("confirm-by-number/{number}")]
public virtual async Task<KittingIssueNoteDTO> ConfirmAsync(string number)
{
var entity = await _repository.FindAsync(p => p.Number == number).ConfigureAwait(false);
Check.NotNull(entity, nameof(KittingIssueNote));
var result = await _kittingIssueNoteManager.ConfirmAsync(entity.Id).ConfigureAwait(false);
var dto = ObjectMapper.Map<KittingIssueNote, KittingIssueNoteDTO>(result);
return dto;
}
/// <summary>
/// 根据叫料请求类型获取发料记录
/// </summary>
/// <param name="requestInput"></param>
/// <param name="requestType">
/// 叫料请求类型:
/// 人工拉动:Issue_Manual;
/// 线边拉动:Issue_WIP;
/// </param>
/// <param name="includeDetails"></param>
/// <param name="cancellationToken"></param>
/// <returns></returns>
[HttpPost("by-type/{requestType}")]
public virtual async Task<PagedResultDto<KittingIssueNoteDTO>> GetListByTypeAsync(SfsStoreRequestInputBase requestInput,
string requestType, bool includeDetails = false, CancellationToken cancellationToken = default)
{
Expression<Func<KittingIssueNote, bool>> expression = p => p.RequestType == requestType;
if (requestInput.Condition.Filters?.Count > 0)
{
expression = expression.And(requestInput.Condition.Filters.ToLambda<KittingIssueNote>());
}
return await GetPagedListAsync(expression, requestInput.SkipCount, requestInput.MaxResultCount,
requestInput.Sorting, includeDetails, cancellationToken).ConfigureAwait(false);
}
[HttpGet("list/un-confirmed/{requestType}")]
public virtual async Task<List<KittingIssueNoteDTO>> GetListUnConfirmedByTypeAsync(string requestType)
{
var entities = await _repository.GetListAsync(c => !c.Confirmed && c.RequestType == requestType)
.ConfigureAwait(false);
var dtos = ObjectMapper.Map<List<KittingIssueNote>, List<KittingIssueNoteDTO>>(entities);
return dtos;
}
}

169
be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Requests/IssuelRequests/AssembleIssueRequests/AssembleIssueRequestAppService.cs

@ -1,25 +1,10 @@
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.Linq;
using System.Linq.Expressions;
using System.Threading;
using System.Threading.Tasks;
using DocumentFormat.OpenXml.Office.PowerPoint.Y2021.M06.Main;
using IdentityModel;
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Mvc;
using Microsoft.EntityFrameworkCore;
using Volo.Abp;
using Volo.Abp.Application.Dtos;
using Volo.Abp.Domain.Entities;
using Volo.Abp.Domain.Repositories;
using Volo.Abp.ObjectMapping;
using Win_in.Sfs.Basedata.Application;
using Win_in.Sfs.Basedata.Application.Contracts;
using Win_in.Sfs.Shared.Domain;
using Win_in.Sfs.Shared.Domain.Shared;
using Win_in.Sfs.Shared.Event;
using Win_in.Sfs.Wms.Store.Application.Contracts;
using Win_in.Sfs.Wms.Store.Domain;
using Win_in.Sfs.Wms.Store.Domain.Shared;
@ -27,12 +12,14 @@ using Win_in.Sfs.Wms.Store.Domain.Shared;
namespace Win_in.Sfs.Wms.Store.Application;
/// <summary>
/// 装配叫料
/// 装配叫料
/// </summary>
[Authorize]
[Route($"{StoreConsts.RootPath}assemble-request")]
public class AssembleIssueRequestAppService : SfsStoreRequestAppServiceBase<AssembleIssueRequest, AssembleIssueRequestDTO,
SfsStoreRequestInputBase, AssembleIssueRequestEditInput, AssembleIssueRequestDetail, AssembleIssueRequestDetailDTO,
public class AssembleIssueRequestAppService : SfsStoreRequestAppServiceBase<AssembleIssueRequest,
AssembleIssueRequestDTO,
SfsStoreRequestInputBase, AssembleIssueRequestEditInput, AssembleIssueRequestDetail,
AssembleIssueRequestDetailDTO,
SfsStoreRequestInputBase, AssembleIssueRequestImportInput>,
IAssembleIssueRequestAppService
{
@ -41,7 +28,7 @@ public class AssembleIssueRequestAppService : SfsStoreRequestAppServiceBase<Asse
private readonly IAreaAppService _areaApp;
private readonly ILocationAppService _locationAppService;
private readonly IItemBasicAppService _itemBasicAppService;
private readonly IProductionLineAppService _productionLineAppService;
private readonly IProductionLineAppService _productionLineAppService;
private readonly ITransactionTypeAppService _transactionTypeAppService;
public AssembleIssueRequestAppService(
@ -54,7 +41,7 @@ public class AssembleIssueRequestAppService : SfsStoreRequestAppServiceBase<Asse
IItemBasicAppService itemBasicAppService,
IProductionLineAppService productionLineAppService,
ITransactionTypeAppService transactionTypeAppService
)
)
: base(repository, assembleRequestManager)
{
_assembleRequestManager = assembleRequestManager;
@ -63,13 +50,11 @@ public class AssembleIssueRequestAppService : SfsStoreRequestAppServiceBase<Asse
_locationAppService = locationAppService;
_itemBasicAppService = itemBasicAppService;
_productionLineAppService = productionLineAppService;
_transactionTypeAppService = transactionTypeAppService;
}
#region 东阳V2
public override async Task<AssembleIssueRequestDTO> HandleAsync(Guid id)
{
await Task.CompletedTask.ConfigureAwait(false);
@ -123,13 +108,14 @@ public class AssembleIssueRequestAppService : SfsStoreRequestAppServiceBase<Asse
}
/// <summary>
/// 赋值Request业务属性
/// 赋值Request业务属性
/// </summary>
/// <param name="entity"></param>
/// <returns></returns>
private async Task SetRequestAutoPropertiesAsync(AssembleIssueRequestEditInput entity)
{
var tranType = await _transactionTypeAppService.GetByTransTypeAsync(EnumTransType.Issue, EnumTransSubType.None).ConfigureAwait(false);
var tranType = await _transactionTypeAppService.GetByTransTypeAsync(EnumTransType.Issue, EnumTransSubType.None)
.ConfigureAwait(false);
Check.NotNull(tranType, "事务类型", "事务类型不存在");
entity.AutoSubmit = tranType.AutoSubmitRequest;
entity.AutoAgree = tranType.AutoAgreeRequest;
@ -148,113 +134,9 @@ public class AssembleIssueRequestAppService : SfsStoreRequestAppServiceBase<Asse
return assembleRequestDto;
}
#endregion
#region 导入
/// <summary>
/// 用来重写 导入数据时可以加工数据
/// </summary>
/// <param name="dictionary"></param>
/// <returns></returns>
protected override async Task<Dictionary<AssembleIssueRequest, EntityState>> ImportProcessingEntityAsync(
Dictionary<AssembleIssueRequest, EntityState> dictionary)
{
var addList = dictionary.Where(p => p.Value == EntityState.Added).Select(p => p.Key);
foreach (var assembleRequest in addList)
{
assembleRequest.Worker = CurrentUser.GetUserName();
assembleRequest.CreatorId = CurrentUser.Id;
if (assembleRequest.Type == EnumTransSubType.Issue_Manual.GetDisplayName())
{
assembleRequest.Type = EnumTransSubType.Issue_Manual.ToString();
}
foreach (var detail in assembleRequest.Details)
{
var locationDto = await _locationAppService.GetByCodeAsync(detail.ToLocationCode).ConfigureAwait(false);
CheckLocation(locationDto, detail.ToLocationCode);
var itemBasicDto = await _itemBasicAppService.GetByCodeAsync(detail.ItemCode).ConfigureAwait(false);
CheckItemBasic(itemBasicDto, detail.ItemCode);
detail.ToLocationArea = locationDto.AreaCode;
detail.ToLocationErpCode = locationDto.ErpLocationCode;
detail.ToLocationGroup = locationDto.LocationGroupCode;
detail.ToWarehouseCode = locationDto.WarehouseCode;
detail.ItemDesc1 = itemBasicDto.Desc1;
detail.ItemDesc2 = itemBasicDto.Desc2;
detail.ItemName = itemBasicDto.Name;
detail.Uom = itemBasicDto.BasicUom;
detail.StdPackQty = itemBasicDto.StdPackQty;
}
}
return dictionary;
}
/// <summary>
/// 导入验证
/// </summary>
/// <param name="model"></param>
/// <param name="validationRresult"></param>
/// <returns></returns>
protected override async Task ValidateImportModelAsync(AssembleIssueRequestImportInput model,
List<ValidationResult> validationRresult)
{
_ = new Dictionary<string, string>();
_ = await CheckItemBasicAsync(model, validationRresult).ConfigureAwait(false);
_ = await CheckLocationAsync(model, validationRresult).ConfigureAwait(false);
await CheckAreaAsync(model, validationRresult).ConfigureAwait(false);
await CheckStoreRelationAsync(model, validationRresult).ConfigureAwait(false);
}
#endregion
#region 校验
protected override async Task<bool> ValidateImportEntities(Dictionary<AssembleIssueRequest, EntityState> dict)
{
foreach (var entity in dict.Keys)
{
var tranType = await TransactionTypeAclService
.GetByTransTypeAsync(EnumTransType.Issue, EnumTransSubType.None).ConfigureAwait(false);
Check.NotNull(tranType, "事务类型", "事务类型不存在");
entity.AutoCompleteJob = tranType.AutoCompleteJob;
entity.AutoSubmit = tranType.AutoSubmitRequest;
entity.AutoAgree = tranType.AutoAgreeRequest;
entity.AutoHandle = tranType.AutoHandleRequest;
entity.DirectCreateNote = tranType.DirectCreateNote;
}
return await base.ValidateImportEntities(dict).ConfigureAwait(false);
}
protected async Task CheckAreaAsync(AssembleIssueRequestImportInput importInput,
List<ValidationResult> validationRresult)
{
var area = await _areaApp.GetByCodeAsync(importInput.FromLocationArea).ConfigureAwait(false);
if (area == null)
{
validationRresult.Add(new ValidationResult($"调出库区{importInput.FromLocationArea}不存在", new[] { "调出库区" }));
}
}
protected async Task CheckStoreRelationAsync(AssembleIssueRequestImportInput importInput,
List<ValidationResult> validationRresult)
{
var itemStoreRelation = await _itemStoreRelationApp
.GetFirstAsync(importInput.ItemCode, importInput.ToLocationCode).ConfigureAwait(false);
if (itemStoreRelation == null)
{
validationRresult.Add(new ValidationResult(
$"物品代码{importInput.ItemCode}与目标库位{importInput.ToLocationCode}不存在对应关", new[] { "物品库位对应关系" }));
}
}
private void CheckItemBasic(ItemBasicDTO itemBasicDto, string itemCode)
{
if (itemBasicDto == null)
@ -276,34 +158,5 @@ public class AssembleIssueRequestAppService : SfsStoreRequestAppServiceBase<Asse
}
}
protected async Task<ItemBasicDTO> CheckItemBasicAsync(AssembleIssueRequestImportInput importInput,
List<ValidationResult> validationRresult)
{
var item = await _itemBasicAppService.GetByCodeAsync(importInput.ItemCode).ConfigureAwait(false);
if (item == null)
{
validationRresult.Add(new ValidationResult($"物品代码{importInput.ItemCode}不存在", new[] { "物品代码" }));
}
else if (item.StdPackQty == 0)
{
validationRresult.Add(
new ValidationResult($"物品代码{importInput.ItemCode}的物品信息中标准包装等于0或不存在", new[] { "标准包装" }));
}
return item;
}
protected async Task<LocationDTO> CheckLocationAsync(AssembleIssueRequestImportInput importInput,
List<ValidationResult> validationRresult)
{
var location = await _locationAppService.GetByCodeAsync(importInput.ToLocationCode).ConfigureAwait(false);
if (location == null)
{
validationRresult.Add(new ValidationResult($"目标库位{importInput.ToLocationCode}不存在", new[] { "目标库位" }));
}
return location;
}
#endregion
}

1
be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Requests/IssuelRequests/AssembleIssueRequests/AssembleIssueRequestAutoMapperProfile.cs

@ -25,7 +25,6 @@ public partial class StoreApplicationAutoMapperProfile : Profile
CreateMap<AssembleIssueRequestImportInput, AssembleIssueRequest>()
.IgnoreAuditedObjectProperties()
.ForMember(x => x.Type, y => y.MapFrom(t => t.Type.ToString()))
.Ignore(x => x.UseOnTheWayLocation)
.Ignore(x => x.Details)
.Ignore(x => x.Remark)

137
be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Requests/IssuelRequests/CoatingIssueRequests/CoatingIssueRequestAppService.cs

@ -67,9 +67,6 @@ public class CoatingIssueRequestAppService : SfsStoreRequestAppServiceBase<Coati
_transactionTypeAppService = transactionTypeAppService;
}
#region 东阳V2
public override async Task<CoatingIssueRequestDTO> HandleAsync(Guid id)
{
await Task.CompletedTask.ConfigureAwait(false);
@ -150,113 +147,8 @@ public class CoatingIssueRequestAppService : SfsStoreRequestAppServiceBase<Coati
return coatingMaterialRequestDto;
}
#endregion
#region 导入
/// <summary>
/// 用来重写 导入数据时可以加工数据
/// </summary>
/// <param name="dictionary"></param>
/// <returns></returns>
protected override async Task<Dictionary<CoatingIssueRequest, EntityState>> ImportProcessingEntityAsync(
Dictionary<CoatingIssueRequest, EntityState> dictionary)
{
var addList = dictionary.Where(p => p.Value == EntityState.Added).Select(p => p.Key);
foreach (var coatingMaterialRequest in addList)
{
coatingMaterialRequest.Worker = CurrentUser.GetUserName();
coatingMaterialRequest.CreatorId = CurrentUser.Id;
if (coatingMaterialRequest.Type == EnumTransSubType.Issue_Manual.GetDisplayName())
{
coatingMaterialRequest.Type = EnumTransSubType.Issue_Manual.ToString();
}
foreach (var detail in coatingMaterialRequest.Details)
{
var locationDto = await _locationAppService.GetByCodeAsync(detail.ToLocationCode).ConfigureAwait(false);
CheckLocation(locationDto, detail.ToLocationCode);
var itemBasicDto = await _itemBasicAppService.GetByCodeAsync(detail.ItemCode).ConfigureAwait(false);
CheckItemBasic(itemBasicDto, detail.ItemCode);
detail.ToLocationArea = locationDto.AreaCode;
detail.ToLocationErpCode = locationDto.ErpLocationCode;
detail.ToLocationGroup = locationDto.LocationGroupCode;
detail.ToWarehouseCode = locationDto.WarehouseCode;
detail.ItemDesc1 = itemBasicDto.Desc1;
detail.ItemDesc2 = itemBasicDto.Desc2;
detail.ItemName = itemBasicDto.Name;
detail.Uom = itemBasicDto.BasicUom;
detail.StdPackQty = itemBasicDto.StdPackQty;
}
}
return dictionary;
}
/// <summary>
/// 导入验证
/// </summary>
/// <param name="model"></param>
/// <param name="validationRresult"></param>
/// <returns></returns>
protected override async Task ValidateImportModelAsync(CoatingIssueRequestImportInput model,
List<ValidationResult> validationRresult)
{
_ = new Dictionary<string, string>();
_ = await CheckItemBasicAsync(model, validationRresult).ConfigureAwait(false);
_ = await CheckLocationAsync(model, validationRresult).ConfigureAwait(false);
await CheckAreaAsync(model, validationRresult).ConfigureAwait(false);
await CheckStoreRelationAsync(model, validationRresult).ConfigureAwait(false);
}
#endregion
#region 校验
protected override async Task<bool> ValidateImportEntities(Dictionary<CoatingIssueRequest, EntityState> dict)
{
foreach (var entity in dict.Keys)
{
var tranType = await TransactionTypeAclService
.GetByTransTypeAsync(EnumTransType.Issue, EnumTransSubType.None).ConfigureAwait(false);
Check.NotNull(tranType, "事务类型", "事务类型不存在");
entity.AutoCompleteJob = tranType.AutoCompleteJob;
entity.AutoSubmit = tranType.AutoSubmitRequest;
entity.AutoAgree = tranType.AutoAgreeRequest;
entity.AutoHandle = tranType.AutoHandleRequest;
entity.DirectCreateNote = tranType.DirectCreateNote;
}
return await base.ValidateImportEntities(dict).ConfigureAwait(false);
}
protected async Task CheckAreaAsync(CoatingIssueRequestImportInput importInput,
List<ValidationResult> validationRresult)
{
var area = await _areaApp.GetByCodeAsync(importInput.FromLocationArea).ConfigureAwait(false);
if (area == null)
{
validationRresult.Add(new ValidationResult($"调出库区{importInput.FromLocationArea}不存在", new[] { "调出库区" }));
}
}
protected async Task CheckStoreRelationAsync(CoatingIssueRequestImportInput importInput,
List<ValidationResult> validationRresult)
{
var itemStoreRelation = await _itemStoreRelationApp
.GetFirstAsync(importInput.ItemCode, importInput.ToLocationCode).ConfigureAwait(false);
if (itemStoreRelation == null)
{
validationRresult.Add(new ValidationResult(
$"物品代码{importInput.ItemCode}与目标库位{importInput.ToLocationCode}不存在对应关", new[] { "物品库位对应关系" }));
}
}
private void CheckItemBasic(ItemBasicDTO itemBasicDto, string itemCode)
{
if (itemBasicDto == null)
@ -278,34 +170,5 @@ public class CoatingIssueRequestAppService : SfsStoreRequestAppServiceBase<Coati
}
}
protected async Task<ItemBasicDTO> CheckItemBasicAsync(CoatingIssueRequestImportInput importInput,
List<ValidationResult> validationRresult)
{
var item = await _itemBasicAppService.GetByCodeAsync(importInput.ItemCode).ConfigureAwait(false);
if (item == null)
{
validationRresult.Add(new ValidationResult($"物品代码{importInput.ItemCode}不存在", new[] { "物品代码" }));
}
else if (item.StdPackQty == 0)
{
validationRresult.Add(
new ValidationResult($"物品代码{importInput.ItemCode}的物品信息中标准包装等于0或不存在", new[] { "标准包装" }));
}
return item;
}
protected async Task<LocationDTO> CheckLocationAsync(CoatingIssueRequestImportInput importInput,
List<ValidationResult> validationRresult)
{
var location = await _locationAppService.GetByCodeAsync(importInput.ToLocationCode).ConfigureAwait(false);
if (location == null)
{
validationRresult.Add(new ValidationResult($"目标库位{importInput.ToLocationCode}不存在", new[] { "目标库位" }));
}
return location;
}
#endregion
}

1
be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Requests/IssuelRequests/CoatingIssueRequests/CoatingIssueRequestAutoMapperProfile.cs

@ -26,7 +26,6 @@ public partial class StoreApplicationAutoMapperProfile : Profile
CreateMap<CoatingIssueRequestImportInput, CoatingIssueRequest>()
.IgnoreAuditedObjectProperties()
.ForMember(x => x.Type, y => y.MapFrom(t => t.Type.ToString()))
.Ignore(x => x.UseOnTheWayLocation)
.Ignore(x => x.Details)
.Ignore(x => x.Remark)

249
be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Requests/IssuelRequests/InjectionIssueRequests/InjectionIssueRequestAppService.cs

@ -1,26 +1,13 @@
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.Linq;
using System.Linq.Expressions;
using System.Threading;
using System.Threading.Tasks;
using DocumentFormat.OpenXml.Office.PowerPoint.Y2021.M06.Main;
using IdentityModel;
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Mvc;
using Microsoft.EntityFrameworkCore;
using Volo.Abp;
using Volo.Abp.Application.Dtos;
using Volo.Abp.Domain.Entities;
using Volo.Abp.Domain.Repositories;
using Volo.Abp.ObjectMapping;
using Win_in.Sfs.Basedata.Application;
using Win_in.Sfs.Basedata.Application.Contracts;
using Win_in.Sfs.Shared.Domain;
using Win_in.Sfs.Shared.Domain.Shared;
using Win_in.Sfs.Shared.Domain.Shared.Enums.Store;
using Win_in.Sfs.Shared.Event;
using Win_in.Sfs.Wms.Store.Application.Contracts;
using Win_in.Sfs.Wms.Store.Domain;
using Win_in.Sfs.Wms.Store.Domain.Shared;
@ -28,52 +15,41 @@ using Win_in.Sfs.Wms.Store.Domain.Shared;
namespace Win_in.Sfs.Wms.Store.Application;
/// <summary>
/// 注塑发料申请
/// 注塑发料申请
/// </summary>
[Authorize]
[Route($"{StoreConsts.RootPath}injection-issue-request")]
public class InjectionIssueRequestAppService : SfsStoreRequestAppServiceBase<InjectionIssueRequest, InjectionIssueRequestDTO,
SfsStoreRequestInputBase, InjectionIssueRequestEditInput, InjectionIssueRequestDetail, InjectionIssueRequestDetailDTO,
public class InjectionIssueRequestAppService : SfsStoreRequestAppServiceBase<InjectionIssueRequest,
InjectionIssueRequestDTO,
SfsStoreRequestInputBase, InjectionIssueRequestEditInput, InjectionIssueRequestDetail,
InjectionIssueRequestDetailDTO,
SfsStoreRequestInputBase, InjectionIssueRequestImportInput>,
IInjectionIssueRequestAppService
{
private readonly IInjectionIssueRequestManager _injectionRequestManager;
private readonly IItemStoreRelationAppService _itemStoreRelationApp;
private readonly IAreaAppService _areaApp;
private readonly ILocationAppService _locationAppService;
private readonly IItemBasicAppService _itemBasicAppService;
private readonly IItemContainerAppService _itemContainerAppService;
private readonly IProductionLineAppService _productionLineAppService;
private readonly ITransactionTypeAppService _transactionTypeAppService;
public InjectionIssueRequestAppService(
IInjectionIssueRequestRepository repository,
IInjectionIssueRequestManager injectionRequestManager,
IPreparationPlanManager preparationPlanManager,
IItemStoreRelationAppService itemStoreRelationApp,
IAreaAppService areaApp,
ILocationAppService locationAppService,
IItemBasicAppService itemBasicAppService,
IItemContainerAppService itemContainerAppService,
IProductionLineAppService productionLineAppService,
ITransactionTypeAppService transactionTypeAppService
)
)
: base(repository, injectionRequestManager)
{
_injectionRequestManager = injectionRequestManager;
_itemStoreRelationApp = itemStoreRelationApp;
_areaApp = areaApp;
_locationAppService = locationAppService;
_itemBasicAppService = itemBasicAppService;
_itemContainerAppService= itemContainerAppService;
_productionLineAppService = productionLineAppService;
_itemContainerAppService = itemContainerAppService;
_transactionTypeAppService = transactionTypeAppService;
}
#region 东阳V2
public override async Task<InjectionIssueRequestDTO> HandleAsync(Guid id)
{
await Task.CompletedTask.ConfigureAwait(false);
@ -101,7 +77,7 @@ public class InjectionIssueRequestAppService : SfsStoreRequestAppServiceBase<Inj
detailInput.ToLocationArea = toLocationDto.AreaCode;
detailInput.ToLocationGroup = toLocationDto.LocationGroupCode;
detailInput.ToWarehouseCode= toLocationDto.WarehouseCode;
detailInput.ToWarehouseCode = toLocationDto.WarehouseCode;
detailInput.ProdLine = detailInput.ToLocationCode;
detailInput.ToLocationErpCode = toLocationDto.ErpLocationCode;
@ -109,8 +85,9 @@ public class InjectionIssueRequestAppService : SfsStoreRequestAppServiceBase<Inj
detailInput.ItemDesc2 = itemBasicDto.Desc2;
detailInput.ItemName = itemBasicDto.Name;
var itemContainerDto = await _itemContainerAppService.GetListByItemCodeAsync(detailInput.ItemCode).ConfigureAwait(false);
if(itemContainerDto.Count>0)
var itemContainerDto = await _itemContainerAppService.GetListByItemCodeAsync(detailInput.ItemCode)
.ConfigureAwait(false);
if (itemContainerDto.Count > 0)
{
detailInput.Uom = itemContainerDto[0].BasicUom;
detailInput.Qty = itemContainerDto[0].Qty;
@ -121,7 +98,7 @@ public class InjectionIssueRequestAppService : SfsStoreRequestAppServiceBase<Inj
detailInput.Uom = itemBasicDto.BasicUom;
detailInput.StdPackQty = itemBasicDto.StdPackQty;
detailInput.Qty = itemBasicDto.StdPackQty;
}
}
detailInput.Status = EnumStatus.Open;
@ -140,13 +117,14 @@ public class InjectionIssueRequestAppService : SfsStoreRequestAppServiceBase<Inj
}
/// <summary>
/// 赋值Request业务属性
/// 赋值Request业务属性
/// </summary>
/// <param name="entity"></param>
/// <returns></returns>
private async Task SetRequestAutoPropertiesAsync(InjectionIssueRequestEditInput entity)
{
var tranType = await _transactionTypeAppService.GetByTransTypeAsync(EnumTransType.Issue, EnumTransSubType.None).ConfigureAwait(false);
var tranType = await _transactionTypeAppService.GetByTransTypeAsync(EnumTransType.Issue, EnumTransSubType.None)
.ConfigureAwait(false);
Check.NotNull(tranType, "事务类型", "事务类型不存在");
entity.AutoSubmit = tranType.AutoSubmitRequest;
entity.AutoAgree = tranType.AutoAgreeRequest;
@ -166,125 +144,51 @@ public class InjectionIssueRequestAppService : SfsStoreRequestAppServiceBase<Inj
}
/// <summary>
/// 获取物品类别列表
/// 获取物品类别列表
/// </summary>
/// <param name="type"></param>
/// <returns></returns>
[HttpGet("list/item-category")]
public virtual async Task<List<ItemBasicDTO>> GetItemCategoryListAsync()
{
var entities = await _itemBasicAppService.GetCategoryListAsync().ConfigureAwait(false);
var entities = await _itemBasicAppService.GetCategoryListAsync().ConfigureAwait(false);
return entities;
}
#endregion
#region 导入
/// <summary>
/// 用来重写 导入数据时可以加工数据
/// 获取已完成的叫料单数量
/// </summary>
/// <param name="dictionary"></param>
/// <returns></returns>
protected override async Task<Dictionary<InjectionIssueRequest, EntityState>> ImportProcessingEntityAsync(
Dictionary<InjectionIssueRequest, EntityState> dictionary)
[HttpPost("get-uncompleted-request")]
public async Task<List<UnCompletedRequestDto>> GetUnCompletedRequestAsync(List<UnCompletedRequestDto> p_list)
{
var addList = dictionary.Where(p => p.Value == EntityState.Added).Select(p => p.Key);
foreach (var injectionRequest in addList)
var returnList = new List<UnCompletedRequestDto>();
//枚举类型查不到改成SQL查询
var list = await _repository.GetListAsync(p =>
p.RequestStatus != EnumRequestStatus.Completed && p.IssueRequestType == EnumIssueRequestType.Vision)
.ConfigureAwait(false);
foreach (var itm in list)
{
injectionRequest.Worker = CurrentUser.GetUserName();
injectionRequest.CreatorId = CurrentUser.Id;
if (injectionRequest.Type == EnumTransSubType.Issue_Manual.GetDisplayName())
{
injectionRequest.Type = EnumTransSubType.Issue_Manual.ToString();
}
foreach (var detail in injectionRequest.Details)
{
var locationDto = await _locationAppService.GetByCodeAsync(detail.ToLocationCode).ConfigureAwait(false);
CheckLocation(locationDto, detail.ToLocationCode);
var itemBasicDto = await _itemBasicAppService.GetByCodeAsync(detail.ItemCode).ConfigureAwait(false);
CheckItemBasic(itemBasicDto, detail.ItemCode);
detail.ToLocationArea = locationDto.AreaCode;
detail.ToLocationErpCode = locationDto.ErpLocationCode;
detail.ToLocationGroup = locationDto.LocationGroupCode;
detail.ToWarehouseCode = locationDto.WarehouseCode;
detail.ItemDesc1 = itemBasicDto.Desc1;
detail.ItemDesc2 = itemBasicDto.Desc2;
detail.ItemName = itemBasicDto.Name;
detail.Uom = itemBasicDto.BasicUom;
detail.StdPackQty = itemBasicDto.StdPackQty;
}
var query = from detail in itm.Details
join citm in p_list on new
{
detail.ItemCode, locCode = detail.ToLocationCode, areaCode = detail.PositionCode
} equals
new { citm.ItemCode, locCode = citm.LocCode, areaCode = citm.PositionCode }
select new UnCompletedRequestDto
{
ItemCode = detail.ItemCode, LocCode = detail.ToLocationCode, PositionCode = detail.PositionCode
};
returnList.AddRange(query.ToList());
}
return dictionary;
}
/// <summary>
/// 导入验证
/// </summary>
/// <param name="model"></param>
/// <param name="validationRresult"></param>
/// <returns></returns>
protected override async Task ValidateImportModelAsync(InjectionIssueRequestImportInput model,
List<ValidationResult> validationRresult)
{
_ = new Dictionary<string, string>();
_ = await CheckItemBasicAsync(model, validationRresult).ConfigureAwait(false);
_ = await CheckLocationAsync(model, validationRresult).ConfigureAwait(false);
await CheckAreaAsync(model, validationRresult).ConfigureAwait(false);
await CheckStoreRelationAsync(model, validationRresult).ConfigureAwait(false);
return returnList;
}
#endregion
#region 校验
protected override async Task<bool> ValidateImportEntities(Dictionary<InjectionIssueRequest, EntityState> dict)
{
foreach (var entity in dict.Keys)
{
var tranType = await TransactionTypeAclService
.GetByTransTypeAsync(EnumTransType.Issue, EnumTransSubType.None).ConfigureAwait(false);
Check.NotNull(tranType, "事务类型", "事务类型不存在");
entity.AutoCompleteJob = tranType.AutoCompleteJob;
entity.AutoSubmit = tranType.AutoSubmitRequest;
entity.AutoAgree = tranType.AutoAgreeRequest;
entity.AutoHandle = tranType.AutoHandleRequest;
entity.DirectCreateNote = tranType.DirectCreateNote;
}
return await base.ValidateImportEntities(dict).ConfigureAwait(false);
}
protected async Task CheckAreaAsync(InjectionIssueRequestImportInput importInput,
List<ValidationResult> validationRresult)
{
var area = await _areaApp.GetByCodeAsync(importInput.FromLocationArea).ConfigureAwait(false);
if (area == null)
{
validationRresult.Add(new ValidationResult($"调出库区{importInput.FromLocationArea}不存在", new[] { "调出库区" }));
}
}
protected async Task CheckStoreRelationAsync(InjectionIssueRequestImportInput importInput,
List<ValidationResult> validationRresult)
{
var itemStoreRelation = await _itemStoreRelationApp
.GetFirstAsync(importInput.ItemCode, importInput.ToLocationCode).ConfigureAwait(false);
if (itemStoreRelation == null)
{
validationRresult.Add(new ValidationResult(
$"物品代码{importInput.ItemCode}与目标库位{importInput.ToLocationCode}不存在对应关", new[] { "物品库位对应关系" }));
}
}
private void CheckItemBasic(ItemBasicDTO itemBasicDto, string itemCode)
{
if (itemBasicDto == null)
@ -306,78 +210,5 @@ public class InjectionIssueRequestAppService : SfsStoreRequestAppServiceBase<Inj
}
}
protected async Task<ItemBasicDTO> CheckItemBasicAsync(InjectionIssueRequestImportInput importInput,
List<ValidationResult> validationRresult)
{
var item = await _itemBasicAppService.GetByCodeAsync(importInput.ItemCode).ConfigureAwait(false);
if (item == null)
{
validationRresult.Add(new ValidationResult($"物品代码{importInput.ItemCode}不存在", new[] { "物品代码" }));
}
else if (item.StdPackQty == 0)
{
validationRresult.Add(
new ValidationResult($"物品代码{importInput.ItemCode}的物品信息中标准包装等于0或不存在", new[] { "标准包装" }));
}
return item;
}
protected async Task<LocationDTO> CheckLocationAsync(InjectionIssueRequestImportInput importInput,
List<ValidationResult> validationRresult)
{
var location = await _locationAppService.GetByCodeAsync(importInput.ToLocationCode).ConfigureAwait(false);
if (location == null)
{
validationRresult.Add(new ValidationResult($"目标库位{importInput.ToLocationCode}不存在", new[] { "目标库位" }));
}
return location;
}
/// <summary>
/// 获取已完成的叫料单数量
/// </summary>
/// <returns></returns>
[HttpGet("get-completed-injection-request-count")]
public async Task<long> GetCountAsync()
{
//枚举类型查不到改成SQL查询
var query =await _repository.GetCountAsync(p => p.RequestStatus != EnumRequestStatus.Completed
&&p.Type==nameof(EnumIssueType.Vision)).ConfigureAwait(false);
return query;
}
/// <summary>
/// 获取已完成的叫料单数量
/// </summary>
/// <returns></returns>
[HttpPost("get-uncompleted-request")]
public async Task<List<UnCompletedRequestDto>> GetUnCompletedRequestAsync(List<UnCompletedRequestDto> p_list)
{
List<UnCompletedRequestDto> returnList = new List<UnCompletedRequestDto>();
//枚举类型查不到改成SQL查询
var list =await _repository.WithDetails().Where(p => p.RequestStatus != EnumRequestStatus.Completed && p.Type == nameof(EnumIssueType.Vision)).ToListAsync().ConfigureAwait(false);
foreach (var itm in list)
{
var query = from detail in itm.Details join citm in p_list on new { detail.ItemCode, locCode= detail.ToLocationCode,areaCode=detail.PositionCode } equals
new { citm.ItemCode, locCode= citm.LocCode,areaCode=citm.PositionCode }
select new UnCompletedRequestDto { ItemCode = detail.ItemCode, LocCode = detail.ToLocationCode, PositionCode = detail.PositionCode } ;
returnList.AddRange(query.ToList());
}
return returnList;
}
#endregion
}

1
be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Requests/IssuelRequests/InjectionIssueRequests/InjectionIssueRequestAutoMapperProfile.cs

@ -25,7 +25,6 @@ public partial class StoreApplicationAutoMapperProfile : Profile
CreateMap<InjectionIssueRequestImportInput, InjectionIssueRequest>()
.IgnoreAuditedObjectProperties()
.ForMember(x => x.Type, y => y.MapFrom(t => t.Type.ToString()))
.Ignore(x => x.UseOnTheWayLocation)
.Ignore(x => x.Details)
.Ignore(x => x.Remark)

241
be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Requests/IssuelRequests/KittingIssueRequests/KittingIssueRequestAppService.cs

@ -1,25 +1,12 @@
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.Linq;
using System.Linq.Expressions;
using System.Threading;
using System.Threading.Tasks;
using DocumentFormat.OpenXml.Office.PowerPoint.Y2021.M06.Main;
using IdentityModel;
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Mvc;
using Microsoft.EntityFrameworkCore;
using Volo.Abp;
using Volo.Abp.Application.Dtos;
using Volo.Abp.Domain.Entities;
using Volo.Abp.Domain.Repositories;
using Volo.Abp.ObjectMapping;
using Win_in.Sfs.Basedata.Application;
using Win_in.Sfs.Basedata.Application.Contracts;
using Win_in.Sfs.Shared.Domain;
using Win_in.Sfs.Shared.Domain.Shared;
using Win_in.Sfs.Shared.Event;
using Win_in.Sfs.Wms.Store.Application.Contracts;
using Win_in.Sfs.Wms.Store.Domain;
using Win_in.Sfs.Wms.Store.Domain.Shared;
@ -27,7 +14,7 @@ using Win_in.Sfs.Wms.Store.Domain.Shared;
namespace Win_in.Sfs.Wms.Store.Application;
/// <summary>
/// kitting叫料申请
/// kitting叫料申请
/// </summary>
[Authorize]
[Route($"{StoreConsts.RootPath}kitting-issue-request")]
@ -42,7 +29,8 @@ public class KittingIssueRequestAppService : SfsStoreRequestAppServiceBase<Kitti
private readonly ILocationAppService _locationAppService;
private readonly IItemBasicAppService _itemBasicAppService;
private readonly IProductionLineAppService _productionLineAppService;
private readonly IKittingIssueJobAppService _kittingIssueJobAppService;
private readonly ITransactionTypeAppService _transactionTypeAppService;
public KittingIssueRequestAppService(
@ -54,8 +42,7 @@ public class KittingIssueRequestAppService : SfsStoreRequestAppServiceBase<Kitti
ILocationAppService locationAppService,
IItemBasicAppService itemBasicAppService,
IProductionLineAppService productionLineAppService,
ITransactionTypeAppService transactionTypeAppService
)
ITransactionTypeAppService transactionTypeAppService, IKittingIssueJobAppService kittingIssueJobAppService)
: base(repository, kittingIssueRequestManager)
{
_kittingIssueRequestManager = kittingIssueRequestManager;
@ -64,17 +51,14 @@ public class KittingIssueRequestAppService : SfsStoreRequestAppServiceBase<Kitti
_locationAppService = locationAppService;
_itemBasicAppService = itemBasicAppService;
_productionLineAppService = productionLineAppService;
_transactionTypeAppService = transactionTypeAppService;
_kittingIssueJobAppService = kittingIssueJobAppService;
}
#region 东阳V2
public override async Task<KittingIssueRequestDTO> HandleAsync(Guid id)
{
await Task.CompletedTask.ConfigureAwait(false);
return null;
return await base.HandleAsync(id).ConfigureAwait(false);
}
[HttpPost("")]
@ -88,18 +72,21 @@ public class KittingIssueRequestAppService : SfsStoreRequestAppServiceBase<Kitti
}
}
foreach (var detailInput in input.Details) //赋值生产线
foreach (var detailInput in input.Details)
{
var toLocationDto =
await _locationAppService.GetByCodeAsync(detailInput.ToLocationCode).ConfigureAwait(false);
CheckLocation(toLocationDto, detailInput.ToLocationCode);
var itemBasicDto = await _itemBasicAppService.GetByCodeAsync(detailInput.ItemCode).ConfigureAwait(false);
CheckItemBasic(itemBasicDto, detailInput.ItemCode);
var productionLineDto= await _productionLineAppService.GetByLocationCodeAsync(detailInput.ToLocationCode).ConfigureAwait(false);
CheckProductionLine(productionLineDto,detailInput.ProdLine);
detailInput.ProdLine = productionLineDto.Code;
detailInput.ToLocationArea = toLocationDto.AreaCode;
detailInput.ToLocationGroup = toLocationDto.LocationGroupCode;
detailInput.ToWarehouseCode= toLocationDto.WarehouseCode;
detailInput.ProdLine = detailInput.ToLocationCode;
detailInput.ToWarehouseCode = toLocationDto.WarehouseCode;
detailInput.ToLocationErpCode = toLocationDto.ErpLocationCode;
detailInput.ItemDesc1 = itemBasicDto.Desc1;
@ -111,6 +98,7 @@ public class KittingIssueRequestAppService : SfsStoreRequestAppServiceBase<Kitti
//因为是刚创建的 所以发料数一定是0
detailInput.IssuedQty = 0;
detailInput.RecommendType = EnumRecommendType.KITTING;
}
await SetRequestAutoPropertiesAsync(input).ConfigureAwait(false);
@ -124,13 +112,14 @@ public class KittingIssueRequestAppService : SfsStoreRequestAppServiceBase<Kitti
}
/// <summary>
/// 赋值Request业务属性
/// 赋值Request业务属性
/// </summary>
/// <param name="entity"></param>
/// <returns></returns>
private async Task SetRequestAutoPropertiesAsync(KittingIssueRequestEditInput entity)
{
var tranType = await _transactionTypeAppService.GetByTransTypeAsync(EnumTransType.Issue, EnumTransSubType.None).ConfigureAwait(false);
var tranType = await _transactionTypeAppService.GetByTransTypeAsync(EnumTransType.Issue, EnumTransSubType.None)
.ConfigureAwait(false);
Check.NotNull(tranType, "事务类型", "事务类型不存在");
entity.AutoSubmit = tranType.AutoSubmitRequest;
entity.AutoAgree = tranType.AutoAgreeRequest;
@ -144,115 +133,108 @@ public class KittingIssueRequestAppService : SfsStoreRequestAppServiceBase<Kitti
{
var kittingIssueRequestDto = await CreateAsync(input).ConfigureAwait(false);
await HandleAsync(kittingIssueRequestDto.Id).ConfigureAwait(false);
//await HandleAsync(kittingIssueRequestDto.Id).ConfigureAwait(false);
return kittingIssueRequestDto;
}
#endregion
#region 导入
/// <summary>
/// 用来重写 导入数据时可以加工数据
/// </summary>
/// <param name="dictionary"></param>
/// <returns></returns>
protected override async Task<Dictionary<KittingIssueRequest, EntityState>> ImportProcessingEntityAsync(
Dictionary<KittingIssueRequest, EntityState> dictionary)
[HttpPost("UpdateStatusCompleted")]
public async Task UpdateStatusCompletedAsync(string number)
{
var addList = dictionary.Where(p => p.Value == EntityState.Added).Select(p => p.Key);
var kittingIssueRequest=await _repository.FindAsync(p=>p.Number== number).ConfigureAwait(false);
var kittingIssueJobDtos=await _kittingIssueJobAppService.GetByRequestNumberAsync(kittingIssueRequest.Number).ConfigureAwait(false);
foreach (var kittingIssueRequest in addList)
if (!kittingIssueJobDtos.Any(p =>
p.JobStatus == EnumJobStatus.Open || p.JobStatus == EnumJobStatus.Doing ||
p.JobStatus == EnumJobStatus.Partial) )
{
kittingIssueRequest.Worker = CurrentUser.GetUserName();
kittingIssueRequest.CreatorId = CurrentUser.Id;
if (kittingIssueRequest.Type == EnumTransSubType.Issue_Manual.GetDisplayName())
return;
}
else
{
bool flag = true;
foreach (var detail in kittingIssueRequest.Details)
{
kittingIssueRequest.Type = EnumTransSubType.Issue_Manual.ToString();
if (detail.Qty > detail.IssuedQty)
{
flag = false;
return;
}
}
foreach (var detail in kittingIssueRequest.Details)
if (flag)
{
var locationDto = await _locationAppService.GetByCodeAsync(detail.ToLocationCode).ConfigureAwait(false);
CheckLocation(locationDto, detail.ToLocationCode);
var itemBasicDto = await _itemBasicAppService.GetByCodeAsync(detail.ItemCode).ConfigureAwait(false);
CheckItemBasic(itemBasicDto, detail.ItemCode);
detail.ToLocationArea = locationDto.AreaCode;
detail.ToLocationErpCode = locationDto.ErpLocationCode;
detail.ToLocationGroup = locationDto.LocationGroupCode;
detail.ToWarehouseCode = locationDto.WarehouseCode;
detail.ItemDesc1 = itemBasicDto.Desc1;
detail.ItemDesc2 = itemBasicDto.Desc2;
detail.ItemName = itemBasicDto.Name;
detail.Uom = itemBasicDto.BasicUom;
detail.StdPackQty = itemBasicDto.StdPackQty;
CheckStatus(EnumRequestStatus.Completed, kittingIssueRequest.RequestStatus);
kittingIssueRequest.RequestStatus = EnumRequestStatus.Completed;
await _repository.UpdateAsync(kittingIssueRequest).ConfigureAwait(false);
}
}
return dictionary;
}
/// <summary>
/// 导入验证
/// </summary>
/// <param name="model"></param>
/// <param name="validationRresult"></param>
/// <returns></returns>
protected override async Task ValidateImportModelAsync(KittingIssueRequestImportInput model,
List<ValidationResult> validationRresult)
{
_ = new Dictionary<string, string>();
_ = await CheckItemBasicAsync(model, validationRresult).ConfigureAwait(false);
_ = await CheckLocationAsync(model, validationRresult).ConfigureAwait(false);
await CheckAreaAsync(model, validationRresult).ConfigureAwait(false);
await CheckStoreRelationAsync(model, validationRresult).ConfigureAwait(false);
kittingIssueRequest.RequestStatus = EnumRequestStatus.Completed;
}
#endregion
#region 校验
protected override async Task<bool> ValidateImportEntities(Dictionary<KittingIssueRequest, EntityState> dict)
private void CheckStatus(EnumRequestStatus targetStatus, EnumRequestStatus nowStatus)
{
foreach (var entity in dict.Keys)
var validSourceStatuses = new List<EnumRequestStatus>();
switch (targetStatus)
{
var tranType = await TransactionTypeAclService
.GetByTransTypeAsync(EnumTransType.Issue, EnumTransSubType.None).ConfigureAwait(false);
Check.NotNull(tranType, "事务类型", "事务类型不存在");
entity.AutoCompleteJob = tranType.AutoCompleteJob;
entity.AutoSubmit = tranType.AutoSubmitRequest;
entity.AutoAgree = tranType.AutoAgreeRequest;
entity.AutoHandle = tranType.AutoHandleRequest;
entity.DirectCreateNote = tranType.DirectCreateNote;
case EnumRequestStatus.None:
break;
case EnumRequestStatus.New:
break;
case EnumRequestStatus.Reviewing:
validSourceStatuses = new List<EnumRequestStatus> { EnumRequestStatus.New };
break;
case EnumRequestStatus.Refused:
validSourceStatuses = new List<EnumRequestStatus> { EnumRequestStatus.Reviewing };
break;
case EnumRequestStatus.Agreed:
validSourceStatuses = new List<EnumRequestStatus> { EnumRequestStatus.Reviewing };
break;
case EnumRequestStatus.Handling:
validSourceStatuses = new List<EnumRequestStatus>
{
EnumRequestStatus.Agreed, EnumRequestStatus.Partial,
};
break;
case EnumRequestStatus.Completed:
validSourceStatuses = new List<EnumRequestStatus>
{
EnumRequestStatus.Handling, EnumRequestStatus.Partial,
};
break;
case EnumRequestStatus.Cancelled:
validSourceStatuses = new List<EnumRequestStatus>
{
EnumRequestStatus.New, EnumRequestStatus.Reviewing, EnumRequestStatus.Agreed,
};
break;
case EnumRequestStatus.Abort:
validSourceStatuses = new List<EnumRequestStatus>
{
EnumRequestStatus.Handling, EnumRequestStatus.Partial,
};
break;
case EnumRequestStatus.Partial:
{
validSourceStatuses = new List<EnumRequestStatus>
{
EnumRequestStatus.Handling, EnumRequestStatus.Partial,
};
break;
}
default:
throw new ArgumentOutOfRangeException(nameof(targetStatus), targetStatus, null);
}
return await base.ValidateImportEntities(dict).ConfigureAwait(false);
}
protected async Task CheckAreaAsync(KittingIssueRequestImportInput importInput,
List<ValidationResult> validationRresult)
{
var area = await _areaApp.GetByCodeAsync(importInput.FromLocationArea).ConfigureAwait(false);
if (area == null)
if (!validSourceStatuses.Contains(nowStatus))
{
validationRresult.Add(new ValidationResult($"调出库区{importInput.FromLocationArea}不存在", new[] { "调出库区" }));
}
}
protected async Task CheckStoreRelationAsync(KittingIssueRequestImportInput importInput,
List<ValidationResult> validationRresult)
{
var itemStoreRelation = await _itemStoreRelationApp
.GetFirstAsync(importInput.ItemCode, importInput.ToLocationCode).ConfigureAwait(false);
if (itemStoreRelation == null)
{
validationRresult.Add(new ValidationResult(
$"物品代码{importInput.ItemCode}与目标库位{importInput.ToLocationCode}不存在对应关", new[] { "物品库位对应关系" }));
throw new UserFriendlyException(
$"当前状态为 {nowStatus.GetDisplayName()} ,无法变更为 {targetStatus.GetDisplayName()}");
}
}
@ -271,39 +253,18 @@ public class KittingIssueRequestAppService : SfsStoreRequestAppServiceBase<Kitti
throw new UserFriendlyException($"库位代码为【{locationCode}】不存在");
}
if (locationDto.Type != EnumLocationType.WIP)
if (locationDto.Type != EnumLocationType.KittingWip)
{
throw new UserFriendlyException($"库位代码【{locationCode}】不是【{EnumLocationType.WIP.GetDisplayName()}】类型");
throw new UserFriendlyException($"库位代码【{locationCode}】不是【{EnumLocationType.KittingWip.GetDisplayName()}】类型");
}
}
protected async Task<ItemBasicDTO> CheckItemBasicAsync(KittingIssueRequestImportInput importInput,
List<ValidationResult> validationRresult)
private void CheckProductionLine(ProductionLineDTO productionLineDto, string productionCode)
{
var item = await _itemBasicAppService.GetByCodeAsync(importInput.ItemCode).ConfigureAwait(false);
if (item == null)
{
validationRresult.Add(new ValidationResult($"物品代码{importInput.ItemCode}不存在", new[] { "物品代码" }));
}
else if (item.StdPackQty == 0)
if (productionLineDto == null)
{
validationRresult.Add(
new ValidationResult($"物品代码{importInput.ItemCode}的物品信息中标准包装等于0或不存在", new[] { "标准包装" }));
throw new UserFriendlyException($"未找到生产线【{productionCode}】");
}
return item;
}
protected async Task<LocationDTO> CheckLocationAsync(KittingIssueRequestImportInput importInput,
List<ValidationResult> validationRresult)
{
var location = await _locationAppService.GetByCodeAsync(importInput.ToLocationCode).ConfigureAwait(false);
if (location == null)
{
validationRresult.Add(new ValidationResult($"目标库位{importInput.ToLocationCode}不存在", new[] { "目标库位" }));
}
return location;
}
#endregion

1
be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Requests/IssuelRequests/KittingIssueRequests/KittingIssueRequestAutoMapperProfile.cs

@ -25,7 +25,6 @@ public partial class StoreApplicationAutoMapperProfile : Profile
CreateMap<KittingIssueRequestImportInput, KittingIssueRequest>()
.IgnoreAuditedObjectProperties()
.ForMember(x => x.Type, y => y.MapFrom(t => t.Type.ToString()))
.Ignore(x => x.UseOnTheWayLocation)
.Ignore(x => x.Details)
.Ignore(x => x.Remark)

8
be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain/Jobs/IssueJobs/AssembleIssueJobs/AssembleIssueJob.cs

@ -3,6 +3,7 @@ using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.Threading.Tasks;
using Win_in.Sfs.Shared.Domain.Entities;
using Win_in.Sfs.Shared.Domain.Shared.Enums.Store;
namespace Win_in.Sfs.Wms.Store.Domain;
@ -12,11 +13,12 @@ namespace Win_in.Sfs.Wms.Store.Domain;
[Display(Name = "装配发料任务")]
public class AssembleIssueJob : SfsJobAggregateRootBase<AssembleIssueJobDetail>
{
/// <summary>
/// 叫料请求类型
/// 叫料类型
/// </summary>
[IgnoreUpdate]
public string RequestType { get; set; }
[Display(Name = "叫料类型")]
public EnumIssueRequestType IssueRequestType { get; set; }
/// <summary>
/// 生产线

7
be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain/Jobs/IssueJobs/CoatingIssueJobs/CoatingIssueJob.cs

@ -3,6 +3,7 @@ using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.Threading.Tasks;
using Win_in.Sfs.Shared.Domain.Entities;
using Win_in.Sfs.Shared.Domain.Shared.Enums.Store;
using Win_in.Sfs.Wms.Store.Domain;
namespace Win_in.Sfs.Wms.Store.Jobs.IssueJobs;
@ -14,10 +15,10 @@ namespace Win_in.Sfs.Wms.Store.Jobs.IssueJobs;
public class CoatingIssueJob : SfsJobAggregateRootBase<CoatingIssueJobDetail>
{
/// <summary>
/// 叫料请求类型
/// 叫料类型
/// </summary>
[IgnoreUpdate]
public string RequestType { get; set; }
[Display(Name = "叫料类型")]
public EnumIssueRequestType IssueRequestType { get; set; }
/// <summary>
/// 生产线

23
be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain/Jobs/IssueJobs/InjectionIssueJobs/InjectionIssueJob.cs

@ -1,47 +1,44 @@
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.Threading.Tasks;
using Win_in.Sfs.Shared.Domain.Entities;
using Win_in.Sfs.Shared.Domain.Shared.Enums.Store;
namespace Win_in.Sfs.Wms.Store.Domain;
/// <summary>
/// 注塑发料任务
/// 注塑发料任务
/// </summary>
[Display(Name = "注塑发料任务")]
public class InjectionIssueJob : SfsJobAggregateRootBase<InjectionIssueJobDetail>
{
/// <summary>
/// 叫料请求类型
/// 叫料类型
/// </summary>
[IgnoreUpdate]
public string RequestType { get; set; }
[Display(Name = "叫料类型")]
public EnumIssueRequestType IssueRequestType { get; set; }
/// <summary>
/// 生产线
/// 生产线
/// </summary>
[IgnoreUpdate]
public string ProdLine { get; set; }
/// <summary>
/// 注塑要料单号
/// 注塑要料单号
/// </summary>
[IgnoreUpdate]
public string InjectionIssueRequestNumber { get; set; }
/// <summary>
/// 使用在途库
/// 使用在途库
/// </summary>
[Display(Name = "使用在途库")]
[IgnoreUpdate]
public bool UseOnTheWayLocation { get; set; }
/// <summary>
/// 任务明细
/// 任务明细
/// </summary>
[IgnoreUpdate]
public override List<InjectionIssueJobDetail> Details { get; set; } = new List<InjectionIssueJobDetail>();
public override List<InjectionIssueJobDetail> Details { get; set; } = new();
}

201
be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain/Jobs/IssueJobs/InjectionIssueJobs/InjectionIssueJobDetail.cs

@ -1,8 +1,9 @@
using System;
using System.ComponentModel.DataAnnotations.Schema;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
using Win_in.Sfs.Shared.Domain;
using Win_in.Sfs.Shared.Domain.Shared;
using Win_in.Sfs.Shared.Domain.Shared.Enums.Store;
namespace Win_in.Sfs.Wms.Store.Domain;
@ -11,40 +12,46 @@ public class InjectionIssueJobDetail : SfsDetailEntityBase
#region 库存基础信息
/// <summary>
/// 物品代码
/// 物品代码
/// </summary>
[Display(Name = "物品代码")]
public string ItemCode { get; set; }
/// <summary>
/// 物品名称
/// 物品名称
/// </summary>
[Display(Name = "物品名称")]
public string ItemName { get; set; }
/// <summary>
/// 物品描述1
/// 物品描述1
/// </summary>
[Display(Name = "物品描述1")]
public string ItemDesc1 { get; set; }
/// <summary>
/// 物品描述2
/// 物品描述2
/// </summary>
[Display(Name = "物品描述2")]
public string ItemDesc2 { get; set; }
/// <summary>
/// 标包数量
/// 标包数量
/// </summary>
[Display(Name = "标包数量")]
[Column(TypeName = "decimal(18,6)")]
public decimal StdPackQty { get; set; }
/// <summary>
/// 库存状态
/// 库存状态
/// </summary>
[Display(Name = "库存状态")]
public EnumInventoryStatus Status { get; set; }
/// <summary>
/// 计量单位
/// 计量单位
/// </summary>
[Display(Name = "计量单位")]
public string Uom { get; set; }
#endregion
@ -52,52 +59,52 @@ public class InjectionIssueJobDetail : SfsDetailEntityBase
#region 请求信息
/// <summary>
/// 请求库位
/// 请求库位
/// </summary>
public string RequestLocationCode { get; set; }
/// <summary>
/// 到库区
/// 到库区
/// </summary>
public string RequestLocationArea { get; set; }
/// <summary>
/// 到库位组
/// 到库位组
/// </summary>
public string RequestLocationGroup { get; set; }
/// <summary>
/// 到ERP库位
/// 到ERP库位
/// </summary>
public string RequestLocationErpCode { get; set; }
/// <summary>
/// 到仓库
/// 到仓库
/// </summary>
public string RequestWarehouseCode { get; set; }
/// <summary>
/// 在途库库位
/// 在途库库位
/// </summary>
public string OnTheWayLocationCode { get; set; }
/// <summary>
/// 生产线
/// 生产线
/// </summary>
public string ProdLine { get; set; }
/// <summary>
/// 位置码
/// 位置码
/// </summary>
public string PositionCode { get; set; }
/// <summary>
/// 推荐的类型
/// 推荐的类型
/// </summary>
public EnumRecommendType RecommendType { get; set; }
/// <summary>
/// 需求数量
/// 需求数量
/// </summary>
public decimal RequestQty { get; set; }
@ -106,67 +113,67 @@ public class InjectionIssueJobDetail : SfsDetailEntityBase
#region 推荐来源
/// <summary>
/// 推荐来源托标签
/// 推荐来源托标签
/// </summary>
public string RecommendFromContainerCode { get; set; }
/// <summary>
/// 推荐来源箱标签
/// 推荐来源箱标签
/// </summary>
public string RecommendFromPackingCode { get; set; }
/// <summary>
/// 推荐来源批次供应商批次
/// 推荐来源批次供应商批次
/// </summary>
public string RecommendFromSupplierBatch { get; set; }
/// <summary>
/// 推荐来源批次到货时间
/// 推荐来源批次到货时间
/// </summary>
public DateTime RecommendFromArriveDate { get; set; }
/// <summary>
/// 推荐来源批次生产时间
/// 推荐来源批次生产时间
/// </summary>
public DateTime RecommendFromProduceDate { get; set; }
/// <summary>
/// 推荐来源批次过期时间
/// 推荐来源批次过期时间
/// </summary>
public DateTime RecommendFromExpireDate { get; set; }
/// <summary>
/// 推荐来源批次排序
/// 推荐来源批次排序
/// </summary>
public string RecommendFromLot { get; set; }
/// <summary>
/// 推荐来源库位
/// 推荐来源库位
/// </summary>
public string RecommendFromLocationCode { get; set; }
/// <summary>
/// 推荐来源库区
/// 推荐来源库区
/// </summary>
public string RecommendFromLocationArea { get; set; }
/// <summary>
/// 推荐来源库位组
/// 推荐来源库位组
/// </summary>
public string RecommendFromLocationGroup { get; set; }
/// <summary>
/// 推荐来源ERP库位
/// 推荐来源ERP库位
/// </summary>
public string RecommendFromLocationErpCode { get; set; }
/// <summary>
/// 推荐来源仓库
/// 推荐来源仓库
/// </summary>
public string RecommendFromWarehouseCode { get; set; }
/// <summary>
/// 推荐来源数量
/// 推荐来源数量
/// </summary>
public decimal RecommendFromQty { get; set; }
@ -175,67 +182,67 @@ public class InjectionIssueJobDetail : SfsDetailEntityBase
#region 推荐目标
/// <summary>
/// 推荐目标托标签
/// 推荐目标托标签
/// </summary>
public string RecommendToContainerCode { get; set; }
/// <summary>
/// 推荐目标箱标签
/// 推荐目标箱标签
/// </summary>
public string RecommendToPackingCode { get; set; }
/// <summary>
/// 推荐目标批次供应商批次
/// 推荐目标批次供应商批次
/// </summary>
public string RecommendToSupplierBatch { get; set; }
/// <summary>
/// 推荐目标批次到货时间
/// 推荐目标批次到货时间
/// </summary>
public DateTime RecommendToArriveDate { get; set; }
/// <summary>
/// 推荐目标批次生产时间
/// 推荐目标批次生产时间
/// </summary>
public DateTime RecommendToProduceDate { get; set; }
/// <summary>
/// 推荐目标批次过期时间
/// 推荐目标批次过期时间
/// </summary>
public DateTime RecommendToExpireDate { get; set; }
/// <summary>
/// 推荐目标批次排序
/// 推荐目标批次排序
/// </summary>
public string RecommendToLot { get; set; }
/// <summary>
/// 推荐目标库位
/// 推荐目标库位
/// </summary>
public string RecommendToLocationCode { get; set; }
/// <summary>
/// 推荐目标库区
/// 推荐目标库区
/// </summary>
public string RecommendToLocationArea { get; set; }
/// <summary>
/// 推荐目标库位组
/// 推荐目标库位组
/// </summary>
public string RecommendToLocationGroup { get; set; }
/// <summary>
/// 推荐目标ERP库位
/// 推荐目标ERP库位
/// </summary>
public string RecommendToLocationErpCode { get; set; }
/// <summary>
/// 推荐目标仓库
/// 推荐目标仓库
/// </summary>
public string RecommendToWarehouseCode { get; set; }
/// <summary>
/// 推荐目标数量
/// 推荐目标数量
/// </summary>
public decimal RecommendToQty { get; set; }
@ -244,67 +251,67 @@ public class InjectionIssueJobDetail : SfsDetailEntityBase
#region 库移来源
/// <summary>
/// 库移来源托标签
/// 库移来源托标签
/// </summary>
public string TransferLibFromContainerCode { get; set; }
/// <summary>
/// 库移来源箱标签
/// 库移来源箱标签
/// </summary>
public string TransferLibFromPackingCode { get; set; }
/// <summary>
/// 库移来源批次供应商批次
/// 库移来源批次供应商批次
/// </summary>
public string TransferLibFromSupplierBatch { get; set; }
/// <summary>
/// 库移来源批次到货时间
/// 库移来源批次到货时间
/// </summary>
public DateTime TransferLibFromArriveDate { get; set; }
/// <summary>
/// 库移来源批次生产时间
/// 库移来源批次生产时间
/// </summary>
public DateTime TransferLibFromProduceDate { get; set; }
/// <summary>
/// 库移来源批次过期时间
/// 库移来源批次过期时间
/// </summary>
public DateTime TransferLibFromExpireDate { get; set; }
/// <summary>
/// 库移来源批次排序
/// 库移来源批次排序
/// </summary>
public string TransferLibFromLot { get; set; }
/// <summary>
/// 库移来源库位
/// 库移来源库位
/// </summary>
public string TransferLibFromLocationCode { get; set; }
/// <summary>
/// 库移来源库区
/// 库移来源库区
/// </summary>
public string TransferLibFromLocationArea { get; set; }
/// <summary>
/// 库移来源库位组
/// 库移来源库位组
/// </summary>
public string TransferLibFromLocationGroup { get; set; }
/// <summary>
/// 库移来源ERP库位
/// 库移来源ERP库位
/// </summary>
public string TransferLibFromLocationErpCode { get; set; }
/// <summary>
/// 库移来源仓库
/// 库移来源仓库
/// </summary>
public string TransferLibFromWarehouseCode { get; set; }
/// <summary>
/// 库移来源数量
/// 库移来源数量
/// </summary>
public decimal TransferLibFromQty { get; set; }
@ -313,67 +320,67 @@ public class InjectionIssueJobDetail : SfsDetailEntityBase
#region 库移目标
/// <summary>
/// 库移目标托标签
/// 库移目标托标签
/// </summary>
public string TransferLibToContainerCode { get; set; }
/// <summary>
/// 库移目标箱标签
/// 库移目标箱标签
/// </summary>
public string TransferLibToPackingCode { get; set; }
/// <summary>
/// 库移目标批次供应商批次
/// 库移目标批次供应商批次
/// </summary>
public string TransferLibToSupplierBatch { get; set; }
/// <summary>
/// 库移目标批次到货时间
/// 库移目标批次到货时间
/// </summary>
public DateTime TransferLibToArriveDate { get; set; }
/// <summary>
/// 库移目标批次生产时间
/// 库移目标批次生产时间
/// </summary>
public DateTime TransferLibToProduceDate { get; set; }
/// <summary>
/// 库移目标批次过期时间
/// 库移目标批次过期时间
/// </summary>
public DateTime TransferLibToExpireDate { get; set; }
/// <summary>
/// 库移目标批次排序
/// 库移目标批次排序
/// </summary>
public string TransferLibToLot { get; set; }
/// <summary>
/// 库移目标库位
/// 库移目标库位
/// </summary>
public string TransferLibToLocationCode { get; set; }
/// <summary>
/// 库移目标库区
/// 库移目标库区
/// </summary>
public string TransferLibToLocationArea { get; set; }
/// <summary>
/// 库移目标库位组
/// 库移目标库位组
/// </summary>
public string TransferLibToLocationGroup { get; set; }
/// <summary>
/// 库移目标ERP库位
/// 库移目标ERP库位
/// </summary>
public string TransferLibToLocationErpCode { get; set; }
/// <summary>
/// 库移目标仓库
/// 库移目标仓库
/// </summary>
public string TransferLibToWarehouseCode { get; set; }
/// <summary>
/// 库移目标数量
/// 库移目标数量
/// </summary>
public decimal TransferLibToQty { get; set; }
@ -382,67 +389,67 @@ public class InjectionIssueJobDetail : SfsDetailEntityBase
#region 实际来源
/// <summary>
/// 实际目标托标签
/// 实际目标托标签
/// </summary>
public string HandledFromContainerCode { get; set; }
/// <summary>
/// 实际箱标签
/// 实际箱标签
/// </summary>
public string HandledFromPackingCode { get; set; }
/// <summary>
/// 实际批次供应商批次
/// 实际批次供应商批次
/// </summary>
public string HandledFromSupplierBatch { get; set; }
/// <summary>
/// 实际批次到货时间
/// 实际批次到货时间
/// </summary>
public DateTime HandledFromArriveDate { get; set; }
/// <summary>
/// 实际批次生产时间
/// 实际批次生产时间
/// </summary>
public DateTime HandledFromProduceDate { get; set; }
/// <summary>
/// 实际批次过期时间
/// 实际批次过期时间
/// </summary>
public DateTime HandledFromExpireDate { get; set; }
/// <summary>
/// 实际批次排序
/// 实际批次排序
/// </summary>
public string HandledFromLot { get; set; }
/// <summary>
/// 实际库位
/// 实际库位
/// </summary>
public string HandledFromLocationCode { get; set; }
/// <summary>
/// 实际库区
/// 实际库区
/// </summary>
public string HandledFromLocationArea { get; set; }
/// <summary>
/// 实际库位组
/// 实际库位组
/// </summary>
public string HandledFromLocationGroup { get; set; }
/// <summary>
/// 实际ERP库位
/// 实际ERP库位
/// </summary>
public string HandledFromLocationErpCode { get; set; }
/// <summary>
/// 实际仓库
/// 实际仓库
/// </summary>
public string HandledFromWarehouseCode { get; set; }
/// <summary>
/// 实际数量
/// 实际数量
/// </summary>
public decimal HandledFromQty { get; set; }
@ -451,67 +458,67 @@ public class InjectionIssueJobDetail : SfsDetailEntityBase
#region 实际目标
/// <summary>
/// 实际目标托标签
/// 实际目标托标签
/// </summary>
public string HandledToContainerCode { get; set; }
/// <summary>
/// 实际箱标签
/// 实际箱标签
/// </summary>
public string HandledToPackingCode { get; set; }
/// <summary>
/// 实际批次供应商批次
/// 实际批次供应商批次
/// </summary>
public string HandledToSupplierBatch { get; set; }
/// <summary>
/// 实际批次到货时间
/// 实际批次到货时间
/// </summary>
public DateTime HandledToArriveDate { get; set; }
/// <summary>
/// 实际批次生产时间
/// 实际批次生产时间
/// </summary>
public DateTime HandledToProduceDate { get; set; }
/// <summary>
/// 实际批次过期时间
/// 实际批次过期时间
/// </summary>
public DateTime HandledToExpireDate { get; set; }
/// <summary>
/// 实际批次排序
/// 实际批次排序
/// </summary>
public string HandledToLot { get; set; }
/// <summary>
/// 实际库位
/// 实际库位
/// </summary>
public string HandledToLocationCode { get; set; }
/// <summary>
/// 实际库区
/// 实际库区
/// </summary>
public string HandledToLocationArea { get; set; }
/// <summary>
/// 实际库位组
/// 实际库位组
/// </summary>
public string HandledToLocationGroup { get; set; }
/// <summary>
/// 实际ERP库位
/// 实际ERP库位
/// </summary>
public string HandledToLocationErpCode { get; set; }
/// <summary>
/// 实际仓库
/// 实际仓库
/// </summary>
public string HandledToWarehouseCode { get; set; }
/// <summary>
/// 实际数量
/// 实际数量
/// </summary>
public decimal HandledToQty { get; set; }
@ -519,6 +526,6 @@ public class InjectionIssueJobDetail : SfsDetailEntityBase
public void SetId(Guid id)
{
this.Id = id;
Id = id;
}
}

13
be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain/Jobs/IssueJobs/KittingIssueJobs/KittingIssueJob.cs

@ -3,6 +3,7 @@ using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.Threading.Tasks;
using Win_in.Sfs.Shared.Domain.Entities;
using Win_in.Sfs.Shared.Domain.Shared.Enums.Store;
namespace Win_in.Sfs.Wms.Store.Domain;
@ -13,35 +14,31 @@ namespace Win_in.Sfs.Wms.Store.Domain;
public class KittingIssueJob : SfsJobAggregateRootBase<KittingIssueJobDetail>
{
/// <summary>
/// 叫料请求类型
/// 叫料类型
/// </summary>
[IgnoreUpdate]
public string RequestType { get; set; }
[Display(Name = "叫料类型")]
public EnumIssueRequestType IssueRequestType { get; set; }
/// <summary>
/// 生产线
/// </summary>
[IgnoreUpdate]
public string ProdLine { get; set; }
/// <summary>
/// 要料单号
/// </summary>
[IgnoreUpdate]
public string KittingRequestNumber { get; set; }
/// <summary>
/// 使用在途库
/// </summary>
[Display(Name = "使用在途库")]
[IgnoreUpdate]
public bool UseOnTheWayLocation { get; set; }
/// <summary>
/// 任务明细
/// </summary>
[IgnoreUpdate]
public override List<KittingIssueJobDetail> Details { get; set; } = new List<KittingIssueJobDetail>();
public EnumIssueSendType EnumIssueSendType { get; set; }
}

7
be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain/Notes/IssueNotes/AssembleIssueNotes/AssembleIssueNote.cs

@ -3,6 +3,7 @@ using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using Volo.Abp;
using Win_in.Sfs.Shared.Domain.Entities;
using Win_in.Sfs.Shared.Domain.Shared.Enums.Store;
namespace Win_in.Sfs.Wms.Store.Domain;
@ -27,10 +28,10 @@ public class AssembleIssueNote : SfsStoreAggregateRootBase<AssembleIssueNoteDeta
public string RequestNumber { get; set; }
/// <summary>
/// 叫料请求类型
/// 叫料类型
/// </summary>
[IgnoreUpdate]
public string RequestType { get; set; }
[Display(Name = "叫料类型")]
public EnumIssueRequestType IssueRequestType { get; set; }
/// <summary>
/// 使用在途库

7
be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain/Notes/IssueNotes/CoatingIssueNotes/CoatingIssueNote.cs

@ -3,6 +3,7 @@ using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using Volo.Abp;
using Win_in.Sfs.Shared.Domain.Entities;
using Win_in.Sfs.Shared.Domain.Shared.Enums.Store;
using Win_in.Sfs.Wms.Store.Domain;
namespace Win_in.Sfs.Wms.Store.Notes.IssueNotes;
@ -28,10 +29,10 @@ public class CoatingIssueNote : SfsStoreAggregateRootBase<CoatingIssueNoteDetail
public string RequestNumber { get; set; }
/// <summary>
/// 叫料请求类型
/// 叫料类型
/// </summary>
[IgnoreUpdate]
public string RequestType { get; set; }
[Display(Name = "叫料类型")]
public EnumIssueRequestType IssueRequestType { get; set; }
/// <summary>
/// 使用在途库

7
be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain/Notes/IssueNotes/InjectionIssueNotes/InjectionIssueNote.cs

@ -3,6 +3,7 @@ using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using Volo.Abp;
using Win_in.Sfs.Shared.Domain.Entities;
using Win_in.Sfs.Shared.Domain.Shared.Enums.Store;
namespace Win_in.Sfs.Wms.Store.Domain;
@ -27,10 +28,10 @@ public class InjectionIssueNote : SfsStoreAggregateRootBase<InjectionIssueNoteDe
public string RequestNumber { get; set; }
/// <summary>
/// 叫料请求类型
/// 叫料类型
/// </summary>
[IgnoreUpdate]
public string RequestType { get; set; }
[Display(Name = "叫料类型")]
public EnumIssueRequestType IssueRequestType { get; set; }
/// <summary>
/// 使用在途库

1
be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain/Notes/IssueNotes/InjectionIssueNotes/InjectionIssueNoteDetail.cs

@ -3,6 +3,7 @@ using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
using Win_in.Sfs.Shared.Domain;
using Win_in.Sfs.Shared.Domain.Shared;
using Win_in.Sfs.Shared.Domain.Shared.Enums.Store;
namespace Win_in.Sfs.Wms.Store.Domain;

14
be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain/Notes/IssueNotes/KittingIssueNotes/KittingIssueNote.cs

@ -3,6 +3,7 @@ using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using Volo.Abp;
using Win_in.Sfs.Shared.Domain.Entities;
using Win_in.Sfs.Shared.Domain.Shared.Enums.Store;
namespace Win_in.Sfs.Wms.Store.Domain;
@ -20,29 +21,24 @@ public class KittingIssueNote : SfsStoreAggregateRootBase<KittingIssueNoteDetail
/// <summary>
/// 明细列表
/// </summary>
[IgnoreUpdate]
public override List<KittingIssueNoteDetail> Details { get; set; } = new List<KittingIssueNoteDetail>();
[IgnoreUpdate]
public string RequestNumber { get; set; }
/// <summary>
/// 叫料请求类型
/// 叫料类型
/// </summary>
[IgnoreUpdate]
public string RequestType { get; set; }
[Display(Name = "叫料类型")]
public EnumIssueRequestType IssueRequestType { get; set; }
/// <summary>
/// 使用在途库
/// </summary>
[IgnoreUpdate]
public bool UseOnTheWayLocation { get; set; }
/// <summary>
/// 确认时间
/// </summary>
[Display(Name = "确认时间")]
[IgnoreUpdate]
public DateTime? ConfirmTime { get; set; }
/// <summary>
@ -51,6 +47,8 @@ public class KittingIssueNote : SfsStoreAggregateRootBase<KittingIssueNoteDetail
[Display(Name = "已确认")]
public bool Confirmed { get; set; }
public EnumIssueSendType EnumIssueSendType { get; set; }
public void Confirm(DateTime confirmTime)
{

6
be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain/Requests/IssueRequests/AssembleIssueRequests/AssembleIssueRequest.cs

@ -1,6 +1,7 @@
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using Win_in.Sfs.Shared.Domain.Entities;
using Win_in.Sfs.Shared.Domain.Shared.Enums.Store;
namespace Win_in.Sfs.Wms.Store.Domain;
@ -10,11 +11,10 @@ namespace Win_in.Sfs.Wms.Store.Domain;
public class AssembleIssueRequest : SfsStoreRequestAggregateRootBase<AssembleIssueRequestDetail>
{
/// <summary>
/// 叫料类型
/// 叫料类型
/// </summary>
[Display(Name = "叫料类型")]
[IgnoreUpdate]
public string Type { get; set; }
public EnumIssueRequestType IssueRequestType { get; set; }
/// <summary>
/// 使用在途库

6
be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain/Requests/IssueRequests/CoatingIssuelRequests/CoatingIssueRequest.cs

@ -1,6 +1,7 @@
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using Win_in.Sfs.Shared.Domain.Entities;
using Win_in.Sfs.Shared.Domain.Shared.Enums.Store;
using Win_in.Sfs.Wms.Store.Domain;
namespace Win_in.Sfs.Wms.Store.Requests.MaterialRequests;
@ -11,11 +12,10 @@ namespace Win_in.Sfs.Wms.Store.Requests.MaterialRequests;
public class CoatingIssueRequest : SfsStoreRequestAggregateRootBase<CoatingIssueRequestDetail>
{
/// <summary>
/// 叫料类型
/// 叫料类型
/// </summary>
[Display(Name = "叫料类型")]
[IgnoreUpdate]
public string Type { get; set; }
public EnumIssueRequestType IssueRequestType { get; set; }
/// <summary>
/// 使用在途库

14
be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain/Requests/IssueRequests/InjectionIssueRequests/InjectionIssueRequest.cs

@ -1,29 +1,29 @@
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using Win_in.Sfs.Shared.Domain.Entities;
using Win_in.Sfs.Shared.Domain.Shared.Enums.Store;
namespace Win_in.Sfs.Wms.Store.Domain;
/// <summary>
/// 注塑申请
/// 注塑申请
/// </summary>
public class InjectionIssueRequest : SfsStoreRequestAggregateRootBase<InjectionIssueRequestDetail>
{
/// <summary>
/// 叫料类型
/// 叫料类型
/// </summary>
[Display(Name = "叫料类型")]
[IgnoreUpdate]
public string Type { get; set; }
public EnumIssueRequestType IssueRequestType { get; set; }
/// <summary>
/// 使用在途库
/// 使用在途库
/// </summary>
public bool UseOnTheWayLocation { get; set; }
/// <summary>
/// 明细列表
/// 明细列表
/// </summary>
[IgnoreUpdate]
public override List<InjectionIssueRequestDetail> Details { get; set; } = new List<InjectionIssueRequestDetail>();
public override List<InjectionIssueRequestDetail> Details { get; set; } = new();
}

34
be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain/Requests/IssueRequests/InjectionIssueRequests/InjectionIssueRequestDetail.cs

@ -1,4 +1,3 @@
using System;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
using Win_in.Sfs.Shared.Domain;
@ -7,96 +6,95 @@ using Win_in.Sfs.Shared.Domain.Shared;
namespace Win_in.Sfs.Wms.Store.Domain;
/// <summary>
/// 注塑叫料申请明细
/// 注塑叫料申请明细
/// </summary>
public class InjectionIssueRequestDetail : SfsStoreDetailWithQtyEntityBase, IHasToLocation
{
#region 目标库位信息
/// <summary>
/// 目标库位
/// 目标库位
/// </summary>
[Display(Name = "目标库位")]
[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储位
/// 目标ERP储位
/// </summary>
[Display(Name = "目标ERP储位")]
public string ToLocationErpCode { get; set; }
/// <summary>
/// 目标仓库
/// 目标仓库
/// </summary>
[Display(Name = "目标仓库")]
public string ToWarehouseCode { get; set; }
#endregion
/// <summary>
/// 生产线
/// 生产线
/// </summary>
public string ProdLine { get; set; }
/// <summary>
/// 已发数量
/// 已发数量
/// </summary>
public decimal IssuedQty { get; set; }
/// <summary>
/// 已收数量
/// 已收数量
/// </summary>
public decimal ReceivedQty { get; set; }
/// <summary>
/// 明细状态
/// 明细状态
/// </summary>
public EnumStatus Status { get; set; }
/// <summary>
/// 请求未发 还未发送的数量
/// 请求未发 还未发送的数量
/// </summary>
[NotMapped]
public decimal ToBeIssuedQty => Qty - IssuedQty;
/// <summary>
/// 已发未收
/// 已发未收
/// </summary>
[NotMapped]
public decimal ToBeReceivedQty => IssuedQty - ReceivedQty;
/// <summary>
/// 请求未收
/// 请求未收
/// </summary>
[NotMapped]
public decimal NotFinishQty => Qty - ReceivedQty;
/// <summary>
/// 位置码
/// 位置码
/// </summary>
public string PositionCode { get; set; }
/// <summary>
/// 推荐类型
/// 推荐类型
/// </summary>
public EnumRecommendType RecommendType { get; set; }
/// <summary>
/// 需求箱数量
/// 需求箱数量
/// </summary>
[Display(Name = "需求箱数量")]
public decimal BoxQty { get; set; }

15
be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain/Requests/IssueRequests/KittingIssueRequests/KittingIssueRequest.cs

@ -1,6 +1,7 @@
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using Win_in.Sfs.Shared.Domain.Entities;
using Win_in.Sfs.Shared.Domain.Shared.Enums.Store;
namespace Win_in.Sfs.Wms.Store.Domain;
@ -10,20 +11,18 @@ namespace Win_in.Sfs.Wms.Store.Domain;
public class KittingIssueRequest : SfsStoreRequestAggregateRootBase<KittingIssueRequestDetail>
{
/// <summary>
/// 叫料类型
/// 叫料类型
/// </summary>
[Display(Name = "叫料类型")]
[IgnoreUpdate]
public string Type { get; set; }
public EnumIssueRequestType IssueRequestType { get; set; }
/// <summary>
/// 使用在途库
/// </summary>
public bool UseOnTheWayLocation { get; set; }
/// <summary>
/// 明细列表
/// </summary>
[IgnoreUpdate]
public override List<KittingIssueRequestDetail> Details { get; set; } = new List<KittingIssueRequestDetail>();
///// <summary>
///// 明细列表
///// </summary>
//public List<KittingIssueRequestDetail> Details { get; set; } = new List<KittingIssueRequestDetail>();
}

23
be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain/Requests/IssueRequests/KittingIssueRequests/KittingIssueRequestManager.cs

@ -19,11 +19,6 @@ public class KittingIssueRequestManager
_repository = repository;
}
#region 东阳V2
#endregion
/// <summary>
/// 创建 同时 直接赋值Number 为了返回Number
/// </summary>
@ -53,22 +48,8 @@ public class KittingIssueRequestManager
}
}
#region 导入
/// <summary>
/// 执行导入
/// </summary>
public virtual async Task ImportDataAsync(List<KittingIssueRequest> mergeEntities,
List<KittingIssueRequest> deleteEntities = null)
public Task ImportDataAsync(List<KittingIssueRequest> entities, List<KittingIssueRequest> deleteEntities = null)
{
if (deleteEntities != null && deleteEntities.Count > 0)
{
await _repository.BulkDeleteAsync(deleteEntities).ConfigureAwait(false);
}
await CreateManyAsync(mergeEntities).ConfigureAwait(false);
throw new System.NotImplementedException();
}
#endregion
}

1
be/Modules/Store/src/Win_in.Sfs.Wms.Store.EntityFrameworkCore/Jobs/IssueJobs/AssembleIssueJobs/AssembleIssueJobDbContextModelCreatingExtensions.cs

@ -21,7 +21,6 @@ public static class AssembleIssueJobDbContextModelCreatingExtensions
//Configure Job base properties
b.ConfigureJob<AssembleIssueJob, AssembleIssueJobDetail>();
//Properties
b.Property(q => q.RequestType).HasMaxLength(SfsPropertyConst.CodeLength);
b.Property(q => q.AssembleRequestNumber).HasMaxLength(SfsPropertyConst.CodeLength);
b.Property(q => q.ProdLine).HasMaxLength(SfsPropertyConst.CodeLength);
b.Property(q => q.JobType).HasConversion<string>();

1
be/Modules/Store/src/Win_in.Sfs.Wms.Store.EntityFrameworkCore/Jobs/IssueJobs/CoatingIssueJob/CoatingIssueJobDbContextModelCreatingExtensions.cs

@ -22,7 +22,6 @@ public static class CoatingIssueJobDbContextModelCreatingExtensions
//Configure Job base properties
b.ConfigureJob<CoatingIssueJob, CoatingIssueJobDetail>();
//Properties
b.Property(q => q.RequestType).HasMaxLength(SfsPropertyConst.CodeLength);
b.Property(q => q.MaterialRequestNumber).HasMaxLength(SfsPropertyConst.CodeLength);
b.Property(q => q.ProdLine).HasMaxLength(SfsPropertyConst.CodeLength);
b.Property(q => q.JobType).HasConversion<string>();

1
be/Modules/Store/src/Win_in.Sfs.Wms.Store.EntityFrameworkCore/Jobs/IssueJobs/InjectionIssueJobs/InjectionIssueJobDbContextModelCreatingExtensions.cs

@ -21,7 +21,6 @@ public static class InjectionIssueJobDbContextModelCreatingExtensions
//Configure Job base properties
b.ConfigureJob<InjectionIssueJob, InjectionIssueJobDetail>();
//Properties
b.Property(q => q.RequestType).HasMaxLength(SfsPropertyConst.CodeLength);
b.Property(q => q.InjectionIssueRequestNumber).HasMaxLength(SfsPropertyConst.CodeLength);
b.Property(q => q.ProdLine).HasMaxLength(SfsPropertyConst.CodeLength);
b.Property(q => q.JobType).HasConversion<string>();

1
be/Modules/Store/src/Win_in.Sfs.Wms.Store.EntityFrameworkCore/Jobs/IssueJobs/KittingIssueJobs/KittingIssueJobDbContextModelCreatingExtensions.cs

@ -21,7 +21,6 @@ public static class KittingIssueJobDbContextModelCreatingExtensions
//Configure Job base properties
b.ConfigureJob<KittingIssueJob, KittingIssueJobDetail>();
//Properties
b.Property(q => q.RequestType).HasMaxLength(SfsPropertyConst.CodeLength);
b.Property(q => q.KittingRequestNumber).HasMaxLength(SfsPropertyConst.CodeLength);
b.Property(q => q.ProdLine).HasMaxLength(SfsPropertyConst.CodeLength);
b.Property(q => q.JobType).HasConversion<string>();

32114
be/Modules/Store/src/Win_in.Sfs.Wms.Store.EntityFrameworkCore/Migrations/20240426024936_Update_Issue.Designer.cs

File diff suppressed because it is too large

181
be/Modules/Store/src/Win_in.Sfs.Wms.Store.EntityFrameworkCore/Migrations/20240426024936_Update_Issue.cs

@ -0,0 +1,181 @@
using Microsoft.EntityFrameworkCore.Migrations;
#nullable disable
namespace Win_in.Sfs.Wms.Store.Migrations
{
public partial class Update_Issue : Migration
{
protected override void Up(MigrationBuilder migrationBuilder)
{
migrationBuilder.DropIndex(
name: "IX_Store_KittingPackagingNoteDetail_KittingCode",
table: "Store_KittingPackagingNoteDetail");
migrationBuilder.DropIndex(
name: "IX_Store_KittingPackagingNoteChassisDetail_KittingCode",
table: "Store_KittingPackagingNoteChassisDetail");
migrationBuilder.DropColumn(
name: "Type",
table: "Store_KittingIssueRequest");
migrationBuilder.DropColumn(
name: "Type",
table: "Store_InjectionIssueRequest");
migrationBuilder.DropColumn(
name: "RequestType",
table: "Store_InjectionIssueNote");
migrationBuilder.DropColumn(
name: "RequestType",
table: "Store_CountPlan");
migrationBuilder.DropColumn(
name: "Type",
table: "Store_CoatingIssueRequest");
migrationBuilder.DropColumn(
name: "Type",
table: "Store_AssembleIssueRequest");
migrationBuilder.DropColumn(
name: "RequestType",
table: "Job_InjectionIssueJob");
migrationBuilder.AddColumn<int>(
name: "IssueRequestType",
table: "Store_KittingIssueRequest",
type: "int",
nullable: false,
defaultValue: 0);
migrationBuilder.AddColumn<int>(
name: "IssueRequestType",
table: "Store_InjectionIssueRequest",
type: "int",
nullable: false,
defaultValue: 0);
migrationBuilder.AddColumn<int>(
name: "IssueRequestType",
table: "Store_InjectionIssueNote",
type: "int",
nullable: false,
defaultValue: 0);
migrationBuilder.AddColumn<int>(
name: "IssueRequestType",
table: "Store_CoatingIssueRequest",
type: "int",
nullable: false,
defaultValue: 0);
migrationBuilder.AddColumn<int>(
name: "IssueRequestType",
table: "Store_AssembleIssueRequest",
type: "int",
nullable: false,
defaultValue: 0);
migrationBuilder.AddColumn<int>(
name: "IssueRequestType",
table: "Job_InjectionIssueJob",
type: "int",
nullable: false,
defaultValue: 0);
}
protected override void Down(MigrationBuilder migrationBuilder)
{
migrationBuilder.DropColumn(
name: "IssueRequestType",
table: "Store_KittingIssueRequest");
migrationBuilder.DropColumn(
name: "IssueRequestType",
table: "Store_InjectionIssueRequest");
migrationBuilder.DropColumn(
name: "IssueRequestType",
table: "Store_InjectionIssueNote");
migrationBuilder.DropColumn(
name: "IssueRequestType",
table: "Store_CoatingIssueRequest");
migrationBuilder.DropColumn(
name: "IssueRequestType",
table: "Store_AssembleIssueRequest");
migrationBuilder.DropColumn(
name: "IssueRequestType",
table: "Job_InjectionIssueJob");
migrationBuilder.AddColumn<string>(
name: "Type",
table: "Store_KittingIssueRequest",
type: "nvarchar(64)",
maxLength: 64,
nullable: true);
migrationBuilder.AddColumn<string>(
name: "Type",
table: "Store_InjectionIssueRequest",
type: "nvarchar(64)",
maxLength: 64,
nullable: true);
migrationBuilder.AddColumn<string>(
name: "RequestType",
table: "Store_InjectionIssueNote",
type: "nvarchar(64)",
maxLength: 64,
nullable: true);
migrationBuilder.AddColumn<string>(
name: "RequestType",
table: "Store_CountPlan",
type: "nvarchar(64)",
maxLength: 64,
nullable: false,
defaultValue: "");
migrationBuilder.AddColumn<string>(
name: "Type",
table: "Store_CoatingIssueRequest",
type: "nvarchar(64)",
maxLength: 64,
nullable: true);
migrationBuilder.AddColumn<string>(
name: "Type",
table: "Store_AssembleIssueRequest",
type: "nvarchar(64)",
maxLength: 64,
nullable: true);
migrationBuilder.AddColumn<string>(
name: "RequestType",
table: "Job_InjectionIssueJob",
type: "nvarchar(64)",
maxLength: 64,
nullable: true);
migrationBuilder.CreateIndex(
name: "IX_Store_KittingPackagingNoteDetail_KittingCode",
table: "Store_KittingPackagingNoteDetail",
column: "KittingCode",
unique: true,
filter: "[KittingCode] IS NOT NULL");
migrationBuilder.CreateIndex(
name: "IX_Store_KittingPackagingNoteChassisDetail_KittingCode",
table: "Store_KittingPackagingNoteChassisDetail",
column: "KittingCode",
unique: true,
filter: "[KittingCode] IS NOT NULL");
}
}
}

55
be/Modules/Store/src/Win_in.Sfs.Wms.Store.EntityFrameworkCore/Migrations/StoreDbContextModelSnapshot.cs

@ -965,6 +965,9 @@ namespace Win_in.Sfs.Wms.Store.Migrations
.HasColumnType("nvarchar(max)")
.HasColumnName("ExtraProperties");
b.Property<int>("IssueRequestType")
.HasColumnType("int");
b.Property<DateTime?>("LastModificationTime")
.HasColumnType("datetime2")
.HasColumnName("LastModificationTime");
@ -993,10 +996,6 @@ namespace Win_in.Sfs.Wms.Store.Migrations
.HasColumnType("uniqueidentifier")
.HasColumnName("TenantId");
b.Property<string>("Type")
.HasMaxLength(64)
.HasColumnType("nvarchar(64)");
b.Property<bool>("UseOnTheWayLocation")
.HasColumnType("bit");
@ -5158,11 +5157,6 @@ namespace Win_in.Sfs.Wms.Store.Migrations
.HasMaxLength(64)
.HasColumnType("nvarchar(64)");
b.Property<string>("RequestType")
.IsRequired()
.HasMaxLength(64)
.HasColumnType("nvarchar(64)");
b.Property<string>("Stage")
.IsRequired()
.HasMaxLength(64)
@ -7684,6 +7678,9 @@ namespace Win_in.Sfs.Wms.Store.Migrations
.HasColumnType("bit")
.HasDefaultValue(false);
b.Property<int>("IssueRequestType")
.HasColumnType("int");
b.Property<string>("JobDescription")
.HasMaxLength(1024)
.HasColumnType("nvarchar(1024)");
@ -7730,10 +7727,6 @@ namespace Win_in.Sfs.Wms.Store.Migrations
.HasColumnType("nvarchar(3072)")
.HasColumnName("Remark");
b.Property<string>("RequestType")
.HasMaxLength(64)
.HasColumnType("nvarchar(64)");
b.Property<Guid?>("TenantId")
.HasColumnType("uniqueidentifier")
.HasColumnName("TenantId");
@ -8131,6 +8124,9 @@ namespace Win_in.Sfs.Wms.Store.Migrations
.HasColumnType("nvarchar(max)")
.HasColumnName("ExtraProperties");
b.Property<int>("IssueRequestType")
.HasColumnType("int");
b.Property<string>("JobNumber")
.HasMaxLength(64)
.HasColumnType("nvarchar(64)")
@ -8159,10 +8155,6 @@ namespace Win_in.Sfs.Wms.Store.Migrations
.HasMaxLength(64)
.HasColumnType("nvarchar(64)");
b.Property<string>("RequestType")
.HasMaxLength(64)
.HasColumnType("nvarchar(64)");
b.Property<Guid?>("TenantId")
.HasColumnType("uniqueidentifier")
.HasColumnName("TenantId");
@ -8573,6 +8565,9 @@ namespace Win_in.Sfs.Wms.Store.Migrations
.HasColumnType("nvarchar(max)")
.HasColumnName("ExtraProperties");
b.Property<int>("IssueRequestType")
.HasColumnType("int");
b.Property<DateTime?>("LastModificationTime")
.HasColumnType("datetime2")
.HasColumnName("LastModificationTime");
@ -8601,10 +8596,6 @@ namespace Win_in.Sfs.Wms.Store.Migrations
.HasColumnType("uniqueidentifier")
.HasColumnName("TenantId");
b.Property<string>("Type")
.HasMaxLength(64)
.HasColumnType("nvarchar(64)");
b.Property<bool>("UseOnTheWayLocation")
.HasColumnType("bit");
@ -14258,6 +14249,9 @@ namespace Win_in.Sfs.Wms.Store.Migrations
.HasColumnType("nvarchar(max)")
.HasColumnName("ExtraProperties");
b.Property<int>("IssueRequestType")
.HasColumnType("int");
b.Property<DateTime?>("LastModificationTime")
.HasColumnType("datetime2")
.HasColumnName("LastModificationTime");
@ -14286,10 +14280,6 @@ namespace Win_in.Sfs.Wms.Store.Migrations
.HasColumnType("uniqueidentifier")
.HasColumnName("TenantId");
b.Property<string>("Type")
.HasMaxLength(64)
.HasColumnType("nvarchar(64)");
b.Property<bool>("UseOnTheWayLocation")
.HasColumnType("bit");
@ -14572,10 +14562,6 @@ namespace Win_in.Sfs.Wms.Store.Migrations
b.HasKey("Id");
b.HasIndex("KittingCode")
.IsUnique()
.HasFilter("[KittingCode] IS NOT NULL");
b.HasIndex("MasterID");
b.ToTable("Store_KittingPackagingNoteChassisDetail", (string)null);
@ -14647,10 +14633,6 @@ namespace Win_in.Sfs.Wms.Store.Migrations
b.HasKey("Id");
b.HasIndex("KittingCode")
.IsUnique()
.HasFilter("[KittingCode] IS NOT NULL");
b.HasIndex("MasterID");
b.ToTable("Store_KittingPackagingNoteDetail", (string)null);
@ -30506,6 +30488,9 @@ namespace Win_in.Sfs.Wms.Store.Migrations
.HasColumnType("nvarchar(max)")
.HasColumnName("ExtraProperties");
b.Property<int>("IssueRequestType")
.HasColumnType("int");
b.Property<DateTime?>("LastModificationTime")
.HasColumnType("datetime2")
.HasColumnName("LastModificationTime");
@ -30534,10 +30519,6 @@ namespace Win_in.Sfs.Wms.Store.Migrations
.HasColumnType("uniqueidentifier")
.HasColumnName("TenantId");
b.Property<string>("Type")
.HasMaxLength(64)
.HasColumnType("nvarchar(64)");
b.Property<bool>("UseOnTheWayLocation")
.HasColumnType("bit");

1
be/Modules/Store/src/Win_in.Sfs.Wms.Store.EntityFrameworkCore/Notes/IssueNotes/AssembleIssueNotes/AssembleIssueNoteDbContextModelCreatingExtensions.cs

@ -20,7 +20,6 @@ public static class AssembleIssueNoteDbContextModelCreatingExtensions
//Properties
b.Property(q => q.RequestNumber).HasMaxLength(SfsPropertyConst.CodeLength);
b.Property(q => q.RequestType).HasMaxLength(SfsPropertyConst.CodeLength);
b.Property(q => q.Remark).HasMaxLength(SfsPropertyConst.RemarkLength);
//Relations

1
be/Modules/Store/src/Win_in.Sfs.Wms.Store.EntityFrameworkCore/Notes/IssueNotes/CoatingIssueNotes/CoatingIssueNoteDbContextModelCreatingExtensions.cs

@ -21,7 +21,6 @@ public static class CoatingIssueNoteDbContextModelCreatingExtensions
//Properties
b.Property(q => q.RequestNumber).HasMaxLength(SfsPropertyConst.CodeLength);
b.Property(q => q.RequestType).HasMaxLength(SfsPropertyConst.CodeLength);
b.Property(q => q.Remark).HasMaxLength(SfsPropertyConst.RemarkLength);
//Relations

1
be/Modules/Store/src/Win_in.Sfs.Wms.Store.EntityFrameworkCore/Notes/IssueNotes/InjectionIssueNotes/InjectionIssueNoteDbContextModelCreatingExtensions.cs

@ -20,7 +20,6 @@ public static class InjectionIssueNoteDbContextModelCreatingExtensions
//Properties
b.Property(q => q.RequestNumber).HasMaxLength(SfsPropertyConst.CodeLength);
b.Property(q => q.RequestType).HasMaxLength(SfsPropertyConst.CodeLength);
b.Property(q => q.Remark).HasMaxLength(SfsPropertyConst.RemarkLength);
//Relations

1
be/Modules/Store/src/Win_in.Sfs.Wms.Store.EntityFrameworkCore/Notes/IssueNotes/KittingIssueNotes/KittingIssueNoteDbContextModelCreatingExtensions.cs

@ -20,7 +20,6 @@ public static class KittingIssueNoteDbContextModelCreatingExtensions
//Properties
b.Property(q => q.RequestNumber).HasMaxLength(SfsPropertyConst.CodeLength);
b.Property(q => q.RequestType).HasMaxLength(SfsPropertyConst.CodeLength);
b.Property(q => q.Remark).HasMaxLength(SfsPropertyConst.RemarkLength);
//Relations

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

Loading…
Cancel
Save