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