Exemplo n.º 1
0
 /// <summary>
 /// Успешная обработка клиента.
 /// </summary>
 public TicketItem SuccessfulHandling()
 {
     _loggerCashierInfo.Info($"Команда от кассира: \"SuccessfulHandling (Успешная обработка клиента.)\"  Id= {Id}  NameTicket= {(CurrentTicket != null ? CurrentTicket.Prefix + CurrentTicket.NumberElement.ToString("000") : string.Empty)}");//LOG
     PreviousTicket = CurrentTicket;
     CurrentTicket  = null;
     return(CurrentTicket);
 }
Exemplo n.º 2
0
        /// <summary>
        /// Извлекли 1-ый элемент из очереди и сделали его текущим обрабатываемым (CurrentTicket)
        /// </summary>
        public void StartHandlingSuccessful()
        {
            //Ответ на Отправка синхронизации билета.
            if (CurrentTicket != null)
            {
                CurrentTicket.CashboxId = Id;
                CurrentTicket.CountTryHandling++;
                _loggerCashierInfo.Info($"Команда от кассира [КОНЕЦ ТРАНЗАЦИИ]: \"SuccessfulStartHandling (Ответ на Отправка синхронизации билета)\"  Id= {Id}  NameTicket= {(CurrentTicket != null ? CurrentTicket.Prefix + CurrentTicket.NumberElement.ToString("000") : string.Empty)}");//LOG
                return;
            }

            //Если внутреняя очередь не пуста, работаем с ней
            if (_internalQueueTicket != null && _internalQueueTicket.Any())
            {
                var newTicket = _internalQueueTicket.Dequeue();
                newTicket.CashboxId = Id;
                CurrentTicket       = newTicket;
                CurrentTicket.CountTryHandling++;
                _loggerCashierInfo.Info($"Команда от кассира [КОНЕЦ ТРАНЗАЦИИ]: \"SuccessfulStartHandling (внутреняя очередь)\"  Id= {Id}  NameTicket= {(CurrentTicket != null ? CurrentTicket.Prefix + CurrentTicket.NumberElement.ToString("000") : string.Empty)}");//LOG
                return;
            }

            //Работаем с внешней очередью
            if (!_queueTicket.IsEmpty && CurrentTicket == null)
            {
                TicketItem newTicket = _queueTicket.DequeueByPriority(this);
                if (newTicket != null)
                {
                    newTicket.CashboxId = Id;
                    CurrentTicket       = newTicket;
                    CurrentTicket.CountTryHandling++;
                    _loggerCashierInfo.Info($"Команда от кассира [КОНЕЦ ТРАНЗАЦИИ]: \"SuccessfulStartHandling (Работаем с внешней очередью)\"  Id= {Id}  NameTicket= {(CurrentTicket != null ? CurrentTicket.Prefix + CurrentTicket.NumberElement.ToString("000") : string.Empty)}");//LOG
                }
            }
        }
Exemplo n.º 3
0
 public void DisconectHandling()
 {
     if (CurrentTicket != null)
     {
         _queueTicket.Enqueue(CurrentTicket);
         PreviousTicket = CurrentTicket;
         CurrentTicket  = null;
     }
 }
 /// <summary>
 /// Добавить элемент в очередь, по приориету.
 /// </summary>
 public void Enqueue(TicketItem item)
 {
     lock (_locker)
     {
         var items = new List <TicketItem>(Queue)
         {
             item
         };
         var ordered = items.OrderByDescending(t => t.Priority).ThenBy(t => t.AddedTime);
         Queue = new ConcurrentQueue <TicketItem>(ordered);
         OnPropertyChanged("QueuePriority");
     }
 }
Exemplo n.º 5
0
        /// <summary>
        /// Клиент не обрабаотанн. Увеличиваем счетчик попыток обработки.
        /// Не обработанного клиента добавляем в конец очереди.
        /// </summary>
        public TicketItem ErrorHandling()
        {
            if (CurrentTicket == null)
            {
                return(null);
            }

            CurrentTicket.CashboxId = null;
            CurrentTicket.AddedTime = DateTime.Now;
            if (CurrentTicket?.CountTryHandling < _maxCountTryHandin)
            {
                _queueTicket.Enqueue(CurrentTicket);
            }

            _loggerCashierInfo.Info($"Команда от кассира: \"ErrorHandling (Клиент не обрабаотанн.)\"  Id= {Id}    CountTryHandling= {CurrentTicket?.CountTryHandling}  NameTicket= {(CurrentTicket != null ? CurrentTicket.Prefix + CurrentTicket.NumberElement.ToString("000") : string.Empty)}");//LOG
            PreviousTicket = CurrentTicket;
            CurrentTicket  = null;
            return(CurrentTicket);
        }
Exemplo n.º 6
0
 /// <summary>
 /// Добавить перенаправленный билет
 /// </summary>
 public void AddRedirectedTicket(TicketItem ticket)
 {
     _loggerCashierInfo.Info($"Команда от кассира: \"AddRedirectedTicket (Добавить перенаправленный билет.)\"  Id= {Id}  NameTicket= {(CurrentTicket != null ? CurrentTicket.Prefix + CurrentTicket.NumberElement.ToString("000") : string.Empty)}");//LOG
     _internalQueueTicket.Enqueue(ticket);
 }