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