EndOfAnnOuterToMenuNotificationHandler.cs 2.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253
  1. using Hotline.Caching.Interfaces;
  2. using Hotline.CallCenter.Calls;
  3. using Hotline.CallCenter.Devices;
  4. using Hotline.CallCenter.Ivrs;
  5. using Hotline.Realtimes;
  6. using Hotline.Share.Enums.CallCenter;
  7. using Hotline.Share.Notifications;
  8. using MediatR;
  9. using Microsoft.Extensions.Options;
  10. using NewRock.Sdk;
  11. namespace Hotline.Application.Handlers.CallCenter.FlowControl
  12. {
  13. public class EndOfAnnOuterToMenuNotificationHandler:BaseHandler,INotificationHandler<EndOfAnnOuterToMenuNotification>
  14. {
  15. private readonly ICallRepository _callRepository;
  16. private readonly ICallDetailRepository _callDetailRepository;
  17. private readonly IIvrDomainService _ivrDomainService;
  18. public EndOfAnnOuterToMenuNotificationHandler(ICallRepository callRepository, ICallDetailRepository callDetailRepository, IIvrDomainService ivrDomainService, INewRockClient newRockClient, IOptionsSnapshot<CallCenterConfiguration> options,ICallCacheManager callCacheManager,IRealtimeService realtimeService) : base(newRockClient, options,callRepository,callCacheManager, realtimeService)
  19. {
  20. _callRepository = callRepository;
  21. _callDetailRepository = callDetailRepository;
  22. _ivrDomainService = ivrDomainService;
  23. }
  24. public async Task Handle(EndOfAnnOuterToMenuNotification notification, CancellationToken cancellationToken)
  25. {
  26. var model =await _callRepository.GetAsync(
  27. x => x.ConversationId == notification.Outer.Id && x.FromNo == notification.Outer.From &&
  28. x.ToNo == notification.Outer.To && x.CreationTime >= DateTime.Now.AddHours(-2),true,x=>x.CreationTime, cancellationToken);
  29. if (model!=null)
  30. {
  31. model.CallStatus = ECallStatus.EndOfAnn;
  32. await _callRepository.UpdateAsync(model,cancellationToken);
  33. var detail = new CallDetail()
  34. {
  35. CallId = model.Id,
  36. CallStatus = ECallStatus.EndOfAnn,
  37. OMCallId = notification.Outer.CallId,
  38. ConversationId = notification.Outer.Id,
  39. EventName = notification.Attribute,
  40. FromNo = notification.Outer.From,
  41. ToNo = notification.Outer.To
  42. };
  43. await _callDetailRepository.AddAsync(detail, cancellationToken);
  44. var runModel = await _ivrDomainService.GetVoiceEndAnswerAsync(notification.MenuId,cancellationToken);
  45. await HandlerIvr(runModel, model, cancellationToken);
  46. }
  47. }
  48. }
  49. }