TranspondCityNotifyHandler.cs 2.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071
  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 XF.Domain.Repository;
  11. namespace Hotline.Application.Handlers.Order
  12. {
  13. [HandlerInject(AppScopes = EAppScope.YiBin)]
  14. public class TranspondCityNotifyHandler : INotificationHandler<TranspondCityNotify>
  15. {
  16. private readonly IMapper _mapper;
  17. private readonly ICapPublisher _capPublisher;
  18. private readonly IOrderRepository _orderRepository;
  19. private readonly IRepository<TranspondCityRawData> _transpondCityRawDataRepository;
  20. /// <summary>
  21. ///
  22. /// </summary>
  23. /// <param name="mapper"></param>
  24. /// <param name="capPublisher"></param>
  25. /// <param name="orderRepository"></param>
  26. /// <param name="transpondCityRawDataRepository"></param>
  27. public TranspondCityNotifyHandler(IMapper mapper,
  28. ICapPublisher capPublisher,
  29. IOrderRepository orderRepository,
  30. IRepository<TranspondCityRawData> transpondCityRawDataRepository)
  31. {
  32. _mapper = mapper;
  33. _capPublisher = capPublisher;
  34. _orderRepository = orderRepository;
  35. _transpondCityRawDataRepository = transpondCityRawDataRepository;
  36. }
  37. /// <summary>
  38. ///
  39. /// </summary>
  40. /// <param name="notification"></param>
  41. /// <param name="cancellationToken"></param>
  42. /// <returns></returns>
  43. public async Task Handle(TranspondCityNotify notification, CancellationToken cancellationToken)
  44. {
  45. var id = notification.Id;
  46. var order = await _orderRepository.GetAsync(id, cancellationToken);
  47. if (order != null)
  48. {
  49. //是否市州互转
  50. if (order.Transpond.HasValue && order.Transpond.Value)
  51. {
  52. var orderDto = _mapper.Map<OrderDto>(order);
  53. await _capPublisher.PublishAsync(Hotline.Share.Mq.EventNames.HotlineOrderTranspondCity, orderDto);
  54. //保存本地数据
  55. TranspondCityRawData cityRawData = new TranspondCityRawData
  56. {
  57. OrderCode = order.No,
  58. TransferOutTime = DateTime.Now,
  59. CityName = order.TranspondCityName,
  60. Direction = ETranspondDirection.Out
  61. };
  62. await _transpondCityRawDataRepository.AddAsync(cityRawData, cancellationToken);
  63. }
  64. }
  65. }
  66. }
  67. }