diff --git a/be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.Fawtyg.TyrpAgent/Properties/PublishProfiles/ClickOnceProfile.pubxml b/be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.Fawtyg.TyrpAgent/Properties/PublishProfiles/ClickOnceProfile.pubxml new file mode 100644 index 000000000..621261801 --- /dev/null +++ b/be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.Fawtyg.TyrpAgent/Properties/PublishProfiles/ClickOnceProfile.pubxml @@ -0,0 +1,41 @@ + + + + + 0 + 1.0.0.* + True + Release + False + true + True + Disk + True + False + True + False + Any CPU + bin\Release\net6.0\app.publish\ + bin\publish\ + ClickOnce + False + False + False + (无) + False + false + net6.0 + False + Foreground + False + Publish.html + + + + True + .NET 运行时 6.0.31 (x64) + + + \ No newline at end of file diff --git a/be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.Fawtyg.TyrpAgent/Properties/PublishProfiles/FolderProfile.pubxml b/be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.Fawtyg.TyrpAgent/Properties/PublishProfiles/FolderProfile.pubxml new file mode 100644 index 000000000..154e03532 --- /dev/null +++ b/be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.Fawtyg.TyrpAgent/Properties/PublishProfiles/FolderProfile.pubxml @@ -0,0 +1,13 @@ + + + + + Release + Any CPU + bin\Release\net6.0\publish\ + FileSystem + <_TargetId>Folder + + \ No newline at end of file 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 f684d06a8..79907054d 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 @@ -42,7 +42,8 @@ public class UnplannedIssueJobAppService IUnplannedIssueJobRepository repository, IUnplannedIssueJobManager unplannedIssueJobManager, ILocationAppService locationAppService, IBalanceAppService balanceAppService, IExpectOutAppService expectOutAppService, - IUnitOfWorkManager unitOfWorkManager, ILogger logger, IItemBasicAppService itemBasicAppService) : base(repository, unplannedIssueJobManager) + IUnitOfWorkManager unitOfWorkManager, ILogger logger, + IItemBasicAppService itemBasicAppService) : base(repository, unplannedIssueJobManager) { _unplannedIssueJobManager = unplannedIssueJobManager; _locationAppService = locationAppService; @@ -84,41 +85,15 @@ public class UnplannedIssueJobAppService { List useBalancesOut = new EditableList(); var jobs = await BuildUnplannedIssueJobAsync(requestDto, useBalancesOut).ConfigureAwait(false); - //if (useBalancesOut.Count == 0) - //{ - // throw new UserFriendlyException($"请求单号{requestDto.Number},无推荐库位请检查是否又库存!"); - //} + foreach (var job in jobs) { job.SetIdAndNumberWithDetails(GuidGenerator, job.Number); - //await SendNotifyMessageAsync(job).ConfigureAwait(false); } - //await PublishCreatedAsync(jobs).ConfigureAwait(false); await Repository.InsertManyAsync(jobs).ConfigureAwait(false); - - //await _unplannedIssueJobManager.AddManyAsync(jobs).ConfigureAwait(false); - //await _repository.InsertManyAsync(jobs.ToList()).ConfigureAwait(false); - - var outEditInputs = await BuildExpectOutAsync(useBalancesOut).ConfigureAwait(false); - //foreach (var itm in outEditInputs) - //{ - // itm.JobNumber = first.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 async Task, List>> DeductInventory(List inventory, decimal quantityToDeduct, EnumLocationType enumLocationType) { @@ -142,7 +117,7 @@ public class UnplannedIssueJobAppService if (enumLocationType == EnumLocationType.RAW) { undto.InjectFrom(item); - + undto.Qty = item.Qty; unbalanceDTOs.Add(undto); } @@ -161,7 +136,7 @@ public class UnplannedIssueJobAppService } } - var tuple = new Tuple, List>(balanceDTOs, unbalanceDTOs);//ITEM1整箱、 + var tuple = new Tuple, List>(balanceDTOs, unbalanceDTOs); //ITEM1整箱、 // 返回实际扣减的库存数量 @@ -173,120 +148,141 @@ public class UnplannedIssueJobAppService List useBalancesOut) { List jobs = new EditableList(); - var Errors = new List(); foreach (var requestDtoDetail in requestDto.Details) //非计划领料明细 { var locationCodes = await _locationAppService .GetListByErpLocationCodes(new StringList(requestDtoDetail.LocationErpCode)) .ConfigureAwait(false); //获取存放库位 + var locationDto = locationCodes.First(); if (locationCodes.Count == 0) { throw new UserFriendlyException("ERP库位没有对应WMS库位!"); } - var first = locationCodes.FirstOrDefault(); - var locationDto = await _locationAppService.GetByCodeAsync(first.Code).ConfigureAwait(false); - var input = new RecommendBalanceRequestInput(); + var job = new UnplannedIssueJob(); + switch (locationDto.Type) + { + case EnumLocationType.SEMI: + job.IsHasPackingCode = 0; + job.UnplannedIssueType = EnumUnplannedIssueType.Raw; + break; + case EnumLocationType.CUST: + job.IsHasPackingCode = 0; + job.UnplannedIssueType = EnumUnplannedIssueType.Raw; + break; + case EnumLocationType.FG: + job.IsHasPackingCode = 0; + job.UnplannedIssueType = EnumUnplannedIssueType.Raw; + break; + case EnumLocationType.RAW: + job.IsHasPackingCode = 1; + job.UnplannedIssueType = EnumUnplannedIssueType.Raw; + break; + case EnumLocationType.THIRDPARTY: + job.IsHasPackingCode = 0; + job.UnplannedIssueType = EnumUnplannedIssueType.Raw; + break; + case EnumLocationType.OUTSIDE: + job.IsHasPackingCode = 0; + job.UnplannedIssueType = EnumUnplannedIssueType.Raw; + break; + case EnumLocationType.DimensionalStorehouse: + job.UnplannedIssueType = EnumUnplannedIssueType.Raw; + job.IsHasPackingCode = 0; + break; + case EnumLocationType.KittingWip: + job.IsHasPackingCode = 0; + job.UnplannedIssueType = EnumUnplannedIssueType.Wip; + break; + case EnumLocationType.WIP: + job.IsHasPackingCode = 0; + job.UnplannedIssueType = EnumUnplannedIssueType.Wip; + break; + } + + job.ItemCode = requestDtoDetail.ItemCode; + job.ItemName = requestDtoDetail.ItemName; + job.ItemDesc1 = requestDtoDetail.ItemDesc1; + job.ItemDesc2 = requestDtoDetail.ItemDesc2; + job.FromErpLocationCode = requestDtoDetail.LocationErpCode; + job.Qty = requestDtoDetail.Qty; + job.SetId(GuidGenerator.Create()); + job.UnplannedIssueRequestNumber = requestDto.Number; + job.JobType = EnumJobType.UnplannedIssueJob; + job.JobStatus = EnumJobStatus.Open; + job.IsAutoComplete = false; + job.DeptCode = requestDto.DeptCode; + job.DeptName = requestDto.DeptName; + job.Worker = "未执行"; + job.OANumber = requestDto.OANumber; + job.Number = await _unplannedIssueJobManager.GetNumber().ConfigureAwait(true); + job.Details = new List(); + job.FacDetails = new List(); + job.WarehouseCode = locationDto.WarehouseCode; + job.BuildDate = DateTime.Now; + + var input = new RecommendBalanceRequestInput + { + ItemCode = requestDtoDetail.ItemCode, + Qty = requestDtoDetail.Qty, + Statuses = new EditableList { EnumInventoryStatus.OK }, + Locations = locationCodes.Select(p => p.Code).ToList() + }; switch (locationDto.Type) { case EnumLocationType.RAW: - input = new RecommendBalanceRequestInput - { - ItemCode = requestDtoDetail.ItemCode, - Qty = requestDtoDetail.Qty, - Statuses = new EditableList { EnumInventoryStatus.OK }, - Locations = locationCodes.Select(p => p.Code).ToList(), - IsPackingCode = true - }; + input.IsPackingCode = true; + job.IsHasPackingCode = 1; + job.UnplannedIssueType = EnumUnplannedIssueType.Raw; break; case EnumLocationType.FG: - input = new RecommendBalanceRequestInput - { - ItemCode = requestDtoDetail.ItemCode, - Qty = requestDtoDetail.Qty, - Statuses = new EditableList { EnumInventoryStatus.OK }, - Locations = locationCodes.Select(p => p.Code).ToList(), - IsPackingCode = false - }; + input.IsPackingCode = false; + job.IsHasPackingCode = 0; + job.UnplannedIssueType = EnumUnplannedIssueType.Raw; break; case EnumLocationType.DimensionalStorehouse: - input = new RecommendBalanceRequestInput - { - ItemCode = requestDtoDetail.ItemCode, - Qty = requestDtoDetail.Qty, - Statuses = new EditableList { EnumInventoryStatus.OK }, - Locations = locationCodes.Select(p => p.Code).ToList(), - IsPackingCode = false - }; + input.IsPackingCode = false; + job.IsHasPackingCode = 0; + job.UnplannedIssueType = EnumUnplannedIssueType.Wip; break; case EnumLocationType.CUST: - input = new RecommendBalanceRequestInput - { - ItemCode = requestDtoDetail.ItemCode, - Qty = requestDtoDetail.Qty, - Statuses = new EditableList { EnumInventoryStatus.OK }, - Locations = locationCodes.Select(p => p.Code).ToList(), - IsPackingCode = false - }; + input.IsPackingCode = false; + job.IsHasPackingCode = 0; + job.UnplannedIssueType = EnumUnplannedIssueType.Raw; break; case EnumLocationType.KittingWip: - input = new RecommendBalanceRequestInput - { - ItemCode = requestDtoDetail.ItemCode, - Qty = requestDtoDetail.Qty, - Statuses = new EditableList { EnumInventoryStatus.OK }, - Locations = locationCodes.Select(p => p.Code).ToList(), - IsPackingCode = false - }; + input.IsPackingCode = false; + job.IsHasPackingCode = 0; + job.UnplannedIssueType = EnumUnplannedIssueType.Wip; break; case EnumLocationType.OUTSIDE: - input = new RecommendBalanceRequestInput - { - ItemCode = requestDtoDetail.ItemCode, - Qty = requestDtoDetail.Qty, - Statuses = new EditableList { EnumInventoryStatus.OK }, - Locations = locationCodes.Select(p => p.Code).ToList(), - IsPackingCode = false - }; + input.IsPackingCode = false; + job.IsHasPackingCode = 0; + job.UnplannedIssueType = EnumUnplannedIssueType.Raw; break; case EnumLocationType.SEMI: - input = new RecommendBalanceRequestInput - { - ItemCode = requestDtoDetail.ItemCode, - Qty = requestDtoDetail.Qty, - Statuses = new EditableList { EnumInventoryStatus.OK }, - Locations = locationCodes.Select(p => p.Code).ToList(), - IsPackingCode = false - }; + input.IsPackingCode = false; + job.IsHasPackingCode = 0; + job.UnplannedIssueType = EnumUnplannedIssueType.Wip; break; case EnumLocationType.WIP: - input = new RecommendBalanceRequestInput - { - ItemCode = requestDtoDetail.ItemCode, - Qty = requestDtoDetail.Qty, - Statuses = new EditableList { EnumInventoryStatus.OK }, - Locations = locationCodes.Select(p => p.Code).ToList(), - IsPackingCode = false - }; + input.IsPackingCode = false; + job.IsHasPackingCode = 0; + job.UnplannedIssueType = EnumUnplannedIssueType.Wip; break; case EnumLocationType.THIRDPARTY: - input = new RecommendBalanceRequestInput - { - ItemCode = requestDtoDetail.ItemCode, - Qty = requestDtoDetail.Qty, - Statuses = new EditableList { EnumInventoryStatus.OK }, - Locations = locationCodes.Select(p => p.Code).ToList(), - IsPackingCode = false - }; + input.IsPackingCode = false; + job.IsHasPackingCode = 0; + job.UnplannedIssueType = EnumUnplannedIssueType.Raw; break; } var usableList = await _balanceAppService.GetUsableListAsync(input).ConfigureAwait(false); //获取推荐库存 - + usableList = usableList .OrderBy(p => p.Lot) .ThenBy(p => p.PutInTime) @@ -296,114 +292,17 @@ public class UnplannedIssueJobAppService .ToList(); var usableList1 = usableList.Where(p => p.Qty > 0).ToList(); - decimal qty = 0; //实际要用库存 var useBalances = new List(); var returnlist = await DeductInventory(usableList1, requestDtoDetail.Qty, locationDto.Type) .ConfigureAwait(false); useBalances.AddRange(returnlist.Item1); - - - //foreach (var balanceDto in usableList) - //{ - // decimal availableToDeduct = Math.Min(balanceDto.Qty, balanceDto.Qty - qty); - // balanceDto.Qty -= availableToDeduct; - // qty += availableToDeduct; - // if (qty >= balanceDto.Qty) - // break; - // if (qty >= requestDtoDetail.Qty) - // { - // break; - // } - // if (qty + balanceDto.Qty > requestDtoDetail.Qty) - // { - // qty += requestDtoDetail.Qty - balanceDto.Qty; - // } - // else - // { - // qty += balanceDto.Qty; - // } - // if (qty > 0) - // { - // useBalances.Add(balanceDto); - // useBalancesOut.Add(balanceDto); - // } - //} - if (returnlist.Item1.Count == 0) - { - _logger.LogError( - $"{"非生产领料" + requestDto.Number + "零件号:" + requestDtoDetail.ItemCode + "库存不够" + requestDtoDetail.Qty}"); - // Errors.Add($"{"非生产领料"+requestDto.Number+"零件号:"+requestDtoDetail.ItemCode + "库存不够" + requestDtoDetail.Qty.ToString()}"); - } if (useBalances.Count > 0) { foreach (var balanceDtoGroup in useBalances.GroupBy(p => p.LocationErpCode)) { - //var locationDto = await _locationAppService.GetByCodeAsync(balanceDtoGroup.Key).ConfigureAwait(false); - var job = new UnplannedIssueJob(); - - - switch (locationDto.Type) - { - case EnumLocationType.CUST: - job.IsHasPackingCode = 0; - job.UnplannedIssueType = EnumUnplannedIssueType.Raw; - break; - case EnumLocationType.FG: - job.IsHasPackingCode = 0; - job.UnplannedIssueType = EnumUnplannedIssueType.Raw; - break; - case EnumLocationType.RAW: - job.IsHasPackingCode = 1; - job.UnplannedIssueType = EnumUnplannedIssueType.Raw; - break; - case EnumLocationType.THIRDPARTY: - job.IsHasPackingCode = 0; - job.UnplannedIssueType = EnumUnplannedIssueType.Raw; - break; - case EnumLocationType.OUTSIDE: - job.IsHasPackingCode = 0; - job.UnplannedIssueType = EnumUnplannedIssueType.Raw; - break; - //------------------ - case EnumLocationType.KittingWip: - job.IsHasPackingCode = 0; - job.UnplannedIssueType = EnumUnplannedIssueType.Wip; - break; - case EnumLocationType.WIP: - job.IsHasPackingCode = 0; - job.UnplannedIssueType = EnumUnplannedIssueType.Wip; - break; - case EnumLocationType.SEMI: - job.IsHasPackingCode = 0; - job.UnplannedIssueType = EnumUnplannedIssueType.Wip; - break; - case EnumLocationType.DimensionalStorehouse: - job.UnplannedIssueType = EnumUnplannedIssueType.Wip; - job.IsHasPackingCode = 0; - break; - } - - job.ItemCode = requestDtoDetail.ItemCode; - job.ItemName = requestDtoDetail.ItemName; - job.ItemDesc1 = requestDtoDetail.ItemDesc1; - job.ItemDesc2 = requestDtoDetail.ItemDesc2; - job.FromErpLocationCode = requestDtoDetail.LocationErpCode; - job.Qty = requestDtoDetail.Qty; - - - job.SetId(GuidGenerator.Create()); - job.UnplannedIssueRequestNumber = requestDto.Number; - job.JobType = EnumJobType.UnplannedIssueJob; - job.JobStatus = EnumJobStatus.Open; - job.IsAutoComplete = false; - job.DeptCode = requestDto.DeptCode; - job.DeptName = requestDto.DeptName; - job.Worker = "未执行"; - job.OANumber = requestDto.OANumber; - job.Number = await _unplannedIssueJobManager.GetNumber().ConfigureAwait(true); job.Details = new List(); job.FacDetails = new List(); job.WarehouseCode = balanceDtoGroup.First().WarehouseCode; @@ -460,7 +359,6 @@ public class UnplannedIssueJobAppService jobfacDetail.Status = balanceDto.Status; jobfacDetail.HandledQty = balanceDto.Qty; jobfacDetail.Uom = balanceDto.Uom; - //job.Details.Add(jobDetail); job.FacDetails.Add(jobfacDetail); } @@ -478,99 +376,33 @@ public class UnplannedIssueJobAppService itm.Remark = job.Number; useBalancesOut.Add(itm); } - //useBalancesOut.AddRange(returnlist.Item2); } } - else - { - var job = new UnplannedIssueJob(); - switch (locationDto.Type) - { - case EnumLocationType.SEMI: - job.IsHasPackingCode = 0; - job.UnplannedIssueType = EnumUnplannedIssueType.Raw; - break; - case EnumLocationType.CUST: - job.IsHasPackingCode = 0; - job.UnplannedIssueType = EnumUnplannedIssueType.Raw; - break; - case EnumLocationType.FG: - job.IsHasPackingCode = 0; - job.UnplannedIssueType = EnumUnplannedIssueType.Raw; - break; - case EnumLocationType.RAW: - job.IsHasPackingCode = 1; - job.UnplannedIssueType = EnumUnplannedIssueType.Raw; - break; - case EnumLocationType.THIRDPARTY: - job.IsHasPackingCode = 0; - job.UnplannedIssueType = EnumUnplannedIssueType.Raw; - break; - case EnumLocationType.OUTSIDE: - job.IsHasPackingCode = 0; - job.UnplannedIssueType = EnumUnplannedIssueType.Raw; - break; - case EnumLocationType.DimensionalStorehouse: - job.UnplannedIssueType = EnumUnplannedIssueType.Raw; - job.IsHasPackingCode = 0; - break; - case EnumLocationType.KittingWip: - job.IsHasPackingCode = 0; - job.UnplannedIssueType = EnumUnplannedIssueType.Wip; - break; - case EnumLocationType.WIP: - job.IsHasPackingCode = 0; - job.UnplannedIssueType = EnumUnplannedIssueType.Wip; - break; - } + var outEditInputs = await BuildExpectOutAsync(useBalances, job.Number).ConfigureAwait(false); + await _expectOutAppService.AddManyAsync(outEditInputs).ConfigureAwait(false); - job.ItemCode = requestDtoDetail.ItemCode; - job.ItemName = requestDtoDetail.ItemName; - job.ItemDesc1 = requestDtoDetail.ItemDesc1; - job.ItemDesc2 = requestDtoDetail.ItemDesc2; - job.FromErpLocationCode = requestDtoDetail.LocationErpCode; - job.Qty = requestDtoDetail.Qty; - - - job.SetId(GuidGenerator.Create()); - job.UnplannedIssueRequestNumber = requestDto.Number; - 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(); - job.FacDetails = new List(); - job.WarehouseCode = locationDto.WarehouseCode; - job.BuildDate = DateTime.Now; - - jobs.Add(job); - } + jobs.Add(job); } - //if (Errors.Count > 0) - //{ - // foreach (var itm in Errors) - // { - // _logger.LogError(itm); - // } - //} return jobs; } - private async Task> BuildExpectOutAsync(List balanceDtos) + private async Task> BuildExpectOutAsync(List balanceDtos, string jobNumber) { - var lst = ObjectMapper.Map, List>(balanceDtos); - foreach (var itm in lst) + var list = ObjectMapper.Map, List>(balanceDtos); + foreach (var outEditInput in list) { - itm.JobNumber = itm.Remark; + outEditInput.JobNumber = jobNumber; + if (!string.IsNullOrEmpty(outEditInput.PackingCode)) + { + var balanceDto = await _balanceAppService.GetByPackingCodeAsync(outEditInput.PackingCode) + .ConfigureAwait(false); + outEditInput.Qty = balanceDto.Qty; + } } - return lst; + return list; } /// @@ -582,42 +414,6 @@ public class UnplannedIssueJobAppService throw new NotImplementedException(); } - /// - /// 创建补料记录实体 - /// - /// - /// - private async Task BuildUnplannedIssueNoteAsync(UnplannedIssueJob unplannedIssueJobDto) - { - if (!unplannedIssueJobDto.Details.Any()) - { - return new UnplannedIssueNoteEditInput(); - } - - //var createInput = - // ObjectMapper.Map(unplannedIssueJobDto); - var issuenote = new UnplannedIssueNoteEditInput(); - - issuenote.DeptCode = unplannedIssueJobDto.DeptCode; - issuenote.DeptName = unplannedIssueJobDto.DeptName; - issuenote.BuildDate = unplannedIssueJobDto.BuildDate; - issuenote.UnplannedIssueRequestNumber = unplannedIssueJobDto.UnplannedIssueRequestNumber; - issuenote.JobNumber = unplannedIssueJobDto.Number; - issuenote.UnplannedIssueType = issuenote.UnplannedIssueType; - issuenote.OANumber = issuenote.OANumber; - issuenote.Details = new List(); - foreach (var detail in unplannedIssueJobDto.FacDetails) - { - var entity = new UnplannedIssueNoteDetailInput(); - entity.InjectFrom(detail); - entity.Qty = detail.HandledQty; - issuenote.Details.Add(entity); - } - - await Task.CompletedTask.ConfigureAwait(false); - return issuenote; - } - /// /// 根据申请单号判断下面的任务是否都是完成或取消 /// @@ -643,16 +439,13 @@ public class UnplannedIssueJobAppService { var job = await _repository.GetAsync(id).ConfigureAwait(false); //var facQuery=job.FacDetails.GroupBy(p => new { p.ItemCode }).Select(p=>new {ItemCode= p.Key.ItemCode,Qty= p.Sum(itm=>itm.RecommendQty) }); - - if (dto.Details.Count > 0) { - var query = dto.Details.GroupBy(p => new { p.ItemCode }) - .Select(p => new { p.Key.ItemCode, Qty = p.Sum(itm => itm.HandledQty) }); - + .Select(p => new { p.Key.ItemCode, Qty = p.Sum(itm => itm.HandledQty) }); + var sumQty = query.FirstOrDefault().Qty; if (job.Qty < sumQty) @@ -661,14 +454,11 @@ public class UnplannedIssueJobAppService } - - - if (dto.FacDetails.Count == 0) { var locationCodes = await _locationAppService - .GetListByErpLocationCodes(new StringList(job.FromErpLocationCode)) - .ConfigureAwait(false); //获取存放库位 + .GetListByErpLocationCodes(new StringList(job.FromErpLocationCode)) + .ConfigureAwait(false); //获取存放库位 if (locationCodes.Count == 0) { @@ -784,38 +574,22 @@ public class UnplannedIssueJobAppService .ThenBy(p => p.PackingCode) .ToList(); - var avbQty= usableList.Sum(p => p.Qty); + var avbQty = usableList.Sum(p => p.Qty); if (usableList.Count == 0) { throw new UserFriendlyException("库存数量不够!"); } - else + + if (avbQty < sumQty) { - if (avbQty < sumQty) - { - throw new UserFriendlyException("库存数量不够!"); - } + throw new UserFriendlyException("库存数量不够!"); } - - - - - } - - - - - } - - - - var handleDto = new UnplannedIssueJobDTO(); //using (var uow = _unitOfWorkManager.Begin()) //{ @@ -830,9 +604,10 @@ public class UnplannedIssueJobAppService var handleEntity = ObjectMapper.Map(dto); foreach (var detail in dto.Details) { - var itemBasicDto=await _itemBasicAppService.GetByCodeAsync(detail.ItemCode).ConfigureAwait(false); + var itemBasicDto = await _itemBasicAppService.GetByCodeAsync(detail.ItemCode).ConfigureAwait(false); detail.Uom = itemBasicDto.BasicUom; } + var handleResult = await _unplannedIssueJobManager.CompleteAsync(handleEntity, CurrentUser).ConfigureAwait(false); handleDto = ObjectMapper.Map(handleResult); 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 d11629674..ead1f79bb 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 @@ -98,113 +98,7 @@ public class UnplannedIssueRequestForDongyangAppService : UnplannedIssueRequestA var dto = ObjectMapper.Map(entity); return dto; } - /// - /// 自定义导入接口 - /// - /// - /// - /// - /// - //[HttpPost("import-dongyang")] - //public async Task ImportDYAsync([FromForm] SfsImportRequestInput requestInput, [Required] IFormFile file) - //{ - // try - // { - // using var ms = new MemoryStream(); - // await file.OpenReadStream().CopyToAsync(ms).ConfigureAwait(false); - // var inputFileBytes = ms.GetAllBytes(); - // var importList = _excelService.Import(inputFileBytes).ToList(); - // await CreateByDYOAsync(importList).ConfigureAwait(false); - // 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.FromLocationErpCode) - - // ) - // { - // 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 JsonResult(new { Code = 200, FileDownloadName = fileContent1.FileDownloadName }); - // } - // catch (Exception e) - // { - // throw new UserFriendlyException(e.Message); - // } - //} - - - //[HttpPost("import")] - //[Consumes("multipart/form-data")] - ////[UnitOfWork] - //public override async Task ImportAsync([FromForm] SfsImportRequestInput requestInput, [Required] IFormFile file) - //{ - // try - // { - // using var ms = new MemoryStream(); - // await file.OpenReadStream().CopyToAsync(ms).ConfigureAwait(false); - // var inputFileBytes = ms.GetAllBytes(); - // var importList = _excelService.Import(inputFileBytes).ToList(); - // await CreateByDYOAsync(importList).ConfigureAwait(false); - // 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.FromErpLocationCode) - - // ) - // { - // 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 JsonResult(new { Code = 200, FileDownloadName = fileContent1.FileDownloadName }); - // } - // catch (Exception e) - // { - // throw new UserFriendlyException(e.Message); - // } - //} - - - - - - - - - - - - - - + private async Task SetEntityPropertiesAsync(UnplannedIssueRequest entity) { var userName = CurrentUser.GetUserName_New(); diff --git a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Event/Requests/UnplannedIssueRequestEventHandler.cs b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Event/Requests/UnplannedIssueRequestEventHandler.cs index aca027384..9aa790c5d 100644 --- a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Event/Requests/UnplannedIssueRequestEventHandler.cs +++ b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Event/Requests/UnplannedIssueRequestEventHandler.cs @@ -1,15 +1,8 @@ using System.Collections.Generic; -using System.Text.Json.Nodes; using System.Threading.Tasks; using Omu.ValueInjecter; -using Volo.Abp.Domain.Entities; using Volo.Abp.EventBus; -using Volo.Abp.ObjectMapping; -using Win_in.Sfs.Shared.Domain.Shared; -using Win_in.Sfs.Shared.Domain.Shared.Enums.Store; using Win_in.Sfs.Shared.Event; -using Win_in.Sfs.Wms.Inventory.Application.Contracts; -using Win_in.Sfs.Wms.Inventory.Domain; using Win_in.Sfs.Wms.Store.Application.Contracts; using Win_in.Sfs.Wms.Store.Domain; using Win_in.Sfs.Wms.Store.Event.Inventories; @@ -46,14 +39,6 @@ public class UnplannedIssueRequestEventHandler public async Task HandleEventAsync(SfsCreatedEntityEventData eventData) { var entity = eventData.Entity; - //if (entity.UnplannedIssueType == EnumUnplannedIssueType.Raw) - //{ - // await AddExpectOutsAsync(entity).ConfigureAwait(false); - //} - //if (entity.AutoSubmit) - //{ - // await _unplannedIssueRequestManager.SubmitAsync(entity).ConfigureAwait(false); - //} } /// @@ -68,186 +53,47 @@ public class UnplannedIssueRequestEventHandler if (entity.AutoSubmit) { await _unplannedIssueRequestManager.SubmitAsync(entity).ConfigureAwait(false); - if(entity.UnplannedIssueType== EnumUnplannedIssueType.Raw) - { - await AddExpectOutsAsync(entity).ConfigureAwait(false); - } } } } /// - /// 执行后 + /// 执行后 /// /// /// public virtual async Task HandleEventAsync(SfsHandledEntityEventData eventData) { var entity = eventData.Entity; - //if (entity.UnplannedIssueType == Shared.Domain.Shared.Enums.Store.EnumUnplannedIssueType.Wip&&!string.IsNullOrEmpty(entity.OANumber)) - //{ - // entity.RequestStatus = EnumRequestStatus.Completed; - //} - //if (entity.DirectCreateNote) - //{ - // var note = await BuildUnplannedIssueNoteCreateInputAsync(entity).ConfigureAwait(false); - // await _unplannedIssueNoteAppService.CreateAsync(note).ConfigureAwait(false); - //} - //else - //{ - //if (entity.UnplannedIssueType == EnumUnplannedIssueType.OA || entity.UnplannedIssueType == EnumUnplannedIssueType.IMPORT) - //{ - //var job = await BuildUnplannedIssueJobCreateInputAsync(entity).ConfigureAwait(false); - var request= new UnplannedIssueRequest(); - request.InjectFrom(entity); + var request = new UnplannedIssueRequest(); + request.InjectFrom(entity); - await _unplannedIssueJobApp.CreateByRecommendAsync(request).ConfigureAwait(false); - //} - //else - //{ - // var job = await BuildUnplannedIssueJobCreateInputAsync(entity).ConfigureAwait(false); - // await _unplannedIssueJobApp.CreateAsync(job).ConfigureAwait(false); - //} - - //} + await _unplannedIssueJobApp.CreateByRecommendAsync(request).ConfigureAwait(false); } + public virtual async Task HandleEventAsync(SfsRefusedEntityEventData eventData) { var entity = eventData.Entity; - if (entity.UnplannedIssueType == EnumUnplannedIssueType.Raw) - { - await ExpectOutAppService.RemoveAsync(entity.Number).ConfigureAwait(false); - } } + /// - /// 中止订阅 + /// 中止订阅 /// /// /// public virtual async Task HandleEventAsync(SfsAbortedEntityEventData eventData) { var entity = eventData.Entity; - // if (entity.UnplannedIssueType == EnumUnplannedIssueType.Raw) - // { - await ExpectOutAppService.RemoveAsync(entity.Number).ConfigureAwait(false); - // } - if (!entity.DirectCreateNote)//作废任务 + + if (!entity.DirectCreateNote) //作废任务 { await _unplannedIssueJobApp.CancelByRequestNumberAsync(entity.Number).ConfigureAwait(false); } } + public virtual async Task HandleEventAsync(SfsCancelledEntityEventData eventData) { var entity = eventData.Entity; - if (entity.UnplannedIssueType == EnumUnplannedIssueType.Raw) - { - await ExpectOutAppService.RemoveAsync(entity.Number).ConfigureAwait(false); - } - } - - - - #region 私有 - private async Task AddExpectOutsAsync(UnplannedIssueRequest entitie) - { - var expectOuts = new List(); - var entityExpectOuts = BuildExpectOutInventoryAsync(entitie); - expectOuts.AddRange(entityExpectOuts); - - await ExpectOutAppService.AddManyAsync(expectOuts).ConfigureAwait(false); - } - - private List BuildExpectOutInventoryAsync(UnplannedIssueRequest request) - { - var inputs = ObjectMapper.Map, List>(request.Details); - foreach (var input in inputs) - { - input.JobNumber = request.Number; - input.Worker = request.Worker; - } - return inputs; - } - private async Task BuildUnplannedIssueNoteCreateInputAsync( - UnplannedIssueRequest entity) - { - await Task.CompletedTask.ConfigureAwait(false); - var createInput = ObjectMapper.Map(entity); - createInput.UnplannedIssueRequestNumber = entity.Number; - createInput.JobNumber = ""; - createInput.ActiveDate = Clock.Now; - - return createInput; - } - - #endregion - - private async Task BuildUnplannedIssueJobCreateInputAsync(UnplannedIssueRequest entity) - { - await Task.CompletedTask.ConfigureAwait(false); - var createInput = ObjectMapper.Map(entity); - - - - - createInput.UnplannedIssueRequestNumber = entity.Number; - createInput.JobType = EnumJobType.UnplannedIssueJob; - createInput.JobStatus = EnumJobStatus.Open; - createInput.IsAutoComplete = entity.AutoCompleteJob; - createInput.Worker = string.IsNullOrEmpty(createInput.Worker)?"导入":createInput.Worker; - - - createInput.Details = new List(); - - foreach (var inputDetail in entity.Details) - { - var detail = ObjectMapper.Map(inputDetail); - - detail.ExtraProperties = inputDetail.ExtraProperties; - detail.HandledLot = string.IsNullOrEmpty(detail.HandledLot) ? "导入" : detail.HandledLot; - detail.RecommendLot = string.IsNullOrEmpty(detail.RecommendLot) ? "导入" : detail.RecommendLot; - createInput.Details.Add(detail); - } - createInput.WarehouseCode = createInput.Details[0].RecommendFromWarehouseCode; - return createInput; - } - - - - /* 改用AutoMapper实现 - private void SetUnplannedIssueJobDetails(UnplannedIssueJobCreateInput createInput, List details) - { - createInput.Details = new List(); - - foreach (var detail in details) - { - var detailInput = new UnplannedIssueJobDetailInput(); - - detailInput.WarehouseCode = detail.WarehouseCode; - detailInput.ItemId = detail.Item.Id; - detailInput.ItemName = detail.Name; - detailInput.ItemDesc1 = detail.Item.Desc1; - detailInput.ItemDesc2 = detail.Item.Desc2; - detailInput.ItemCode = detail.ItemCode; - detailInput.StdPackUom = detail.StdPack.PackUom; - detailInput.StdPackQty = detail.StdPack.PackQty; - detailInput.Status = detail.Status; - detailInput.RecommendContainerCode = detail.ContainerCode; - detailInput.RecommendPackingCode = detail.PackingCode; - detailInput.RecommendSupplierBatch = detail.Batch.SupplierBatch; - detailInput.RecommendArriveDate = detail.Batch.ArriveDate; - detailInput.RecommendProduceDate = detail.Batch.ProduceDate; - detailInput.RecommendExpireDate = detail.Batch.ExpireDate; - detailInput.RecommendLot = detail.Lot; - detailInput.RecommendLocationCode = detail.LocationCode; - detailInput.RecommendAreaCode = detail.Location.Area; - detailInput.RecommendLocationGroup = detail.Location.Group; - detailInput.RecommendErpLocationCode = detail.Location.ErpCode; - detailInput.Uom = detail.Qty.Uom; - detailInput.RecommendQty = detail.Qty; - - createInput.Details.Add(detailInput); - } } - */ }