Browse Source

发料修改

集成Redis
郑渤旭[Irelia] 2 years ago
parent
commit
e41899514f
  1. 2
      be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Jobs/IssueJobs/IIssueJobAppService.cs
  2. 8
      be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Jobs/IssueJobs/IssueJobAppService.cs
  3. 12
      be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Requests/MaterialRequests/MaterialRequestAppService.cs
  4. 2
      be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain/Requests/MaterialRequests/MaterialRequestDetail.cs
  5. 124
      be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain/Requests/MaterialRequests/MaterialRequestManager.cs
  6. 16
      be/Modules/Store/src/Win_in.Sfs.Wms.Store.Event/Requests/MaterialRequestEventHandler.cs

2
be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Jobs/IssueJobs/IIssueJobAppService.cs

@ -14,4 +14,6 @@ public interface IIssueJobAppService
Task<PagedResultDto<IssueJobDTO>> GetListByTypeAsync(SfsJobRequestInputBase requestInput, string requestType,
bool includeDetails = false, CancellationToken cancellationToken = default);
Task<List<IssueJobDTO>> GetByRequestNumberAsync(string requestNumber);
}

8
be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Jobs/IssueJobs/IssueJobAppService.cs

@ -8,6 +8,7 @@ using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Mvc;
using Volo.Abp;
using Volo.Abp.Application.Dtos;
using Volo.Abp.ObjectMapping;
using Win_in.Sfs.Shared.Domain;
using Win_in.Sfs.Shared.Domain.Shared;
using Win_in.Sfs.Wms.Store.Application.Contracts;
@ -151,6 +152,13 @@ public class IssueJobAppService
}
[HttpPost("by-request-number/{requestNumber}")]
public virtual async Task<List<IssueJobDTO>> GetByRequestNumberAsync(string requestNumber)
{
var entitys = await _repository.GetListAsync(p => p.MaterialRequestNumber == requestNumber).ConfigureAwait(false);
return ObjectMapper.Map<List<IssueJob>, List<IssueJobDTO>>(entitys);
}
/*
/// <summary>
///

12
be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Requests/MaterialRequests/MaterialRequestAppService.cs

@ -5,6 +5,7 @@ using System.Linq;
using System.Linq.Expressions;
using System.Threading;
using System.Threading.Tasks;
using DocumentFormat.OpenXml.Office.PowerPoint.Y2021.M06.Main;
using IdentityModel;
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Mvc;
@ -43,15 +44,17 @@ public class MaterialRequestAppService : SfsStoreRequestAppServiceBase<MaterialR
private readonly IItemBasicAppService _itemBasicAppService;
private readonly IProductionLineAppService _productionLineAppService;
private readonly IIssueJobAppService _issueJobAppService;
public MaterialRequestAppService(
IMaterialRequestRepository repository,
IMaterialRequestManager materialRequestManager,
IPreparationPlanManager preparationPlanManager,
IItemStoreRelationAppService itemStoreRelationApp,
IAreaAppService areaApp
, ILocationAppService locationAppService
, IItemBasicAppService itemBasicAppService,
IProductionLineAppService productionLineAppService)
IAreaAppService areaApp,
ILocationAppService locationAppService,
IItemBasicAppService itemBasicAppService,
IProductionLineAppService productionLineAppService,
IIssueJobAppService issueJobAppService)
: base(repository, materialRequestManager)
{
_materialRequestManager = materialRequestManager;
@ -61,6 +64,7 @@ public class MaterialRequestAppService : SfsStoreRequestAppServiceBase<MaterialR
_locationAppService = locationAppService;
_itemBasicAppService = itemBasicAppService;
_productionLineAppService = productionLineAppService;
_issueJobAppService = issueJobAppService;
}
#region 东阳使用

2
be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain/Requests/MaterialRequests/MaterialRequestDetail.cs

@ -74,7 +74,7 @@ public class MaterialRequestDetail : SfsStoreDetailWithQtyEntityBase, IHasToLoca
public EnumStatus Status { get; set; }
/// <summary>
/// 请求未发
/// 请求未发 还未发送的数量
/// </summary>
[NotMapped]
public decimal ToBeIssuedQty => Qty - IssuedQty;

124
be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain/Requests/MaterialRequests/MaterialRequestManager.cs

@ -43,6 +43,72 @@ public class MaterialRequestManager
return entity;
}
public virtual async Task UpdateDetailsAsync(MaterialRequest newEntity)
{
var oldEntity = await Repository.FindAsync(newEntity.Id, true).ConfigureAwait(false);
foreach (var newDetail in newEntity.Details)
{
oldEntity.ReplaceDetail(newDetail.Id, newDetail);
}
foreach (var detail in oldEntity.Details)
{
SetMaterialRequestDetailStatus(detail);
}
await SetMaterialRequestStatus(oldEntity).ConfigureAwait(false);
await Repository.UpdateAsync(oldEntity).ConfigureAwait(false);
}
private void SetMaterialRequestDetailStatus(MaterialRequestDetail detail)
{
if (detail.ReceivedQty >= detail.Qty)//执行的时候 实际收料 多余 要料数
{
detail.Status = EnumStatus.Close;
}
else
{
detail.Status = EnumStatus.Open;
}
}
private async Task SetMaterialRequestStatus(MaterialRequest materialRequest)
{
if (!materialRequest.Details.All(p => p.Status == EnumStatus.Close))
{
var issueJobs = await _issueJobRepository.GetListAsync(t => t.MaterialRequestNumber == materialRequest.Number).ConfigureAwait(false);
if (issueJobs.Count > 0)
{
if (issueJobs.All(t => t.JobStatus == EnumJobStatus.Done||t.JobStatus==EnumJobStatus.Closed||t.JobStatus==EnumJobStatus.Cancelled))
{
materialRequest.RequestStatus = EnumRequestStatus.Completed;
}
else
{
materialRequest.RequestStatus = EnumRequestStatus.Partial;
}
}
else
{
materialRequest.RequestStatus = EnumRequestStatus.Partial;
}
}
else
{
materialRequest.RequestStatus = EnumRequestStatus.Completed;
}
}
public virtual async Task CompleteAsync(string number)
{
var entity = await GetByNumberAsync(number).ConfigureAwait(false);
if (entity != null && !entity.Details.Any(p => p.ToBeIssuedQty > 0))
{
await CompleteAsync(entity).ConfigureAwait(false);
}
}
#region 公有
@ -124,64 +190,6 @@ public class MaterialRequestManager
}
*/
public virtual async Task UpdateDetailsAsync(MaterialRequest newEntity)
{
var oldEntity = await Repository.FindAsync(newEntity.Id, true).ConfigureAwait(false);
foreach (var newDetail in newEntity.Details)
{
oldEntity.ReplaceDetail(newDetail.Id, newDetail);
}
foreach (var detail in oldEntity.Details)
{
SetMaterialRequestDetailStatus(detail);
}
await SetMaterialRequestStatus(oldEntity).ConfigureAwait(false);
await Repository.UpdateAsync(oldEntity).ConfigureAwait(false);
}
private void SetMaterialRequestDetailStatus(MaterialRequestDetail detail)
{
if (detail.Qty > detail.IssuedQty)//要100 实际只有50
{
if (detail.ReceivedQty >= detail.Qty)//执行的时候发的比100还多 就完成
{
detail.Status = EnumStatus.Close;
}
else//要100
{
detail.Status=EnumStatus.Open;
}
}
else//要100 实际够100
{
detail.Status = EnumStatus.Close;
}
}
private async Task SetMaterialRequestStatus(MaterialRequest materialRequest)
{
if (materialRequest.Details.All(p => p.Status == EnumStatus.Close))
{
var issueJobs = await _issueJobRepository.GetListAsync(t => t.MaterialRequestNumber == materialRequest.Number).ConfigureAwait(false);
if (issueJobs.All(t => t.JobStatus == EnumJobStatus.Done))
{
materialRequest.RequestStatus = EnumRequestStatus.Completed;
}
}
}
public virtual async Task CompleteAsync(string number)
{
var entity = await GetByNumberAsync(number).ConfigureAwait(false);
if (entity!=null &&!entity.Details.Any(p => p.ToBeIssuedQty > 0))
{
await CompleteAsync(entity).ConfigureAwait(false);
}
}
#endregion

16
be/Modules/Store/src/Win_in.Sfs.Wms.Store.Event/Requests/MaterialRequestEventHandler.cs

@ -124,14 +124,18 @@ public class MaterialRequestEventHandler
{
var jobs = new List<IssueJobEditInput>();
var transactionType = await TransactionTypeAclService.GetByTransTypeAsync(EnumTransType.Issue, EnumTransSubType.None).ConfigureAwait(false);
var toLocationCodes = materialRequest.Details.Select(p => p.ToLocationCode).Distinct().ToList();
var toLocations = await _locationAppService.GetByCodesAsync(toLocationCodes).ConfigureAwait(false);
var transactionType = await TransactionTypeAclService.GetByTransTypeAsync(EnumTransType.Issue, EnumTransSubType.None).ConfigureAwait(false);//库存事务
foreach (var materialRequestDetail in materialRequest.Details.Where(p => p.ToBeIssuedQty > 0))//如果有还有剩余未叫料的数量 则创建新的任务
var toLocationCodes = materialRequest.Details.Select(p => p.ToLocationCode).Distinct().ToList();//所有发送库位的集合
var toLocations = await _locationAppService.GetByCodesAsync(toLocationCodes).ConfigureAwait(false);//所有库位的集合
var materialRequestDetails = materialRequest.Details.Where(p => p.ToBeIssuedQty > 0);//所有还没发送物品的集合
foreach (var materialRequestDetail in materialRequestDetails)//如果有还有剩余未叫料的数量 则创建新的任务
{
var toLocation = toLocations.FirstOrDefault(p => p.Code == materialRequestDetail.ToLocationCode);
var toLocation = toLocations.FirstOrDefault(p => p.Code == materialRequestDetail.ToLocationCode);//判断目标库位是否存在
Check.NotNull(toLocation, "库位代码", $"库位 {materialRequestDetail.ToLocationCode} 不存在");
//创建详情
var jobDetails = await BuildIssueJobDetailInputsAsync(materialRequest, materialRequestDetail, transactionType, toLocation.LocationGroupCode).ConfigureAwait(false);
if (!jobDetails.Any())
{
@ -147,7 +151,7 @@ public class MaterialRequestEventHandler
jobs.Add(job);
}
job.Details.AddRange(jobDetails);
if (materialRequestDetail.ToBeIssuedQty <= 0)
if (materialRequestDetail.ToBeIssuedQty < 0)
{
materialRequestDetail.Status = EnumStatus.Close;
}

Loading…
Cancel
Save