Короткий розповідь про довгої розробці заявочної системи

Як-то раз, борознячи простори інтернету в пошуках нових ідей, я натрапив на статтю на Хабре Як ми написали 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-телефонії для автоматичних голосових повідомлень про зміни в заявках
  • підключення SMS-шлюз для автоматичних повідомлень про зміни в заявках
  • автоматичне розподіл заявок при простої диспетчера
  • автоматичне формування квартальних звітів з відправкою по e-mail зацікавленим особам
  • навести «красивості»
  • додавання адміністративного розділу
  • та інше..
Хочу помітити, що відсутність краси даної системи пов'язано з тим, що вона була спочатку орієнтована виключно для внутрішнього користування і вихід на зовнішній ринок не планувався, у зв'язку з чим, не маю поки що можливості надати навіть тестовий доступ до системи.

В наступному пості спробую описати програмну частину становить.
Чекаю ваших запитань і відгуків!

Джерело: Хабрахабр

0 коментарів

Тільки зареєстровані та авторизовані користувачі можуть залишати коментарі.