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 fdb297d77..9eeb6fd15 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 @@ -37,4 +37,134 @@ public class UnplannedIssueJobAppService await _unplannedIssueJobManager.CancelAsync(entity).ConfigureAwait(false); } } + + ///// + ///// 根据储位推荐 + ///// + ///// + //[HttpPost("create-by-recommend")] + //public async Task CreateByRecommendAsync(UnplannedReceiptRequestDTO requestDto) + //{ + // List useBalancesOut = new EditableList(); + // var jobs = await BuildUnplannedIssueJobAsync(requestDto, useBalancesOut).ConfigureAwait(false); + // await _repository.InsertManyAsync(jobs).ConfigureAwait(false); + // var outEditInputs = await BuildExpectOutAsync(useBalancesOut).ConfigureAwait(false); + // await _expectOutAppService.AddManyAsync(outEditInputs).ConfigureAwait(false); + //} + + //private async Task> BuildUnplannedIssueJobAsync(UnplannedReceiptRequestDTO requestDto, List useBalancesOut) + //{ + // List jobs = new EditableList(); + + // foreach (var requestDtoDetail in requestDto.Details) + // { + // var locationCodes = await _locationAppService.GetListByErpLocationCodes(new StringList(requestDtoDetail.ErpLocationCode)).ConfigureAwait(false); + // var input = new RecommendBalanceRequestInput + // { + // ItemCode = requestDtoDetail.ItemCode, + // Qty = requestDtoDetail.Qty, + // Statuses = new EditableList { EnumInventoryStatus.OK }, + // Locations = locationCodes.Select(p => p.Code).ToList(), + // 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; + // //实际要用库存 + // List useBalances = new List(); + // foreach (var balanceDto in usableList) + // { + // if (qty >= requestDtoDetail.Qty) + // { + // break; + // } + + // if (qty + balanceDto.Qty > requestDtoDetail.Qty) + // { + // qty += requestDtoDetail.Qty - balanceDto.Qty; + // } + // else + // { + // qty += balanceDto.Qty; + // } + + // useBalances.Add(balanceDto); + // useBalancesOut.Add(balanceDto); + // } + + // foreach (var balanceDtoGroup in useBalances.GroupBy(p => p.LocationCode)) + // { + // var locationDto = await _locationAppService.GetByCodeAsync(balanceDtoGroup.Key).ConfigureAwait(false); + // var job = new UnplannedReceiptJob(); + + // job.UnplannedReceiptRequestNumber = requestDto.Number; + // job.JobType = EnumJobType.UnplannedReceiptJob; + // job.JobStatus = EnumJobStatus.Open; + // job.IsAutoComplete = false; + // job.OANumber = requestDto.OANumber; + // job.Details = new List(); + // job.WarehouseCode = balanceDtoGroup.First().WarehouseCode; + + // foreach (var balanceDto in balanceDtoGroup) + // { + // var jobDetail = new UnplannedReceiptJobDetail(); + // 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.RecommendToLocationArea = balanceDto.LocationArea; + // jobDetail.RecommendToLocationCode = balanceDto.LocationCode; + // jobDetail.RecommendToLocationErpCode = balanceDto.LocationErpCode; + // jobDetail.RecommendToLocationGroup = balanceDto.LocationGroup; + // jobDetail.RecommendToWarehouseCode = balanceDto.WarehouseCode; + + // job.Details.Add(jobDetail); + // } + + // if (locationDto.Type == EnumLocationType.DimensionalStorehouse)//如果是立库的 + // { + // await SendDimensionalStorehouseAsync().ConfigureAwait(false); + // job.JobStatus = EnumJobStatus.Wait; + // } + + // jobs.Add(job); + // } + // } + + // return jobs; + //} + + //private async Task> BuildExpectOutAsync(List balanceDtos) + //{ + // return ObjectMapper.Map, List>(balanceDtos); + //} + + ///// + ///// 给立体库发送 + ///// + ///// + //public async Task SendDimensionalStorehouseAsync() + //{ + // throw new System.NotImplementedException(); + //} } 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 71b152d7b..10b775088 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 @@ -2,9 +2,11 @@ using System.Collections.Generic; using System.Threading.Tasks; using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Mvc; +using Volo.Abp; using Volo.Abp.Domain.Entities; using Volo.Abp.ObjectMapping; using Win_in.Sfs.Shared.Domain.Shared; +using Win_in.Sfs.Shared.Domain.Shared.Enums.Store; using Win_in.Sfs.Wms.Store.Application.Contracts; using Win_in.Sfs.Wms.Store.Domain; using Win_in.Sfs.Wms.Store.Domain.Shared; @@ -63,116 +65,60 @@ public class UnplannedReceiptJobAppService } /// - /// 根据储位推荐 + /// 根据储位任意退料 /// /// - [HttpPost("create-by-recommend")] - public async Task CreateByRecommendAsync(UnplannedReceiptRequestDTO requestDto) + [HttpPost("create-by-free")] + public async Task CreateByFreeAsync(UnplannedReceiptRequestDTO requestDto) { - List useBalancesOut = new EditableList(); - var jobs=await BuildUnplannedIssueJobAsync(requestDto, useBalancesOut).ConfigureAwait(false); + var jobs=await BuildUnplannedIssueJobAsync(requestDto).ConfigureAwait(false); await _repository.InsertManyAsync(jobs).ConfigureAwait(false); - var outEditInputs=await BuildExpectOutAsync(useBalancesOut).ConfigureAwait(false); - await _expectOutAppService.AddManyAsync(outEditInputs).ConfigureAwait(false); } - private async Task> BuildUnplannedIssueJobAsync(UnplannedReceiptRequestDTO requestDto, List useBalancesOut) + private async Task> BuildUnplannedIssueJobAsync(UnplannedReceiptRequestDTO requestDto) { List jobs = new EditableList(); foreach (var requestDtoDetail in requestDto.Details) { - var locationCodes=await _locationAppService.GetListByErpLocationCodes(new StringList(requestDtoDetail.ErpLocationCode)).ConfigureAwait(false); - var input = new RecommendBalanceRequestInput - { - ItemCode = requestDtoDetail.ItemCode, - Qty = requestDtoDetail.Qty, - Statuses = new EditableList { EnumInventoryStatus.OK }, - Locations = locationCodes.Select(p=>p.Code).ToList(), - 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; - //实际要用库存 - List useBalances = new List(); - foreach (var balanceDto in usableList) + var locationDtos = await _locationAppService.GetListByErpLocationCodes(new List{ requestDtoDetail.ErpLocationCode }).ConfigureAwait(false); + var job = new UnplannedReceiptJob(); + + job.UnplannedReceiptRequestNumber = requestDto.Number; + job.JobType = EnumJobType.UnplannedReceiptJob; + job.JobStatus = EnumJobStatus.Open; + job.IsAutoComplete = false; + job.OANumber = requestDto.OANumber; + job.Details = new List(); + job.WarehouseCode = requestDtoDetail.WarehouseCode; + switch (locationDtos.First().Type) { - if (qty >= requestDtoDetail.Qty) - { + case EnumLocationType.RAW: + job.UnplannedReceiptType = EnumUnplannedReceiptType.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.UnplannedReceiptType = EnumUnplannedReceiptType.Wip; break; - } - - if (qty + balanceDto.Qty > requestDtoDetail.Qty) - { - qty += requestDtoDetail.Qty - balanceDto.Qty; - } - else - { - qty += balanceDto.Qty; - } - - useBalances.Add(balanceDto); - useBalancesOut.Add(balanceDto); } - foreach (var balanceDtoGroup in useBalances.GroupBy(p=>p.LocationCode)) - { - var locationDto=await _locationAppService.GetByCodeAsync(balanceDtoGroup.Key).ConfigureAwait(false); - var job = new UnplannedReceiptJob(); - - job.UnplannedReceiptRequestNumber = requestDto.Number; - job.JobType = EnumJobType.UnplannedReceiptJob; - job.JobStatus = EnumJobStatus.Open; - job.IsAutoComplete = false; - job.OANumber = requestDto.OANumber; - job.Details = new List(); - job.WarehouseCode = balanceDtoGroup.First().WarehouseCode; - - foreach (var balanceDto in balanceDtoGroup) - { - var jobDetail = new UnplannedReceiptJobDetail(); - 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.RecommendToLocationArea = balanceDto.LocationArea; - jobDetail.RecommendToLocationCode = balanceDto.LocationCode; - jobDetail.RecommendToLocationErpCode = balanceDto.LocationErpCode; - jobDetail.RecommendToLocationGroup = balanceDto.LocationGroup; - jobDetail.RecommendToWarehouseCode = balanceDto.WarehouseCode; - - job.Details.Add(jobDetail); - } - - if (locationDto.Type==EnumLocationType.DimensionalStorehouse)//如果是立库的 - { - await SendDimensionalStorehouseAsync().ConfigureAwait(false); - job.JobStatus = EnumJobStatus.Wait; - } - - jobs.Add(job); - } + var jobDetail = new UnplannedReceiptJobDetail(); + 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; + job.Details.Add(jobDetail); } return jobs;