From afd91f3037ba298c37ca315889a6b7796c813f75 Mon Sep 17 00:00:00 2001 From: "boxu.zheng" Date: Thu, 16 May 2024 11:57:24 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E8=B4=A8=E6=A3=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Jobs/InspectJobs/InspectJobAppService.cs | 20 ++ .../Jobs/InspectJobs/IInspectJobManager.cs | 4 + .../Jobs/InspectJobs/InspectJobManager.cs | 310 +++++++----------- 3 files changed, 142 insertions(+), 192 deletions(-) diff --git a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Jobs/InspectJobs/InspectJobAppService.cs b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Jobs/InspectJobs/InspectJobAppService.cs index 9ecba3c87..b14b4f5e0 100644 --- a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Jobs/InspectJobs/InspectJobAppService.cs +++ b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Jobs/InspectJobs/InspectJobAppService.cs @@ -1,4 +1,5 @@ using System; +using System.Collections.Generic; using System.Linq; using System.Text.Json; using System.Threading.Tasks; @@ -8,6 +9,8 @@ using Volo.Abp; using Volo.Abp.ObjectMapping; using Win_in.Sfs.Basedata.Domain.Shared; using Win_in.Sfs.FileStorage.Application.Contracts; +using Win_in.Sfs.Shared.Domain.Shared; +using Win_in.Sfs.Shared.Domain.Shared.Enums.Inspect; using Win_in.Sfs.Wms.Store.Application.Contracts; using Win_in.Sfs.Wms.Store.Domain; using Win_in.Sfs.Wms.Store.Domain.Shared; @@ -138,6 +141,23 @@ public class InspectJobAppService return summaryDetailDto; } + /// + /// 批量设置质检状态 + /// + /// + /// + /// + /// + [HttpPost("Set-Many-Detail-Status")] + public virtual async Task SetManyDetailStatusAsync(Guid id, List detailIdList, InspectJobDetailDTO detailDto) + { + var entityDetail = ObjectMapper.Map(detailDto); + + var entity=await _inspectJobManager.SetManyDetailStatusAsync(id,detailIdList, entityDetail).ConfigureAwait(false); + + return ObjectMapper.Map(entity); + } + /// /// /// diff --git a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain/Jobs/InspectJobs/IInspectJobManager.cs b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain/Jobs/InspectJobs/IInspectJobManager.cs index dc5609d4c..1dab32ff9 100644 --- a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain/Jobs/InspectJobs/IInspectJobManager.cs +++ b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain/Jobs/InspectJobs/IInspectJobManager.cs @@ -1,4 +1,5 @@ using System; +using System.Collections.Generic; using System.Threading.Tasks; using Volo.Abp.Users; @@ -39,4 +40,7 @@ public interface IInspectJobManager : IJobManager /// /// Task SetDetailDefaultOkStatusAsync(Guid id, Guid detailId); + + Task SetManyDetailStatusAsync(Guid id, List detailIdList, + InspectJobDetail inspectJobDetail); } diff --git a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain/Jobs/InspectJobs/InspectJobManager.cs b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain/Jobs/InspectJobs/InspectJobManager.cs index e9c4dab04..1b411b983 100644 --- a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain/Jobs/InspectJobs/InspectJobManager.cs +++ b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain/Jobs/InspectJobs/InspectJobManager.cs @@ -17,7 +17,7 @@ using Win_in.Sfs.Wms.Store.Domain.Acl.ItemQuality; namespace Win_in.Sfs.Wms.Store.Domain; /// -/// 质检任务 +/// 质检任务 /// public class InspectJobManager : SfsJobManagerBase, IInspectJobManager { @@ -25,7 +25,6 @@ public class InspectJobManager : SfsJobManagerBase private readonly IItemQualityAclService _itemQualityAclService; /// - /// /// /// /// @@ -34,14 +33,14 @@ public class InspectJobManager : SfsJobManagerBase IInspectJobRepository repository , IAQLAclService aqlAclService , IItemQualityAclService itemQualityAclService - ) : base(repository) + ) : base(repository) { _aqlAclService = aqlAclService; _itemQualityAclService = itemQualityAclService; } /// - /// 执行任务,生成检验记录 + /// 执行任务,生成检验记录 /// /// /// @@ -59,7 +58,8 @@ public class InspectJobManager : SfsJobManagerBase { await entity.SetDetail(detail.Id, detail.GoodQty, detail.FailedReason, detail.FailedQty, detail.CrackQty, detail.NotPassedQty, user.Name, - detail.SupplierBatch, detail.ArriveDate, detail.ProduceDate, detail.ExpireDate, detail.ContainerCode, detail.LocationCode, detail.Lot, + detail.SupplierBatch, detail.ArriveDate, detail.ProduceDate, detail.ExpireDate, detail.ContainerCode, + detail.LocationCode, detail.Lot, detail.PackingCode, detail.ReceiveQty).ConfigureAwait(false); } @@ -78,19 +78,22 @@ public class InspectJobManager : SfsJobManagerBase // // var inspectNote = BuildInspectNoteCreateDTO(entity); // await _inspectNoteAppService.CreateAsync(inspectNote); - } public override async Task> GetWorkingListByPackingAsync(string packingCode) { - return await Repository.GetListAsync(c => c.Details.Any(p => p.PackingCode == packingCode) && c.JobStatus != EnumJobStatus.Closed && c.JobStatus != EnumJobStatus.Cancelled, true).ConfigureAwait(false); - + return await Repository + .GetListAsync( + c => c.Details.Any(p => p.PackingCode == packingCode) && c.JobStatus != EnumJobStatus.Closed && + c.JobStatus != EnumJobStatus.Cancelled, true).ConfigureAwait(false); } public override async Task> GetWorkingListByContainerAsync(string containerCode) { - return await Repository.GetListAsync(c => c.Details.Any(p => p.ContainerCode == containerCode) && c.JobStatus != EnumJobStatus.Closed && c.JobStatus != EnumJobStatus.Cancelled, true).ConfigureAwait(false); - + return await Repository + .GetListAsync( + c => c.Details.Any(p => p.ContainerCode == containerCode) && c.JobStatus != EnumJobStatus.Closed && + c.JobStatus != EnumJobStatus.Cancelled, true).ConfigureAwait(false); } public override void CheckDetails(InspectJob entity, AbpValidationResult result) @@ -111,7 +114,7 @@ public class InspectJobManager : SfsJobManagerBase } /// - /// 创建质检任务 + /// 创建质检任务 /// /// /// @@ -131,21 +134,19 @@ public class InspectJobManager : SfsJobManagerBase } /// - /// 完成汇总的质检 + /// 完成汇总的质检 /// /// - public async Task CompleteSummaryDetailStatusAsync(Guid id, Guid summaryDetailId, InspectJobSummaryDetail input, ICurrentUser currentUser) + public async Task CompleteSummaryDetailStatusAsync(Guid id, Guid summaryDetailId, + InspectJobSummaryDetail input, ICurrentUser currentUser) { var jobEntity = await Repository.FindAsync(id); jobEntity.Details.Where(p => (p.DetailInspectStatus == EnumDetailInspectStatus.DefaultOK || - p.DetailInspectStatus == EnumDetailInspectStatus.OK)&& - p.ItemCode== input.ItemCode&& - p.Lot==input.Lot - ).ToList().ForEach(p => - { - p.GoodQty = p.ReceiveQty; - }); + p.DetailInspectStatus == EnumDetailInspectStatus.OK) && + p.ItemCode == input.ItemCode && + p.Lot == input.Lot + ).ToList().ForEach(p => { p.GoodQty = p.ReceiveQty; }); var goodqty = jobEntity.Details.Where(p => (p.DetailInspectStatus == EnumDetailInspectStatus.DefaultOK || @@ -157,7 +158,8 @@ public class InspectJobManager : SfsJobManagerBase //获取 汇总详情 var summaryDetailEntity = jobEntity.SummaryDetails.Find(p => p.Id == summaryDetailId); - var itemQuality = await _itemQualityAclService.GetByItemCodeAsync(summaryDetailEntity.ItemCode, jobEntity.SupplierCode); + var itemQuality = + await _itemQualityAclService.GetByItemCodeAsync(summaryDetailEntity.ItemCode, jobEntity.SupplierCode); if (itemQuality.InspectType != EnumInspectType.Exempt) { //获取质检标准 @@ -195,13 +197,14 @@ public class InspectJobManager : SfsJobManagerBase #endregion - await LocalEventBus.PublishAsync(new SfsUpdateEntitySummaryDetailEventData(CopyJob)).ConfigureAwait(false); + await LocalEventBus.PublishAsync(new SfsUpdateEntitySummaryDetailEventData(CopyJob)) + .ConfigureAwait(false); return summaryDetailEntity; } /// - /// 构造 完成汇总的质检 + /// 构造 完成汇总的质检 /// /// /// @@ -224,13 +227,14 @@ public class InspectJobManager : SfsJobManagerBase } /// - /// 检查 完成 汇总质检 + /// 检查 完成 汇总质检 /// /// /// /// /// - private static async Task CheckCompleteSummaryDetailAsync(InspectJobSummaryDetail inspectJobSummaryDetail, AQLDTO aql, + private static async Task CheckCompleteSummaryDetailAsync(InspectJobSummaryDetail inspectJobSummaryDetail, + AQLDTO aql, InspectJobSummaryDetail input) { if (aql == null) @@ -254,7 +258,7 @@ public class InspectJobManager : SfsJobManagerBase } /// - /// 【设置】 详情为【合格】 + /// 【设置】 详情为【合格】 /// /// /// @@ -289,7 +293,7 @@ public class InspectJobManager : SfsJobManagerBase } /// - /// 【设置】 详情为【不合格】 + /// 【设置】 详情为【不合格】 /// /// /// @@ -319,7 +323,7 @@ public class InspectJobManager : SfsJobManagerBase } /// - /// 【设置】为【默认库存状态】 + /// 【设置】为【默认库存状态】 /// /// /// @@ -349,13 +353,73 @@ public class InspectJobManager : SfsJobManagerBase return detail; } + public virtual async Task SetManyDetailStatusAsync(Guid id, List detailIdList, + InspectJobDetail inspectJobDetail) + { + var entity = await Repository.FindAsync(id).ConfigureAwait(false); + + var detailList = entity.Details.Where(p => detailIdList.Contains(p.Id)).ToList(); + + detailList.ForEach(detail => + { + switch (detail.DetailInspectStatus) + { + case EnumDetailInspectStatus.DefaultOK: + detail.DetailInspectStatus = EnumDetailInspectStatus.DefaultOK; + detail.Weight = string.Empty; + detail.Volume = string.Empty; + detail.Appearance = string.Empty; + detail.OtherPropertyJson = string.Empty; + detail.InspectQty = 0; + detail.GoodQty = detail.ReceiveQty; + detail.NotPassedQty = 0; + detail.FailedQty = 0; + detail.CrackQty = 0; + + break; + case EnumDetailInspectStatus.NOK: + detail.DetailInspectStatus = EnumDetailInspectStatus.NOK; + detail.Weight = inspectJobDetail.Weight; + detail.Volume = inspectJobDetail.Volume; + detail.Appearance = inspectJobDetail.Appearance; + detail.OtherPropertyJson = inspectJobDetail.OtherPropertyJson; + detail.InspectQty = inspectJobDetail.InspectQty; + detail.GoodQty = 0; + detail.NotPassedQty = detail.ReceiveQty; + detail.FailedQty = detail.ReceiveQty; + detail.CrackQty = 0; + break; + case EnumDetailInspectStatus.OK: + + detail.DetailInspectStatus = EnumDetailInspectStatus.OK; + detail.Weight = inspectJobDetail.Weight; + detail.Volume = inspectJobDetail.Volume; + detail.Appearance = inspectJobDetail.Appearance; + detail.OtherPropertyJson = inspectJobDetail.OtherPropertyJson; + detail.InspectQty = inspectJobDetail.InspectQty; + detail.GoodQty = detail.ReceiveQty; + detail.NotPassedQty = 0; + detail.FailedQty = 0; + detail.CrackQty = 0; + break; + } + }); + + await SetSummaryAllQtyAsync(entity).ConfigureAwait(false); + + await Repository.UpdateAsync(entity).ConfigureAwait(false); + + return entity; + } + /// - /// 设置当前汇总的数量 + /// 设置当前汇总的数量 /// /// /// /// - private static async Task SetSummaryAllQtyAsync(InspectJobDetail inspectJobDetail, InspectJob entity) + private static async Task SetSummaryAllQtyAsync(InspectJobDetail inspectJobDetail, + InspectJob entity) { await Task.CompletedTask.ConfigureAwait(false); var summaryDetail = entity.SummaryDetails.Find(p => p.ItemCode == inspectJobDetail.ItemCode); @@ -372,169 +436,31 @@ public class InspectJobManager : SfsJobManagerBase return summaryDetail; } - //private async Task> BuildInspectJobsAsync(InspectRequestETO inspectRequest) - //{ - // //根据物品和批次拆分任务 - // var splits = inspectRequest.Details.Select(c => (c.ItemCode, c.Lot)).Distinct(); - - // var inspectJobs = new List(); - // foreach (var split in splits) - // { - // var inspectJob = await BuildInspectJobAsync(inspectRequest); - // decimal receiveQty=0; - // decimal InspectQty = 0; - // foreach (var inspectRequestDetail in inspectRequest.Details.Where(c=>c.ItemCode== split.ItemCode && c.Lot== split.Lot)) - // { - // receiveQty += inspectRequestDetail.ReceiveQty; - // InspectQty += inspectRequestDetail.InspectQty; - // } - // foreach (var inspectRequestDetail in inspectRequest.Details.Where(c => c.ItemCode == split.ItemCode && c.Lot == split.Lot)) - // { - // List details = new List(); - - // var inspectJobDetail = ObjectMapper.Map(inspectRequestDetail); - // inspectJobDetail.InspectUser = new Person() - // { - // Name = _currentUser.Name, - // Phone = _currentUser.PhoneNumber, - // Email = _currentUser.Email - // }; - // inspectJobDetail.SetBatch(inspectJobDetail.Batch); - // inspectJobDetail.SetIdAndNumber(GuidGenerator,inspectJob.Id,inspectJob.Number); - - // inspectJobDetail.InspectQty = InspectQty; - // inspectJobDetail.ReceiveQty = receiveQty; - // inspectJobDetail.Qty = new UomQty() { Qty= inspectRequestDetail .InspectQty, Uom= inspectRequestDetail.ReceiveQty.Uom }; - // inspectJobDetail.Qty = new UomQty() { Qty = inspectRequestDetail.InspectQty, Uom = inspectRequestDetail.ReceiveQty.Uom }; - - // details.Add(inspectJobDetail); - // inspectJob.Details = details; - // break; - // } - // var location = await LocationAclService.GetByNameAsync(inspectJob.Details[0].LocationCode); - // inspectJob.SetWorkGroup(location).SetPriority(Clock); - // inspectJobs.Add(inspectJob); - - // //免检任务自动完成 并调用检验记录生成业务 - // if (inspectJob.Details.Any(c => c.InspectType == EnumInspectType.Exempt)) - // { - // await inspectJob.ConfirmAsync(_currentUser.Id, _currentUser.Name, Clock.Now); - - // //发布检验记录事件 - // var inspectNote = BuildInspectNoteCreateDTO(inspectJob); - // await _inspectNoteAppService.CreateAsync(inspectNote); - // } - // } - // return inspectJobs; - //} - /// - /// 检验不合格,下一步为挑选,重新生成类型为挑选的检验任务 + /// 设置当前汇总的数量 /// - /// + /// /// - /// - //public virtual async Task AddPickInspectJobAsync(InspectJob inspectJob) - //{ - - // var location = await LocationAclService.GetByTypeAsync(inspectJob.Details[0].LocationCode); - // inspectJob.SetDetails(location.Code) //设置明细 - // .SetWorkGroup(location.WarehouseCode, location.WorkGroupCode) //设置工作组 - // .SetPriority(Clock); //设置优先级; - - // await base.AddAsync(inspectJob); - //} - - //public virtual async Task AddByInspectRequestAsync(InspectRequestDTO inspectRequest, ICurrentUser currentUser) - //{ - // var inspectJobs = await BuildInspectJobsAsync(inspectRequest, currentUser); - - // await AddManyAsync(inspectJobs); - //} - - //public override async Task> AddManyAsync(List entities) - //{ - // foreach (var inspectJob in entities) - // { - // inspectJob.SummaryDetails.ForEach(p => p.SetIdAndNumber(GuidGenerator, inspectJob.Id, inspectJob.Number)); - // } - // return await base.AddManyAsync(entities); - //} - - ///// - ///// 创建质检任务 实体 - ///// - ///// - ///// - //private async Task BuildInspectJobAsync(InspectRequestDTO inspectRequest) - //{ - // var entity = ObjectMapper.Map(inspectRequest); - // entity.JobType = EnumJobType.InspectJob; - // entity.JobStatus = EnumJobStatus.Open; - // return entity; - //} - - ///// - ///// 创建质检任务 实体 - ///// - ///// - ///// - ///// - //private async Task> BuildInspectJobsAsync(InspectRequestDTO inspectRequest, ICurrentUser currentUser) - //{ - // var inspectJobs = new List(); - - // //按汇总明细分解成多个任务 - // foreach (var summarydDetailETO in inspectRequest.SummaryDetails) - // { - // var inspectJob = await BuildInspectJobAsync(inspectRequest); - - // //处理明细 同物品+批次 - // var inspectRequestDetails = inspectRequest.Details - // .Where(c => c.Lot == summarydDetailETO.Lot && c.ItemCode == summarydDetailETO.ItemCode).ToList(); - // var details = - // ObjectMapper.Map, List>(inspectRequestDetails); - // List deleteIds = new List(); - // foreach (var detail in details) - // { - // detail.InspectUser = new Person() - // { - // Name = currentUser.Name, - // Phone = currentUser.PhoneNumber, - // Email = currentUser.Email - // }; - // if (detail.ReceiveQty == 0) - // deleteIds.Add(detail.Id); - // } - - // inspectJob.Details.AddRange(details); - - // //删除收获数量为0的记录 - // foreach (var deleteId in deleteIds) - // { - // inspectJob.RemoveDetail(deleteId); - // } - - // //处理汇总明细 - // var summarydDetail = - // ObjectMapper.Map(summarydDetailETO); - // //summarydDetail.Qty=new UomQty(summarydDetailETO.ReceiveUom, summarydDetailETO.InspectQty); - // summarydDetail.InspectUser = new Person(currentUser.Name, currentUser.PhoneNumber, currentUser.Email); - // inspectJob.SummaryDetails.Add(summarydDetail); - - // if (inspectJob.Details.Any()) - // { - // //设置任务工作组和优先级 - // var location = - // await LocationAclService.GetByTypeAsync(inspectJob.Details.First().LocationCode); - // inspectJob.SetWorkGroup(location.WarehouseCode, location.WorkGroupCode) - // .SetPriority(Clock); - - // } - - // inspectJobs.Add(inspectJob); - // } - - // return inspectJobs; - //} + private static async Task> SetSummaryAllQtyAsync(InspectJob entity) + { + var listSummaryDetails = new List(); + var itemCodeGroupBy = entity.Details.GroupBy(p => p.ItemCode); + + foreach (var itemCodeList in itemCodeGroupBy) + { + var summaryDetail = entity.SummaryDetails.Find(p => p.ItemCode == itemCodeList.Key); + + summaryDetail.InspectQty = itemCodeList.Sum(p => p.InspectQty); + summaryDetail.GoodQty = itemCodeList.Sum(p => p.GoodQty); + summaryDetail.FailedQty = itemCodeList.Sum(p => p.FailedQty); + summaryDetail.CrackQty = itemCodeList.Sum(p => p.CrackQty); + summaryDetail.NotPassedQty = itemCodeList.Sum(p => p.NotPassedQty); + + listSummaryDetails.Add(summaryDetail); + } + + await Task.CompletedTask.ConfigureAwait(false); + + return listSummaryDetails; + } }