From 6cdc537cb50fa185ff5823a759e05733509057f7 Mon Sep 17 00:00:00 2001 From: lvzb <35200379@qq.com> Date: Thu, 22 Feb 2024 10:33:12 +0800 Subject: [PATCH] =?UTF-8?q?=E9=87=87=E8=B4=AD=E8=AE=A2=E5=8D=95=E5=90=8C?= =?UTF-8?q?=E6=AD=A5=E5=92=8C=E5=8F=91=E8=B4=A7=E5=8D=95=E5=90=8C=E6=AD=A5?= =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E5=88=A4=E6=96=AD=EF=BC=8C=E4=B8=8A=E4=BB=B7?= =?UTF-8?q?=E5=88=A4=E6=96=AD=E8=AE=A2=E8=B4=A7=E5=8D=95=E6=98=AF=E5=90=A6?= =?UTF-8?q?=E5=85=B3=E9=97=AD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Incoming/PlanReader.cs | 7 +-- .../Incoming/ShipReader.cs | 13 ++++- .../IncomingToWmsExtensions.cs | 2 +- .../IPurchaseOrderAppService.cs | 2 + .../PutawayNotes/PutawayNoteAppService.cs | 10 +++- .../PurchaseOrders/PurchaseOrderAppService.cs | 51 ++++++++++++++++++- .../PurchaseOrders/IPurchaseOrderManager.cs | 1 + .../PurchaseOrders/PurchaseOrderManager.cs | 14 ++++- 8 files changed, 91 insertions(+), 9 deletions(-) diff --git a/be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.Fawtyg.EosAgent/Incoming/PlanReader.cs b/be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.Fawtyg.EosAgent/Incoming/PlanReader.cs index 296063800..8ef4e92dd 100644 --- a/be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.Fawtyg.EosAgent/Incoming/PlanReader.cs +++ b/be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.Fawtyg.EosAgent/Incoming/PlanReader.cs @@ -109,9 +109,10 @@ public class PlanReader : IReader OrderDate = plan.ReleaseDate, DueDate = plan.PlanArriveDate, ContactName = plan.PlanUserCode, - OrderStatus = plan.PlanBillState == 0 - ? EnumOrderStatus.Open - : EnumOrderStatus.Close, + //OrderStatus = plan.PlanBillState == 0 + // ? EnumOrderStatus.Open + // : EnumOrderStatus.Close, + OrderStatus= EnumOrderStatus.Open, ActiveDate = plan.EosDate, Worker = plan.PlanUserCode, // PoType = "2", diff --git a/be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.Fawtyg.EosAgent/Incoming/ShipReader.cs b/be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.Fawtyg.EosAgent/Incoming/ShipReader.cs index d32b3838b..a27f4d930 100644 --- a/be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.Fawtyg.EosAgent/Incoming/ShipReader.cs +++ b/be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.Fawtyg.EosAgent/Incoming/ShipReader.cs @@ -11,6 +11,7 @@ using Win_in.Sfs.Wms.DataExchange.Domain; using Win_in.Sfs.Wms.DataExchange.Domain.Fawtyg.EOS; using Win_in.Sfs.Wms.DataExchange.Domain.Shared; using Win_in.Sfs.Wms.DataExchange.WMS.SuppplierAsn; +using Win_in.Sfs.Wms.Store.Application.Contracts; namespace Win_in.Sfs.Wms.DataExchange.Fawtyg.EosAgent; @@ -22,12 +23,14 @@ public class ShipReader : IReader private readonly ILogger _logger; private readonly ISupplierItemAppService _supplierItemAppService; private readonly ISupplierAppService _supplierAppService; + private readonly IPurchaseOrderAppService _purchaseOrderAppService; public ShipReader( IShipManager shipManager , IIncomingFromExternalManager incomingFromExternalManager , ILogger logger, ISupplierItemAppService supplierItemAppService, - ISupplierAppService supplierAppService + ISupplierAppService supplierAppService, + IPurchaseOrderAppService purchaseOrderAppService ) { _shipManager = shipManager; @@ -35,6 +38,7 @@ public class ShipReader : IReader _logger = logger; _supplierItemAppService = supplierItemAppService; _supplierAppService = supplierAppService; + _purchaseOrderAppService=purchaseOrderAppService; } public virtual async Task> ReadAsync() @@ -52,6 +56,13 @@ public class ShipReader : IReader { toBeProcessedShips = toBeProcessedShips.Where(r => !shipbillno.Contains(r.ShipBillNo)).ToList(); } + //排除没有订单号的收货单(被排出的下次同步) + var pobilllist= toBeProcessedShips.Select(r => r.PlanBillNo).Distinct().ToList(); + var ponumber =await _purchaseOrderAppService.GetNoPoBillList(pobilllist).ConfigureAwait(false); + if(ponumber.Count > 0) + { + toBeProcessedShips = toBeProcessedShips.Where(r => !ponumber.Contains(r.PlanBillNo)).ToList(); + } //Ship逐一转换为SupplierAsn var incomingDataList = await BuildIncomingFromExternalFromShipAsync(toBeProcessedShips).ConfigureAwait(false); await _incomingFromExternalManager.CreateManyAsync(incomingDataList).ConfigureAwait(false); diff --git a/be/DataExchange/src/Win_in.Sfs.Wms.DataExchange.Agent/IncomingToWmsExtensions.cs b/be/DataExchange/src/Win_in.Sfs.Wms.DataExchange.Agent/IncomingToWmsExtensions.cs index f68a7724f..df79d9221 100644 --- a/be/DataExchange/src/Win_in.Sfs.Wms.DataExchange.Agent/IncomingToWmsExtensions.cs +++ b/be/DataExchange/src/Win_in.Sfs.Wms.DataExchange.Agent/IncomingToWmsExtensions.cs @@ -21,7 +21,7 @@ public static class IncomingToWmsExtensions { var purchaseOrder = JsonSerializer.Deserialize(incomingConverted.DataContent); var purchaseOrderAppService = workerContext.ServiceProvider.GetRequiredService(); - await purchaseOrderAppService.CreateAsync(purchaseOrder).ConfigureAwait(false); + await purchaseOrderAppService.CreateOrUpdateAsync(purchaseOrder).ConfigureAwait(false); } public static async Task HandleAsnsAsync(this IncomingToWms incomingConverted, PeriodicBackgroundWorkerContext workerContext) diff --git a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Orders/PurchaseOrders/IPurchaseOrderAppService.cs b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Orders/PurchaseOrders/IPurchaseOrderAppService.cs index 034ea1a1b..1a1394242 100644 --- a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Orders/PurchaseOrders/IPurchaseOrderAppService.cs +++ b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Orders/PurchaseOrders/IPurchaseOrderAppService.cs @@ -39,4 +39,6 @@ public interface IPurchaseOrderAppService Task> CreateManyAsync(List inputs); Task> GetListBySupplierCodeAsync(string supplierCode, string itemCode); + Task> GetNoPoBillList(List poBillNo); + Task CreateOrUpdateAsync(PurchaseOrderEditInput input); } 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 b7c51fa86..a0ef39adc 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 @@ -28,16 +28,19 @@ public class PutawayNoteAppService : private readonly IPutawayNoteManager _putawayNoteManager; private readonly IPurchaseReceiptNoteAppService _purchaseReceiptNoteAppService; public readonly IInspectJobAppService _inspectJobAppService; + public readonly IPurchaseOrderManager _purchaseOrderManager; public PutawayNoteAppService( IPutawayNoteRepository repository, IPutawayNoteManager putawayNoteManager, IPurchaseReceiptNoteAppService purchaseReceiptNoteAppService, - IInspectJobAppService inspectJobAppService) : base(repository) + IInspectJobAppService inspectJobAppService, + IPurchaseOrderManager purchaseOrderManager) : base(repository) { _putawayNoteManager = putawayNoteManager; _purchaseReceiptNoteAppService = purchaseReceiptNoteAppService; _inspectJobAppService = inspectJobAppService; + _purchaseOrderManager = purchaseOrderManager; } /// @@ -53,6 +56,11 @@ public class PutawayNoteAppService : { try { + var isClosed = await _purchaseOrderManager.CheckIsCloseAsync(input.Number,input.SupplierCode, detail.ItemCode).ConfigureAwait(false); + if (isClosed) + { + throw new UserFriendlyException($"零件名称【{detail.ItemCode}】的订单明细行以关闭无法执行采购上价!"); + } var purchasereDetail = await _purchaseReceiptNoteAppService .GetDetailByItemAndPackingAsync(detail.ItemCode, detail.ToPackingCode).ConfigureAwait(false); if (purchasereDetail != null) 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 6053d58d7..15a9d0daf 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 @@ -111,14 +111,48 @@ public class PurchaseOrderAppService : input.Number = await _purchaseOrderManager .GenerateNumberAsync(nameof(PurchaseOrder), Clock.Normalize(input.ActiveDate)).ConfigureAwait(false); } - var entity = ObjectMapper.Map(input); entity.Remark = "接口数据"; await _purchaseOrderManager.CreateAsync(entity).ConfigureAwait(false); + return ObjectMapper.Map(entity); } - + /// + /// 采购订单新增和修改(目前修改只支持关闭操作) + /// + /// + /// + [HttpPost("create-or-update")] + public async Task CreateOrUpdateAsync(PurchaseOrderEditInput input) + { + if (string.IsNullOrWhiteSpace(input.Number)) + { + input.Number = await _purchaseOrderManager + .GenerateNumberAsync(nameof(PurchaseOrder), Clock.Normalize(input.ActiveDate)).ConfigureAwait(false); + } + var olditem= await _purchaseOrderManager.GetByNumberAsync(input.Number).ConfigureAwait(false); + var entity = ObjectMapper.Map(input); + if (olditem == null) + { + entity.Remark = "接口数据"; + await _purchaseOrderManager.CreateAsync(entity).ConfigureAwait(false); + } + else + { + olditem.Remark = "接口数据(明细关闭)"; + var closeItemCode= input.Details.Select(r=>r.ItemCode).ToList(); + foreach (var detail in olditem.Details) + { + if (closeItemCode.Contains(detail.ItemCode)) + { + detail.LineStatus = EnumOrderStatus.Close; + } + } + await _purchaseOrderManager.UpdateAsync(olditem).ConfigureAwait(false); + } + return ObjectMapper.Map(entity); + } #region 校验 /// @@ -304,4 +338,17 @@ public class PurchaseOrderAppService : return dtos; } + /// + /// 获取不存在的订单号 + /// + /// 订单号集合 + /// 返回的是不存在系统中的订单号 + [HttpGet("get-no-po-bill-list")] + public virtual async Task> GetNoPoBillList(List poBillNo) + { + var entitys = await _repository.GetListAsync(p =>poBillNo.Contains(p.Number)).ConfigureAwait(false); + var list = entitys.Select(r => r.Number).ToList(); + list= poBillNo.Except(list).ToList(); + return list; + } } diff --git a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain/Orders/PurchaseOrders/IPurchaseOrderManager.cs b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain/Orders/PurchaseOrders/IPurchaseOrderManager.cs index 6af83f78d..2ac78a39c 100644 --- a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain/Orders/PurchaseOrders/IPurchaseOrderManager.cs +++ b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain/Orders/PurchaseOrders/IPurchaseOrderManager.cs @@ -8,4 +8,5 @@ public interface IPurchaseOrderManager : ISfsStoreManager CheckIsCloseAsync(string number, string supplierCode, string itemCode); } diff --git a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain/Orders/PurchaseOrders/PurchaseOrderManager.cs b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain/Orders/PurchaseOrders/PurchaseOrderManager.cs index 2d8f34e8f..238abd5cf 100644 --- a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain/Orders/PurchaseOrders/PurchaseOrderManager.cs +++ b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain/Orders/PurchaseOrders/PurchaseOrderManager.cs @@ -1,8 +1,10 @@ using System; using System.Collections.Generic; +using System.Linq; using System.Threading.Tasks; using Volo.Abp; using Win_in.Sfs.Basedata.Application.Contracts; +using Win_in.Sfs.Shared.Domain.Shared; namespace Win_in.Sfs.Wms.Store.Domain; @@ -24,7 +26,17 @@ public class PurchaseOrderManager : SfsStoreManagerBase + /// 打开订单明细 + /// + /// + public virtual async Task CheckIsCloseAsync(string number,string supplierCode, string itemCode) + { + bool result = false; + var entitys = await _repository.GetListAsync(p =>p.Number==number && p.Details.Any(y => y.ItemCode == itemCode&&y.LineStatus== EnumOrderStatus.Close) && p.SupplierCode == supplierCode, true).ConfigureAwait(false); + if (entitys.Count!=0) result = true; + return result; + } /// /// 打开订单明细 ///