ByeVisitorAndExtNotificationHandler.cs 2.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758
  1. using CallCenter.Caches;
  2. using CallCenter.Calls;
  3. using CallCenter.Notifications;
  4. using CallCenter.Realtimes;
  5. using CallCenter.Share.Enums;
  6. using MediatR;
  7. namespace CallCenter.Application.Handlers
  8. {
  9. public class ByeVisitorAndExtNotificationHandler:INotificationHandler<ByeVisitorAndExtNotification>
  10. {
  11. private readonly ICallRepository _callRepository;
  12. private readonly ICallDetailRepository _callDetailRepository;
  13. private readonly IRealtimeService _realtimeService;
  14. private readonly IUserCacheManager _userCacheManager;
  15. public ByeVisitorAndExtNotificationHandler(ICallRepository callRepository, ICallDetailRepository callDetailRepository,IRealtimeService realtimeService,IUserCacheManager userCacheManager)
  16. {
  17. _callRepository = callRepository;
  18. _callDetailRepository = callDetailRepository;
  19. _realtimeService = realtimeService;
  20. _userCacheManager = userCacheManager;
  21. }
  22. public async Task Handle(ByeVisitorAndExtNotification 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. if (model != null)
  28. {
  29. model.CallStatus = ECallStatus.Bye;
  30. model.EndBy = EEndBy.From;
  31. model.RingOffType = ERingOffType.Normal;
  32. await _callRepository.UpdateAsync(model, cancellationToken);
  33. var detail = new CallDetail()
  34. {
  35. CallId = model.Id,
  36. CallStatus = ECallStatus.Bye,
  37. OMCallId = notification.Visitor.CallId,
  38. ConversationId = notification.Visitor.Id,
  39. EventName = notification.Attribute,
  40. FromNo = notification.Visitor.From,
  41. ToNo = notification.Visitor.To,
  42. Recording = notification.Recording,
  43. };
  44. await _callDetailRepository.AddAsync(detail, cancellationToken);
  45. //调用业务通知 通知前端
  46. var workModel = _userCacheManager.GetWorkByTel(notification.TelNo);
  47. if (workModel!=null)
  48. {
  49. await _realtimeService.ByeAsync(workModel.UserId, new ByeDto() { Id = model.Id }, cancellationToken);
  50. }
  51. }
  52. }
  53. }
  54. }