diff --git a/be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application.Contracts/Locations/ILocationAppService.cs b/be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application.Contracts/Locations/ILocationAppService.cs index a46e86f0a..fdfb1d4cf 100644 --- a/be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application.Contracts/Locations/ILocationAppService.cs +++ b/be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application.Contracts/Locations/ILocationAppService.cs @@ -31,6 +31,5 @@ public interface ILocationAppService Task> GetListByManyCodes(List codes); Task> GetListByTypesAndErpCodeAsync(List types, string erpCode); Task> GetListByTypesAndErpCodeAsync(List types, string erpCode,string locCode); - - + Task> GetListByErpLocationCodes(List ErpLocationCodes); } diff --git a/be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application.Contracts/PurchasePrices/IPurchasePriceSheetAppService.cs b/be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application.Contracts/PurchasePrices/IPurchasePriceSheetAppService.cs index 6dd5ec48e..b4939e6cb 100644 --- a/be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application.Contracts/PurchasePrices/IPurchasePriceSheetAppService.cs +++ b/be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application.Contracts/PurchasePrices/IPurchasePriceSheetAppService.cs @@ -5,6 +5,7 @@ namespace Win_in.Sfs.Basedata.Application.Contracts; public interface IPurchasePriceSheetAppService : ISfsBaseDataAppServiceBase { + Task CheckPurPriceAsync(string supplierCode, string itemCode); Task GetByItemCodeAsync(string itemCode,string supplierCode); Task UpsertAsyncByInterface(PurchasePriceSheetEditInput input); } diff --git a/be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application/Locations/LocationAppService.cs b/be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application/Locations/LocationAppService.cs index 61e0db700..1ad9ec748 100644 --- a/be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application/Locations/LocationAppService.cs +++ b/be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application/Locations/LocationAppService.cs @@ -202,7 +202,15 @@ public class LocationAppService return dtos; } + [HttpPost("get-list-by-erplocation-codes")] + public virtual async Task> GetListByErpLocationCodes(List ErpLocationCodes) + { + var entitys = await _repository.GetListAsync(p => ErpLocationCodes.Contains(p.ErpLocationCode)).ConfigureAwait(false); + + var dtos = ObjectMapper.Map, List>(entitys); + return dtos; + } [HttpGet("get-all")] //[Authorize(LocationPermissions.Default)] public virtual async Task> GetAllAsync() diff --git a/be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application/PurchasePrices/PurchasePriceSheetAppService.cs b/be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application/PurchasePrices/PurchasePriceSheetAppService.cs index 8f75e08fe..2321d2a0c 100644 --- a/be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application/PurchasePrices/PurchasePriceSheetAppService.cs +++ b/be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application/PurchasePrices/PurchasePriceSheetAppService.cs @@ -41,4 +41,16 @@ public class PurchasePriceSheetAppService : SfsBaseDataAppServiceBase(input); await _repository.UpsertAsyncByInterface(entity).ConfigureAwait(false); } + /// + /// 判断是否有采购价格 + /// + /// + [HttpPost("check-purprice")] + public virtual async Task CheckPurPriceAsync( string supplierCode, string itemCode) + { + bool result = false; + var entitys = await _repository.GetListAsync(p => p.SupplierCode == supplierCode && p.ItemCode == itemCode && p.SupplierCode == supplierCode, true).ConfigureAwait(false); + if (entitys.Count != 0) result = true; + return result; + } } diff --git a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Notes/PutawayNotes/PutawayNoteAppService.cs b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Notes/PutawayNotes/PutawayNoteAppService.cs index 96813e3c8..ff411e10a 100644 --- a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Notes/PutawayNotes/PutawayNoteAppService.cs +++ b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Notes/PutawayNotes/PutawayNoteAppService.cs @@ -17,6 +17,7 @@ using Win_in.Sfs.Wms.Store.Domain.Shared; namespace Win_in.Sfs.Wms.Store.Application; using System.Linq; +using Win_in.Sfs.Basedata.Application.Contracts; [Authorize] [Route($"{StoreConsts.RootPath}putaway-note")] @@ -29,18 +30,21 @@ public class PutawayNoteAppService : private readonly IPurchaseReceiptNoteAppService _purchaseReceiptNoteAppService; public readonly IInspectJobAppService _inspectJobAppService; public readonly IPurchaseOrderManager _purchaseOrderManager; + public readonly IPurchasePriceSheetAppService _purchasePriceSheetAppService; public PutawayNoteAppService( IPutawayNoteRepository repository, IPutawayNoteManager putawayNoteManager, IPurchaseReceiptNoteAppService purchaseReceiptNoteAppService, IInspectJobAppService inspectJobAppService, - IPurchaseOrderManager purchaseOrderManager) : base(repository) + IPurchaseOrderManager purchaseOrderManager, + IPurchasePriceSheetAppService purchasePriceSheetAppService ) : base(repository) { _putawayNoteManager = putawayNoteManager; _purchaseReceiptNoteAppService = purchaseReceiptNoteAppService; _inspectJobAppService = inspectJobAppService; _purchaseOrderManager = purchaseOrderManager; + _purchasePriceSheetAppService = purchasePriceSheetAppService; } /// @@ -59,7 +63,12 @@ public class PutawayNoteAppService : var isClosed = await _purchaseOrderManager.CheckIsCloseAsync(input.Number,input.SupplierCode, detail.ItemCode).ConfigureAwait(false); if (isClosed) { - throw new UserFriendlyException($"零件名称【{detail.ItemCode}】的订单明细行以关闭无法执行采购上价!"); + throw new UserFriendlyException($"零件名称【{detail.ItemCode}】的订单明细行以关闭无法执行采购上架!"); + } + var isprice = await _purchasePriceSheetAppService.CheckPurPriceAsync(input.SupplierCode, detail.ItemCode).ConfigureAwait(false); + if (isClosed) + { + throw new UserFriendlyException($"供应商【{input.SupplierCode}】零件名称【{detail.ItemCode}】无采购价格无法执行采购上架!"); } var purchasereDetail = await _purchaseReceiptNoteAppService .GetDetailByItemAndPackingAsync(detail.ItemCode, detail.ToPackingCode).ConfigureAwait(false); diff --git a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Orders/PurchaseOrders/PurchaseOrderAppService.cs b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Orders/PurchaseOrders/PurchaseOrderAppService.cs index a841c2f0f..47cfe36e0 100644 --- a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Orders/PurchaseOrders/PurchaseOrderAppService.cs +++ b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Orders/PurchaseOrders/PurchaseOrderAppService.cs @@ -28,17 +28,20 @@ public class PurchaseOrderAppService : private readonly IPurchaseOrderManager _purchaseOrderManager; private readonly ISupplierAppService _supplierAppService; private readonly IItemBasicAppService _itemBasicAppService; + private readonly ILocationAppService _locationAppService; public PurchaseOrderAppService( IPurchaseOrderRepository repository, IPurchaseOrderManager purchaseOrderManager, ISupplierAppService supplierAppService, - IItemBasicAppService itemBasicAppService) : base(repository) + IItemBasicAppService itemBasicAppService + , ILocationAppService locationAppService) : base(repository) { _repository = repository; _purchaseOrderManager = purchaseOrderManager; _supplierAppService = supplierAppService; _itemBasicAppService = itemBasicAppService; + _locationAppService = locationAppService; base.CreatePolicyName = PurchaseOrderPermissions.Create; base.UpdatePolicyName = PurchaseOrderPermissions.Update; base.DeletePolicyName = PurchaseOrderPermissions.Delete; @@ -56,6 +59,15 @@ public class PurchaseOrderAppService : { var ImportData = dictionary.Select(p => p.Key); + + #region 校验ERP库位是否存在 + var allTempErpLocationCode = ImportData.Select(p => p.Details.Select(p => p.LocationErpCode).ToList()).ToList(); + var allErpLocationCode = new List(); + allTempErpLocationCode.ForEach(p => { allErpLocationCode.AddRange(p); }); + var erpLocations = await CheckErpLocationCodeAsync(allErpLocationCode).ConfigureAwait(false); + + #endregion + var supplierDtos = new List(); #region 校验供应商 @@ -190,7 +202,21 @@ public class PurchaseOrderAppService : return result; } + private async Task> CheckErpLocationCodeAsync(List erpLocationCodes) + { + erpLocationCodes = erpLocationCodes.Distinct().ToList(); + var result = await _locationAppService.GetListByErpLocationCodes(erpLocationCodes).ConfigureAwait(false); + var resultcode = result.Select(r => r.ErpLocationCode).Distinct(); + foreach (var code in erpLocationCodes) + { + if (resultcode.All(p => p != code)) + { + throw new UserFriendlyException($"ERP储位代码【{code}】不存在"); + } + } + return result; + } #endregion