[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Как выставить очередность
Uchenik
Доброго времени суток, пишу систему регистрации заявок в отдел тех.поддержки кое-что уже сделано, застрял в тупике вроде бы на простейшей части кода. помогите придумать что делать дальше.
в системе сделано, что при отправке формы регистрации заявки, пользователь получает её ID и имя администратора, который будет решать его проблему.
Администратор подбирается по условиям:
1. если все админы свободны, выбрать любого
2. если свободный админ только 1, выбрать его
3. если нет свободных админов, то выбрать того, который освободится раньше всех.
вот как раз с третьим пунктом и проблема. Сейчас поясню в чем конкретно проблема:
Каждый админ при получении новой заявки выставляет примерное время окончания работ по этой заявке.
Предположим что пользователь зарегистрировал заявку №5. Система проверяет кто из админов сейчас свободен, если все заняты скрипт должен узнать какой админ освободиться раньше. Например
админ1 делает заявку №1 до 13:00, админ2 делает заявку №2 до 13:10, админы ещё не знают что уже существуют заявки №3 и №4, поэтому на этих заявках не выставлено время окончания работ, как система решит кому отдать заявку №5?
alexbel2404
Может лучше выстраивать очередь из заявок и по мере освобождения админов, назначать им заявки?
exotica
Цитата
админ1 делает заявку №1 до 13:00, админ2 делает заявку №2 до 13:10, админы ещё не знают что уже существуют заявки №3 и №4, поэтому на этих заявках не выставлено время окончания работ, как система решит кому отдать заявку №5?


Не знаю как это объяснить но попробую wink.gif по результатам выше сказанного видим что админ1 закончит раньше, значит заявка №3 прикрепляется ему, с соответствующим оповещением его об этом.

Далее прилетает заявка №4. Система видит что админ1 закончит раньше, НО у него уже есть 1 заявка в очереди, и №4 переходит к админу2 и систеа ему сообщает об этом.

Далее приходит заявка №5. Так как у каждого админа есть работа Сейчас, и есть по одной заявке в очереди, То получается что приоритетом снова становится время окончания работы и заявка №5 благополучно отправляется админу1.



Но все же необходимо за каждым админом оставить право вывести таблицу Всех не выполненных заявок и в случае если он справился с работой досрочно, взять первую заявку с конца списка другого админа.

_____________
[FAQ]Регистрации пользователей, сохранение в БД
---------------------------------------------------------------------------
Выходя из ванной, вышел из нее два раза
Uchenik
exotica
мысль хорошая, но проблема в том что если админ1 получает заявку 3 а админ2 получает заявку 4, система не сможет узнать когда они закончат выполнение 3 и 4 заявки, пока админы сами не выставят время окончания работ, следовательно далеко не факт что админ1 освободится первым. Пришла в голову идея сделать примерно следующее:
первая заявка выдается случайному админу
вторая выдаётся свободному
третья и четвертая выдаются ориентируясь по времени окончания работ
например заявка 3 падает к админ2 потому-что он первый освободился, и она займёт 5 минут, а админ1 ещё с заявкой 1 возится и ещё пол часа будет возиться, поэтому 4 тоже падает к админ2 и т.д.
а все последующие будут висеть в системе как не распределенные, как только у какого-то админа статус стал free, ему падает следующая по очереди заявка
Uchenik
alexbel2404
почти так и получилось =)
redreem
пусть админы сами берут себе таски. а за простой - штрафовать.
Uchenik
redreem
почему ты так не любишь админов?
мы хорошие, честно. =)
redreem
Uchenik
smile.gif
выразился исключительно в контексте юзабильности системы smile.gif
exotica
Ну кстати да, соглашусь сredreem

Дать админам просто таблицу с имеющимися заявками. Чтоб они из нее брали работу себе ))
О каждой новой заявке уведомлять сразу обоих.
И как мне кажется это будет быстрее чем если городить автоматизацию)

_____________
[FAQ]Регистрации пользователей, сохранение в БД
---------------------------------------------------------------------------
Выходя из ванной, вышел из нее два раза
sergeiss
Цитата (exotica @ 29.10.2013 - 18:04)
Ну кстати да, соглашусь сredreem

Дать админам просто таблицу с имеющимися заявками. Чтоб они из нее брали работу себе ))
О каждой новой заявке уведомлять сразу обоих.
И как мне кажется это будет быстрее чем если городить автоматизацию)

По-моему, обычно так и делается, во всех подобных системах. Что на сайте, что в телефонной сети. Первый освободившийся оператор (администратор) жмякает кнопку типа "ответить на вызов абонента" ("взять текущую заявку") и начинает с ней работать.
И это единственный разумный алгоритм. Если надо, то могу пояснить, почему он единственный.

_____________
* Хэлп по PHP
* Описалово по JavaScript
* Хэлп и СУБД для PostgreSQL

* Обучаю PHP, JS, вёрстке. Интерактивно и качественно. За разумные деньги.

* "накапливаю умение телепатии" (С) и "гуглю за ваш счет" (С)

user posted image
exotica
Цитата
И это единственный разумный алгоритм. Если надо, то могу пояснить, почему он единственный.

Продолжай пожалуйста... интересно smile.gif большая часть же стремиться к автоматизации большенства действий, дак всетаки почему ?

_____________
[FAQ]Регистрации пользователей, сохранение в БД
---------------------------------------------------------------------------
Выходя из ванной, вышел из нее два раза
mvg
Реализовать все с помощью очередей и не думать какой номер заявки какому админу назначить.

Очередь админов и очередь заявок. Пересечение очередей - клиент получил результат обработки своей заявки!
sergeiss
Цитата (exotica @ 30.10.2013 - 05:17)
большая часть же стремиться к автоматизации большенства действий, дак всетаки почему ?

Если честно, то не понял твою мысль smile.gif

А свою мысль поясню. Вот эту вот: "И это единственный разумный алгоритм. Если надо, то могу пояснить, почему он единственный.".
Речь о чем идет в теме? О том, как наиболее оптимально разруливать ожидание в очереди заявок, например, в контактном центре (или на сайте - не суть важно).
Основная задача какая тут? Минимизировать время ожидания клиента от момента поступления звонка до начала общения с ним.
У автора темы было изначально сказано о том, что он организует N очередей, по количеству операторов. Ты предложил перекидывать "очередников" по мере освобождения в одной из очередей.
Я же сказал, что незачем городить огород, а надо сделать единую очередь. Ьипа стэка FIFO - "First In - First Out". Это то, что я описал в этой фразе:
Цитата (sergeiss @ 29.10.2013 - 19:18)
Первый освободившийся оператор (администратор) жмякает кнопку типа "ответить на вызов абонента" ("взять текущую заявку") и начинает с ней работать.


Любые другие алгоритмы будут неоптимальны. Либо юзеры будут долго ждать, либо придется как-то оптимизировать использование этих N очередей. И в итоге получишь что-то типа того, что я описал. Так не лучше ли с самого начала делать правильно?

_____________
* Хэлп по PHP
* Описалово по JavaScript
* Хэлп и СУБД для PostgreSQL

* Обучаю PHP, JS, вёрстке. Интерактивно и качественно. За разумные деньги.

* "накапливаю умение телепатии" (С) и "гуглю за ваш счет" (С)

user posted image
mvg
Для того, чтобы оптимально были загружены операторы предлагаю создать вторую очередь из операторов для того чтобы особо активные операторы могли съесть печенька, а большие любители печенек смогли немного поработать.

Это примерно так: по мере включения в работу операторы становятся в очередь приема заявок и когда подошла очередь оператора у него появляется кнопка "принять текущую заявку" нажимая на которую оператор выпадает из очереди "свободные операторы", а после завершения работы с заявкой становится снова в конец очереди.

Когда все операторы заняты очередь "свободные операторы" пуста и все заявки находятся в ожидании. Как только освободившийся оператор снова становится в очередь, то текущая в очереди заявка отправляется этому оператору.

"Текущая заявка" из очереди заявок отправляется текущему оператору из очереди "Свободные операторы".

На случай ситуации когда оператор, чья очередь отрабатывать заявку не отзывается вовремя можно предусмотреть вариант отображения сигнала "есть свободная заявка" у всех операторов из очереди "свободный оператор" чтобы подстраховать коллегу если че.

Заявки которые были в работе, но не решены полностью могут возвращаться обратно в очередь и могут быть закреплены за определенным оператором.

Заявки которые были успешно отработаны отмечаются каким оператором были отработаны что будет полезно для сравнения дебетом с кредитом по заявкам и операторам.
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.