diff --git a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Jobs/IssueJobs/CoatingIssueJobs/CoatingIssueJobPermissions.cs b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Jobs/IssueJobs/CoatingIssueJobs/CoatingIssueJobPermissions.cs index ec6f854f9..2f60d007b 100644 --- a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Jobs/IssueJobs/CoatingIssueJobs/CoatingIssueJobPermissions.cs +++ b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Jobs/IssueJobs/CoatingIssueJobs/CoatingIssueJobPermissions.cs @@ -1,7 +1,5 @@ using Volo.Abp.Authorization.Permissions; -using Win_in.Sfs.Wms.Store.Application.Contracts; using Win_in.Sfs.Wms.Store.Domain; -using Win_in.Sfs.Wms.Store.Jobs.IssueJobs; namespace Win_in.Sfs.Wms.Store.Application.Contracts; @@ -15,9 +13,10 @@ public static class CoatingIssueJobPermissions public static void AddCoatingIssueJobPermission(this PermissionGroupDefinition permissionGroup) { - var IssueJobPermission = permissionGroup.AddPermission(Default, StorePermissionDefinitionProvider.L(nameof(IssueJob))); - IssueJobPermission.AddChild(Create, StorePermissionDefinitionProvider.L(StorePermissions.CreateStr)); - IssueJobPermission.AddChild(Update, StorePermissionDefinitionProvider.L(StorePermissions.UpdateStr)); - IssueJobPermission.AddChild(Delete, StorePermissionDefinitionProvider.L(StorePermissions.DeleteStr)); + var coatingIssueJobPermission = permissionGroup.AddPermission(Default, StorePermissionDefinitionProvider.L(nameof(CoatingIssueJob))); + coatingIssueJobPermission.AddChild(Create, StorePermissionDefinitionProvider.L(StorePermissions.CreateStr)); + coatingIssueJobPermission.AddChild(Update, StorePermissionDefinitionProvider.L(StorePermissions.UpdateStr)); + coatingIssueJobPermission.AddChild(Delete, StorePermissionDefinitionProvider.L(StorePermissions.DeleteStr)); + } } diff --git a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Jobs/IssueJobs/CoatingIssueJobs/DTOs/CoatingIssueJobDTO.cs b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Jobs/IssueJobs/CoatingIssueJobs/DTOs/CoatingIssueJobDTO.cs index 09951837e..6521709ea 100644 --- a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Jobs/IssueJobs/CoatingIssueJobs/DTOs/CoatingIssueJobDTO.cs +++ b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Jobs/IssueJobs/CoatingIssueJobs/DTOs/CoatingIssueJobDTO.cs @@ -1,15 +1,14 @@ -using System.Collections.Generic; using System.ComponentModel.DataAnnotations; +using Microsoft.EntityFrameworkCore; 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; +namespace Win_in.Sfs.Wms.Store.Application.Contracts; /// -/// 发料任务 +/// 涂装叫料任务 /// -[Display(Name = "发料任务")] +[Display(Name = "涂装叫料任务")] public class CoatingIssueJobDTO : SfsJobDTOBase { /// @@ -17,37 +16,25 @@ public class CoatingIssueJobDTO : SfsJobDTOBase /// [Display(Name = "叫料类型")] public EnumIssueRequestType IssueRequestType { get; set; } - /// - /// 生产线 + /// 生产线 /// [Display(Name = "生产线")] [StringLength(SfsEfCorePropertyConst.CodeLength, ErrorMessage = "{0}最多输入{1}个字符")] public string ProdLine { get; set; } /// - /// 要货单号 + /// 要货单号 /// [Display(Name = "要货单号")] [StringLength(SfsEfCorePropertyConst.CodeLength, ErrorMessage = "{0}最多输入{1}个字符")] - public string MaterialRequestNumber { get; set; } + public string CoatingRequestNumber { get; set; } /// - /// 使用在途库 + /// 使用在途库 /// [Display(Name = "使用在途库")] public bool UseOnTheWayLocation { get; set; } + public EnumIssueSendType EnumIssueSendType { get; set; } } - - - - - - - - - - - - diff --git a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Jobs/IssueJobs/CoatingIssueJobs/ICoatingIssueJobAppService.cs b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Jobs/IssueJobs/CoatingIssueJobs/ICoatingIssueJobAppService.cs index 698d8a199..3f3f7d933 100644 --- a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Jobs/IssueJobs/CoatingIssueJobs/ICoatingIssueJobAppService.cs +++ b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Jobs/IssueJobs/CoatingIssueJobs/ICoatingIssueJobAppService.cs @@ -1,15 +1,30 @@ +using System; using System.Collections.Generic; using System.Threading; using System.Threading.Tasks; using Volo.Abp.Application.Dtos; -using Win_in.Sfs.Wms.Store.Application.Contracts; -namespace Win_in.Sfs.Wms.Store.Jobs.IssueJobs; +namespace Win_in.Sfs.Wms.Store.Application.Contracts; public interface ICoatingIssueJobAppService : ISfsJobAppServiceBase { - Task CancelByMaterialRequestAsync(string coatingIssueNumber); + Task CancelByMaterialRequestAsync(string requestNumber); Task> GetByRequestNumberAsync(string requestNumber); + + /// + /// 执行任务明细 + /// + /// + Task ExecuteDetailAsync(Guid masterId, Guid detailId, CoatingIssueJobDetailDTO issueJobDetailDto); + + Task CompleteAsync(Guid id); + + /// + /// 请求点了完成,任务全部都完成 + /// + /// + /// + Task CompleteByRequestNumberAsync(string requestNumber); } diff --git a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Jobs/IssueJobs/CoatingIssueJobs/Inputs/CoatingIssueJobCheckInput.cs b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Jobs/IssueJobs/CoatingIssueJobs/Inputs/CoatingIssueJobCheckInput.cs index 2c5c3dd6d..1cb969449 100644 --- a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Jobs/IssueJobs/CoatingIssueJobs/Inputs/CoatingIssueJobCheckInput.cs +++ b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Jobs/IssueJobs/CoatingIssueJobs/Inputs/CoatingIssueJobCheckInput.cs @@ -1,6 +1,4 @@ -using Win_in.Sfs.Wms.Store.Application.Contracts; - -namespace Win_in.Sfs.Wms.Store.Jobs.IssueJobs; +namespace Win_in.Sfs.Wms.Store.Application.Contracts; public class CoatingIssueJobCheckInput : SfsJobCheckInputBase { diff --git a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Jobs/IssueJobs/CoatingIssueJobs/Inputs/CoatingIssueJobEditInput.cs b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Jobs/IssueJobs/CoatingIssueJobs/Inputs/CoatingIssueJobEditInput.cs index 64622363b..fb3b69639 100644 --- a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Jobs/IssueJobs/CoatingIssueJobs/Inputs/CoatingIssueJobEditInput.cs +++ b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Jobs/IssueJobs/CoatingIssueJobs/Inputs/CoatingIssueJobEditInput.cs @@ -4,9 +4,8 @@ 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; +namespace Win_in.Sfs.Wms.Store.Application.Contracts; public class CoatingIssueJobEditInput : SfsJobCreateUpdateInputBase, ISfsJobCreateInput { @@ -24,7 +23,7 @@ public class CoatingIssueJobEditInput : SfsJobCreateUpdateInputBase, ISfsJobCrea [Display(Name = "要货单号")] [Required(ErrorMessage = "{0}是必填项")] [StringLength(SfsEfCorePropertyConst.CodeLength, ErrorMessage = "{0}最多输入{1}个字符")] - public string MaterialRequestNumber { get; set; } + public string KittingRequestNumber { get; set; } /// /// 叫料类型 @@ -59,12 +58,13 @@ public class CoatingIssueJobEditInput : SfsJobCreateUpdateInputBase, ISfsJobCrea [Display(Name = "任务明细")] [Required(ErrorMessage = "{0}是必填项")] public List Details { get; set; } = new(); - /// /// 使用在途库 /// [Display(Name = "使用在途库")] public bool UseOnTheWayLocation { get; set; } + + public EnumIssueSendType EnumIssueSendType { get; set; } #endregion } diff --git a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Jobs/IssueJobs/KittingIssueJobs/KittingIssueJobPermissions.cs b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Jobs/IssueJobs/KittingIssueJobs/KittingIssueJobPermissions.cs index 01f485728..29957979f 100644 --- a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Jobs/IssueJobs/KittingIssueJobs/KittingIssueJobPermissions.cs +++ b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Jobs/IssueJobs/KittingIssueJobs/KittingIssueJobPermissions.cs @@ -14,11 +14,10 @@ public static class KittingIssueJobPermissions public static void AddKittingIssueJobPermission(this PermissionGroupDefinition permissionGroup) { - var KittingIssueJobPermission = permissionGroup.AddPermission(Default, StorePermissionDefinitionProvider.L(nameof(KittingIssueJob))); - KittingIssueJobPermission.AddChild(Create, StorePermissionDefinitionProvider.L(StorePermissions.CreateStr)); - KittingIssueJobPermission.AddChild(Update, StorePermissionDefinitionProvider.L(StorePermissions.UpdateStr)); - KittingIssueJobPermission.AddChild(Delete, StorePermissionDefinitionProvider.L(StorePermissions.DeleteStr)); - + var kittingIssueJobPermission = permissionGroup.AddPermission(Default, StorePermissionDefinitionProvider.L(nameof(KittingIssueJob))); + kittingIssueJobPermission.AddChild(Create, StorePermissionDefinitionProvider.L(StorePermissions.CreateStr)); + kittingIssueJobPermission.AddChild(Update, StorePermissionDefinitionProvider.L(StorePermissions.UpdateStr)); + kittingIssueJobPermission.AddChild(Delete, StorePermissionDefinitionProvider.L(StorePermissions.DeleteStr)); } } diff --git a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Notes/IssueNotes/CoatingIssueNotes/CoatingIssueNotePermissions.cs b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Notes/IssueNotes/CoatingIssueNotes/CoatingIssueNotePermissions.cs index 9f497fc34..6db9df722 100644 --- a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Notes/IssueNotes/CoatingIssueNotes/CoatingIssueNotePermissions.cs +++ b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Notes/IssueNotes/CoatingIssueNotes/CoatingIssueNotePermissions.cs @@ -1,31 +1,20 @@ using Volo.Abp.Authorization.Permissions; -using Win_in.Sfs.Wms.Store.Application.Contracts; using Win_in.Sfs.Wms.Store.Domain; -namespace Win_in.Sfs.Wms.Store.Notes.IssueNotes; +namespace Win_in.Sfs.Wms.Store.Application.Contracts; public static class CoatingIssueNotePermissions { - - public const string Default = StorePermissions.GroupName + "." + nameof(IssueNote); + public const string Default = StorePermissions.GroupName + "." + nameof(CoatingIssueNote); public const string Create = Default + "." + StorePermissions.CreateStr; public const string Update = Default + "." + StorePermissions.UpdateStr; public const string Delete = Default + "." + StorePermissions.DeleteStr; - //自动发料记录 - public const string AutoIssueNote = StorePermissions.GroupName + "." + nameof(AutoIssueNote); - - //直接发料 - public const string DirectIssueNote = StorePermissions.GroupName + "." + nameof(DirectIssueNote); - public static void AddCoatingIssueNotePermission(this PermissionGroupDefinition permissionGroup) { - var issueNotePermission = permissionGroup.AddPermission(Default, StorePermissionDefinitionProvider.L(nameof(IssueNote))); - issueNotePermission.AddChild(Create, StorePermissionDefinitionProvider.L(StorePermissions.CreateStr)); - issueNotePermission.AddChild(Update, StorePermissionDefinitionProvider.L(StorePermissions.UpdateStr)); - issueNotePermission.AddChild(Delete, StorePermissionDefinitionProvider.L(StorePermissions.DeleteStr)); - - permissionGroup.AddPermission(AutoIssueNote, StorePermissionDefinitionProvider.L(nameof(AutoIssueNote))); - permissionGroup.AddPermission(DirectIssueNote, StorePermissionDefinitionProvider.L(nameof(DirectIssueNote))); + var coatingIssueNotePermission = permissionGroup.AddPermission(Default, StorePermissionDefinitionProvider.L(nameof(CoatingIssueNote))); + coatingIssueNotePermission.AddChild(Create, StorePermissionDefinitionProvider.L(StorePermissions.CreateStr)); + coatingIssueNotePermission.AddChild(Update, StorePermissionDefinitionProvider.L(StorePermissions.UpdateStr)); + coatingIssueNotePermission.AddChild(Delete, StorePermissionDefinitionProvider.L(StorePermissions.DeleteStr)); } } diff --git a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Notes/IssueNotes/CoatingIssueNotes/DTOs/CoatingIssueNoteDTO.cs b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Notes/IssueNotes/CoatingIssueNotes/DTOs/CoatingIssueNoteDTO.cs index df2738704..0dac7ee44 100644 --- a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Notes/IssueNotes/CoatingIssueNotes/DTOs/CoatingIssueNoteDTO.cs +++ b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Notes/IssueNotes/CoatingIssueNotes/DTOs/CoatingIssueNoteDTO.cs @@ -2,12 +2,12 @@ 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; +namespace Win_in.Sfs.Wms.Store.Application.Contracts; public class CoatingIssueNoteDTO : SfsStoreDTOBase, IHasJobNumber, IHasRequestNumber { + /// /// 任务ID /// @@ -19,6 +19,7 @@ public class CoatingIssueNoteDTO : SfsStoreDTOBase, I /// [Display(Name = "请求代码")] public string RequestNumber { get; set; } + /// /// 叫料类型 /// @@ -42,4 +43,6 @@ public class CoatingIssueNoteDTO : SfsStoreDTOBase, I /// [Display(Name = "确认时间")] public DateTime? ConfirmTime { get; set; } + + public EnumIssueSendType EnumIssueSendType { get; set; } } diff --git a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Notes/IssueNotes/CoatingIssueNotes/ICoatingIssueNoteAppService.cs b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Notes/IssueNotes/CoatingIssueNotes/ICoatingIssueNoteAppService.cs index 20bb6f3c5..a877db99c 100644 --- a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Notes/IssueNotes/CoatingIssueNotes/ICoatingIssueNoteAppService.cs +++ b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Notes/IssueNotes/CoatingIssueNotes/ICoatingIssueNoteAppService.cs @@ -3,15 +3,12 @@ using System.Collections.Generic; using System.Threading; using System.Threading.Tasks; using Volo.Abp.Application.Dtos; -using Win_in.Sfs.Wms.Store.Application.Contracts; -namespace Win_in.Sfs.Wms.Store.Notes.IssueNotes; +namespace Win_in.Sfs.Wms.Store.Application.Contracts; public interface ICoatingIssueNoteAppService : ISfsStoreMasterReadOnlyAppServiceBase { Task CreateAsync(CoatingIssueNoteEditInput input); Task ConfirmAsync(Guid id); - - } diff --git a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Notes/IssueNotes/CoatingIssueNotes/Inputs/CoatingIssueNoteEditInput.cs b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Notes/IssueNotes/CoatingIssueNotes/Inputs/CoatingIssueNoteEditInput.cs index a306ad9d6..0f38c7030 100644 --- a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Notes/IssueNotes/CoatingIssueNotes/Inputs/CoatingIssueNoteEditInput.cs +++ b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Notes/IssueNotes/CoatingIssueNotes/Inputs/CoatingIssueNoteEditInput.cs @@ -2,9 +2,8 @@ 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; +namespace Win_in.Sfs.Wms.Store.Application.Contracts; public class CoatingIssueNoteEditInput : SfsStoreCreateOrUpdateInputBase { @@ -28,7 +27,7 @@ public class CoatingIssueNoteEditInput : SfsStoreCreateOrUpdateInputBase /// [Display(Name = "任务ID")] [Required(ErrorMessage = "{0}是必填项")] - public string JobNumber { get; set; } + public string JobNumber { get; set; } /// /// 明细列表 @@ -53,5 +52,7 @@ public class CoatingIssueNoteEditInput : SfsStoreCreateOrUpdateInputBase /// [Display(Name = "使用在途库")] public bool UseOnTheWayLocation { get; set; } + + public EnumIssueSendType EnumIssueSendType { get; set; } #endregion } diff --git a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Notes/IssueNotes/CoatingIssueNotes/Inputs/CoatingIssueNoteImportInput.cs b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Notes/IssueNotes/CoatingIssueNotes/Inputs/CoatingIssueNoteImportInput.cs index 7c40b7379..3dd357936 100644 --- a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Notes/IssueNotes/CoatingIssueNotes/Inputs/CoatingIssueNoteImportInput.cs +++ b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Notes/IssueNotes/CoatingIssueNotes/Inputs/CoatingIssueNoteImportInput.cs @@ -1,8 +1,7 @@ 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; +namespace Win_in.Sfs.Wms.Store.Application.Contracts; public class CoatingIssueNoteImportInput : SfsStoreImportInputBase, IHasJobNumber, IHasRequestNumber { @@ -32,4 +31,6 @@ public class CoatingIssueNoteImportInput : SfsStoreImportInputBase, IHasJobNumbe [Display(Name = "使用在途库")] [Required(ErrorMessage = "{0}是必填项")] public bool UseOnTheWayLocation { get; set; } + + public EnumIssueSendType EnumIssueSendType { get; set; } } diff --git a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Notes/IssueNotes/KittingIssueNotes/IKittingIssueNoteAppService.cs b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Notes/IssueNotes/KittingIssueNotes/IKittingIssueNoteAppService.cs index db775120e..4b64a1f56 100644 --- a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Notes/IssueNotes/KittingIssueNotes/IKittingIssueNoteAppService.cs +++ b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Notes/IssueNotes/KittingIssueNotes/IKittingIssueNoteAppService.cs @@ -10,7 +10,5 @@ public interface IKittingIssueNoteAppService : ISfsStoreMasterReadOnlyAppService { Task CreateAsync(KittingIssueNoteEditInput input); - Task ConfirmAsync(Guid id); - - + Task ConfirmAsync(Guid id); } diff --git a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Notes/IssueNotes/KittingIssueNotes/KittingIssueNotePermissions.cs b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Notes/IssueNotes/KittingIssueNotes/KittingIssueNotePermissions.cs index 3afd47039..2ced39bab 100644 --- a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Notes/IssueNotes/KittingIssueNotes/KittingIssueNotePermissions.cs +++ b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Notes/IssueNotes/KittingIssueNotes/KittingIssueNotePermissions.cs @@ -5,20 +5,16 @@ namespace Win_in.Sfs.Wms.Store.Application.Contracts; public static class KittingIssueNotePermissions { - public const string Default = StorePermissions.GroupName + "." + nameof(KittingIssueNote); public const string Create = Default + "." + StorePermissions.CreateStr; public const string Update = Default + "." + StorePermissions.UpdateStr; - public const string Delete = Default + "." + StorePermissions.DeleteStr; - - + public const string Delete = Default + "." + StorePermissions.DeleteStr; public static void AddKittingIssueNotePermission(this PermissionGroupDefinition permissionGroup) { var kittingIssueNotePermission = permissionGroup.AddPermission(Default, StorePermissionDefinitionProvider.L(nameof(KittingIssueNote))); kittingIssueNotePermission.AddChild(Create, StorePermissionDefinitionProvider.L(StorePermissions.CreateStr)); kittingIssueNotePermission.AddChild(Update, StorePermissionDefinitionProvider.L(StorePermissions.UpdateStr)); - kittingIssueNotePermission.AddChild(Delete, StorePermissionDefinitionProvider.L(StorePermissions.DeleteStr)); - + kittingIssueNotePermission.AddChild(Delete, StorePermissionDefinitionProvider.L(StorePermissions.DeleteStr)); } } diff --git a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Permissions/StorePermissionDefinitionProvider.cs b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Permissions/StorePermissionDefinitionProvider.cs index beeaa8c94..ba0036681 100644 --- a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Permissions/StorePermissionDefinitionProvider.cs +++ b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Permissions/StorePermissionDefinitionProvider.cs @@ -29,13 +29,15 @@ public class StorePermissionDefinitionProvider : PermissionDefinitionProvider storeGroup.AddMaterialRequestPermission(); storeGroup.AddInjectionIssueRequestPermission(); storeGroup.AddKittingIssueRequestPermission(); + storeGroup.AddCoatingIssueRequestPermission(); storeGroup.AddAssembleIssueRequestPermission(); storeGroup.AddThirdLocationRequestPermission(); storeGroup.AddContainerRequestPermission(); storeGroup.AddIssueNotePermission(); storeGroup.AddInjectionIssueNotePermission(); storeGroup.AddAssembleIssueNotePermission(); - storeGroup.AddKittingIssueNotePermission(); + storeGroup.AddCoatingIssueNotePermission(); + storeGroup.AddKittingIssueNotePermission(); storeGroup.AddThirdLocationNotePermission(); storeGroup.AddContainerNotePermission(); storeGroup.AddUnplannedReceiptNotePermission(); diff --git a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Requests/IssueRequest/CoatingIssueRequests/CoatingIssueRequestPermissions.cs b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Requests/IssueRequest/CoatingIssueRequests/CoatingIssueRequestPermissions.cs index 684172de3..433c5a609 100644 --- a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Requests/IssueRequest/CoatingIssueRequests/CoatingIssueRequestPermissions.cs +++ b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Requests/IssueRequest/CoatingIssueRequests/CoatingIssueRequestPermissions.cs @@ -1,27 +1,20 @@ using Volo.Abp.Authorization.Permissions; -using Win_in.Sfs.Wms.Store.Application.Contracts; - -namespace Win_in.Sfs.Wms.Store.Requests.MaterialRequests; +using Win_in.Sfs.Wms.Store.Domain; +namespace Win_in.Sfs.Wms.Store.Application.Contracts; public static class CoatingIssueRequestPermissions { - public const string Default = StorePermissions.GroupName + "." + nameof(CoatingIssueRequest); public const string Create = Default + "." + StorePermissions.CreateStr; public const string Update = Default + "." + StorePermissions.UpdateStr; public const string Delete = Default + "." + StorePermissions.DeleteStr; - //自动叫料申请 - public const string AutoMaterialRequest = StorePermissions.GroupName + "." + nameof(AutoMaterialRequest); - public static void AddCoatingIssueRequestPermission(this PermissionGroupDefinition permissionGroup) { - var MaterialRequestPermission = permissionGroup.AddPermission(Default, StorePermissionDefinitionProvider.L(nameof(CoatingIssueRequest))); - MaterialRequestPermission.AddChild(Create, StorePermissionDefinitionProvider.L(StorePermissions.CreateStr)); - MaterialRequestPermission.AddChild(Update, StorePermissionDefinitionProvider.L(StorePermissions.UpdateStr)); - MaterialRequestPermission.AddChild(Delete, StorePermissionDefinitionProvider.L(StorePermissions.DeleteStr)); - - permissionGroup.AddPermission(AutoMaterialRequest, StorePermissionDefinitionProvider.L(nameof(AutoMaterialRequest))); + var coatingIssueRequestPermission = permissionGroup.AddPermission(Default, StorePermissionDefinitionProvider.L(nameof(CoatingIssueRequest))); + coatingIssueRequestPermission.AddChild(Create, StorePermissionDefinitionProvider.L(StorePermissions.CreateStr)); + coatingIssueRequestPermission.AddChild(Update, StorePermissionDefinitionProvider.L(StorePermissions.UpdateStr)); + coatingIssueRequestPermission.AddChild(Delete, StorePermissionDefinitionProvider.L(StorePermissions.DeleteStr)); } } diff --git a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Requests/IssueRequest/CoatingIssueRequests/DTOS/CoatingIssueRequestDTO.cs b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Requests/IssueRequest/CoatingIssueRequests/DTOS/CoatingIssueRequestDTO.cs index bcddf67a7..e65a27014 100644 --- a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Requests/IssueRequest/CoatingIssueRequests/DTOS/CoatingIssueRequestDTO.cs +++ b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Requests/IssueRequest/CoatingIssueRequests/DTOS/CoatingIssueRequestDTO.cs @@ -1,8 +1,7 @@ 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.Requests.MaterialRequests; +namespace Win_in.Sfs.Wms.Store.Application.Contracts; public class CoatingIssueRequestDTO : SfsStoreRequestDTOBase, IHasNumber { diff --git a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Requests/IssueRequest/CoatingIssueRequests/DTOS/CoatingIssueRequestDetailDTO.cs b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Requests/IssueRequest/CoatingIssueRequests/DTOS/CoatingIssueRequestDetailDTO.cs index b77f40e6c..616bc4947 100644 --- a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Requests/IssueRequest/CoatingIssueRequests/DTOS/CoatingIssueRequestDetailDTO.cs +++ b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Requests/IssueRequest/CoatingIssueRequests/DTOS/CoatingIssueRequestDetailDTO.cs @@ -3,9 +3,8 @@ 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.Wms.Store.Application.Contracts; -namespace Win_in.Sfs.Wms.Store.Requests.MaterialRequests; +namespace Win_in.Sfs.Wms.Store.Application.Contracts; public class CoatingIssueRequestDetailDTO : SfsStoreDetailWithQtyDTOBase { diff --git a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Requests/IssueRequest/CoatingIssueRequests/ICoatingIssueRequestAppService.cs b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Requests/IssueRequest/CoatingIssueRequests/ICoatingIssueRequestAppService.cs index ac9f958ff..54bb032f1 100644 --- a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Requests/IssueRequest/CoatingIssueRequests/ICoatingIssueRequestAppService.cs +++ b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Requests/IssueRequest/CoatingIssueRequests/ICoatingIssueRequestAppService.cs @@ -1,15 +1,16 @@ +using System; using System.Collections.Generic; using System.Threading; using System.Threading.Tasks; using Volo.Abp.Application.Dtos; -using Win_in.Sfs.Wms.Store.Application.Contracts; -namespace Win_in.Sfs.Wms.Store.Requests.MaterialRequests; +namespace Win_in.Sfs.Wms.Store.Application.Contracts; public interface ICoatingIssueRequestAppService : ISfsStoreRequestMasterAppServiceBase { - Task CreateAndHandleAsync(CoatingIssueRequestEditInput input); - + Task CreateAndHandleAsync(CoatingIssueRequestEditInput input); + Task UpdateStatusCompletedAsync(string number); + Task IsHasNewJobAsync(string requestNumber, List jobNumber); } diff --git a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Requests/IssueRequest/CoatingIssueRequests/Inputs/CoatingIssueRequestDetailInput.cs b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Requests/IssueRequest/CoatingIssueRequests/Inputs/CoatingIssueRequestDetailInput.cs index fbb5165b3..d76fc8ad4 100644 --- a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Requests/IssueRequest/CoatingIssueRequests/Inputs/CoatingIssueRequestDetailInput.cs +++ b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Requests/IssueRequest/CoatingIssueRequests/Inputs/CoatingIssueRequestDetailInput.cs @@ -2,9 +2,8 @@ using System; using System.ComponentModel.DataAnnotations; using Win_in.Sfs.Shared.Domain; using Win_in.Sfs.Shared.Domain.Shared; -using Win_in.Sfs.Wms.Store.Application.Contracts; -namespace Win_in.Sfs.Wms.Store.Requests.MaterialRequests; +namespace Win_in.Sfs.Wms.Store.Application.Contracts; public class CoatingIssueRequestDetailInput : SfsStoreDetailWithQtyInputBase { diff --git a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Requests/IssueRequest/CoatingIssueRequests/Inputs/CoatingIssueRequestEditInput.cs b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Requests/IssueRequest/CoatingIssueRequests/Inputs/CoatingIssueRequestEditInput.cs index e6f879431..0511073bf 100644 --- a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Requests/IssueRequest/CoatingIssueRequests/Inputs/CoatingIssueRequestEditInput.cs +++ b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Requests/IssueRequest/CoatingIssueRequests/Inputs/CoatingIssueRequestEditInput.cs @@ -1,19 +1,19 @@ using System.Collections.Generic; using System.ComponentModel.DataAnnotations; using Win_in.Sfs.Shared.Domain; -using Win_in.Sfs.Wms.Store.Application.Contracts; +using Win_in.Sfs.Shared.Domain.Shared.Enums.Store; -namespace Win_in.Sfs.Wms.Store.Requests.MaterialRequests; +namespace Win_in.Sfs.Wms.Store.Application.Contracts; public class CoatingIssueRequestEditInput : SfsStoreRequestCreateOrUpdateInputBase { #region Base /// - /// 叫料类型 + /// 叫料类型 /// [Display(Name = "叫料类型")] - public string Type { get; set; } + public EnumIssueRequestType IssueRequestType { get; set; } /// /// 使用在途库 diff --git a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Requests/IssueRequest/CoatingIssueRequests/Inputs/CoatingIssueRequestImportInput.cs b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Requests/IssueRequest/CoatingIssueRequests/Inputs/CoatingIssueRequestImportInput.cs index 097ed69be..e96fc3f72 100644 --- a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Requests/IssueRequest/CoatingIssueRequests/Inputs/CoatingIssueRequestImportInput.cs +++ b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Requests/IssueRequest/CoatingIssueRequests/Inputs/CoatingIssueRequestImportInput.cs @@ -1,23 +1,18 @@ using System.ComponentModel.DataAnnotations; using Win_in.Sfs.Shared.Application.Contracts; using Win_in.Sfs.Shared.Domain.Shared; -using Win_in.Sfs.Wms.Store.Application.Contracts; +using Win_in.Sfs.Shared.Domain.Shared.Enums.Store; -namespace Win_in.Sfs.Wms.Store.Requests.MaterialRequests; +namespace Win_in.Sfs.Wms.Store.Application.Contracts; -[Display(Name = "叫料申请")] +[Display(Name = "喷涂叫料申请导入")] public class CoatingIssueRequestImportInput : SfsStoreImportInputBase { - /// - /// 叫料类型 + /// 叫料类型 /// [Display(Name = "叫料类型")] - [Required(ErrorMessage = "{0}是必填项")] - [ImporterHeader(Name = "叫料类型")] - [ExporterHeader(DisplayName = "叫料类型")] - [ValueMapping("人工拉动", EnumMaterialRequestType.Issue_Manual)] - public string Type { get; set; } + public EnumIssueRequestType IssueRequestType { get; set; } /// /// 物品代码 diff --git a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Jobs/IssueJobs/CoatingIssueJobs/CoatingIssueJobAppService.cs b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Jobs/IssueJobs/CoatingIssueJobs/CoatingIssueJobAppService.cs index f3bef2def..fff12a59c 100644 --- a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Jobs/IssueJobs/CoatingIssueJobs/CoatingIssueJobAppService.cs +++ b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Jobs/IssueJobs/CoatingIssueJobs/CoatingIssueJobAppService.cs @@ -1,26 +1,20 @@ using System; using System.Collections.Generic; -using System.Data; using System.Linq; -using System.Linq.Expressions; using System.Net.Http; -using System.Threading; +using System.Net.Http.Headers; using System.Threading.Tasks; using Castle.Components.DictionaryAdapter; -using DocumentFormat.OpenXml.Spreadsheet; using Microsoft.AspNetCore.Authorization; -using Microsoft.AspNetCore.Components.Forms; using Microsoft.AspNetCore.Mvc; using Microsoft.Extensions.Options; using MyNamespace; -using Omu.ValueInjecter; using Volo.Abp; -using Volo.Abp.Application.Dtos; using Volo.Abp.ObjectMapping; 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; @@ -28,6 +22,8 @@ using Win_in.Sfs.Wms.Store.Jobs.IssueJobs; using Win_in.Sfs.Wms.Store.Jobs.IssueJobs.proxy; using Win_in.Sfs.Wms.Store.Notes; using Win_in.Sfs.Wms.Store.Options; +using static IdentityModel.ClaimComparer; +using static Volo.Abp.Identity.Settings.IdentitySettingNames; namespace Win_in.Sfs.Wms.Store.Application; @@ -41,94 +37,91 @@ public class CoatingIssueJobAppService private readonly ICoatingIssueJobManager _coatingIssueJobManager; private readonly ILocationAppService _locationAppService; private readonly ITransferLibJobAppService _transferLibJobAppService; + private readonly ICoatingIssueNoteAppService _coatingIssueNoteAppService; + private readonly IExpectOutAppService _expectOutAppService; private readonly IHttpClientFactory _httpClientFactory; private readonly IOptions _options; + + protected ICoatingIssueRequestAppService CoatingIssueRequestAppService => + LazyServiceProvider.LazyGetRequiredService(); + public CoatingIssueJobAppService( ICoatingIssueJobRepository repository, ICoatingIssueJobManager coatingIssueJobManager, - ILocationAppService locationAppService, ITransferLibJobAppService transferLibJobAppService + ILocationAppService locationAppService, ITransferLibJobAppService transferLibJobAppService, + ICoatingIssueNoteAppService coatingIssueNoteAppService, IExpectOutAppService expectOutAppService , IHttpClientFactory httpClientFactory , IOptions options - ) : base(repository, coatingIssueJobManager) + + + + ) : base( + repository, coatingIssueJobManager) { _coatingIssueJobManager = coatingIssueJobManager; _locationAppService = locationAppService; _transferLibJobAppService = transferLibJobAppService; + _coatingIssueNoteAppService = coatingIssueNoteAppService; + _expectOutAppService = expectOutAppService; _httpClientFactory = httpClientFactory; - _options=options; + _options = options; } [HttpPost("add-many")] public override async Task> CreateManyAsync(List inputs) { - - - foreach (var input in inputs) { await CheckMinRowAndSetStatusAsync(input).ConfigureAwait(false); + await CheckDimensionalStorehouseAsync(input).ConfigureAwait(false); } - return await base.CreateManyAsync(inputs).ConfigureAwait(false); + var coatingIssueJobDtos = await base.CreateManyAsync(inputs).ConfigureAwait(false); + foreach (var coatingIssueJobDto in coatingIssueJobDtos) + { + await CheckDimensionalStorehouseAsync(coatingIssueJobDto).ConfigureAwait(false); + } + + return coatingIssueJobDtos; } [HttpPost("")] public override async Task CreateAsync(CoatingIssueJobEditInput input) { await CheckMinRowAndSetStatusAsync(input).ConfigureAwait(false); + await CheckDimensionalStorehouseAsync(input).ConfigureAwait(false); + + var coatingIssueJobDto = await base.CreateAsync(input).ConfigureAwait(false); + await CheckDimensionalStorehouseAsync(coatingIssueJobDto).ConfigureAwait(false); - return await base.CreateAsync(input).ConfigureAwait(false); + return coatingIssueJobDto; } - /// - /// 判断是不是在最底层 如果不是则把状态变更为等待 并把库移推荐的From和To赋值 - /// - /// - /// - private async Task CheckMinRowAndSetStatusAsync(CoatingIssueJobEditInput input) + [HttpPost("invalid")] + public override async Task CancelAsync(Guid id) { - var jobDetailInputdetail = input.Details.FirstOrDefault(); - - var loctionDto = await _locationAppService.GetByCodeAsync(jobDetailInputdetail.RecommendFromLocationCode) - .ConfigureAwait(false); - - if (loctionDto.Type == EnumLocationType.RAW && loctionDto.RowCode != 1) + var kittingJob = await _repository.GetAsync(id).ConfigureAwait(false); + if (kittingJob == null) { - input.JobStatus = EnumJobStatus.Wait; - - jobDetailInputdetail.TransferLibFromArriveDate = jobDetailInputdetail.RecommendFromArriveDate; - jobDetailInputdetail.TransferLibFromContainerCode = jobDetailInputdetail.RecommendFromContainerCode; - jobDetailInputdetail.TransferLibFromExpireDate = jobDetailInputdetail.RecommendFromExpireDate; - jobDetailInputdetail.TransferLibFromLocationArea = jobDetailInputdetail.RecommendFromLocationArea; - jobDetailInputdetail.TransferLibFromLocationCode = jobDetailInputdetail.RecommendFromLocationCode; - jobDetailInputdetail.TransferLibFromLocationErpCode = jobDetailInputdetail.RecommendFromLocationErpCode; - jobDetailInputdetail.TransferLibFromLocationGroup = jobDetailInputdetail.RecommendFromLocationGroup; - jobDetailInputdetail.TransferLibFromLot = jobDetailInputdetail.RecommendFromLot; - jobDetailInputdetail.TransferLibFromPackingCode = jobDetailInputdetail.RecommendFromPackingCode; - jobDetailInputdetail.TransferLibFromProduceDate = jobDetailInputdetail.RecommendFromProduceDate; - jobDetailInputdetail.TransferLibFromQty = jobDetailInputdetail.RecommendFromQty; - jobDetailInputdetail.TransferLibFromSupplierBatch = jobDetailInputdetail.RecommendFromSupplierBatch; - jobDetailInputdetail.TransferLibFromWarehouseCode = jobDetailInputdetail.RecommendFromWarehouseCode; + throw new UserFriendlyException($"未找到ID为 {id} 的任务"); + } - jobDetailInputdetail.TransferLibToArriveDate = jobDetailInputdetail.RecommendToArriveDate; - jobDetailInputdetail.TransferLibToContainerCode = jobDetailInputdetail.RecommendToContainerCode; - jobDetailInputdetail.TransferLibToExpireDate = jobDetailInputdetail.RecommendToExpireDate; - jobDetailInputdetail.TransferLibToLocationArea = jobDetailInputdetail.RecommendToLocationArea; - jobDetailInputdetail.TransferLibToLocationCode = jobDetailInputdetail.RecommendToLocationCode; - jobDetailInputdetail.TransferLibToLocationErpCode = jobDetailInputdetail.RecommendToLocationErpCode; - jobDetailInputdetail.TransferLibToLocationGroup = jobDetailInputdetail.RecommendToLocationGroup; - jobDetailInputdetail.TransferLibToLot = jobDetailInputdetail.RecommendToLot; - jobDetailInputdetail.TransferLibToPackingCode = jobDetailInputdetail.RecommendToPackingCode; - jobDetailInputdetail.TransferLibToProduceDate = jobDetailInputdetail.RecommendToProduceDate; - jobDetailInputdetail.TransferLibToQty = jobDetailInputdetail.RecommendToQty; - jobDetailInputdetail.TransferLibToSupplierBatch = jobDetailInputdetail.RecommendToSupplierBatch; - jobDetailInputdetail.TransferLibToWarehouseCode = jobDetailInputdetail.RecommendToWarehouseCode; + if (kittingJob.JobStatus == EnumJobStatus.Open || kittingJob.JobStatus == EnumJobStatus.Partial || + kittingJob.JobStatus == EnumJobStatus.Wait) + { + throw new UserFriendlyException($"任务状态不是{kittingJob.JobStatus == EnumJobStatus.Open}、" + + $"{kittingJob.JobStatus == EnumJobStatus.Partial}、" + + $"{kittingJob.JobStatus == EnumJobStatus.Wait}"); } + + await _expectOutAppService.RemoveByNumberAsync(kittingJob.Number).ConfigureAwait(false); + kittingJob.JobStatus = EnumJobStatus.Cancelled; + await _repository.UpdateAsync(kittingJob).ConfigureAwait(false); } [HttpPost("cancel-by-request/{requestNumber}")] public virtual async Task CancelByMaterialRequestAsync(string requestNumber) { - var entities = await _repository.GetListAsync(p => p.MaterialRequestNumber == requestNumber) + var entities = await _repository.GetListAsync(p => p.CoatingRequestNumber == requestNumber) .ConfigureAwait(false); foreach (var entity in entities) { @@ -136,38 +129,33 @@ public class CoatingIssueJobAppService } } - [HttpPost("invalid")] - public override async Task CancelAsync(Guid id) - { - var coatingIssueJob = await _repository.GetAsync(id).ConfigureAwait(false); - if (coatingIssueJob == null) - { - throw new UserFriendlyException($"未找到ID为 {id} 的任务"); - } - - await _coatingIssueJobManager.CancelAsync(coatingIssueJob).ConfigureAwait(false); - } - [HttpPost("by-request-number/{requestNumber}")] public virtual async Task> GetByRequestNumberAsync(string requestNumber) { - var entitys = await _repository.GetListAsync(p => p.MaterialRequestNumber == requestNumber) + var entitys = await _repository.GetListAsync(p => p.CoatingRequestNumber == requestNumber) .ConfigureAwait(false); return ObjectMapper.Map, List>(entitys); } + /// + /// 库移回调 + /// + /// + /// [HttpPost("Do-Call-Back")] public async Task DoTransferLibCallbackAsync(TransferLibJobDTO dto) { - var job = await _repository.FindAsync(p => p.Number == dto.JobNumber).ConfigureAwait(false); + var job = await _repository.FindAsync(p => p.Number == dto.CallJobNumber).ConfigureAwait(false); - //todo 等云峰写好换成真实的 - var transferLibJobDto = await _transferLibJobAppService.GetByNumberAsync("AAA").ConfigureAwait(false); - var transferLibNote = new TransferLibNote(); + if (job.JobStatus != EnumJobStatus.Wait) + { + throw new UserFriendlyException($"任务状态不是{EnumJobStatus.Wait.GetDisplayName()}"); + } - var transferLibNoteDetail = transferLibNote.Details.First(); + var transferLibNoteDetail = dto.Details.First(); var jobDetail = job.Details.First(); + job.JobStatus = EnumJobStatus.Open; jobDetail.TransferLibFromArriveDate = transferLibNoteDetail.HandledFromArriveDate; @@ -199,133 +187,391 @@ public class CoatingIssueJobAppService jobDetail.TransferLibToWarehouseCode = transferLibNoteDetail.HandledToWarehouseCode; await _repository.UpdateAsync(job).ConfigureAwait(false); + } + + /// + /// 执行任务明细 + /// + /// + [HttpPost("ExecuteDetail/{masterId}")] + public async Task ExecuteDetailAsync(Guid masterId, Guid detailId, CoatingIssueJobDetailDTO issueJobDetailDto) + { + var coatingIssueJob = await _repository.GetAsync(masterId).ConfigureAwait(false); + coatingIssueJob.JobStatus = EnumJobStatus.Doing; + + var coatingIssueJobDto = ObjectMapper.Map(coatingIssueJob); + coatingIssueJobDto.Details = new List { issueJobDetailDto }; + var coatingIssueNoteEditInput = await BuildCoatingIssueNoteAsync(coatingIssueJobDto).ConfigureAwait(false); + await _coatingIssueNoteAppService.CreateAsync(coatingIssueNoteEditInput).ConfigureAwait(false); + + var issueJobDetail = ObjectMapper.Map(issueJobDetailDto); + var entityDetail = coatingIssueJob.Details.Find(p => p.Id == detailId); + issueJobDetail.HandledFromQty = entityDetail.HandledFromQty; + issueJobDetail.HandledToQty = entityDetail.HandledToQty; + + issueJobDetail.HandledToQty += issueJobDetailDto.HandledToQty; + issueJobDetail.HandledFromQty += issueJobDetailDto.HandledFromQty; + coatingIssueJob.Details = new EditableList() { issueJobDetail }; + + if (coatingIssueJob.EnumIssueSendType == EnumIssueSendType.BoxQtyType) //按箱叫料 因为任务只有1箱 所以可以直接完成 + { + await UpdateRequestAndjobStatusDoneAsync(coatingIssueJob, issueJobDetailDto, issueJobDetailDto.HandledToQty).ConfigureAwait(false); + } + else + { + var detail = coatingIssueJob.Details.First(p => p.Id == issueJobDetailDto.Id); + if (issueJobDetail.HandledToQty >= detail.RequestQty) + { + await UpdateRequestAndjobStatusDoneAsync(coatingIssueJob, issueJobDetailDto, issueJobDetailDto.HandledToQty).ConfigureAwait(false); + } + else + { + await RemoveExpectOutAsync(coatingIssueJob, issueJobDetailDto, issueJobDetailDto.HandledToQty).ConfigureAwait(false); + } + } + + await _repository.UpdateAsync(coatingIssueJob).ConfigureAwait(false); + } + + /// + /// 完成任务 + /// + /// + /// + [HttpPost("Complete/{id}")] + public async Task CompleteAsync(Guid id) + { + var coatingIssueJob = await _repository.FindAsync(id).ConfigureAwait(false); + + coatingIssueJob.JobStatus = EnumJobStatus.Done; + + await _expectOutAppService.RemoveByNumberAsync(coatingIssueJob.Number).ConfigureAwait(false); + + await CoatingIssueRequestAppService.UpdateStatusCompletedAsync(coatingIssueJob.CoatingRequestNumber).ConfigureAwait(false); + await _repository.UpdateAsync(coatingIssueJob).ConfigureAwait(false); + } + + /// + /// 请求点了完成,任务全部都完成 + /// + /// + /// + [HttpPost("complete-by-request/{requestNumber}")] + public async Task CompleteByRequestNumberAsync(string requestNumber) + { + var coatingIssueJobs = await _repository.GetListAsync(p => p.CoatingRequestNumber == requestNumber).ConfigureAwait(false); + + foreach (var coatingIssueJob in coatingIssueJobs) + { + coatingIssueJob.JobStatus = EnumJobStatus.Done; + await _repository.UpdateAsync(coatingIssueJob).ConfigureAwait(false); + await _expectOutAppService.RemoveByNumberAsync(coatingIssueJob.Number).ConfigureAwait(false); + } + } + + #region 立库 + + /// + /// 立体库同步 + /// + /// + /// + /// + [HttpPost("sync-issue-job-stereo")] + + public async Task SyncIssueJobStereoAsync(List input, string p_loc) + { + ReusltObject ret = new ReusltObject(); + ret.Code = "1"; + ret.Message = "操作成功"; + ret.OperateTime = DateTime.Now.ToString("yyyy-MM-dd"); + try + { + List IssueJobToRestoDetailDTOs = new List(); + IssueJobToRestoDTO main = new IssueJobToRestoDTO(); + main.OperatorName = CurrentUser.UserName; + foreach (var job in input) + { + foreach (var jobitem in job.Details) + { + IssueJobToRestoDetailDTOs.Add(new IssueJobToRestoDetailDTO() + { + Count = jobitem.HandledToQty, + ProductNo = jobitem.ItemCode, + NeedSite = p_loc, + WorkNo = job.Number, + TaskNo = job.Number + }); + } + } + main.Details = IssueJobToRestoDetailDTOs; + var httpclient = _httpClientFactory.CreateClient(); +#if DEBUG + + string json = System.Text.Json.JsonSerializer.Serialize(main); + _options.Value.Address = "http://localhost:59094/";//测试地址 + _options.Value.Token = "";//测试token + _options.Value.UserName = "";//测试用户名 + _options.Value.Password = "";//测试密码 + +#endif + if (!string.IsNullOrEmpty(_options.Value.Token)) + { + var token = _options.Value.Token; + httpclient.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", token); + } + if (!string.IsNullOrEmpty(_options.Value.UserName) && !string.IsNullOrEmpty(_options.Value.Password)) + { + var username = _options.Value.UserName; + var password = _options.Value.Password; + httpclient.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Basic", Convert.ToBase64String(System.Text.Encoding.ASCII.GetBytes($"{username}:{password}"))); + } + + IssueJobToRestoClient client = new IssueJobToRestoClient(_options.Value.Address, httpclient); + ret = await client.SyncIssueJobStereoAsync(main).ConfigureAwait(false); + } + catch (Exception ex) + { + ret = new ReusltObject(); + ret.Code = "2"; + ret.Message = ex.Message; + ret.OperateTime = DateTime.Now.ToString("yyyy-MM-dd"); + } + + return ret; + + } + + [HttpPost("receive-issue-job-stereo")] + public virtual async Task SyncReciveIssueJobStereoAsync(IssueRequestFromRestoDTO input) + { + +#if DEBUG + var json = System.Text.Json.JsonSerializer.Serialize(input); +#endif + List errors = new List(); + var ret = new ReusltObject() + { + Code = "1", + OperateTime = DateTime.Now.ToString("yyyy-MM-dd"), + Message = "操作成功" + }; + try + { + + if (input.Jobs.Count > 0) + { + var jobs = input.Jobs; + var numbers = jobs.Select(p => p.JobNumber); + var query = _repository.WithDetails() + .Where(p => numbers.Contains(p.Number)); + var entities = query.ToList(); + var dtos = ObjectMapper.Map, List>(entities); + if (input.Jobs.Count == entities.Count) + { + errors.Add("立体库提交出库任务和WMS任务不符,请核对! \n"); + } + foreach (var itm in dtos) + { + var first = jobs.FirstOrDefault(p => p.JobNumber == itm.Number); + var itmDetails = itm.Details.ToList(); + List details = new List(); + foreach (var detail in first.Details) + { + var entity = itmDetails.FirstOrDefault(p => p.ItemCode == detail.ItemCode); + CoatingIssueJobDetailDTO dto = new CoatingIssueJobDetailDTO(); + dto.HandledFromLocationCode = entity.HandledFromLocationCode; + dto.HandledToLocationCode = entity.HandledToLocationCode; + dto.ItemCode = detail.ItemCode; + dto.RecommendFromQty = detail.Qty; + dto.RecommendToQty = detail.Qty; + dto.HandledFromQty = detail.Qty; + dto.HandledToQty = detail.Qty; + dto.Status = entity.Status; + details.Add(dto); + } + itm.Details = details; + await CompleteAsync(itm.Id, itm).ConfigureAwait(false); + } + } + else + { + errors.Add("立体库确认单据里无数据! \n"); + } + } + catch (Exception ex) + { + ret = new ReusltObject() + { + Code = "2", + OperateTime = DateTime.Now.ToString("yyyy-MM-dd"), + Message = ex.Message + }; + return ret; + } + if (errors.Count > 0) + { + + ret = new ReusltObject() + { + Code = "2", + OperateTime = DateTime.Now.ToString("yyyy-MM-dd"), + Message = string.Join(",", errors.ToArray()) + }; + } + return ret; + } + + #endregion + + #region 私有 + + /// + /// 创建补料记录实体 + /// + /// + /// + private async Task BuildCoatingIssueNoteAsync(CoatingIssueJobDTO coatingIssueJobDto) + { + var coatingIssueNoteCreateInput = + ObjectMapper.Map(coatingIssueJobDto); + coatingIssueNoteCreateInput.JobNumber = coatingIssueJobDto.Number; + + await Task.CompletedTask.ConfigureAwait(false); + + return coatingIssueNoteCreateInput; + } + + /// + /// 判断是不是在最底层 如果不是则把状态变更为等待 并把库移推荐的From和To赋值 + /// + /// + /// + private async Task CheckMinRowAndSetStatusAsync(CoatingIssueJobEditInput input) + { + var jobDetailInputdetail = input.Details.FirstOrDefault(); + + var loctionDto = await _locationAppService.GetByCodeAsync(jobDetailInputdetail.RecommendFromLocationCode) + .ConfigureAwait(false); + + if (loctionDto.Type == EnumLocationType.RAW && loctionDto.RowCode != 1) + { + input.JobStatus = EnumJobStatus.Wait; + } + else if (loctionDto.Type == EnumLocationType.RAW && loctionDto.RowCode == 1) + { + jobDetailInputdetail.TransferLibFromArriveDate = jobDetailInputdetail.RecommendFromArriveDate; + jobDetailInputdetail.TransferLibFromContainerCode = jobDetailInputdetail.RecommendFromContainerCode; + jobDetailInputdetail.TransferLibFromExpireDate = jobDetailInputdetail.RecommendFromExpireDate; + jobDetailInputdetail.TransferLibFromLocationArea = jobDetailInputdetail.RecommendFromLocationArea; + jobDetailInputdetail.TransferLibFromLocationCode = jobDetailInputdetail.RecommendFromLocationCode; + jobDetailInputdetail.TransferLibFromLocationErpCode = jobDetailInputdetail.RecommendFromLocationErpCode; + jobDetailInputdetail.TransferLibFromLocationGroup = jobDetailInputdetail.RecommendFromLocationGroup; + jobDetailInputdetail.TransferLibFromLot = jobDetailInputdetail.RecommendFromLot; + jobDetailInputdetail.TransferLibFromPackingCode = jobDetailInputdetail.RecommendFromPackingCode; + jobDetailInputdetail.TransferLibFromProduceDate = jobDetailInputdetail.RecommendFromProduceDate; + jobDetailInputdetail.TransferLibFromQty = jobDetailInputdetail.RecommendFromQty; + jobDetailInputdetail.TransferLibFromSupplierBatch = jobDetailInputdetail.RecommendFromSupplierBatch; + jobDetailInputdetail.TransferLibFromWarehouseCode = jobDetailInputdetail.RecommendFromWarehouseCode; + + jobDetailInputdetail.TransferLibToArriveDate = jobDetailInputdetail.RecommendToArriveDate; + jobDetailInputdetail.TransferLibToContainerCode = jobDetailInputdetail.RecommendToContainerCode; + jobDetailInputdetail.TransferLibToExpireDate = jobDetailInputdetail.RecommendToExpireDate; + jobDetailInputdetail.TransferLibToLot = jobDetailInputdetail.RecommendToLot; + jobDetailInputdetail.TransferLibToPackingCode = jobDetailInputdetail.RecommendToPackingCode; + jobDetailInputdetail.TransferLibToProduceDate = jobDetailInputdetail.RecommendToProduceDate; + jobDetailInputdetail.TransferLibToQty = jobDetailInputdetail.RecommendToQty; + jobDetailInputdetail.TransferLibToSupplierBatch = jobDetailInputdetail.RecommendToSupplierBatch; + jobDetailInputdetail.TransferLibToWarehouseCode = jobDetailInputdetail.TransferLibFromWarehouseCode; + jobDetailInputdetail.TransferLibToLocationArea = jobDetailInputdetail.TransferLibFromLocationArea; + jobDetailInputdetail.TransferLibToLocationCode = jobDetailInputdetail.TransferLibFromLocationCode; + jobDetailInputdetail.TransferLibToLocationErpCode = jobDetailInputdetail.TransferLibFromLocationErpCode; + jobDetailInputdetail.TransferLibToLocationGroup = jobDetailInputdetail.TransferLibFromLocationGroup; + } + } + + /// + /// 判断是不是在立体库 + /// + /// + /// + private async Task CheckDimensionalStorehouseAsync(CoatingIssueJobEditInput input) + { + var jobDetailInputdetail = input.Details.FirstOrDefault(); + + var loctionDto = await _locationAppService.GetByCodeAsync(jobDetailInputdetail.RecommendFromLocationCode) + .ConfigureAwait(false); + + if (loctionDto.Type == EnumLocationType.DimensionalStorehouse) + { + input.JobStatus = EnumJobStatus.Wait; + } + } - return; + /// + /// 判断是不是在立体库 + /// + /// + /// + private async Task CheckDimensionalStorehouseAsync(CoatingIssueJobDTO coatingIssueJobDto) + { + var jobDetailInputdetail = coatingIssueJobDto.Details.FirstOrDefault(); + + var loctionDto = await _locationAppService.GetByCodeAsync(jobDetailInputdetail.RecommendFromLocationCode) + .ConfigureAwait(false); + + if (loctionDto.Type == EnumLocationType.DimensionalStorehouse) + { + //TODO 立体库 + var ret = await SyncIssueJobStereoAsync(new List { coatingIssueJobDto }, loctionDto.Code).ConfigureAwait(false); + if (ret.Code != "1") + { + throw new UserFriendlyException($"调用立体库不成功!原因:{ret.Message}"); + } + } + + + } + + /// + /// 修改当前任务状态 和 该任务的请求状态 + /// + /// + /// + /// + /// + /// + private async Task UpdateRequestAndjobStatusDoneAsync(CoatingIssueJob coatingIssueJob, + CoatingIssueJobDetailDTO coatingIssueJobDetailDto, decimal handledToQty) + { + if (coatingIssueJob.JobStatus is EnumJobStatus.Closed or EnumJobStatus.Cancelled or EnumJobStatus.None + or EnumJobStatus.Done) //需要考虑下 多次提交的问题 所以不判断 进行中 + { + throw new UserFriendlyException( + $"任务状态错误:编号为【{coatingIssueJob.Number}】的任务状态为【{coatingIssueJob.JobStatus.GetDisplayName()}】"); + } + + coatingIssueJob.JobStatus = EnumJobStatus.Done; + + await RemoveExpectOutAsync(coatingIssueJob, coatingIssueJobDetailDto, handledToQty).ConfigureAwait(false); + + //await _expectOutAppService.RemoveByNumberAsync(coatingIssueJob.Number).ConfigureAwait(false); + + await CoatingIssueRequestAppService.UpdateStatusCompletedAsync(coatingIssueJob.CoatingRequestNumber) + .ConfigureAwait(false); + + await Task.CompletedTask.ConfigureAwait(false); } + private async Task RemoveExpectOutAsync(CoatingIssueJob coatingIssueJob, CoatingIssueJobDetailDTO coatingIssueJobDetailDto, + decimal handledToQty) + { + await _expectOutAppService.RemoveByNumberAndInventoryAsync(coatingIssueJob.Number, + coatingIssueJobDetailDto.ItemCode, + coatingIssueJobDetailDto.HandledToLocationCode, coatingIssueJobDetailDto.HandledToPackingCode, + coatingIssueJobDetailDto.Status, coatingIssueJobDetailDto.HandledToLot, + handledToQty).ConfigureAwait(false); + } - //[HttpPost("sync-issue-job-stereo")] - //public virtual async Task SyncCoatingJobStereoAsync(List input) - //{ - - // ReusltObject ret=new ReusltObject(); - // ret.Code = "1"; - // ret.Message = "操作成功"; - // ret.OperateTime = DateTime.Now.ToString("yyyy-MM-dd"); - - // List IssueJobToRestoDetailDTOs = new List(); - // IssueJobToRestoDTO main=new IssueJobToRestoDTO(); - // main.OperatorName=CurrentUser.UserName; - // foreach (var job in input) - // { - // foreach (var jobitem in job.Details) - // { - // IssueJobToRestoDetailDTOs.Add(new IssueJobToRestoDetailDTO() - // { - // Count=jobitem.HandledToQty, - // ProductNo=jobitem.ItemCode, - // NeedSite=jobitem.HandledToLocationCode, - // WorkNo=job.Number, - // TaskNo=job.Number - // }); - // } - // } - // main.Details=IssueJobToRestoDetailDTOs; - - // #region - // IssueJobToRestoClient client = new IssueJobToRestoClient(_options.Value.Address, _httpClientFactory.CreateClient()); - // ret = await client.SyncIssueJobStereoAsync(main).ConfigureAwait(false); - // #endregion - // return ret; - - //} - - - - - //[HttpPost("receive-issue-job-stereo")] - //public virtual async Task SyncReciveCoatingJobStereoAsync(IssueRequestFromRestoDTO input) - //{ - // List errors = new List(); - // var ret=new ReusltObject() - // { - // Code = "1", - // OperateTime = DateTime.Now.ToString("yyyy-MM-dd"), - // Message = "操作成功" - // }; - // try - // { - // if (input.Jobs.Count > 0) - // { - // var inputs = input.Jobs; - // var numbers = inputs.Select(p => p.JobNumber); - // var query = _repository.WithDetails() - // .Where(p => numbers.Contains(p.Number)); - // var entities = query.ToList(); - - // if (input.Jobs.Count == entities.Count) { - // errors.Add("出库任务和WMS出库任务不符,请核对! \n"); - // } - // var dtos = ObjectMapper.Map, List>(entities); - // foreach (var itm in dtos) - // { - // var first = inputs.FirstOrDefault(p => p.JobNumber == itm.Number); - - // var itmDetails = itm.Details; - // List details = new List(); - // foreach (var detail in first.Details) - // { - // var entity=itmDetails.FirstOrDefault(p => p.ItemCode == detail.ItemCode); - // CoatingIssueJobDetailDTO dto = new CoatingIssueJobDetailDTO(); - // dto.HandledFromLocationCode = entity.HandledFromContainerCode; - // dto.HandledToLocationCode = entity.HandledToLocationCode; - // dto.ItemCode = detail.ItemCode; - // dto.RecommendFromQty = detail.Qty; - // dto.RecommendToQty = detail.Qty; - // dto.HandledFromQty = detail.Qty; - // dto.HandledToQty = detail.Qty; - // details.Add(dto); - // } - // itm.Details = details; - // await CompleteAsync(itm.Id, itm).ConfigureAwait(false); - // } - - // } - // else - // { - // errors.Add("立体库确认单据里无数据! \n"); - // } - // } - // catch (Exception ex) - // { - // ret=new ReusltObject() - // { - // Code = "2", - // OperateTime = DateTime.Now.ToString("yyyy-MM-dd"), - // Message = ex.Message - // }; - // return ret; - // } - - // if (errors.Count > 0) - // { - - // ret= new ReusltObject() - // { - // Code = "2", - // OperateTime = DateTime.Now.ToString("yyyy-MM-dd"), - // Message = string.Join(",",errors.ToArray()) - // }; - // } - // return ret; - //} - - - - - - - - - + #endregion } diff --git a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Jobs/IssueJobs/CoatingIssueJobs/CoatingIssueJobAutoMapperProfile.cs b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Jobs/IssueJobs/CoatingIssueJobs/CoatingIssueJobAutoMapperProfile.cs index 3a3a961e5..ab712ae9c 100644 --- a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Jobs/IssueJobs/CoatingIssueJobs/CoatingIssueJobAutoMapperProfile.cs +++ b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Jobs/IssueJobs/CoatingIssueJobs/CoatingIssueJobAutoMapperProfile.cs @@ -2,7 +2,6 @@ using AutoMapper; using Volo.Abp.AutoMapper; using Win_in.Sfs.Wms.Store.Application.Contracts; using Win_in.Sfs.Wms.Store.Domain; -using Win_in.Sfs.Wms.Store.Jobs.IssueJobs; namespace Win_in.Sfs.Wms.Store.Application; @@ -13,8 +12,6 @@ public partial class StoreApplicationAutoMapperProfile : Profile CreateMap() .ReverseMap(); - //CreateMap(); - CreateMap() ; diff --git a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Notes/IssueNotes/CoatingIssueNotes/CoatingIssueNoteAppService.cs b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Notes/IssueNotes/CoatingIssueNotes/CoatingIssueNoteAppService.cs index 9259126d2..e028685eb 100644 --- a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Notes/IssueNotes/CoatingIssueNotes/CoatingIssueNoteAppService.cs +++ b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Notes/IssueNotes/CoatingIssueNotes/CoatingIssueNoteAppService.cs @@ -14,12 +14,11 @@ 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; -using Win_in.Sfs.Wms.Store.Notes.IssueNotes; namespace Win_in.Sfs.Wms.Store.Application; [Authorize] -[Route($"{StoreConsts.RootPath}coating-note")] +[Route($"{StoreConsts.RootPath}coating-issue-note")] public class CoatingIssueNoteAppService : SfsStoreWithDetailsAppServiceBase, @@ -60,6 +59,4 @@ public class CoatingIssueNoteAppService : return ObjectMapper.Map(coatingIssueNote); } - - } diff --git a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Notes/IssueNotes/CoatingIssueNotes/CoatingIssueNoteAutoMapperProfile.cs b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Notes/IssueNotes/CoatingIssueNotes/CoatingIssueNoteAutoMapperProfile.cs index 360a0df6d..83451121d 100644 --- a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Notes/IssueNotes/CoatingIssueNotes/CoatingIssueNoteAutoMapperProfile.cs +++ b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Notes/IssueNotes/CoatingIssueNotes/CoatingIssueNoteAutoMapperProfile.cs @@ -2,8 +2,6 @@ using AutoMapper; using Volo.Abp.AutoMapper; using Win_in.Sfs.Wms.Store.Application.Contracts; using Win_in.Sfs.Wms.Store.Domain; -using Win_in.Sfs.Wms.Store.Notes.IssueNotes; - namespace Win_in.Sfs.Wms.Store.Application; diff --git a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Requests/IssuelRequests/CoatingIssueRequests/CoatingIssueRequestAppService.cs b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Requests/IssuelRequests/CoatingIssueRequests/CoatingIssueRequestAppService.cs index bef19ed95..a9142a43a 100644 --- a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Requests/IssuelRequests/CoatingIssueRequests/CoatingIssueRequestAppService.cs +++ b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Requests/IssuelRequests/CoatingIssueRequests/CoatingIssueRequestAppService.cs @@ -1,80 +1,68 @@ 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 Castle.Components.DictionaryAdapter; using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Mvc; -using Microsoft.EntityFrameworkCore; +using NUglify.Helpers; 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; -using Win_in.Sfs.Wms.Store.Requests.MaterialRequests; namespace Win_in.Sfs.Wms.Store.Application; /// -/// 喷涂叫料 +/// 喷涂叫料申请 /// [Authorize] -[Route($"{StoreConsts.RootPath}coating-request")] +[Route($"{StoreConsts.RootPath}coating-issue-request")] public class CoatingIssueRequestAppService : SfsStoreRequestAppServiceBase, ICoatingIssueRequestAppService { - private readonly ICoatingIssueRequestManager _coatingMaterialRequestManager; + private readonly ICoatingIssueRequestManager _coatingIssueRequestManager; private readonly IItemStoreRelationAppService _itemStoreRelationApp; private readonly IAreaAppService _areaApp; private readonly ILocationAppService _locationAppService; private readonly IItemBasicAppService _itemBasicAppService; - private readonly IProductionLineAppService _productionLineAppService; + private readonly IProductionLineAppService _productionLineAppService; + private readonly ICoatingIssueJobAppService _coatingIssueJobAppService; + private readonly ITransactionTypeAppService _transactionTypeAppService; public CoatingIssueRequestAppService( ICoatingIssueRequestRepository repository, - ICoatingIssueRequestManager coatingMaterialRequestManager, + ICoatingIssueRequestManager coatingIssueRequestManager, IPreparationPlanManager preparationPlanManager, IItemStoreRelationAppService itemStoreRelationApp, IAreaAppService areaApp, ILocationAppService locationAppService, IItemBasicAppService itemBasicAppService, IProductionLineAppService productionLineAppService, - ITransactionTypeAppService transactionTypeAppService - ) - : base(repository, coatingMaterialRequestManager) + ITransactionTypeAppService transactionTypeAppService, ICoatingIssueJobAppService coatingIssueJobAppService) + : base(repository, coatingIssueRequestManager) { - _coatingMaterialRequestManager = coatingMaterialRequestManager; + _coatingIssueRequestManager = coatingIssueRequestManager; _itemStoreRelationApp = itemStoreRelationApp; _areaApp = areaApp; _locationAppService = locationAppService; _itemBasicAppService = itemBasicAppService; - _productionLineAppService = productionLineAppService; + _productionLineAppService = productionLineAppService; + _transactionTypeAppService = transactionTypeAppService; + _coatingIssueJobAppService = coatingIssueJobAppService; } public override async Task HandleAsync(Guid id) { - await Task.CompletedTask.ConfigureAwait(false); - return null; + return await base.HandleAsync(id).ConfigureAwait(false); } - - [HttpPost("")] public override async Task CreateAsync(CoatingIssueRequestEditInput input) { @@ -86,18 +74,22 @@ public class CoatingIssueRequestAppService : SfsStoreRequestAppServiceBase(input); - var result = await _coatingMaterialRequestManager.CreateByNumberAsync(entity).ConfigureAwait(false); + var result = await _coatingIssueRequestManager.CreateByNumberAsync(entity).ConfigureAwait(false); var dto = ObjectMapper.Map(result); @@ -122,13 +115,14 @@ public class CoatingIssueRequestAppService : SfsStoreRequestAppServiceBase - /// 赋值Request业务属性 + /// 赋值Request业务属性 /// /// /// private async Task SetRequestAutoPropertiesAsync(CoatingIssueRequestEditInput 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; @@ -140,15 +134,239 @@ public class CoatingIssueRequestAppService : SfsStoreRequestAppServiceBase CreateAndHandleAsync(CoatingIssueRequestEditInput input) { - var coatingMaterialRequestDto = await CreateAsync(input).ConfigureAwait(false); + var coatingIssueRequestDto = await CreateAsync(input).ConfigureAwait(false); + + //await HandleAsync(coatingIssueRequestDto.Id).ConfigureAwait(false); + + return coatingIssueRequestDto; + } + + public override async Task CancelAsync(Guid id) + { + var request = await _repository.GetAsync(id).ConfigureAwait(false); + + var list = await _coatingIssueJobAppService.GetByRequestNumberAsync(request.Number).ConfigureAwait(false); + if (list.Any()) + { + foreach (var coatingIssueJobDto in list) + { + if (coatingIssueJobDto.JobStatus == EnumJobStatus.Open || + coatingIssueJobDto.JobStatus == EnumJobStatus.Partial || + coatingIssueJobDto.JobStatus == EnumJobStatus.Doing || + coatingIssueJobDto.JobStatus == EnumJobStatus.Wait) + { + await _coatingIssueJobAppService.CancelAsync(coatingIssueJobDto.Id).ConfigureAwait(false); + } + } + } + + if (request.RequestStatus == EnumRequestStatus.Partial || request.RequestStatus == EnumRequestStatus.Handling || + request.RequestStatus == EnumRequestStatus.New) + { + request.RequestStatus = EnumRequestStatus.Cancelled; + await _repository.UpdateAsync(request).ConfigureAwait(false); + } + else + { + throw new UserFriendlyException($"【{request.RequestStatus.GetDisplayName()}】状态不允许取消"); + } + + return ObjectMapper.Map(request); + } + + [HttpPost("UpdateStatusCompleted")] + public async Task UpdateStatusCompletedAsync(string number) + { + var coatingIssueRequest = await _repository.FindAsync(p => p.Number == number).ConfigureAwait(false); + + await UpdateCoatingIssueRequestDetailQtyAsync(coatingIssueRequest, new EditableList()) + .ConfigureAwait(false); + + var coatingIssueJobDtos = await _coatingIssueJobAppService.GetByRequestNumberAsync(coatingIssueRequest.Number) + .ConfigureAwait(false); + + if (coatingIssueJobDtos.Any(p => + p.JobStatus == EnumJobStatus.Open || p.JobStatus == EnumJobStatus.Doing || + p.JobStatus == EnumJobStatus.Partial)) + { + return; + } + + var flag = true; + + foreach (var detail in coatingIssueRequest.Details) + { + if (detail.Qty >= detail.IssuedQty) + { + flag = false; + return; + } + } + + if (flag) + { + CheckStatus(EnumRequestStatus.Completed, coatingIssueRequest.RequestStatus); + coatingIssueRequest.RequestStatus = EnumRequestStatus.Completed; + await _repository.UpdateAsync(coatingIssueRequest).ConfigureAwait(false); + } + } + + /// + /// 修改请求的 已发 已收数量 + /// + /// + /// + /// + private async Task UpdateCoatingIssueRequestDetailQtyAsync(CoatingIssueRequest coatingIssueRequest, + List addCoatingIssueJobDtos) + { + //原有任务 + var existCoatingIssueJobDtos = await _coatingIssueJobAppService + .GetByRequestNumberAsync(coatingIssueRequest.Number) + .ConfigureAwait(false); + + //新增的任务和已有的任务总和 + var allCoatingIssueJobDtos = new List(); + allCoatingIssueJobDtos.AddRange(addCoatingIssueJobDtos); + allCoatingIssueJobDtos.AddRange(existCoatingIssueJobDtos); + + var groupByItemCodeLocationCode = coatingIssueRequest.Details.GroupBy(p => + new { p.ItemCode, p.ToLocationCode }); + foreach (var group in groupByItemCodeLocationCode) + { + foreach (var requestDetail in group) + { + //所有已发数量 + decimal allIssuedQty = 0; + + //所有已发数量 + decimal allReceivedQty = 0; + + foreach (var allCoatingIssueJobDto in allCoatingIssueJobDtos) + { + var jobDetailDtos = allCoatingIssueJobDto.Details.Where(p => + p.ItemCode == group.Key.ItemCode && p.RequestLocationCode == group.Key.ToLocationCode); + //所有已发数量 + allIssuedQty += jobDetailDtos.Sum(p => p.RequestQty); + //所有已发数量 + allReceivedQty += jobDetailDtos.Sum(p => p.HandledToQty); + } + + requestDetail.IssuedQty += allIssuedQty; + requestDetail.ReceivedQty += allReceivedQty; + } + } + + await _repository.UpdateAsync(coatingIssueRequest).ConfigureAwait(false); + } + + [HttpPost("IsHasNewJob")] + public async Task IsHasNewJobAsync(string requestNumber, List jobNumber) + { + var joblIssueJobDtos = + await _coatingIssueJobAppService.GetByRequestNumberAsync(requestNumber).ConfigureAwait(false); + if (joblIssueJobDtos != null && joblIssueJobDtos.Any()) + { + var jobNumberList = joblIssueJobDtos.Select(p => p.Number); + + var difference = jobNumberList.Except(jobNumber); + if (difference.Any()) + { + var result = "已生成任务号"; + difference.ForEach(p => result += "【" + p + "】"); + result += "的任务"; + return result; + } + + return "无任务生成,请检查库存"; + } + + return "无任务生成,请检查库存"; + } + + public override async Task CompleteAsync(Guid id) + { + var coatingIssueRequest = await _repository.GetAsync(id).ConfigureAwait(false); + if (coatingIssueRequest.RequestStatus == EnumRequestStatus.Handling || + coatingIssueRequest.RequestStatus == EnumRequestStatus.Partial || + coatingIssueRequest.RequestStatus == EnumRequestStatus.New) + { + coatingIssueRequest.RequestStatus = EnumRequestStatus.Completed; + } + else + { + throw new UserFriendlyException($"【{coatingIssueRequest.RequestStatus.GetDisplayName()}】状态不允许完成"); + } - await HandleAsync(coatingMaterialRequestDto.Id).ConfigureAwait(false); + await _coatingIssueJobAppService.CompleteByRequestNumberAsync(coatingIssueRequest.Number).ConfigureAwait(false); - return coatingMaterialRequestDto; + return ObjectMapper.Map(await _repository.UpdateAsync(coatingIssueRequest) + .ConfigureAwait(false)); } #region 校验 + private void CheckStatus(EnumRequestStatus targetStatus, EnumRequestStatus nowStatus) + { + var validSourceStatuses = new List(); + switch (targetStatus) + { + case EnumRequestStatus.None: + break; + case EnumRequestStatus.New: + break; + case EnumRequestStatus.Reviewing: + validSourceStatuses = new List { EnumRequestStatus.New }; + break; + case EnumRequestStatus.Refused: + validSourceStatuses = new List { EnumRequestStatus.Reviewing }; + break; + case EnumRequestStatus.Agreed: + validSourceStatuses = new List { EnumRequestStatus.Reviewing }; + break; + case EnumRequestStatus.Handling: + validSourceStatuses = new List + { + EnumRequestStatus.Agreed, EnumRequestStatus.Partial + }; + break; + case EnumRequestStatus.Completed: + validSourceStatuses = new List + { + EnumRequestStatus.Handling, EnumRequestStatus.Partial + }; + break; + case EnumRequestStatus.Cancelled: + validSourceStatuses = new List + { + EnumRequestStatus.New, EnumRequestStatus.Reviewing, EnumRequestStatus.Agreed + }; + break; + case EnumRequestStatus.Abort: + validSourceStatuses = new List + { + EnumRequestStatus.Handling, EnumRequestStatus.Partial + }; + break; + case EnumRequestStatus.Partial: + { + validSourceStatuses = new List + { + EnumRequestStatus.Handling, EnumRequestStatus.Partial + }; + break; + } + default: + throw new ArgumentOutOfRangeException(nameof(targetStatus), targetStatus, null); + } + + if (!validSourceStatuses.Contains(nowStatus)) + { + throw new UserFriendlyException( + $"当前状态为 {nowStatus.GetDisplayName()} ,无法变更为 {targetStatus.GetDisplayName()}"); + } + } + private void CheckItemBasic(ItemBasicDTO itemBasicDto, string itemCode) { if (itemBasicDto == null) @@ -164,9 +382,18 @@ public class CoatingIssueRequestAppService : SfsStoreRequestAppServiceBase /// 涂装发料任务 @@ -23,26 +22,23 @@ public class CoatingIssueJob : SfsJobAggregateRootBase /// /// 生产线 /// - [IgnoreUpdate] public string ProdLine { get; set; } /// - /// 要货单号 + /// 要料单号 /// - [IgnoreUpdate] - public string MaterialRequestNumber { get; set; } + public string CoatingRequestNumber { get; set; } /// /// 使用在途库 /// [Display(Name = "使用在途库")] - [IgnoreUpdate] public bool UseOnTheWayLocation { get; set; } /// /// 任务明细 /// - [IgnoreUpdate] - public override List Details { get; set; } = new List(); + public override List Details { get; set; } = new List(); + public EnumIssueSendType EnumIssueSendType { get; set; } } diff --git a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain/Jobs/IssueJobs/CoatingIssueJobs/CoatingIssueJobDetail.cs b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain/Jobs/IssueJobs/CoatingIssueJobs/CoatingIssueJobDetail.cs index 63e971b43..58352f238 100644 --- a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain/Jobs/IssueJobs/CoatingIssueJobs/CoatingIssueJobDetail.cs +++ b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain/Jobs/IssueJobs/CoatingIssueJobs/CoatingIssueJobDetail.cs @@ -8,7 +8,6 @@ namespace Win_in.Sfs.Wms.Store.Domain; public class CoatingIssueJobDetail : SfsDetailEntityBase { - #region 库存基础信息 /// diff --git a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain/Jobs/IssueJobs/CoatingIssueJobs/CoatingIssueJobManager.cs b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain/Jobs/IssueJobs/CoatingIssueJobs/CoatingIssueJobManager.cs index a8c38adc9..c57029b71 100644 --- a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain/Jobs/IssueJobs/CoatingIssueJobs/CoatingIssueJobManager.cs +++ b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain/Jobs/IssueJobs/CoatingIssueJobs/CoatingIssueJobManager.cs @@ -10,7 +10,6 @@ using Volo.Abp.Users; using Volo.Abp.Validation; using Win_in.Sfs.Shared.Domain.Shared; using Win_in.Sfs.Wms.Inventory.Application.Contracts; -using Win_in.Sfs.Wms.Store.Jobs.IssueJobs; namespace Win_in.Sfs.Wms.Store.Domain; @@ -18,14 +17,14 @@ public class CoatingIssueJobManager : SfsJobManagerBase @@ -38,7 +37,6 @@ public class CoatingIssueJobManager : SfsJobManagerBase CompleteAsync(CoatingIssueJob input, ICurrentUser user) { var entity = await Repository.FindAsync(input.Id).ConfigureAwait(false); - var inputDetail = input.Details.First(); var detail = entity.Details.First(); @@ -54,7 +52,6 @@ public class CoatingIssueJobManager : SfsJobManagerBase { diff --git a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain/Jobs/IssueJobs/CoatingIssueJobs/ICoatingIssueJobRepository.cs b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain/Jobs/IssueJobs/CoatingIssueJobs/ICoatingIssueJobRepository.cs index fb7c9e112..67e324295 100644 --- a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain/Jobs/IssueJobs/CoatingIssueJobs/ICoatingIssueJobRepository.cs +++ b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain/Jobs/IssueJobs/CoatingIssueJobs/ICoatingIssueJobRepository.cs @@ -1,6 +1,4 @@ -using Win_in.Sfs.Wms.Store.Domain; - -namespace Win_in.Sfs.Wms.Store.Jobs.IssueJobs; +namespace Win_in.Sfs.Wms.Store.Domain; public interface ICoatingIssueJobRepository : ISfsJobRepositoryBase { diff --git a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain/Jobs/IssueJobs/CoatingIssueJobs/ICoatingssueExtension.cs b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain/Jobs/IssueJobs/CoatingIssueJobs/ICoatingssueExtension.cs deleted file mode 100644 index f31192512..000000000 --- a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain/Jobs/IssueJobs/CoatingIssueJobs/ICoatingssueExtension.cs +++ /dev/null @@ -1,55 +0,0 @@ -using Volo.Abp.Timing; -using Win_in.Sfs.Shared.Domain.Shared; -using Win_in.Sfs.Wms.Store.Domain; - -namespace Win_in.Sfs.Wms.Store.Jobs.IssueJobs; - -public static class CoatingIssueExtension -{ - // public static IssueJob SetDetails(this IssueJob job,IGuidGenerator guidGenerator, LocationDTO location) - // { - // foreach (var detail in job.Details) - // { - // detail.SetIdAndNumber(guidGenerator,job.Id,job.Number); - // detail.RecommendLocationCode = location.Code; - // detail.SetBatch(detail.RecommendBatch); - // } - // return job; - // } - - public static IssueJob Init(this IssueJob job) - { - job.JobType = EnumJobType.IssueJob; - job.JobStatus = EnumJobStatus.Open; - return job; - } - - public static IssueJob SetWorkGroup(this IssueJob job, string warehouseCode, string workGroupCode, string groupCode) - { - job.WorkGroupCode = workGroupCode; - job.WarehouseCode = warehouseCode; - job.ProdLine = groupCode; - return job; - } - - public static IssueJob SetWorker(this IssueJob job, string worker) - { - job.Worker = worker; - return job; - } - - public static IssueJob SetPriority(this IssueJob job, IClock clock) - { - job.Priority = PriorityHelper.GetPriority(clock); - job.PriorityIncrement = 1; - return job; - } - - // public static IssueJob SetIdAndNumber(this IssueJob job,IGuidGenerator guidGenerator, ISnowflakeIdGenerator numberGenerator) - // { - // var number = (numberGenerator.CreateAsync().GetAwaiter().GetResult()).ToString(); - // job.SetIdAndNumber(guidGenerator, number); - // return job; - // } - -} diff --git a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain/Notes/IssueNotes/CoatingIssueNotes/CoatingIssueNote.cs b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain/Notes/IssueNotes/CoatingIssueNotes/CoatingIssueNote.cs index 5c3280457..cbaf80839 100644 --- a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain/Notes/IssueNotes/CoatingIssueNotes/CoatingIssueNote.cs +++ b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain/Notes/IssueNotes/CoatingIssueNotes/CoatingIssueNote.cs @@ -4,12 +4,11 @@ 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; +namespace Win_in.Sfs.Wms.Store.Domain; /// -/// 喷涂叫料申请 +/// 涂装叫料记录 /// public class CoatingIssueNote : SfsStoreAggregateRootBase, IHasJobNumber, IHasRequestNumber { @@ -22,12 +21,9 @@ public class CoatingIssueNote : SfsStoreAggregateRootBase /// 明细列表 /// - [IgnoreUpdate] public override List Details { get; set; } = new List(); - [IgnoreUpdate] public string RequestNumber { get; set; } - /// /// 叫料类型 /// @@ -37,14 +33,12 @@ public class CoatingIssueNote : SfsStoreAggregateRootBase /// 使用在途库 /// - [IgnoreUpdate] public bool UseOnTheWayLocation { get; set; } /// /// 确认时间 /// [Display(Name = "确认时间")] - [IgnoreUpdate] public DateTime? ConfirmTime { get; set; } /// @@ -53,6 +47,8 @@ public class CoatingIssueNote : SfsStoreAggregateRootBase, ICoatingIssueNoteManager { diff --git a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain/Notes/IssueNotes/CoatingIssueNotes/ICoatingIssueNoteManager.cs b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain/Notes/IssueNotes/CoatingIssueNotes/ICoatingIssueNoteManager.cs index 35fbcd208..af4d43f9d 100644 --- a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain/Notes/IssueNotes/CoatingIssueNotes/ICoatingIssueNoteManager.cs +++ b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain/Notes/IssueNotes/CoatingIssueNotes/ICoatingIssueNoteManager.cs @@ -1,8 +1,7 @@ using System; using System.Threading.Tasks; -using Win_in.Sfs.Wms.Store.Domain; -namespace Win_in.Sfs.Wms.Store.Notes.IssueNotes; +namespace Win_in.Sfs.Wms.Store.Domain; public interface ICoatingIssueNoteManager : ISfsStoreManager { diff --git a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain/Notes/IssueNotes/CoatingIssueNotes/ICoatingIssueNoteRepository.cs b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain/Notes/IssueNotes/CoatingIssueNotes/ICoatingIssueNoteRepository.cs index 267b6b1f8..ec4d9f2a5 100644 --- a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain/Notes/IssueNotes/CoatingIssueNotes/ICoatingIssueNoteRepository.cs +++ b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain/Notes/IssueNotes/CoatingIssueNotes/ICoatingIssueNoteRepository.cs @@ -1,6 +1,4 @@ -using Win_in.Sfs.Wms.Store.Domain; - -namespace Win_in.Sfs.Wms.Store.Notes.IssueNotes; +namespace Win_in.Sfs.Wms.Store.Domain; public interface ICoatingIssueNoteRepository : ISfsStoreRepositoryBase { diff --git a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain/Requests/IssueRequests/CoatingIssuelRequests/CoatingIssueRequest.cs b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain/Requests/IssueRequests/CoatingIssuelRequests/CoatingIssueRequest.cs index 93d695326..ccb0274f7 100644 --- a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain/Requests/IssueRequests/CoatingIssuelRequests/CoatingIssueRequest.cs +++ b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain/Requests/IssueRequests/CoatingIssuelRequests/CoatingIssueRequest.cs @@ -2,9 +2,8 @@ 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; +namespace Win_in.Sfs.Wms.Store.Domain; /// /// 喷涂叫料申请 diff --git a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain/Requests/IssueRequests/CoatingIssuelRequests/CoatingIssueRequestDetail.cs b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain/Requests/IssueRequests/CoatingIssuelRequests/CoatingIssueRequestDetail.cs index 72a5ef4a9..3600e4a38 100644 --- a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain/Requests/IssueRequests/CoatingIssuelRequests/CoatingIssueRequestDetail.cs +++ b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain/Requests/IssueRequests/CoatingIssuelRequests/CoatingIssueRequestDetail.cs @@ -3,9 +3,8 @@ 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.Wms.Store.Domain; -namespace Win_in.Sfs.Wms.Store.Requests.MaterialRequests; +namespace Win_in.Sfs.Wms.Store.Domain; public class CoatingIssueRequestDetail : SfsStoreDetailWithQtyEntityBase, IHasToLocation { diff --git a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain/Requests/IssueRequests/CoatingIssuelRequests/CoatingIssueRequestManager.cs b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain/Requests/IssueRequests/CoatingIssuelRequests/CoatingIssueRequestManager.cs index ed2b3a489..26615b133 100644 --- a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain/Requests/IssueRequests/CoatingIssuelRequests/CoatingIssueRequestManager.cs +++ b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain/Requests/IssueRequests/CoatingIssuelRequests/CoatingIssueRequestManager.cs @@ -1,15 +1,10 @@ -using System; using System.Collections.Generic; using System.Linq; using System.Threading.Tasks; -using DocumentFormat.OpenXml.Math; using Win_in.Sfs.Shared.Domain.Shared; using Win_in.Sfs.Shared.Event; -using Win_in.Sfs.Wms.Store.Domain; -using Win_in.Sfs.Wms.Store.Jobs.IssueJobs; -using static Win_in.Sfs.Wms.Store.Domain.Shared.StoreSettings; -namespace Win_in.Sfs.Wms.Store.Requests.MaterialRequests; +namespace Win_in.Sfs.Wms.Store.Domain; public class CoatingIssueRequestManager : SfsStoreRequestManagerBase diff --git a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain/Requests/IssueRequests/CoatingIssuelRequests/ICoatingIssueRequestManager.cs b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain/Requests/IssueRequests/CoatingIssuelRequests/ICoatingIssueRequestManager.cs index cc47111f5..9354bccb8 100644 --- a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain/Requests/IssueRequests/CoatingIssuelRequests/ICoatingIssueRequestManager.cs +++ b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain/Requests/IssueRequests/CoatingIssuelRequests/ICoatingIssueRequestManager.cs @@ -1,10 +1,8 @@ using System.Threading.Tasks; -using Win_in.Sfs.Wms.Store.Domain; - -namespace Win_in.Sfs.Wms.Store.Requests.MaterialRequests; - using Win_in.Sfs.Shared.Domain; +namespace Win_in.Sfs.Wms.Store.Domain; + public interface ICoatingIssueRequestManager : ISfsStoreRequestManager, IBulkImportService { diff --git a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain/Requests/IssueRequests/CoatingIssuelRequests/ICoatingIssueRequestRepository.cs b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain/Requests/IssueRequests/CoatingIssuelRequests/ICoatingIssueRequestRepository.cs index 4fab6934a..c4d746009 100644 --- a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain/Requests/IssueRequests/CoatingIssuelRequests/ICoatingIssueRequestRepository.cs +++ b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain/Requests/IssueRequests/CoatingIssuelRequests/ICoatingIssueRequestRepository.cs @@ -1,7 +1,6 @@ using Win_in.Sfs.Shared.Domain; -using Win_in.Sfs.Wms.Store.Domain; -namespace Win_in.Sfs.Wms.Store.Requests.MaterialRequests; +namespace Win_in.Sfs.Wms.Store.Domain; public interface ICoatingIssueRequestRepository : ISfsStoreRepositoryBase, ISfsBulkRepositoryBase diff --git a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.EntityFrameworkCore/IStoreDbContext.cs b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.EntityFrameworkCore/IStoreDbContext.cs index 7038db0fd..9c47ade9b 100644 --- a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.EntityFrameworkCore/IStoreDbContext.cs +++ b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.EntityFrameworkCore/IStoreDbContext.cs @@ -2,10 +2,6 @@ using Microsoft.EntityFrameworkCore; using Volo.Abp.Data; using Volo.Abp.EntityFrameworkCore; using Win_in.Sfs.Wms.Store.Domain; -using Win_in.Sfs.Wms.Store.Jobs.IssueJobs; -using Win_in.Sfs.Wms.Store.Notes.IssueNotes; -using Win_in.Sfs.Wms.Store.Requests.MaterialRequests; - namespace Win_in.Sfs.Wms.Store.EntityFrameworkCore; [ConnectionStringName(StoreDbProperties.ConnectionStringName)] diff --git a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.EntityFrameworkCore/Jobs/IssueJobs/CoatingIssueJob/CoatingIssueJobDbContextModelCreatingExtensions.cs b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.EntityFrameworkCore/Jobs/IssueJobs/CoatingIssueJob/CoatingIssueJobDbContextModelCreatingExtensions.cs index 304324f4f..36a81f0f4 100644 --- a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.EntityFrameworkCore/Jobs/IssueJobs/CoatingIssueJob/CoatingIssueJobDbContextModelCreatingExtensions.cs +++ b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.EntityFrameworkCore/Jobs/IssueJobs/CoatingIssueJob/CoatingIssueJobDbContextModelCreatingExtensions.cs @@ -3,7 +3,6 @@ using Volo.Abp.EntityFrameworkCore.Modeling; using Win_in.Sfs.Shared.Domain.Shared; using Win_in.Sfs.Shared.EntityFrameworkCore; using Win_in.Sfs.Wms.Store.Domain; -using Win_in.Sfs.Wms.Store.Jobs.IssueJobs; namespace Win_in.Sfs.Wms.Store.EntityFrameworkCore; @@ -22,7 +21,7 @@ public static class CoatingIssueJobDbContextModelCreatingExtensions //Configure Job base properties b.ConfigureJob(); //Properties - b.Property(q => q.MaterialRequestNumber).HasMaxLength(SfsPropertyConst.CodeLength); + b.Property(q => q.CoatingRequestNumber).HasMaxLength(SfsPropertyConst.CodeLength); b.Property(q => q.ProdLine).HasMaxLength(SfsPropertyConst.CodeLength); b.Property(q => q.JobType).HasConversion(); b.Property(q => q.JobStatus).HasConversion(); diff --git a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.EntityFrameworkCore/Jobs/IssueJobs/CoatingIssueJob/CoatingIssueJobEfCoreRepository.cs b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.EntityFrameworkCore/Jobs/IssueJobs/CoatingIssueJob/CoatingIssueJobEfCoreRepository.cs index c8239166a..ef96924b9 100644 --- a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.EntityFrameworkCore/Jobs/IssueJobs/CoatingIssueJob/CoatingIssueJobEfCoreRepository.cs +++ b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.EntityFrameworkCore/Jobs/IssueJobs/CoatingIssueJob/CoatingIssueJobEfCoreRepository.cs @@ -1,5 +1,5 @@ using Volo.Abp.EntityFrameworkCore; -using Win_in.Sfs.Wms.Store.Jobs.IssueJobs; +using Win_in.Sfs.Wms.Store.Domain; namespace Win_in.Sfs.Wms.Store.EntityFrameworkCore; diff --git a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.EntityFrameworkCore/Notes/IssueNotes/CoatingIssueNotes/CoatingIssueNoteDbContextModelCreatingExtensions.cs b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.EntityFrameworkCore/Notes/IssueNotes/CoatingIssueNotes/CoatingIssueNoteDbContextModelCreatingExtensions.cs index 361a3ed2e..553930608 100644 --- a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.EntityFrameworkCore/Notes/IssueNotes/CoatingIssueNotes/CoatingIssueNoteDbContextModelCreatingExtensions.cs +++ b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.EntityFrameworkCore/Notes/IssueNotes/CoatingIssueNotes/CoatingIssueNoteDbContextModelCreatingExtensions.cs @@ -2,7 +2,6 @@ using Microsoft.EntityFrameworkCore; using Volo.Abp.EntityFrameworkCore.Modeling; using Win_in.Sfs.Shared.Domain.Shared; using Win_in.Sfs.Wms.Store.Domain; -using Win_in.Sfs.Wms.Store.Notes.IssueNotes; namespace Win_in.Sfs.Wms.Store.EntityFrameworkCore; diff --git a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.EntityFrameworkCore/Notes/IssueNotes/CoatingIssueNotes/CoatingIssueNoteEfCoreRepository.cs b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.EntityFrameworkCore/Notes/IssueNotes/CoatingIssueNotes/CoatingIssueNoteEfCoreRepository.cs index 52079ada4..6ca2ca978 100644 --- a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.EntityFrameworkCore/Notes/IssueNotes/CoatingIssueNotes/CoatingIssueNoteEfCoreRepository.cs +++ b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.EntityFrameworkCore/Notes/IssueNotes/CoatingIssueNotes/CoatingIssueNoteEfCoreRepository.cs @@ -1,5 +1,5 @@ using Volo.Abp.EntityFrameworkCore; -using Win_in.Sfs.Wms.Store.Notes.IssueNotes; +using Win_in.Sfs.Wms.Store.Domain; namespace Win_in.Sfs.Wms.Store.EntityFrameworkCore; diff --git a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.EntityFrameworkCore/Requests/IssueRequests/CoatingIssueRequests/CoatingIssueRequestDbContextModelCreatingExtensions.cs b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.EntityFrameworkCore/Requests/IssueRequests/CoatingIssueRequests/CoatingIssueRequestDbContextModelCreatingExtensions.cs index b1c7ee6eb..680b691fb 100644 --- a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.EntityFrameworkCore/Requests/IssueRequests/CoatingIssueRequests/CoatingIssueRequestDbContextModelCreatingExtensions.cs +++ b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.EntityFrameworkCore/Requests/IssueRequests/CoatingIssueRequests/CoatingIssueRequestDbContextModelCreatingExtensions.cs @@ -1,7 +1,7 @@ using Microsoft.EntityFrameworkCore; using Volo.Abp.EntityFrameworkCore.Modeling; using Win_in.Sfs.Shared.Domain.Shared; -using Win_in.Sfs.Wms.Store.Requests.MaterialRequests; +using Win_in.Sfs.Wms.Store.Domain; namespace Win_in.Sfs.Wms.Store.EntityFrameworkCore; @@ -43,13 +43,16 @@ public static class CoatingIssueRequestDbContextModelCreatingExtensions b.Property(q => q.ToLocationErpCode).IsRequired().HasMaxLength(SfsPropertyConst.CodeLength); b.Property(q => q.ToWarehouseCode).IsRequired().HasMaxLength(SfsPropertyConst.CodeLength); b.Property(q => q.ToLocationArea).IsRequired().HasMaxLength(SfsPropertyConst.CodeLength); - b.Property(q => q.ToLocationGroup).IsRequired().HasMaxLength(SfsPropertyConst.CodeLength); - b.Property(q => q.ProdLine).HasMaxLength(SfsPropertyConst.CodeLength); + b.Property(q => q.ToLocationGroup).IsRequired().HasMaxLength(SfsPropertyConst.CodeLength); + b.Property(q => q.ProdLine).HasMaxLength(SfsPropertyConst.CodeLength); b.Property(q => q.IssuedQty).HasPrecision(18, 6); b.Property(q => q.ReceivedQty).HasPrecision(18, 6); b.Property(q => q.Status).HasMaxLength(SfsPropertyConst.NameLength).HasConversion(); + b.Property(q => q.PositionCode).HasMaxLength(SfsPropertyConst.CodeLength); b.Property(q => q.RecommendType).HasMaxLength(SfsPropertyConst.NameLength).HasConversion(); + //Relations + //Indexes b.HasIndex(q => new { q.Number, q.ItemCode, q.ToLocationCode }).IsUnique(); b.HasIndex(q => new { q.ItemCode }); diff --git a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.EntityFrameworkCore/Requests/IssueRequests/CoatingIssueRequests/CoatingIssueRequestEfCoreRepository.cs b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.EntityFrameworkCore/Requests/IssueRequests/CoatingIssueRequests/CoatingIssueRequestEfCoreRepository.cs index 333de3a54..b106620a9 100644 --- a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.EntityFrameworkCore/Requests/IssueRequests/CoatingIssueRequests/CoatingIssueRequestEfCoreRepository.cs +++ b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.EntityFrameworkCore/Requests/IssueRequests/CoatingIssueRequests/CoatingIssueRequestEfCoreRepository.cs @@ -1,5 +1,5 @@ using Volo.Abp.EntityFrameworkCore; -using Win_in.Sfs.Wms.Store.Requests.MaterialRequests; +using Win_in.Sfs.Wms.Store.Domain; namespace Win_in.Sfs.Wms.Store.EntityFrameworkCore; diff --git a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.EntityFrameworkCore/StoreDbContext.cs b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.EntityFrameworkCore/StoreDbContext.cs index 8ef095cd4..4f4d3453b 100644 --- a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.EntityFrameworkCore/StoreDbContext.cs +++ b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.EntityFrameworkCore/StoreDbContext.cs @@ -3,9 +3,6 @@ using Volo.Abp.Data; using Volo.Abp.EntityFrameworkCore; using Win_in.Sfs.Wms.Store.Domain; using Win_in.Sfs.Wms.Store.Equipments; -using Win_in.Sfs.Wms.Store.Jobs.IssueJobs; -using Win_in.Sfs.Wms.Store.Notes.IssueNotes; -using Win_in.Sfs.Wms.Store.Requests.MaterialRequests; namespace Win_in.Sfs.Wms.Store.EntityFrameworkCore; diff --git a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.EntityFrameworkCore/StoreEntityFrameworkCoreModule.cs b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.EntityFrameworkCore/StoreEntityFrameworkCoreModule.cs index 600f637f7..5bd2827ce 100644 --- a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.EntityFrameworkCore/StoreEntityFrameworkCoreModule.cs +++ b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.EntityFrameworkCore/StoreEntityFrameworkCoreModule.cs @@ -5,9 +5,6 @@ using Volo.Abp.EntityFrameworkCore.DependencyInjection; using Volo.Abp.Modularity; using Win_in.Sfs.Wms.Store.CountAdjustRequests; using Win_in.Sfs.Wms.Store.Domain; -using Win_in.Sfs.Wms.Store.Jobs.IssueJobs; -using Win_in.Sfs.Wms.Store.Notes.IssueNotes; -using Win_in.Sfs.Wms.Store.Requests.MaterialRequests; using Win_in.Sfs.Wms.Store.UnplannedIssueRequests; namespace Win_in.Sfs.Wms.Store.EntityFrameworkCore; diff --git a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Event/AutoMapperProfiles/Jobs/CoatingIssueJobAutoMapperProfile.cs b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Event/AutoMapperProfiles/Jobs/CoatingIssueJobAutoMapperProfile.cs index 47e024d74..7002ac320 100644 --- a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Event/AutoMapperProfiles/Jobs/CoatingIssueJobAutoMapperProfile.cs +++ b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Event/AutoMapperProfiles/Jobs/CoatingIssueJobAutoMapperProfile.cs @@ -5,8 +5,6 @@ using Win_in.Sfs.Shared.Application; 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.Jobs.IssueJobs; -using Win_in.Sfs.Wms.Store.Notes.IssueNotes; namespace Win_in.Sfs.Wms.Store.Event; @@ -17,7 +15,7 @@ public partial class StoreEventAutoMapperProfile : Profile CreateMap() .ForMember(x => x.JobNumber, y => y.MapFrom(d => d.Number)) - .ForMember(x => x.RequestNumber, y => y.MapFrom(d => d.MaterialRequestNumber)) + .ForMember(x => x.RequestNumber, y => y.MapFrom(d => d.CoatingRequestNumber)) .ForMember(x => x.ActiveDate, y => y.MapFrom(d => DateTime.Now)) .ForMember(x => x.Worker, y => y.MapFrom(d => d.CompleteUserName)) .Ignore(x => x.Confirmed) @@ -28,12 +26,21 @@ public partial class StoreEventAutoMapperProfile : Profile ; CreateMap() - .ForMember(x => x.RequestNumber, y => y.MapFrom(d => d.MaterialRequestNumber)) + .ForMember(x => x.RequestNumber, y => y.MapFrom(d => d.CoatingRequestNumber)) .Ignore(x => x.Confirmed) .Ignore(x => x.JobNumber) .Ignore(x => x.ActiveDate) ; CreateMap() ; + + CreateMap() + .ForMember(x => x.RequestNumber, y => y.MapFrom(d => d.CoatingRequestNumber)) + .Ignore(x => x.Confirmed) + .Ignore(x => x.JobNumber) + .Ignore(x => x.ActiveDate) + ; + CreateMap() + ; } } diff --git a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Event/AutoMapperProfiles/Notes/CoatingIssueNoteAutoMapperProfile.cs b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Event/AutoMapperProfiles/Notes/CoatingIssueNoteAutoMapperProfile.cs index f8137b8db..93a5cd986 100644 --- a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Event/AutoMapperProfiles/Notes/CoatingIssueNoteAutoMapperProfile.cs +++ b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Event/AutoMapperProfiles/Notes/CoatingIssueNoteAutoMapperProfile.cs @@ -2,7 +2,6 @@ using AutoMapper; using Volo.Abp.AutoMapper; using Win_in.Sfs.Wms.Inventory.Application.Contracts; using Win_in.Sfs.Wms.Store.Domain; -using Win_in.Sfs.Wms.Store.Notes.IssueNotes; namespace Win_in.Sfs.Wms.Store.Event; @@ -49,5 +48,4 @@ public partial class StoreEventAutoMapperProfile : Profile ; } - } diff --git a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Event/AutoMapperProfiles/Requests/CoatingMaterialRequestAutoMapperProfile.cs b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Event/AutoMapperProfiles/Requests/CoatingIssueRequestAutoMapperProfile.cs similarity index 86% rename from be/Modules/Store/src/Win_in.Sfs.Wms.Store.Event/AutoMapperProfiles/Requests/CoatingMaterialRequestAutoMapperProfile.cs rename to be/Modules/Store/src/Win_in.Sfs.Wms.Store.Event/AutoMapperProfiles/Requests/CoatingIssueRequestAutoMapperProfile.cs index 52b0a8ab1..b7e23ffd7 100644 --- a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Event/AutoMapperProfiles/Requests/CoatingMaterialRequestAutoMapperProfile.cs +++ b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Event/AutoMapperProfiles/Requests/CoatingIssueRequestAutoMapperProfile.cs @@ -4,8 +4,6 @@ using Win_in.Sfs.Shared.Application; 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.Jobs.IssueJobs; -using Win_in.Sfs.Wms.Store.Requests.MaterialRequests; namespace Win_in.Sfs.Wms.Store.Event; @@ -14,7 +12,7 @@ public partial class StoreEventAutoMapperProfile : Profile private void CoatingIssueRequestAutoMapperProfile() { CreateMap() - .ForMember(x => x.MaterialRequestNumber, y => y.MapFrom(d => d.Number)) + .ForMember(x => x.KittingRequestNumber, y => y.MapFrom(d => d.Number)) .Ignore(x => x.WarehouseCode) .Ignore(x => x.UpStreamJobNumber) .Ignore(x => x.JobType) @@ -32,7 +30,7 @@ public partial class StoreEventAutoMapperProfile : Profile .Ignore(x => x.CompleteUserName) .Ignore(x => x.CompleteTime) .Ignore(x => x.Details) + .Ignore(x => x.EnumIssueSendType) ; - } } diff --git a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Event/DataExchanges/AssembleIssueNoteEventHandler.cs b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Event/DataExchanges/AssembleIssueNoteEventHandler.cs index 8b0ef87ed..dc316c85f 100644 --- a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Event/DataExchanges/AssembleIssueNoteEventHandler.cs +++ b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Event/DataExchanges/AssembleIssueNoteEventHandler.cs @@ -7,7 +7,6 @@ using Win_in.Sfs.Shared.Domain; 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.Notes.IssueNotes; namespace Win_in.Sfs.Wms.Store.Event.DataExchanges; diff --git a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Event/DataExchanges/CoatingIssueNoteEventHandler.cs b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Event/DataExchanges/CoatingIssueNoteEventHandler.cs index d73bea9fb..ad795164a 100644 --- a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Event/DataExchanges/CoatingIssueNoteEventHandler.cs +++ b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Event/DataExchanges/CoatingIssueNoteEventHandler.cs @@ -7,7 +7,6 @@ using Win_in.Sfs.Shared.Domain; 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.Notes.IssueNotes; namespace Win_in.Sfs.Wms.Store.Event.DataExchanges; diff --git a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Event/DataExchanges/KittingIssueNoteEventHandler.cs b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Event/DataExchanges/KittingIssueNoteEventHandler.cs index d2f44e76f..ca14bc742 100644 --- a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Event/DataExchanges/KittingIssueNoteEventHandler.cs +++ b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Event/DataExchanges/KittingIssueNoteEventHandler.cs @@ -7,7 +7,6 @@ using Win_in.Sfs.Shared.Domain; 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.Notes.IssueNotes; namespace Win_in.Sfs.Wms.Store.Event.DataExchanges; diff --git a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Event/Jobs/CoatingIssueJobEventHandler.cs b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Event/Jobs/CoatingIssueJobEventHandler.cs index 2bc5bb04d..5b39f2f07 100644 --- a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Event/Jobs/CoatingIssueJobEventHandler.cs +++ b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Event/Jobs/CoatingIssueJobEventHandler.cs @@ -1,6 +1,7 @@ using System.Collections.Generic; using System.Linq; using System.Threading.Tasks; +using Castle.Components.DictionaryAdapter; using Volo.Abp.EventBus; using Volo.Abp.Uow; using Win_in.Sfs.Basedata.Application.Contracts; @@ -9,8 +10,6 @@ using Win_in.Sfs.Shared.Event; 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.Jobs.IssueJobs; -using Win_in.Sfs.Wms.Store.Notes.IssueNotes; namespace Win_in.Sfs.Wms.Store.Event.BusinessJob; @@ -43,9 +42,7 @@ public class CoatingIssueJobEventHandler : [UnitOfWork] public virtual async Task HandleEventAsync(SfsCompletedEntityEventData eventData) { - var entity = eventData.Entity; - var coatingIssueNote = await BuildCoatingIssueNoteAsync(entity).ConfigureAwait(false); - await _coatingIssueNoteAppService.CreateAsync(coatingIssueNote).ConfigureAwait(false); + await Task.CompletedTask.ConfigureAwait(false); } /// @@ -127,63 +124,70 @@ public class CoatingIssueJobEventHandler : /// private async Task CreateTransferLibAsync(CoatingIssueJob coatingIssueJob) { - if (!await IsMinRowAsync(coatingIssueJob).ConfigureAwait(false)) + foreach (var detail in coatingIssueJob.Details) { - foreach (var detail in coatingIssueJob.Details) + var locationDto = await _locationAppService.GetByCodeAsync(detail.RecommendFromLocationCode) + .ConfigureAwait(false); + if (locationDto.Type == EnumLocationType.RAW) { - var input = new TransferLibRequestEditInput(); - input.CallBusinessType = nameof(ICoatingIssueJobAppService); - input.CallJobNumber = coatingIssueJob.Number; - input.CallRequestNumber = coatingIssueJob.MaterialRequestNumber; - input.CallServerName = "Win_in.Sfs.Wms.Store.Application.CoatingIssueJobAppService"; - input.Type = "Transfer_Warehouse"; - input.UseOnTheWayLocation = true; - - var detailInput = new TransferLibRequestDetailInput(); - detailInput.CallBusinessType = nameof(ICoatingIssueJobAppService); - detailInput.CallRequestNumber = coatingIssueJob.MaterialRequestNumber; - detailInput.CallServerName = "Win_in.Sfs.Wms.Store.Application.CoatingIssueJobAppService"; - detailInput.CallJobNumber = coatingIssueJob.Number; - - detailInput.JobStatus = EnumJobStatus.Open; - detailInput.ItemCode = detail.ItemCode; - detailInput.StdPackQty = detail.StdPackQty; - detailInput.Uom = detail.Uom; - detailInput.Status = detail.Status; - - detailInput.RecommendFromQty = detail.RecommendFromQty; - detailInput.RecommendFromLot = detail.RecommendFromLot; - detailInput.RecommendFromPackingCode = detailInput.RecommendFromPackingCode; - detailInput.RecommendToLot = detail.RecommendToLot; - - detailInput.RecommendFromArriveDate = detail.RecommendFromArriveDate; - detailInput.RecommendFromExpireDate = detail.RecommendFromExpireDate; - detailInput.RecommendFromProduceDate = detail.RecommendFromProduceDate; - detailInput.RecommendFromSupplierBatch = detail.RecommendFromSupplierBatch; - - detailInput.RecommendFromLocationCode = detail.RecommendFromLocationCode; - detailInput.RecommendFromLocationGroup = detail.RecommendFromLocationGroup; - detailInput.RecommendFromLocationArea = detail.RecommendFromLocationArea; - detailInput.RecommendFromLocationErpCode = detail.RecommendFromLocationErpCode; - detailInput.RecommendFromWarehouseCode = detail.RecommendFromWarehouseCode; - - detailInput.RecommendToQty = detail.RecommendToQty; - detailInput.RecommendToLot = detail.RecommendToLot; - detailInput.RecommendToPackingCode = detailInput.RecommendToPackingCode; - detailInput.RecommendToLot = detail.RecommendToLot; - - detailInput.RecommendToArriveDate = detail.RecommendToArriveDate; - detailInput.RecommendToExpireDate = detail.RecommendToExpireDate; - detailInput.RecommendToProduceDate = detail.RecommendToProduceDate; - detailInput.RecommendToSupplierBatch = detail.RecommendToSupplierBatch; - - detailInput.RecommendToLocationCode = detail.RecommendToLocationCode; - detailInput.RecommendToLocationGroup = detail.RecommendToLocationGroup; - detailInput.RecommendToLocationArea = detail.RecommendToLocationArea; - detailInput.RecommendToLocationErpCode = detail.RecommendToLocationErpCode; - detailInput.RecommendToWarehouseCode = detail.RecommendToWarehouseCode; - - await _transferLibRequestAppService.CreateAsync(input).ConfigureAwait(false); + if (!await IsMinRowAsync(coatingIssueJob).ConfigureAwait(false)) + { + var input = new TransferLibRequestEditInput(); + input.CallBusinessType = nameof(ICoatingIssueJobAppService); + input.CallJobNumber = coatingIssueJob.Number; + input.CallRequestNumber = coatingIssueJob.CoatingRequestNumber; + input.CallServerName = "Win_in.Sfs.Wms.Store.Application.CoatingIssueJobAppService"; + input.Type = "Transfer_Warehouse"; + input.UseOnTheWayLocation = true; + + var detailInput = new TransferLibRequestDetailInput(); + detailInput.CallBusinessType = nameof(ICoatingIssueJobAppService); + detailInput.CallRequestNumber = coatingIssueJob.CoatingRequestNumber; + detailInput.CallServerName = "Win_in.Sfs.Wms.Store.Application.CoatingIssueJobAppService"; + detailInput.CallJobNumber = coatingIssueJob.Number; + + detailInput.JobStatus = EnumJobStatus.Open; + detailInput.ItemCode = detail.ItemCode; + detailInput.StdPackQty = detail.StdPackQty; + detailInput.Uom = detail.Uom; + detailInput.Status = detail.Status; + + detailInput.RecommendFromQty = detail.RecommendFromQty; + detailInput.RecommendFromLot = detail.RecommendFromLot; + detailInput.RecommendFromPackingCode = detailInput.RecommendFromPackingCode; + detailInput.RecommendToLot = detail.RecommendToLot; + + detailInput.RecommendFromArriveDate = detail.RecommendFromArriveDate; + detailInput.RecommendFromExpireDate = detail.RecommendFromExpireDate; + detailInput.RecommendFromProduceDate = detail.RecommendFromProduceDate; + detailInput.RecommendFromSupplierBatch = detail.RecommendFromSupplierBatch; + + detailInput.RecommendFromLocationCode = detail.RecommendFromLocationCode; + detailInput.RecommendFromLocationGroup = detail.RecommendFromLocationGroup; + detailInput.RecommendFromLocationArea = detail.RecommendFromLocationArea; + detailInput.RecommendFromLocationErpCode = detail.RecommendFromLocationErpCode; + detailInput.RecommendFromWarehouseCode = detail.RecommendFromWarehouseCode; + + detailInput.RecommendToQty = detail.RecommendToQty; + detailInput.RecommendToLot = detail.RecommendToLot; + detailInput.RecommendToPackingCode = detailInput.RecommendToPackingCode; + detailInput.RecommendToLot = detail.RecommendToLot; + + detailInput.RecommendToArriveDate = detail.RecommendToArriveDate; + detailInput.RecommendToExpireDate = detail.RecommendToExpireDate; + detailInput.RecommendToProduceDate = detail.RecommendToProduceDate; + detailInput.RecommendToSupplierBatch = detail.RecommendToSupplierBatch; + + detailInput.RecommendToLocationCode = detail.RecommendToLocationCode; + detailInput.RecommendToLocationGroup = detail.RecommendToLocationGroup; + detailInput.RecommendToLocationArea = detail.RecommendToLocationArea; + detailInput.RecommendToLocationErpCode = detail.RecommendToLocationErpCode; + detailInput.RecommendToWarehouseCode = detail.RecommendToWarehouseCode; + + input.Details = new EditableList() { detailInput }; + + await _transferLibRequestAppService.CreateAsync(input).ConfigureAwait(false); + } } } } @@ -212,9 +216,9 @@ public class CoatingIssueJobEventHandler : { var detail = coatingIssueJob.Details.FirstOrDefault(); - var loctionDto = await _locationAppService.GetByCodeAsync(detail.RecommendFromLocationCode) + var locationDto = await _locationAppService.GetByCodeAsync(detail.RecommendFromLocationCode) .ConfigureAwait(false); - if (loctionDto.RowCode == 1) + if (locationDto.Type == EnumLocationType.RAW && locationDto.RowCode == 1) { return true; } diff --git a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Event/Requests/CoatingIssueJobEventHandler.cs b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Event/Requests/CoatingIssueJobEventHandler.cs deleted file mode 100644 index e69de29bb..000000000 diff --git a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Event/Requests/CoatingIssueRequestEventHandler.cs b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Event/Requests/CoatingIssueRequestEventHandler.cs index 120155d66..8bd491fae 100644 --- a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Event/Requests/CoatingIssueRequestEventHandler.cs +++ b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Event/Requests/CoatingIssueRequestEventHandler.cs @@ -1,21 +1,20 @@ using System.Collections.Generic; using System.Linq; -using System.Text; using System.Text.Json; using System.Threading.Tasks; +using AutoMapper; using Castle.Components.DictionaryAdapter; using Volo.Abp; +using Volo.Abp.AutoMapper; using Volo.Abp.EventBus; using Win_in.Sfs.Basedata.Application.Contracts; 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.Inventory.Application.Contracts; +using Win_in.Sfs.Wms.Inventory.Domain; using Win_in.Sfs.Wms.Store.Application.Contracts; using Win_in.Sfs.Wms.Store.Domain; -using Win_in.Sfs.Wms.Store.Domain.Shared; -using Win_in.Sfs.Wms.Store.Jobs.IssueJobs; -using Win_in.Sfs.Wms.Store.Requests.MaterialRequests; namespace Win_in.Sfs.Wms.Store.Event.BusinessRequest; @@ -32,17 +31,22 @@ public class CoatingIssueRequestEventHandler private readonly IProductionLineItemAppService _productionLineItemAppService; private readonly ILocationAppService _locationAppService; private readonly IBalanceAppService _balanceAppService; + private IMapper _mapper; + //private readonly ICoatingIssueRequestManager _coatingIssueRequestManager; public CoatingIssueRequestEventHandler( ICoatingIssueJobAppService coatingIssueJobAppService, IProductionLineAppService productionLineAppService, ILocationAppService locationAppService, - IBalanceAppService balanceAppService, IProductionLineItemAppService productionLineItemAppService) + IBalanceAppService balanceAppService, IProductionLineItemAppService productionLineItemAppService + //, ICoatingIssueRequestManager coatingIssueRequestManager + ) { _coatingIssueJobAppService = coatingIssueJobAppService; _productionLineAppService = productionLineAppService; _locationAppService = locationAppService; _balanceAppService = balanceAppService; _productionLineItemAppService = productionLineItemAppService; + //_coatingIssueRequestManager = coatingIssueRequestManager; } /// @@ -51,7 +55,9 @@ public class CoatingIssueRequestEventHandler /// Event data public virtual async Task HandleEventAsync(SfsCreatedEntityEventData eventData) { - await Task.CompletedTask.ConfigureAwait(false); + var entity = eventData.Entity; + + await CreateAllCoatingIssueJobAsync(entity).ConfigureAwait(false); } /// @@ -60,6 +66,8 @@ public class CoatingIssueRequestEventHandler /// Event data public virtual async Task HandleEventAsync(SfsCreatedEntityEventData> eventData) { + var entity = eventData.Entity; + await Task.CompletedTask.ConfigureAwait(false); } @@ -72,22 +80,7 @@ public class CoatingIssueRequestEventHandler { var entity = eventData.Entity; - List coatingIssueJobs = new EditableList(); - - //switch (entity.Type) - //{ - // case nameof(EnumIssueType.BoxQty): - // coatingIssueJobs = await CreateCoatingIssueJobWithBoxQtyTypeAsync(entity).ConfigureAwait(false); - // break; - // case nameof(EnumIssueType.Qty): - // coatingIssueJobs = await CreateCoatingIssueJobWithQtyTypeAsync(entity).ConfigureAwait(false); - // break; - //} - - if (coatingIssueJobs.Any()) - { - await _coatingIssueJobAppService.CreateManyAsync(coatingIssueJobs).ConfigureAwait(false); - } + await CreateAllCoatingIssueJobAsync(entity).ConfigureAwait(false); } /// @@ -118,194 +111,135 @@ public class CoatingIssueRequestEventHandler #region 按数量叫料 /// - /// 创建注塑任务 + /// 创建注塑任务-按数量 /// - /// + /// + /// + /// + /// /// /// private async Task> CreateCoatingIssueJobWithQtyTypeAsync - (CoatingIssueRequest coatingMaterialRequest) + (CoatingIssueRequest coatingIssueRequest, List coatingIssueRequestDetails, + List recommendbalanceDtos, + List useBalanceList) { var jobs = new List(); + //用来临时存放所有未生成任务的发料集合 如果生成完了再这里去掉 + var tempDetailDtos = + ObjectMapper.Map, List>( + coatingIssueRequestDetails); - var toLocationCodes = coatingMaterialRequest.Details.Select(p => p.ToLocationCode).Distinct().ToList(); //所有发送库位的集合 - var toLocations = await _locationAppService.GetByCodesAsync(toLocationCodes).ConfigureAwait(false); //所有库位的集合 + var coatingIssueJobDetailInputs = new List(); - var coatingMaterialRequestDetails = coatingMaterialRequest.Details.Where(p => p.ToBeIssuedQty > 0); //所有还没发送物品的集合 - foreach (var coatingMaterialRequestDetail in coatingMaterialRequestDetails) //如果有还有剩余未叫料的数量 则创建新的任务 + if (recommendbalanceDtos != null && recommendbalanceDtos.Count > 0) { - var toLocation = - toLocations.FirstOrDefault(p => p.Code == coatingMaterialRequestDetail.ToLocationCode); //判断目标库位是否存在 - Check.NotNull(toLocation, "库位代码", $"库位 {coatingMaterialRequestDetail.ToLocationCode} 不存在"); - - //创建详情 - var jobDetails = - await CreateCoatingIssueJobDetailInputsWithQtyTypeAsync(coatingMaterialRequest, coatingMaterialRequestDetail, - toLocation.LocationGroupCode).ConfigureAwait(false); - if (!jobDetails.Any()) + var queue = new Queue(recommendbalanceDtos); + while (queue.TryDequeue(out var balanceDto)) { - continue; - } + var next = false; - var fromLocationCode = jobDetails[0].RecommendFromLocationCode; - var fromLocation = await _locationAppService.GetByCodeAsync(fromLocationCode).ConfigureAwait(false); - var job = jobs.FirstOrDefault(p => p.WorkGroupCode == fromLocation?.WorkGroupCode); - if (job == null || job.Details.Any(p => p.RecommendToLocationCode != coatingMaterialRequestDetail.ToLocationCode)) - { - job = await BuildCoatingIssueJobCreateInputWithQtyTypeAsync(coatingMaterialRequest, fromLocation) - .ConfigureAwait(false); - jobs.Add(job); - } + var temp = tempDetailDtos.ToList(); - job.Details.AddRange(jobDetails); - if (coatingMaterialRequestDetail.ToBeIssuedQty < 0) - { - coatingMaterialRequestDetail.Status = EnumStatus.Close; - } - } - - jobs = jobs.Where(p => p.Details.Any()).ToList(); + foreach (var tempDetailDto in tempDetailDtos) + { + //未发送的数量 + tempDetailDto.Qty = tempDetailDto.Qty - tempDetailDto.IssuedQty; + + if (tempDetailDto.Qty > balanceDto.Qty) //需求量大于 这条推荐库存的余额 + { + tempDetailDto.Qty -= balanceDto.Qty; + } + else if (tempDetailDto.Qty <= balanceDto.Qty) + { + temp.Remove(tempDetailDto); + balanceDto.Qty = tempDetailDto.Qty; + } + + coatingIssueJobDetailInputs.Add( + await BuildCoatingIssueJobDetailWithQtyTypeAsync(tempDetailDto, balanceDto) + .ConfigureAwait(false)); + useBalanceList.Add(balanceDto); + + if (balanceDto.Qty <= 0) + { + next = true; + break; + } + } - var openRequestDetails = - coatingMaterialRequest.Details.Where(p => p.Status != EnumStatus.Close).ToList(); + tempDetailDtos = temp; - if (!openRequestDetails.Any()) - { - return jobs; + if (next) + { + } + } } - - var enableMultipleCreateCoatingIssueJob = await SettingManager - .IsTrueAsync(StoreSettings.MaterialRequest.EnableMultipleCreateIssueJob).ConfigureAwait(false); - if (enableMultipleCreateCoatingIssueJob) + if (coatingIssueJobDetailInputs.Any()) { - //coatingMaterialRequest.Partial(); - } - else - { - var sb = new StringBuilder(); - foreach (var openRequestDetail in openRequestDetails) - { - sb.AppendLine( - $"{openRequestDetail.ItemCode}请求数量 {openRequestDetail.Qty},可用库存数量 {openRequestDetail.IssuedQty}"); - } - - throw new UserFriendlyException($"{sb} 可用库存数量不足, 无法生成发料任务"); + var coatingIssueJobEditInput = new CoatingIssueJobEditInput(); + coatingIssueJobEditInput = await BuildCoatingIssueJobCreateInputWithQtyTypeAsync(coatingIssueRequest, + coatingIssueRequestDetails.First()).ConfigureAwait(false); + coatingIssueJobEditInput.Details = coatingIssueJobDetailInputs; + jobs.Add(coatingIssueJobEditInput); } return jobs; } /// - /// 构造注塑任务 + /// 构造注塑任务-按数量 /// - /// - /// + /// + /// /// private async Task BuildCoatingIssueJobCreateInputWithQtyTypeAsync( - CoatingIssueRequest coatingMaterialRequest, - LocationDTO fromLocation) + CoatingIssueRequest coatingIssueRequest, CoatingIssueRequestDetail requestDetailInput) { - CoatingIssueJobEditInput job; - job = ObjectMapper.Map(coatingMaterialRequest); + var job = ObjectMapper.Map(coatingIssueRequest); job.JobType = EnumJobType.IssueJob; job.JobStatus = EnumJobStatus.Open; - job.WorkGroupCode = fromLocation.WorkGroupCode; - job.WarehouseCode = fromLocation.WarehouseCode; - job.Worker = coatingMaterialRequest.Worker; - if (string.IsNullOrEmpty(job.Worker)) - { - job.Worker = "admin"; - } - - job.MaterialRequestNumber = coatingMaterialRequest.Number; + job.WorkGroupCode = requestDetailInput.ToLocationGroup; + job.WarehouseCode = requestDetailInput.ToWarehouseCode; + job.Worker = coatingIssueRequest.Worker; + job.KittingRequestNumber = coatingIssueRequest.Number; + job.EnumIssueSendType = EnumIssueSendType.QtyType; await Task.CompletedTask.ConfigureAwait(false); return job; } - /// - /// 创建注塑任务明细 - /// - /// - /// - /// - /// - /// - private async Task> CreateCoatingIssueJobDetailInputsWithQtyTypeAsync( - CoatingIssueRequest coatingMaterialRequest, - CoatingIssueRequestDetail coatingMaterialRequestDetail, string toLocationGroupCode) - { - var jobDetails = new List(); - - //获取推荐库存 - var productionLineDto = await _productionLineAppService - .GetByLocationCodeAsync(coatingMaterialRequestDetail.ToLocationCode).ConfigureAwait(false); - var productionLineItemDtos = await _productionLineItemAppService - .GetByProductLineCodeAsync(productionLineDto.Code).ConfigureAwait(false); - if (productionLineItemDtos == null) - { - throw new UserFriendlyException($"物品代码【{coatingMaterialRequestDetail.ItemCode}】没有对应的【生产线物品关系】"); - } - - var productionLineItemDto = - productionLineItemDtos.FirstOrDefault(p => p.ItemCode == coatingMaterialRequestDetail.ItemCode); - var input = new RecommendBalanceRequestInput - { - ItemCode = coatingMaterialRequestDetail.ItemCode, - Qty = coatingMaterialRequestDetail.ToBeIssuedQty, - //LocationTypes = transactionType.OutLocationTypes, productionLineItemDto.RawLocationCodeListJson - Statuses = new EditableList { EnumInventoryStatus.OK }, - Locations = JsonSerializer.Deserialize>(productionLineItemDto.RawLocationCodeListJson) - }; - - var recommendList = await _balanceAppService.GetRecommendBalancesByLocationsAsync(input).ConfigureAwait(false); - //没有推荐库存时 跳过此明细 不生成任务 - if (recommendList.Count != 0) - { - foreach (var recommend in recommendList) - { - //拿走需求量 - var detail = - await BuildCoatingIssueJobDetailWithQtyTypeAsync(coatingMaterialRequestDetail, recommend, - toLocationGroupCode) - .ConfigureAwait(false); - if (coatingMaterialRequest.UseOnTheWayLocation) - { - //获取在途库 - var locationDto = await _locationAppService.GetFirstByTypeAsync(EnumLocationType.TRANSPORT) - .ConfigureAwait(false); - - detail.OnTheWayLocationCode = locationDto.Code; - } - - jobDetails.Add(detail); - coatingMaterialRequestDetail.IssuedQty += recommend.Qty; - - //await _coatingMaterialRequestManager.UpdateDetailsAsync(coatingMaterialRequest).ConfigureAwait(false); - } - } - - return jobDetails; - } /// - /// 构造注塑任务明细 + /// 构造注塑任务明细-按数量 /// - /// + /// /// - /// /// private async Task BuildCoatingIssueJobDetailWithQtyTypeAsync( - CoatingIssueRequestDetail coatingMaterialRequestDetail, BalanceDTO balance, string toLocationGroupCode) + CoatingIssueRequestDetailDTO coatingIssueRequestDetail, BalanceDTO balance) { - //ProductionLineDTO prodLine = await _productionLineAppService.GetByLocationGroupCodeAsync(toLocationGroupCode).ConfigureAwait(false); - - var detail = ObjectMapper.Map(balance); - detail.RequestLocationCode = coatingMaterialRequestDetail.ToLocationCode; - detail.PositionCode = coatingMaterialRequestDetail.PositionCode; - detail.RecommendType = coatingMaterialRequestDetail.RecommendType; + var detail = new CoatingIssueJobDetailInput(); + detail.RequestLocationCode = coatingIssueRequestDetail.ToLocationCode; + detail.PositionCode = coatingIssueRequestDetail.PositionCode; + detail.RecommendType = coatingIssueRequestDetail.RecommendType; + detail.Uom = balance.Uom; + detail.ItemCode = balance.ItemCode; + detail.ItemDesc2 = balance.ItemDesc2; + detail.ItemDesc1 = balance.ItemDesc1; + detail.ItemName = balance.ItemName; + detail.ProdLine = coatingIssueRequestDetail.ProdLine; + detail.RequestQty = balance.Qty; + detail.StdPackQty = coatingIssueRequestDetail.StdPackQty; + detail.Status = balance.Status; + + detail.RequestLocationErpCode = coatingIssueRequestDetail.ToLocationErpCode; + detail.RequestLocationArea = coatingIssueRequestDetail.ToLocationArea; + detail.RequestWarehouseCode = coatingIssueRequestDetail.ToWarehouseCode; + detail.RequestLocationGroup = coatingIssueRequestDetail.ToLocationGroup; + detail.RequestLocationCode = coatingIssueRequestDetail.ToLocationCode; detail.RecommendFromPackingCode = balance.PackingCode; detail.RecommendFromContainerCode = balance.ContainerCode; @@ -315,21 +249,69 @@ public class CoatingIssueRequestEventHandler detail.RecommendFromLot = balance.Lot; detail.RecommendFromProduceDate = balance.ProduceDate; detail.RecommendFromArriveDate = balance.ArriveDate; + detail.RecommendFromQty = balance.Qty; + detail.RecommendFromContainerCode = balance.ContainerCode; + detail.RecommendFromPackingCode = balance.PackingCode; + + detail.RecommendToPackingCode = balance.PackingCode; + detail.RecommendToContainerCode = balance.ContainerCode; + detail.RecommendToSupplierBatch = balance.SupplierBatch; + detail.RecommendToProduceDate = balance.ProduceDate; + detail.RecommendToExpireDate = balance.ExpireDate; + detail.RecommendToLot = balance.Lot; + detail.RecommendToProduceDate = balance.ProduceDate; + detail.RecommendToArriveDate = balance.ArriveDate; + detail.RecommendToQty = balance.Qty; + detail.RecommendToContainerCode = balance.ContainerCode; + detail.RecommendToPackingCode = balance.PackingCode; + detail.RecommendFromLocationArea = balance.LocationArea; detail.RecommendFromLocationCode = balance.LocationCode; detail.RecommendFromLocationErpCode = balance.LocationErpCode; detail.RecommendFromLocationGroup = balance.LocationGroup; detail.RecommendFromWarehouseCode = balance.WarehouseCode; - detail.RecommendFromQty = balance.Qty; - detail.Uom = balance.Uom; - detail.RecommendToLocationCode = coatingMaterialRequestDetail.ToLocationCode; - detail.RecommendToLocationErpCode = coatingMaterialRequestDetail.ToLocationErpCode; - detail.RecommendToLocationArea = coatingMaterialRequestDetail.ToLocationArea; - detail.RecommendToWarehouseCode = coatingMaterialRequestDetail.ToWarehouseCode; + detail.RecommendToLocationCode = coatingIssueRequestDetail.ToLocationCode; + detail.RecommendToLocationErpCode = coatingIssueRequestDetail.ToLocationErpCode; + detail.RecommendToLocationArea = coatingIssueRequestDetail.ToLocationArea; + detail.RecommendToWarehouseCode = coatingIssueRequestDetail.ToWarehouseCode; + detail.RecommendToLocationGroup = coatingIssueRequestDetail.ToLocationGroup; + + detail.TransferLibFromPackingCode = balance.PackingCode; + detail.TransferLibFromContainerCode = balance.ContainerCode; + detail.TransferLibFromSupplierBatch = balance.SupplierBatch; + detail.TransferLibFromProduceDate = balance.ProduceDate; + detail.TransferLibFromExpireDate = balance.ExpireDate; + detail.TransferLibFromLot = balance.Lot; + detail.TransferLibFromProduceDate = balance.ProduceDate; + detail.TransferLibFromArriveDate = balance.ArriveDate; + detail.TransferLibFromQty = balance.Qty; + detail.TransferLibFromContainerCode = balance.ContainerCode; + detail.TransferLibFromPackingCode = balance.PackingCode; + + detail.TransferLibToPackingCode = balance.PackingCode; + detail.TransferLibToContainerCode = balance.ContainerCode; + detail.TransferLibToSupplierBatch = balance.SupplierBatch; + detail.TransferLibToProduceDate = balance.ProduceDate; + detail.TransferLibToExpireDate = balance.ExpireDate; + detail.TransferLibToLot = balance.Lot; + detail.TransferLibToProduceDate = balance.ProduceDate; + detail.TransferLibToArriveDate = balance.ArriveDate; + detail.TransferLibToQty = balance.Qty; + detail.TransferLibToPackingCode = balance.PackingCode; + + detail.TransferLibFromLocationArea = balance.LocationArea; + detail.TransferLibFromLocationCode = balance.LocationCode; + detail.TransferLibFromLocationErpCode = balance.LocationErpCode; + detail.TransferLibFromLocationGroup = balance.LocationGroup; + detail.TransferLibFromWarehouseCode = balance.WarehouseCode; + + detail.TransferLibToLocationCode = coatingIssueRequestDetail.ToLocationCode; + detail.TransferLibToLocationErpCode = coatingIssueRequestDetail.ToLocationErpCode; + detail.TransferLibToLocationArea = coatingIssueRequestDetail.ToLocationArea; + detail.TransferLibToWarehouseCode = coatingIssueRequestDetail.ToWarehouseCode; + detail.TransferLibToLocationGroup = coatingIssueRequestDetail.ToLocationGroup; - //detail.ProdLine = prodLine == null ? toLocationGroupCode : prodLine.Code; - detail.ProdLine = toLocationGroupCode; await Task.CompletedTask.ConfigureAwait(false); return detail; } @@ -339,72 +321,71 @@ public class CoatingIssueRequestEventHandler #region 按箱叫料 /// - /// 创建注塑任务 + /// 创建注塑任务 按箱叫料-按箱 /// - /// + /// + /// + /// + /// /// /// private async Task> CreateCoatingIssueJobWithBoxQtyTypeAsync - (CoatingIssueRequest coatingMaterialRequest) + ( + CoatingIssueRequest coatingIssueRequest, + List coatingIssueRequestDetailList, + List recommendbalanceDtos, + List useBalanceList) { var inputJobs = new List(); - var inputExpectOutEditInput = new ExpectOutEditInput(); - //已用的库存的箱码集合 - var useBalanceList = new List(); - var groupByItemCodeAndLocationCode = - coatingMaterialRequest.Details.GroupBy(p => new { p.ItemCode, p.ToLocationCode }); + //已用的库存的集合 + useBalanceList = useBalanceList; - foreach (var locationCodeItemCodeGroup in groupByItemCodeAndLocationCode) + foreach (var detail in coatingIssueRequestDetailList) { - var inputDetails = coatingMaterialRequest.Details.Where(p => - p.ItemCode == locationCodeItemCodeGroup.Key.ItemCode && - p.ToLocationCode == locationCodeItemCodeGroup.Key.ToLocationCode); - var inputDetailTemplate = inputDetails.First(); + //当前零件的集合 + var inputDetails = coatingIssueRequestDetailList; //获取请求下 这个零件和这个库位一个需要多少箱 - var sumBoxQty = inputDetails.Sum(p => p.BoxQty); + var sumBoxQty = inputDetails.Sum(p => p.BoxQty - p.IssuedQty); //获取生产线 var productionLineDto = await _productionLineAppService .GetByLocationCodeAsync(inputDetails.First().ToLocationCode).ConfigureAwait(false); - if (productionLineDto == null) - { - throw new UserFriendlyException($"库位【{inputDetailTemplate.ToLocationCode}】没有对应的【生产线】"); - } + var productLineCodeAndItemCode = await _productionLineItemAppService - .GetByProductLineCodeAndItemCodeAsync(productionLineDto.Code, inputDetailTemplate.ItemCode) + .GetByProductLineCodeAndItemCodeAsync(productionLineDto.Code, detail.ItemCode) .ConfigureAwait(false); if (productLineCodeAndItemCode == null) { throw new UserFriendlyException( - $"物品代码【{inputDetailTemplate.ItemCode}】在生产线【{productionLineDto.Code}】中没有对应的【生产线物品关系】"); + $"物品代码【{detail.ItemCode}】在生产线【{productionLineDto.Code}】中没有对应的【生产线物品关系】"); } - //获取可用库存 - var input = new RecommendBalanceRequestInput - { - ItemCode = locationCodeItemCodeGroup.Key.ItemCode, - Qty = decimal.MaxValue, - Statuses = new EditableList { EnumInventoryStatus.OK }, - Locations = JsonSerializer.Deserialize>(productLineCodeAndItemCode - .RawLocationCodeListJson) - }; - var usableList = await _balanceAppService.GetUsableListAsync(input).ConfigureAwait(false); - usableList = usableList.Where(p => !useBalanceList.Contains(p.PackingCode)).ToList(); + //可用库存 + var usableList = recommendbalanceDtos; + usableList = usableList.Where(p => !useBalanceList.Select(p => p.PackingCode).Contains(p.PackingCode)) + .ToList(); if (usableList.Any()) { for (var i = 0; i < sumBoxQty; i++) { - var firstUsable = usableList.First(); - useBalanceList.Add(firstUsable.PackingCode); - usableList.Remove(firstUsable); - - var coatingIssueJobEditInput = - await BuildCoatingIssueJobCreateInputWithBoxQtyTypeAsync(coatingMaterialRequest, inputDetailTemplate, - firstUsable) - .ConfigureAwait(false); - - inputJobs.Add(coatingIssueJobEditInput); + if (usableList.Any()) + { + var firstUsable = usableList.First(); + useBalanceList.Add((BalanceDTO)firstUsable); + usableList.Remove(firstUsable); + + var coatingIssueJobEditInput = + await BuildCoatingIssueJobCreateInputWithBoxQtyTypeAsync(coatingIssueRequest, + detail, firstUsable) + .ConfigureAwait(false); + + inputJobs.Add(coatingIssueJobEditInput); + } + else + { + break; + } } } } @@ -413,25 +394,26 @@ public class CoatingIssueRequestEventHandler } /// - /// 构造注塑任务 + /// 构造注塑任务-按箱 /// - /// - /// + /// + /// /// /// private async Task BuildCoatingIssueJobCreateInputWithBoxQtyTypeAsync( - CoatingIssueRequest coatingMaterialRequest, - CoatingIssueRequestDetail coatingMaterialRequestDetail, BalanceDTO balanceDtos) + CoatingIssueRequest coatingIssueRequest, + CoatingIssueRequestDetail coatingIssueRequestDetail, BalanceDTO balanceDtos) { - var job = ObjectMapper.Map(coatingMaterialRequest); + var job = ObjectMapper.Map(coatingIssueRequest); job.JobType = EnumJobType.IssueJob; job.JobStatus = EnumJobStatus.Open; - job.WorkGroupCode = coatingMaterialRequestDetail.ToLocationGroup; - job.WarehouseCode = coatingMaterialRequestDetail.ToWarehouseCode; - job.Worker = coatingMaterialRequest.Worker; - job.MaterialRequestNumber = coatingMaterialRequest.Number; + job.WorkGroupCode = coatingIssueRequestDetail.ToLocationGroup; + job.WarehouseCode = coatingIssueRequestDetail.ToWarehouseCode; + job.Worker = coatingIssueRequest.Worker; + job.KittingRequestNumber = coatingIssueRequest.Number; + job.EnumIssueSendType = EnumIssueSendType.BoxQtyType; - job.Details.Add(await BuildCoatingIssueJobDetailWithBoxQtyTypeAsync(coatingMaterialRequestDetail, balanceDtos) + job.Details.Add(await BuildCoatingIssueJobDetailWithBoxQtyTypeAsync(coatingIssueRequestDetail, balanceDtos) .ConfigureAwait(false)); await Task.CompletedTask.ConfigureAwait(false); @@ -440,30 +422,31 @@ public class CoatingIssueRequestEventHandler } /// - /// 构造注塑任务明细 + /// 构造注塑任务明细-按箱 /// - /// + /// /// /// /// private async Task BuildCoatingIssueJobDetailWithBoxQtyTypeAsync( - CoatingIssueRequestDetail coatingMaterialRequestDetail, BalanceDTO balance) + CoatingIssueRequestDetail coatingIssueRequestDetail, BalanceDTO balance) { var detail = new CoatingIssueJobDetailInput(); - detail.RequestLocationCode = coatingMaterialRequestDetail.ToLocationCode; - detail.RequestLocationGroup = coatingMaterialRequestDetail.ToLocationGroup; - detail.RequestLocationArea = coatingMaterialRequestDetail.ToLocationArea; - detail.RequestLocationErpCode = coatingMaterialRequestDetail.ToLocationErpCode; - detail.RequestWarehouseCode = coatingMaterialRequestDetail.ToWarehouseCode; - - detail.PositionCode = coatingMaterialRequestDetail.PositionCode; - detail.RecommendType = coatingMaterialRequestDetail.RecommendType; - detail.ProdLine = coatingMaterialRequestDetail.ToLocationCode; - - detail.ItemCode = coatingMaterialRequestDetail.ItemCode; - detail.ItemName = coatingMaterialRequestDetail.ItemName; - detail.ItemDesc1 = coatingMaterialRequestDetail.ItemDesc1; - detail.ItemDesc2 = coatingMaterialRequestDetail.ItemDesc2; + detail.RequestLocationCode = coatingIssueRequestDetail.ToLocationCode; + detail.RequestLocationGroup = coatingIssueRequestDetail.ToLocationGroup; + detail.RequestLocationArea = coatingIssueRequestDetail.ToLocationArea; + detail.RequestLocationErpCode = coatingIssueRequestDetail.ToLocationErpCode; + detail.RequestWarehouseCode = coatingIssueRequestDetail.ToWarehouseCode; + detail.RequestQty = 1; + + detail.PositionCode = coatingIssueRequestDetail.PositionCode; + detail.RecommendType = coatingIssueRequestDetail.RecommendType; + detail.ProdLine = coatingIssueRequestDetail.ToLocationCode; + + detail.ItemCode = coatingIssueRequestDetail.ItemCode; + detail.ItemName = coatingIssueRequestDetail.ItemName; + detail.ItemDesc1 = coatingIssueRequestDetail.ItemDesc1; + detail.ItemDesc2 = coatingIssueRequestDetail.ItemDesc2; detail.Status = EnumInventoryStatus.OK; detail.Uom = balance.Uom; @@ -498,11 +481,11 @@ public class CoatingIssueRequestEventHandler detail.RecommendToProduceDate = balance.ProduceDate; detail.RecommendToArriveDate = balance.ArriveDate; - detail.RecommendToLocationCode = coatingMaterialRequestDetail.ToLocationCode; - detail.RecommendToLocationErpCode = coatingMaterialRequestDetail.ToLocationErpCode; - detail.RecommendToLocationArea = coatingMaterialRequestDetail.ToLocationArea; - detail.RecommendToWarehouseCode = coatingMaterialRequestDetail.ToWarehouseCode; - detail.RecommendToLocationGroup = coatingMaterialRequestDetail.ToLocationGroup; + detail.RecommendToLocationCode = coatingIssueRequestDetail.ToLocationCode; + detail.RecommendToLocationErpCode = coatingIssueRequestDetail.ToLocationErpCode; + detail.RecommendToLocationArea = coatingIssueRequestDetail.ToLocationArea; + detail.RecommendToWarehouseCode = coatingIssueRequestDetail.ToWarehouseCode; + detail.RecommendToLocationGroup = coatingIssueRequestDetail.ToLocationGroup; await Task.CompletedTask.ConfigureAwait(false); return detail; @@ -511,4 +494,210 @@ public class CoatingIssueRequestEventHandler #endregion #endregion + + //创建任务 + private async Task> CreateAllCoatingIssueJobAsync( + CoatingIssueRequest coatingIssueRequest) + { + var coatingIssueJobEditInputs = new List(); + + //已用的库存的集合 + var useBalanceList = new List(); + + foreach (var groupbyItemCodeAndProdLine in coatingIssueRequest.Details.GroupBy(p => + new { p.ItemCode })) + { + foreach (var coatingIssueRequestDetail in groupbyItemCodeAndProdLine) + { + var productionLineItemDto = await _productionLineItemAppService.GetByProductLineCodeAndItemCodeAsync( + coatingIssueRequestDetail.ProdLine, + groupbyItemCodeAndProdLine.Key.ItemCode).ConfigureAwait(false); + + if (productionLineItemDto == null) + { + throw new UserFriendlyException( + $"未在生产线【{coatingIssueRequestDetail.ProdLine}】物品【{groupbyItemCodeAndProdLine.Key.ItemCode}】的关系,请查看【生产线物品关系】"); + } + + //原料 + if (!string.IsNullOrEmpty(productionLineItemDto.RawLocationCodeListJson)) //因为一个零件 要不是原料 要不是半成品 + { + var usableLocationCode = + JsonSerializer.Deserialize>(productionLineItemDto.RawLocationCodeListJson); + if (usableLocationCode.Any()) + { + //获取可用库存 + var input = new RecommendBalanceRequestInput + { + ItemCode = coatingIssueRequestDetail.ItemCode, + Qty = decimal.MaxValue, + Statuses = new EditableList { EnumInventoryStatus.OK }, + Locations = + JsonSerializer.Deserialize>(productionLineItemDto.RawLocationCodeListJson), + IsPackingCode = true + }; + var usableList = await _balanceAppService.GetUsableListAsync(input).ConfigureAwait(false); + var sortByFifoAsync = await SortByFifoAsync(usableList).ConfigureAwait(false); + + //因为是按箱叫料 先把值赋值给箱数量上 + coatingIssueRequestDetail.BoxQty = coatingIssueRequestDetail.Qty; + + if (usableList.Any()) + { + //因为是原料所以按箱叫料 + coatingIssueJobEditInputs.AddRange( + await CreateCoatingIssueJobWithBoxQtyTypeAsync(coatingIssueRequest, + new EditableList { coatingIssueRequestDetail }, + sortByFifoAsync, + useBalanceList).ConfigureAwait(false)); + } + } + } + + //半成品 + if (!string.IsNullOrEmpty(productionLineItemDto.ProductLocationCodeListJson)) //因为一个零件 要不是原料 要不是半成品 + { + var usableLocationCode = + JsonSerializer.Deserialize>(productionLineItemDto.ProductLocationCodeListJson); + if (usableLocationCode.Any()) + { + //获取可用库存 + var input = new RecommendBalanceRequestInput + { + ItemCode = groupbyItemCodeAndProdLine.Key.ItemCode, + Qty = coatingIssueRequestDetail.Qty, + Statuses = new EditableList { EnumInventoryStatus.OK }, + Locations = + JsonSerializer.Deserialize>(productionLineItemDto + .ProductLocationCodeListJson), + IsPackingCode = false + }; + var usableList = await _balanceAppService.GetUsableListAsync(input).ConfigureAwait(false); + var temp = usableList.ToList(); + + foreach (var balanceDto in usableList) //计算已经用过的库存 + { + var useBalanceDto = useBalanceList.Where(p => + p.ItemCode == balanceDto.ItemCode && p.LocationCode == balanceDto.LocationCode && + p.Lot == balanceDto.Lot && p.Status == balanceDto.Status && + p.PackingCode == balanceDto.PackingCode); + if (useBalanceDto.Any()) //如果不为NULL,就是用过了的库存 需要减去使用量 + { + balanceDto.Qty -= useBalanceDto.Sum(p => p.Qty); + if (balanceDto.Qty <= 0) + { + temp.Remove(balanceDto); + } + } + } + + usableList = temp; + + coatingIssueJobEditInputs.AddRange( + await CreateCoatingIssueJobWithQtyTypeAsync(coatingIssueRequest, + new List { coatingIssueRequestDetail }, temp, + useBalanceList).ConfigureAwait(false)); + } + } + } + } + + if (coatingIssueJobEditInputs.Count > 0) //有库存 可以创建任务 + { + //新增任务 + var addCoatingIssueJobDtos = await _coatingIssueJobAppService.CreateManyAsync(coatingIssueJobEditInputs) + .ConfigureAwait(false); + + await UpdateCoatingIssueRequestDetailQtyAsync(coatingIssueRequest, addCoatingIssueJobDtos) + .ConfigureAwait(false); + + return addCoatingIssueJobDtos; + } + + return new List(); + } + + /// + /// 修改请求的 已发 已收数量 + /// + /// + /// + /// + private async Task UpdateCoatingIssueRequestDetailQtyAsync(CoatingIssueRequest coatingIssueRequest, + List addCoatingIssueJobDtos) + { + //原有任务 + var existCoatingIssueJobDtos = await _coatingIssueJobAppService + .GetByRequestNumberAsync(coatingIssueRequest.Number) + .ConfigureAwait(false); + + //新增的任务和已有的任务总和 + var allCoatingIssueJobDtos = new List(); + allCoatingIssueJobDtos.AddRange(addCoatingIssueJobDtos); + allCoatingIssueJobDtos.AddRange(existCoatingIssueJobDtos); + + var groupByItemCodeLocationCode = coatingIssueRequest.Details.GroupBy(p => + new { p.ItemCode, p.ToLocationCode }); + foreach (var group in groupByItemCodeLocationCode) + { + foreach (var requestDetail in group) + { + //所有已发数量 + decimal allIssuedQty = 0; + + //所有已发数量 + decimal allReceivedQty = 0; + + foreach (var allCoatingIssueJobDto in allCoatingIssueJobDtos) + { + var jobDetailDtos = allCoatingIssueJobDto.Details.Where(p => + p.ItemCode == group.Key.ItemCode && p.RequestLocationCode == group.Key.ToLocationCode); + //所有已发数量 + allIssuedQty += jobDetailDtos.Sum(p => p.RequestQty); + //所有已发数量 + allReceivedQty += jobDetailDtos.Sum(p => p.HandledToQty); + } + + requestDetail.IssuedQty += allIssuedQty; + requestDetail.ReceivedQty += allReceivedQty; + } + } + + //await _coatingIssueRequestManager.UpdateAsync(coatingIssueRequest).ConfigureAwait(false); + } + + /// + /// 排序规则 1.批次正序 2.底层 3.到货日期正序 4.数量倒序(整箱优先) 5.库位正序 6.箱码正序 + /// + /// + /// + public async Task> SortByFifoAsync(List balances) + { + var sortBalances = new List(); + var config = new MapperConfiguration(cfg => + { + cfg.CreateMap() + .Ignore(x => x.LocationRow); + }); + _mapper = new Mapper(config); + + var resultBalances = _mapper.Map, List>(balances); + foreach (var resultBalance in resultBalances) + { + var locationDto = await _locationAppService.GetByCodeAsync(resultBalance.LocationCode).ConfigureAwait(false); + resultBalance.LocationRow = locationDto.RowCode; + } + + resultBalances + .OrderBy(p => p.Lot) + .ThenBy(p => p.LocationRow) + .ThenBy(p => p.PutInTime) + .ThenBy(p => p.Qty)//2023-9-14 苑静雯 从小数开始发料 + .ThenBy(p => p.LocationCode) + .ThenBy(p => p.PackingCode) + .ToList(); + + return resultBalances; + } } + diff --git a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Event/Requests/Note/CoatingIssueNoteEventHandler.cs b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Event/Requests/Note/CoatingIssueNoteEventHandler.cs index 71acd8c33..124982cd5 100644 --- a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Event/Requests/Note/CoatingIssueNoteEventHandler.cs +++ b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Event/Requests/Note/CoatingIssueNoteEventHandler.cs @@ -6,10 +6,6 @@ using Volo.Abp.Uow; using Win_in.Sfs.Shared.Domain.Shared; using Win_in.Sfs.Shared.Event; using Win_in.Sfs.Wms.Store.Domain; -using Win_in.Sfs.Wms.Store.Notes.IssueNotes; -using Win_in.Sfs.Wms.Store.Requests.MaterialRequests; -using static Win_in.Sfs.Wms.Store.Domain.Shared.StoreSettings; -using MaterialRequest = Win_in.Sfs.Wms.Store.Domain.MaterialRequest; namespace Win_in.Sfs.Wms.Store.Event.BusinessRequest; diff --git a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Event/Transactions/CoatingIssueNoteEventHandler.cs b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Event/Transactions/CoatingIssueNoteEventHandler.cs index ef46f0c66..84e6e4246 100644 --- a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Event/Transactions/CoatingIssueNoteEventHandler.cs +++ b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Event/Transactions/CoatingIssueNoteEventHandler.cs @@ -9,7 +9,6 @@ using Win_in.Sfs.Shared.Event; using Win_in.Sfs.Wms.Inventory.Application.Contracts; using Win_in.Sfs.Wms.Store.Domain; using Win_in.Sfs.Wms.Store.Event.Transaction; -using Win_in.Sfs.Wms.Store.Notes.IssueNotes; namespace Win_in.Sfs.Wms.Store.Event.Transactions;