Browse Source

修改质检

dev_DY_CC
郑勃旭 12 months ago
parent
commit
afd91f3037
  1. 20
      be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Jobs/InspectJobs/InspectJobAppService.cs
  2. 4
      be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain/Jobs/InspectJobs/IInspectJobManager.cs
  3. 310
      be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain/Jobs/InspectJobs/InspectJobManager.cs

20
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;
}
/// <summary>
/// 批量设置质检状态
/// </summary>
/// <param name="id"></param>
/// <param name="detailIdList"></param>
/// <param name="detailDto"></param>
/// <returns></returns>
[HttpPost("Set-Many-Detail-Status")]
public virtual async Task<InspectJobDTO> SetManyDetailStatusAsync(Guid id, List<Guid> detailIdList, InspectJobDetailDTO detailDto)
{
var entityDetail = ObjectMapper.Map<InspectJobDetailDTO, InspectJobDetail>(detailDto);
var entity=await _inspectJobManager.SetManyDetailStatusAsync(id,detailIdList, entityDetail).ConfigureAwait(false);
return ObjectMapper.Map<InspectJob, InspectJobDTO>(entity);
}
/// <summary>
/// </summary>
/// <param name="inspectRequestNumber"></param>

4
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<InspectJob>
/// <param name="detailId"></param>
/// <returns></returns>
Task<InspectJobDetail> SetDetailDefaultOkStatusAsync(Guid id, Guid detailId);
Task<InspectJob> SetManyDetailStatusAsync(Guid id, List<Guid> detailIdList,
InspectJobDetail inspectJobDetail);
}

310
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;
/// <summary>
/// 质检任务
/// 质检任务
/// </summary>
public class InspectJobManager : SfsJobManagerBase<InspectJob, InspectJobDetail>, IInspectJobManager
{
@ -25,7 +25,6 @@ public class InspectJobManager : SfsJobManagerBase<InspectJob, InspectJobDetail>
private readonly IItemQualityAclService _itemQualityAclService;
/// <summary>
///
/// </summary>
/// <param name="repository"></param>
/// <param name="aqlAclService"></param>
@ -34,14 +33,14 @@ public class InspectJobManager : SfsJobManagerBase<InspectJob, InspectJobDetail>
IInspectJobRepository repository
, IAQLAclService aqlAclService
, IItemQualityAclService itemQualityAclService
) : base(repository)
) : base(repository)
{
_aqlAclService = aqlAclService;
_itemQualityAclService = itemQualityAclService;
}
/// <summary>
/// 执行任务,生成检验记录
/// 执行任务,生成检验记录
/// </summary>
/// <param name="id"></param>
/// <param name="inspectJob"></param>
@ -59,7 +58,8 @@ public class InspectJobManager : SfsJobManagerBase<InspectJob, InspectJobDetail>
{
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<InspectJob, InspectJobDetail>
//
// var inspectNote = BuildInspectNoteCreateDTO(entity);
// await _inspectNoteAppService.CreateAsync(inspectNote);
}
public override async Task<List<InspectJob>> 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<List<InspectJob>> 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<InspectJob, InspectJobDetail>
}
/// <summary>
/// 创建质检任务
/// 创建质检任务
/// </summary>
/// <param name="entity"></param>
/// <returns></returns>
@ -131,21 +134,19 @@ public class InspectJobManager : SfsJobManagerBase<InspectJob, InspectJobDetail>
}
/// <summary>
/// 完成汇总的质检
/// 完成汇总的质检
/// </summary>
/// <returns></returns>
public async Task<InspectJobSummaryDetail> CompleteSummaryDetailStatusAsync(Guid id, Guid summaryDetailId, InspectJobSummaryDetail input, ICurrentUser currentUser)
public async Task<InspectJobSummaryDetail> 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<InspectJob, InspectJobDetail>
//获取 汇总详情
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<InspectJob, InspectJobDetail>
#endregion
await LocalEventBus.PublishAsync(new SfsUpdateEntitySummaryDetailEventData<InspectJob>(CopyJob)).ConfigureAwait(false);
await LocalEventBus.PublishAsync(new SfsUpdateEntitySummaryDetailEventData<InspectJob>(CopyJob))
.ConfigureAwait(false);
return summaryDetailEntity;
}
/// <summary>
/// 构造 完成汇总的质检
/// 构造 完成汇总的质检
/// </summary>
/// <param name="input"></param>
/// <param name="summaryDetailEntity"></param>
@ -224,13 +227,14 @@ public class InspectJobManager : SfsJobManagerBase<InspectJob, InspectJobDetail>
}
/// <summary>
/// 检查 完成 汇总质检
/// 检查 完成 汇总质检
/// </summary>
/// <param name="inspectJobSummaryDetail"></param>
/// <param name="aql"></param>
/// <param name="input"></param>
/// <exception cref="UserFriendlyException"></exception>
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<InspectJob, InspectJobDetail>
}
/// <summary>
/// 【设置】 详情为【合格】
/// 【设置】 详情为【合格】
/// </summary>
/// <param name="id"></param>
/// <param name="detailId"></param>
@ -289,7 +293,7 @@ public class InspectJobManager : SfsJobManagerBase<InspectJob, InspectJobDetail>
}
/// <summary>
/// 【设置】 详情为【不合格】
/// 【设置】 详情为【不合格】
/// </summary>
/// <param name="id"></param>
/// <param name="inspectJobDetail"></param>
@ -319,7 +323,7 @@ public class InspectJobManager : SfsJobManagerBase<InspectJob, InspectJobDetail>
}
/// <summary>
/// 【设置】为【默认库存状态】
/// 【设置】为【默认库存状态】
/// </summary>
/// <param name="id"></param>
/// <param name="detailId"></param>
@ -349,13 +353,73 @@ public class InspectJobManager : SfsJobManagerBase<InspectJob, InspectJobDetail>
return detail;
}
public virtual async Task<InspectJob> SetManyDetailStatusAsync(Guid id, List<Guid> 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;
}
/// <summary>
/// 设置当前汇总的数量
/// 设置当前汇总的数量
/// </summary>
/// <param name="inspectJobDetail"></param>
/// <param name="entity"></param>
/// <returns></returns>
private static async Task<InspectJobSummaryDetail> SetSummaryAllQtyAsync(InspectJobDetail inspectJobDetail, InspectJob entity)
private static async Task<InspectJobSummaryDetail> 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<InspectJob, InspectJobDetail>
return summaryDetail;
}
//private async Task<List<InspectJob>> BuildInspectJobsAsync(InspectRequestETO inspectRequest)
//{
// //根据物品和批次拆分任务
// var splits = inspectRequest.Details.Select(c => (c.ItemCode, c.Lot)).Distinct();
// var inspectJobs = new List<InspectJob>();
// 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<InspectJobDetail> details = new List<InspectJobDetail>();
// var inspectJobDetail = ObjectMapper.Map<InspectRequestDetailETO, InspectJobDetail>(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;
//}
/// <summary>
/// 检验不合格,下一步为挑选,重新生成类型为挑选的检验任务
/// 设置当前汇总的数量
/// </summary>
/// <param name="inspectJob"></param>
/// <param name="entity"></param>
/// <returns></returns>
/// <exception cref="NotImplementedException"></exception>
//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<List<InspectJob>> AddManyAsync(List<InspectJob> entities)
//{
// foreach (var inspectJob in entities)
// {
// inspectJob.SummaryDetails.ForEach(p => p.SetIdAndNumber(GuidGenerator, inspectJob.Id, inspectJob.Number));
// }
// return await base.AddManyAsync(entities);
//}
///// <summary>
///// 创建质检任务 实体
///// </summary>
///// <param name="inspectRequest"></param>
///// <returns></returns>
//private async Task<InspectJob> BuildInspectJobAsync(InspectRequestDTO inspectRequest)
//{
// var entity = ObjectMapper.Map<InspectRequestDTO, InspectJob>(inspectRequest);
// entity.JobType = EnumJobType.InspectJob;
// entity.JobStatus = EnumJobStatus.Open;
// return entity;
//}
///// <summary>
///// 创建质检任务 实体
///// </summary>
///// <param name="inspectRequest"></param>
///// <param name="currentUser"></param>
///// <returns></returns>
//private async Task<List<InspectJob>> BuildInspectJobsAsync(InspectRequestDTO inspectRequest, ICurrentUser currentUser)
//{
// var inspectJobs = new List<InspectJob>();
// //按汇总明细分解成多个任务
// 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<InspectRequestDetailDTO>, List<InspectJobDetail>>(inspectRequestDetails);
// List<Guid> deleteIds = new List<Guid>();
// 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<InspectRequestSummaryDetailDTO, InspectJobSummaryDetail>(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<List<InspectJobSummaryDetail>> SetSummaryAllQtyAsync(InspectJob entity)
{
var listSummaryDetails = new List<InspectJobSummaryDetail>();
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;
}
}

Loading…
Cancel
Save