Ejemplo n.º 1
0
 public void Progress() =>
 CallStatus = CallStatus switch
 {
        private void AddRandomPhoneCall(CallCenterDbContext context, DateTime parentCallStartTime, int?parentCallId, bool needCreateRelativeCall = false)
        {
            int userId1 = _random.Next(1, 11);
            int userId2;

            do
            {
                userId2 = _random.Next(1, 11);
            } while (userId1 == userId2);

            PhoneCallStatus phoneCallStatus = (PhoneCallStatus)_random.Next(0, 5);

            DateTime startTime = parentCallStartTime - new TimeSpan(_random.Next(0, 24), _random.Next(0, 60), _random.Next(5, 60));

            PhoneCall call = new PhoneCall
            {
                Id           = _phoneCallId,
                StartTime    = startTime,
                Status       = phoneCallStatus,
                ParentCallId = parentCallId
            };

            switch (phoneCallStatus)
            {
            case PhoneCallStatus.Connected:
                call.ConnectionTime  = startTime + new TimeSpan(0, _random.Next(0, 3), _random.Next(5, 60));
                call.TerminationTime = (DateTime)call.ConnectionTime + new TimeSpan(0, _random.Next(0, 57), _random.Next(30, 60));
                break;

            default:
                call.TerminationTime = startTime + new TimeSpan(0, _random.Next(0, 5), _random.Next(30, 60));
                break;
            }

            AddPhoneCall(context, call);

            context.UserInPhoneCalls.Add(new UserInPhoneCall
            {
                PhoneCallId = _phoneCallId,
                UserId      = userId1,
                Status      = UserInPhoneStatus.Called
            });

            switch (phoneCallStatus)
            {
            case PhoneCallStatus.Dropped:
                context.UserInPhoneCalls.Add(new UserInPhoneCall
                {
                    PhoneCallId = _phoneCallId,
                    UserId      = userId2,
                    Status      = UserInPhoneStatus.Dropped
                });
                break;

            case PhoneCallStatus.Missed:
                context.UserInPhoneCalls.Add(new UserInPhoneCall
                {
                    PhoneCallId = _phoneCallId,
                    UserId      = userId2,
                    Status      = UserInPhoneStatus.Missed
                });
                break;

            case PhoneCallStatus.Connected:
                context.UserInPhoneCalls.Add(new UserInPhoneCall
                {
                    PhoneCallId = _phoneCallId,
                    UserId      = userId2,
                    Status      = UserInPhoneStatus.Accepted
                });
                break;

            case PhoneCallStatus.Error:
                context.UserInPhoneCalls.Add(new UserInPhoneCall
                {
                    PhoneCallId = _phoneCallId,
                    UserId      = userId2,
                    Status      = UserInPhoneStatus.Error
                });
                break;

            case PhoneCallStatus.ErrorAfterConnection:
                context.UserInPhoneCalls.Add(new UserInPhoneCall
                {
                    PhoneCallId = _phoneCallId,
                    UserId      = userId2,
                    Status      = UserInPhoneStatus.Error
                });
                break;

            default:
                break;
            }
            ++_phoneCallId;

            if (needCreateRelativeCall)
            {
                TimeSpan durability     = startTime - call.TerminationTime;
                TimeSpan halfDurability = new TimeSpan(durability.Hours / 2, durability.Minutes / 2, durability.Seconds / 2);
                AddRandomPhoneCall(context, startTime + halfDurability, call.Id);
            }
        }