TranspondCityNotifyHandler.cs 3.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788
  1. using DotNetCore.CAP;
  2. using Hotline.EventBus;
  3. using Hotline.Orders;
  4. using Hotline.Orders.Notifications;
  5. using Hotline.OrderTranspond;
  6. using Hotline.Share.Dtos.Order;
  7. using Hotline.Share.Enums.Order;
  8. using MapsterMapper;
  9. using MediatR;
  10. using Microsoft.Extensions.DependencyInjection;
  11. using Microsoft.Extensions.Logging;
  12. using System;
  13. using Hotline.DI;
  14. using XF.Domain.Repository;
  15. namespace Hotline.Application.Orders.Handles.Order
  16. {
  17. // [Injection(AppScopes = EAppScope.YiBin)]
  18. public class TranspondCityNotifyHandler : INotificationHandler<OrderStartWorkflowNotify>
  19. {
  20. private readonly IMapper _mapper;
  21. private readonly ILogger<TranspondCityNotifyHandler> _logger;
  22. private readonly ICapPublisher _capPublisher;
  23. private readonly IOrderRepository _orderRepository;
  24. private readonly IRepository<TranspondCityRawData> _transpondCityRawDataRepository;
  25. /// <summary>
  26. ///
  27. /// </summary>
  28. /// <param name="mapper"></param>
  29. /// <param name="capPublisher"></param>
  30. /// <param name="orderRepository"></param>
  31. /// <param name="transpondCityRawDataRepository"></param>
  32. public TranspondCityNotifyHandler(
  33. IMapper mapper,
  34. ILogger<TranspondCityNotifyHandler> logger,
  35. ICapPublisher capPublisher,
  36. IOrderRepository orderRepository,
  37. IRepository<TranspondCityRawData> transpondCityRawDataRepository)
  38. {
  39. _mapper = mapper;
  40. _logger = logger;
  41. _capPublisher = capPublisher;
  42. _orderRepository = orderRepository;
  43. _transpondCityRawDataRepository = transpondCityRawDataRepository;
  44. }
  45. /// <summary>
  46. ///
  47. /// </summary>
  48. /// <param name="notification"></param>
  49. /// <param name="cancellationToken"></param>
  50. /// <returns></returns>
  51. public async Task Handle(OrderStartWorkflowNotify notification, CancellationToken cancellationToken)
  52. {
  53. try
  54. {
  55. var id = notification.Id;
  56. var order = await _orderRepository.GetAsync(id, cancellationToken);
  57. if (order != null)
  58. {
  59. //是否市州互转
  60. if (order.Transpond.HasValue && order.Transpond.Value)
  61. {
  62. var orderDto = _mapper.Map<OrderDto>(order);
  63. await _capPublisher.PublishAsync(Share.Mq.EventNames.HotlineOrderTranspondCity, orderDto);
  64. //保存本地数据
  65. TranspondCityRawData cityRawData = new TranspondCityRawData
  66. {
  67. OrderCode = order.No,
  68. TransferOutTime = DateTime.Now,
  69. CityName = order.TranspondCityName,
  70. Direction = ETranspondDirection.Out
  71. };
  72. await _transpondCityRawDataRepository.AddAsync(cityRawData, cancellationToken);
  73. }
  74. }
  75. }
  76. catch (Exception e)
  77. {
  78. _logger.LogError(e.Message);
  79. throw;
  80. }
  81. }
  82. }
  83. }