|
|
@ -2,6 +2,7 @@ using System; |
|
|
|
using System.Collections.Generic; |
|
|
|
using System.Threading.Tasks; |
|
|
|
using DocumentFormat.OpenXml.Bibliography; |
|
|
|
using Volo.Abp; |
|
|
|
using Volo.Abp.EventBus; |
|
|
|
using Volo.Abp.EventBus.Local; |
|
|
|
using Volo.Abp.SettingManagement; |
|
|
@ -9,6 +10,7 @@ using Volo.Abp.Uow; |
|
|
|
using Win_in.Sfs.Basedata.Application.Contracts; |
|
|
|
using Win_in.Sfs.Shared.Domain.Shared; |
|
|
|
using Win_in.Sfs.Shared.Event; |
|
|
|
using Win_in.Sfs.Wms.Inventory.Application.Contracts; |
|
|
|
using Win_in.Sfs.Wms.Store.Domain; |
|
|
|
using Win_in.Sfs.Wms.Store.Domain.Shared; |
|
|
|
|
|
|
@ -26,14 +28,16 @@ public class TransferRequestEventHandler |
|
|
|
private readonly ITransferNoteManager _transferNoteManager; |
|
|
|
private readonly ILocationAppService _locationAppService; |
|
|
|
private readonly ITransferRequestManager _transferRequestManager; |
|
|
|
private readonly IBalanceAppService _balanceAppService; |
|
|
|
protected ILocalEventBus LocalEventBus => LazyServiceProvider.LazyGetRequiredService<ILocalEventBus>(); |
|
|
|
|
|
|
|
public TransferRequestEventHandler( |
|
|
|
ITransferNoteManager transferNoteManager, ILocationAppService locationAppService, ITransferRequestManager transferRequestManager) |
|
|
|
ITransferNoteManager transferNoteManager, ILocationAppService locationAppService, ITransferRequestManager transferRequestManager, IBalanceAppService balanceAppService) |
|
|
|
{ |
|
|
|
_transferNoteManager = transferNoteManager; |
|
|
|
_locationAppService = locationAppService; |
|
|
|
_transferRequestManager = transferRequestManager; |
|
|
|
_balanceAppService = balanceAppService; |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
@ -53,6 +57,17 @@ public class TransferRequestEventHandler |
|
|
|
{ |
|
|
|
var input = ObjectMapper.Map<TransferRequest, TransferNote>(entity); |
|
|
|
|
|
|
|
foreach (var detail in input.Details) |
|
|
|
{ |
|
|
|
var balanceDto=await _balanceAppService.GetRealQtyByPackingCodeAndItemCodeAndLocationCodeAndStatusAsync( |
|
|
|
detail.FromPackingCode, detail.ItemCode, detail.FromLocationCode, EnumInventoryStatus.OK).ConfigureAwait(false); |
|
|
|
|
|
|
|
if (balanceDto.Qty < detail.Qty) |
|
|
|
{ |
|
|
|
throw new UserFriendlyException($"{detail.ItemCode}库存不足,申请数量{detail.Qty},现有可用库存{balanceDto.Qty}"); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
//获取在途库
|
|
|
|
var locationDto = await _locationAppService.GetFirstByTypeAsync(EnumLocationType.TRANSPORT) |
|
|
|
.ConfigureAwait(false); |
|
|
|