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; } + + }