OrderScreenStartWorkflowHandler.cs 1.4 KB

12345678910111213141516171819202122232425262728293031323334353637
  1. using Hotline.FlowEngine.Notifications;
  2. using Hotline.FlowEngine.WorkflowModules;
  3. using Hotline.Orders;
  4. using MediatR;
  5. namespace Hotline.Application.Orders.Handles.OrderScreen;
  6. public class OrderScreenStartWorkflowHandler : INotificationHandler<StartWorkflowNotify>
  7. {
  8. private readonly IOrderScreenRepository _orderScreenRepository;
  9. public OrderScreenStartWorkflowHandler(
  10. IOrderScreenRepository orderScreenRepository
  11. )
  12. {
  13. _orderScreenRepository = orderScreenRepository;
  14. }
  15. /// <summary>Handles a notification</summary>
  16. /// <param name="notification">The notification</param>
  17. /// <param name="cancellationToken">Cancellation token</param>
  18. public async Task Handle(StartWorkflowNotify notification, CancellationToken cancellationToken)
  19. {
  20. if (notification.Workflow.ModuleCode == WorkflowModuleConsts.OrderScreen)
  21. {
  22. var workflow = notification.Workflow;
  23. var screen = await _orderScreenRepository.Queryable().Includes(x => x.Order)
  24. .Where(x => x.Id == workflow.ExternalId).FirstAsync(cancellationToken);
  25. if (screen != null)
  26. {
  27. screen.WorkflowId = workflow.Id;
  28. screen.Flowed(workflow.FlowedUserIds, workflow.FlowedOrgIds, workflow.HandlerUsers, workflow.HandlerOrgs);
  29. await _orderScreenRepository.UpdateAsync(screen, cancellationToken);
  30. }
  31. }
  32. }
  33. }