From 2f9ef4073f981d3607512dc6ee4cab0ef6c3ff4c Mon Sep 17 00:00:00 2001 From: "boxu.zheng" Date: Sat, 15 Apr 2023 21:02:42 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E6=94=B9=20FIS=E5=8F=91=E8=B4=A7=20?= =?UTF-8?q?=E5=9B=9E=E6=94=B6=E6=96=99=E8=B0=83=E6=95=B4=20=E5=AE=A2?= =?UTF-8?q?=E6=88=B7=E9=80=80=E6=8B=86=20=E5=AE=8C=E5=B7=A5=E6=94=B6?= =?UTF-8?q?=E8=B4=A7=E6=8A=A5=E5=BA=9F=20=E7=9B=98=E7=82=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Balances/BalanceManager.cs | 18 +- .../Jobs/CountJobs/CountJobAppService.cs | 1 + .../ItemTransformNoteAutoMapperProfile.cs | 10 + .../Plans/CountPlans/CountPlanAppService.cs | 2 +- .../CountPlans/CountPlanAutoMapperProfile.cs | 9 + .../DeliverRequestAppService.cs | 2 +- .../DeliverRequestFisAppService.cs | 96 +++++-- .../ItemTransformRequestAppService.cs | 17 +- .../ProductRecycleRequestAppService.cs | 250 ++++++++---------- .../ProductionReturnRequestAppService.cs | 46 +++- .../ItemTransformRequestEventHandler.cs | 13 +- .../ProductRecycleRequestEventHandler.cs | 4 +- .../ItemTransformNoteEventHandler.cs | 7 +- 13 files changed, 297 insertions(+), 178 deletions(-) diff --git a/be/Modules/Inventory/src/Win_in.Sfs.Wms.Inventory.Domain/Balances/BalanceManager.cs b/be/Modules/Inventory/src/Win_in.Sfs.Wms.Inventory.Domain/Balances/BalanceManager.cs index d7142e35e..37c115932 100644 --- a/be/Modules/Inventory/src/Win_in.Sfs.Wms.Inventory.Domain/Balances/BalanceManager.cs +++ b/be/Modules/Inventory/src/Win_in.Sfs.Wms.Inventory.Domain/Balances/BalanceManager.cs @@ -244,15 +244,15 @@ public class BalanceManager : DomainService, IBalanceManager balance.Status ).ConfigureAwait(false); - if (!existBalance.IsActive) - { - throw new UserFriendlyException( - $"箱码为{balance.PackingCode}," + - $"库位在{balance.LocationCode}," + - $"批次为{balance.Lot}," + - $"状态为{balance.Status.GetDisplayName()}" + - $"的库存是不可用状态"); - } + //if (!existBalance.IsActive) + //{ + // throw new UserFriendlyException( + // $"箱码为{balance.PackingCode}," + + // $"库位在{balance.LocationCode}," + + // $"批次为{balance.Lot}," + + // $"状态为{balance.Status.GetDisplayName()}" + + // $"的库存是不可用状态"); + //} existBalance.Qty = balance.Qty; existBalance.ItemName = balance.ItemName; diff --git a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Jobs/CountJobs/CountJobAppService.cs b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Jobs/CountJobs/CountJobAppService.cs index 60673f7ac..f2b69f2c0 100644 --- a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Jobs/CountJobs/CountJobAppService.cs +++ b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Jobs/CountJobs/CountJobAppService.cs @@ -71,6 +71,7 @@ public class CountJobAppService throw new AbpValidationException(result.Errors); } var entity = ObjectMapper.Map(dto); + entity.Number = checkEntity.Number; await _countJobManager.CompleteAsync(entity, CurrentUser).ConfigureAwait(false); return dto; } diff --git a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Notes/ItemTransformNotes/ItemTransformNoteAutoMapperProfile.cs b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Notes/ItemTransformNotes/ItemTransformNoteAutoMapperProfile.cs index c26dee52a..341d1b2ac 100644 --- a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Notes/ItemTransformNotes/ItemTransformNoteAutoMapperProfile.cs +++ b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Notes/ItemTransformNotes/ItemTransformNoteAutoMapperProfile.cs @@ -22,5 +22,15 @@ public partial class StoreApplicationAutoMapperProfile : Profile .Ignore(x => x.TenantId) .Ignore(x => x.Number) .Ignore(x => x.Id); + + CreateMap() + .IgnoreAuditedObjectProperties() + .Ignore(x => x.ConcurrencyStamp) + .Ignore(x => x.TenantId) + .Ignore(x => x.Number) + .Ignore(x => x.Id) + .Ignore(x=>x.ExtraProperties) + .Ignore(x => x.Remark) + ; } } diff --git a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Plans/CountPlans/CountPlanAppService.cs b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Plans/CountPlans/CountPlanAppService.cs index a750ba193..de9cea2ea 100644 --- a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Plans/CountPlans/CountPlanAppService.cs +++ b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Plans/CountPlans/CountPlanAppService.cs @@ -106,7 +106,7 @@ public class CountPlanAppService : public virtual async Task UpdateByJobAsync(CountPlanEditInput input) { var entity = ObjectMapper.Map(input); - + entity.Number = input.Number; await _countPlanManager.CompleteByJobAsync(entity).ConfigureAwait(false); } diff --git a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Plans/CountPlans/CountPlanAutoMapperProfile.cs b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Plans/CountPlans/CountPlanAutoMapperProfile.cs index 060a9b36a..fbac04195 100644 --- a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Plans/CountPlans/CountPlanAutoMapperProfile.cs +++ b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Plans/CountPlans/CountPlanAutoMapperProfile.cs @@ -39,5 +39,14 @@ public partial class StoreApplicationAutoMapperProfile : Profile .Ignore(x => x.TenantId) .Ignore(x => x.Number) .Ignore(x => x.Id); + + CreateMap() + .IgnoreAuditedObjectProperties() + .Ignore(x => x.TenantId) + .Ignore(x => x.Number) + .Ignore(x => x.Id) + .Ignore(x => x.ExtraProperties) + .Ignore(x => x.Remark) + ; } } diff --git a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Requests/DeliverRequests/DeliverRequestAppService.cs b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Requests/DeliverRequests/DeliverRequestAppService.cs index 439657791..9f59ab043 100644 --- a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Requests/DeliverRequests/DeliverRequestAppService.cs +++ b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Requests/DeliverRequests/DeliverRequestAppService.cs @@ -7,6 +7,7 @@ using System.Threading.Tasks; using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Mvc; +using Microsoft.EntityFrameworkCore; using Volo.Abp; using Volo.Abp.Application.Dtos; using Win_in.Sfs.Basedata.Application.Contracts; @@ -29,7 +30,6 @@ public class DeliverRequestAppService : { private readonly IDeliverRequestManager _deliverRequestManager; private readonly IAreaAppService _areaApp; - private readonly ICustomerAppService _customerApp; private readonly ICustomerAddressAppService _customerAddressApp; diff --git a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Requests/DeliverRequests/DeliverRequestFisAppService.cs b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Requests/DeliverRequests/DeliverRequestFisAppService.cs index 5dd549d4c..484fe8dfb 100644 --- a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Requests/DeliverRequests/DeliverRequestFisAppService.cs +++ b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Requests/DeliverRequests/DeliverRequestFisAppService.cs @@ -7,6 +7,7 @@ using System.Threading.Tasks; using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Mvc; +using Microsoft.EntityFrameworkCore; using Volo.Abp; using Volo.Abp.Application.Dtos; using Volo.Abp.Data; @@ -32,22 +33,97 @@ public class DeliverRequestFisAppService : private readonly IAreaAppService _areaApp; private readonly ICustomerAppService _customerApp; private readonly ICustomerAddressAppService _customerAddressApp; + private readonly ITransactionTypeAppService _transactionTypeAppService; + private readonly IBalanceAppService _balanceAppService; + private readonly IItemBasicAppService _itemBasicAppService; public DeliverRequestFisAppService( IDeliverRequestRepository repository, IDeliverRequestManager deliverRequestManager, IAreaAppService areaApp, ICustomerAppService customerApp, - ICustomerAddressAppService customerAddressApp - ) + ICustomerAddressAppService customerAddressApp, + ITransactionTypeAppService transactionTypeAppService, + IBalanceAppService balanceAppService, + IItemBasicAppService itemBasicAppService) : base(repository, deliverRequestManager) { _deliverRequestManager = deliverRequestManager; _areaApp = areaApp; _customerApp = customerApp; _customerAddressApp = customerAddressApp; + _transactionTypeAppService = transactionTypeAppService; + _balanceAppService = balanceAppService; + _itemBasicAppService = itemBasicAppService; } + #region 东阳 + + private async Task SetRequestAutoPropertiesAsync(DeliverRequest entity) + { + var tranType = await TransactionTypeAclService.GetByTransTypeAsync(EnumTransType.Deliver, EnumTransSubType.Deliver_FIS).ConfigureAwait(false); + + Check.NotNull(tranType, "事务类型", "事务类型不存在"); + + entity.AutoCompleteJob = tranType.AutoCompleteJob; + entity.AutoSubmit = tranType.AutoSubmitRequest; + entity.AutoAgree = tranType.AutoAgreeRequest; + entity.AutoHandle = tranType.AutoHandleRequest; + entity.DirectCreateNote = tranType.DirectCreateNote; + entity.DeliverRequestType = EnumDeliverRequestType.FIS; + } + + protected override async Task> ImportProcessingEntityAsync(Dictionary dictionary) + { + var addList = dictionary.Where(p => p.Value == EntityState.Added).Select(p => p.Key); + + foreach (var itemTransformRequest in addList) + { + itemTransformRequest.Worker = CurrentUser.GetUserName(); + itemTransformRequest.CreatorId = CurrentUser.Id; + itemTransformRequest.DeliverRequestType = EnumDeliverRequestType.FIS; + await SetRequestAutoPropertiesAsync(itemTransformRequest).ConfigureAwait(false); + foreach (var detail in itemTransformRequest.Details) + { + var itemBasicDto = await _itemBasicAppService.GetByCodeAsync(detail.ItemCode).ConfigureAwait(false); + var transactionType = await _transactionTypeAppService.GetByTransTypeAsync(EnumTransType.Deliver, + EnumTransSubType.Deliver_FIS) + .ConfigureAwait(false); + + var balances = await _balanceAppService.GetRecommendBalancesAsync( + new RecommendBalanceRequestInput() + { + ItemCode = itemBasicDto.Code, + Qty = detail.Qty, + LocationTypes = transactionType.OutLocationTypes, + LocationAreas = new List() { detail.AreaCode }, + Statuses = transactionType.OutInventoryStatuses + }).ConfigureAwait(false); + + var balanceSumQty = balances.Sum(t => t.Qty); + + if (balanceSumQty < detail.Qty) + { + throw new UserFriendlyException($"物料号 {detail.ItemCode} " + + $"在库位类型 {transactionType.OutLocationTypes.JoinAsString(",")}," + + $"库区 {detail.AreaCode} " + + $"状态 {transactionType.OutInventoryStatuses.JoinAsString(",")}" + + $"库存余额 {balanceSumQty} 小于 {detail.Qty}。"); + } + + detail.ItemDesc1 = itemBasicDto.Desc1; + detail.ItemDesc2 = itemBasicDto.Desc2; + detail.ItemName = itemBasicDto.Name; + detail.Uom = itemBasicDto.BasicUom; + + } + } + + return dictionary; + } + + #endregion + [HttpPost("list")] public override Task> GetPagedListByFilterAsync( SfsStoreRequestInputBase sfsRequestInput, @@ -55,7 +131,7 @@ public class DeliverRequestFisAppService : CancellationToken cancellationToken = default) { sfsRequestInput.Condition.Filters.Add( - new Filter(nameof(DeliverRequest.DeliverRequestType), "2")); + new Filter(nameof(DeliverRequest.DeliverRequestType), "FIS")); return base.GetPagedListByFilterAsync(sfsRequestInput, includeDetails, cancellationToken); } @@ -285,19 +361,7 @@ public class DeliverRequestFisAppService : await SetRequestAutoPropertiesAsync(entity).ConfigureAwait(false); } - private async Task SetRequestAutoPropertiesAsync(DeliverRequest entity) - { - var tranType = await TransactionTypeAclService.GetByTransTypeAsync(EnumTransType.Deliver, EnumTransSubType.Deliver_FIS).ConfigureAwait(false); - - Check.NotNull(tranType, "事务类型", "事务类型不存在"); - - entity.AutoCompleteJob = tranType.AutoCompleteJob; - entity.AutoSubmit = tranType.AutoSubmitRequest; - entity.AutoAgree = tranType.AutoAgreeRequest; - entity.AutoHandle = tranType.AutoHandleRequest; - entity.DirectCreateNote = tranType.DirectCreateNote; - entity.DeliverRequestType = EnumDeliverRequestType.FIS; - } + #endregion } diff --git a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Requests/ItemTransformRequests/ItemTransformRequestAppService.cs b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Requests/ItemTransformRequests/ItemTransformRequestAppService.cs index 3d655298c..647f38610 100644 --- a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Requests/ItemTransformRequests/ItemTransformRequestAppService.cs +++ b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Requests/ItemTransformRequests/ItemTransformRequestAppService.cs @@ -12,6 +12,7 @@ using Win_in.Sfs.Label.Application.Contracts; using Win_in.Sfs.Shared.Application.Contracts; using Win_in.Sfs.Shared.Domain; using Win_in.Sfs.Shared.Domain.Shared; +using Win_in.Sfs.Wms.Inventory.Application.Contracts; using Win_in.Sfs.Wms.Store.Application.Contracts; using Win_in.Sfs.Wms.Store.Domain; using Win_in.Sfs.Wms.Store.Domain.Shared; @@ -31,14 +32,17 @@ public class ItemTransformRequestAppService : private readonly IItemTransformRequestManager _manager; private readonly IInventoryLabelAppService _inventoryLabelAppService; + private readonly IBalanceAppService _balanceAppService; public ItemTransformRequestAppService( IItemTransformRequestRepository repository, IItemTransformRequestManager manager, - IInventoryLabelAppService inventoryLabelAppService) : base(repository, manager) + IInventoryLabelAppService inventoryLabelAppService, + IBalanceAppService balanceAppService) : base(repository, manager) { _manager = manager; _inventoryLabelAppService = inventoryLabelAppService; + _balanceAppService = balanceAppService; } /// @@ -72,16 +76,27 @@ public class ItemTransformRequestAppService : var fromLocationDto= await LocationAclService.GetByCodeAsync(detail.FromLocationCode).ConfigureAwait(false); var toLocationDto= await LocationAclService.GetByCodeAsync(detail.ToLocationCode).ConfigureAwait(false); var itemBasicDto=await ItemBasicAclService.GetByCodeAsync(detail.ItemCode).ConfigureAwait(false); + var balanceDto= await _balanceAppService.GetByItemLocationAndPackingAsync(detail.FromPackingCode, detail.ItemCode, + detail.FromLocationCode).ConfigureAwait(false); detail.FromLocationArea = fromLocationDto.AreaCode; detail.FromLocationErpCode = fromLocationDto.ErpLocationCode; detail.FromLocationGroup = fromLocationDto.LocationGroupCode; detail.FromWarehouseCode = fromLocationDto.WarehouseCode; + detail.FromSupplierBatch = balanceDto.SupplierBatch; + detail.FromLot = balanceDto.Lot; + detail.FromStatus = balanceDto.Status; + + detail.ToSupplierBatch = string.Empty; + detail.ToLot = balanceDto.Lot; + detail.ToStatus = balanceDto.Status; + detail.ToLocationArea = toLocationDto.AreaCode; detail.ToLocationErpCode = toLocationDto.ErpLocationCode; detail.ToLocationGroup = toLocationDto.LocationGroupCode; detail.ToWarehouseCode = toLocationDto.WarehouseCode; + detail.ItemDesc1 = itemBasicDto.Desc1; detail.ItemDesc2= itemBasicDto.Desc2; detail.ItemName= itemBasicDto.Name; diff --git a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Requests/ProductRecycleRequests/ProductRecycleRequestAppService.cs b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Requests/ProductRecycleRequests/ProductRecycleRequestAppService.cs index c974a01d1..0393a2ccd 100644 --- a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Requests/ProductRecycleRequests/ProductRecycleRequestAppService.cs +++ b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Requests/ProductRecycleRequests/ProductRecycleRequestAppService.cs @@ -5,6 +5,7 @@ using System.Threading.Tasks; using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Mvc; +using Microsoft.EntityFrameworkCore; using Volo.Abp; using Win_in.Sfs.Basedata.Application.Contracts; using Win_in.Sfs.Shared.Domain; @@ -17,6 +18,7 @@ namespace Win_in.Sfs.Wms.Store.Application; using System.ComponentModel.DataAnnotations; using Volo.Abp.Data; +using Volo.Abp.Domain.Entities; using Win_in.Sfs.Shared.Application.Contracts; using Win_in.Sfs.Wms.Inventory.Application.Contracts; @@ -27,23 +29,32 @@ using Win_in.Sfs.Wms.Inventory.Application.Contracts; [Route($"{StoreConsts.RootPath}product-recycle-request")] public class ProductRecycleRequestAppService : - SfsStoreRequestAppServiceBase, + SfsStoreRequestAppServiceBase, IProductRecycleRequestAppService { private readonly IProductRecycleRequestManager _productRecycleRequestManager; private readonly IBomAppService _bomApp; private readonly IItemStoreRelationAppService _itemStoreRelationApp; + private readonly IItemBasicAppService _itemBasicAppService; + private readonly IBalanceAppService _balanceAppService; + private readonly ILocationAppService _locationAppService; + private readonly ITransactionTypeAppService _transactionTypeAppService; public ProductRecycleRequestAppService( IProductRecycleRequestRepository repository, IProductRecycleRequestManager productRecycleRequestManager, IBomAppService bomApp, - IItemStoreRelationAppService itemStoreRelationApp) + IItemStoreRelationAppService itemStoreRelationApp, ILocationAppService locationAppService, IBalanceAppService balanceAppService, ITransactionTypeAppService transactionTypeAppService) : base(repository, productRecycleRequestManager) { _productRecycleRequestManager = productRecycleRequestManager; _bomApp = bomApp; _itemStoreRelationApp = itemStoreRelationApp; + _locationAppService = locationAppService; + _balanceAppService = balanceAppService; + _transactionTypeAppService = transactionTypeAppService; base.CreatePolicyName = ProductRecycleRequestPermissions.Create; base.UpdatePolicyName = ProductRecycleRequestPermissions.Update; @@ -75,6 +86,100 @@ public class ProductRecycleRequestAppService : throw new NotImplementedException(); } + #region 东阳 + + protected override async Task> ImportProcessingEntityAsync(Dictionary dictionary) + { + var addList = dictionary.Where(p => p.Value == EntityState.Added).Select(p => p.Key); + + foreach (var productRecycleRequest in addList) + { + await SetRequestAutoPropertiesAsync(productRecycleRequest) + .ConfigureAwait(false); + productRecycleRequest.Worker = CurrentUser.GetUserName(); + + foreach (var detail in productRecycleRequest.Details) + { + var balance = await _balanceAppService.GetByItemLocationAndPackingAsync( + string.Empty, + detail.ItemCode, + detail.LocationCode).ConfigureAwait(false); + + if (balance != null) + { + detail.Status = balance.Status; + } + + var locationDto = await _locationAppService.GetByCodeAsync(detail.LocationCode) + .ConfigureAwait(false); + + await SetDetailPropertiesAsync(detail).ConfigureAwait(false); + } + } + + return dictionary; + } + + private async Task SetRequestAutoPropertiesAsync(ProductRecycleRequest entity) + { + var tranType = await _transactionTypeAppService.GetByTransTypeAsync(EnumTransType.ProductRecycle, EnumTransSubType.None).ConfigureAwait(false); + + Check.NotNull(tranType, "事务类型", "事务类型不存在"); + + entity.AutoCompleteJob = tranType.AutoCompleteJob; + entity.AutoSubmit = tranType.AutoSubmitRequest; + entity.AutoAgree = tranType.AutoAgreeRequest; + entity.AutoHandle = tranType.AutoHandleRequest; + entity.DirectCreateNote = tranType.DirectCreateNote; + } + + private async Task SetDetailPropertiesAsync( + ProductRecycleRequestDetail detail) + { + var item = await ItemBasicAclService.GetByCodeAsync(detail.ItemCode).ConfigureAwait(false); + + if (item != null) + { + detail.ItemName = item.Name; + detail.ItemDesc1 = item.Desc1; + detail.ItemDesc2 = item.Desc2; + detail.Uom = item.BasicUom; + detail.Qty = detail.Qty; + } + + var location = await LocationAclService.GetByCodeAsync(detail.LocationCode).ConfigureAwait(false); + + if (location != null) + { + detail.LocationErpCode = location.ErpLocationCode; + detail.WarehouseCode = location.WarehouseCode; + detail.LocationGroup = location.LocationGroupCode; + detail.LocationArea = location.AreaCode; + } + + var rawLocation = await LocationAclService.GetByCodeAsync(detail.RawLocationCode).ConfigureAwait(false); + + if (rawLocation != null) + { + detail.RawLocationErpCode = rawLocation.ErpLocationCode; + detail.RawWarehouseCode = rawLocation.WarehouseCode; + detail.RawLocationArea = rawLocation.AreaCode; + detail.RawLocationGroup = rawLocation.LocationGroupCode; + } + + var balance = await BalanceAclService.GetByItemLocationAndPackingAsync( + string.Empty, + detail.ItemCode, + detail.LocationCode).ConfigureAwait(false); + + if (balance != null) + { + detail.Status = balance.Status; + } + } + + #endregion + #region Import protected virtual async Task CheckImportInputBusinessAsync(ProductRecycleRequestImportInput importInput, EnumImportMethod importMethod, List validationRresult) @@ -202,147 +307,6 @@ public class ProductRecycleRequestAppService : return boms; } - protected virtual async Task ImportDataAsync(List entites, List deleteEntities) - { - await _productRecycleRequestManager.ImportDataAsync(entites, deleteEntities).ConfigureAwait(false); - } - - protected override Func GetEntityExpression() - { - return p => 1; - } - - 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 entites = new List(); - - var details = new List(); - - var deleteEntites = new List(); - - var entityExpression = GetEntityExpression(); - - var groupList = importResult.Data.ToList().GroupBy(entityExpression).Distinct().ToList(); - - foreach (var group in groupList) - { - var input = group.FirstOrDefault(); - - var inputDetails = group.ToList(); - - if (!inputDetails.Any(t => t.ReportStatus == EnumImportReportStatus.Failed)) - { - var exist = await GetEntityAsync(input).ConfigureAwait(false); - - var entity = ObjectMapper.Map(input); - - await SetEntityPropertiesAsync(entity, input).ConfigureAwait(false); - - switch (importMethod) - { - case EnumImportMethod.Update: - if (exist != null) - { - entity.SetId(exist.Id); - } - break; - case EnumImportMethod.Replace: - if (exist != null) - { - deleteEntites.Add(exist); - } - break; - } - - foreach (var inputDetail in inputDetails) - { - var detail = ObjectMapper.Map(inputDetail); - - detail.SetIdAndNumber(GuidGenerator, entity.Id, entity.Number); - - await SetDetailPropertiesAsync(detail, input).ConfigureAwait(false); - entity.AddDetail(detail); - } - - entites.Add(entity); - } - } - - return (entites, deleteEntites); - } - - private async Task SetDetailPropertiesAsync( - ProductRecycleRequestDetail detail, - ProductRecycleRequestImportInput input) - { - var item = await ItemBasicAclService.GetByCodeAsync(detail.ItemCode).ConfigureAwait(false); - - if (item != null) - { - detail.ItemName = item.Name; - detail.ItemDesc1 = item.Desc1; - detail.ItemDesc2 = item.Desc2; - detail.Qty = input.Qty; - } - - var location = await LocationAclService.GetByCodeAsync(detail.LocationCode).ConfigureAwait(false); - - if (location != null) - { - detail.LocationErpCode = location.ErpLocationCode; - detail.WarehouseCode = location.WarehouseCode; - } - - var rawLocation = await LocationAclService.GetByCodeAsync(detail.RawLocationCode).ConfigureAwait(false); - - if (rawLocation != null) - { - detail.RawLocationErpCode = rawLocation.ErpLocationCode; - detail.RawWarehouseCode = rawLocation.WarehouseCode; - } - - var balance = await BalanceAclService.GetByItemLocationAndPackingAsync( - string.Empty, - detail.ItemCode, - input.LocationCode).ConfigureAwait(false); - - if (balance != null) - { - detail.Status = balance.Status; - } - - detail.SetProperty(nameof(input.PreStartTime), input.PreStartTime); - detail.SetProperty(nameof(input.WorkHour), input.WorkHour); - } - - private async Task SetEntityPropertiesAsync(ProductRecycleRequest entity, ProductRecycleRequestImportInput input) - { - entity.Worker = CurrentUser.GetUserName(); - - await SetRequestAutoPropertiesAsync(entity).ConfigureAwait(false); - } - - private async Task SetRequestAutoPropertiesAsync(ProductRecycleRequest entity) - { - var tranType = await TransactionTypeAclService.GetByTransTypeAsync(EnumTransType.ProductRecycle, EnumTransSubType.None).ConfigureAwait(false); - - Check.NotNull(tranType, "事务类型", "事务类型不存在"); - - entity.AutoCompleteJob = tranType.AutoCompleteJob; - entity.AutoSubmit = tranType.AutoSubmitRequest; - entity.AutoAgree = tranType.AutoAgreeRequest; - entity.AutoHandle = tranType.AutoHandleRequest; - entity.DirectCreateNote = tranType.DirectCreateNote; - } - #endregion } diff --git a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Requests/ProductionReturnRequests/ProductionReturnRequestAppService.cs b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Requests/ProductionReturnRequests/ProductionReturnRequestAppService.cs index c180d8e1b..2b7f6a0d5 100644 --- a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Requests/ProductionReturnRequests/ProductionReturnRequestAppService.cs +++ b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Requests/ProductionReturnRequests/ProductionReturnRequestAppService.cs @@ -5,6 +5,7 @@ using System.Threading.Tasks; using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Mvc; +using Microsoft.EntityFrameworkCore; using Volo.Abp; using Win_in.Sfs.Basedata.Application.Contracts; using Win_in.Sfs.Shared.Domain; @@ -27,22 +28,25 @@ public class ProductionReturnRequestAppService : IProductionReturnRequestAppService { private readonly IProductionReturnRequestManager _productionReturnRequestManager; - private readonly IItemStoreRelationAppService _itemStoreRelationApp; - private readonly IPurchaseOrderAppService _purchaseOrderApp; + private readonly IItemBasicAppService _itemBasicAppService; + private readonly ILocationAppService _locationAppService; public ProductionReturnRequestAppService( IProductionReturnRequestRepository repository, IProductionReturnRequestManager productionRequestReturnManager, IItemStoreRelationAppService itemStoreRelationApp, - IPurchaseOrderAppService purchaseOrderApp - ) + IPurchaseOrderAppService purchaseOrderApp, + IItemBasicAppService itemBasicAppService, + ILocationAppService locationAppService) : base(repository, productionRequestReturnManager) { _productionReturnRequestManager = productionRequestReturnManager; _itemStoreRelationApp = itemStoreRelationApp; _purchaseOrderApp = purchaseOrderApp; + _itemBasicAppService = itemBasicAppService; + _locationAppService = locationAppService; } /// @@ -62,6 +66,40 @@ public class ProductionReturnRequestAppService : return dto; } + protected override async Task> ImportProcessingEntityAsync(Dictionary dictionary) + { + var addList = dictionary.Where(p => p.Value == EntityState.Added).Select(p => p.Key); + + foreach (var productionReturnRequest in addList) + { + productionReturnRequest.Worker = CurrentUser.GetUserName(); + productionReturnRequest.CreatorId = CurrentUser.Id; + + await SetRequestAutoPropertiesAsync(productionReturnRequest).ConfigureAwait(false); + foreach (var detail in productionReturnRequest.Details) + { + var itemBasicDto = await _itemBasicAppService.GetByCodeAsync(detail.ItemCode).ConfigureAwait(false); + detail.Uom = itemBasicDto.BasicUom; + detail.StdPackQty=itemBasicDto.StdPackQty; + + var fromLocationDto= await _locationAppService.GetByCodeAsync(detail.FromLocationCode).ConfigureAwait(false); + var toLocationDto = await _locationAppService.GetByCodeAsync(detail.ToLocationCode).ConfigureAwait(false); + + detail.FromLocationArea = fromLocationDto.AreaCode; + detail.FromWarehouseCode = fromLocationDto.WarehouseCode; + detail.FromLocationGroup = fromLocationDto.LocationGroupCode; + detail.FromLocationErpCode= fromLocationDto.ErpLocationCode; + + detail.ToLocationArea = toLocationDto.AreaCode; + detail.ToWarehouseCode = toLocationDto.WarehouseCode; + detail.ToLocationGroup = toLocationDto.LocationGroupCode; + detail.ToLocationErpCode = toLocationDto.ErpLocationCode; + } + } + + return dictionary; + } + #region import protected virtual async Task CheckImportInputBusinessAsync(ProductionReturnRequestImportInput importInput, EnumImportMethod importMethod, List validationRresult) { diff --git a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Event/Requests/ItemTransformRequestEventHandler.cs b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Event/Requests/ItemTransformRequestEventHandler.cs index 199be122d..a71aeb6c3 100644 --- a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Event/Requests/ItemTransformRequestEventHandler.cs +++ b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Event/Requests/ItemTransformRequestEventHandler.cs @@ -44,6 +44,16 @@ public class ItemTransformRequestEventHandler { var transformNoteDetail = new ItemTransformNoteDetailInput() { + FromLocationCode = detail.FromLocationCode, + FromLocationArea = detail.FromLocationArea, + FromLocationErpCode = detail.FromLocationErpCode, + FromLocationGroup = detail.FromLocationGroup, + + ToLocationArea = detail.ToLocationArea, + ToLocationCode = detail.ToLocationCode, + ToLocationErpCode = detail.ToLocationErpCode, + ToLocationGroup = detail.ToLocationGroup, + FromSupplierBatch = detail.FromSupplierBatch, ItemCode = detail.ItemCode, ToItemCode = detail.ToItemCode, @@ -52,7 +62,6 @@ public class ItemTransformRequestEventHandler FromExpireDate = detail.FromExpireDate, FromLot = detail.FromLot, FromPackingCode = detail.FromPackingCode, - ToLocationCode = detail.ToLocationCode, FromStatus = detail.FromStatus, ToContainerCode = detail.ToContainerCode, FromProduceDate = detail.FromProduceDate, @@ -74,6 +83,8 @@ public class ItemTransformRequestEventHandler ToProduceDate = detail.ToProduceDate, ToStatus = detail.ToStatus, ToSupplierBatch = detail.ToSupplierBatch, + FromWarehouseCode = detail.FromWarehouseCode, + ToWarehouseCode = detail.ToWarehouseCode }; createInput.Details.Add(transformNoteDetail); diff --git a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Event/Requests/ProductRecycleRequestEventHandler.cs b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Event/Requests/ProductRecycleRequestEventHandler.cs index a315b3a07..fa0a16a2e 100644 --- a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Event/Requests/ProductRecycleRequestEventHandler.cs +++ b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Event/Requests/ProductRecycleRequestEventHandler.cs @@ -99,7 +99,9 @@ public class ProductRecycleRequestEventHandler LocationErpCode = detail.RawLocationErpCode, WarehouseCode = detail.RawWarehouseCode, Lot = string.Empty, - Status = EnumInventoryStatus.OK + Status = EnumInventoryStatus.OK, + LocationArea = detail.LocationArea, + LocationGroup = detail.LocationGroup, }; if (item != null) diff --git a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Event/Transactions/ItemTransformNoteEventHandler.cs b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Event/Transactions/ItemTransformNoteEventHandler.cs index af56eb5a4..c33adc601 100644 --- a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Event/Transactions/ItemTransformNoteEventHandler.cs +++ b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Event/Transactions/ItemTransformNoteEventHandler.cs @@ -72,7 +72,9 @@ public class ItemTransformNoteEventHandler TransType = Type, TransSubType = SubType, TransInOut = EnumTransInOut.Out, - + LocationArea = detail.FromLocationArea, + LocationGroup = detail.FromLocationGroup, + LocationErpCode = detail.FromLocationErpCode, PackingCode = detail.FromPackingCode, ItemCode = detail.ItemCode, Lot = detail.FromLot, @@ -106,6 +108,9 @@ public class ItemTransformNoteEventHandler ItemCode = detail.ToItemCode, Lot = detail.ToLot, Status = detail.ToStatus, + LocationArea = detail.ToLocationArea, + LocationGroup = detail.ToLocationGroup, + LocationErpCode = detail.ToLocationErpCode, WarehouseCode = detail.ToWarehouseCode, LocationCode = detail.ToLocationCode, ContainerCode = detail.ToContainerCode,