diff --git a/be/DataExchange/Iac/Win_in.Sfs.Wms.DataExchange.Application.Iac.Qad/PurchaseOrderAppService.cs b/be/DataExchange/Iac/Win_in.Sfs.Wms.DataExchange.Application.Iac.Qad/PurchaseOrderAppService.cs index 085cf9304..441352764 100644 --- a/be/DataExchange/Iac/Win_in.Sfs.Wms.DataExchange.Application.Iac.Qad/PurchaseOrderAppService.cs +++ b/be/DataExchange/Iac/Win_in.Sfs.Wms.DataExchange.Application.Iac.Qad/PurchaseOrderAppService.cs @@ -22,7 +22,7 @@ namespace Win_in.Sfs.Wms.DataExchange.Application.Iac.Qad; [ApiExplorerSettings(GroupName = SwaggerGroupConsts.WmsWebApi)] public class PurchaseOrderAppService : ApplicationService, IPurchaseOrderAppService { - private readonly Store.Application.Contracts.IPurchaseOrderAppService _purchaseOrderAppService; + //private readonly Store.Application.Contracts.IPurchaseOrderAppService _purchaseOrderAppService; private readonly IPo_mstrRepository _po_mstrRepository; @@ -34,7 +34,7 @@ public class PurchaseOrderAppService : ApplicationService, IPurchaseOrderAppServ IConfiguration configuration ) { - _purchaseOrderAppService = purchaseOrderAppService; + //_purchaseOrderAppService = purchaseOrderAppService; _po_mstrRepository = po_mstrRepository; _configuration = configuration; } @@ -77,7 +77,7 @@ public class PurchaseOrderAppService : ApplicationService, IPurchaseOrderAppServ targetObj.ContactEmail = ""; #endregion - await _purchaseOrderAppService.UpsertAsync(targetObj).ConfigureAwait(false); + //await _purchaseOrderAppService.UpsertAsync(targetObj).ConfigureAwait(false); } catch (Exception ex) { 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 472671bb6..8cbecdc09 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 @@ -5614,4 +5614,96 @@ CREATE UNIQUE INDEX [IX_Store_ScrapNote_Number] ON [Store_ScrapNote] ([Number]) CREATE INDEX [IX_Store_ScrapNoteDetail_MasterID] ON [Store_ScrapNoteDetail] ([MasterID]) -CREATE UNIQUE INDEX [IX_Store_ScrapNoteDetail_Number_ItemCode_FromPackingCode_FromLocationCode_ToLocationCode_FromLot_FromStatus] ON [Store_ScrapNoteDetail] ([Number], [ItemCode], [FromPackingCode], [FromLocationCode], [ToLocationCode], [ \ No newline at end of file +CREATE UNIQUE INDEX [IX_Store_ScrapNoteDetail_Number_ItemCode_FromPackingCode_FromLocationCode_ToLocationCode_FromLot_FromStatus] ON [Store_ScrapNoteDetail] ([Number], [ItemCode], [FromPackingCode], [FromLocationCode], [ToLocationCode], [FromLot], [FromStatus]) WHERE [FromPackingCode] IS NOT NULL AND [FromLot] IS NOT NULL + + +CREATE UNIQUE INDEX [IX_Store_ScrapRequest_Number] ON [Store_ScrapRequest] ([Number]) + + +CREATE INDEX [IX_Store_ScrapRequestDetail_MasterID] ON [Store_ScrapRequestDetail] ([MasterID]) + + +CREATE UNIQUE INDEX [IX_Store_ScrapRequestDetail_Number_ItemCode_LocationCode] ON [Store_ScrapRequestDetail] ([Number], [ItemCode], [LocationCode]) + + +CREATE UNIQUE INDEX [IX_Store_SupplierAsn_Number] ON [Store_SupplierAsn] ([Number]) + + +CREATE INDEX [IX_Store_SupplierAsn_SupplierCode] ON [Store_SupplierAsn] ([SupplierCode]) + + +CREATE INDEX [IX_Store_SupplierAsnDetail_MasterID] ON [Store_SupplierAsnDetail] ([MasterID]) + + +CREATE UNIQUE INDEX [IX_Store_SupplierAsnDetail_Number_ItemCode_PackingCode] ON [Store_SupplierAsnDetail] ([Number], [ItemCode], [PackingCode]) + + +CREATE UNIQUE INDEX [IX_Store_TransferNote_Number] ON [Store_TransferNote] ([Number]) + + +CREATE INDEX [IX_Store_TransferNoteDetail_MasterID] ON [Store_TransferNoteDetail] ([MasterID]) + + +CREATE UNIQUE INDEX [IX_Store_TransferNoteDetail_Number_FromPackingCode_FromLocationCode_ToLocationCode_FromStatus_ToStatus] ON [Store_TransferNoteDetail] ([Number], [FromPackingCode], [FromLocationCode], [ToLocationCode], [FromStatus], [ToStatus]) WHERE [FromPackingCode] IS NOT NULL + + +CREATE UNIQUE INDEX [IX_Store_TransferRequest_Number] ON [Store_TransferRequest] ([Number]) + + +CREATE INDEX [IX_Store_TransferRequestDetail_MasterID] ON [Store_TransferRequestDetail] ([MasterID]) + + +CREATE UNIQUE INDEX [IX_Store_UnplannedIssueNote_Number] ON [Store_UnplannedIssueNote] ([Number]) + + +CREATE INDEX [IX_Store_UnplannedIssueNoteDetail_MasterID] ON [Store_UnplannedIssueNoteDetail] ([MasterID]) + + +CREATE UNIQUE INDEX [IX_Store_UnplannedIssueNoteDetail_Number_PackingCode_ItemCode_Lot_Status] ON [Store_UnplannedIssueNoteDetail] ([Number], [PackingCode], [ItemCode], [Lot], [Status]) WHERE [Lot] IS NOT NULL + + +CREATE UNIQUE INDEX [IX_Store_UnplannedIssueRequest_Number] ON [Store_UnplannedIssueRequest] ([Number]) + + +CREATE INDEX [IX_Store_UnplannedIssueRequestDetail_MasterID] ON [Store_UnplannedIssueRequestDetail] ([MasterID]) + + +CREATE UNIQUE INDEX [IX_Store_UnplannedIssueRequestDetail_Number_PackingCode_ItemCode_Lot_Status] ON [Store_UnplannedIssueRequestDetail] ([Number], [PackingCode], [ItemCode], [Lot], [Status]) WHERE [Lot] IS NOT NULL + + +CREATE UNIQUE INDEX [IX_Store_UnplannedReceiptNote_Number] ON [Store_UnplannedReceiptNote] ([Number]) + + +CREATE INDEX [IX_Store_UnplannedReceiptNoteDetail_MasterID] ON [Store_UnplannedReceiptNoteDetail] ([MasterID]) + + +CREATE UNIQUE INDEX [IX_Store_UnplannedReceiptNoteDetail_Number_PackingCode_ItemCode_Lot_Status] ON [Store_UnplannedReceiptNoteDetail] ([Number], [PackingCode], [ItemCode], [Lot], [Status]) WHERE [Lot] IS NOT NULL + + +CREATE UNIQUE INDEX [IX_Store_UnplannedReceiptRequest_Number] ON [Store_UnplannedReceiptRequest] ([Number]) + + +CREATE INDEX [IX_Store_UnplannedReceiptRequestDetail_MasterID] ON [Store_UnplannedReceiptRequestDetail] ([MasterID]) + + +CREATE UNIQUE INDEX [IX_Store_UnplannedReceiptRequestDetail_Number_PackingCode_ItemCode_Lot_Status] ON [Store_UnplannedReceiptRequestDetail] ([Number], [PackingCode], [ItemCode], [Lot], [Status]) WHERE [Lot] IS NOT NULL + + +CREATE UNIQUE INDEX [IX_Store_WarehouseTransferNote_Number] ON [Store_WarehouseTransferNote] ([Number]) + + +CREATE INDEX [IX_Store_WarehouseTransferNoteDetail_MasterID] ON [Store_WarehouseTransferNoteDetail] ([MasterID]) + + +CREATE UNIQUE INDEX [IX_Store_WarehouseTransferNoteDetail_Number_FromPackingCode_FromLocationCode_ToLocationCode] ON [Store_WarehouseTransferNoteDetail] ([Number], [FromPackingCode], [FromLocationCode], [ToLocationCode]) WHERE [FromPackingCode] IS NOT NULL + + +CREATE UNIQUE INDEX [IX_Store_WorkOrder_Number] ON [Store_WorkOrder] ([Number]) + + +CREATE INDEX [IX_Store_WorkOrderDetail_MasterID] ON [Store_WorkOrderDetail] ([MasterID]) + + +CREATE UNIQUE INDEX [IX_Store_WorkOrderDetail_Number_ItemCode] ON [Store_WorkOrderDetail] ([Number], [ItemCode]) + + diff --git a/be/Hosts/WmsPda.Host/Win_in.Sfs.Wms.Pda.Host/Controllers/Jobs/PurchaseReceiptJobController.cs b/be/Hosts/WmsPda.Host/Win_in.Sfs.Wms.Pda.Host/Controllers/Jobs/PurchaseReceiptJobController.cs index dc0477c94..907793da8 100644 --- a/be/Hosts/WmsPda.Host/Win_in.Sfs.Wms.Pda.Host/Controllers/Jobs/PurchaseReceiptJobController.cs +++ b/be/Hosts/WmsPda.Host/Win_in.Sfs.Wms.Pda.Host/Controllers/Jobs/PurchaseReceiptJobController.cs @@ -53,7 +53,7 @@ public class PurchaseReceiptJobController : AbpController [HttpGet("{id}")] public virtual async Task> GetAsync(Guid id) { - var result = await _purchaseReceiptJobAppService.GetNoCacheAsync(id).ConfigureAwait(false); + var result = await _purchaseReceiptJobAppService.GetAsync(id).ConfigureAwait(false); var supplier = await _supplierAppService.GetByCodeAsync(result.SupplierCode).ConfigureAwait(false); result.SupplierName = supplier.Name; diff --git a/be/Hosts/WmsPda.Host/Win_in.Sfs.Wms.Pda.Host/Controllers/Stores/IssueNoteController.cs b/be/Hosts/WmsPda.Host/Win_in.Sfs.Wms.Pda.Host/Controllers/Stores/IssueNoteController.cs index 450e9326c..86c329304 100644 --- a/be/Hosts/WmsPda.Host/Win_in.Sfs.Wms.Pda.Host/Controllers/Stores/IssueNoteController.cs +++ b/be/Hosts/WmsPda.Host/Win_in.Sfs.Wms.Pda.Host/Controllers/Stores/IssueNoteController.cs @@ -33,7 +33,7 @@ public class IssueNoteController : AbpController [HttpPost("")] public virtual async Task CreateAsync([FromBody] IssueNoteEditInput input) { - input.RequestType = EnumMaterialRequestType.Direct_Issue.ToString(); + input.RequestType = EnumMaterialRequestType.Issue_Direct.ToString(); input.Details.ForEach(p => { @@ -54,5 +54,4 @@ public class IssueNoteController : AbpController { return await _issueNoteAppService.ConfirmAsync(id).ConfigureAwait(false); } - } diff --git a/be/Modules/Inventory/src/Win_in.Sfs.Wms.Inventory.Domain/Balances/BalanceManager.cs b/be/Modules/Inventory/src/Win_in.Sfs.Wms.Inventory.Domain/Balances/BalanceManager.cs index 7eb2e6173..65dd8b377 100644 --- a/be/Modules/Inventory/src/Win_in.Sfs.Wms.Inventory.Domain/Balances/BalanceManager.cs +++ b/be/Modules/Inventory/src/Win_in.Sfs.Wms.Inventory.Domain/Balances/BalanceManager.cs @@ -423,9 +423,12 @@ public class BalanceManager : DomainService, IBalanceManager expression = expression.And(p => p.ExpireDate > DateTime.Now); } //筛选有效库区 - if (validLocationAreas.Any()) + if (validLocationAreas.Any() ) { - expression = expression.And(p => validLocationAreas.Contains(p.LocationArea)); + if (!string.IsNullOrEmpty(validLocationAreas[0])) + { + expression = expression.And(p => validLocationAreas.Contains(p.LocationArea)); + } } var allBalances = await (await _balanceRepository.GetDbSetAsync().ConfigureAwait(false)) diff --git a/be/Modules/Shared/src/Win_in.Sfs.Shared.Domain.Shared/Enums/Inventory/EnumTransSubType.cs b/be/Modules/Shared/src/Win_in.Sfs.Shared.Domain.Shared/Enums/Inventory/EnumTransSubType.cs index f99e6672e..451f73df2 100644 --- a/be/Modules/Shared/src/Win_in.Sfs.Shared.Domain.Shared/Enums/Inventory/EnumTransSubType.cs +++ b/be/Modules/Shared/src/Win_in.Sfs.Shared.Domain.Shared/Enums/Inventory/EnumTransSubType.cs @@ -127,6 +127,12 @@ public enum EnumTransSubType [Display(Name = "安全库存拉动")] Issue_SafetyStock = 1504, + /// + /// 直接发料 + /// + [Display(Name = "直接发料")] + Issue_Direct = 1505, + /// /// 标准发货 /// diff --git a/be/Modules/Shared/src/Win_in.Sfs.Shared.Domain.Shared/Enums/Store/EnumMaterialRequestType.cs b/be/Modules/Shared/src/Win_in.Sfs.Shared.Domain.Shared/Enums/Store/EnumMaterialRequestType.cs index 245c1f9e8..0fa48dec0 100644 --- a/be/Modules/Shared/src/Win_in.Sfs.Shared.Domain.Shared/Enums/Store/EnumMaterialRequestType.cs +++ b/be/Modules/Shared/src/Win_in.Sfs.Shared.Domain.Shared/Enums/Store/EnumMaterialRequestType.cs @@ -28,5 +28,5 @@ public enum EnumMaterialRequestType //Issue_SfaetyStock = 1504, [Display(Name = "直接发料")] - Direct_Issue = 1505 + Issue_Direct = 1505 } diff --git a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Jobs/PurchaseReceiptJobs/IPurchaseReceiptJobAppService.cs b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Jobs/PurchaseReceiptJobs/IPurchaseReceiptJobAppService.cs index 1b26733b8..dc4e8ffe1 100644 --- a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Jobs/PurchaseReceiptJobs/IPurchaseReceiptJobAppService.cs +++ b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Jobs/PurchaseReceiptJobs/IPurchaseReceiptJobAppService.cs @@ -40,12 +40,4 @@ public interface IPurchaseReceiptJobAppService /// /// Task> SetInspectWithNotInspectAsync(Guid id); - - /// - /// 按Id获取实体 不走缓存 - /// - /// 实体Id - /// - /// - Task GetNoCacheAsync(Guid id); } diff --git a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Jobs/PurchaseReceiptJobs/PurchaseReceiptJobAppService.cs b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Jobs/PurchaseReceiptJobs/PurchaseReceiptJobAppService.cs index 22b45c3bf..aa58ca118 100644 --- a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Jobs/PurchaseReceiptJobs/PurchaseReceiptJobAppService.cs +++ b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Jobs/PurchaseReceiptJobs/PurchaseReceiptJobAppService.cs @@ -5,7 +5,6 @@ using System.Text.Json; using System.Threading.Tasks; using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Mvc; -using Volo.Abp.ObjectMapping; using Win_in.Sfs.FileStorage.Application.Contracts; using Win_in.Sfs.Shared.Domain.Shared; using Win_in.Sfs.Wms.Store.Application.Contracts; @@ -22,31 +21,21 @@ public class PurchaseReceiptJobAppService : , IPurchaseReceiptJobAppService { private readonly IFileAppService _fileAppService; - private readonly IInspectJobManager _inspectJobManager; - private readonly IInspectRequestAppService _inspectRequestAppService; private readonly IPurchaseReceiptJobManager _purchaseReceiptJobManager; - private readonly IPurchaseReceiptNoteAppService _purchaseReceiptNoteAppService; /// /// /// - /// /// /// - /// /// public PurchaseReceiptJobAppService(IPurchaseReceiptJobRepository repository, - IInspectJobManager inspectJobManager, IPurchaseReceiptJobManager purchaseReceiptJobManager, IPurchaseReceiptNoteAppService purchaseReceiptNoteAppService, - IInspectRequestAppService inspectRequestAppService, IFileAppService fileAppService) : base(repository, purchaseReceiptJobManager) { _purchaseReceiptJobManager = purchaseReceiptJobManager; - _purchaseReceiptNoteAppService = purchaseReceiptNoteAppService; - _inspectRequestAppService = inspectRequestAppService; _fileAppService = fileAppService; - _inspectJobManager = inspectJobManager; } #region 东阳使用 @@ -151,49 +140,38 @@ public class PurchaseReceiptJobAppService : var dict = await _fileAppService.CreateManyHasDictAsync(input.FilesList).ConfigureAwait(false); detail.InspectPhotoJson = JsonSerializer.Serialize(dict); } - - if (detail != null) + else { - detail.FailedReason = input.FailedReason; - detail.MassDefect = input.MassDefect; - detail.PurchaseReceiptInspectStatus = input.PurchaseReceiptInspectStatus; - detail.HandledLot = detail.RecommendLot; - detail.HandledSupplierBatch = detail.RecommendSupplierBatch; - detail.HandledArriveDate = detail.RecommendArriveDate; - detail.HandledProduceDate = detail.RecommendProduceDate; - detail.HandledExpireDate = detail.RecommendExpireDate; - detail.HandledToLocationArea=detail.RecommendToLocationArea; - detail.HandledToLocationGroup=detail.RecommendToLocationGroup; - detail.HandledContainerCode = detail.RecommendContainerCode; - detail.HandledToLocationCode = detail.RecommendToLocationCode; - detail.HandledToLocationErpCode = detail.RecommendToLocationErpCode; - detail.HandledToWarehouseCode = detail.RecommendToWarehouseCode; - detail.HandledPackingCode = detail.RecommendPackingCode; - detail.HandledQty = detail.RecommendQty; + detail.InspectPhotoJson = string.Empty; } + detail.FailedReason = input.FailedReason; + detail.MassDefect = input.MassDefect; + detail.PurchaseReceiptInspectStatus = input.PurchaseReceiptInspectStatus; + detail.HandledLot = detail.RecommendLot; + detail.HandledSupplierBatch = detail.RecommendSupplierBatch; + detail.HandledArriveDate = detail.RecommendArriveDate; + detail.HandledProduceDate = detail.RecommendProduceDate; + detail.HandledExpireDate = detail.RecommendExpireDate; + detail.HandledToLocationArea = detail.RecommendToLocationArea; + detail.HandledToLocationGroup = detail.RecommendToLocationGroup; + detail.HandledContainerCode = detail.RecommendContainerCode; + detail.HandledToLocationCode = detail.RecommendToLocationCode; + detail.HandledToLocationErpCode = detail.RecommendToLocationErpCode; + detail.HandledToWarehouseCode = detail.RecommendToWarehouseCode; + detail.HandledPackingCode = detail.RecommendPackingCode; + detail.HandledQty = detail.RecommendQty; + var entity = await _repository.UpdateAsync(job).ConfigureAwait(false); return ObjectMapper.Map( entity.Details.Find(p => p.Id == input.DetailId)); } - /// - /// 按Id获取实体 不走缓存 - /// - /// 实体Id - /// - /// - [HttpGet("no-cache/{id}")] - public virtual async Task GetNoCacheAsync(Guid id) - { - var entity= await _repository.GetAsync(id).ConfigureAwait(false); - return ObjectMapper.Map(entity); - } - #endregion /// + /// 取消收货 /// /// [HttpPost("cancel-by-request/{purchaseReceiptRequestNumber}")] @@ -207,6 +185,21 @@ public class PurchaseReceiptJobAppService : } } + ///// + ///// 取消请求 + ///// + ///// + //[HttpPost("cancel-by-request/{purchaseReceiptRequestNumber}")] + //public virtual async Task CancelByPurchaseReceiptRequestAsync(string purchaseReceiptRequestNumber) + //{ + // var entities = await _repository + // .GetListAsync(p => p.PurchaseReceiptRequestNumber == purchaseReceiptRequestNumber).ConfigureAwait(false); + // foreach (var entity in entities) + // { + // await _purchaseReceiptJobManager.CancelAsync(entity).ConfigureAwait(false); + // } + //} + /* /// /// 承接收货任务 diff --git a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Notes/IssueNotes/IssueNoteAppService.cs b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Notes/IssueNotes/IssueNoteAppService.cs index ea96420d5..af6df5643 100644 --- a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Notes/IssueNotes/IssueNoteAppService.cs +++ b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Notes/IssueNotes/IssueNoteAppService.cs @@ -8,7 +8,9 @@ using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Mvc; using Volo.Abp; using Volo.Abp.Application.Dtos; +using Volo.Abp.Domain.Entities; using Win_in.Sfs.Shared.Domain; +using Win_in.Sfs.Shared.Event; using Win_in.Sfs.Wms.Store.Application.Contracts; using Win_in.Sfs.Wms.Store.Domain; using Win_in.Sfs.Wms.Store.Domain.Shared; @@ -50,9 +52,11 @@ public class IssueNoteAppService : [HttpPost("confirm/{id}")] public virtual async Task ConfirmAsync(Guid id) { - var entity = await _issueNoteManager.ConfirmAsync(id).ConfigureAwait(false); - var dto = ObjectMapper.Map(entity); - return dto; + var issueNote= await _repository.GetAsync(id).ConfigureAwait(false); + issueNote.Confirmed = true; + issueNote=await _repository.UpdateAsync(issueNote).ConfigureAwait(false); + await LocalEventBus.PublishAsync(new SfsConfirmedEntityEventData(issueNote), false).ConfigureAwait(false); + return ObjectMapper.Map(issueNote); } [HttpPost("confirm-by-number/{number}")] 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 e386edc0c..9e4cd7008 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 @@ -3,23 +3,15 @@ using System.Collections.Generic; using System.ComponentModel.DataAnnotations; using System.Linq; using System.Threading.Tasks; -using DocumentFormat.OpenXml.Office2010.ExcelAc; -using DocumentFormat.OpenXml.Spreadsheet; using Microsoft.AspNetCore.Authorization; -using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Mvc; using Microsoft.EntityFrameworkCore; using Volo.Abp; -using Volo.Abp.Uow; -using Volo.Abp.Users; using Win_in.Sfs.Basedata.Application.Contracts; -using Win_in.Sfs.Shared.Application.Contracts; using Win_in.Sfs.Shared.Domain.Shared; -using Win_in.Sfs.Shared.Event; using Win_in.Sfs.Wms.Store.Application.Contracts; using Win_in.Sfs.Wms.Store.Domain; using Win_in.Sfs.Wms.Store.Domain.Shared; -using PurchaseOrderDetail = Win_in.Sfs.Wms.Store.Domain.PurchaseOrderDetail; namespace Win_in.Sfs.Wms.Store.Application; @@ -34,7 +26,7 @@ public class PurchaseOrderAppService : private readonly IPurchaseOrderManager _purchaseOrderManager; private readonly ISupplierAppService _supplierAppService; private readonly IItemBasicAppService _itemBasicAppService; - + public PurchaseOrderAppService( IPurchaseOrderRepository repository, IPurchaseOrderManager purchaseOrderManager, @@ -53,30 +45,31 @@ public class PurchaseOrderAppService : #region 东阳使用 /// - /// 用来重写 导入数据时可以加工数据 + /// 用来重写 导入数据时可以加工数据 /// /// /// protected override async Task> ImportProcessingEntityAsync( Dictionary dictionary) { - var addList= dictionary.Where(p => p.Value == EntityState.Added).Select(p => p.Key); + var addList = dictionary.Where(p => p.Value == EntityState.Added).Select(p => p.Key); foreach (var purchaseOrder in addList) { purchaseOrder.CreatorId = CurrentUser.Id; purchaseOrder.Worker = CurrentUser.Name; - var supplierDto=await _supplierAppService.GetByCodeAsync(purchaseOrder.SupplierCode).ConfigureAwait(false); + var supplierDto = + await _supplierAppService.GetByCodeAsync(purchaseOrder.SupplierCode).ConfigureAwait(false); purchaseOrder.SupplierCode = supplierDto.Code; purchaseOrder.SupplierAddress = supplierDto.Address; - purchaseOrder.SupplierName= supplierDto.Name; + purchaseOrder.SupplierName = supplierDto.Name; foreach (var detail in purchaseOrder.Details) { - var itemBasicDto= await _itemBasicAppService.GetByCodeAsync(detail.ItemCode).ConfigureAwait(false); + var itemBasicDto = await _itemBasicAppService.GetByCodeAsync(detail.ItemCode).ConfigureAwait(false); - detail.ItemName= itemBasicDto.Name; + detail.ItemName = itemBasicDto.Name; detail.ItemDesc1 = itemBasicDto.Desc1; detail.ItemDesc2 = itemBasicDto.Desc2; } @@ -87,10 +80,8 @@ public class PurchaseOrderAppService : #endregion - - /// - /// 【创建】采购订单 + /// 【创建】采购订单 /// /// /// @@ -111,7 +102,7 @@ public class PurchaseOrderAppService : } /// - /// 【批量创建】采购订单 + /// 【批量创建】采购订单 /// /// /// @@ -163,8 +154,6 @@ public class PurchaseOrderAppService : await _repository.UpdateAsync(entity).ConfigureAwait(false); } - #region Function - [HttpPost("complete/{number}")] public async Task CompleteAsync(string number) { @@ -173,9 +162,6 @@ public class PurchaseOrderAppService : } [HttpPost("cancel/{id}")] - - #endregion - [HttpPost("{id}/detail/open/{detailId}")] public virtual async Task OpenDetailAsync(Guid id, Guid detailId) { @@ -188,13 +174,6 @@ public class PurchaseOrderAppService : await _purchaseOrderManager.CloseDetailAsync(id, detailId).ConfigureAwait(false); } - [HttpPost("check-status")] - public virtual async Task CheckStatusAsync(string number) - { - await Task.CompletedTask.ConfigureAwait(false); - throw new NotImplementedException(); - } - [HttpPost("upsert")] public virtual async Task UpsertAsync(PurchaseOrderEditInput input) { @@ -202,6 +181,27 @@ public class PurchaseOrderAppService : await _repository.UpsertAsync(entity).ConfigureAwait(false); } + + [HttpGet("get-list-by-item-code")] + public virtual async Task> GetListByItemCodeAsync(string itemCode) + { + var entitys = await _repository.GetListAsync(p => p.Details.Any(y => y.ItemCode == itemCode)) + .ConfigureAwait(false); + + var dtos = ObjectMapper.Map, List>(entitys); + + return dtos; + } + + #region 校验 + + [HttpPost("check-status")] + public virtual async Task CheckStatusAsync(string number) + { + await Task.CompletedTask.ConfigureAwait(false); + throw new NotImplementedException(); + } + protected virtual async Task CheckImportInputBusinessAsync(PurchaseOrderImportInput importInput, EnumImportMethod importMethod, List validationRresult) { @@ -231,29 +231,20 @@ public class PurchaseOrderAppService : Check.NotNull(item, "供应商代码", "供应商不存在"); } - protected override async Task GetEntityAsync(PurchaseOrderImportInput importInput) - { - return await _repository.FindAsync(t => t.Number == importInput.Number).ConfigureAwait(false); - } - - protected virtual async Task ImportDataAsync(List entites, List deleteEntities) - { - await _purchaseOrderManager.ImportDataAsync(entites, deleteEntities).ConfigureAwait(false); - } - - protected override Func GetEntityExpression() - { - return t => t.Number; - } + #endregion - [HttpGet("get-list-by-item-code")] - public virtual async Task> GetListByItemCodeAsync(string itemCode) - { - var entitys = await _repository.GetListAsync(p => p.Details.Any(y => y.ItemCode == itemCode)) - .ConfigureAwait(false); + //protected override async Task GetEntityAsync(PurchaseOrderImportInput importInput) + //{ + // return await _repository.FindAsync(t => t.Number == importInput.Number).ConfigureAwait(false); + //} - var dtos = ObjectMapper.Map, List>(entitys); + //protected virtual async Task ImportDataAsync(List entites, List deleteEntities) + //{ + // await _purchaseOrderManager.ImportDataAsync(entites, deleteEntities).ConfigureAwait(false); + //} - return dtos; - } + //protected override Func GetEntityExpression() + //{ + // return t => t.Number; + //} } diff --git a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Plans/CountPlans/CountPlanAppService.cs b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Plans/CountPlans/CountPlanAppService.cs index 597a98ee4..a750ba193 100644 --- a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Plans/CountPlans/CountPlanAppService.cs +++ b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Plans/CountPlans/CountPlanAppService.cs @@ -121,23 +121,6 @@ public class CountPlanAppService : await _countPlanManager.CompleteAsync(id, type).ConfigureAwait(false); } - /* - /// - /// 校正库存 - /// - /// - /// - [HttpPost("adjust/{id}")] - public virtual async Task AdjustAsync(Guid id) - { - - var entity = await _repository.FindAsync(id); - Check.NotNull(entity, EntityClassName); - - await _countPlanManager.AdjustAsync(entity); - - } - */ [HttpPost("check-status")] public virtual async Task CheckStatusAsync(string number) { 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 d7f3a3545..fb06276e5 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 @@ -42,7 +42,7 @@ public class MaterialRequestAppService : SfsStoreRequestAppServiceBase(input); + foreach (var detail in entity.Details) + { + var toLocationDto = await _locationAppService.GetByCodeAsync(detail.ToLocationCode).ConfigureAwait(false); + var productionLineDto = await _productionLineAppService.GetByLocationGroupCodeAsync(toLocationDto.LocationGroupCode).ConfigureAwait(false); + + detail.ToLocationArea= toLocationDto.AreaCode; + detail.ToLocationErpCode = toLocationDto.ErpLocationCode; + detail.ToLocationGroup = toLocationDto.LocationGroupCode; + detail.ToWarehouseCode= toLocationDto.WarehouseCode; + } + + entity.UseOnTheWayLocation = true; var result = await _materialRequestManager.CreateBynNumberAsync(entity).ConfigureAwait(false); @@ -372,7 +390,7 @@ public class MaterialRequestAppService : SfsStoreRequestAppServiceBase CheckItemBasicAsync(MaterialRequestImportInput importInput, List validationRresult) { - var item = await ItemBasicAclService.GetByCodeAsync(importInput.ItemCode).ConfigureAwait(false); + var item = await _itemBasicAppService.GetByCodeAsync(importInput.ItemCode).ConfigureAwait(false); if (item == null) { validationRresult.Add(new ValidationResult($"物品代码{importInput.ItemCode}不存在", new[] { "物品代码" })); diff --git a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain/Jobs/IssueJobs/IssueJobManager.cs b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain/Jobs/IssueJobs/IssueJobManager.cs index 7590d0ddc..ead66142e 100644 --- a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain/Jobs/IssueJobs/IssueJobManager.cs +++ b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain/Jobs/IssueJobs/IssueJobManager.cs @@ -33,8 +33,17 @@ public class IssueJobManager : SfsJobManagerBase, IIss foreach (var detail in input.Details) { //发料子任务 赋值实际转移 - await entity.BuildDetail(detail.Id, detail.HandledFromLocationCode, detail.HandledFromLocationErpCode, detail.HandledFromWarehouseCode, - detail.HandledQty, detail.HandledSupplierBatch, detail.HandledArriveDate, detail.HandledProduceDate, detail.HandledExpireDate, detail.HandledContainerCode, detail.HandledLot, + await entity.BuildDetail(detail.Id, + detail.HandledFromLocationCode, + detail.HandledFromLocationErpCode, + detail.HandledFromWarehouseCode, + detail.HandledQty, + detail.HandledSupplierBatch, + detail.HandledArriveDate, + detail.HandledProduceDate, + detail.HandledExpireDate, + detail.HandledContainerCode, + detail.HandledLot, detail.HandledPackingCode).ConfigureAwait(false); } diff --git a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain/Plans/CountPlans/CountPlanManager.cs b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain/Plans/CountPlans/CountPlanManager.cs index bebfabce1..88cf2c24a 100644 --- a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain/Plans/CountPlans/CountPlanManager.cs +++ b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain/Plans/CountPlans/CountPlanManager.cs @@ -107,9 +107,11 @@ public class CountPlanManager : SfsStoreRequestManagerBase 0) { - SfsBaseDataRequestInputBase itemInput = new SfsBaseDataRequestInputBase(); - itemInput.Condition = partCondition; - itemInput.MaxResultCount = 99999; + var itemInput = new SfsBaseDataRequestInputBase + { + Condition = partCondition, + MaxResultCount = 99999 + }; var itemBaseList = await ItemBasicAppService.GetAllListByFilterAsync(itemInput, false).ConfigureAwait(false); @@ -119,16 +121,18 @@ public class CountPlanManager : SfsStoreRequestManagerBase 0) { - SfsBaseDataRequestInputBase locInput = new SfsBaseDataRequestInputBase(); - locInput.Condition = locCondition; - locInput.MaxResultCount = 99999; + var locInput = new SfsBaseDataRequestInputBase + { + Condition = locCondition, + MaxResultCount = 99999 + }; var locList = await LocationAppService.GetAllListByFilterAsync(locInput, false).ConfigureAwait(false); //库位列表 selectLocationCodes = locList.Select(p => p.Code).Distinct().ToList(); } //状态查询 - string statusStr = System.Text.Json.JsonSerializer.Serialize(selectStatusList.Select(p => (int)p).ToList()); + var statusStr = System.Text.Json.JsonSerializer.Serialize(selectStatusList.Select(p => (int)p).ToList()); //最终的查询条件语句 SfsInventoryRequestInputBase banlanceInput = new SfsInventoryRequestInputBase(); 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 de51fc56f..02f0fe835 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,9 @@ using System.Collections.Generic; using System.Linq; using System.Threading.Tasks; +using Win_in.Sfs.Shared.Domain.Shared; +using Win_in.Sfs.Shared.Event; +using static Win_in.Sfs.Wms.Store.Domain.Shared.StoreSettings; namespace Win_in.Sfs.Wms.Store.Domain; @@ -26,16 +29,13 @@ public class MaterialRequestManager { var number = string.IsNullOrEmpty(entity.Number) ? await GenerateNumberAsync(typeof(MaterialRequest).Name, entity.ActiveDate).ConfigureAwait(false) : entity.Number; entity.SetIdAndNumberWithDetails(GuidGenerator, number); - await PublishCreatedAsync(entity).ConfigureAwait(false); - - if (entity.AutoSubmit) - { - return await SubmitAsync(entity).ConfigureAwait(false); - } - else - { - return await Repository.InsertAsync(entity).ConfigureAwait(false); - } + entity.Submit(); + entity.Agree(); + entity.RequestStatus = EnumRequestStatus.Partial; + await LocalEventBus.PublishAsync(new SfsHandledEntityEventData(entity), false) + .ConfigureAwait(false); + await _repository.InsertAsync(entity).ConfigureAwait(false); + return entity; } @@ -128,6 +128,13 @@ public class MaterialRequestManager oldEntity.ReplaceDetail(newDetail.Id, newDetail); } + var flag=oldEntity.Details.Any(p => p.ReceivedQty < p.Qty);//还有补料完 没收到的货 + + if (!flag) + { + oldEntity.Complete(); + } + await Repository.UpdateAsync(oldEntity).ConfigureAwait(false); } 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 845a07a72..df7782591 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 @@ -214,7 +214,10 @@ public class MaterialRequestEventHandler var detail = await BuildIssueJobDetailAsync(materialRequestDetail, recommend, toLocationGroupCode).ConfigureAwait(false); if (materialRequest.UseOnTheWayLocation) { - detail.OnTheWayLocationCode = await SettingManager.GetOrNullGlobalAsync(StoreSettings.Common.IssueOnTheWayLocation).ConfigureAwait(false); + //获取在途库 + var locationDto= await _locationAppService.GetFirstByTypeAsync(EnumLocationType.TRANSPORT).ConfigureAwait(false); + + detail.OnTheWayLocationCode = locationDto.Code; } jobDetails.Add(detail); @@ -251,6 +254,7 @@ public class MaterialRequestEventHandler detail.ToLocationCode = materialRequestDetail.ToLocationCode; detail.ToLocationErpCode = materialRequestDetail.ToLocationErpCode; + 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/Requests/Note/IssueNoteEventHandler.cs b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Event/Requests/Note/IssueNoteEventHandler.cs index e113d92e4..94d4e8369 100644 --- a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Event/Requests/Note/IssueNoteEventHandler.cs +++ b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Event/Requests/Note/IssueNoteEventHandler.cs @@ -46,7 +46,7 @@ public class IssueNoteEventHandler var materialRequest = await _materialRequestManager.GetByNumberAsync(entity.RequestNumber).ConfigureAwait(false); - if (entity.RequestType != EnumMaterialRequestType.Direct_Issue.ToString()) + if (entity.RequestType != EnumMaterialRequestType.Issue_Direct.ToString()) { //更新叫料请求的已收数量 foreach (var materialRequestDetail in materialRequest.Details)