1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859 |
- using Hotline.Caches;
- using Hotline.CallCenter.Calls;
- using Hotline.Realtimes;
- using Hotline.Share.Enums.CallCenter;
- using Hotline.Share.Notifications;
- using MediatR;
- namespace Hotline.Application.Handlers.CallCenter.FlowControl
- {
- public class AnsweredVisitorToExtNotificationHandler:INotificationHandler<AnsweredVisitorToExtNotification>
- {
- private readonly ICallRepository _callRepository;
- private readonly ICallDetailRepository _callDetailRepository;
- private readonly IUserCacheManager _userCacheManager;
- private readonly IRealtimeService _realtimeService;
- public AnsweredVisitorToExtNotificationHandler(ICallRepository callRepository, ICallDetailRepository callDetailRepository,IUserCacheManager userCacheManager,IRealtimeService realtimeService)
- {
- _callRepository = callRepository;
- _callDetailRepository = callDetailRepository;
- _userCacheManager = userCacheManager;
- _realtimeService = realtimeService;
- }
- public async Task Handle(AnsweredVisitorToExtNotification 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);
- var workModel = _userCacheManager.GetWorkByTel(notification.TelNo);
- if (model != null)
- {
- model.CallStatus = ECallStatus.Answered;
- //model.ToNo = notification.TelNo;
- model.AnsweredTime = DateTime.Now;
- model.UserId = workModel.UserId;
- model.UserName = workModel.UserName;
- await _callRepository.UpdateAsync(model, cancellationToken);
- var detail = new CallDetail()
- {
- CallId = model.Id,
- CallStatus = ECallStatus.Answered,
- OMCallId = notification.Visitor.CallId,
- ConversationId = notification.Visitor.Id,
- EventName = notification.Attribute,
- AnswerNo = notification.TelNo,
- FromNo = notification.Visitor.From,
- ToNo = notification.Visitor.To,
- };
- await _callDetailRepository.AddAsync(detail, cancellationToken);
- //调用业务通知 通知前端
- await _realtimeService.AnsweredAsync(workModel.UserId, new Share.Dtos.Realtime.AnsweredDto() { Id=model.Id,From = notification.Visitor.From,To = notification.TelNo }, cancellationToken);
- }
-
- }
- }
- }
|