From 6afde1379dd11d12cf85a128ccf8eb3ea982bd0a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=83=91=E6=B8=A4=E6=97=AD=5BIrelia=5D?= <366601522@qq.com> Date: Thu, 13 Apr 2023 01:16:18 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E6=94=B9=20=E5=AE=8C=E5=B7=A5?= =?UTF-8?q?=E7=BC=B4=E5=BA=93=20=E7=BA=BF=E8=BE=B9=E7=BC=B4=E5=BA=93?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...FrameworkCore.SqlServer.StoreDbContext.sql | 2 +- .../Enums/Store/EnumProductReceiptType.cs | 4 +- .../ProductReceiptRequestAppService.cs | 226 ++++++++++-------- .../ProductReceiptNoteManager.cs | 75 +++--- ...RequestDbContextModelCreatingExtensions.cs | 2 +- ...RequestDbContextModelCreatingExtensions.cs | 1 - .../Requests/InspectRequestEventHandler.cs | 4 + .../ProductReceiptNoteEventHandler.cs | 18 +- .../ProductReceiptRequestEventHandler.cs | 50 +++- 9 files changed, 243 insertions(+), 139 deletions(-) rename be/Modules/Store/src/Win_in.Sfs.Wms.Store.Event/Requests/{ => Note}/ProductReceiptNoteEventHandler.cs (70%) diff --git a/be/Hosts/Wms.Host/Win_in.Sfs.Wms.Store.HttpApi.Host/scripts/db.Microsoft.EntityFrameworkCore.SqlServer.StoreDbContext.sql b/be/Hosts/Wms.Host/Win_in.Sfs.Wms.Store.HttpApi.Host/scripts/db.Microsoft.EntityFrameworkCore.SqlServer.StoreDbContext.sql index a817dc41d..8cbecdc09 100644 --- a/be/Hosts/Wms.Host/Win_in.Sfs.Wms.Store.HttpApi.Host/scripts/db.Microsoft.EntityFrameworkCore.SqlServer.StoreDbContext.sql +++ b/be/Hosts/Wms.Host/Win_in.Sfs.Wms.Store.HttpApi.Host/scripts/db.Microsoft.EntityFrameworkCore.SqlServer.StoreDbContext.sql @@ -1281,7 +1281,7 @@ CREATE TABLE [Store_ProductReceiptRequest] ( [Shift] nvarchar(64) NULL, [Team] nvarchar(64) NULL, [PlanDate] datetime2 NOT NULL, - [Type] nvarchar(64) NULL, + [Type] nvarchar(64) NOT NULL, [ExtraProperties] nvarchar(max) NULL, [ConcurrencyStamp] nvarchar(40) NULL, [CreationTime] datetime2 NOT NULL, diff --git a/be/Modules/Shared/src/Win_in.Sfs.Shared.Domain.Shared/Enums/Store/EnumProductReceiptType.cs b/be/Modules/Shared/src/Win_in.Sfs.Shared.Domain.Shared/Enums/Store/EnumProductReceiptType.cs index da81aec1e..b6c96841d 100644 --- a/be/Modules/Shared/src/Win_in.Sfs.Shared.Domain.Shared/Enums/Store/EnumProductReceiptType.cs +++ b/be/Modules/Shared/src/Win_in.Sfs.Shared.Domain.Shared/Enums/Store/EnumProductReceiptType.cs @@ -5,9 +5,9 @@ namespace Win_in.Sfs.Shared.Domain.Shared; public enum EnumProductReceiptType { /// - /// 人工缴库 + /// 人工缴库(完工缴库) /// - [Display(Name = "人工缴库")] + [Display(Name = "人工缴库(完工缴库)")] ProductReceipt_Manual = 2101, /// diff --git a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Requests/ProductReceiptRequests/ProductReceiptRequestAppService.cs b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Requests/ProductReceiptRequests/ProductReceiptRequestAppService.cs index 46e1e6d0a..5a388cefe 100644 --- a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Requests/ProductReceiptRequests/ProductReceiptRequestAppService.cs +++ b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Requests/ProductReceiptRequests/ProductReceiptRequestAppService.cs @@ -5,10 +5,13 @@ using System.Linq; using System.Linq.Expressions; using System.Threading; using System.Threading.Tasks; +using DocumentFormat.OpenXml.Office.CustomUI; using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Mvc; +using Microsoft.EntityFrameworkCore; using Volo.Abp; using Volo.Abp.Application.Dtos; +using Volo.Abp.Domain.Entities; using Win_in.Sfs.Basedata.Application.Contracts; using Win_in.Sfs.Shared.Application.Contracts; using Win_in.Sfs.Shared.Domain; @@ -30,16 +33,20 @@ public class ProductReceiptRequestAppService : SfsStoreRequestInputBase, ProductReceiptRequestImportInput> { private readonly IProductReceiptRequestManager _productReceiptRequestManager; - private readonly IAreaAppService _areaApp; + private readonly IItemBasicAppService _itemBasicAppService; + private readonly ILocationAppService _locationAppService; public ProductReceiptRequestAppService( IProductReceiptRequestRepository repository , IProductReceiptRequestManager productReceiptRequestManager - , IAreaAppService areaApp - ) : base(repository, productReceiptRequestManager) + , IAreaAppService areaApp, + IItemBasicAppService itemBasicAppService, + ILocationAppService locationAppService) : base(repository, productReceiptRequestManager) { _areaApp = areaApp; + _itemBasicAppService = itemBasicAppService; + _locationAppService = locationAppService; _productReceiptRequestManager = productReceiptRequestManager; base.CreatePolicyName = ProductReceiptRequestPermissions.Create; base.UpdatePolicyName = ProductReceiptRequestPermissions.Update; @@ -48,6 +55,61 @@ public class ProductReceiptRequestAppService : #region 东阳 + /// + /// 用来重写 导入数据时可以加工数据 + /// + /// + /// + protected override async Task> ImportProcessingEntityAsync( + Dictionary dictionary) + { + var addList = dictionary.Where(p => p.Value == EntityState.Added).Select(p => p.Key); + + foreach (var productReceiptRequest in addList) + { + productReceiptRequest.Worker = CurrentUser.GetUserName(); + productReceiptRequest.CreatorId = CurrentUser.Id; + + await SetRequestAutoPropertiesAsync(productReceiptRequest).ConfigureAwait(false); + foreach (var detail in productReceiptRequest.Details) + { + await SetDetailPropertiesAsync(detail).ConfigureAwait(false); + } + } + + return dictionary; + } + + /// + /// 赋值详情 + /// + /// + /// + /// + private async Task SetDetailPropertiesAsync(ProductReceiptRequestDetail detail) + { + var itemBasic = await _itemBasicAppService.GetByCodeAsync(detail.ItemCode).ConfigureAwait(false); + + if (itemBasic != null) + { + detail.ItemName = itemBasic.Name; + detail.ItemDesc1 = itemBasic.Desc1; + detail.ItemDesc2 = itemBasic.Desc2; + detail.StdPackQty = itemBasic.StdPackQty; + detail.Uom = itemBasic.BasicUom; + } + + var location = await _locationAppService.GetByCodeAsync(detail.LocationCode).ConfigureAwait(false); + + if (location != null) + { + detail.LocationErpCode = location.ErpLocationCode; + detail.WarehouseCode = location.WarehouseCode; + detail.LocationArea = location.AreaCode; + detail.LocationGroup = location.LocationGroupCode; + } + } + /// /// 设置事务类型 /// @@ -55,7 +117,7 @@ public class ProductReceiptRequestAppService : /// private async Task SetRequestAutoPropertiesAsync(ProductReceiptRequest entity) { - var enumTransSubType=EnumTransSubType.None; + var enumTransSubType = EnumTransSubType.None; switch (entity.Type) { case EnumProductReceiptType.ProductReceipt_Manual: @@ -214,121 +276,97 @@ public class ProductReceiptRequestAppService : return transactionType; } - protected virtual async Task ImportDataAsync(List entites, - List deleteEntities) - { - await _productReceiptRequestManager.ImportDataAsync(entites, deleteEntities).ConfigureAwait(false); - } - protected override Func GetEntityExpression() { return p => p.Type; } - protected virtual async Task<(List entites, List deleteEntities)> - BuildImportDataAsync(ImportResult importResult, - EnumImportMethod importMethod = EnumImportMethod.Update, bool isAllowPartImport = false) - { - if (importResult.Data.Any(t => t.ReportStatus == EnumImportReportStatus.Failed)) - { - if (!isAllowPartImport) - { - return (null, null); - } - } + #endregion - var entites = new List(); + //protected virtual async Task ImportDataAsync(List entites, + // List deleteEntities) + //{ + // await _productReceiptRequestManager.ImportDataAsync(entites, deleteEntities).ConfigureAwait(false); + //} + //protected virtual async Task<(List entites, List deleteEntities)> + // BuildImportDataAsync(ImportResult importResult, + // EnumImportMethod importMethod = EnumImportMethod.Update, bool isAllowPartImport = false) + //{ + // if (importResult.Data.Any(t => t.ReportStatus == EnumImportReportStatus.Failed)) + // { + // if (!isAllowPartImport) + // { + // return (null, null); + // } + // } - var details = new List(); + // var entites = new List(); - var deleteEntites = new List(); + // var details = new List(); - var entityExpression = GetEntityExpression(); + // var deleteEntites = new List(); - var groupList = importResult.Data.ToList().GroupBy(entityExpression).Distinct().ToList(); + // var entityExpression = GetEntityExpression(); - foreach (var group in groupList) - { - var input = group.FirstOrDefault(); + // var groupList = importResult.Data.ToList().GroupBy(entityExpression).Distinct().ToList(); - var inputDetails = group.ToList(); + // foreach (var group in groupList) + // { + // var input = group.FirstOrDefault(); - if (!inputDetails.Any(t => t.ReportStatus == EnumImportReportStatus.Failed)) - { - var exist = await GetEntityAsync(input).ConfigureAwait(false); + // var inputDetails = group.ToList(); - var entity = ObjectMapper.Map(input); + // if (!inputDetails.Any(t => t.ReportStatus == EnumImportReportStatus.Failed)) + // { + // var exist = await GetEntityAsync(input).ConfigureAwait(false); - await SetEntityPropertiesAsync(entity, input).ConfigureAwait(false); + // var entity = ObjectMapper.Map(input); - switch (importMethod) - { - case EnumImportMethod.Update: - entity.SetId(exist != null ? exist.Id : GuidGenerator.Create()); + // await SetEntityPropertiesAsync(entity, input).ConfigureAwait(false); - if (exist != null) - { - entity.SetId(exist.Id); - } + // switch (importMethod) + // { + // case EnumImportMethod.Update: + // entity.SetId(exist != null ? exist.Id : GuidGenerator.Create()); - break; - case EnumImportMethod.Replace: - if (exist != null) - { - deleteEntites.Add(exist); - } + // if (exist != null) + // { + // entity.SetId(exist.Id); + // } - entity.SetId(GuidGenerator.Create()); - break; - } + // break; + // case EnumImportMethod.Replace: + // if (exist != null) + // { + // deleteEntites.Add(exist); + // } - foreach (var inputDetail in inputDetails) - { - var detail = - ObjectMapper.Map(inputDetail); + // entity.SetId(GuidGenerator.Create()); + // break; + // } - detail.SetIdAndNumber(GuidGenerator, entity.Id, entity.Number); + // foreach (var inputDetail in inputDetails) + // { + // var detail = + // ObjectMapper.Map(inputDetail); - await SetDetailPropertiesAsync(detail, input).ConfigureAwait(false); - entity.AddDetail(detail); - } + // detail.SetIdAndNumber(GuidGenerator, entity.Id, entity.Number); - entites.Add(entity); - } - } + // await SetDetailPropertiesAsync(detail, input).ConfigureAwait(false); + // entity.AddDetail(detail); + // } - return (entites, deleteEntites); - } + // entites.Add(entity); + // } + // } - private async Task SetDetailPropertiesAsync(ProductReceiptRequestDetail detail, - ProductReceiptRequestImportInput input) - { - var itemBasic = await ItemBasicAclService.GetByCodeAsync(input.ItemCode).ConfigureAwait(false); + // return (entites, deleteEntites); + //} - if (itemBasic != null) - { - detail.ItemName = itemBasic.Name; - detail.ItemDesc1 = itemBasic.Desc1; - detail.ItemDesc2 = itemBasic.Desc2; - detail.Qty = input.Qty; - detail.StdPackQty = itemBasic.StdPackQty; - } - - var location = await LocationAclService.GetByCodeAsync(input.LocationCode).ConfigureAwait(false); + //private async Task SetEntityPropertiesAsync(ProductReceiptRequest entity, ProductReceiptRequestImportInput input) + //{ + // entity.Worker = CurrentUser.GetUserName(); - if (location != null) - { - detail.LocationErpCode = location.ErpLocationCode; - detail.WarehouseCode = location.WarehouseCode; - } - } - - private async Task SetEntityPropertiesAsync(ProductReceiptRequest entity, ProductReceiptRequestImportInput input) - { - entity.Worker = CurrentUser.GetUserName(); - - await SetRequestAutoPropertiesAsync(entity).ConfigureAwait(false); - } - - #endregion + // await SetRequestAutoPropertiesAsync(entity).ConfigureAwait(false); + //} } diff --git a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain/Notes/ProductReceiptNotes/ProductReceiptNoteManager.cs b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain/Notes/ProductReceiptNotes/ProductReceiptNoteManager.cs index be4733302..5b6caa107 100644 --- a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain/Notes/ProductReceiptNotes/ProductReceiptNoteManager.cs +++ b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain/Notes/ProductReceiptNotes/ProductReceiptNoteManager.cs @@ -12,9 +12,12 @@ public class ProductReceiptNoteManager : SfsStoreManagerBase private async Task BackFlushAsync(ProductReceiptNote productReceiptNote) { - //生成【MES】回冲接口 TODO #region 【判断】是否需要记录回冲记录 及下线结算接口 - //【判断】是否需要记录回冲记录 TODO - //【是】 完工收货时,创建回冲记录 + //【是】 完工收货时,创建回冲记录 //var isBackFlush = await SettingManager.IsTrueAsync(StoreSettings.ProductionReceipt.AutoCreateBackFlush); ; //扣原材料 //var isOffLine = await _settingProvider.IsTrueAsync(StoreSettings.ProductionReceipt.AutoCreateOfflineSettlement); ; //下线结算 + + //是否需要下线结算 - //获取所有成品的零件号 - //一次性获得所有BOM信息避免每个明细都查询一遍;false 为bom不展开,便于测试 - var totalBomList = await GetBomListAsync(productReceiptNote).ConfigureAwait(false); + if (isBackFlush || isOffLine) + { + //获取所有成品的零件号 + //一次性获得所有BOM信息避免每个明细都查询一遍;false 为bom不展开,便于测试 + var totalBomList = await GetBomListAsync(productReceiptNote); - //取不到bom信息要报错,不能进行下去 + //取不到bom信息要报错,不能进行下去 - //根据回冲记录获取成品零件种类和数量,并获取相关要消耗的原材料库存 - var productSumList = productReceiptNote.Details.GroupBy(p => new { p.ItemCode, p.RawLocationCode, p.Qty }) - .Select(s => new BackFlushInventoryTotal - { - ItemCode = s.Key.ItemCode, - RawLocationCode = s.Key.RawLocationCode, - Qty = s.Key.Qty, - TotalQty = s.Sum(n => n.Qty), - }).ToList(); - //根据父级零件汇总的数量,获取BOM子表明细原材料的数量 - var subInventoryTotalList = new List(); + //根据回冲记录获取成品零件种类和数量,并获取相关要消耗的原材料库存 + var productSumList = productReceiptNote.Details.GroupBy(p => new { p.ItemCode, p.RawLocationCode, p.Qty }) + .Select(s => new BackFlushInventoryTotal + { + ItemCode = s.Key.ItemCode, + RawLocationCode = s.Key.RawLocationCode, + Qty = s.Key.Qty, + TotalQty = s.Sum(n => n.Qty), + }).ToList(); - foreach (var productSumItem in productSumList) - { - var subBomList = totalBomList.Where(p => p.Product == productSumItem.ItemCode).ToList(); - //根据bom和父级零件总数获取子零件总数,然后将子零件总数汇总进 总零件数量 - await GetSubBackFlushInventoryList(productSumItem, subBomList, subInventoryTotalList).ConfigureAwait(false); - } + //根据父级零件汇总的数量,获取BOM子表明细原材料的数量 + var subInventoryTotalList = new List(); - await _backFlushNoteManager.CreateByProductReceiptNoteAsync(productReceiptNote, subInventoryTotalList) - .ConfigureAwait(false); + foreach (var productSumItem in productSumList) + { + var subBomList = totalBomList.Where(p => p.Product == productSumItem.ItemCode).ToList(); - //【判断】是否需要下线结算 - if (subInventoryTotalList.Any(p => p.IsOffLine == true)) - { - //【是】 创建【下线结算记录】 - await _offlineSettlementNoteManager - .CreateByProductReceiptNoteAsync(productReceiptNote, subInventoryTotalList).ConfigureAwait(false); + //根据bom和父级零件总数获取子零件总数,然后将子零件总数汇总进 总零件数量 + await GetSubBackFlushInventoryList(productSumItem, subBomList, subInventoryTotalList).ConfigureAwait(false); + } + + if (isBackFlush) + { + await _backFlushNoteManager.CreateByProductReceiptNoteAsync(productReceiptNote, subInventoryTotalList).ConfigureAwait(false); + } + //【判断】是否需要下线结算 + if (isOffLine && subInventoryTotalList.Any(p => p.IsOffLine == true)) + { + //【是】 创建【下线结算记录】 + await _offlineSettlementNoteManager.CreateByProductReceiptNoteAsync(productReceiptNote, subInventoryTotalList).ConfigureAwait(false); + + } } #endregion diff --git a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.EntityFrameworkCore/Requests/ProductReceiptRequests/ProductReceiptRequestDbContextModelCreatingExtensions.cs b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.EntityFrameworkCore/Requests/ProductReceiptRequests/ProductReceiptRequestDbContextModelCreatingExtensions.cs index 366dd9158..9e3184751 100644 --- a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.EntityFrameworkCore/Requests/ProductReceiptRequests/ProductReceiptRequestDbContextModelCreatingExtensions.cs +++ b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.EntityFrameworkCore/Requests/ProductReceiptRequests/ProductReceiptRequestDbContextModelCreatingExtensions.cs @@ -23,8 +23,8 @@ public static class ProductReceiptRequestDbContextModelCreatingExtensions b.Property(q => q.ProdLine).HasMaxLength(SfsPropertyConst.NameLength); b.Property(q => q.Shift).HasMaxLength(SfsPropertyConst.NameLength); b.Property(q => q.Team).HasMaxLength(SfsPropertyConst.NameLength); - b.Property(q => q.Type).HasMaxLength(SfsPropertyConst.NameLength); b.Property(q => q.PlanDate); + b.Property(q => q.Type).HasMaxLength(SfsPropertyConst.NameLength).HasConversion(); b.Property(q => q.RequestStatus).HasMaxLength(SfsPropertyConst.NameLength).HasConversion(); //Relations diff --git a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.EntityFrameworkCore/Requests/PurchaseReceiptRequests/PurchaseReceiptRequestDbContextModelCreatingExtensions.cs b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.EntityFrameworkCore/Requests/PurchaseReceiptRequests/PurchaseReceiptRequestDbContextModelCreatingExtensions.cs index 8178b4c88..6ee78be44 100644 --- a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.EntityFrameworkCore/Requests/PurchaseReceiptRequests/PurchaseReceiptRequestDbContextModelCreatingExtensions.cs +++ b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.EntityFrameworkCore/Requests/PurchaseReceiptRequests/PurchaseReceiptRequestDbContextModelCreatingExtensions.cs @@ -24,7 +24,6 @@ public static class PurchaseReceiptRequestDbContextModelCreatingExtensions b.Property(q => q.PlanArriveDate).IsRequired(); b.Property(q => q.Number).IsRequired(); b.Property(q => q.TimeWindow).IsRequired().HasMaxLength(SfsPropertyConst.CodeLength); - b.Property(q => q.SupplierName).HasMaxLength(SfsPropertyConst.CodeLength); b.Property(q => q.AsnNumber).HasMaxLength(SfsPropertyConst.NameLength); b.Property(q => q.RpNumber).HasMaxLength(SfsPropertyConst.NameLength); diff --git a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Event/Requests/InspectRequestEventHandler.cs b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Event/Requests/InspectRequestEventHandler.cs index 427044073..0855510ab 100644 --- a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Event/Requests/InspectRequestEventHandler.cs +++ b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Event/Requests/InspectRequestEventHandler.cs @@ -1,6 +1,7 @@ using System; using System.Threading.Tasks; using Volo.Abp.EventBus; +using Volo.Abp.Uow; using Win_in.Sfs.Shared.Event; using Win_in.Sfs.Wms.Store.Application.Contracts; using Win_in.Sfs.Wms.Store.Domain; @@ -28,6 +29,7 @@ public class InspectRequestEventHandler : StoreEventHandlerBase /// /// /// + [UnitOfWork] public virtual async Task HandleEventAsync(SfsCancelledEntityEventData eventData) { var entity = eventData.Entity; @@ -39,6 +41,7 @@ public class InspectRequestEventHandler : StoreEventHandlerBase /// /// /// + [UnitOfWork] public virtual async Task HandleEventAsync(SfsAgreedEntityEventData eventData) { await Task.CompletedTask.ConfigureAwait(false); @@ -50,6 +53,7 @@ public class InspectRequestEventHandler : StoreEventHandlerBase /// /// /// + [UnitOfWork] public virtual async Task HandleEventAsync(SfsCreatedEntityEventData eventData) { var entity = eventData.Entity; diff --git a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Event/Requests/ProductReceiptNoteEventHandler.cs b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Event/Requests/Note/ProductReceiptNoteEventHandler.cs similarity index 70% rename from be/Modules/Store/src/Win_in.Sfs.Wms.Store.Event/Requests/ProductReceiptNoteEventHandler.cs rename to be/Modules/Store/src/Win_in.Sfs.Wms.Store.Event/Requests/Note/ProductReceiptNoteEventHandler.cs index 27e909f60..a0af46225 100644 --- a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Event/Requests/ProductReceiptNoteEventHandler.cs +++ b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Event/Requests/Note/ProductReceiptNoteEventHandler.cs @@ -18,15 +18,17 @@ public class ProductReceiptNoteEventHandler { private readonly IPutawayJobAppService _putawayJobAppService; - private readonly IProductReceiptRequestAppService _productReceiptRequestApp; + //private readonly IProductReceiptRequestAppService _productReceiptRequestApp; + private readonly IProductReceiptRequestManager _productReceiptRequestManager; public ProductReceiptNoteEventHandler( IPutawayJobAppService putawayJobAppService - , IProductReceiptRequestAppService productReceiptRequestApp - ) + //, IProductReceiptRequestAppService productReceiptRequestApp + , IProductReceiptRequestManager productReceiptRequestManager) { _putawayJobAppService = putawayJobAppService; - _productReceiptRequestApp = productReceiptRequestApp; + //_productReceiptRequestApp = productReceiptRequestApp; + _productReceiptRequestManager = productReceiptRequestManager; } public virtual async Task HandleEventAsync(SfsCreatedEntityEventData eventData) @@ -41,7 +43,9 @@ public class ProductReceiptNoteEventHandler if (!string.IsNullOrEmpty(entity.ProductReceiptRequestNumber)) { - await _productReceiptRequestApp.CompleteByNumberAsync(entity.ProductReceiptRequestNumber).ConfigureAwait(false); + //await _productReceiptRequestApp.CompleteByNumberAsync(entity.ProductReceiptRequestNumber).ConfigureAwait(false); + var productReceiptRequest=await _productReceiptRequestManager.GetByNumberAsync(entity.ProductReceiptRequestNumber).ConfigureAwait(false); + await _productReceiptRequestManager.CompleteAsync(productReceiptRequest).ConfigureAwait(false); } } @@ -64,7 +68,9 @@ public class ProductReceiptNoteEventHandler { if (!string.IsNullOrEmpty(entity.ProductReceiptRequestNumber)) { - await _productReceiptRequestApp.CompleteByNumberAsync(entity.ProductReceiptRequestNumber).ConfigureAwait(false); + //await _productReceiptRequestApp.CompleteByNumberAsync(entity.ProductReceiptRequestNumber).ConfigureAwait(false); + var productReceiptRequest = await _productReceiptRequestManager.GetByNumberAsync(entity.ProductReceiptRequestNumber).ConfigureAwait(false); + await _productReceiptRequestManager.CompleteAsync(productReceiptRequest).ConfigureAwait(false); } } } diff --git a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Event/Requests/ProductReceiptRequestEventHandler.cs b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Event/Requests/ProductReceiptRequestEventHandler.cs index 1bca59154..e59b18222 100644 --- a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Event/Requests/ProductReceiptRequestEventHandler.cs +++ b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Event/Requests/ProductReceiptRequestEventHandler.cs @@ -19,22 +19,62 @@ public class ProductReceiptRequestEventHandler : StoreEventHandlerBase , ILocalEventHandler> , ILocalEventHandler> + ,ILocalEventHandler> + , ILocalEventHandler>> { private readonly IProductReceiveJobAppService _productReceiveJobAppService; private readonly IProductionLineAppService _productionLineAppService; private readonly IProductReceiptNoteAppService _productReceiptNoteApp; + private readonly IProductReceiptRequestManager _productReceiptRequestManager; public ProductReceiptRequestEventHandler( IProductReceiveJobAppService productReceiveJobAppService , IProductionLineAppService productionLineAppService , IProductReceiptNoteAppService productReceiptNoteApp - ) + , IProductReceiptRequestManager productReceiptRequestManager) { _productReceiveJobAppService = productReceiveJobAppService; _productionLineAppService = productionLineAppService; this._productReceiptNoteApp = productReceiptNoteApp; + _productReceiptRequestManager = productReceiptRequestManager; } + /// + /// 创建后 + /// + /// Event data + [UnitOfWork] + public async Task HandleEventAsync(SfsCreatedEntityEventData eventData) + { + var entity = eventData.Entity; + if (entity.AutoSubmit) + { + await _productReceiptRequestManager.SubmitAsync(entity).ConfigureAwait(false); + } + } + + /// + /// 批量创建后 + /// + /// Event data + [UnitOfWork] + public async Task HandleEventAsync(SfsCreatedEntityEventData> eventData) + { + var entitys = eventData.Entity; + foreach (var entity in entitys) + { + if (entity.AutoSubmit) + { + await _productReceiptRequestManager.SubmitAsync(entity).ConfigureAwait(false); + } + } + } + + /// + /// 审批后 + /// + /// + /// [UnitOfWork] public virtual async Task HandleEventAsync(SfsHandledEntityEventData eventData) { @@ -53,6 +93,11 @@ public class ProductReceiptRequestEventHandler } } + /// + /// 取消后 + /// + /// + /// [UnitOfWork] public virtual async Task HandleEventAsync(SfsCancelledEntityEventData eventData) { @@ -60,6 +105,7 @@ public class ProductReceiptRequestEventHandler await _productReceiveJobAppService.CancelByProductionPlanAsync(entity.Number).ConfigureAwait(false); } + #region 私有 private async Task> BuildProductReceiveJobsAsync( ProductReceiptRequest productionPlan) { @@ -160,4 +206,6 @@ public class ProductReceiptRequestEventHandler return note; } + + #endregion }