using AutoMapper; using Kean.Domain.Wcs.Commands; using Kean.Domain.Wcs.Events; using Kean.Domain.Wcs.Repositories; using System.Threading; using System.Threading.Tasks; namespace Kean.Domain.Wcs.CommandHandlers { /// /// 接受输入命令处理程序 /// public sealed class AcceptInputCommandHandler : CommandHandler { private readonly ICommandBus _commandBus; // 命令总线 private readonly IMapper _mapper; // 模型映射 private readonly IWcsRepository _wcsRepository; // 控制仓库 /// /// 依赖注入 /// public AcceptInputCommandHandler( ICommandBus commandBus, IWcsRepository wcsRepository, IMapper mapper) { _commandBus = commandBus; _wcsRepository = wcsRepository; _mapper = mapper; } /// /// 处理程序 /// public override async Task Handle(AcceptInputCommand command, CancellationToken cancellationToken) { if (command.ValidationResult.IsValid) { var @event = _mapper.Map(command); @event.Fallback = input => Output(nameof(command.Fallback), _mapper.Map(input)); await _commandBus.Trigger(@event, cancellationToken); await _wcsRepository.RemoveInput(command.Id); } else { await _commandBus.Notify(command.ValidationResult, cancellationToken: cancellationToken); } } } }