diff --git a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Notes/CountNotes/CountNoteAppService.cs b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Notes/CountNotes/CountNoteAppService.cs index 47cdf7440..828b6c6ee 100644 --- a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Notes/CountNotes/CountNoteAppService.cs +++ b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Notes/CountNotes/CountNoteAppService.cs @@ -8,7 +8,6 @@ using Microsoft.EntityFrameworkCore; using Volo.Abp; using Volo.Abp.Domain.Repositories; using Win_in.Sfs.Basedata.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.Store.Application.Contracts; @@ -18,11 +17,10 @@ using Win_in.Sfs.Wms.Store.Domain.Shared; namespace Win_in.Sfs.Wms.Store.Application; /// -/// 盘点记录 +/// 盘点记录 /// [Authorize] [Route($"{StoreConsts.RootPath}count-note")] - public class CountNoteAppService : SfsStoreWithDetailsAppServiceBase - /// 用来重写 导入数据时可以加工数据 + /// 用来重写 导入数据时可以加工数据 /// /// /// - protected override async Task> ImportProcessingEntityAsync(Dictionary dictionary) + protected override async Task> ImportProcessingEntityAsync( + Dictionary dictionary) { - var dataList = dictionary.Select(p => p.Key);//查询所有的导入盘点数据 + var dataList = dictionary.Select(p => p.Key); //查询所有的导入盘点数据 var resultDictionary = new Dictionary(); - var allCountPlanNumbersList= dataList.GroupBy(p => p.CountPlanNumber).Select(p => p.Key).ToList(); + var allCountPlanNumbersList = dataList.GroupBy(p => p.CountPlanNumber).Select(p => p.Key).ToList(); //特殊处理 因为盘点记录可以重复导入 所以每次导入前删除调原有记录 foreach (var countPlanNumber in allCountPlanNumbersList) { var countPlanDto = await _countPlanAppService.GetByNumberAsync(countPlanNumber).ConfigureAwait(false); - if (countPlanDto.RequestType != CountPlanRequestType.Import) - { - throw new UserFriendlyException("非Excel盘点执行方式不能使用导入"); - } + CheckCountPlanNumber(countPlanDto, countPlanNumber); + CheckCountPlanRequestType(countPlanDto); await _repository.DeleteAsync(p => p.CountPlanNumber == countPlanNumber).ConfigureAwait(false); } @@ -81,40 +77,78 @@ public class CountNoteAppService : { countNote.Worker = CurrentUser.GetUserName(); countNote.CreatorId = CurrentUser.Id; - countNote.BeginTime= DateTime.Now; + countNote.BeginTime = DateTime.Now; countNote.Adjusted = false; - countNote.EndTime=DateTime.Now; + countNote.EndTime = DateTime.Now; countNote.Stage = EnumCountStage.Audit; foreach (var detail in countNote.Details) { - var locationDto= await _locationAppService.GetByCodeAsync(detail.LocationCode).ConfigureAwait(false); - var itemcBasicDto=await _itemBasicAppService.GetByCodeAsync(detail.ItemCode).ConfigureAwait(false); + var locationDto = await _locationAppService.GetByCodeAsync(detail.LocationCode).ConfigureAwait(false); + var itemcBasicDto = await _itemBasicAppService.GetByCodeAsync(detail.ItemCode).ConfigureAwait(false); + CheckLocation(locationDto, detail); + CheckItemBasic(itemcBasicDto, detail); - detail.CountLabel =Guid.NewGuid().ToString(); + detail.CountLabel = Guid.NewGuid().ToString(); detail.LocationArea = locationDto.AreaCode; - detail.LocationGroup= locationDto.LocationGroupCode; - detail.LocationErpCode= locationDto.ErpLocationCode; - detail.WarehouseCode= locationDto.WarehouseCode; + detail.LocationGroup = locationDto.LocationGroupCode; + detail.LocationErpCode = locationDto.ErpLocationCode; + detail.WarehouseCode = locationDto.WarehouseCode; detail.ItemCode = itemcBasicDto.Code; detail.ItemDesc1 = itemcBasicDto.Desc1; detail.ItemDesc2 = itemcBasicDto.Desc2; - detail.ItemName= itemcBasicDto.Name; + detail.ItemName = itemcBasicDto.Name; detail.Uom = itemcBasicDto.BasicUom; } - resultDictionary.Add(countNote,EntityState.Added); + resultDictionary.Add(countNote, EntityState.Added); } return resultDictionary; } + #region 校验 + + private static void CheckItemBasic(ItemBasicDTO itemcBasicDto, CountNoteDetail detail) + { + if (itemcBasicDto == null) + { + throw new UserFriendlyException($"物品代码为【{detail.LocationCode}】不存在"); + } + } + + private static void CheckLocation(LocationDTO locationDto, CountNoteDetail detail) + { + if (locationDto == null) + { + throw new UserFriendlyException($"库位代码为【{detail.LocationCode}】不存在"); + } + } + + private static void CheckCountPlanRequestType(CountPlanDTO countPlanDto) + { + if (countPlanDto.RequestType != CountPlanRequestType.Import) + { + throw new UserFriendlyException("非Excel盘点执行方式不能使用导入"); + } + } + + private static void CheckCountPlanNumber(CountPlanDTO countPlanDto, string countPlanNumber) + { + if (countPlanDto == null) + { + throw new UserFriendlyException($"盘点计划单号为【{countPlanNumber}】不存在"); + } + } + + #endregion + #endregion /// - /// 新增接口 + /// 新增接口 /// /// /// @@ -129,7 +163,7 @@ public class CountNoteAppService : } /// - /// 生成盘点调整申请 + /// 生成盘点调整申请 /// /// [HttpPost("{id}/generate-adjust-request")] @@ -150,11 +184,13 @@ public class CountNoteAppService : protected override async Task GetEntityAsync(CountNoteImportInput importInput) { - var countNote = await _repository.FirstOrDefaultAsync(t => t.CountPlanNumber == importInput.CountPlanNumber).ConfigureAwait(false); + var countNote = await _repository.FirstOrDefaultAsync(t => t.CountPlanNumber == importInput.CountPlanNumber) + .ConfigureAwait(false); - if (countNote != null)//特殊处理 因为盘点记录可以重复导入 所以每次导入前删除调原有记录 + if (countNote != null) //特殊处理 因为盘点记录可以重复导入 所以每次导入前删除调原有记录 { - var countplan = await _countPlanAppService.GetByNumberAsync(countNote.CountPlanNumber).ConfigureAwait(false); + var countplan = await _countPlanAppService.GetByNumberAsync(countNote.CountPlanNumber) + .ConfigureAwait(false); if (countplan != null) { @@ -178,7 +214,7 @@ public class CountNoteAppService : { var groups = entites.Select(p => p.CountPlanNumber).GroupBy(p => p); - if (entites.Any(p => p.Adjusted == true)) + if (entites.Any(p => p.Adjusted)) { throw new UserFriendlyException("库存已调整,不能导入"); } 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 2a980b30b..cf2e633cf 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 @@ -86,6 +86,8 @@ public class DeliverRequestFisAppService : foreach (var detail in itemTransformRequest.Details) { var itemBasicDto = await _itemBasicAppService.GetByCodeAsync(detail.ItemCode).ConfigureAwait(false); + CheckItemBasic(itemBasicDto, detail.ItemCode); + var transactionType = await _transactionTypeAppService.GetByTransTypeAsync(EnumTransType.Deliver, EnumTransSubType.Deliver_FIS) .ConfigureAwait(false); @@ -100,16 +102,11 @@ public class DeliverRequestFisAppService : Statuses = transactionType.OutInventoryStatuses }).ConfigureAwait(false); + CheckBalances(balances, transactionType, itemBasicDto, detail); + 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}。"); - } + CheckBalancesSumQty(balanceSumQty, detail, transactionType); detail.ItemDesc1 = itemBasicDto.Desc1; detail.ItemDesc2 = itemBasicDto.Desc2; @@ -122,6 +119,49 @@ public class DeliverRequestFisAppService : return dictionary; } + #region 校验 + + private static void CheckBalancesSumQty(decimal balanceSumQty, DeliverRequestDetail detail, + TransactionTypeDTO transactionType) + { + if (balanceSumQty < detail.Qty) + { + throw new UserFriendlyException($"物料号 {detail.ItemCode} " + + $"在库位类型 {transactionType.OutLocationTypes.JoinAsString(",")}," + + $"库区 {detail.AreaCode} " + + $"状态 {transactionType.OutInventoryStatuses.JoinAsString(",")}" + + $"库存余额 {balanceSumQty} 小于 {detail.Qty}。"); + } + } + + private static void CheckBalances(List balances, TransactionTypeDTO transactionType, ItemBasicDTO itemBasicDto, + DeliverRequestDetail detail) + { + if (balances == null) + { + var sbLocationTypes = string.Empty; + transactionType.OutLocationTypes.ForEach(p => sbLocationTypes += " " + p.GetDisplayName() + " "); + var sbStatuses = string.Empty; + transactionType.OutInventoryStatuses.ForEach(p => sbLocationTypes += " " + p.GetDisplayName() + " "); + throw new UserFriendlyException( + $"没有物品代码为【{itemBasicDto.Code}】," + + $"数量为【{detail.Qty}】," + + $"出库库位类型为【{sbLocationTypes}】," + + $"区域为【{detail.AreaCode}】," + + $"出库可用状态为【{sbStatuses}】的可用的库存。"); + } + } + + private static void CheckItemBasic(ItemBasicDTO itemcBasicDto, string itemCode) + { + if (itemcBasicDto == null) + { + throw new UserFriendlyException($"物品代码为【{itemCode}】不存在"); + } + } + + #endregion + #endregion [HttpPost("list")] 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 c2e79752c..34f407bc3 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 @@ -3,11 +3,11 @@ using System.Collections.Generic; using System.ComponentModel.DataAnnotations; using System.Linq; 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.Label.Application.Contracts; using Win_in.Sfs.Shared.Application.Contracts; using Win_in.Sfs.Shared.Domain; @@ -20,12 +20,14 @@ using Win_in.Sfs.Wms.Store.Domain.Shared; namespace Win_in.Sfs.Wms.Store.Application; /// -/// 回收料调整申请 +/// 回收料调整申请 /// [Authorize] [Route($"{StoreConsts.RootPath}item-transform-request")] public class ItemTransformRequestAppService : - SfsStoreRequestAppServiceBase, + SfsStoreRequestAppServiceBase, IItemTransformRequestAppService { private const EnumTransSubType SubType = EnumTransSubType.Item_Transform; @@ -45,25 +47,12 @@ public class ItemTransformRequestAppService : _balanceAppService = balanceAppService; } - /// - /// 新增方法 - /// - /// - /// - [HttpPost("")] - - public override async Task CreateAsync(ItemTransformRequestEditInput input) - { - var entity = ObjectMapper.Map(input); - - await _manager.CreateAsync(entity).ConfigureAwait(false); - - var dto = ObjectMapper.Map(entity); + - return dto; - } + #region 东阳 - protected override async Task> ImportProcessingEntityAsync(Dictionary dictionary) + protected override async Task> ImportProcessingEntityAsync( + Dictionary dictionary) { var addList = dictionary.Where(p => p.Value == EntityState.Added).Select(p => p.Key); @@ -73,13 +62,27 @@ public class ItemTransformRequestAppService : itemTransformRequest.CreatorId = CurrentUser.Id; foreach (var detail in itemTransformRequest.Details) { - var fromLocationDto= await LocationAclService.GetByCodeAsync(detail.FromLocationCode).ConfigureAwait(false); - var toLocationDto= await LocationAclService.GetByCodeAsync(detail.ToLocationCode).ConfigureAwait(false); - var fromItemBasicDto=await ItemBasicAclService.GetByCodeAsync(detail.ItemCode).ConfigureAwait(false); + var fromLocationDto = + await LocationAclService.GetByCodeAsync(detail.FromLocationCode).ConfigureAwait(false); + CheckLocation(fromLocationDto, detail.FromLocationCode); + + var toLocationDto = + await LocationAclService.GetByCodeAsync(detail.ToLocationCode).ConfigureAwait(false); + CheckLocation(toLocationDto, detail.ToLocationCode); + + var fromItemBasicDto = await ItemBasicAclService.GetByCodeAsync(detail.ItemCode).ConfigureAwait(false); + CheckItemBasic(fromItemBasicDto, detail.ItemCode); + var toItemBasicDto = await ItemBasicAclService.GetByCodeAsync(detail.ToItemCode).ConfigureAwait(false); - var balanceDto= await _balanceAppService.GetByItemLocationAndPackingAsync(detail.FromPackingCode, detail.ItemCode, + CheckItemBasic(toItemBasicDto, detail.ToItemCode); + + var balanceDto = await _balanceAppService.GetByItemLocationAndPackingAsync(detail.FromPackingCode, + detail.ItemCode, detail.FromLocationCode).ConfigureAwait(false); - var inventoryLabelDto= await _inventoryLabelAppService.GetByCodeAsync(detail.ToPackingCode).ConfigureAwait(false); + + var inventoryLabelDto = await _inventoryLabelAppService.GetByCodeAsync(detail.ToPackingCode) + .ConfigureAwait(false); + CheckLabel(inventoryLabelDto, detail); detail.FromLocationArea = fromLocationDto.AreaCode; detail.FromLocationErpCode = fromLocationDto.ErpLocationCode; @@ -100,8 +103,8 @@ public class ItemTransformRequestAppService : detail.ToWarehouseCode = toLocationDto.WarehouseCode; detail.ItemDesc1 = fromItemBasicDto.Desc1; - detail.ItemDesc2= fromItemBasicDto.Desc2; - detail.ItemName= fromItemBasicDto.Name; + detail.ItemDesc2 = fromItemBasicDto.Desc2; + detail.ItemName = fromItemBasicDto.Name; detail.Uom = fromItemBasicDto.BasicUom; detail.ToItemCode = toItemBasicDto.Code; @@ -112,11 +115,58 @@ public class ItemTransformRequestAppService : } return dictionary; + } + + + #region 校验 + + private void CheckLabel(InventoryLabelDto inventoryLabelDto, ItemTransformRequestDetail detail) + { + if (inventoryLabelDto == null) + { + throw new UserFriendlyException($"标签箱码为【{detail.ToPackingCode}】不存在"); + } + } + + private void CheckItemBasic(ItemBasicDTO ItemBasicDto, string itemCode) + { + if (ItemBasicDto == null) + { + throw new UserFriendlyException($"物品代码为【{itemCode}】不存在"); + } + } + + private void CheckLocation(LocationDTO LocationDto, string LocationCode) + { + if (LocationDto == null) + { + throw new UserFriendlyException($"库位代码为【{LocationCode}】不存在"); + } + } + + #endregion + + #endregion + + /// + /// 新增方法 + /// + /// + /// + [HttpPost("")] + public override async Task CreateAsync(ItemTransformRequestEditInput input) + { + var entity = ObjectMapper.Map(input); + + await _manager.CreateAsync(entity).ConfigureAwait(false); + var dto = ObjectMapper.Map(entity); + return dto; } - protected virtual async Task ImportDataAsync(List entites, List deleteEntities) + protected virtual async Task ImportDataAsync(List entites, + List deleteEntities) { await _manager.ImportDataAsync(entites, deleteEntities).ConfigureAwait(false); } @@ -126,7 +176,9 @@ public class ItemTransformRequestAppService : return t => t.Worker; } - protected virtual async Task<(List entites, List deleteEntities)> BuildImportDataAsync(ImportResult importResult, EnumImportMethod importMethod = EnumImportMethod.Update, bool isAllowPartImport = 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)) { @@ -167,18 +219,21 @@ public class ItemTransformRequestAppService : { 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); + var detail = + ObjectMapper.Map(inputDetail); await SetDetailPropertiesAsync(detail, input).ConfigureAwait(false); entity.AddDetail(detail); @@ -191,7 +246,8 @@ public class ItemTransformRequestAppService : return (entites, deleteEntites); } - private async Task SetDetailPropertiesAsync(ItemTransformRequestDetail detail, ItemTransformRequestImportInput input) + private async Task SetDetailPropertiesAsync(ItemTransformRequestDetail detail, + ItemTransformRequestImportInput input) { var balanceDTO = await BalanceAclService.GetByPackingCodeAsync(detail.FromPackingCode).ConfigureAwait(false); var toItemBasicDTO = await ItemBasicAclService.GetByCodeAsync(detail.ToItemCode).ConfigureAwait(false); @@ -223,7 +279,8 @@ public class ItemTransformRequestAppService : private async Task SetEntityPropertiesAsync(ItemTransformRequest entity, ItemTransformRequestImportInput input) { - var tranType = await TransactionTypeAclService.GetByTransTypeAsync(EnumTransType.Adjust, SubType).ConfigureAwait(false); + var tranType = await TransactionTypeAclService.GetByTransTypeAsync(EnumTransType.Adjust, SubType) + .ConfigureAwait(false); Check.NotNull(tranType, "事务类型", "事务类型不存在"); @@ -234,7 +291,8 @@ public class ItemTransformRequestAppService : entity.DirectCreateNote = tranType.DirectCreateNote; } - protected virtual async Task CheckImportInputBusinessAsync(ItemTransformRequestImportInput importInput, EnumImportMethod importMethod, List validationRresult) + protected virtual async Task CheckImportInputBusinessAsync(ItemTransformRequestImportInput importInput, + EnumImportMethod importMethod, List validationRresult) { //await base.CheckImportInputBusinessAsync(importInput, importMethod); @@ -298,15 +356,16 @@ public class ItemTransformRequestAppService : var label = await _inventoryLabelAppService.GetByCodeAsync(packingCode).ConfigureAwait(false); if (label != null) { - var inventory = await BalanceAclService.GetListByPackingCodesAsync(new List { packingCode }).ConfigureAwait(false); + var inventory = await BalanceAclService.GetListByPackingCodesAsync(new List { packingCode }) + .ConfigureAwait(false); if (inventory.Count > 0) { - validationRresult.Add("库存余额已存在", $"库存余额已存在,请重新打印标签并导入。"); + validationRresult.Add("库存余额已存在", "库存余额已存在,请重新打印标签并导入。"); } } else { - validationRresult.Add("标签不存在", $"标签不存在,请重新打印标签并导入。"); + validationRresult.Add("标签不存在", "标签不存在,请重新打印标签并导入。"); } } } diff --git a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Requests/MaterialRequests/MaterialRequestAppService.cs b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Requests/MaterialRequests/MaterialRequestAppService.cs index bf07d2a39..304fd2166 100644 --- a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Requests/MaterialRequests/MaterialRequestAppService.cs +++ b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Requests/MaterialRequests/MaterialRequestAppService.cs @@ -86,7 +86,10 @@ public class MaterialRequestAppService : SfsStoreRequestAppServiceBase(entity); } + #region 校验 + + private void CheckItemBasic(ItemBasicDTO ItemBasicDto, string itemCode) + { + if (ItemBasicDto == null) + { + throw new UserFriendlyException($"物品代码为【{itemCode}】不存在"); + } + } + + private void CheckLocation(LocationDTO LocationDto, string LocationCode) + { + if (LocationDto == null) + { + throw new UserFriendlyException($"库位代码为【{LocationCode}】不存在"); + } + } + + + #endregion + #endregion [HttpPost("")] diff --git a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Requests/PurchaseReturnRequests/PurchaseReturnRequestAppService.cs b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Requests/PurchaseReturnRequests/PurchaseReturnRequestAppService.cs index 6da296b61..24a24a7d9 100644 --- a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Requests/PurchaseReturnRequests/PurchaseReturnRequestAppService.cs +++ b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Requests/PurchaseReturnRequests/PurchaseReturnRequestAppService.cs @@ -38,19 +38,22 @@ public class PurchaseReturnRequestAppService : private readonly ITransactionTypeAppService _transactionTypeAppService; private readonly IPurchaseReturnRequestManager _purchaseReturnRequestManager; private readonly IPurchaseOrderAppService _purchaseOrderAppService; + private readonly IBalanceAppService _balanceAppService; public PurchaseReturnRequestAppService( IPurchaseReturnRequestRepository repository, IPurchaseReturnRequestManager purchaseReturnRequestManager, IInventoryLabelAppService inventoryLabelApp, ILocationAppService locationAppService, ITransactionTypeAppService transactionTypeAppService, - IPurchaseOrderAppService purchaseOrderAppService) : base(repository, purchaseReturnRequestManager) + IPurchaseOrderAppService purchaseOrderAppService, + IBalanceAppService balanceAppService) : base(repository, purchaseReturnRequestManager) { _purchaseReturnRequestManager = purchaseReturnRequestManager; _inventoryLabelApp = inventoryLabelApp; _locationAppService = locationAppService; _transactionTypeAppService = transactionTypeAppService; _purchaseOrderAppService = purchaseOrderAppService; + _balanceAppService = balanceAppService; base.CreatePolicyName = PurchaseReturnRequestPermissions.Create; base.UpdatePolicyName = PurchaseReturnRequestPermissions.Update; @@ -97,15 +100,14 @@ public class PurchaseReturnRequestAppService : { //通过箱标签 查找标签服务 构造其他字段 var labelDto = await _inventoryLabelApp.GetByCodeAsync(detail.PackingCode).ConfigureAwait(false); - var balanceDto = await BalanceAclService.GetByPackingCodeAsync(detail.PackingCode).ConfigureAwait(false); + var balanceDto = await _balanceAppService.GetByPackingCodeAsync(detail.PackingCode).ConfigureAwait(false); var locationDto= await _locationAppService.GetByCodeAsync(balanceDto.LocationCode).ConfigureAwait(false); + var purchaseOrderDto = await _purchaseOrderAppService.GetByNumberAsync(labelDto.PoNumber).ConfigureAwait(false); + purchaseOrderDto = await _purchaseOrderAppService.GetAsync(purchaseOrderDto.Id).ConfigureAwait(false); + CheckPurchaseOrder(purchaseOrderDto, labelDto); CheckLabel(labelDto, detail); CheckBalance(balanceDto, detail); CheckLocation(locationDto, balanceDto); - - var purchaseOrderDto= await _purchaseOrderAppService.GetByNumberAsync(labelDto.PoNumber).ConfigureAwait(false); - purchaseOrderDto = await _purchaseOrderAppService.GetAsync(purchaseOrderDto.Id).ConfigureAwait(false); - purchaseReturnRequest.AsnNumber = labelDto.AsnNumber; purchaseReturnRequest.RpNumber = labelDto.RpNumber; purchaseReturnRequest.ReturnTime=DateTime.Now; @@ -193,13 +195,21 @@ public class PurchaseReturnRequestAppService : #region 校验 + private void CheckPurchaseOrder(PurchaseOrderDTO purchaseOrderDto, InventoryLabelDto labelDto) + { + if (purchaseOrderDto == null) + { + throw new UserFriendlyException($"采购订单编号为【{labelDto.PoNumber}】不存在"); + } + } + /// /// 校验库位 /// /// /// /// - private static void CheckLocation(LocationDTO locationDto, BalanceDTO balanceDto) + private void CheckLocation(LocationDTO locationDto, BalanceDTO balanceDto) { if (locationDto == null) { @@ -213,7 +223,7 @@ public class PurchaseReturnRequestAppService : /// /// /// - private static void CheckBalance(BalanceDTO balanceDto, PurchaseReturnRequestDetail detail) + private void CheckBalance(BalanceDTO balanceDto, PurchaseReturnRequestDetail detail) { if (balanceDto == null) { @@ -227,7 +237,7 @@ public class PurchaseReturnRequestAppService : /// /// /// - private static void CheckLabel(InventoryLabelDto labelDto, PurchaseReturnRequestDetail detail) + private void CheckLabel(InventoryLabelDto labelDto, PurchaseReturnRequestDetail detail) { if (labelDto == null) {