using Hotline.CallCenter.Calls; using Hotline.Share.Enums.CallCenter; using Hotline.Share.Notifications.NewRockCallCenter; using MediatR; namespace Hotline.Application.Handlers.CallCenter.FlowControl { public class ByeOuterAndOuterNotificationHandler:INotificationHandler { private readonly ICallRepository _callRepository; private readonly ICallDetailRepository _callDetailRepository; public ByeOuterAndOuterNotificationHandler(ICallRepository callRepository, ICallDetailRepository callDetailRepository) { _callRepository = callRepository; _callDetailRepository = callDetailRepository; } public async Task Handle(ByeOuterAndOuterNotification notification, CancellationToken cancellationToken) { var model = await _callRepository.GetAsync(x => x.ConversationId == notification.Outer.Id && x.FromNo == notification.Outer.From && x.ToNo == notification.Outer.To && x.CreationTime >= DateTime.Now.AddHours(-2),true,x=>x.CreationTime,cancellationToken); if (model!=null) { model.CallStatus = ECallStatus.Bye; model.RingOffType = ERingOffType.Normal; model.ByeTime = DateTime.Now; await _callRepository.UpdateAsync(model, cancellationToken); var detail = new CallDetail() { CallId = model.Id, CallStatus = ECallStatus.Answered, ConversationId = notification.Outer.Id, OMCallId = notification.Outer.CallId, EventName = notification.Attribute, AnswerNo = notification.Outer.To, FromNo = notification.Outer.From, ToNo = notification.Outer.To, Recording = notification.Recording, }; await _callDetailRepository.AddAsync(detail, cancellationToken); } } } }