AnsweredVisitorToExtNotificationHandler.cs 2.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859
  1. using Hotline.Caches;
  2. using Hotline.CallCenter.Calls;
  3. using Hotline.Realtimes;
  4. using Hotline.Share.Enums.CallCenter;
  5. using Hotline.Share.Notifications;
  6. using MediatR;
  7. namespace Hotline.Application.Handlers.CallCenter.FlowControl
  8. {
  9. public class AnsweredVisitorToExtNotificationHandler:INotificationHandler<AnsweredVisitorToExtNotification>
  10. {
  11. private readonly ICallRepository _callRepository;
  12. private readonly ICallDetailRepository _callDetailRepository;
  13. private readonly IUserCacheManager _userCacheManager;
  14. private readonly IRealtimeService _realtimeService;
  15. public AnsweredVisitorToExtNotificationHandler(ICallRepository callRepository, ICallDetailRepository callDetailRepository,IUserCacheManager userCacheManager,IRealtimeService realtimeService)
  16. {
  17. _callRepository = callRepository;
  18. _callDetailRepository = callDetailRepository;
  19. _userCacheManager = userCacheManager;
  20. _realtimeService = realtimeService;
  21. }
  22. public async Task Handle(AnsweredVisitorToExtNotification notification, CancellationToken cancellationToken)
  23. {
  24. var model = await _callRepository.GetAsync(
  25. x => x.ConversationId == notification.Visitor.Id &&
  26. x.FromNo == notification.Visitor.From && x.CreationTime >= DateTime.Now.AddHours(-2), cancellationToken);
  27. var workModel = _userCacheManager.GetWorkByTel(notification.TelNo);
  28. if (model != null)
  29. {
  30. model.CallStatus = ECallStatus.Answered;
  31. //model.ToNo = notification.TelNo;
  32. model.AnsweredTime = DateTime.Now;
  33. model.UserId = workModel.UserId;
  34. model.UserName = workModel.UserName;
  35. await _callRepository.UpdateAsync(model, cancellationToken);
  36. var detail = new CallDetail()
  37. {
  38. CallId = model.Id,
  39. CallStatus = ECallStatus.Answered,
  40. OMCallId = notification.Visitor.CallId,
  41. ConversationId = notification.Visitor.Id,
  42. EventName = notification.Attribute,
  43. AnswerNo = notification.TelNo,
  44. FromNo = notification.Visitor.From,
  45. ToNo = notification.Visitor.To,
  46. };
  47. await _callDetailRepository.AddAsync(detail, cancellationToken);
  48. //调用业务通知 通知前端
  49. await _realtimeService.AnsweredAsync(workModel.UserId, new Share.Dtos.Realtime.AnsweredDto() { Id=model.Id,From = notification.Visitor.From,To = notification.TelNo }, cancellationToken);
  50. }
  51. }
  52. }
  53. }