NextStepHandler.cs 3.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697
  1. using DotNetCore.CAP;
  2. using Hotline.Application.FlowEngine;
  3. using Hotline.FlowEngine.Notifications;
  4. using Hotline.FlowEngine.WorkflowModules;
  5. using Hotline.FlowEngine.Workflows;
  6. using Hotline.KnowledgeBase;
  7. using Hotline.Orders;
  8. using Hotline.Repository.SqlSugar.Orders;
  9. using Hotline.Settings;
  10. using Hotline.Share.Dtos.FlowEngine.Workflow;
  11. using Hotline.Share.Dtos.Order;
  12. using Hotline.Share.Enums.Order;
  13. using Hotline.Share.Mq;
  14. using MapsterMapper;
  15. using MediatR;
  16. using Microsoft.Extensions.Logging;
  17. using Newtonsoft.Json;
  18. using XF.Domain.Entities;
  19. using XF.Domain.Exceptions;
  20. using XF.Domain.Repository;
  21. namespace Hotline.Application.Handlers.FlowEngine;
  22. public class NextStepHandler : INotificationHandler<NextStepNotify>
  23. {
  24. private readonly IOrderDomainService _orderDomainService;
  25. private readonly IKnowledgeDomainService _knowledgeDomainService;
  26. private readonly IOrderRepository _orderRepository;
  27. private readonly ICapPublisher _capPublisher;
  28. private readonly IMapper _mapper;
  29. private readonly ILogger<NextStepHandler> _logger;
  30. private readonly IRepository<OrderScreen> _orderScreenRepository;
  31. public NextStepHandler(
  32. IOrderDomainService orderDomainService,
  33. IKnowledgeDomainService knowledgeDomainService,
  34. IOrderRepository orderRepository,
  35. ICapPublisher capPublisher,
  36. IMapper mapper,
  37. ILogger<NextStepHandler> logger,
  38. IRepository<OrderScreen> orderScreenRepository)
  39. {
  40. _orderDomainService = orderDomainService;
  41. _knowledgeDomainService = knowledgeDomainService;
  42. _orderRepository = orderRepository;
  43. _capPublisher = capPublisher;
  44. _mapper = mapper;
  45. _logger = logger;
  46. _orderScreenRepository = orderScreenRepository;
  47. }
  48. /// <summary>Handles a notification</summary>
  49. /// <param name="notification">The notification</param>
  50. /// <param name="cancellationToken">Cancellation token</param>
  51. public async Task Handle(NextStepNotify notification, CancellationToken cancellationToken)
  52. {
  53. _logger.LogInformation($"收到{nameof(NextStepNotify)}, notification: {JsonConvert.SerializeObject(notification)}");
  54. var workflow = notification.Workflow;
  55. var data = notification.Dto;
  56. switch (workflow.ModuleCode)
  57. {
  58. case WorkflowModuleConsts.OrderHandle:
  59. var order = await _orderDomainService.GetOrderAsync(workflow.ExternalId, cancellationToken);
  60. order.CheckIfFiled();
  61. _mapper.Map(workflow, order);
  62. await _orderRepository.UpdateAsync(order, cancellationToken);
  63. var orderDto = _mapper.Map<OrderDto>(order);
  64. if (notification.IsCenterToOrg)
  65. await _capPublisher.PublishAsync(EventNames.HotlineOrderExpiredTimeUpdate, orderDto, cancellationToken: cancellationToken);
  66. if (notification.HandlerOrgCode.CheckIfOrgLevelIs(1))
  67. await _capPublisher.PublishAsync(EventNames.HotlineOrderLevelOneOrgHandled, new OrderFlowDto
  68. {
  69. Order = orderDto,
  70. WorkflowTrace = _mapper.Map<WorkflowTraceDto>(notification.Trace)
  71. }, cancellationToken: cancellationToken);
  72. break;
  73. case WorkflowModuleConsts.KnowledgeAdd:
  74. case WorkflowModuleConsts.KnowledgeUpdate:
  75. case WorkflowModuleConsts.KnowledgeDelete:
  76. await _knowledgeDomainService.UpdateWorkAssign(notification.FlowAssignInfo, workflow.ExternalId, cancellationToken);
  77. break;
  78. case WorkflowModuleConsts.OrderScreen:
  79. var screen = await _orderScreenRepository.GetAsync(workflow.ExternalId, cancellationToken);
  80. if (screen != null)
  81. {
  82. screen.Status = EScreenStatus.Approval;
  83. await _orderScreenRepository.UpdateAsync(screen, cancellationToken);
  84. }
  85. break;
  86. }
  87. }
  88. }