3 changed files with 365 additions and 10 deletions
@ -0,0 +1,206 @@ |
|||||
|
using System; |
||||
|
using System.Collections.Generic; |
||||
|
using System.Threading.Tasks; |
||||
|
using Volo.Abp.EventBus; |
||||
|
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.Application.Contracts; |
||||
|
using Win_in.Sfs.Wms.Store.Domain; |
||||
|
using Win_in.Sfs.Wms.Store.Event.Transaction; |
||||
|
|
||||
|
namespace Win_in.Sfs.Wms.Store.Event.Transactions; |
||||
|
|
||||
|
public class TransferLibNoteEventHandler |
||||
|
: StoreInventoryEventHandlerBase |
||||
|
, ILocalEventHandler<SfsCreatedEntityEventData<TransferLibNote>> |
||||
|
, ILocalEventHandler<SfsConfirmedEntityEventData<TransferLibNote>> |
||||
|
, ILocalEventHandler<SfsCreatedEntityEventData<List<TransferLibNote>>> |
||||
|
{ |
||||
|
private const EnumTransType TransType = EnumTransType.TransferLib; |
||||
|
private readonly ILocationAppService _locationAppService; |
||||
|
private readonly ITransferLogAppService _transferLogAppService; |
||||
|
|
||||
|
public TransferLibNoteEventHandler(ILocationAppService locationAppService, ITransferLogAppService transferLogAppService) |
||||
|
{ |
||||
|
_locationAppService = locationAppService; |
||||
|
_transferLogAppService = transferLogAppService; |
||||
|
} |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 创建 后
|
||||
|
/// </summary>
|
||||
|
/// <param name="eventData"></param>
|
||||
|
/// <returns></returns>
|
||||
|
[UnitOfWork] |
||||
|
public virtual async Task HandleEventAsync(SfsCreatedEntityEventData<TransferLibNote> eventData) |
||||
|
{ |
||||
|
var entity = eventData.Entity; |
||||
|
|
||||
|
var route = entity.UseOnTheWayLocation |
||||
|
? EnumTransferRoute.SourceToOnTheWay |
||||
|
: EnumTransferRoute.SourceToDestination; |
||||
|
|
||||
|
var inputList = await BuildTransferLogsAsync(entity, route).ConfigureAwait(false); |
||||
|
await AddTransferLogsAsync(inputList).ConfigureAwait(false); |
||||
|
} |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 批量创建 后
|
||||
|
/// </summary>
|
||||
|
/// <param name="eventData"></param>
|
||||
|
/// <returns></returns>
|
||||
|
[UnitOfWork] |
||||
|
public virtual async Task HandleEventAsync(SfsCreatedEntityEventData<List<TransferLibNote>> eventData) |
||||
|
{ |
||||
|
foreach (var entity in eventData.Entity) |
||||
|
{ |
||||
|
var route = entity.UseOnTheWayLocation |
||||
|
? EnumTransferRoute.SourceToOnTheWay |
||||
|
: EnumTransferRoute.SourceToDestination; |
||||
|
|
||||
|
var inputList = await BuildTransferLogsAsync(entity, route).ConfigureAwait(false); |
||||
|
await AddTransferLogsAsync(inputList).ConfigureAwait(false); |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 确认 后
|
||||
|
/// </summary>
|
||||
|
/// <param name="eventData"></param>
|
||||
|
/// <returns></returns>
|
||||
|
[UnitOfWork] |
||||
|
public virtual async Task HandleEventAsync(SfsConfirmedEntityEventData<TransferLibNote> eventData) |
||||
|
{ |
||||
|
var entity = eventData.Entity; |
||||
|
|
||||
|
var inputList = await BuildTransferLogsAsync(entity, EnumTransferRoute.OnTheWayToDestination).ConfigureAwait(false); |
||||
|
await AddTransferLogsAsync(inputList).ConfigureAwait(false); |
||||
|
} |
||||
|
|
||||
|
private async Task AddTransferLogsAsync(List<TransferLogEditInput> inputList) |
||||
|
{ |
||||
|
var transferLogs = new List<TransferLogEditInput>(); |
||||
|
|
||||
|
transferLogs.AddRange(inputList); |
||||
|
|
||||
|
await _transferLogAppService.AddManyAsync(transferLogs).ConfigureAwait(false); |
||||
|
|
||||
|
} |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 构建正常的input
|
||||
|
/// </summary>
|
||||
|
/// <param name="note"></param>
|
||||
|
/// <param name="route"></param>
|
||||
|
/// <returns></returns>
|
||||
|
private async Task<List<TransferLogEditInput>> BuildTransferLogsAsync(TransferLibNote note, EnumTransferRoute route) |
||||
|
{ |
||||
|
var transferLogs = new List<TransferLogEditInput>(); |
||||
|
|
||||
|
foreach (var detail in note.Details) |
||||
|
{ |
||||
|
//var transferLog = ObjectMapper.Map<TransferLibNoteDetail, TransferLogEditInput>(detail);
|
||||
|
//0416修改
|
||||
|
TransferLogEditInput transferLog = new TransferLogEditInput(); |
||||
|
//transferLog.TransferNumber = "";
|
||||
|
transferLog.FromPackingCode = detail.HandledFromPackingCode; |
||||
|
transferLog.ToPackingCode = detail.HandledToPackingCode; |
||||
|
transferLog.ItemName = detail.ItemName; |
||||
|
transferLog.ItemDesc1 = detail.ItemDesc1; |
||||
|
transferLog.ItemDesc2 = detail.ItemDesc2; |
||||
|
transferLog.ItemCode = detail.ItemCode; |
||||
|
transferLog.Uom = detail.Uom; |
||||
|
transferLog.Qty = detail.HandledToQty; |
||||
|
transferLog.StdPackQty = detail.StdPackQty; |
||||
|
//transferLog.FromTransNumber = detail.FromTransNumber;
|
||||
|
transferLog.SupplierBatch = detail.HandledToSupplierBatch; |
||||
|
transferLog.ArriveDate = detail.HandledToArriveDate; |
||||
|
transferLog.ProduceDate = detail.HandledToProduceDate; |
||||
|
transferLog.ExpireDate = detail.HandledToExpireDate; |
||||
|
transferLog.FromLot = detail.HandledFromLot; |
||||
|
transferLog.FromStatus = detail.Status; |
||||
|
transferLog.FromWarehouseCode = detail.HandledFromWarehouseCode; |
||||
|
transferLog.FromLocationCode = detail.HandledFromLocationCode; |
||||
|
transferLog.FromLocationArea = detail.HandledFromLocationArea; |
||||
|
transferLog.FromLocationGroup = detail.HandledFromLocationGroup; |
||||
|
transferLog.FromLocationErpCode = detail.HandledFromLocationErpCode; |
||||
|
transferLog.FromContainerCode = detail.HandledFromContainerCode; |
||||
|
//transferLog.ToTransNumber = detail.ToTransNumber;
|
||||
|
transferLog.ToLot = detail.HandledToLot; |
||||
|
transferLog.ToStatus = detail.Status; |
||||
|
transferLog.ToWarehouseCode = detail.HandledToWarehouseCode; |
||||
|
transferLog.ToLocationCode = detail.HandledToLocationCode; |
||||
|
transferLog.ToLocationArea = detail.HandledToLocationArea; |
||||
|
transferLog.ToLocationGroup = detail.HandledToLocationGroup; |
||||
|
transferLog.ToLocationErpCode = detail.HandledToLocationErpCode; |
||||
|
transferLog.ToContainerCode = detail.HandledToContainerCode; |
||||
|
transferLog.TransType = EnumTransType.TransferLib; |
||||
|
transferLog.TransSubType = EnumTransSubType.None; |
||||
|
//transferLog.ActiveDate = detail.ActiveDate;
|
||||
|
//transferLog.TransferTime = detail.TransferTime;
|
||||
|
transferLog.Worker = note.Worker; |
||||
|
transferLog.JobNumber = note.JobNumber; |
||||
|
transferLog.DocNumber = note.Number; |
||||
|
transferLog.TenantId = detail.TenantId; |
||||
|
transferLog.Remark = detail.Remark; |
||||
|
|
||||
|
var fromLocation = await _locationAppService.GetByCodeAsync(detail.HandledFromLocationCode).ConfigureAwait(false); |
||||
|
var toLocation = await _locationAppService.GetByCodeAsync(detail.HandledToLocationCode).ConfigureAwait(false); |
||||
|
var transferOnTheWay = await _locationAppService.GetFirstByTypeAsync(EnumLocationType.TRANSPORT).ConfigureAwait(false); |
||||
|
|
||||
|
switch (route) |
||||
|
{ |
||||
|
case EnumTransferRoute.SourceToOnTheWay: |
||||
|
transferLog.FromLocationCode = fromLocation.Code; |
||||
|
transferLog.FromLocationArea = fromLocation.AreaCode; |
||||
|
transferLog.FromLocationErpCode = fromLocation.ErpLocationCode; |
||||
|
transferLog.FromLocationGroup = fromLocation.LocationGroupCode; |
||||
|
|
||||
|
transferLog.ToLocationCode = transferOnTheWay.Code; |
||||
|
transferLog.ToLocationArea = transferOnTheWay.AreaCode; |
||||
|
transferLog.ToLocationErpCode = transferOnTheWay.ErpLocationCode; |
||||
|
transferLog.ToLocationGroup = transferOnTheWay.LocationGroupCode; |
||||
|
break; |
||||
|
case EnumTransferRoute.OnTheWayToDestination: |
||||
|
transferLog.FromLocationCode = transferOnTheWay.Code; |
||||
|
transferLog.FromLocationArea = transferOnTheWay.AreaCode; |
||||
|
transferLog.FromLocationErpCode = transferOnTheWay.ErpLocationCode; |
||||
|
transferLog.FromLocationGroup = transferOnTheWay.LocationGroupCode; |
||||
|
|
||||
|
transferLog.ToLocationCode = toLocation.Code; |
||||
|
transferLog.ToLocationArea = toLocation.AreaCode; |
||||
|
transferLog.ToLocationErpCode = toLocation.ErpLocationCode; |
||||
|
transferLog.ToLocationGroup = toLocation.LocationGroupCode; |
||||
|
break; |
||||
|
case EnumTransferRoute.SourceToDestination: |
||||
|
transferLog.FromLocationCode = fromLocation.Code; |
||||
|
transferLog.FromLocationArea = fromLocation.AreaCode; |
||||
|
transferLog.FromLocationErpCode = fromLocation.ErpLocationCode; |
||||
|
transferLog.FromLocationGroup = fromLocation.LocationGroupCode; |
||||
|
|
||||
|
transferLog.ToLocationCode = toLocation.Code; |
||||
|
transferLog.ToLocationArea = toLocation.AreaCode; |
||||
|
transferLog.ToLocationErpCode = toLocation.ErpLocationCode; |
||||
|
transferLog.ToLocationGroup = toLocation.LocationGroupCode; |
||||
|
break;; |
||||
|
default: |
||||
|
throw new ArgumentOutOfRangeException(nameof(route), route, null); |
||||
|
} |
||||
|
|
||||
|
transferLog.TransType = TransType; |
||||
|
transferLog.TransSubType = Enum.Parse<EnumTransSubType>(note.Type); |
||||
|
transferLog.Worker = note.Worker; |
||||
|
transferLog.DocNumber = note.Number; |
||||
|
transferLog.JobNumber = note.JobNumber; |
||||
|
|
||||
|
transferLogs.Add(transferLog); |
||||
|
} |
||||
|
|
||||
|
return transferLogs; |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
|
Loading…
Reference in new issue