Callcenter

Опубликовано Sep 30, 2011 в ООП | 6 коммент.

, ,

Callcenter

Некоторая компания занимается предоставлением услуг Callcenter. Есть три уровня иерархии операторов: оператор (O), руководители групп (TM) и менеджеры (M).
При попадании звонка в CallCenter – система должна выбрать первого свободного оператора, если все операторы заняты – то первого свободного руководителя групп, если же все руководители групп заняты – то первого свободного менеджера.
Необходимо разработать набор классов и реализовать функцию getCallHandler().


Первое приемлемое решение появилось. Будем считать, что его внедрили и наш Call Center заработал.  И что из этого вышло? Оказалось, что некоторые из операторов загружены работой существенно сильнее, чем другие. Это привело к нездоровой атмосфере в коллективе заказчика и он выставил требование разобраться в ситуации и устранить проблему.

Действительно, оказалось, что когда сотрудник заступает на смену и регистрируется в системе, его позиция в списке определяется его Id, который жестко привязан к идентификатору записи о сотруднике в базе данных. В результате чем меньше Id сотрудника, тем чаще на него переводят звонок. Предположим, что изменить функциональность регистрации оператора в системе при начале его смены не возможно.

Вопрос. Что можно изменить в коде классов CallCenter и Operator, чтобы решить описанную проблему?


А теперь