Browse Source

修改注塑 发料

dev_DY_CC
郑勃旭 1 year ago
parent
commit
718fd8c021
  1. 13
      be/Modules/Inventory/src/Win_in.Sfs.Wms.Inventory.Application.Contracts/Balances/IBalanceAppService.cs
  2. 20
      be/Modules/Inventory/src/Win_in.Sfs.Wms.Inventory.Application/Balances/BalanceAppService.cs
  3. 49
      be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain/Jobs/IssueJobs/InjectionJobs/InjectionJobManager.cs
  4. 5
      be/Modules/Store/src/Win_in.Sfs.Wms.Store.Event/Requests/InjectionRequestEventHandler.cs

13
be/Modules/Inventory/src/Win_in.Sfs.Wms.Inventory.Application.Contracts/Balances/IBalanceAppService.cs

@ -110,12 +110,6 @@ public interface IBalanceAppService
Task<PagedResultDto<BalanceDTO>> GetByHoldLocationCodeAndNoOkAsync(SfsInventoryRequestInputBase sfsRequestDTO, bool includeDetails = false, Task<PagedResultDto<BalanceDTO>> GetByHoldLocationCodeAndNoOkAsync(SfsInventoryRequestInputBase sfsRequestDTO, bool includeDetails = false,
CancellationToken cancellationToken = default); CancellationToken cancellationToken = default);
/// <summary>
/// 获取 【实际库存余额】(不包含预计入,抛出预计出)
/// </summary>
/// <returns></returns>
Task<BalanceDTO> GetRealQtyByPackingCodeAndItemCodeAndLocationCodeAndStatusAsync(string packingCode, string itemCode, string locationCode, EnumInventoryStatus status);
Task<List<BalanceDTO>> GetListByLocationCodeAndItemCodeAsync(string locationCode, string itemCode); Task<List<BalanceDTO>> GetListByLocationCodeAndItemCodeAsync(string locationCode, string itemCode);
Task<List<BalanceDTO>> GetListByLocationCodeAndStatusAsync(string locationCode, EnumInventoryStatus status); Task<List<BalanceDTO>> GetListByLocationCodeAndStatusAsync(string locationCode, EnumInventoryStatus status);
@ -174,4 +168,11 @@ public interface IBalanceAppService
/// <returns></returns> /// <returns></returns>
/// <exception cref="NotImplementedException"></exception> /// <exception cref="NotImplementedException"></exception>
Task<List<BalanceDTO>> GetUsableListAsync(RecommendBalanceRequestInput input); Task<List<BalanceDTO>> GetUsableListAsync(RecommendBalanceRequestInput input);
/// <summary>
/// 获取 【实际库存余额】(不包含预计入,计算了预计出)
/// </summary>
/// <returns></returns>
Task<BalanceDTO> GetRealQtyByPackingCodeAndItemCodeAndLocationCodeAndStatusAsync(string packingCode,
string itemCode, string locationCode, EnumInventoryStatus status,string lot);
} }

20
be/Modules/Inventory/src/Win_in.Sfs.Wms.Inventory.Application/Balances/BalanceAppService.cs

@ -39,6 +39,7 @@ public class BalanceAppService
private readonly IBalanceManager _balanceManager; private readonly IBalanceManager _balanceManager;
private readonly IItemBasicAppService _itemBasicAppService; private readonly IItemBasicAppService _itemBasicAppService;
private readonly IStdCostPriceSheetAppService _stdCostPriceSheetAppService; private readonly IStdCostPriceSheetAppService _stdCostPriceSheetAppService;
private readonly IExpectOutAppService _expectOutAppService;
public BalanceAppService( public BalanceAppService(
IBalanceRepository repository, IBalanceRepository repository,
@ -47,7 +48,8 @@ public class BalanceAppService
ILocationAclService locationAclService, ILocationAclService locationAclService,
IItemBasicAclService itemBasicAclService, IItemBasicAclService itemBasicAclService,
IItemBasicAppService itemBasicAppService, IItemBasicAppService itemBasicAppService,
IStdCostPriceSheetAppService stdCostPriceSheetAppService) : base(repository) IStdCostPriceSheetAppService stdCostPriceSheetAppService,
IExpectOutAppService expectOutAppService) : base(repository)
{ {
_repository = repository; _repository = repository;
_transferLogManager = transferLogManager; _transferLogManager = transferLogManager;
@ -56,6 +58,7 @@ public class BalanceAppService
_itemBasicAclService = itemBasicAclService; _itemBasicAclService = itemBasicAclService;
_itemBasicAppService = itemBasicAppService; _itemBasicAppService = itemBasicAppService;
_stdCostPriceSheetAppService = stdCostPriceSheetAppService; _stdCostPriceSheetAppService = stdCostPriceSheetAppService;
_expectOutAppService = expectOutAppService;
} }
#region Update #region Update
@ -803,12 +806,12 @@ public class BalanceAppService
} }
/// <summary> /// <summary>
/// 获取 【实际库存余额】(不包含预计入,抛出预计出) /// 获取 【实际库存余额】(不包含预计入,计算了预计出)
/// </summary> /// </summary>
/// <returns></returns> /// <returns></returns>
[HttpPost("get-real-qty-by-packing-and-item-and-location-and-status")] [HttpPost("get-real-qty-by-packing-and-item-and-location-and-status-and-lot")]
public async Task<BalanceDTO> GetRealQtyByPackingCodeAndItemCodeAndLocationCodeAndStatusAsync(string packingCode, public async Task<BalanceDTO> GetRealQtyByPackingCodeAndItemCodeAndLocationCodeAndStatusAsync(string packingCode,
string itemCode, string locationCode, EnumInventoryStatus status) string itemCode, string locationCode, EnumInventoryStatus status,string lot)
{ {
var entity = await _repository.FirstOrDefaultAsync(c => var entity = await _repository.FirstOrDefaultAsync(c =>
c.PackingCode == packingCode && c.ItemCode == itemCode && c.LocationCode == locationCode && c.PackingCode == packingCode && c.ItemCode == itemCode && c.LocationCode == locationCode &&
@ -818,9 +821,14 @@ public class BalanceAppService
throw new UserFriendlyException($"未找到箱码为 {packingCode},物料代码为 {itemCode},库位代码为 {locationCode} 的库存"); throw new UserFriendlyException($"未找到箱码为 {packingCode},物料代码为 {itemCode},库位代码为 {locationCode} 的库存");
} }
//TODO 减去预计出 var expectOutDtos=await _expectOutAppService.GetListByItemCodeAndStatusAndPackingCodeAsync(itemCode,locationCode,packingCode,status,lot).ConfigureAwait(false);
var dto = ObjectMapper.Map<Balance, BalanceDTO>(entity); var dto = ObjectMapper.Map<Balance, BalanceDTO>(entity);
foreach (var expectOutDto in expectOutDtos)
{
dto.Qty -= expectOutDto.Qty;
}
return dto; return dto;
} }

49
be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain/Jobs/IssueJobs/InjectionJobs/InjectionJobManager.cs

@ -4,19 +4,24 @@ using System.ComponentModel.DataAnnotations;
using System.Linq; using System.Linq;
using System.Linq.Expressions; using System.Linq.Expressions;
using System.Threading.Tasks; using System.Threading.Tasks;
using Volo.Abp;
using Volo.Abp.Users; using Volo.Abp.Users;
using Volo.Abp.Validation; using Volo.Abp.Validation;
using Win_in.Sfs.Shared.Domain.Shared; using Win_in.Sfs.Shared.Domain.Shared;
using Win_in.Sfs.Wms.Inventory.Application.Contracts;
namespace Win_in.Sfs.Wms.Store.Domain; namespace Win_in.Sfs.Wms.Store.Domain;
public class InjectionJobManager : SfsJobManagerBase<InjectionJob, InjectionJobDetail>, IInjectionJobManager public class InjectionJobManager : SfsJobManagerBase<InjectionJob, InjectionJobDetail>, IInjectionJobManager
{ {
private readonly IBalanceAppService _balanceAppService;
private readonly IExpectOutAppService _expectOutAppService;
public InjectionJobManager( public InjectionJobManager(
IInjectionJobRepository repository IInjectionJobRepository repository, IBalanceAppService balanceAppService, IExpectOutAppService expectOutAppService) : base(repository)
) : base(repository)
{ {
_balanceAppService = balanceAppService;
_expectOutAppService = expectOutAppService;
} }
/// <summary> /// <summary>
@ -33,6 +38,28 @@ public class InjectionJobManager : SfsJobManagerBase<InjectionJob, InjectionJobD
var inputDetail = input.Details.First(); var inputDetail = input.Details.First();
var detail = entity.Details.First(); var detail = entity.Details.First();
var expectOutDtos = await _expectOutAppService.GetListByItemCodeAndStatusAndPackingCodeAsync(detail.ItemCode, detail.HandledFromLocationCode, detail.HandledFromPackingCode, detail.Status, detail.HandledFromLot).ConfigureAwait(false);
if (expectOutDtos.Any())
{
throw new UserFriendlyException($" 箱码:{detail.HandledFromPackingCode}," +
$" 物品代码:{detail.ItemCode}," +
$" 库位代码:{detail.HandledFromLocationCode}," +
$" 状态:{detail.Status}," +
$" 批次:{detail.HandledFromLot}" +
$" 的库存被占用【预计出】");
}
var balanceDto=await _balanceAppService.GetRealQtyByPackingCodeAndItemCodeAndLocationCodeAndStatusAsync(detail.HandledFromPackingCode,detail.ItemCode,detail.HandledFromLocationCode,detail.Status,detail.HandledFromLot).ConfigureAwait(false);
if (balanceDto.Qty <= 0)
{
throw new UserFriendlyException($" 箱码:{detail.HandledFromPackingCode}," +
$" 物品代码:{detail.ItemCode}," +
$" 库位代码:{detail.HandledFromLocationCode}," +
$" 状态:{detail.Status}," +
$" 批次:{detail.HandledFromLot}" +
$" 的可用库存不大于0,现在为{balanceDto.Qty},请检查【库存数量】和【预计出】");
}
detail.HandledFromArriveDate = inputDetail.HandledFromArriveDate; detail.HandledFromArriveDate = inputDetail.HandledFromArriveDate;
detail.HandledFromContainerCode = inputDetail.HandledFromContainerCode; detail.HandledFromContainerCode = inputDetail.HandledFromContainerCode;
detail.HandledFromExpireDate = inputDetail.HandledFromExpireDate; detail.HandledFromExpireDate = inputDetail.HandledFromExpireDate;
@ -68,19 +95,6 @@ public class InjectionJobManager : SfsJobManagerBase<InjectionJob, InjectionJobD
return await base.CompleteAsync(entity, user).ConfigureAwait(false); return await base.CompleteAsync(entity, user).ConfigureAwait(false);
} }
public override void CheckDetails(InjectionJob entity, AbpValidationResult result)
{
var details = entity.Details;
foreach (var detail in details)
{
if (detail.HandledFromLocationCode == null)
{
result.Errors.Add(new ValidationResult($"{detail.HandledFromLocationCode} 不能为空"));
}
}
}
public async Task<InjectionJob> GetAsync(Expression<Func<InjectionJob, bool>> expression) public async Task<InjectionJob> GetAsync(Expression<Func<InjectionJob, bool>> expression)
{ {
return await Repository.FindAsync(expression).ConfigureAwait(false); return await Repository.FindAsync(expression).ConfigureAwait(false);
@ -98,5 +112,10 @@ public class InjectionJobManager : SfsJobManagerBase<InjectionJob, InjectionJobD
throw new NotImplementedException(); throw new NotImplementedException();
} }
public override void CheckDetails(InjectionJob entity, AbpValidationResult result)
{
throw new NotImplementedException();
}
#endregion #endregion
} }

5
be/Modules/Store/src/Win_in.Sfs.Wms.Store.Event/Requests/InjectionRequestEventHandler.cs

@ -449,6 +449,11 @@ public class InjectionRequestEventHandler
{ {
var detail = new InjectionJobDetailInput(); var detail = new InjectionJobDetailInput();
detail.RequestLocationCode = injectionRequestDetail.ToLocationCode; detail.RequestLocationCode = injectionRequestDetail.ToLocationCode;
detail.RequestLocationGroup=injectionRequestDetail.ToLocationGroup;
detail.RequestLocationArea = injectionRequestDetail.ToLocationArea;
detail.RequestLocationErpCode = injectionRequestDetail.ToLocationErpCode;
detail.RequestWarehouseCode=injectionRequestDetail.ToWarehouseCode;
detail.PositionCode = injectionRequestDetail.PositionCode; detail.PositionCode = injectionRequestDetail.PositionCode;
detail.RecommendType = injectionRequestDetail.RecommendType; detail.RecommendType = injectionRequestDetail.RecommendType;
detail.ProdLine = injectionRequestDetail.ToLocationCode; detail.ProdLine = injectionRequestDetail.ToLocationCode;

Loading…
Cancel
Save