8 changed files with 196 additions and 13 deletions
@ -0,0 +1,13 @@ |
|||||
|
using System; |
||||
|
using System.Collections.Generic; |
||||
|
using System.Linq; |
||||
|
using System.Text; |
||||
|
using System.Threading.Tasks; |
||||
|
|
||||
|
namespace Win_in.Sfs.Shared.Domain.Shared.Enums.Store.Types; |
||||
|
public enum EnumMesType |
||||
|
{ |
||||
|
MesFreeze=10001, |
||||
|
MesUnFreeze=10002, |
||||
|
MesUnQualified=10003 |
||||
|
} |
@ -0,0 +1,159 @@ |
|||||
|
using System; |
||||
|
using System.Collections.Generic; |
||||
|
using System.Linq; |
||||
|
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.Domain; |
||||
|
using Win_in.Sfs.Wms.Store.Event.Transaction; |
||||
|
using Win_in.Sfs.Wms.Store.Notes.IssueNotes; |
||||
|
|
||||
|
namespace Win_in.Sfs.Wms.Store.Event.Transactions; |
||||
|
|
||||
|
public class CoatingIssueNoteEventHandler |
||||
|
: StoreInventoryEventHandlerBase |
||||
|
, ILocalEventHandler<SfsCreatedEntityEventData<CoatingIssueNote>> |
||||
|
, ILocalEventHandler<SfsCreatedEntityEventData<List<CoatingIssueNote>>> |
||||
|
, ILocalEventHandler<SfsConfirmedEntityEventData<CoatingIssueNote>> |
||||
|
{ |
||||
|
private const EnumTransType TransType = EnumTransType.Issue; |
||||
|
|
||||
|
private readonly ILocationAppService _locationAppService; |
||||
|
|
||||
|
public CoatingIssueNoteEventHandler(ILocationAppService locationAppService) |
||||
|
{ |
||||
|
_locationAppService = locationAppService; |
||||
|
} |
||||
|
|
||||
|
[UnitOfWork] |
||||
|
public virtual async Task HandleEventAsync(SfsCreatedEntityEventData<CoatingIssueNote> eventData) |
||||
|
{ |
||||
|
var entity = eventData.Entity; |
||||
|
var transferLogs = new List<TransferLogEditInput>(); |
||||
|
var route = entity.UseOnTheWayLocation |
||||
|
? EnumTransferRoute.SourceToOnTheWay |
||||
|
: EnumTransferRoute.SourceToDestination; |
||||
|
transferLogs.AddRange(await BuildTransferLogsAsync(entity, route).ConfigureAwait(false)); |
||||
|
|
||||
|
//如果是mes拉动 先发到在途
|
||||
|
if (entity.RequestType == EnumMaterialRequestType.Issue_WIP.ToString()) |
||||
|
{ |
||||
|
route = EnumTransferRoute.SourceToOnTheWay; |
||||
|
} |
||||
|
|
||||
|
await TransferLogAppService.AddManyAsync(transferLogs).ConfigureAwait(false); |
||||
|
} |
||||
|
|
||||
|
[UnitOfWork] |
||||
|
public virtual async Task HandleEventAsync(SfsCreatedEntityEventData<List<CoatingIssueNote>> eventData) |
||||
|
{ |
||||
|
var entities = eventData.Entity; |
||||
|
var transferLogs = new List<TransferLogEditInput>(); |
||||
|
//如果要做库存事务汇总,可以修改此处
|
||||
|
foreach (var CoatingIssueNote in entities) |
||||
|
{ |
||||
|
var route = CoatingIssueNote.UseOnTheWayLocation |
||||
|
? EnumTransferRoute.SourceToOnTheWay |
||||
|
: EnumTransferRoute.SourceToDestination; |
||||
|
transferLogs.AddRange(await BuildTransferLogsAsync(CoatingIssueNote, route).ConfigureAwait(false)); |
||||
|
} |
||||
|
|
||||
|
await TransferLogAppService.AddManyAsync(transferLogs).ConfigureAwait(false); |
||||
|
} |
||||
|
|
||||
|
[UnitOfWork] |
||||
|
|
||||
|
public virtual async Task HandleEventAsync(SfsConfirmedEntityEventData<CoatingIssueNote> 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); |
||||
|
|
||||
|
} |
||||
|
|
||||
|
private async Task<List<TransferLogEditInput>> BuildTransferLogsAsync(CoatingIssueNote CoatingIssueNote, EnumTransferRoute route) |
||||
|
{ |
||||
|
var transferLogs = new List<TransferLogEditInput>(); |
||||
|
foreach (var detail in CoatingIssueNote.Details.Where(detail => detail.Qty != 0)) |
||||
|
{ |
||||
|
var transferLog = ObjectMapper.Map<CoatingIssueNoteDetail, TransferLogEditInput>(detail); |
||||
|
|
||||
|
LocationDTO fromLocationDTO = null; |
||||
|
LocationDTO toLocationDTO = null; |
||||
|
|
||||
|
if (CoatingIssueNote.UseOnTheWayLocation) |
||||
|
{ |
||||
|
var location = await _locationAppService.GetByCodeAsync(detail.OnTheWayLocationCode).ConfigureAwait(false); |
||||
|
switch (route) |
||||
|
{ |
||||
|
case EnumTransferRoute.SourceToOnTheWay: |
||||
|
fromLocationDTO = await _locationAppService.GetByCodeAsync(detail.FromLocationCode).ConfigureAwait(false); |
||||
|
|
||||
|
toLocationDTO = await _locationAppService.GetByCodeAsync(detail.OnTheWayLocationCode).ConfigureAwait(false); |
||||
|
break; |
||||
|
case EnumTransferRoute.OnTheWayToDestination: |
||||
|
fromLocationDTO = await _locationAppService.GetByCodeAsync(detail.OnTheWayLocationCode).ConfigureAwait(false); |
||||
|
|
||||
|
toLocationDTO = await _locationAppService.GetByCodeAsync(detail.ToLocationCode).ConfigureAwait(false); |
||||
|
|
||||
|
await RemovePackingCodeAndContainerCodeAndLotAsync(transferLog).ConfigureAwait(false); |
||||
|
break; |
||||
|
case EnumTransferRoute.SourceToDestination: |
||||
|
default: |
||||
|
throw new ArgumentOutOfRangeException(nameof(route), route, null); |
||||
|
} |
||||
|
} |
||||
|
else |
||||
|
{ |
||||
|
fromLocationDTO = await _locationAppService.GetByCodeAsync(detail.FromLocationCode).ConfigureAwait(false); |
||||
|
toLocationDTO = await _locationAppService.GetByCodeAsync(detail.ToLocationCode).ConfigureAwait(false); |
||||
|
} |
||||
|
|
||||
|
transferLog.FromLocationCode = fromLocationDTO.Code; |
||||
|
transferLog.FromLocationArea = fromLocationDTO.AreaCode; |
||||
|
transferLog.FromLocationErpCode = fromLocationDTO.ErpLocationCode; |
||||
|
transferLog.FromLocationGroup = fromLocationDTO.LocationGroupCode; |
||||
|
|
||||
|
transferLog.ToLocationCode = toLocationDTO.Code; |
||||
|
transferLog.ToLocationArea = toLocationDTO.AreaCode; |
||||
|
transferLog.ToLocationErpCode = toLocationDTO.ErpLocationCode; |
||||
|
transferLog.ToLocationGroup = toLocationDTO.LocationGroupCode; |
||||
|
transferLog.TransSubType = Enum.Parse<EnumTransSubType>(CoatingIssueNote.RequestType); |
||||
|
transferLog.TransType = TransType; |
||||
|
transferLog.DocNumber = CoatingIssueNote.Number; |
||||
|
transferLog.JobNumber = CoatingIssueNote.JobNumber; |
||||
|
|
||||
|
transferLogs.Add(transferLog); |
||||
|
} |
||||
|
|
||||
|
return transferLogs; |
||||
|
} |
||||
|
|
||||
|
private async Task RemovePackingCodeAndContainerCodeAndLotAsync(TransferLogEditInput transferLogCreateInput) |
||||
|
{ |
||||
|
transferLogCreateInput.ToPackingCode = ""; |
||||
|
transferLogCreateInput.ToLot = ""; |
||||
|
transferLogCreateInput.ToContainerCode = ""; |
||||
|
|
||||
|
transferLogCreateInput.FromPackingCode = ""; |
||||
|
transferLogCreateInput.FromLot = ""; |
||||
|
transferLogCreateInput.FromContainerCode = ""; |
||||
|
|
||||
|
|
||||
|
} |
||||
|
|
||||
|
} |
Loading…
Reference in new issue