From c68b9f826bb1631fbbf327ca6b46245815ef7115 Mon Sep 17 00:00:00 2001 From: wanggang <76527413@qq.com> Date: Tue, 11 Apr 2023 10:11:10 +0800 Subject: [PATCH 1/7] =?UTF-8?q?=E6=9B=B4=E6=96=B0=E5=BC=80=E5=8F=91?= =?UTF-8?q?=E5=92=8C=E9=83=A8=E7=BD=B2=E6=96=87=E6=A1=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 44 +++++++++++++------------------------------- 1 file changed, 13 insertions(+), 31 deletions(-) diff --git a/README.md b/README.md index ef6723d02..f0cd9bf14 100644 --- a/README.md +++ b/README.md @@ -1,42 +1,23 @@ # 开发和部署方式 -## windows x64 下本地开发 +## 开发环境配置 -当前项目基于 .net 6 sdk,安装 visual studio 2022 时通常会自带 +### 软件安装 -### supervisor 方式开发 +1. visual studio 2022(.net 6 sdk) +1. Docker Desktop(wsl2) -1. 根据项目需求,安装 SQL Server 或 MySQL -2. 使用 build/src/win-x64/publish/ 目录下的 dev.start.cmd 和 dev.stop.cmd 管理非数据库依赖 +### 配置文件 -配置文件: +配置文件存储在build\src\docker\publish\conf 目录下,settings 目录存放程序配置文件,其他目录存放依赖配置文件 -1. supervisor: `build\src\win-x64\publish\supervisord\supervisor.dev.conf` -1. nginx: `build\src\win-x64\publish\nginx\conf\nginx.conf` -1. gateway: `build\src\win-x64\publish\gateway\appsettings.json` -1. config: `build\src\win-x64\publish\gateway\wwwroot\settings\appsettings.json` -1. config: `build\src\win-x64\publish\gateway\wwwroot\settings\appsettings.Development.json` +### 依赖管理 -```mermaid -flowchart LR -nginx --localhost:21093--> gateway--localhost:59092--> api:59092 -api:59092 --localhost:6379--> redis:6379 -api:59092 --localhost:13319--> database:13319 -gateway --localhost:8086--> influxdb:8086 -``` - -### Docker Desktop 方式开发 - -1. 无需按照数据库 -2. 使用 build/src/docker/publish/ 目录下的 dev.start.cmd 和 dev.stop.cmd 管理依赖 +使用 build/src/docker/publish/ 目录下的 dev.start.cmd 和 dev.stop.cmd 管理依赖的停止启动,可以在Docker Desktop中查看和管理启动的服务 ## 部署 -### windows x64 supervisor 方式部署 - -1. 执行: `build\src\win-x64\build.cmd` -2. 上传: `build\dist\win-x64\publish` 目录到服务器 -3. 修改配置,执行 publish 目录下的 start.cmd +Docker 和 Windows 部署两种方式只需要按需修改配置文件中的主机名和端口,windows单机部署时使用localhost作为主机名,docker compose单机部署时使用service name 作为主机名 ### docker compose 方式部署 @@ -44,7 +25,8 @@ gateway --localhost:8086--> influxdb:8086 2. 上传: `build\dist\win-x64\publish` 目录到服务器 3. 修改配置,执行 publish 目录下的 start.sh 或 start.cmd -构建时的处理: +### windows x64 方式部署 -1. 复制并重命名 build\src\win-x64\publish\nginx\conf 到 build\dist\docker\publish\conf\nginx,保持nginx的配置文件统一在 build\src\win-x64\publish\nginx\conf 目录维护 -1. 复制 build\src\win-x64\publish\gateway 到 build\dist\docker\publish\gateway,保持网关的配置和应用的配置统一在 build\src\win-x64\publish\gateway 目录维护 +1. 执行: `build\src\win-x64\build.cmd` +2. 上传: `build\dist\win-x64\publish` 目录到服务器 +3. 修改配置,执行 publish 目录下的 start.cmd From 7ca655e8ff4aed143071547fc9e2cc9b9740bcab Mon Sep 17 00:00:00 2001 From: "boxu.zheng" Date: Fri, 21 Apr 2023 19:26:08 +0800 Subject: [PATCH 2/7] =?UTF-8?q?=E4=BF=AE=E6=94=B9bug?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...FrameworkCore.SqlServer.StoreDbContext.sql | 19 +++++++++++ .../Balances/BalanceAppService.cs | 1 + .../Transactions/TransactionManager.cs | 15 +++++---- .../IPurchaseOrderAppService.cs | 2 +- .../ItemTransformRequestAppService.cs | 16 ++++++--- .../PurchaseReturnRequestAppService.cs | 22 ++++++++++--- .../MaterialRequestManager.cs | 12 +++++-- .../ExpectInOuts/IssueJobEventHandler.cs | 7 ++++ .../Jobs/PurchaseReceiptJobEventHandler.cs | 15 +++++++-- .../ItemTransformRequestEventHandler.cs | 6 ++-- .../Requests/MaterialRequestEventHandler.cs | 33 +++++++++++-------- .../PurchaseReturnNoteEventHandler.cs | 16 ++++++--- 12 files changed, 123 insertions(+), 41 deletions(-) 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 87364c0a6..286935fff 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 @@ -2529,6 +2529,9 @@ CREATE TABLE [Job_PutawayJobDetail] ( CREATE TABLE [Job_UnplannedIssueJobDetail] ( [Id] uniqueidentifier NOT NULL, [ReasonCode] nvarchar(max) NULL, + [CaseCode] nvarchar(max) NULL, + [ProjCapacityCode] nvarchar(max) NULL, + [OnceBusiCode] nvarchar(max) NULL, [ExtraProperties] nvarchar(max) NULL, [CreationTime] datetime2 NOT NULL, [CreatorId] uniqueidentifier NULL, @@ -2579,6 +2582,9 @@ CREATE TABLE [Job_UnplannedIssueJobDetail] ( CREATE TABLE [Job_UnplannedReceiptJobDetail] ( [Id] uniqueidentifier NOT NULL, [ReasonCode] nvarchar(max) NULL, + [CaseCode] nvarchar(max) NULL, + [ProjCapacityCode] nvarchar(max) NULL, + [OnceBusiCode] nvarchar(max) NULL, [ExtraProperties] nvarchar(max) NULL, [CreationTime] datetime2 NOT NULL, [CreatorId] uniqueidentifier NULL, @@ -4875,6 +4881,9 @@ CREATE TABLE [Store_TransferRequestDetail] ( CREATE TABLE [Store_UnplannedIssueNoteDetail] ( [Id] uniqueidentifier NOT NULL, [ReasonCode] nvarchar(max) NULL, + [CaseCode] nvarchar(max) NULL, + [ProjCapacityCode] nvarchar(max) NULL, + [OnceBusiCode] nvarchar(max) NULL, [ExtraProperties] nvarchar(max) NULL, [CreationTime] datetime2 NOT NULL, [CreatorId] uniqueidentifier NULL, @@ -4937,6 +4946,9 @@ CREATE TABLE [Store_UnplannedIssueNoteDetail] ( CREATE TABLE [Store_UnplannedIssueRequestDetail] ( [Id] uniqueidentifier NOT NULL, + [CaseCode] nvarchar(max) NULL, + [ProjCapacityCode] nvarchar(max) NULL, + [OnceBusiCode] nvarchar(max) NULL, [ExtraProperties] nvarchar(max) NULL, [CreationTime] datetime2 NOT NULL, [CreatorId] uniqueidentifier NULL, @@ -4974,6 +4986,9 @@ CREATE TABLE [Store_UnplannedIssueRequestDetail] ( CREATE TABLE [Store_UnplannedReceiptNoteDetail] ( [Id] uniqueidentifier NOT NULL, [ReasonCode] nvarchar(max) NULL, + [CaseCode] nvarchar(max) NULL, + [ProjCapacityCode] nvarchar(max) NULL, + [OnceBusiCode] nvarchar(max) NULL, [ExtraProperties] nvarchar(max) NULL, [CreationTime] datetime2 NOT NULL, [CreatorId] uniqueidentifier NULL, @@ -5036,6 +5051,10 @@ CREATE TABLE [Store_UnplannedReceiptNoteDetail] ( CREATE TABLE [Store_UnplannedReceiptRequestDetail] ( [Id] uniqueidentifier NOT NULL, + [ReasonCode] nvarchar(max) NULL, + [CaseCode] nvarchar(max) NULL, + [ProjCapacityCode] nvarchar(max) NULL, + [OnceBusiCode] nvarchar(max) NULL, [ExtraProperties] nvarchar(max) NULL, [CreationTime] datetime2 NOT NULL, [CreatorId] uniqueidentifier NULL, diff --git a/be/Modules/Inventory/src/Win_in.Sfs.Wms.Inventory.Application/Balances/BalanceAppService.cs b/be/Modules/Inventory/src/Win_in.Sfs.Wms.Inventory.Application/Balances/BalanceAppService.cs index d063a0463..bcfbbed1c 100644 --- a/be/Modules/Inventory/src/Win_in.Sfs.Wms.Inventory.Application/Balances/BalanceAppService.cs +++ b/be/Modules/Inventory/src/Win_in.Sfs.Wms.Inventory.Application/Balances/BalanceAppService.cs @@ -275,6 +275,7 @@ public class BalanceAppService dto.ItemName = item.Name; dto.ItemDesc1 = item.Desc1; dto.ItemDesc2 = item.Desc2; + dto.Uom = item.BasicUom; } return dtos; } diff --git a/be/Modules/Inventory/src/Win_in.Sfs.Wms.Inventory.Domain/Transactions/TransactionManager.cs b/be/Modules/Inventory/src/Win_in.Sfs.Wms.Inventory.Domain/Transactions/TransactionManager.cs index 26cf02cbd..fabcb95d3 100644 --- a/be/Modules/Inventory/src/Win_in.Sfs.Wms.Inventory.Domain/Transactions/TransactionManager.cs +++ b/be/Modules/Inventory/src/Win_in.Sfs.Wms.Inventory.Domain/Transactions/TransactionManager.cs @@ -18,7 +18,8 @@ public class TransactionManager : DomainService, ITransactionManager private readonly IBalanceManager _balanceManager; private readonly IItemBasicAclService _itemBasicAclService; private readonly ILocationAclService _locationAclService; - private readonly ITransactionTypeAclService _transactionTypeAclService; + //private readonly ITransactionTypeAclService _transactionTypeAclService; + private readonly ITransactionTypeAppService _transactionTypeAppService; private readonly ITransactionRepository _transactionRepository; private readonly IBalanceRepository _balanceRepository; private readonly ISnowflakeIdGenerator _numberGenerator; @@ -28,20 +29,22 @@ public class TransactionManager : DomainService, ITransactionManager IBalanceManager balanceManager , IItemBasicAclService itemBasicAclService , ILocationAclService locationAclService - , ITransactionTypeAclService transactionTypeAclService + //, ITransactionTypeAclService transactionTypeAclService , ITransactionRepository transactionRepository , IBalanceRepository balanceRepository , ISnowflakeIdGenerator numberGenerator - , ILocationCapacityManager locationCapacityManager) + , ILocationCapacityManager locationCapacityManager + , ITransactionTypeAppService transactionTypeAppService) { _balanceManager = balanceManager; _itemBasicAclService = itemBasicAclService; _locationAclService = locationAclService; - _transactionTypeAclService = transactionTypeAclService; + //_transactionTypeAclService = transactionTypeAclService; _transactionRepository = transactionRepository; _balanceRepository = balanceRepository; _numberGenerator = numberGenerator; _locationCapacityManager = locationCapacityManager; + _transactionTypeAppService = transactionTypeAppService; } public virtual async Task AddAsync(Transaction transaction) @@ -96,7 +99,7 @@ public class TransactionManager : DomainService, ITransactionManager var item = await _itemBasicAclService.GetByCodeAsync(transaction.ItemCode).ConfigureAwait(false); var location = await _locationAclService.GetByCodeAsync(transaction.LocationCode).ConfigureAwait(false); - var transactionType = await _transactionTypeAclService.GetByTransTypeAsync(transaction.TransType, transaction.TransSubType).ConfigureAwait(false); + var transactionType = await _transactionTypeAppService.GetByTransTypeAsync(transaction.TransType, transaction.TransSubType).ConfigureAwait(false); transaction.CheckTransactionType(transactionType, item, location); //执行库存余额的变动 @@ -158,7 +161,7 @@ public class TransactionManager : DomainService, ITransactionManager //库位注意大小写 var location = locations.FirstOrDefault(p => p.Code.ToUpper() == transaction.LocationCode.ToUpper()); - var transactionType = await _transactionTypeAclService.GetByTransTypeAsync(transaction.TransType, transaction.TransSubType).ConfigureAwait(false); + var transactionType = await _transactionTypeAppService.GetByTransTypeAsync(transaction.TransType, transaction.TransSubType).ConfigureAwait(false); transaction.CheckTransactionType(transactionType, item, location); await UpdateBalanceAsync(transaction, item, location).ConfigureAwait(false); 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 c50180570..034ea1a1b 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 @@ -29,7 +29,7 @@ public interface IPurchaseOrderAppService /// /// /// - Task UpdateDetailsAsync(string number, List input); + Task UpdateDetailsAsync(string number,List input); /// /// 【批量创建】到货通知 (收货单) 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 647f38610..255b76fa2 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 @@ -75,7 +75,8 @@ 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 fromItemBasicDto=await ItemBasicAclService.GetByCodeAsync(detail.ItemCode).ConfigureAwait(false); + var toItemBasicDto = await ItemBasicAclService.GetByCodeAsync(detail.ToItemCode).ConfigureAwait(false); var balanceDto= await _balanceAppService.GetByItemLocationAndPackingAsync(detail.FromPackingCode, detail.ItemCode, detail.FromLocationCode).ConfigureAwait(false); @@ -97,10 +98,15 @@ public class ItemTransformRequestAppService : detail.ToLocationGroup = toLocationDto.LocationGroupCode; detail.ToWarehouseCode = toLocationDto.WarehouseCode; - detail.ItemDesc1 = itemBasicDto.Desc1; - detail.ItemDesc2= itemBasicDto.Desc2; - detail.ItemName= itemBasicDto.Name; - detail.Uom = itemBasicDto.BasicUom; + detail.ItemDesc1 = fromItemBasicDto.Desc1; + detail.ItemDesc2= fromItemBasicDto.Desc2; + detail.ItemName= fromItemBasicDto.Name; + detail.Uom = fromItemBasicDto.BasicUom; + + detail.ToItemCode = toItemBasicDto.Desc1; + detail.ToItemDesc1 = toItemBasicDto.Desc2; + detail.ToItemDesc2 = toItemBasicDto.Name; + detail.ItemName = toItemBasicDto.BasicUom; } } 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 d07e428e6..8adf9ce95 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 @@ -37,18 +37,20 @@ public class PurchaseReturnRequestAppService : private readonly ILocationAppService _locationAppService; private readonly ITransactionTypeAppService _transactionTypeAppService; private readonly IPurchaseReturnRequestManager _purchaseReturnRequestManager; - + private readonly IPurchaseOrderAppService _purchaseOrderAppService; public PurchaseReturnRequestAppService( IPurchaseReturnRequestRepository repository, IPurchaseReturnRequestManager purchaseReturnRequestManager, IInventoryLabelAppService inventoryLabelApp, ILocationAppService locationAppService, - ITransactionTypeAppService transactionTypeAppService) : base(repository, purchaseReturnRequestManager) + ITransactionTypeAppService transactionTypeAppService, + IPurchaseOrderAppService purchaseOrderAppService) : base(repository, purchaseReturnRequestManager) { _purchaseReturnRequestManager = purchaseReturnRequestManager; _inventoryLabelApp = inventoryLabelApp; _locationAppService = locationAppService; _transactionTypeAppService = transactionTypeAppService; + _purchaseOrderAppService = purchaseOrderAppService; base.CreatePolicyName = PurchaseReturnRequestPermissions.Create; base.UpdatePolicyName = PurchaseReturnRequestPermissions.Update; @@ -97,13 +99,16 @@ public class PurchaseReturnRequestAppService : var labelDto = await _inventoryLabelApp.GetByCodeAsync(detail.PackingCode).ConfigureAwait(false); var balanceDto = await BalanceAclService.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); + purchaseReturnRequest.AsnNumber = labelDto.AsnNumber; purchaseReturnRequest.RpNumber = labelDto.RpNumber; purchaseReturnRequest.ReturnTime=DateTime.Now; purchaseReturnRequest.SupplierCode= labelDto.SupplierCode; purchaseReturnRequest.ReturnType = EnumPurchaseReturnType.AfterPuton; purchaseReturnRequest.PoNumber = labelDto.PoNumber; - await SetDetailPropertiesAsync(detail, labelDto, balanceDto,locationDto).ConfigureAwait(false); + await SetDetailPropertiesAsync(detail, labelDto, balanceDto,locationDto, purchaseOrderDto).ConfigureAwait(false); } } @@ -135,12 +140,15 @@ public class PurchaseReturnRequestAppService : /// /// /// + /// /// private async Task SetDetailPropertiesAsync( PurchaseReturnRequestDetail detail, InventoryLabelDto labelDto, BalanceDTO balanceDto, - LocationDTO locationDto) + LocationDTO locationDto, + PurchaseOrderDTO purchaseOrderDto + ) { if (labelDto != null) { @@ -171,6 +179,12 @@ public class PurchaseReturnRequestAppService : detail.StdPackQty = balanceDto.StdPackQty; detail.Qty = balanceDto.Qty; } + + if (purchaseOrderDto != null) + { + detail.PoLine = + purchaseOrderDto.Details.FirstOrDefault(p => p.ItemCode == balanceDto.ItemCode && p.Lot == balanceDto.Lot).PoLine; + } } #endregion diff --git a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain/Requests/MaterialRequests/MaterialRequestManager.cs b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain/Requests/MaterialRequests/MaterialRequestManager.cs index f64b4e6e4..fb77b0bf5 100644 --- a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain/Requests/MaterialRequests/MaterialRequestManager.cs +++ b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain/Requests/MaterialRequests/MaterialRequestManager.cs @@ -133,7 +133,7 @@ public class MaterialRequestManager SetMaterialRequestDetailStatus(detail); } - //SetMaterialRequestStatus(oldEntity); + SetMaterialRequestStatus(oldEntity); await Repository.UpdateAsync(oldEntity).ConfigureAwait(false); } @@ -146,7 +146,7 @@ public class MaterialRequestManager { detail.Status = EnumStatus.Close; } - else + else//要100 { detail.Status=EnumStatus.Open; } @@ -157,6 +157,14 @@ public class MaterialRequestManager } } + private void SetMaterialRequestStatus(MaterialRequest materialRequest) + { + if (materialRequest.Details.All(p => p.Status == EnumStatus.Close)) + { + materialRequest.RequestStatus = EnumRequestStatus.Completed; + } + } + public virtual async Task CompleteAsync(string number) { var entity = await GetByNumberAsync(number).ConfigureAwait(false); diff --git a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Event/ExpectInOuts/IssueJobEventHandler.cs b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Event/ExpectInOuts/IssueJobEventHandler.cs index 70d496dfa..f3cb5ca84 100644 --- a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Event/ExpectInOuts/IssueJobEventHandler.cs +++ b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Event/ExpectInOuts/IssueJobEventHandler.cs @@ -17,6 +17,13 @@ public class IssueJobEventHandler : , ILocalEventHandler> { + private readonly IBalanceAppService _balanceAppService; + + public IssueJobEventHandler(IBalanceAppService balanceAppService) + { + _balanceAppService = balanceAppService; + } + [UnitOfWork] public virtual async Task HandleEventAsync(SfsCreatedEntityEventData eventData) { diff --git a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Event/Jobs/PurchaseReceiptJobEventHandler.cs b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Event/Jobs/PurchaseReceiptJobEventHandler.cs index 331faa759..09821b5db 100644 --- a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Event/Jobs/PurchaseReceiptJobEventHandler.cs +++ b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Event/Jobs/PurchaseReceiptJobEventHandler.cs @@ -35,7 +35,7 @@ public class PurchaseReceiptJobEventHandler : var entity = eventData.Entity; //创建收货记录 - await CreatePurchaseReceiptNoteAsync(entity).ConfigureAwait(false); + await BuildPurchaseReceiptNoteAsync(entity).ConfigureAwait(false); } #region 私有 @@ -44,8 +44,9 @@ public class PurchaseReceiptJobEventHandler : /// 创建收货记录 /// /// - private async Task CreatePurchaseReceiptNoteAsync(PurchaseReceiptJob purchaseReceiptJob) + private async Task BuildPurchaseReceiptNoteAsync(PurchaseReceiptJob purchaseReceiptJob) { + var holdLocation = await LocationAclService.GetFirstByTypeAsync(EnumLocationType.HOLD).ConfigureAwait(false); //隔离库位 var createInput = ObjectMapper.Map(purchaseReceiptJob); //未收货记录 @@ -58,6 +59,16 @@ public class PurchaseReceiptJobEventHandler : detailInput.PurchaseReceiptInspectStatus = EnumPurchaseReceiptInspect.NORECEIPT; } + var noOkNoteDetailInputs = + createInput.Details.Where(p => p.PurchaseReceiptInspectStatus == EnumPurchaseReceiptInspect.NOK); + foreach (var detailInput in noOkNoteDetailInputs) + { + detailInput.HandledToLocationArea = holdLocation.AreaCode; + detailInput.HandledToLocationErpCode = holdLocation.ErpLocationCode; + detailInput.HandledToLocationGroup = holdLocation.LocationGroupCode; + detailInput.HandledToWarehouseCode=holdLocation.WarehouseCode; + } + await _purchaseReceiptNoteAppService.CreateAsync(createInput).ConfigureAwait(false); } 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 a71aeb6c3..3baf0a20c 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 @@ -74,9 +74,9 @@ public class ItemTransformRequestEventHandler ReasonCode = detail.ReasonCode, ToArriveDate = detail.ToArriveDate, ToExpireDate = detail.ToExpireDate, - ToItemDesc1 = detail.ItemDesc1, - ToItemDesc2 = detail.ItemDesc2, - ToItemName = detail.ItemName, + ToItemDesc1 = detail.ToItemDesc1, + ToItemDesc2 = detail.ToItemDesc2, + ToItemName = detail.ToItemName, ToLot = detail.ToLot, ToPackingCode = detail.ToPackingCode, ToQty = detail.ToQty, diff --git a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Event/Requests/MaterialRequestEventHandler.cs b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Event/Requests/MaterialRequestEventHandler.cs index df7782591..3c648b711 100644 --- a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Event/Requests/MaterialRequestEventHandler.cs +++ b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Event/Requests/MaterialRequestEventHandler.cs @@ -28,17 +28,20 @@ public class MaterialRequestEventHandler private readonly IProductionLineAppService _productionLineAppService; private readonly IMaterialRequestManager _materialRequestManager; private readonly ILocationAppService _locationAppService; + private readonly IBalanceAppService _balanceAppService; public MaterialRequestEventHandler( IIssueJobAppService issueJobAppService , IProductionLineAppService productionLineAppService , IMaterialRequestManager materialRequestManager - , ILocationAppService locationAppService) + , ILocationAppService locationAppService + , IBalanceAppService balanceAppService) { _issueJobAppService = issueJobAppService; _productionLineAppService = productionLineAppService; _materialRequestManager = materialRequestManager; _locationAppService = locationAppService; + _balanceAppService = balanceAppService; } /// @@ -204,7 +207,7 @@ public class MaterialRequestEventHandler Statuses = transactionType.OutInventoryStatuses, }; //获取推荐库存 - var recommendList = await BalanceAclService.GetRecommendBalancesAsync(input).ConfigureAwait(false); + var recommendList = await _balanceAppService.GetRecommendBalancesAsync(input).ConfigureAwait(false); //没有推荐库存时 跳过此明细 不生成任务 if (recommendList.Count != 0) { @@ -215,16 +218,17 @@ public class MaterialRequestEventHandler if (materialRequest.UseOnTheWayLocation) { //获取在途库 - var locationDto= await _locationAppService.GetFirstByTypeAsync(EnumLocationType.TRANSPORT).ConfigureAwait(false); + var locationDto = await _locationAppService.GetFirstByTypeAsync(EnumLocationType.TRANSPORT).ConfigureAwait(false); detail.OnTheWayLocationCode = locationDto.Code; } jobDetails.Add(detail); materialRequestDetail.IssuedQty += recommend.Qty; + await _materialRequestManager.UpdateDetailsAsync(materialRequest).ConfigureAwait(false); + } } - return jobDetails; } @@ -240,21 +244,22 @@ public class MaterialRequestEventHandler detail.RecommendPackingCode = balance.PackingCode; detail.RecommendContainerCode = balance.ContainerCode; detail.RecommendSupplierBatch = balance.SupplierBatch; - detail.RecommendProduceDate= balance.ProduceDate; - detail.RecommendExpireDate= balance.ExpireDate; - detail.RecommendLot= balance.Lot; - detail.RecommendProduceDate=balance.ProduceDate; - detail.RecommendArriveDate= balance.ArriveDate; + detail.RecommendProduceDate = balance.ProduceDate; + detail.RecommendExpireDate = balance.ExpireDate; + detail.RecommendLot = balance.Lot; + detail.RecommendProduceDate = balance.ProduceDate; + detail.RecommendArriveDate = balance.ArriveDate; detail.RecommendFromLocationArea = balance.LocationArea; - detail.RecommendFromLocationCode= balance.LocationCode; - detail.RecommendFromLocationErpCode= balance.LocationErpCode; - detail.RecommendFromLocationGroup= balance.LocationGroup; - detail.RecommendFromWarehouseCode= balance.WarehouseCode; + detail.RecommendFromLocationCode = balance.LocationCode; + detail.RecommendFromLocationErpCode = balance.LocationErpCode; + detail.RecommendFromLocationGroup = balance.LocationGroup; + detail.RecommendFromWarehouseCode = balance.WarehouseCode; + detail.RecommendQty = balance.Qty; detail.Uom = balance.Uom; detail.ToLocationCode = materialRequestDetail.ToLocationCode; detail.ToLocationErpCode = materialRequestDetail.ToLocationErpCode; - detail.ToLocationArea= materialRequestDetail.ToLocationArea; + detail.ToLocationArea = materialRequestDetail.ToLocationArea; detail.ToWarehouseCode = materialRequestDetail.ToWarehouseCode; detail.ToLocationGroup = materialRequestDetail.ToLocationGroup; //detail.Operation = //TODO diff --git a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Event/Transactions/PurchaseReturnNoteEventHandler.cs b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Event/Transactions/PurchaseReturnNoteEventHandler.cs index 4942734d8..0c5f36fa1 100644 --- a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Event/Transactions/PurchaseReturnNoteEventHandler.cs +++ b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Event/Transactions/PurchaseReturnNoteEventHandler.cs @@ -3,6 +3,7 @@ using System.Linq; using System.Threading.Tasks; using Volo.Abp.EventBus; using Volo.Abp.Uow; +using Win_in.Sfs.Label.Application.Contracts; using Win_in.Sfs.Shared.Domain.Shared; using Win_in.Sfs.Shared.Event; using Win_in.Sfs.Wms.Inventory.Application.Contracts; @@ -25,14 +26,16 @@ public class PurchaseReturnNoteEventHandler private readonly IPurchaseReturnRequestAppService _purchaseReturnRequestApp; private readonly IPurchaseOrderAppService _purchaseOrderAppService; + private readonly IInventoryLabelAppService _inventoryLabelAppService; public PurchaseReturnNoteEventHandler( IPurchaseReturnRequestAppService purchaseReturnRequestApp - , IPurchaseOrderAppService purchaseOrderAppService - ) + , IPurchaseOrderAppService purchaseOrderAppService, + IInventoryLabelAppService inventoryLabelAppService) { _purchaseReturnRequestApp = purchaseReturnRequestApp; _purchaseOrderAppService = purchaseOrderAppService; + _inventoryLabelAppService = inventoryLabelAppService; } [UnitOfWork] @@ -53,10 +56,15 @@ public class PurchaseReturnNoteEventHandler private async Task UpdatePurchaseOrderAsync(PurchaseReturnNote entity) { - var purchaseOrderDetailUpdateInputs = entity.Details + foreach (var detail in entity.Details) + { + var inventoryLabelDto=await _inventoryLabelAppService.GetByCodeAsync(detail.PackingCode).ConfigureAwait(false); + + var purchaseOrderDetailUpdateInputs = entity.Details .Select(BuildPurchaseOrderDetailUpdateInput).ToList(); - await _purchaseOrderAppService.UpdateDetailsAsync(entity.PoNumber, purchaseOrderDetailUpdateInputs).ConfigureAwait(false); + await _purchaseOrderAppService.UpdateDetailsAsync(entity.PoNumber, purchaseOrderDetailUpdateInputs).ConfigureAwait(false); + } } private static PurchaseOrderDetailUpdateInput BuildPurchaseOrderDetailUpdateInput(PurchaseReturnNoteDetail purchaseReturnNoteDetail) From cb4a11f56ede0cad1971eeb174931495c094d84c Mon Sep 17 00:00:00 2001 From: mahao Date: Fri, 21 Apr 2023 22:14:34 +0800 Subject: [PATCH 3/7] =?UTF-8?q?=E4=BB=BB=E5=8A=A1=E5=AE=8C=E6=88=90?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ItemTransformRequestAppService.cs | 2 +- .../MaterialRequests/MaterialRequestManager.cs | 15 ++++++++++++--- 2 files changed, 13 insertions(+), 4 deletions(-) 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 255b76fa2..ec2059cc0 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 @@ -103,7 +103,7 @@ public class ItemTransformRequestAppService : detail.ItemName= fromItemBasicDto.Name; detail.Uom = fromItemBasicDto.BasicUom; - detail.ToItemCode = toItemBasicDto.Desc1; + detail.ToItemCode = toItemBasicDto.Code; detail.ToItemDesc1 = toItemBasicDto.Desc2; detail.ToItemDesc2 = toItemBasicDto.Name; detail.ItemName = toItemBasicDto.BasicUom; diff --git a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain/Requests/MaterialRequests/MaterialRequestManager.cs b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain/Requests/MaterialRequests/MaterialRequestManager.cs index fb77b0bf5..5a74b77d6 100644 --- a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain/Requests/MaterialRequests/MaterialRequestManager.cs +++ b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain/Requests/MaterialRequests/MaterialRequestManager.cs @@ -1,6 +1,8 @@ +using System; using System.Collections.Generic; using System.Linq; using System.Threading.Tasks; +using DocumentFormat.OpenXml.Math; using Win_in.Sfs.Shared.Domain.Shared; using Win_in.Sfs.Shared.Event; using static Win_in.Sfs.Wms.Store.Domain.Shared.StoreSettings; @@ -12,12 +14,15 @@ public class MaterialRequestManager , IMaterialRequestManager { private readonly IMaterialRequestRepository _repository; + private readonly IIssueJobRepository _issueJobRepository; public MaterialRequestManager( IMaterialRequestRepository repository + , IIssueJobRepository issueJobRepository ) : base(repository) { _repository = repository; + _issueJobRepository = issueJobRepository; } /// @@ -133,7 +138,7 @@ public class MaterialRequestManager SetMaterialRequestDetailStatus(detail); } - SetMaterialRequestStatus(oldEntity); + await SetMaterialRequestStatus(oldEntity).ConfigureAwait(false); await Repository.UpdateAsync(oldEntity).ConfigureAwait(false); } @@ -157,11 +162,15 @@ public class MaterialRequestManager } } - private void SetMaterialRequestStatus(MaterialRequest materialRequest) + private async Task SetMaterialRequestStatus(MaterialRequest materialRequest) { if (materialRequest.Details.All(p => p.Status == EnumStatus.Close)) { - materialRequest.RequestStatus = EnumRequestStatus.Completed; + var issueJobs = await _issueJobRepository.GetListAsync(t => t.MaterialRequestNumber == materialRequest.Number).ConfigureAwait(false); + if (issueJobs.All(t => t.JobStatus == EnumJobStatus.Done)) + { + materialRequest.RequestStatus = EnumRequestStatus.Completed; + } } } From e41899514f28149a77707386493e82e3b6e73798 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: Sat, 22 Apr 2023 21:35:17 +0800 Subject: [PATCH 4/7] =?UTF-8?q?=E5=8F=91=E6=96=99=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Jobs/IssueJobs/IIssueJobAppService.cs | 2 + .../Jobs/IssueJobs/IssueJobAppService.cs | 8 ++ .../MaterialRequestAppService.cs | 12 +- .../MaterialRequests/MaterialRequestDetail.cs | 2 +- .../MaterialRequestManager.cs | 124 ++++++++++-------- .../Requests/MaterialRequestEventHandler.cs | 16 ++- 6 files changed, 95 insertions(+), 69 deletions(-) diff --git a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Jobs/IssueJobs/IIssueJobAppService.cs b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Jobs/IssueJobs/IIssueJobAppService.cs index f0d2cc33a..1b9ad5f7d 100644 --- a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Jobs/IssueJobs/IIssueJobAppService.cs +++ b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Jobs/IssueJobs/IIssueJobAppService.cs @@ -14,4 +14,6 @@ public interface IIssueJobAppService Task> GetListByTypeAsync(SfsJobRequestInputBase requestInput, string requestType, bool includeDetails = false, CancellationToken cancellationToken = default); + + Task> GetByRequestNumberAsync(string requestNumber); } diff --git a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Jobs/IssueJobs/IssueJobAppService.cs b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Jobs/IssueJobs/IssueJobAppService.cs index 7515e713f..6ec183a2b 100644 --- a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Jobs/IssueJobs/IssueJobAppService.cs +++ b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Jobs/IssueJobs/IssueJobAppService.cs @@ -8,6 +8,7 @@ using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Mvc; using Volo.Abp; using Volo.Abp.Application.Dtos; +using Volo.Abp.ObjectMapping; using Win_in.Sfs.Shared.Domain; using Win_in.Sfs.Shared.Domain.Shared; using Win_in.Sfs.Wms.Store.Application.Contracts; @@ -151,6 +152,13 @@ public class IssueJobAppService } + [HttpPost("by-request-number/{requestNumber}")] + public virtual async Task> GetByRequestNumberAsync(string requestNumber) + { + var entitys = await _repository.GetListAsync(p => p.MaterialRequestNumber == requestNumber).ConfigureAwait(false); + return ObjectMapper.Map, List>(entitys); + } + /* /// /// 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 7a3ddd00b..bf07d2a39 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 @@ -5,6 +5,7 @@ using System.Linq; using System.Linq.Expressions; using System.Threading; using System.Threading.Tasks; +using DocumentFormat.OpenXml.Office.PowerPoint.Y2021.M06.Main; using IdentityModel; using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Mvc; @@ -43,15 +44,17 @@ public class MaterialRequestAppService : SfsStoreRequestAppServiceBase - /// 请求未发 + /// 请求未发 还未发送的数量 /// [NotMapped] public decimal ToBeIssuedQty => Qty - IssuedQty; diff --git a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain/Requests/MaterialRequests/MaterialRequestManager.cs b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain/Requests/MaterialRequests/MaterialRequestManager.cs index 5a74b77d6..9150c5461 100644 --- a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain/Requests/MaterialRequests/MaterialRequestManager.cs +++ b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain/Requests/MaterialRequests/MaterialRequestManager.cs @@ -43,6 +43,72 @@ public class MaterialRequestManager return entity; } + public virtual async Task UpdateDetailsAsync(MaterialRequest newEntity) + { + var oldEntity = await Repository.FindAsync(newEntity.Id, true).ConfigureAwait(false); + + foreach (var newDetail in newEntity.Details) + { + oldEntity.ReplaceDetail(newDetail.Id, newDetail); + } + + foreach (var detail in oldEntity.Details) + { + SetMaterialRequestDetailStatus(detail); + } + + await SetMaterialRequestStatus(oldEntity).ConfigureAwait(false); + + await Repository.UpdateAsync(oldEntity).ConfigureAwait(false); + } + + private void SetMaterialRequestDetailStatus(MaterialRequestDetail detail) + { + if (detail.ReceivedQty >= detail.Qty)//执行的时候 实际收料 多余 要料数 + { + detail.Status = EnumStatus.Close; + } + else + { + detail.Status = EnumStatus.Open; + } + } + + private async Task SetMaterialRequestStatus(MaterialRequest materialRequest) + { + if (!materialRequest.Details.All(p => p.Status == EnumStatus.Close)) + { + var issueJobs = await _issueJobRepository.GetListAsync(t => t.MaterialRequestNumber == materialRequest.Number).ConfigureAwait(false); + if (issueJobs.Count > 0) + { + if (issueJobs.All(t => t.JobStatus == EnumJobStatus.Done||t.JobStatus==EnumJobStatus.Closed||t.JobStatus==EnumJobStatus.Cancelled)) + { + materialRequest.RequestStatus = EnumRequestStatus.Completed; + } + else + { + materialRequest.RequestStatus = EnumRequestStatus.Partial; + } + } + else + { + materialRequest.RequestStatus = EnumRequestStatus.Partial; + } + } + else + { + materialRequest.RequestStatus = EnumRequestStatus.Completed; + } + } + + public virtual async Task CompleteAsync(string number) + { + var entity = await GetByNumberAsync(number).ConfigureAwait(false); + if (entity != null && !entity.Details.Any(p => p.ToBeIssuedQty > 0)) + { + await CompleteAsync(entity).ConfigureAwait(false); + } + } #region 公有 @@ -124,64 +190,6 @@ public class MaterialRequestManager } */ - public virtual async Task UpdateDetailsAsync(MaterialRequest newEntity) - { - var oldEntity = await Repository.FindAsync(newEntity.Id, true).ConfigureAwait(false); - - foreach (var newDetail in newEntity.Details) - { - oldEntity.ReplaceDetail(newDetail.Id, newDetail); - } - - foreach (var detail in oldEntity.Details) - { - SetMaterialRequestDetailStatus(detail); - } - - await SetMaterialRequestStatus(oldEntity).ConfigureAwait(false); - - await Repository.UpdateAsync(oldEntity).ConfigureAwait(false); - } - - private void SetMaterialRequestDetailStatus(MaterialRequestDetail detail) - { - if (detail.Qty > detail.IssuedQty)//要100 实际只有50 - { - if (detail.ReceivedQty >= detail.Qty)//执行的时候发的比100还多 就完成 - { - detail.Status = EnumStatus.Close; - } - else//要100 - { - detail.Status=EnumStatus.Open; - } - } - else//要100 实际够100 - { - detail.Status = EnumStatus.Close; - } - } - - private async Task SetMaterialRequestStatus(MaterialRequest materialRequest) - { - if (materialRequest.Details.All(p => p.Status == EnumStatus.Close)) - { - var issueJobs = await _issueJobRepository.GetListAsync(t => t.MaterialRequestNumber == materialRequest.Number).ConfigureAwait(false); - if (issueJobs.All(t => t.JobStatus == EnumJobStatus.Done)) - { - materialRequest.RequestStatus = EnumRequestStatus.Completed; - } - } - } - - public virtual async Task CompleteAsync(string number) - { - var entity = await GetByNumberAsync(number).ConfigureAwait(false); - if (entity!=null &&!entity.Details.Any(p => p.ToBeIssuedQty > 0)) - { - await CompleteAsync(entity).ConfigureAwait(false); - } - } #endregion diff --git a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Event/Requests/MaterialRequestEventHandler.cs b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Event/Requests/MaterialRequestEventHandler.cs index 3c648b711..02937f8ff 100644 --- a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Event/Requests/MaterialRequestEventHandler.cs +++ b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Event/Requests/MaterialRequestEventHandler.cs @@ -124,14 +124,18 @@ public class MaterialRequestEventHandler { var jobs = new List(); - var transactionType = await TransactionTypeAclService.GetByTransTypeAsync(EnumTransType.Issue, EnumTransSubType.None).ConfigureAwait(false); - var toLocationCodes = materialRequest.Details.Select(p => p.ToLocationCode).Distinct().ToList(); - var toLocations = await _locationAppService.GetByCodesAsync(toLocationCodes).ConfigureAwait(false); + var transactionType = await TransactionTypeAclService.GetByTransTypeAsync(EnumTransType.Issue, EnumTransSubType.None).ConfigureAwait(false);//库存事务 - foreach (var materialRequestDetail in materialRequest.Details.Where(p => p.ToBeIssuedQty > 0))//如果有还有剩余未叫料的数量 则创建新的任务 + var toLocationCodes = materialRequest.Details.Select(p => p.ToLocationCode).Distinct().ToList();//所有发送库位的集合 + var toLocations = await _locationAppService.GetByCodesAsync(toLocationCodes).ConfigureAwait(false);//所有库位的集合 + + var materialRequestDetails = materialRequest.Details.Where(p => p.ToBeIssuedQty > 0);//所有还没发送物品的集合 + foreach (var materialRequestDetail in materialRequestDetails)//如果有还有剩余未叫料的数量 则创建新的任务 { - var toLocation = toLocations.FirstOrDefault(p => p.Code == materialRequestDetail.ToLocationCode); + var toLocation = toLocations.FirstOrDefault(p => p.Code == materialRequestDetail.ToLocationCode);//判断目标库位是否存在 Check.NotNull(toLocation, "库位代码", $"库位 {materialRequestDetail.ToLocationCode} 不存在"); + + //创建详情 var jobDetails = await BuildIssueJobDetailInputsAsync(materialRequest, materialRequestDetail, transactionType, toLocation.LocationGroupCode).ConfigureAwait(false); if (!jobDetails.Any()) { @@ -147,7 +151,7 @@ public class MaterialRequestEventHandler jobs.Add(job); } job.Details.AddRange(jobDetails); - if (materialRequestDetail.ToBeIssuedQty <= 0) + if (materialRequestDetail.ToBeIssuedQty < 0) { materialRequestDetail.Status = EnumStatus.Close; } From 0c8be74969d35ea471d485d7e656ecdc80d455db Mon Sep 17 00:00:00 2001 From: wanggang <76527413@qq.com> Date: Sun, 23 Apr 2023 17:03:41 +0800 Subject: [PATCH 5/7] =?UTF-8?q?=E6=B7=BB=E5=8A=A0api/abp/application-confi?= =?UTF-8?q?guration=E7=9A=84api=E5=8C=85=E8=A3=85=EF=BC=9Aapi/auth/token/a?= =?UTF-8?q?pplication-configuration?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../TokenService.cs | 48 +++++++++---------- 1 file changed, 24 insertions(+), 24 deletions(-) diff --git a/be/Hosts/Auth.Host/src/Win_in.Sfs.Auth.Application/TokenService.cs b/be/Hosts/Auth.Host/src/Win_in.Sfs.Auth.Application/TokenService.cs index c22fde641..56945a228 100644 --- a/be/Hosts/Auth.Host/src/Win_in.Sfs.Auth.Application/TokenService.cs +++ b/be/Hosts/Auth.Host/src/Win_in.Sfs.Auth.Application/TokenService.cs @@ -1,9 +1,10 @@ -using System; using System.ComponentModel.DataAnnotations; using System.Net.Http; +using System.Net.Http.Headers; using System.Threading.Tasks; using IdentityModel.Client; using Microsoft.AspNetCore.Authorization; +using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Mvc; using Microsoft.Extensions.Configuration; using Microsoft.Extensions.Logging; @@ -11,35 +12,31 @@ using Volo.Abp.Application.Services; namespace Win_in.Sfs.Auth.Tokens; -[Route($"api/token")] +[Route($"api")] +[Authorize] public class TokenService : ApplicationService { + private readonly IHttpContextAccessor _httpContextAccessor; private readonly IHttpClientFactory _httpClientFactory; private readonly ILogger _logger; private readonly IConfiguration _configuration; - - public TokenService(IHttpClientFactory httpClientFactory, IConfiguration configuration, ILogger logger) + public TokenService(IHttpContextAccessor httpContextAccessor, IHttpClientFactory httpClientFactory, IConfiguration configuration, ILogger logger) { + this._httpContextAccessor = httpContextAccessor; this._httpClientFactory = httpClientFactory; this._configuration = configuration; this._logger = logger; } - [HttpPost] + [HttpPost("token")] [AllowAnonymous] public async Task CreateAsync(LoginModel model) { var address = _configuration["AuthServer:Authority"]; - var request = new DiscoveryDocumentRequest - { - Address = address, - Policy = new DiscoveryPolicy { RequireHttps = false } - }; - var discovery = await _httpClientFactory.CreateClient().GetDiscoveryDocumentAsync(request).ConfigureAwait(false); var clientId = _configuration["AuthServer:ClientId"]; var clientSecret = _configuration["AuthServer:ClientSecret"]; - this._logger.LogInformation($"address:{address},TokenEndpoint:{discovery.TokenEndpoint},clientId:{clientId},clientSecret:{clientSecret}"); + var result = await _httpClientFactory.CreateClient().RequestPasswordTokenAsync(new PasswordTokenRequest { Address = $"{address.TrimEnd('/')}/connect/token", @@ -49,11 +46,6 @@ public class TokenService : ApplicationService UserName = model.UserName, Password = model.Password }).ConfigureAwait(false); - Console.WriteLine($"Result:${(result.IsError ? result.ErrorDescription : result.AccessToken)}"); - //if (result.RefreshToken == null) - //{ - // throw new UserFriendlyException("用户名或密码错误"); - //} return new JsonResult(new { @@ -72,18 +64,26 @@ public class TokenService : ApplicationService }); } - [HttpGet("[action]")] - [AllowAnonymous] - public string Test() + [HttpGet("token/application-configuration")] + public async Task ApplicationConfiguration() { - return "Test"; + var address = _configuration["AuthServer:Authority"]; + var url = $"{address.TrimEnd('/')}/api/abp/application-configuration"; + var httpClient = _httpClientFactory.CreateClient(); + var token = this._httpContextAccessor.HttpContext.Request.Headers.Authorization.ToString(); + httpClient.DefaultRequestHeaders.Authorization = AuthenticationHeaderValue.Parse(token); + var response = await httpClient.GetAsync(url).ConfigureAwait(false); + var result = new ContentResult(); + result.ContentType = "application/json"; + result.Content = await response.Content.ReadAsStringAsync().ConfigureAwait(false); + return result; } - [HttpGet("/token/test")] + [HttpGet("token/test")] [AllowAnonymous] - public string Test1() + public string Test() { - return "Test"; + return "test"; } } From 59b1bd356cd11f1acbe6cbf1dbf37255c7fa65a3 Mon Sep 17 00:00:00 2001 From: wanggang <76527413@qq.com> Date: Sun, 23 Apr 2023 17:31:34 +0800 Subject: [PATCH 6/7] =?UTF-8?q?=E4=BF=AE=E5=A4=8Dnginx=E9=85=8D=E7=BD=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- build/src/docker/publish/conf/nginx/nginx.conf | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/build/src/docker/publish/conf/nginx/nginx.conf b/build/src/docker/publish/conf/nginx/nginx.conf index ab34c37d0..09667bbbc 100644 --- a/build/src/docker/publish/conf/nginx/nginx.conf +++ b/build/src/docker/publish/conf/nginx/nginx.conf @@ -59,7 +59,7 @@ http { index index.html; } - location ^/api/ { + location ~* ^/api/ { proxy_pass http://proxy; if ($http_upgrade ~* "close") { break; @@ -81,7 +81,7 @@ http { index index.html; } - location ^/api/ { + location ~* ^/api/ { proxy_pass http://proxy; if ($http_upgrade ~* "close") { break; From db8189a6bcc30bb82fbbfe2c512e0a1f287e460d Mon Sep 17 00:00:00 2001 From: "boxu.zheng" Date: Mon, 24 Apr 2023 09:07:06 +0800 Subject: [PATCH 7/7] =?UTF-8?q?=E4=BF=AE=E6=94=B9bug?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../IncomingToWmsExtensions.cs | 1 + .../BackFlushNotes/BackFlushNoteAppService.cs | 1 - .../ItemTransformRequestAppService.cs | 9 ++++---- .../MaterialRequestManager.cs | 21 ++++++++++++------- 4 files changed, 20 insertions(+), 12 deletions(-) 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 bc9666215..ff543a74f 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 @@ -157,6 +157,7 @@ public static class IncomingToWmsExtensions var backFlush = JsonSerializer.Deserialize(incomingConverted.DataContent); var balanceAppService = workerContext.ServiceProvider.GetRequiredService(); + var balanceDtos = await balanceAppService.GetRecommendBalancesAsync(new RecommendBalanceRequestInput() { Qty = backFlush.Qty, diff --git a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Notes/BackFlushNotes/BackFlushNoteAppService.cs b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Notes/BackFlushNotes/BackFlushNoteAppService.cs index ff86c9f94..90f9f8fd1 100644 --- a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Notes/BackFlushNotes/BackFlushNoteAppService.cs +++ b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Notes/BackFlushNotes/BackFlushNoteAppService.cs @@ -43,5 +43,4 @@ public class BackFlushNoteAppService : return ObjectMapper.Map, List>(entities); } - } 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 ec2059cc0..c2e79752c 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 @@ -79,6 +79,7 @@ public class ItemTransformRequestAppService : var toItemBasicDto = await ItemBasicAclService.GetByCodeAsync(detail.ToItemCode).ConfigureAwait(false); var balanceDto= await _balanceAppService.GetByItemLocationAndPackingAsync(detail.FromPackingCode, detail.ItemCode, detail.FromLocationCode).ConfigureAwait(false); + var inventoryLabelDto= await _inventoryLabelAppService.GetByCodeAsync(detail.ToPackingCode).ConfigureAwait(false); detail.FromLocationArea = fromLocationDto.AreaCode; detail.FromLocationErpCode = fromLocationDto.ErpLocationCode; @@ -90,7 +91,7 @@ public class ItemTransformRequestAppService : detail.FromStatus = balanceDto.Status; detail.ToSupplierBatch = string.Empty; - detail.ToLot = balanceDto.Lot; + detail.ToLot = inventoryLabelDto.Lot; detail.ToStatus = balanceDto.Status; detail.ToLocationArea = toLocationDto.AreaCode; @@ -104,9 +105,9 @@ public class ItemTransformRequestAppService : detail.Uom = fromItemBasicDto.BasicUom; detail.ToItemCode = toItemBasicDto.Code; - detail.ToItemDesc1 = toItemBasicDto.Desc2; - detail.ToItemDesc2 = toItemBasicDto.Name; - detail.ItemName = toItemBasicDto.BasicUom; + detail.ToItemDesc1 = toItemBasicDto.Desc1; + detail.ToItemDesc2 = toItemBasicDto.Desc2; + detail.ToItemName = toItemBasicDto.Name; } } diff --git a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain/Requests/MaterialRequests/MaterialRequestManager.cs b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain/Requests/MaterialRequests/MaterialRequestManager.cs index 9150c5461..5d0666e85 100644 --- a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain/Requests/MaterialRequests/MaterialRequestManager.cs +++ b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain/Requests/MaterialRequests/MaterialRequestManager.cs @@ -76,14 +76,25 @@ public class MaterialRequestManager private async Task SetMaterialRequestStatus(MaterialRequest materialRequest) { - if (!materialRequest.Details.All(p => p.Status == EnumStatus.Close)) + if (materialRequest.Details.All(p => p.Status == EnumStatus.Close)) + { + materialRequest.RequestStatus = EnumRequestStatus.Completed; + } + else { var issueJobs = await _issueJobRepository.GetListAsync(t => t.MaterialRequestNumber == materialRequest.Number).ConfigureAwait(false); if (issueJobs.Count > 0) { - if (issueJobs.All(t => t.JobStatus == EnumJobStatus.Done||t.JobStatus==EnumJobStatus.Closed||t.JobStatus==EnumJobStatus.Cancelled)) + if (issueJobs.All(t => t.JobStatus == EnumJobStatus.Done || t.JobStatus == EnumJobStatus.Closed || t.JobStatus == EnumJobStatus.Cancelled)) { - materialRequest.RequestStatus = EnumRequestStatus.Completed; + if (materialRequest.Details.All(p => p.ReceivedQty >= p.Qty)) + { + materialRequest.RequestStatus = EnumRequestStatus.Completed; + } + else + { + materialRequest.RequestStatus = EnumRequestStatus.Partial; + } } else { @@ -95,10 +106,6 @@ public class MaterialRequestManager materialRequest.RequestStatus = EnumRequestStatus.Partial; } } - else - { - materialRequest.RequestStatus = EnumRequestStatus.Completed; - } } public virtual async Task CompleteAsync(string number)