1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283 |
- using CallCenter.Notifications;
- using CallCenter.Calls;
- using CallCenter.Share.Enums;
- using MediatR;
- using CallCenter.Tools;
- namespace CallCenter.Application.Handlers
- {
- public class RingExtToOuterNotificationHandler:INotificationHandler<RingExtToOuterNotification>
- {
- private readonly ICallRepository _callRepository;
- private readonly ICallDetailRepository _callDetailRepository;
- public RingExtToOuterNotificationHandler(ICallRepository callRepository, ICallDetailRepository callDetailRepository)
- {
- _callRepository = callRepository;
- _callDetailRepository = callDetailRepository;
- }
- public async Task Handle(RingExtToOuterNotification notification, CancellationToken cancellationToken)
- {
- var model = await _callRepository.GetAsync(x =>
- x.FromNo == notification.TelNo && x.ToNo == notification.Outer.To && x.CreationTime >=DateTime.Now.AddHours(-2),true,x=>x.CreationTime, cancellationToken);
- if (model==null)
- {
- model = await _callRepository.GetAsync(
- x => x.ConversationId == notification.Outer.Id && x.ToNo == notification.Outer.To &&
- x.Trunk == notification.Outer.Trunk,true,x=>x.CreationTime, cancellationToken);
- }
-
- if (model!=null)
- {
- model.CallStatus = ECallStatus.Ring;
- await _callRepository.UpdateAsync(model, cancellationToken);
- var detail = new CallDetail()
- {
- CallId = model.Id,
- CallStatus = ECallStatus.Ring,
- EventName = notification.Attribute,
- ConversationId = notification.Outer.Id,
- OMCallId = notification.Outer.CallId,
- FromNo = notification.Outer.From,
- ToNo = notification.Outer.To,
- };
- if (string.IsNullOrEmpty(detail.FromNo))
- detail.FromNo = notification.TelNo;
- await _callDetailRepository.AddAsync(detail, cancellationToken);
- }
- else
- {
- var isp = PhoneIspTool.GetPhoneIsp(notification.Outer.To);
- string telNo = (string.IsNullOrEmpty(notification.Outer.From) || string.IsNullOrWhiteSpace(notification.Outer.From)) ? notification.TelNo : notification.Outer.From;
- var callModel = new Call()
- {
- CallStatus = ECallStatus.Ring,
- CallDirection = ECallDirection.Out,
- CallType = ECallType.ExtToOuter,
- ConversationId = notification.Outer.Id,
- FromNo = telNo,
- ToNo = notification.Outer.To,
- Trunk = notification.Outer.Trunk,
- PhoneIsp = isp
- };
- callModel.Modified();
- var callId = await _callRepository.AddAsync(callModel, cancellationToken);
- //写入明细
- var detail = new CallDetail()
- {
- CallId = callId,
- CallStatus = ECallStatus.Ring,
- ConversationId = notification.Outer.Id,
- OMCallId = notification.Outer.CallId,
- EventName = notification.Attribute,
- FromNo = notification.Outer.From,
- ToNo = notification.Outer.To,
- };
- await _callDetailRepository.AddAsync(detail, cancellationToken);
- }
- }
- }
- }
|