Краткий сказ о долгой разработке заявочной системы

в 8:17, , рубрики: ajax, css, fontawesome, Help Desk Software, javascript, php, socket, sql anywhere, Веб, Программирование, метки: ,

Как-то раз, бороздя просторы интернета в поисках новых идей, я наткнулся на статью на Хабре Как мы написали helpdesk. В данной статье было описание системы очень похожей на ту, которую я создаю уже больше полугода. И я решил о ней написать.

Поставленные задачи:

  • Вся работа специалистов сводится к работе по заявкам
  • Разные типы проблем для заявок
  • Разные специалисты, решающие разные типы проблем заявок
  • Наличие диспетчеров, распределяющих заявки специалистам
  • Ведение временного учета по занятости специалистов
  • Отчеты о занятости специалистов
  • Отчеты по заявкам
  • Возможность отказываться или переназначать заявку
  • Создание занятости специалистом без привязки к заявке
  • Корректная работа на OS Linux/FireFox 2.0 (ну ооочень старые компьютеры, составляющие 90% всех пользователей, а это около 1000шт)
  • БД — Sybase SQL Anywhere 11
  • PHP — 5.3

Что было...

Придя в данную организацию 4 года назад, я познакомился с имеющейся системой заявок. Она решала все необходимые задачи, за исключением того, что все отчеты о занятости/безделии решающих проблемы специалистов оставалась начальству неизвестна. И так уже сложилось, что было 3-4 диспетчера, отвечающих за распределение этих самых заявок специалистам. Ведь не каждый пользователь, создавший заявку, может верно указать её тип. То ли от лени, то ли от незнания, из-за чего автоматическое распределение периодически давало сбой. Всё работало отлажено даже в самых старых браузерах старейших юникс систем, в частности ff 2.0.

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

Взвесив все «за» и «против», решили делать всё с чистого листа.

Как закалялось сталь

Как и во всех проектах данной организации, в основе лежит БД Sybase SQL Anywhere. А из плюсов у нее:

  • Триггеры
  • Эвенты
  • Полноценные процедуры и функции с возможностью писать/читать файлы
  • Встроенный sendmail
  • Отличная скорость работы
  • Удобный «руль» — Sybase Central
  • Поддержка Watcom SQL и Transact SQL
  • Подключение таблиц из удаленных БД
  • Много всяких мелких плюшек...

Обоснованность выбора именно SQL Anywhere еще и в том, что планируется, что данная система вырастет ищи и до PowerBuilder и Android версии. Именно поэтому использование процедур — более рационально. Написав весомую часть всей логики в БД, остается лишь «дёргать» её из разных платформ и разных приложений.

Веб-сервер сделали из обычного Apache + PHP 5.3 на CentOS.

Схема файлов очень похожа на то, как реализовано в посте из ссылки в начале поста. Имеется:

  • главный php-файл, обрабатывающий все запросы ajax, дёргая БД
  • javascript-файлы, для обращения к php с последующей отрисовкой страниц
  • сами html-страницы.

Все значки на сайте реализованы на FONTAWESOME — крайне удобная вещь!

Приступая к работе, спроектировали примерную схему самой БД, которая, в итоге, очень отдалилась от исходного варианта.

Как это работает

Рабочий стол всей системы делится на два основных составляющих:

  • Для всех пользователей — менеджер заявок
    • Для обычных пользователей — создание/отслеживание
    • Для специалистов — отслеживание своих заявок
    • Для диспетчеров — распределение заявок + отслеживание своих заявок
    • Для администраторов — полный «руль» системы (в разработке...)
  • Для специалистов и диспетчеров — менеджер заданий

Менеджер заявок

Жизненный путь заявок. Создание с выбором типа ошибки (программы, оборудование, 1С ...). Распределение диспетчером специалисту. При распределении заявки конкретному специалисту, у него появляется задание, к которому прикрепляется данная заявка. Далее три пути:

  • Специалист выполняет и закрывает задание (следовательно, заявку), тогда заявка попадает на утверждение закрытия создателю
  • Специалист отказывается от выполнения, указывая, что, например, эта ошибка не по его части, после чего заявка снова становится не распределенной, давая диспетчеру возможность указать другого специалиста.
  • Специалист, при необходимости, сам передает задание (следовательно, заявку) другому специалисту

Создатель заявки уведомляется и, войдя в систему и отобразив информацию по данной заявке, может:

  • Подтвердить закрытие. Проблема успешно решена.
  • Отказать в закрытии, указав причину или добавив сообщение в переписку, после чего заявка снова возрождается у ранее назначенного специалиста.

Создание заявки:

image

Просмотр полной информации диспетчером о любой заявке или просмотр специалистом о своей заявке:

image

Менеджер заданий

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

Просмотр списка завершенных заданий:

image

Просмотр списка актуальных заданий:

image

Просмотр информации о задании:

image

Приступая к работе над заявкой, специалист нажимает кнопку «приступить», она же play(треугольник) и берется за дело. По завершению, он нажимает «завершить», она же stop (квадрат). После чего заявка попадает на утверждение пользователю, создавшему её.

Тут доступны комментарии, которые хранятся исключительно у этого задания (например, можно указать «не забыть полить фикус, лишь потом приступать»); переписка — это сообщения для общей дискуссии между создателем и специалистом, которые, так же, может просматривать и добавлять диспетчер (например, для выяснения подробностей ошибки); служебные комментарии — переписка между диспетчером и специалистами, работающими по данной заявке (например, пояснение «не получится сделать, нужно больше железа») — данная информация их технических соображений скрывается от создателя заявки.

Создавать задания специалист и диспетчер может сам, без привязки к заявке, что бы указать иную занятость, например, «поехал за закупкой не хватающего товара». Данная занятость тоже будет отображена на временной шкале занятости.

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

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

Содержимое отчетов:

  • Статистика специалистов
    • Общее количество заявок
    • Время в работе
  • Места ошибок
  • Типы ошибок
  • Создатели заявок

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

image

Из минусов:

  • Пока неясно, как регулировать активность специалистов, что бы они не оставляли задания в состоянии «в работе», уходя домой, забыв, нажать «приостановить» (паузу). Из-за данной проблемы, в отчетах иногда бывают трудаголические цифры, о безумных переработках

Предлагайте свои варианты в комментариях!

Из плюсов:

  • давно реализованы уведомления на socket'ах
  • быстрая скорость работы в целом, т.к. все данные подгружаются в ajax и вставляются в уже загруженную страницу
  • быстрая отдача информации от БД — до 0.4 секунд на выборку 1000 строк по массе параметров с последующим формированием JSON ответа
  • хорошая защищенность от взломов
  • все уведомления для разгрузки базы, падают в таблицу актуальных писем, которые рассылаются раз в 2 минуты

В планах огромная работа:

  • подключение ip-телефонии для автоматических уведомлениях об изменениях в заявках
  • автоматическое распределение заявок при простое диспетчера
  • автоматическое формирование квартальных отчетов с отправкой по e-mail заинтересованным лицам
  • навести «красивости»
  • добавление административного раздела
  • и прочее..

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

Жду ваших вопросов и отзывов!

Автор: mad_jerico

Источник

* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js