From f5b0033a87d1c2e6876c07a701af8365bf978f82 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=AD=A6=20=E8=B5=B5?= <89237069@qq.com> Date: Tue, 15 Oct 2024 14:37:57 +0800 Subject: [PATCH 01/17] =?UTF-8?q?=E6=9B=B4=E6=96=B0=E7=89=88=E6=9C=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../UnplannedIssueJobAppService.cs | 184 ++++++++++++------ .../UnplannedIssueNoteAppService.cs | 3 +- ...lannedIssueRequestForDongyangAppService.cs | 7 +- .../UnplannedIssueJobs/UnplannedIssueJob.cs | 3 + .../UnplannedIssueJobManager.cs | 35 ++-- .../Jobs/UnplannedIssueJobEventHandler.cs | 73 ++++++- 6 files changed, 219 insertions(+), 86 deletions(-) diff --git a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Jobs/UnplannedIssueJobs/UnplannedIssueJobAppService.cs b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Jobs/UnplannedIssueJobs/UnplannedIssueJobAppService.cs index f2d0afa9e..a91937eb5 100644 --- a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Jobs/UnplannedIssueJobs/UnplannedIssueJobAppService.cs +++ b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Jobs/UnplannedIssueJobs/UnplannedIssueJobAppService.cs @@ -2,6 +2,7 @@ using System; using System.Collections.Generic; using System.ComponentModel.DataAnnotations; using System.Linq; +using System.Reflection; using System.Threading.Tasks; using Castle.Components.DictionaryAdapter; using Irony; @@ -84,6 +85,68 @@ public class UnplannedIssueJobAppService + /// + /// 根据储位推荐 + /// + /// + //[HttpPost("add-detail")] + //public async Task AddDetailsAsync(UnplannedIssueJobDTO jobInput) + //{ + // var entity=await _repository.GetAsync(p=>p.Id==jobInput.Id).ConfigureAwait(false); + // var details=ObjectMapper.Map, List>(jobInput.Details); + + // var balances=new List(); + + + // foreach (var itm in entity.Details) + // { + // entity.RemoveDetail(itm.Id); + // } + // //var strs=GetAllFields(typeof(UnplannedIssueJobDetail)); + // foreach (var detail in details)//明细 + // { + // //_locationAppService.get detail.HandledFromLocationCode + // var input = new RecommendBalanceRequestInput + // { + // ItemCode = detail.ItemCode, + // Qty = detail.HandledQty, + // Statuses = new EditableList { EnumInventoryStatus.OK }, + // Locations = new List() { detail.RecommendFromLocationCode }, + // IsPackingCode = false + // }; + // var usableList = await _balanceAppService.GetUsableListAsync(input).ConfigureAwait(false);//获取推荐库存 + // usableList = usableList + // .OrderBy(p => p.Lot) + // .ThenBy(p => p.PutInTime) + // .ThenBy(p => p.Qty) //2023-9-14 苑静雯 从小数开始发料 + // .ThenBy(p => p.LocationCode) + // .ThenBy(p => p.PackingCode) + // .ToList(); + // decimal qty = 0; + // //实际要用库存 + // var returnlist = DeductInventory(usableList, detail.HandledQty); + // balances.AddRange(returnlist); + // //useBalancesOut.AddRange(returnlist); + // entity.AddDetail(detail); + // } + // var outEditInputs = await BuildExpectOutAsync(balances).ConfigureAwait(false); + // foreach (var itm in outEditInputs) + // { + // itm.JobNumber = jobInput.Number; + // } + // await _expectOutAppService.AddManyAsync(outEditInputs).ConfigureAwait(false); + //} + public static string[] GetAllFields(Type type) + { + // 获取公共实例字段 + var fields = type.GetFields(BindingFlags.Public | BindingFlags.Instance | BindingFlags.Static | BindingFlags.NonPublic); + + // 返回字段名称 + return fields.Select(f => f.Name).ToArray(); + } + + + private List DeductInventory(List inventory, decimal quantityToDeduct) { List balanceDTOs = new List(); @@ -110,30 +173,6 @@ public class UnplannedIssueJobAppService - - //public override async Task GetAsync(Guid id) - //{ - // var entity=await _repository.GetAsync(id).ConfigureAwait(false); - // var entityDTO=ObjectMapper.Map(entity); - // var details=ObjectMapper.Map, List>(entity.Details); - // var facDetails=ObjectMapper.Map, List>(entity.FacDetails); - // entityDTO.Details = details; - // entityDTO.FacDetails = facDetails; - // return entityDTO; - // // var inspectJob = await _repository.FindAsync(id).ConfigureAwait(false); - //} - - - - - - - - - - - - private async Task> BuildUnplannedIssueJobAsync(UnplannedIssueRequest requestDto, List useBalancesOut) { List jobs = new EditableList(); @@ -165,8 +204,6 @@ public class UnplannedIssueJobAppService useBalances.AddRange(returnlist); useBalancesOut.AddRange(returnlist); - - //foreach (var balanceDto in usableList) //{ // decimal availableToDeduct = Math.Min(balanceDto.Qty, balanceDto.Qty - qty); @@ -215,39 +252,48 @@ public class UnplannedIssueJobAppService foreach (var balanceDto in balanceDtoGroup) { - var jobDetail = new UnplannedIssueJobDetail(); - - jobDetail.Number = job.Number; - jobDetail.SetIdAndNumber(GuidGenerator,job.Id,job.Number); - - jobDetail.CaseCode = requestDtoDetail.CaseCode; - jobDetail.Explain = requestDtoDetail.Explain; - jobDetail.OnceBusiCode = requestDtoDetail.OnceBusiCode; - jobDetail.ProjCapacityCode = requestDtoDetail.ProjCapacityCode; - //jobDetail.ReasonCode = requestDtoDetail.ReasonCode; - jobDetail.ItemCode = requestDtoDetail.ItemCode; - jobDetail.ItemDesc1 = requestDtoDetail.ItemDesc1; - jobDetail.ItemDesc2 = requestDtoDetail.ItemDesc2; - jobDetail.ItemName = requestDtoDetail.ItemName; - jobDetail.RecommendArriveDate = balanceDto.ArriveDate; - jobDetail.RecommendContainerCode = string.Empty; - jobDetail.RecommendExpireDate = balanceDto.ExpireDate; - jobDetail.RecommendLot = balanceDto.Lot; - jobDetail.RecommendPackingCode = balanceDto.PackingCode; - jobDetail.RecommendProduceDate = balanceDto.ProduceDate; - jobDetail.RecommendQty = balanceDto.Qty; - jobDetail.RecommendSupplierBatch = balanceDto.SupplierBatch; - jobDetail.StdPackQty = requestDtoDetail.StdPackQty; - jobDetail.RecommendPackingCode = balanceDto.PackingCode; - jobDetail.HandledPackingCode = balanceDto.PackingCode; - jobDetail.RecommendFromLocationArea = balanceDto.LocationArea; - jobDetail.RecommendFromLocationCode = balanceDto.LocationCode; - jobDetail.RecommendFromLocationErpCode = balanceDto.LocationErpCode; - jobDetail.RecommendFromLocationGroup = balanceDto.LocationGroup; - jobDetail.RecommendFromWarehouseCode = balanceDto.WarehouseCode; - jobDetail.HandledQty = balanceDto.Qty; - - + //var jobDetail = new UnplannedIssueJobDetail(); + //jobDetail.Number = job.Number; + //jobDetail.SetIdAndNumber(GuidGenerator,job.Id,job.Number); + //jobDetail.CaseCode = requestDtoDetail.CaseCode; + //jobDetail.Explain = requestDtoDetail.Explain; + //jobDetail.OnceBusiCode = requestDtoDetail.OnceBusiCode; + //jobDetail.ProjCapacityCode = requestDtoDetail.ProjCapacityCode; + ////jobDetail.ReasonCode = requestDtoDetail.ReasonCode; + //jobDetail.ItemCode = requestDtoDetail.ItemCode; + //jobDetail.ItemDesc1 = requestDtoDetail.ItemDesc1; + //jobDetail.ItemDesc2 = requestDtoDetail.ItemDesc2; + //jobDetail.ItemName = requestDtoDetail.ItemName; + //jobDetail.RecommendArriveDate = balanceDto.ArriveDate; + //jobDetail.RecommendContainerCode = string.Empty; + //jobDetail.RecommendExpireDate = balanceDto.ExpireDate; + //jobDetail.RecommendLot = balanceDto.Lot; + //jobDetail.RecommendPackingCode = balanceDto.PackingCode; + //jobDetail.RecommendProduceDate = balanceDto.ProduceDate; + //jobDetail.RecommendQty = balanceDto.Qty; + //jobDetail.RecommendSupplierBatch = balanceDto.SupplierBatch; + //jobDetail.StdPackQty = requestDtoDetail.StdPackQty; + //jobDetail.RecommendPackingCode = balanceDto.PackingCode; + //jobDetail.HandledPackingCode = balanceDto.PackingCode; + //jobDetail.RecommendFromLocationArea = balanceDto.LocationArea; + //jobDetail.RecommendFromLocationCode = balanceDto.LocationCode; + //jobDetail.RecommendFromLocationErpCode = balanceDto.LocationErpCode; + //jobDetail.RecommendFromLocationGroup = balanceDto.LocationGroup; + //jobDetail.RecommendFromWarehouseCode = balanceDto.WarehouseCode; + //jobDetail.HandledFromLocationGroup = balanceDto.LocationGroup; + //jobDetail.HandledFromLocationArea = balanceDto.LocationArea; + //jobDetail.HandledFromLocationCode = balanceDto.LocationCode; + //jobDetail.HandledFromLocationErpCode = balanceDto.LocationErpCode; + //jobDetail.HandledFromWarehouseCode = balanceDto.WarehouseCode; + //jobDetail.HandledQty = balanceDto.Qty; + //jobDetail.HandledSupplierBatch = balanceDto.Lot; + //jobDetail.HandledArriveDate = balanceDto.ArriveDate; + //jobDetail.HandledProduceDate = balanceDto.ProduceDate; + //jobDetail.HandledExpireDate = balanceDto.ExpireDate; + //jobDetail.HandledContainerCode = balanceDto.ContainerCode; + //jobDetail.HandledLot = balanceDto.Lot; + //jobDetail.HandledPackingCode = balanceDto.PackingCode; + //jobDetail.Uom = balanceDto.Uom; var jobfacDetail = new UnplannedIssueJobFacDetail(); @@ -272,17 +318,29 @@ public class UnplannedIssueJobAppService jobfacDetail.RecommendSupplierBatch = balanceDto.SupplierBatch; jobfacDetail.StdPackQty = requestDtoDetail.StdPackQty; jobfacDetail.RecommendPackingCode = balanceDto.PackingCode; - jobfacDetail.HandledPackingCode = balanceDto.PackingCode; - + jobfacDetail.HandledFromLocationGroup = balanceDto.LocationGroup; + jobfacDetail.HandledFromLocationArea = balanceDto.LocationArea; + jobfacDetail.HandledFromLocationCode = balanceDto.LocationCode; + jobfacDetail.HandledFromLocationErpCode = balanceDto.LocationErpCode; + jobfacDetail.HandledFromWarehouseCode = balanceDto.WarehouseCode; + jobfacDetail.HandledQty = balanceDto.Qty; + jobfacDetail.HandledSupplierBatch = balanceDto.Lot; + jobfacDetail.HandledArriveDate = balanceDto.ArriveDate; + jobfacDetail.HandledProduceDate = balanceDto.ProduceDate; + jobfacDetail.HandledExpireDate = balanceDto.ExpireDate; + jobfacDetail.HandledContainerCode =balanceDto.ContainerCode ; + jobfacDetail.HandledLot = balanceDto.Lot; + jobfacDetail.HandledPackingCode =balanceDto.PackingCode; jobfacDetail.RecommendFromLocationArea = balanceDto.LocationArea; jobfacDetail.RecommendFromLocationCode = balanceDto.LocationCode; jobfacDetail.RecommendFromLocationErpCode = balanceDto.LocationErpCode; jobfacDetail.RecommendFromLocationGroup = balanceDto.LocationGroup; jobfacDetail.RecommendFromWarehouseCode = balanceDto.WarehouseCode; + jobfacDetail.Status = balanceDto.Status; jobfacDetail.HandledQty = balanceDto.Qty; - + jobfacDetail.Uom = balanceDto.Uom; - job.Details.Add(jobDetail); + //job.Details.Add(jobDetail); job.FacDetails.Add(jobfacDetail); } if (locationDto.Type == EnumLocationType.DimensionalStorehouse)//如果是立库的 diff --git a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Notes/UnplannedIssuesNotes/UnplannedIssueNoteAppService.cs b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Notes/UnplannedIssuesNotes/UnplannedIssueNoteAppService.cs index 36faf9345..864823f42 100644 --- a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Notes/UnplannedIssuesNotes/UnplannedIssueNoteAppService.cs +++ b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Notes/UnplannedIssuesNotes/UnplannedIssueNoteAppService.cs @@ -50,7 +50,8 @@ public class UnplannedIssueNoteAppService : entity.Details.Add(detail); //2023-10-20 袁静雯要求修改计划外出入库 Worker为userName - var userName = await _userAppService.GetUserNameByUserAsync(input.Worker).ConfigureAwait(false); + var userName = input.Worker; + //await _userAppService.GetUserNameByUserAsync(input.Worker).ConfigureAwait(false); entity.Worker = userName; } diff --git a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Requests/UnplannedIssueRequests/UnplannedIssueRequestForDongyangAppService.cs b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Requests/UnplannedIssueRequests/UnplannedIssueRequestForDongyangAppService.cs index 97585bfcc..b67c76e45 100644 --- a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Requests/UnplannedIssueRequests/UnplannedIssueRequestForDongyangAppService.cs +++ b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Requests/UnplannedIssueRequests/UnplannedIssueRequestForDongyangAppService.cs @@ -86,7 +86,7 @@ public class UnplannedIssueRequestForDongyangAppService : UnplannedIssueRequestA /// /// [HttpPost("import-dongyang")] - public async Task ImportDYAsync([FromForm] SfsImportRequestInput requestInput, [Required] IFormFile file) + public async Task ImportDYAsync([FromForm] SfsImportRequestInput requestInput, [Required] IFormFile file) { try @@ -205,7 +205,10 @@ public class UnplannedIssueRequestForDongyangAppService : UnplannedIssueRequestA packingcode =string.IsNullOrEmpty(detail.PackingCode)?"99999999":detail.PackingCode; - detail.PackingCode = packingcode; + detail.PackingCode = packingcode; + + detail.Status = EnumInventoryStatus.OK; + } diff --git a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain/Jobs/UnplannedIssueJobs/UnplannedIssueJob.cs b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain/Jobs/UnplannedIssueJobs/UnplannedIssueJob.cs index 922a5f395..010986984 100644 --- a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain/Jobs/UnplannedIssueJobs/UnplannedIssueJob.cs +++ b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain/Jobs/UnplannedIssueJobs/UnplannedIssueJob.cs @@ -101,4 +101,7 @@ public class UnplannedIssueJob : SfsJobAggregateRootBase /// 执行任务 发料任务 /// - /// - /// - /// + /// + /// + /// /// public override async Task CompleteAsync(UnplannedIssueJob input, ICurrentUser user) { - UnplannedIssueJob entity = await Repository.FindAsync(input.Id).ConfigureAwait(false); + var entity = await Repository.GetAsync(input.Id).ConfigureAwait(false); entity.BuildDate = input.BuildDate; entity.DeptCode = input.DeptCode; entity.DeptName = input.DeptName; entity.CompleteUserName = input.CompleteUserName; entity.CompleteUserId = input.CompleteUserId; + + var first= entity.FacDetails.FirstOrDefault(); + + foreach (var detail in input.Details) { - //发料子任务 赋值实际转移 - await entity.BuildDetail(detail.Id, detail.HandledFromLocationGroup, detail.HandledFromLocationArea,detail.HandledFromLocationCode, detail.HandledFromLocationErpCode, detail.HandledFromWarehouseCode, detail.HandledQty, detail.HandledSupplierBatch, detail.HandledArriveDate, detail.HandledProduceDate, detail.HandledExpireDate, - detail.HandledContainerCode, detail.HandledLot, detail.HandledPackingCode, detail.ExtraProperties).ConfigureAwait(false); + detail.SetIdAndNumber(GuidGenerator, input.Id, input.Number); + detail.ReasonCode = first.ReasonCode; + detail.CaseCode = first.CaseCode; + detail.ProjCapacityCode = first.ProjCapacityCode; + detail.OnceBusiCode = first.OnceBusiCode; + detail.Explain = first.Explain; + detail.Status = EnumInventoryStatus.OK; + entity.AddDetail(detail); + //发料子任务 赋值实际转移 } - return await base.CompleteAsync(entity, user).ConfigureAwait(false); } @@ -52,7 +65,7 @@ public class UnplannedIssueJobManager : SfsJobManagerBase ///// 临时修改 解决补料无法拿到订阅错误 ///// - ///// + ///// ///// //public virtual async Task> AddByEtoAsync(MaterialRequestHandledETO eventData) //{ @@ -89,7 +102,7 @@ public class UnplannedIssueJobManager : SfsJobManagerBase GetAsync(Expression> expression) { diff --git a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Event/Jobs/UnplannedIssueJobEventHandler.cs b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Event/Jobs/UnplannedIssueJobEventHandler.cs index 142ce0be1..d9d76b371 100644 --- a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Event/Jobs/UnplannedIssueJobEventHandler.cs +++ b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Event/Jobs/UnplannedIssueJobEventHandler.cs @@ -1,3 +1,7 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Reflection; using System.Threading.Tasks; using Volo.Abp.EventBus; using Volo.Abp.Uow; @@ -63,22 +67,73 @@ public class UnplannedIssueJobEventHandler : private UnplannedIssueNoteEditInput BuildUnplannedIssueNoteCreateInput(UnplannedIssueJob entity) { var createInput = ObjectMapper.Map(entity); - createInput.Details.RemoveAll(p => p.Qty == 0); - - /* createInput.Details = new List(); + //var strs= GetDifferentPropertyNames(typeof(UnplannedIssueJobDetail), typeof(UnplannedIssueNoteDetailInput)); + //var strs1 = GetDifferentPropertyNames(typeof(UnplannedIssueNoteDetailInput), typeof(UnplannedIssueJobDetail)); + + foreach (var inputDetail in entity.Details) { - var detail = ObjectMapper.Map(inputDetail); + if (inputDetail.HandledQty > 0) + { + var detail = ObjectMapper.Map(inputDetail); + detail.LocationCode = inputDetail.HandledFromLocationCode; + detail.LocationArea = inputDetail.HandledFromLocationArea; + detail.LocationGroup=inputDetail.HandledFromLocationGroup; + detail.LocationErpCode = inputDetail.HandledFromLocationErpCode; + detail.WarehouseCode = inputDetail.HandledFromWarehouseCode; + detail.PackingCode = inputDetail.HandledPackingCode; + detail.ContainerCode=inputDetail.HandledContainerCode; + detail.Qty=inputDetail.HandledQty; + detail.Lot=inputDetail.HandledLot; + detail.SupplierBatch = inputDetail.HandledSupplierBatch; + detail.ArriveDate=inputDetail.HandledArriveDate; + detail.ProduceDate = inputDetail.HandledProduceDate; + detail.ExpireDate=inputDetail.HandledExpireDate; + detail.Uom = inputDetail.Uom; + detail.ExtraProperties = inputDetail.ExtraProperties; + createInput.Details.Add(detail); + } + } + return createInput; + } - detail.ExtraProperties = inputDetail.ExtraProperties; + //public static string[] GetDifferentFieldNames(Type type1, Type type2) + //{ + // // 获取两个类型的字段 + // var fields1 = type1.GetFields(BindingFlags.Public | BindingFlags.Instance | BindingFlags.Static); + // var fields2 = type2.GetFields(BindingFlags.Public | BindingFlags.Instance | BindingFlags.Static); - createInput.Details.Add(detail); - } - */ + // // 获取字段名称 + // var fieldNames1 = fields1.Select(f => f.Name).ToArray(); + // var fieldNames2 = fields2.Select(f => f.Name).ToArray(); - return createInput; + // // 找出不同的字段名称 + // var differentFields = fieldNames1.Except(fieldNames2).ToArray(); + + + // return differentFields; + //} + + + public static string[] GetDifferentPropertyNames(Type type1, Type type2) + { + // 获取两个类型的属性 + var properties1 = type1.GetProperties(BindingFlags.Public | BindingFlags.Instance | BindingFlags.Static); + var properties2 = type2.GetProperties(BindingFlags.Public | BindingFlags.Instance | BindingFlags.Static); + + // 获取属性名称 + var propertyNames1 = properties1.Select(p => p.Name).ToArray(); + var propertyNames2 = properties2.Select(p => p.Name).ToArray(); + + // 找出不同的属性名称 + var differentProperties = propertyNames1.Except(propertyNames2) + .ToArray(); + + return differentProperties; } + + } From 06022b6c6f3315cbdb9f4e1238696f443b2e3ed1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=AD=A6=20=E8=B5=B5?= <89237069@qq.com> Date: Wed, 16 Oct 2024 11:11:19 +0800 Subject: [PATCH 02/17] =?UTF-8?q?=E6=9B=B4=E6=96=B0=E7=89=88=E6=9C=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../IUnplannedIssueJobAppService.cs | 4 ++ .../IUnplannedIssueRequestAppService.cs | 3 + .../UnplannedIssueJobAppService.cs | 59 ++++++++++++++++++- .../UnplannedIssueRequestAppService.cs | 9 +-- ...lannedIssueRequestForDongyangAppService.cs | 25 +++++++- .../Jobs/UnplannedIssueJobEventHandler.cs | 15 +++++ .../UnplannedIssueNoteEventHandler.cs | 9 ++- 7 files changed, 114 insertions(+), 10 deletions(-) diff --git a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Jobs/UnplannedIssueJobs/IUnplannedIssueJobAppService.cs b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Jobs/UnplannedIssueJobs/IUnplannedIssueJobAppService.cs index 7b698d394..bdc757940 100644 --- a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Jobs/UnplannedIssueJobs/IUnplannedIssueJobAppService.cs +++ b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Jobs/UnplannedIssueJobs/IUnplannedIssueJobAppService.cs @@ -10,4 +10,8 @@ public interface IUnplannedIssueJobAppService Task CreateByRecommendAsync(UnplannedIssueRequest requestDto); + Task IsAllJobOverByRequestNumberAsync(string requestNumber); + + + } diff --git a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Requests/UnplannedIssueRequests/IUnplannedIssueRequestAppService.cs b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Requests/UnplannedIssueRequests/IUnplannedIssueRequestAppService.cs index df00fd7cf..241aa6cf5 100644 --- a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Requests/UnplannedIssueRequests/IUnplannedIssueRequestAppService.cs +++ b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Requests/UnplannedIssueRequests/IUnplannedIssueRequestAppService.cs @@ -6,4 +6,7 @@ public interface IUnplannedIssueRequestAppService : ISfsStoreRequestMasterAppServiceBase { Task CreateByOAAsync(UnplannedIssueRequestEditInput input); + Task UpdateStatusByJobAsync(string requestNumber); + + } diff --git a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Jobs/UnplannedIssueJobs/UnplannedIssueJobAppService.cs b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Jobs/UnplannedIssueJobs/UnplannedIssueJobAppService.cs index a91937eb5..97e8d81b1 100644 --- a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Jobs/UnplannedIssueJobs/UnplannedIssueJobAppService.cs +++ b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Jobs/UnplannedIssueJobs/UnplannedIssueJobAppService.cs @@ -12,6 +12,7 @@ using Omu.ValueInjecter; using Volo.Abp; using Volo.Abp.Data; using Volo.Abp.ObjectMapping; +using Volo.Abp.Uow; using Win_in.Sfs.Basedata.Application.Contracts; using Win_in.Sfs.Shared.Domain.Entities; using Win_in.Sfs.Shared.Domain.Shared; @@ -30,7 +31,8 @@ public class UnplannedIssueJobAppService : SfsJobAppServiceBase, IUnplannedIssueJobAppService { - + protected IUnplannedIssueRequestAppService UnplannedReceiptRequestAppService => + LazyServiceProvider.LazyGetRequiredService(); private readonly IUnplannedIssueJobManager _unplannedIssueJobManager; private readonly ILocationAppService _locationAppService; private readonly IBalanceAppService _balanceAppService; @@ -62,6 +64,15 @@ public class UnplannedIssueJobAppService } } + private async Task UpdateRequestStatusAsync(string requestNumber) + { + await UnplannedReceiptRequestAppService.UpdateStatusByJobAsync(requestNumber).ConfigureAwait(false); + } + + + + + /// /// 根据储位推荐 @@ -243,6 +254,10 @@ public class UnplannedIssueJobAppService job.JobType = EnumJobType.UnplannedIssueJob; job.JobStatus = EnumJobStatus.Open; job.IsAutoComplete = false; + job.DeptCode = requestDto.DeptCode; + job.DeptName = requestDto.DeptName; + job.Worker = requestDto.Worker; + job.OANumber = requestDto.OANumber; job.Number =await _unplannedIssueJobManager.GetNumber().ConfigureAwait(true); job.Details = new List(); @@ -348,7 +363,6 @@ public class UnplannedIssueJobAppService await SendDimensionalStorehouseAsync().ConfigureAwait(false); job.JobStatus = EnumJobStatus.Wait; } - jobs.Add(job); } } @@ -399,6 +413,47 @@ public class UnplannedIssueJobAppService return issuenote; } + /// + /// 根据申请单号判断下面的任务是否都是完成或取消 + /// + /// + [HttpPost("is-all-job-over-by-request-number")] + public async Task IsAllJobOverByRequestNumberAsync(string requestNumber) + { + var unplannedRequestJobs = await _repository.GetListAsync(p => p.UnplannedIssueRequestNumber == requestNumber).ConfigureAwait(false); + if (unplannedRequestJobs.Any(p => + p.JobStatus == EnumJobStatus.Open || p.JobStatus == EnumJobStatus.Partial || + p.JobStatus == EnumJobStatus.Doing || p.JobStatus == EnumJobStatus.Wait)) + { + return false; + } + return true; + } + + + [HttpPost("handle/{id}")] + [UnitOfWork] + public override async Task CompleteAsync(Guid id, UnplannedIssueJobDTO dto) + { + var job = await _repository.GetAsync(id).ConfigureAwait(false); + if (job.JobStatus is EnumJobStatus.Closed or EnumJobStatus.Cancelled or EnumJobStatus.None or EnumJobStatus.Done)//需要考虑下 多次提交的问题 所以不判断 进行中 + { + throw new UserFriendlyException($"任务状态错误:编号为【{job.Number}】的任务已经【{job.JobStatus.GetDisplayName()}】"); + } + var handleEntity = ObjectMapper.Map(dto); + + var handleResult = await _unplannedIssueJobManager.CompleteAsync(handleEntity, CurrentUser).ConfigureAwait(false); + var handleDto = ObjectMapper.Map(handleResult); + + + await UpdateRequestStatusAsync(job.UnplannedIssueRequestNumber).ConfigureAwait(false); + + + return handleDto; + } + + + diff --git a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Requests/UnplannedIssueRequests/UnplannedIssueRequestAppService.cs b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Requests/UnplannedIssueRequests/UnplannedIssueRequestAppService.cs index a46cd917a..27a27fffc 100644 --- a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Requests/UnplannedIssueRequests/UnplannedIssueRequestAppService.cs +++ b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Requests/UnplannedIssueRequests/UnplannedIssueRequestAppService.cs @@ -77,8 +77,9 @@ public abstract class UnplannedIssueRequestAppService : return dto; } - - - - + [HttpPost("update-status-by-job")] + public virtual async Task UpdateStatusByJobAsync(string requestNumber) + { + throw new System.NotImplementedException(); + } } diff --git a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Requests/UnplannedIssueRequests/UnplannedIssueRequestForDongyangAppService.cs b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Requests/UnplannedIssueRequests/UnplannedIssueRequestForDongyangAppService.cs index b67c76e45..5180205ff 100644 --- a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Requests/UnplannedIssueRequests/UnplannedIssueRequestForDongyangAppService.cs +++ b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Requests/UnplannedIssueRequests/UnplannedIssueRequestForDongyangAppService.cs @@ -36,13 +36,14 @@ public class UnplannedIssueRequestForDongyangAppService : UnplannedIssueRequestA private readonly IBalanceAppService _balanceAppService; private readonly ILocationAppService _locationAppService; private readonly ITransactionTypeAclService _transactionTypeAclService; + private readonly IUnplannedIssueJobAppService _unplannedIssueJobAppService; //private readonly IExportImportService _excelService; public UnplannedIssueRequestForDongyangAppService(IUnplannedIssueRequestRepository repository, IUnplannedIssueRequestManager unplannedIssueRequestManager, IDepartmentAppService departmentApp, IBalanceAppService balanceAppService, ILocationAppService locationAppService, IExportImportService excelService, - ITransactionTypeAclService transactionTypeAclService + ITransactionTypeAclService transactionTypeAclService, IUnplannedIssueJobAppService unplannedIssueJobAppService ) : base( repository, unplannedIssueRequestManager, excelService) { _unplannedIssueRequestManager = unplannedIssueRequestManager; @@ -50,6 +51,7 @@ public class UnplannedIssueRequestForDongyangAppService : UnplannedIssueRequestA _balanceAppService = balanceAppService; _locationAppService = locationAppService; _transactionTypeAclService = transactionTypeAclService; + _unplannedIssueJobAppService = unplannedIssueJobAppService; } /// /// OA创建计划外出库申请 @@ -186,6 +188,21 @@ public class UnplannedIssueRequestForDongyangAppService : UnplannedIssueRequestA return dto; } + + [HttpPost("update-status-by-job")] + public override async Task UpdateStatusByJobAsync(string requestNumber) + { + var flag = await _unplannedIssueJobAppService.IsAllJobOverByRequestNumberAsync(requestNumber).ConfigureAwait(false); + if (flag) + { + var unplannedReceiptRequest = await _repository.FindAsync(p => p.Number == requestNumber).ConfigureAwait(false); + await _repository.UpdateAsync(unplannedReceiptRequest).ConfigureAwait(false); + } + } + + + + private async Task SetDetailPropertiesAsync(UnplannedIssueRequestDetail detail) { var itemBasic = await ItemBasicAclService.GetByCodeAsync(detail.ItemCode).ConfigureAwait(false); @@ -469,6 +486,12 @@ public class UnplannedIssueRequestForDongyangAppService : UnplannedIssueRequestA entity.DirectCreateNote = tranType.DirectCreateNote; } + + + + + + #endregion #region 校验 diff --git a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Event/Jobs/UnplannedIssueJobEventHandler.cs b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Event/Jobs/UnplannedIssueJobEventHandler.cs index d9d76b371..0b76e9a35 100644 --- a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Event/Jobs/UnplannedIssueJobEventHandler.cs +++ b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Event/Jobs/UnplannedIssueJobEventHandler.cs @@ -3,12 +3,15 @@ using System.Collections.Generic; using System.Linq; using System.Reflection; using System.Threading.Tasks; +using Volo.Abp.Domain.Repositories; using Volo.Abp.EventBus; +using Volo.Abp.EventBus.Local; using Volo.Abp.Uow; 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 static Quartz.Logging.OperationName; namespace Win_in.Sfs.Wms.Store.Event.BusinessJob; @@ -47,6 +50,18 @@ public class UnplannedIssueJobEventHandler : var note = BuildUnplannedIssueNoteCreateInput(entity); await _noteApp.CreateAsync(note).ConfigureAwait(false); + entity.JobStatus=EnumJobStatus.Done; + + + //job.CompleteUserName = worker; + //job.JobStatus = EnumJobStatus.Done; + //job = await _repository.UpdateAsync(job).ConfigureAwait(false); + //await LocalEventBus.PublishAsync(new SfsCompletedEntityEventData(job), false).ConfigureAwait(false); + //await UpdateRequestStatusAsync(job.UnplannedReceiptRequestNumber).ConfigureAwait(false); + + + + } [UnitOfWork] diff --git a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Event/Transactions/UnplannedIssueNoteEventHandler.cs b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Event/Transactions/UnplannedIssueNoteEventHandler.cs index a1da37d65..39629793f 100644 --- a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Event/Transactions/UnplannedIssueNoteEventHandler.cs +++ b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Event/Transactions/UnplannedIssueNoteEventHandler.cs @@ -1,4 +1,5 @@ using System.Collections.Generic; +using System.Linq; using System.Threading.Tasks; using Volo.Abp.Domain.Entities; using Volo.Abp.EventBus; @@ -23,8 +24,9 @@ public class UnplannedIssueNoteEventHandler private const EnumTransType TransType = EnumTransType.UnplannedIssue; private readonly IUnplannedIssueRequestAppService _unplannedIssueRequestApp; + private readonly IUnplannedIssueJobAppService _unplannedIssueJobApp; - public UnplannedIssueNoteEventHandler(IUnplannedIssueRequestAppService unplannedIssueRequestApp) + public UnplannedIssueNoteEventHandler(IUnplannedIssueRequestAppService unplannedIssueRequestApp,IUnplannedIssueJobAppService _unplannedIssueJobApp) { this._unplannedIssueRequestApp = unplannedIssueRequestApp; } @@ -37,10 +39,11 @@ public class UnplannedIssueNoteEventHandler if (!string.IsNullOrEmpty(entity.UnplannedIssueRequestNumber)) { - await _unplannedIssueRequestApp.CompleteByNumberAsync(entity.UnplannedIssueRequestNumber).ConfigureAwait(false); + + //await _unplannedIssueRequestApp.CompleteByNumberAsync(entity.UnplannedIssueRequestNumber).ConfigureAwait(false); if (entity.UnplannedIssueType == EnumUnplannedIssueType.Raw) { - await ExpectOutAppService.RemoveAsync(entity.UnplannedIssueRequestNumber).ConfigureAwait(false); + await ExpectOutAppService.RemoveAsync(entity.JobNumber).ConfigureAwait(false); } } } From 216fd402049e72a75624cbe33b9d712827d7e953 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=AD=A6=20=E8=B5=B5?= <89237069@qq.com> Date: Wed, 16 Oct 2024 13:28:23 +0800 Subject: [PATCH 03/17] =?UTF-8?q?=E6=8F=90=E4=BA=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Jobs/UnplannedIssueJobs/UnplannedIssueJobAppService.cs | 5 +++-- .../Transactions/UnplannedIssueNoteEventHandler.cs | 3 ++- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Jobs/UnplannedIssueJobs/UnplannedIssueJobAppService.cs b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Jobs/UnplannedIssueJobs/UnplannedIssueJobAppService.cs index 97e8d81b1..9b7b8a0d1 100644 --- a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Jobs/UnplannedIssueJobs/UnplannedIssueJobAppService.cs +++ b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Jobs/UnplannedIssueJobs/UnplannedIssueJobAppService.cs @@ -432,7 +432,7 @@ public class UnplannedIssueJobAppService [HttpPost("handle/{id}")] - [UnitOfWork] + public override async Task CompleteAsync(Guid id, UnplannedIssueJobDTO dto) { var job = await _repository.GetAsync(id).ConfigureAwait(false); @@ -442,11 +442,12 @@ public class UnplannedIssueJobAppService } var handleEntity = ObjectMapper.Map(dto); + handleEntity.JobStatus = EnumJobStatus.Done; var handleResult = await _unplannedIssueJobManager.CompleteAsync(handleEntity, CurrentUser).ConfigureAwait(false); var handleDto = ObjectMapper.Map(handleResult); - await UpdateRequestStatusAsync(job.UnplannedIssueRequestNumber).ConfigureAwait(false); + return handleDto; diff --git a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Event/Transactions/UnplannedIssueNoteEventHandler.cs b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Event/Transactions/UnplannedIssueNoteEventHandler.cs index 39629793f..bbaf0d010 100644 --- a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Event/Transactions/UnplannedIssueNoteEventHandler.cs +++ b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Event/Transactions/UnplannedIssueNoteEventHandler.cs @@ -12,6 +12,7 @@ using Win_in.Sfs.Wms.Store.Application.Contracts; using Win_in.Sfs.Wms.Store.Domain; using Win_in.Sfs.Wms.Store.Event.Inventories; using Win_in.Sfs.Wms.Store.Event.Transaction; +using static Quartz.Logging.OperationName; namespace Win_in.Sfs.Wms.Store.Event.Transactions; @@ -39,7 +40,7 @@ public class UnplannedIssueNoteEventHandler if (!string.IsNullOrEmpty(entity.UnplannedIssueRequestNumber)) { - + await _unplannedIssueRequestApp.UpdateStatusByJobAsync(entity.UnplannedIssueRequestNumber).ConfigureAwait(false); //await _unplannedIssueRequestApp.CompleteByNumberAsync(entity.UnplannedIssueRequestNumber).ConfigureAwait(false); if (entity.UnplannedIssueType == EnumUnplannedIssueType.Raw) { From 4ce81ee827c0607cbf9f99be9e37a9c7fa966b72 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=AD=A6=20=E8=B5=B5?= <89237069@qq.com> Date: Wed, 16 Oct 2024 16:12:22 +0800 Subject: [PATCH 04/17] =?UTF-8?q?=E6=9B=B4=E6=96=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../UnplannedIssueJobAppService.cs | 104 ++---------------- ...lannedIssueRequestForDongyangAppService.cs | 29 ++++- .../UnplannedIssueJobManager.cs | 1 + 3 files changed, 32 insertions(+), 102 deletions(-) diff --git a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Jobs/UnplannedIssueJobs/UnplannedIssueJobAppService.cs b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Jobs/UnplannedIssueJobs/UnplannedIssueJobAppService.cs index 9b7b8a0d1..d927fe72a 100644 --- a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Jobs/UnplannedIssueJobs/UnplannedIssueJobAppService.cs +++ b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Jobs/UnplannedIssueJobs/UnplannedIssueJobAppService.cs @@ -40,7 +40,7 @@ public class UnplannedIssueJobAppService public UnplannedIssueJobAppService( IUnplannedIssueJobRepository repository, IUnplannedIssueJobManager unplannedIssueJobManager, ILocationAppService locationAppService, IBalanceAppService balanceAppService, IExpectOutAppService expectOutAppService - ) : base(repository, unplannedIssueJobManager) + ) : base(repository, unplannedIssueJobManager ) { _unplannedIssueJobManager = unplannedIssueJobManager; _locationAppService = locationAppService; @@ -96,57 +96,7 @@ public class UnplannedIssueJobAppService - /// - /// 根据储位推荐 - /// - /// - //[HttpPost("add-detail")] - //public async Task AddDetailsAsync(UnplannedIssueJobDTO jobInput) - //{ - // var entity=await _repository.GetAsync(p=>p.Id==jobInput.Id).ConfigureAwait(false); - // var details=ObjectMapper.Map, List>(jobInput.Details); - - // var balances=new List(); - - - // foreach (var itm in entity.Details) - // { - // entity.RemoveDetail(itm.Id); - // } - // //var strs=GetAllFields(typeof(UnplannedIssueJobDetail)); - // foreach (var detail in details)//明细 - // { - // //_locationAppService.get detail.HandledFromLocationCode - // var input = new RecommendBalanceRequestInput - // { - // ItemCode = detail.ItemCode, - // Qty = detail.HandledQty, - // Statuses = new EditableList { EnumInventoryStatus.OK }, - // Locations = new List() { detail.RecommendFromLocationCode }, - // IsPackingCode = false - // }; - // var usableList = await _balanceAppService.GetUsableListAsync(input).ConfigureAwait(false);//获取推荐库存 - // usableList = usableList - // .OrderBy(p => p.Lot) - // .ThenBy(p => p.PutInTime) - // .ThenBy(p => p.Qty) //2023-9-14 苑静雯 从小数开始发料 - // .ThenBy(p => p.LocationCode) - // .ThenBy(p => p.PackingCode) - // .ToList(); - // decimal qty = 0; - // //实际要用库存 - // var returnlist = DeductInventory(usableList, detail.HandledQty); - // balances.AddRange(returnlist); - // //useBalancesOut.AddRange(returnlist); - // entity.AddDetail(detail); - // } - // var outEditInputs = await BuildExpectOutAsync(balances).ConfigureAwait(false); - // foreach (var itm in outEditInputs) - // { - // itm.JobNumber = jobInput.Number; - // } - // await _expectOutAppService.AddManyAsync(outEditInputs).ConfigureAwait(false); - //} + public static string[] GetAllFields(Type type) { // 获取公共实例字段 @@ -267,48 +217,7 @@ public class UnplannedIssueJobAppService foreach (var balanceDto in balanceDtoGroup) { - //var jobDetail = new UnplannedIssueJobDetail(); - //jobDetail.Number = job.Number; - //jobDetail.SetIdAndNumber(GuidGenerator,job.Id,job.Number); - //jobDetail.CaseCode = requestDtoDetail.CaseCode; - //jobDetail.Explain = requestDtoDetail.Explain; - //jobDetail.OnceBusiCode = requestDtoDetail.OnceBusiCode; - //jobDetail.ProjCapacityCode = requestDtoDetail.ProjCapacityCode; - ////jobDetail.ReasonCode = requestDtoDetail.ReasonCode; - //jobDetail.ItemCode = requestDtoDetail.ItemCode; - //jobDetail.ItemDesc1 = requestDtoDetail.ItemDesc1; - //jobDetail.ItemDesc2 = requestDtoDetail.ItemDesc2; - //jobDetail.ItemName = requestDtoDetail.ItemName; - //jobDetail.RecommendArriveDate = balanceDto.ArriveDate; - //jobDetail.RecommendContainerCode = string.Empty; - //jobDetail.RecommendExpireDate = balanceDto.ExpireDate; - //jobDetail.RecommendLot = balanceDto.Lot; - //jobDetail.RecommendPackingCode = balanceDto.PackingCode; - //jobDetail.RecommendProduceDate = balanceDto.ProduceDate; - //jobDetail.RecommendQty = balanceDto.Qty; - //jobDetail.RecommendSupplierBatch = balanceDto.SupplierBatch; - //jobDetail.StdPackQty = requestDtoDetail.StdPackQty; - //jobDetail.RecommendPackingCode = balanceDto.PackingCode; - //jobDetail.HandledPackingCode = balanceDto.PackingCode; - //jobDetail.RecommendFromLocationArea = balanceDto.LocationArea; - //jobDetail.RecommendFromLocationCode = balanceDto.LocationCode; - //jobDetail.RecommendFromLocationErpCode = balanceDto.LocationErpCode; - //jobDetail.RecommendFromLocationGroup = balanceDto.LocationGroup; - //jobDetail.RecommendFromWarehouseCode = balanceDto.WarehouseCode; - //jobDetail.HandledFromLocationGroup = balanceDto.LocationGroup; - //jobDetail.HandledFromLocationArea = balanceDto.LocationArea; - //jobDetail.HandledFromLocationCode = balanceDto.LocationCode; - //jobDetail.HandledFromLocationErpCode = balanceDto.LocationErpCode; - //jobDetail.HandledFromWarehouseCode = balanceDto.WarehouseCode; - //jobDetail.HandledQty = balanceDto.Qty; - //jobDetail.HandledSupplierBatch = balanceDto.Lot; - //jobDetail.HandledArriveDate = balanceDto.ArriveDate; - //jobDetail.HandledProduceDate = balanceDto.ProduceDate; - //jobDetail.HandledExpireDate = balanceDto.ExpireDate; - //jobDetail.HandledContainerCode = balanceDto.ContainerCode; - //jobDetail.HandledLot = balanceDto.Lot; - //jobDetail.HandledPackingCode = balanceDto.PackingCode; - //jobDetail.Uom = balanceDto.Uom; + var jobfacDetail = new UnplannedIssueJobFacDetail(); @@ -435,7 +344,10 @@ public class UnplannedIssueJobAppService public override async Task CompleteAsync(Guid id, UnplannedIssueJobDTO dto) { - var job = await _repository.GetAsync(id).ConfigureAwait(false); + + //using (var _uow = new UnitOfWorkManager()) { } + + var job = await _repository.GetAsync(id).ConfigureAwait(false); if (job.JobStatus is EnumJobStatus.Closed or EnumJobStatus.Cancelled or EnumJobStatus.None or EnumJobStatus.Done)//需要考虑下 多次提交的问题 所以不判断 进行中 { throw new UserFriendlyException($"任务状态错误:编号为【{job.Number}】的任务已经【{job.JobStatus.GetDisplayName()}】"); @@ -447,7 +359,7 @@ public class UnplannedIssueJobAppService var handleDto = ObjectMapper.Map(handleResult); - + await UpdateRequestStatusAsync(job.UnplannedIssueRequestNumber).ConfigureAwait(false); return handleDto; diff --git a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Requests/UnplannedIssueRequests/UnplannedIssueRequestForDongyangAppService.cs b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Requests/UnplannedIssueRequests/UnplannedIssueRequestForDongyangAppService.cs index 5180205ff..1f26798b7 100644 --- a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Requests/UnplannedIssueRequests/UnplannedIssueRequestForDongyangAppService.cs +++ b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Requests/UnplannedIssueRequests/UnplannedIssueRequestForDongyangAppService.cs @@ -100,14 +100,31 @@ public class UnplannedIssueRequestForDongyangAppService : UnplannedIssueRequestA await CreateByDYOAsync(importList, EnumUnplannedIssueType.IMPORT).ConfigureAwait(false); - //if (errors.Count > 0) - //{ - // var fileContent = _excelService.Export(errors); - // return new TestResult(fileContent.FileContents, ExportImportService.ContentType) { FileDownloadName = "错误信息" }; - //} + List errorsList = new List(); + + foreach (var itm in importList) + { + if (string.IsNullOrEmpty(itm.CaseCode) + || string.IsNullOrEmpty(itm.ItemCode) + || itm.Qty == 0 + || string.IsNullOrEmpty(itm.ProjCapacityCode) + || string.IsNullOrEmpty(itm.LocationErpCode) + + ) + { + itm.Explain = "此项错误"; + errorsList.Add(itm); + } + } + + if (errorsList.Count > 0) + { + var fileContent = _excelService.Export(errorsList); + return new TestResult(fileContent.FileContents, ExportImportService.ContentType) { FileDownloadName =fileContent.FileDownloadName }; + } var fileContent1 = _excelService.Export(importList); - // return new TestResult(fileContent1.FileContents, ExportImportService.ContentType) { FileDownloadName = "Kitting导入文件" }; + return new JsonResult(new { Code = 200, FileDownloadName = fileContent1.FileDownloadName }); } catch (Exception e) diff --git a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain/Jobs/UnplannedIssueJobs/UnplannedIssueJobManager.cs b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain/Jobs/UnplannedIssueJobs/UnplannedIssueJobManager.cs index 174015bc2..e9aa8610a 100644 --- a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain/Jobs/UnplannedIssueJobs/UnplannedIssueJobManager.cs +++ b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain/Jobs/UnplannedIssueJobs/UnplannedIssueJobManager.cs @@ -52,6 +52,7 @@ public class UnplannedIssueJobManager : SfsJobManagerBase Date: Wed, 16 Oct 2024 17:05:24 +0800 Subject: [PATCH 05/17] =?UTF-8?q?=E6=8F=90=E4=BA=A4=E6=95=B0=E9=87=8Fbug?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../UnplannedIssueJobAppService.cs | 57 +++++++++++-------- ...lannedIssueRequestForDongyangAppService.cs | 5 +- .../UnplannedIssueNoteEventHandler.cs | 10 ++-- 3 files changed, 42 insertions(+), 30 deletions(-) diff --git a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Jobs/UnplannedIssueJobs/UnplannedIssueJobAppService.cs b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Jobs/UnplannedIssueJobs/UnplannedIssueJobAppService.cs index d927fe72a..7b3b7728e 100644 --- a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Jobs/UnplannedIssueJobs/UnplannedIssueJobAppService.cs +++ b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Jobs/UnplannedIssueJobs/UnplannedIssueJobAppService.cs @@ -11,6 +11,7 @@ using Microsoft.AspNetCore.Mvc; using Omu.ValueInjecter; using Volo.Abp; using Volo.Abp.Data; +using Volo.Abp.Domain.Entities; using Volo.Abp.ObjectMapping; using Volo.Abp.Uow; using Win_in.Sfs.Basedata.Application.Contracts; @@ -37,16 +38,18 @@ public class UnplannedIssueJobAppService private readonly ILocationAppService _locationAppService; private readonly IBalanceAppService _balanceAppService; private readonly IExpectOutAppService _expectOutAppService; + private readonly IUnitOfWorkManager _unitOfWorkManager; public UnplannedIssueJobAppService( - IUnplannedIssueJobRepository repository, IUnplannedIssueJobManager unplannedIssueJobManager, ILocationAppService locationAppService, IBalanceAppService balanceAppService, IExpectOutAppService expectOutAppService + IUnplannedIssueJobRepository repository, IUnplannedIssueJobManager unplannedIssueJobManager, ILocationAppService locationAppService, + IBalanceAppService balanceAppService, IExpectOutAppService expectOutAppService, IUnitOfWorkManager unitOfWorkManager ) : base(repository, unplannedIssueJobManager ) { _unplannedIssueJobManager = unplannedIssueJobManager; _locationAppService = locationAppService; _balanceAppService = balanceAppService; _expectOutAppService = expectOutAppService; - + _unitOfWorkManager = unitOfWorkManager; } /// @@ -97,14 +100,14 @@ public class UnplannedIssueJobAppService - public static string[] GetAllFields(Type type) - { - // 获取公共实例字段 - var fields = type.GetFields(BindingFlags.Public | BindingFlags.Instance | BindingFlags.Static | BindingFlags.NonPublic); + //public static string[] GetAllFields(Type type) + //{ + // // 获取公共实例字段 + // var fields = type.GetFields(BindingFlags.Public | BindingFlags.Instance | BindingFlags.Static | BindingFlags.NonPublic); - // 返回字段名称 - return fields.Select(f => f.Name).ToArray(); - } + // // 返回字段名称 + // return fields.Select(f => f.Name).ToArray(); + //} @@ -117,15 +120,16 @@ public class UnplannedIssueJobAppService decimal availableToDeduct = Math.Min(item.Qty, quantityToDeduct - totalDeducted); item.Qty -= availableToDeduct; totalDeducted += availableToDeduct; - BalanceDTO dto = new BalanceDTO(); - dto.InjectFrom(item); - dto.Qty = availableToDeduct; - balanceDTOs.Add(dto); + // 如果已经扣减达到所需数量,退出循环 if (totalDeducted >= quantityToDeduct) { break; } + BalanceDTO dto = new BalanceDTO(); + dto.InjectFrom(item); + dto.Qty = availableToDeduct; + balanceDTOs.Add(dto); } // 返回实际扣减的库存数量 return balanceDTOs; @@ -344,21 +348,26 @@ public class UnplannedIssueJobAppService public override async Task CompleteAsync(Guid id, UnplannedIssueJobDTO dto) { - - //using (var _uow = new UnitOfWorkManager()) { } - - var job = await _repository.GetAsync(id).ConfigureAwait(false); - if (job.JobStatus is EnumJobStatus.Closed or EnumJobStatus.Cancelled or EnumJobStatus.None or EnumJobStatus.Done)//需要考虑下 多次提交的问题 所以不判断 进行中 + var job = await _repository.GetAsync(id).ConfigureAwait(false); + var handleDto = new UnplannedIssueJobDTO(); + using (var uow = _unitOfWorkManager.Begin()) { - throw new UserFriendlyException($"任务状态错误:编号为【{job.Number}】的任务已经【{job.JobStatus.GetDisplayName()}】"); - } - var handleEntity = ObjectMapper.Map(dto); + // 在工作单元中插入数据 + + if (job.JobStatus is EnumJobStatus.Closed or EnumJobStatus.Cancelled or EnumJobStatus.None or EnumJobStatus.Done)//需要考虑下 多次提交的问题 所以不判断 进行中 + { + throw new UserFriendlyException($"任务状态错误:编号为【{job.Number}】的任务已经【{job.JobStatus.GetDisplayName()}】"); + } + var handleEntity = ObjectMapper.Map(dto); - handleEntity.JobStatus = EnumJobStatus.Done; - var handleResult = await _unplannedIssueJobManager.CompleteAsync(handleEntity, CurrentUser).ConfigureAwait(false); - var handleDto = ObjectMapper.Map(handleResult); + handleEntity.JobStatus = EnumJobStatus.Done; + var handleResult = await _unplannedIssueJobManager.CompleteAsync(handleEntity, CurrentUser).ConfigureAwait(false); + handleDto = ObjectMapper.Map(handleResult); + await _expectOutAppService.RemoveAsync(dto.Number).ConfigureAwait(false); + }; + await UpdateRequestStatusAsync(job.UnplannedIssueRequestNumber).ConfigureAwait(false); diff --git a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Requests/UnplannedIssueRequests/UnplannedIssueRequestForDongyangAppService.cs b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Requests/UnplannedIssueRequests/UnplannedIssueRequestForDongyangAppService.cs index 1f26798b7..67e499d38 100644 --- a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Requests/UnplannedIssueRequests/UnplannedIssueRequestForDongyangAppService.cs +++ b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Requests/UnplannedIssueRequests/UnplannedIssueRequestForDongyangAppService.cs @@ -12,6 +12,7 @@ using Omu.ValueInjecter; using Volo.Abp; using Volo.Abp.Data; using Volo.Abp.Domain.Entities; +using Volo.Abp.Uow; using Volo.Abp.Users; using Win_in.Sfs.Auth.Application.Contracts; using Win_in.Sfs.Basedata.Application.Contracts; @@ -37,13 +38,14 @@ public class UnplannedIssueRequestForDongyangAppService : UnplannedIssueRequestA private readonly ILocationAppService _locationAppService; private readonly ITransactionTypeAclService _transactionTypeAclService; private readonly IUnplannedIssueJobAppService _unplannedIssueJobAppService; + private readonly IUnitOfWorkManager _unitOfWorkManager; //private readonly IExportImportService _excelService; public UnplannedIssueRequestForDongyangAppService(IUnplannedIssueRequestRepository repository, IUnplannedIssueRequestManager unplannedIssueRequestManager, IDepartmentAppService departmentApp, IBalanceAppService balanceAppService, ILocationAppService locationAppService, IExportImportService excelService, - ITransactionTypeAclService transactionTypeAclService, IUnplannedIssueJobAppService unplannedIssueJobAppService + ITransactionTypeAclService transactionTypeAclService, IUnplannedIssueJobAppService unplannedIssueJobAppService, IUnitOfWorkManager unitOfWorkManager ) : base( repository, unplannedIssueRequestManager, excelService) { _unplannedIssueRequestManager = unplannedIssueRequestManager; @@ -52,6 +54,7 @@ public class UnplannedIssueRequestForDongyangAppService : UnplannedIssueRequestA _locationAppService = locationAppService; _transactionTypeAclService = transactionTypeAclService; _unplannedIssueJobAppService = unplannedIssueJobAppService; + _unitOfWorkManager = unitOfWorkManager; } /// /// OA创建计划外出库申请 diff --git a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Event/Transactions/UnplannedIssueNoteEventHandler.cs b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Event/Transactions/UnplannedIssueNoteEventHandler.cs index bbaf0d010..e756006f9 100644 --- a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Event/Transactions/UnplannedIssueNoteEventHandler.cs +++ b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Event/Transactions/UnplannedIssueNoteEventHandler.cs @@ -40,12 +40,12 @@ public class UnplannedIssueNoteEventHandler if (!string.IsNullOrEmpty(entity.UnplannedIssueRequestNumber)) { - await _unplannedIssueRequestApp.UpdateStatusByJobAsync(entity.UnplannedIssueRequestNumber).ConfigureAwait(false); + //await _unplannedIssueRequestApp.UpdateStatusByJobAsync(entity.UnplannedIssueRequestNumber).ConfigureAwait(false); //await _unplannedIssueRequestApp.CompleteByNumberAsync(entity.UnplannedIssueRequestNumber).ConfigureAwait(false); - if (entity.UnplannedIssueType == EnumUnplannedIssueType.Raw) - { - await ExpectOutAppService.RemoveAsync(entity.JobNumber).ConfigureAwait(false); - } + //if (entity.UnplannedIssueType == EnumUnplannedIssueType.Raw) + //{ + // await ExpectOutAppService.RemoveAsync(entity.JobNumber).ConfigureAwait(false); + //} } } From 49a5ed5b81663c230e102a0db22e78962741aacb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=AD=A6=20=E8=B5=B5?= <89237069@qq.com> Date: Thu, 17 Oct 2024 09:49:15 +0800 Subject: [PATCH 06/17] =?UTF-8?q?=E6=9B=B4=E6=96=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../UnplannedIssueJobAppService.cs | 37 ++++++++++++++----- .../UnplannedReceiptJobAppService.cs | 2 +- 2 files changed, 28 insertions(+), 11 deletions(-) diff --git a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Jobs/UnplannedIssueJobs/UnplannedIssueJobAppService.cs b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Jobs/UnplannedIssueJobs/UnplannedIssueJobAppService.cs index 7b3b7728e..874e2bcde 100644 --- a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Jobs/UnplannedIssueJobs/UnplannedIssueJobAppService.cs +++ b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Jobs/UnplannedIssueJobs/UnplannedIssueJobAppService.cs @@ -120,16 +120,18 @@ public class UnplannedIssueJobAppService decimal availableToDeduct = Math.Min(item.Qty, quantityToDeduct - totalDeducted); item.Qty -= availableToDeduct; totalDeducted += availableToDeduct; - + if (availableToDeduct <= 0) + { + BalanceDTO dto = new BalanceDTO(); + dto.InjectFrom(item); + dto.Qty = availableToDeduct; + balanceDTOs.Add(dto); + } // 如果已经扣减达到所需数量,退出循环 if (totalDeducted >= quantityToDeduct) { break; } - BalanceDTO dto = new BalanceDTO(); - dto.InjectFrom(item); - dto.Qty = availableToDeduct; - balanceDTOs.Add(dto); } // 返回实际扣减的库存数量 return balanceDTOs; @@ -145,6 +147,7 @@ public class UnplannedIssueJobAppService foreach (var requestDtoDetail in requestDto.Details)//非计划领料明细 { var locationCodes = await _locationAppService.GetListByErpLocationCodes(new StringList(requestDtoDetail.LocationErpCode)).ConfigureAwait(false);//获取存放库位 + var input = new RecommendBalanceRequestInput { ItemCode = requestDtoDetail.ItemCode, @@ -154,6 +157,9 @@ public class UnplannedIssueJobAppService IsPackingCode = false }; var usableList = await _balanceAppService.GetUsableListAsync(input).ConfigureAwait(false);//获取推荐库存 + + usableList = usableList.Where(p => p.Qty> 0).ToList(); + usableList = usableList .OrderBy(p => p.Lot) .ThenBy(p => p.PutInTime) @@ -198,11 +204,26 @@ public class UnplannedIssueJobAppService { throw new UserFriendlyException("库存余额不够!"); } - foreach (var balanceDtoGroup in useBalances.GroupBy(p => p.LocationCode)) { var locationDto = await _locationAppService.GetByCodeAsync(balanceDtoGroup.Key).ConfigureAwait(false); var job = new UnplannedIssueJob(); + switch (locationDto.Type) + { + case EnumLocationType.RAW: + job.UnplannedIssueType = EnumUnplannedIssueType.Raw; + break; + case EnumLocationType.FG: + case EnumLocationType.DimensionalStorehouse: + case EnumLocationType.CUST: + case EnumLocationType.KittingWip: + case EnumLocationType.OUTSIDE: + case EnumLocationType.SEMI: + case EnumLocationType.WIP: + case EnumLocationType.THIRDPARTY: + job.UnplannedIssueType = EnumUnplannedIssueType.Wip; + break; + } job.SetId(GuidGenerator.Create()); job.UnplannedIssueRequestNumber= requestDto.Number; job.JobType = EnumJobType.UnplannedIssueJob; @@ -211,7 +232,6 @@ public class UnplannedIssueJobAppService job.DeptCode = requestDto.DeptCode; job.DeptName = requestDto.DeptName; job.Worker = requestDto.Worker; - job.OANumber = requestDto.OANumber; job.Number =await _unplannedIssueJobManager.GetNumber().ConfigureAwait(true); job.Details = new List(); @@ -221,10 +241,7 @@ public class UnplannedIssueJobAppService foreach (var balanceDto in balanceDtoGroup) { - - var jobfacDetail = new UnplannedIssueJobFacDetail(); - jobfacDetail.Number = job.Number; jobfacDetail.SetIdAndNumber(GuidGenerator, job.Id, job.Number); jobfacDetail.CaseCode = requestDtoDetail.CaseCode; diff --git a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Jobs/UnplannedReceiptJobs/UnplannedReceiptJobAppService.cs b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Jobs/UnplannedReceiptJobs/UnplannedReceiptJobAppService.cs index 3ea3af4ff..78143a07c 100644 --- a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Jobs/UnplannedReceiptJobs/UnplannedReceiptJobAppService.cs +++ b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Jobs/UnplannedReceiptJobs/UnplannedReceiptJobAppService.cs @@ -94,7 +94,7 @@ public class UnplannedReceiptJobAppService public async Task DoByFreeAsync(string jobNumber,string worker,List detailDtos) { var details = ObjectMapper.Map, List>(detailDtos); - var job=await _repository.FindAsync(p => p.Number == jobNumber).ConfigureAwait(false); + var job=await _repository.FindAsync(p => p.Number == jobNumber).ConfigureAwait(false); if (job == null) { throw new UserFriendlyException($"{jobNumber}【任务】不存在"); From ea1adfcd29ec3fbdc4ba7d6cb377772bb90500c4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=AD=A6=20=E8=B5=B5?= <89237069@qq.com> Date: Thu, 17 Oct 2024 09:53:57 +0800 Subject: [PATCH 07/17] =?UTF-8?q?=E6=9B=B4=E6=96=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Jobs/UnplannedIssueJobs/UnplannedIssueJobAppService.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Jobs/UnplannedIssueJobs/UnplannedIssueJobAppService.cs b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Jobs/UnplannedIssueJobs/UnplannedIssueJobAppService.cs index 874e2bcde..d63220b5e 100644 --- a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Jobs/UnplannedIssueJobs/UnplannedIssueJobAppService.cs +++ b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Jobs/UnplannedIssueJobs/UnplannedIssueJobAppService.cs @@ -120,7 +120,7 @@ public class UnplannedIssueJobAppService decimal availableToDeduct = Math.Min(item.Qty, quantityToDeduct - totalDeducted); item.Qty -= availableToDeduct; totalDeducted += availableToDeduct; - if (availableToDeduct <= 0) + if (availableToDeduct > 0) { BalanceDTO dto = new BalanceDTO(); dto.InjectFrom(item); From 9f63954713592e33d05f8958b3c8d3387dd87d90 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=AD=A6=20=E8=B5=B5?= <89237069@qq.com> Date: Thu, 17 Oct 2024 11:13:43 +0800 Subject: [PATCH 08/17] =?UTF-8?q?=E6=9B=B4=E6=96=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../UnplannedIssueJobAppService.cs | 47 ++++++++++++++++--- 1 file changed, 40 insertions(+), 7 deletions(-) diff --git a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Jobs/UnplannedIssueJobs/UnplannedIssueJobAppService.cs b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Jobs/UnplannedIssueJobs/UnplannedIssueJobAppService.cs index d63220b5e..1775a1a6a 100644 --- a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Jobs/UnplannedIssueJobs/UnplannedIssueJobAppService.cs +++ b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Jobs/UnplannedIssueJobs/UnplannedIssueJobAppService.cs @@ -8,6 +8,7 @@ using Castle.Components.DictionaryAdapter; using Irony; using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Mvc; +using Microsoft.Extensions.Logging; using Omu.ValueInjecter; using Volo.Abp; using Volo.Abp.Data; @@ -39,10 +40,11 @@ public class UnplannedIssueJobAppService private readonly IBalanceAppService _balanceAppService; private readonly IExpectOutAppService _expectOutAppService; private readonly IUnitOfWorkManager _unitOfWorkManager; + private readonly ILogger _logger; public UnplannedIssueJobAppService( IUnplannedIssueJobRepository repository, IUnplannedIssueJobManager unplannedIssueJobManager, ILocationAppService locationAppService, - IBalanceAppService balanceAppService, IExpectOutAppService expectOutAppService, IUnitOfWorkManager unitOfWorkManager + IBalanceAppService balanceAppService, IExpectOutAppService expectOutAppService, IUnitOfWorkManager unitOfWorkManager, ILogger logger ) : base(repository, unplannedIssueJobManager ) { _unplannedIssueJobManager = unplannedIssueJobManager; @@ -50,6 +52,7 @@ public class UnplannedIssueJobAppService _balanceAppService = balanceAppService; _expectOutAppService = expectOutAppService; _unitOfWorkManager = unitOfWorkManager; + _logger = logger; } /// @@ -111,10 +114,11 @@ public class UnplannedIssueJobAppService - private List DeductInventory(List inventory, decimal quantityToDeduct) + private async Task> DeductInventory(List inventory, decimal quantityToDeduct) { List balanceDTOs = new List(); decimal totalDeducted = 0; + foreach (var item in inventory) { decimal availableToDeduct = Math.Min(item.Qty, quantityToDeduct - totalDeducted); @@ -122,10 +126,28 @@ public class UnplannedIssueJobAppService totalDeducted += availableToDeduct; if (availableToDeduct > 0) { + var locationDto = await _locationAppService.GetByCodeAsync(item.LocationCode).ConfigureAwait(false); BalanceDTO dto = new BalanceDTO(); - dto.InjectFrom(item); - dto.Qty = availableToDeduct; - balanceDTOs.Add(dto); + switch (locationDto.Type) + { + case EnumLocationType.RAW: + dto.InjectFrom(item); + dto.Qty = availableToDeduct; + balanceDTOs.Add(dto); + break; + case EnumLocationType.FG: + case EnumLocationType.DimensionalStorehouse: + case EnumLocationType.CUST: + case EnumLocationType.KittingWip: + case EnumLocationType.OUTSIDE: + case EnumLocationType.SEMI: + case EnumLocationType.WIP: + case EnumLocationType.THIRDPARTY: + + dto.InjectFrom(item); + balanceDTOs.Add(dto); + break; + } } // 如果已经扣减达到所需数量,退出循环 if (totalDeducted >= quantityToDeduct) @@ -143,6 +165,7 @@ public class UnplannedIssueJobAppService private async Task> BuildUnplannedIssueJobAsync(UnplannedIssueRequest requestDto, List useBalancesOut) { List jobs = new EditableList(); + List Errors= new List(); foreach (var requestDtoDetail in requestDto.Details)//非计划领料明细 { @@ -171,10 +194,12 @@ public class UnplannedIssueJobAppService decimal qty = 0; //实际要用库存 List useBalances = new List(); - var returnlist=DeductInventory(usableList, requestDtoDetail.Qty); + var returnlist=await DeductInventory(usableList, requestDtoDetail.Qty).ConfigureAwait(false); useBalances.AddRange(returnlist); useBalancesOut.AddRange(returnlist); + + //foreach (var balanceDto in usableList) //{ // decimal availableToDeduct = Math.Min(balanceDto.Qty, balanceDto.Qty - qty); @@ -202,7 +227,8 @@ public class UnplannedIssueJobAppService //} if (returnlist.Count == 0) { - throw new UserFriendlyException("库存余额不够!"); + Errors.Add($"{"非生产领料"+requestDto.Number+"零件号:"+requestDtoDetail.ItemCode + "库存不够" + requestDtoDetail.Qty.ToString()}"); + } foreach (var balanceDtoGroup in useBalances.GroupBy(p => p.LocationCode)) { @@ -296,6 +322,13 @@ public class UnplannedIssueJobAppService jobs.Add(job); } } + if (Errors.Count > 0) + { + foreach (var itm in Errors) + { + _logger.LogError(itm); + } + } return jobs; } From 17e4689bb88669fac07495bfc8faee9119db3982 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=AD=A6=20=E8=B5=B5?= <89237069@qq.com> Date: Thu, 17 Oct 2024 13:19:23 +0800 Subject: [PATCH 09/17] =?UTF-8?q?=E6=9B=B4=E6=96=B0=E7=89=88=E6=9C=AC?= =?UTF-8?q?=E7=8A=B6=E6=80=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../UnplannedIssueJobAppService.cs | 24 +++++++++---------- ...lannedIssueRequestForDongyangAppService.cs | 1 + 2 files changed, 13 insertions(+), 12 deletions(-) diff --git a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Jobs/UnplannedIssueJobs/UnplannedIssueJobAppService.cs b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Jobs/UnplannedIssueJobs/UnplannedIssueJobAppService.cs index 1775a1a6a..ac61ba485 100644 --- a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Jobs/UnplannedIssueJobs/UnplannedIssueJobAppService.cs +++ b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Jobs/UnplannedIssueJobs/UnplannedIssueJobAppService.cs @@ -400,25 +400,25 @@ public class UnplannedIssueJobAppService { var job = await _repository.GetAsync(id).ConfigureAwait(false); var handleDto = new UnplannedIssueJobDTO(); - using (var uow = _unitOfWorkManager.Begin()) - { + //using (var uow = _unitOfWorkManager.Begin()) + //{ // 在工作单元中插入数据 if (job.JobStatus is EnumJobStatus.Closed or EnumJobStatus.Cancelled or EnumJobStatus.None or EnumJobStatus.Done)//需要考虑下 多次提交的问题 所以不判断 进行中 { throw new UserFriendlyException($"任务状态错误:编号为【{job.Number}】的任务已经【{job.JobStatus.GetDisplayName()}】"); } - var handleEntity = ObjectMapper.Map(dto); - - handleEntity.JobStatus = EnumJobStatus.Done; - var handleResult = await _unplannedIssueJobManager.CompleteAsync(handleEntity, CurrentUser).ConfigureAwait(false); - handleDto = ObjectMapper.Map(handleResult); - - await _expectOutAppService.RemoveAsync(dto.Number).ConfigureAwait(false); - }; - - + var handleEntity = ObjectMapper.Map(dto); + var handleResult = await _unplannedIssueJobManager.CompleteAsync(handleEntity, CurrentUser).ConfigureAwait(false); + handleDto = ObjectMapper.Map(handleResult); + await _expectOutAppService.RemoveAsync(dto.Number).ConfigureAwait(false); + handleResult.JobStatus = EnumJobStatus.Done; + handleResult.CompleteUserName = dto.Worker; + handleResult.JobStatus = EnumJobStatus.Done; + job = await _repository.UpdateAsync(handleResult).ConfigureAwait(false); await UpdateRequestStatusAsync(job.UnplannedIssueRequestNumber).ConfigureAwait(false); + //}; + return handleDto; diff --git a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Requests/UnplannedIssueRequests/UnplannedIssueRequestForDongyangAppService.cs b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Requests/UnplannedIssueRequests/UnplannedIssueRequestForDongyangAppService.cs index 67e499d38..1507eacb6 100644 --- a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Requests/UnplannedIssueRequests/UnplannedIssueRequestForDongyangAppService.cs +++ b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Requests/UnplannedIssueRequests/UnplannedIssueRequestForDongyangAppService.cs @@ -216,6 +216,7 @@ public class UnplannedIssueRequestForDongyangAppService : UnplannedIssueRequestA if (flag) { var unplannedReceiptRequest = await _repository.FindAsync(p => p.Number == requestNumber).ConfigureAwait(false); + unplannedReceiptRequest.RequestStatus = EnumRequestStatus.Completed; await _repository.UpdateAsync(unplannedReceiptRequest).ConfigureAwait(false); } } From 870a5dc2e6b25dc75359db7167a48fb0e167f989 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=AD=A6=20=E8=B5=B5?= <89237069@qq.com> Date: Thu, 17 Oct 2024 14:04:08 +0800 Subject: [PATCH 10/17] =?UTF-8?q?=E6=9B=B4=E6=96=B0=E7=89=88=E6=9C=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...lannedIssueRequestForDongyangAppService.cs | 69 ++++++++++++------- 1 file changed, 46 insertions(+), 23 deletions(-) diff --git a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Requests/UnplannedIssueRequests/UnplannedIssueRequestForDongyangAppService.cs b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Requests/UnplannedIssueRequests/UnplannedIssueRequestForDongyangAppService.cs index 1507eacb6..0d32ace16 100644 --- a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Requests/UnplannedIssueRequests/UnplannedIssueRequestForDongyangAppService.cs +++ b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Requests/UnplannedIssueRequests/UnplannedIssueRequestForDongyangAppService.cs @@ -136,6 +136,29 @@ public class UnplannedIssueRequestForDongyangAppService : UnplannedIssueRequestA } } + private async Task SetEntityPropertiesAsync(UnplannedIssueRequest entity) + { + var userName = CurrentUser.GetUserName_New(); + var name = CurrentUser.GetName(); + if (userName != null) + { + var department = await _departmentApp.GetByUsernameAsync(userName).ConfigureAwait(false); + + if (department != null) + { + entity.DeptCode = department.Code; + entity.DeptName = department.Name; + } + entity.CreatorId = CurrentUser.Id; + entity.Worker = name; + } + + entity.BuildDate = DateTime.Now; + + //await SetRequestAutoPropertiesAsync(entity).ConfigureAwait(false); + } + + /// /// OA接口 @@ -173,9 +196,9 @@ public class UnplannedIssueRequestForDongyangAppService : UnplannedIssueRequestA request.DeptCode = first.DeptCode; request.DeptName = first.DeptName; request.BuildDate= DateTime.Now; - + await SetEntityPropertiesAsync(request).ConfigureAwait(false); List detailList = new List(); foreach (var itm in p_list) { @@ -465,28 +488,28 @@ public class UnplannedIssueRequestForDongyangAppService : UnplannedIssueRequestA /// /// /// - private async Task SetEntityPropertiesAsync(UnplannedIssueRequest entity) - { - var userName = CurrentUser.GetUserName_New(); - var name = CurrentUser.GetName(); - if (userName != null) - { - var department = await _departmentApp.GetByUsernameAsync(userName).ConfigureAwait(false); - - if (department != null) - { - entity.DeptCode = department.Code; - entity.DeptName = department.Name; - } - - entity.Worker = name; - entity.CreatorId = CurrentUser.Id; - } - - entity.BuildDate = DateTime.Now; - - await SetRequestAutoPropertiesAsync(entity).ConfigureAwait(false); - } + //private async Task SetEntityPropertiesAsync(UnplannedIssueRequest entity) + //{ + // var userName = CurrentUser.GetUserName_New(); + // var name = CurrentUser.GetName(); + // if (userName != null) + // { + // var department = await _departmentApp.GetByUsernameAsync(userName).ConfigureAwait(false); + + // if (department != null) + // { + // entity.DeptCode = department.Code; + // entity.DeptName = department.Name; + // } + + // entity.Worker = name; + // entity.CreatorId = CurrentUser.Id; + // } + + // entity.BuildDate = DateTime.Now; + + // await SetRequestAutoPropertiesAsync(entity).ConfigureAwait(false); + //} /// /// 赋值业务事务 From 214dd050a3d3d75e58dd3bf675bac1b3782ab624 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=AD=A6=20=E8=B5=B5?= <89237069@qq.com> Date: Thu, 17 Oct 2024 14:42:06 +0800 Subject: [PATCH 11/17] =?UTF-8?q?=E6=9B=B4=E6=96=B0=E7=89=88=E6=9C=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...lannedIssueRequestForDongyangAppService.cs | 173 ++++++------------ 1 file changed, 59 insertions(+), 114 deletions(-) diff --git a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Requests/UnplannedIssueRequests/UnplannedIssueRequestForDongyangAppService.cs b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Requests/UnplannedIssueRequests/UnplannedIssueRequestForDongyangAppService.cs index 0d32ace16..aa33cba67 100644 --- a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Requests/UnplannedIssueRequests/UnplannedIssueRequestForDongyangAppService.cs +++ b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Requests/UnplannedIssueRequests/UnplannedIssueRequestForDongyangAppService.cs @@ -136,6 +136,16 @@ public class UnplannedIssueRequestForDongyangAppService : UnplannedIssueRequestA } } + + + + + + + + + + private async Task SetEntityPropertiesAsync(UnplannedIssueRequest entity) { var userName = CurrentUser.GetUserName_New(); @@ -274,13 +284,6 @@ public class UnplannedIssueRequestForDongyangAppService : UnplannedIssueRequestA } - - - - - - - /// /// 用来重写 导入数据时可以加工数据 /// @@ -290,71 +293,39 @@ public class UnplannedIssueRequestForDongyangAppService : UnplannedIssueRequestA { var addList = dictionary.Where(p => p.Value == EntityState.Added).Select(p => p.Key); - foreach (var unplannedIssueRequest in addList) + foreach (var unplannedReceiptRequest in addList) { - if(unplannedIssueRequest.UnplannedIssueType != EnumUnplannedIssueType.Wip&& unplannedIssueRequest.UnplannedIssueType != EnumUnplannedIssueType.Raw) - { - throw new UserFriendlyException($"【{unplannedIssueRequest.UnplannedIssueType}】领料类型," + - $"不是{EnumUnplannedIssueType.Wip.GetDisplayName()}" + - $"或{EnumUnplannedIssueType.Raw.GetDisplayName()}】"); - } - await SetRequestAutoPropertiesAsync(unplannedIssueRequest).ConfigureAwait(false); - await SetEntityPropertiesAsync(unplannedIssueRequest).ConfigureAwait(false); - List newDetails = new List(); - foreach (var detail in unplannedIssueRequest.Details) + //if (unplannedReceiptRequest.UnplannedIssueType != EnumUnplannedIssueType.Wip && unplannedReceiptRequest.UnplannedIssueType != EnumUnplannedIssueType.Raw) + //{ + // throw new UserFriendlyException($"【{unplannedReceiptRequest.UnplannedIssueType}】退料料类型," + + // $"不是{EnumUnplannedReceiptType.Wip.GetDisplayName()}" + + // $"或{EnumUnplannedReceiptType.Raw.GetDisplayName()}】"); + //} + await SetRequestAutoPropertiesAsync(unplannedReceiptRequest).ConfigureAwait(false); + await SetEntityPropertiesAsync(unplannedReceiptRequest).ConfigureAwait(false); + + foreach (var detail in unplannedReceiptRequest.Details) { - //需要复制一个这个方法 去掉区域参数 换成库位参数 - RecommendBalanceRequestInput input = new RecommendBalanceRequestInput(); - if (unplannedIssueRequest.UnplannedIssueType == EnumUnplannedIssueType.Raw) - { - var locationDto = await _locationAppService.GetByCodeAsync(detail.LocationCode).ConfigureAwait(false); - if (locationDto.Type != EnumLocationType.RAW && locationDto.Type != EnumLocationType.SEMI && locationDto.Type != EnumLocationType.FG) - { - throw new UserFriendlyException($"【{detail.LocationCode}】库位类型错误," + - $"不是{EnumLocationType.RAW.GetDisplayName()}" + - $"或{EnumLocationType.SEMI.GetDisplayName()}" + - $"或{EnumLocationType.FG.GetDisplayName()}】"); - } - // unplannedIssueRequest.DirectCreateNote = false; - input.IsPackingCode = true;//只查询带箱码的推荐 - } - if (unplannedIssueRequest.UnplannedIssueType == EnumUnplannedIssueType.Wip) - { - var locationDto = await _locationAppService.GetByCodeAsync(detail.LocationCode).ConfigureAwait(false); - if (locationDto.Type != EnumLocationType.WIP) - { - throw new UserFriendlyException($"【{detail.LocationCode}】库位类型错误," + - $"不是{EnumLocationType.WIP.GetDisplayName()}】"); - } - } - - input.ItemCode = detail.ItemCode; - input.Locations = new List() { detail.LocationCode }; - input.Qty = detail.Qty; - input.Statuses = new List { EnumInventoryStatus.OK }; - var balanceLst = await _balanceAppService.GetRecommendBalancesByLocationsAsync(input).ConfigureAwait(false); - if (balanceLst.Count == 0) - { - throw new UserFriendlyException($"无推荐库存零件号:{input.ItemCode}库位{input.Locations[0]}!"); - } - var sumQty = balanceLst.Sum(itm => itm.Qty); - if (detail.Qty > sumQty) - { - throw new UserFriendlyException($"库存数量不足!"); - } - foreach (var balance in balanceLst) - { - var newDetail = CreateNewDetail(detail, balance); - await SetDetailPropertiesAsync(newDetail, unplannedIssueRequest.UnplannedIssueType).ConfigureAwait(false); - newDetails.Add(newDetail); - } + await SetDetailPropertiesAsync(detail).ConfigureAwait(false); } - unplannedIssueRequest.Details.Clear();//删除所有明细} - unplannedIssueRequest.Details.AddRange(newDetails);//按推荐添加 } return dictionary; } + + + + + + + + + + + + + + /// /// 创建明细 /// @@ -413,29 +384,29 @@ public class UnplannedIssueRequestForDongyangAppService : UnplannedIssueRequestA detail.LocationArea = location.AreaCode; detail.LocationCode = location.Code; } - string packingcode = string.Empty; - if(type!= EnumUnplannedIssueType.Wip) - { - packingcode = detail.PackingCode; - } - var balance = await _balanceAppService.GetByItemLocationAndPackingAsync( - packingcode, - detail.ItemCode, - detail.LocationCode).ConfigureAwait(false); + //string packingcode = string.Empty; + //if(type!= EnumUnplannedIssueType.Wip) + //{ + // packingcode = detail.PackingCode; + //} + //var balance = await _balanceAppService.GetByItemLocationAndPackingAsync( + // packingcode, + // detail.ItemCode, + // detail.LocationCode).ConfigureAwait(false); - if (balance != null) - { - detail.SupplierBatch = balance.SupplierBatch; - detail.ArriveDate = balance.ArriveDate; - detail.ProduceDate = balance.ProduceDate; - detail.ExpireDate = balance.ExpireDate; - - detail.Lot = balance.Lot; - detail.ContainerCode = balance.ContainerCode; - detail.PackingCode = balance.PackingCode; - detail.Qty = detail.Qty; - detail.Status = balance.Status; - } + //if (balance != null) + //{ + // detail.SupplierBatch = balance.SupplierBatch; + // detail.ArriveDate = balance.ArriveDate; + // detail.ProduceDate = balance.ProduceDate; + // detail.ExpireDate = balance.ExpireDate; + + // detail.Lot = balance.Lot; + // detail.ContainerCode = balance.ContainerCode; + // detail.PackingCode = balance.PackingCode; + // detail.Qty = detail.Qty; + // detail.Status = balance.Status; + //} //if (!string.IsNullOrEmpty(detail)) //{ @@ -483,33 +454,7 @@ public class UnplannedIssueRequestForDongyangAppService : UnplannedIssueRequestA //} } - /// - /// 赋值主记录 - /// - /// - /// - //private async Task SetEntityPropertiesAsync(UnplannedIssueRequest entity) - //{ - // var userName = CurrentUser.GetUserName_New(); - // var name = CurrentUser.GetName(); - // if (userName != null) - // { - // var department = await _departmentApp.GetByUsernameAsync(userName).ConfigureAwait(false); - - // if (department != null) - // { - // entity.DeptCode = department.Code; - // entity.DeptName = department.Name; - // } - - // entity.Worker = name; - // entity.CreatorId = CurrentUser.Id; - // } - - // entity.BuildDate = DateTime.Now; - - // await SetRequestAutoPropertiesAsync(entity).ConfigureAwait(false); - //} + /// /// 赋值业务事务 From c0a742b04cc423d25c95515a24a0db95deec4653 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=AD=A6=20=E8=B5=B5?= <89237069@qq.com> Date: Thu, 17 Oct 2024 16:30:40 +0800 Subject: [PATCH 12/17] =?UTF-8?q?=E6=9B=B4=E6=96=B0=E7=89=88=E6=9C=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../UnplannedIssueRequestImportInput.cs | 113 ++++++++++++++++-- ...lannedIssueRequestForDongyangAppService.cs | 29 +++-- ...nnedReceiptRequestForDongyangAppService.cs | 2 +- 3 files changed, 120 insertions(+), 24 deletions(-) diff --git a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Requests/UnplannedIssueRequests/Inputs/UnplannedIssueRequestImportInput.cs b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Requests/UnplannedIssueRequests/Inputs/UnplannedIssueRequestImportInput.cs index cba9dc85f..f4edec33c 100644 --- a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Requests/UnplannedIssueRequests/Inputs/UnplannedIssueRequestImportInput.cs +++ b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Requests/UnplannedIssueRequests/Inputs/UnplannedIssueRequestImportInput.cs @@ -9,9 +9,9 @@ namespace Win_in.Sfs.Wms.Store.Application.Contracts; public class UnplannedIssueRequestImportInput : SfsStoreImportInputBase , IHasQty { - [Display(Name = "领料类别", Order = 0)] - [Required(ErrorMessage = "领料类别不能为空")] - public EnumUnplannedIssueType UnplannedIssueType { get; set; } + //[Display(Name = "领料类别", Order = 0)] + //[Required(ErrorMessage = "领料类别不能为空")] + //public EnumUnplannedIssueType UnplannedIssueType { get; set; } /// /// ERP料号 @@ -38,7 +38,7 @@ public class UnplannedIssueRequestImportInput : SfsStoreImportInputBase /// [Display(Name = "调出库位")] [Required(ErrorMessage = "调出库位不能为空")] - public string LocationCode { get; set; } + public string LocationErpCode { get; set; } /// /// 专案 @@ -59,13 +59,13 @@ public class UnplannedIssueRequestImportInput : SfsStoreImportInputBase [Display(Name = "次交易码")] public string OnceBusiCode { get; set; } - /// - /// 箱码 - /// - [Display(Name = "箱码")] - [ImporterHeader(IsIgnore = true)] - [ExporterHeader(IsIgnore = true)] - public string PackingCode { get; set; } + ///// + ///// 箱码 + ///// + //[Display(Name = "箱码")] + //[ImporterHeader(IsIgnore = true)] + //[ExporterHeader(IsIgnore = true)] + //public string PackingCode { get; set; } /// /// 仓库代码 @@ -87,4 +87,95 @@ public class UnplannedIssueRequestImportInput : SfsStoreImportInputBase [Display(Name = "说明")] [Required(ErrorMessage = "说明不能为空")] public string Explain { get; set; } + + + + + ///// + ///// 部门代码 + ///// + //[Display(Name = "部门代码")] + //public string DeptCode { get; set; } + + ///// + ///// 部门名称 + ///// + //[Display(Name = "部门名称")] + //public string DeptName { get; set; } + + ///// + ///// 料号 + ///// + //[Display(Name = "料号")] + //[Required(ErrorMessage = "{0}是必填项")] + //public string ItemCode { get; set; } + + + + + + ///// + ///// 数量 + ///// + //[Display(Name = "数量")] + //[Required(ErrorMessage = "{0}是必填项")] + //public decimal Qty { get; set; } + + ///// + ///// 单位 + ///// + //[Display(Name = "单位")] + //public string Uom { get; set; } + + + + ///// + ///// 调出库位 + ///// + //[Display(Name = "调出库位")] + //[Required(ErrorMessage = "{0}是必填项")] + //public string LocationErpCode { get; set; } + ///// + ///// 专案 + ///// + //[Display(Name = "专案")] + //[Required(ErrorMessage = "{0}是必填项")] + //public string CaseCode { get; set; } + ///// + ///// 项目分类 + ///// + //[Display(Name = "项目分类")] + //[Required(ErrorMessage = "{0}是必填项")] + //public string ProjCapacityCode { get; set; } + + ///// + ///// 次交易码 + ///// + //[Display(Name = "次交易码")] + //[Required(ErrorMessage = "{0}是必填项")] + //public string OnceBusiCode { get; set; } + ///// + ///// 说明 + ///// + //[Display(Name = "说明")] + //public string Explain { get; set; } + + + + + + + + + + + + + + + + + + + } diff --git a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Requests/UnplannedIssueRequests/UnplannedIssueRequestForDongyangAppService.cs b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Requests/UnplannedIssueRequests/UnplannedIssueRequestForDongyangAppService.cs index aa33cba67..bbd300034 100644 --- a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Requests/UnplannedIssueRequests/UnplannedIssueRequestForDongyangAppService.cs +++ b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Requests/UnplannedIssueRequests/UnplannedIssueRequestForDongyangAppService.cs @@ -96,6 +96,11 @@ public class UnplannedIssueRequestForDongyangAppService : UnplannedIssueRequestA try { + + + + + using var ms = new MemoryStream(); await file.OpenReadStream().CopyToAsync(ms).ConfigureAwait(false); var inputFileBytes = ms.GetAllBytes(); @@ -506,11 +511,11 @@ public class UnplannedIssueRequestForDongyangAppService : UnplannedIssueRequestA var balance = await BalanceAclService.GetByItemLocationAndPackingAsync( string.Empty, importInput.ItemCode, - importInput.LocationCode).ConfigureAwait(false); + importInput.LocationErpCode).ConfigureAwait(false); if (balance == null) { - validationRresult.Add(new ValidationResult($"ERP料号{importInput.ItemCode}在库位{importInput.LocationCode}没有库存记录", new string[] { "库存余额" })); + validationRresult.Add(new ValidationResult($"ERP料号{importInput.ItemCode}在库位{importInput.LocationErpCode}没有库存记录", new string[] { "库存余额" })); } else { @@ -558,7 +563,7 @@ public class UnplannedIssueRequestForDongyangAppService : UnplannedIssueRequestA protected override async Task ValidateImportModelAsync(UnplannedIssueRequestImportInput model, List validationRresult) { _ = await CheckItemBasicAsync(model, validationRresult).ConfigureAwait(false); - _ = await CheckLocationAsync(model.LocationCode, validationRresult).ConfigureAwait(false); + //_ = await CheckLocationAsync(model.LocationErpCode, validationRresult).ConfigureAwait(false); await CheckOnceBusiCodeAsync(model, validationRresult).ConfigureAwait(false);//次交易码 //await CheckCaseCodeAsync(model, validationRresult).ConfigureAwait(false);//专案代码 @@ -581,15 +586,15 @@ public class UnplannedIssueRequestForDongyangAppService : UnplannedIssueRequestA return item; } - protected async Task CheckLocationAsync(string locationCode, List validationRresult) - { - var location = await LocationAclService.GetByCodeAsync(locationCode).ConfigureAwait(false); - if (location == null) - { - validationRresult.Add(new ValidationResult($"调出库位{locationCode}不存在", new string[] { "调出库位" })); - } - return location; - } + //protected async Task CheckLocationAsync(string locationCode, List validationRresult) + //{ + // var location = await LocationAclService.GetByCodeAsync(locationCode).ConfigureAwait(false); + // if (location == null) + // { + // validationRresult.Add(new ValidationResult($"调出库位{locationCode}不存在", new string[] { "调出库位" })); + // } + // return location; + //} protected async Task CheckOnceBusiCodeAsync(UnplannedIssueRequestImportInput importInput, List validationRresult) { diff --git a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Requests/UnplannedReceiptRequests/UnplannedReceiptRequestForDongyangAppService.cs b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Requests/UnplannedReceiptRequests/UnplannedReceiptRequestForDongyangAppService.cs index fd318bf3b..507deafca 100644 --- a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Requests/UnplannedReceiptRequests/UnplannedReceiptRequestForDongyangAppService.cs +++ b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Requests/UnplannedReceiptRequests/UnplannedReceiptRequestForDongyangAppService.cs @@ -291,7 +291,7 @@ public class UnplannedReceiptRequestForDongyangAppService : UnplannedReceiptRequ var location = await _locationAppService.GetListByErpLocationCodes(new List{ locationCode }).ConfigureAwait(false); if (location == null||location.Count==0) { - validationRresult.Add("调入储位", $"调入库位{locationCode}不存在"); + validationRresult.Add("调出储位", $"调入出位{locationCode}不存在"); } } From 8950227dd6f33c3329895a8cfa40ee40cb901b6f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=AD=A6=20=E8=B5=B5?= <89237069@qq.com> Date: Thu, 17 Oct 2024 16:57:17 +0800 Subject: [PATCH 13/17] =?UTF-8?q?=E6=8F=90=E4=BA=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...lannedIssueRequestForDongyangAppService.cs | 39 +++++++++++++------ 1 file changed, 28 insertions(+), 11 deletions(-) diff --git a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Requests/UnplannedIssueRequests/UnplannedIssueRequestForDongyangAppService.cs b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Requests/UnplannedIssueRequests/UnplannedIssueRequestForDongyangAppService.cs index bbd300034..28800b572 100644 --- a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Requests/UnplannedIssueRequests/UnplannedIssueRequestForDongyangAppService.cs +++ b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Requests/UnplannedIssueRequests/UnplannedIssueRequestForDongyangAppService.cs @@ -39,6 +39,7 @@ public class UnplannedIssueRequestForDongyangAppService : UnplannedIssueRequestA private readonly ITransactionTypeAclService _transactionTypeAclService; private readonly IUnplannedIssueJobAppService _unplannedIssueJobAppService; private readonly IUnitOfWorkManager _unitOfWorkManager; + private readonly ILogger _logger; //private readonly IExportImportService _excelService; @@ -46,6 +47,9 @@ public class UnplannedIssueRequestForDongyangAppService : UnplannedIssueRequestA IUnplannedIssueRequestManager unplannedIssueRequestManager, IDepartmentAppService departmentApp, IBalanceAppService balanceAppService, ILocationAppService locationAppService, IExportImportService excelService, ITransactionTypeAclService transactionTypeAclService, IUnplannedIssueJobAppService unplannedIssueJobAppService, IUnitOfWorkManager unitOfWorkManager + , ILogger logger + + ) : base( repository, unplannedIssueRequestManager, excelService) { _unplannedIssueRequestManager = unplannedIssueRequestManager; @@ -55,6 +59,7 @@ public class UnplannedIssueRequestForDongyangAppService : UnplannedIssueRequestA _transactionTypeAclService = transactionTypeAclService; _unplannedIssueJobAppService = unplannedIssueJobAppService; _unitOfWorkManager = unitOfWorkManager; + _logger = logger; } /// /// OA创建计划外出库申请 @@ -184,8 +189,18 @@ public class UnplannedIssueRequestForDongyangAppService : UnplannedIssueRequestA public async Task CreateByAsync(List p_list) { + UnplannedIssueRequestDTO request = new UnplannedIssueRequestDTO(); + try + { + return await CreateByDYOAsync(p_list, EnumUnplannedIssueType.OA, true).ConfigureAwait(false); + } + catch (Exception e) + { + + throw new UserFriendlyException(e.Message); + } - return await CreateByDYOAsync(p_list, EnumUnplannedIssueType.OA, true).ConfigureAwait(false); + } @@ -194,6 +209,9 @@ public class UnplannedIssueRequestForDongyangAppService : UnplannedIssueRequestA protected async Task CreateByDYOAsync(List p_list, EnumUnplannedIssueType type, bool isAutoSubmit=false) { + + + UnplannedIssueRequest request = new UnplannedIssueRequest(); if (p_list.Count == 0) { @@ -563,7 +581,7 @@ public class UnplannedIssueRequestForDongyangAppService : UnplannedIssueRequestA protected override async Task ValidateImportModelAsync(UnplannedIssueRequestImportInput model, List validationRresult) { _ = await CheckItemBasicAsync(model, validationRresult).ConfigureAwait(false); - //_ = await CheckLocationAsync(model.LocationErpCode, validationRresult).ConfigureAwait(false); + _ = await CheckErpLocationAsync(model.LocationErpCode, validationRresult).ConfigureAwait(false); await CheckOnceBusiCodeAsync(model, validationRresult).ConfigureAwait(false);//次交易码 //await CheckCaseCodeAsync(model, validationRresult).ConfigureAwait(false);//专案代码 @@ -586,15 +604,14 @@ public class UnplannedIssueRequestForDongyangAppService : UnplannedIssueRequestA return item; } - //protected async Task CheckLocationAsync(string locationCode, List validationRresult) - //{ - // var location = await LocationAclService.GetByCodeAsync(locationCode).ConfigureAwait(false); - // if (location == null) - // { - // validationRresult.Add(new ValidationResult($"调出库位{locationCode}不存在", new string[] { "调出库位" })); - // } - // return location; - //} + protected virtual async Task CheckErpLocationAsync(string locationCode, List validationRresult) + { + var location = await _locationAppService.GetListByErpLocationCodes(new List { locationCode }).ConfigureAwait(false); + if (location == null || location.Count == 0) + { + validationRresult.Add("调出储位", $"调入出位{locationCode}不存在"); + } + } protected async Task CheckOnceBusiCodeAsync(UnplannedIssueRequestImportInput importInput, List validationRresult) { From 839d9e88f1b4c56652682919f5a05d03e50e68fb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=AD=A6=20=E8=B5=B5?= <89237069@qq.com> Date: Thu, 17 Oct 2024 17:29:34 +0800 Subject: [PATCH 14/17] =?UTF-8?q?=E6=9B=B4=E6=96=B0=E7=89=88=E6=9C=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../DTOs/UnplannedIssueRequestDTO.cs | 15 +++++++++++++++ .../UnplannedIssueRequestForDongyangAppService.cs | 6 +----- 2 files changed, 16 insertions(+), 5 deletions(-) diff --git a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Requests/UnplannedIssueRequests/DTOs/UnplannedIssueRequestDTO.cs b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Requests/UnplannedIssueRequests/DTOs/UnplannedIssueRequestDTO.cs index 6abc9919d..9688315e9 100644 --- a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Requests/UnplannedIssueRequests/DTOs/UnplannedIssueRequestDTO.cs +++ b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Requests/UnplannedIssueRequests/DTOs/UnplannedIssueRequestDTO.cs @@ -1,5 +1,7 @@ using System; +using System.Collections.Generic; using System.ComponentModel.DataAnnotations; + using Win_in.Sfs.Shared.Application.Contracts; using Win_in.Sfs.Shared.Domain.Shared.Enums.Store; @@ -39,3 +41,16 @@ public class UnplannedIssueRequestDTO : SfsStoreRequestDTOBase Errors { set; get; } + + public bool Status { set; get; } + + + +} + + + diff --git a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Requests/UnplannedIssueRequests/UnplannedIssueRequestForDongyangAppService.cs b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Requests/UnplannedIssueRequests/UnplannedIssueRequestForDongyangAppService.cs index 28800b572..ca0aba253 100644 --- a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Requests/UnplannedIssueRequests/UnplannedIssueRequestForDongyangAppService.cs +++ b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Requests/UnplannedIssueRequests/UnplannedIssueRequestForDongyangAppService.cs @@ -102,10 +102,6 @@ public class UnplannedIssueRequestForDongyangAppService : UnplannedIssueRequestA try { - - - - using var ms = new MemoryStream(); await file.OpenReadStream().CopyToAsync(ms).ConfigureAwait(false); var inputFileBytes = ms.GetAllBytes(); @@ -581,7 +577,7 @@ public class UnplannedIssueRequestForDongyangAppService : UnplannedIssueRequestA protected override async Task ValidateImportModelAsync(UnplannedIssueRequestImportInput model, List validationRresult) { _ = await CheckItemBasicAsync(model, validationRresult).ConfigureAwait(false); - _ = await CheckErpLocationAsync(model.LocationErpCode, validationRresult).ConfigureAwait(false); + await CheckErpLocationAsync(model.LocationErpCode, validationRresult).ConfigureAwait(false); await CheckOnceBusiCodeAsync(model, validationRresult).ConfigureAwait(false);//次交易码 //await CheckCaseCodeAsync(model, validationRresult).ConfigureAwait(false);//专案代码 From 4bea55087f5715548892b02105b65a9b4e0c204e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=AD=A6=20=E8=B5=B5?= <89237069@qq.com> Date: Fri, 18 Oct 2024 08:46:54 +0800 Subject: [PATCH 15/17] =?UTF-8?q?=E6=9B=B4=E6=96=B0=E7=89=88=E6=9C=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Inputs/UnplannedIssueRequestEditInput.cs | 7 +++++++ .../UnplannedIssueRequestForDongyangAppService.cs | 2 +- 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Requests/UnplannedIssueRequests/Inputs/UnplannedIssueRequestEditInput.cs b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Requests/UnplannedIssueRequests/Inputs/UnplannedIssueRequestEditInput.cs index 4f5bbe640..70b5d75d0 100644 --- a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Requests/UnplannedIssueRequests/Inputs/UnplannedIssueRequestEditInput.cs +++ b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Requests/UnplannedIssueRequests/Inputs/UnplannedIssueRequestEditInput.cs @@ -60,6 +60,13 @@ public class UnplannedIssueRequestEditInput : SfsStoreRequestCreateOrUpdateInput public class UnplannedIssueRequestImportDto { + + + /// + /// OA单据号 + /// + [Display(Name = "OA单据号")] + public string OANumber { get; set; } /// /// 部门代码 /// diff --git a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Requests/UnplannedIssueRequests/UnplannedIssueRequestForDongyangAppService.cs b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Requests/UnplannedIssueRequests/UnplannedIssueRequestForDongyangAppService.cs index ca0aba253..3badc8e3a 100644 --- a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Requests/UnplannedIssueRequests/UnplannedIssueRequestForDongyangAppService.cs +++ b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Requests/UnplannedIssueRequests/UnplannedIssueRequestForDongyangAppService.cs @@ -225,7 +225,7 @@ public class UnplannedIssueRequestForDongyangAppService : UnplannedIssueRequestA request.DeptCode = first.DeptCode; request.DeptName = first.DeptName; request.BuildDate= DateTime.Now; - + request.OANumber=first.OANumber; await SetEntityPropertiesAsync(request).ConfigureAwait(false); List detailList = new List(); From 150c4f60b62c46556d4f614256977df80ca7f2a1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=AD=A6=20=E8=B5=B5?= <89237069@qq.com> Date: Fri, 18 Oct 2024 08:50:47 +0800 Subject: [PATCH 16/17] =?UTF-8?q?=E6=9B=B4=E6=96=B0=E7=89=88=E6=9C=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../UnplannedIssueRequestForDongyangAppService.cs | 3 --- 1 file changed, 3 deletions(-) diff --git a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Requests/UnplannedIssueRequests/UnplannedIssueRequestForDongyangAppService.cs b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Requests/UnplannedIssueRequests/UnplannedIssueRequestForDongyangAppService.cs index 3badc8e3a..57ba9a83a 100644 --- a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Requests/UnplannedIssueRequests/UnplannedIssueRequestForDongyangAppService.cs +++ b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Requests/UnplannedIssueRequests/UnplannedIssueRequestForDongyangAppService.cs @@ -236,13 +236,10 @@ public class UnplannedIssueRequestForDongyangAppService : UnplannedIssueRequestA detail.Qty = itm.Qty; detail.LocationErpCode = itm.LocationErpCode; - detail.LocationCode = "Random"; detail.WarehouseCode ="Random"; detail.LocationGroup ="Random"; detail.LocationArea = "Random"; - - detail.CaseCode = first.CaseCode; detail.ProjCapacityCode = first.ProjCapacityCode; detail.OnceBusiCode = first.OnceBusiCode; From 53bd7d6b5a6c1e43904811103878d5af908948a2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=AD=A6=20=E8=B5=B5?= <89237069@qq.com> Date: Fri, 18 Oct 2024 09:05:49 +0800 Subject: [PATCH 17/17] =?UTF-8?q?=E6=9B=B4=E6=96=B0=E7=89=88=E6=9C=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...lannedIssueRequestForDongyangAppService.cs | 19 ++++++++++++++----- 1 file changed, 14 insertions(+), 5 deletions(-) diff --git a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Requests/UnplannedIssueRequests/UnplannedIssueRequestForDongyangAppService.cs b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Requests/UnplannedIssueRequests/UnplannedIssueRequestForDongyangAppService.cs index 57ba9a83a..2698cbfd3 100644 --- a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Requests/UnplannedIssueRequests/UnplannedIssueRequestForDongyangAppService.cs +++ b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Requests/UnplannedIssueRequests/UnplannedIssueRequestForDongyangAppService.cs @@ -9,6 +9,7 @@ using Microsoft.AspNetCore.Mvc; using Microsoft.EntityFrameworkCore; using Microsoft.Extensions.Logging; using Omu.ValueInjecter; +using Org.BouncyCastle.Asn1.Ocsp; using Volo.Abp; using Volo.Abp.Data; using Volo.Abp.Domain.Entities; @@ -484,11 +485,19 @@ public class UnplannedIssueRequestForDongyangAppService : UnplannedIssueRequestA Check.NotNull(tranType, "事务类型", "事务类型不存在"); - entity.AutoCompleteJob = tranType.AutoCompleteJob; - entity.AutoSubmit = tranType.AutoSubmitRequest; - entity.AutoAgree = tranType.AutoAgreeRequest; - entity.AutoHandle = tranType.AutoHandleRequest; - entity.DirectCreateNote = tranType.DirectCreateNote; + entity.AutoCompleteJob = false; + entity.AutoSubmit = true; + entity.AutoAgree = false; + entity.AutoHandle = false; + entity.DirectCreateNote = false; + + + + //entity.AutoCompleteJob = tranType.AutoCompleteJob; + //entity.AutoSubmit = tranType.AutoSubmitRequest; + //entity.AutoAgree = tranType.AutoAgreeRequest; + //entity.AutoHandle = tranType.AutoHandleRequest; + //entity.DirectCreateNote = tranType.DirectCreateNote; }