12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061 |
- using CallCenter.Caches;
- using CallCenter.Calls;
- using CallCenter.Notifications;
- using CallCenter.Realtimes;
- using CallCenter.Share.Enums;
- using MediatR;
- namespace CallCenter.Application.Handlers
- {
- public class RingVisitorToExtNotificationHandler:INotificationHandler<RingVisitorToExtNotification>
- {
- private readonly ICallRepository _callRepository;
- private readonly ICallDetailRepository _callDetailRepository;
- private readonly IRealtimeService _realtimeService;
- private readonly IUserCacheManager _userCacheManager;
- private readonly ICallCacheManager _callCacheManager;
- public RingVisitorToExtNotificationHandler(ICallRepository callRepository, ICallDetailRepository callDetailRepository,IRealtimeService realtimeService, IUserCacheManager userCacheManager, ICallCacheManager callCacheManager)
- {
- _callRepository = callRepository;
- _callDetailRepository = callDetailRepository;
- _realtimeService = realtimeService;
- _userCacheManager = userCacheManager;
- _callCacheManager = callCacheManager;
- }
- public async Task Handle(RingVisitorToExtNotification notification, CancellationToken cancellationToken)
- {
- var model = await _callRepository.GetAsync(
- x => x.ConversationId == notification.Visitor.Id &&
- x.FromNo == notification.Visitor.From && x.CreationTime>=DateTime.Now.AddHours(-2), cancellationToken);
- if (model!=null)
- {
- model.CallStatus = ECallStatus.Ring;
- model.OutGroupTime = DateTime.Now;
- model.InSeaTime = DateTime.Now;
- await _callRepository.UpdateAsync(model, cancellationToken);
- var detail = new CallDetail()
- {
- CallId = model.Id,
- CallStatus = ECallStatus.Ring,
- OMCallId = notification.Visitor.CallId,
- ConversationId = notification.Visitor.Id,
- EventName = notification.Attribute,
- FromNo = notification.Visitor.From,
- ToNo = notification.Visitor.To
- };
- await _callDetailRepository.AddAsync(detail, cancellationToken);
- //处理排队缓存数据
- _callCacheManager.RemoveCallCache(model.Id);
- //调用业务弹屏 通知前端
- var workModel = _userCacheManager.GetWorkByTel(notification.TelNo);
- if (workModel!=null) {
- await _realtimeService.RingAsync(workModel.UserId, new RingDto() { CallType = ECallType.VisitorCallIn, From = notification.Visitor.From, To = notification.Visitor.To, Id = model.Id, ConversationId = notification.Visitor.Id },cancellationToken);
- }
- }
- }
- }
- }
|