/// <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); }
/// <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 } } }
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"); } }
/// <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); }
/// <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); }