Please use this identifier to cite or link to this item:
https://er.chdtu.edu.ua/handle/ChSTU/8973| Title: | СИСТЕМА АВТОМАТИЗАЦІЇ ЕКСПРЕС ДОСТАВОК |
| Authors: | Чичужко, Марина Володимирівна Короп, Назар Вікторович |
| Issue Date: | Jun-2022 |
| Abstract: | Система представляє веб-програму яка створює дані в реляційній базі даних, котра складається з п’яти таблиць. Програма включає три рівні доступу. Кожна роль наділена своїми обмеженнями та привілеями. Додавання та зміни замовлення реалізують користувачі з рівнем прав доступу менеджер. Завдання адміністратора – керування складами та населеними пунктами. Користувачі з рівнем прав доступу клієнт, можуть лише переглядати маршрут замовлення. Можливості системи: зручне керування замовленнями та їх відстежування, керування користувачами та управління складами, населеними пунктами. |
| URI: | https://er.chdtu.edu.ua/handle/ChSTU/8973 |
| Appears in Collections: | 174 Автоматизація, комп'ютерно-інтегровані технології та робототехніка (Автоматизація та комп'ютерно-інтегровані системи та компоненти) |
Files in This Item:
| File | Description | Size | Format | |
|---|---|---|---|---|
| Б_174_2022_Короп.pdf Restricted Access | 1.49 MB | Adobe PDF | View/Open Request a copy |
Items in DSpace are protected by copyright, with all rights reserved, unless otherwise indicated.
Extracted text
МІНІСТЕРСТВО ОСВІТИ І НАУКИ УКРАЇНИ
ЧЕРКАСЬКИЙ ДЕРЖАВНИЙ ТЕХНОЛОІЧНИЙ УНІВЕРСИТЕТ
Факультет інформаційних технологій і систем
Кафедра робототехніки та спеціалізованих комп’ютерних систем
Пояснювальна записка
до кваліфікаційної роботи
освітнього ступеня «бакалавр»
на тему:
СИСТЕМА АВТОМАТИЗАЦІЇ ЕКСПРЕС ДОСТАВОК
Виконав:студент __4__курсу, групи АКІТС-2099
Спеціальність
151 «Автоматизація та комп'ютерно-інтегровані
технології»
(шифр і назва напряму підготовки)
Студент_________Короп Н.В.______________
( прізвище та ініціали)
Керівник _________Чичужко М.В.__________
( прізвище та ініціали)
Рецензент _________Пономар Л.Л.__________
(прізвище та ініціали)
Черкаси 2022 року
ЗМІСТ
СПИСОК СКОРОЧЕНЬ ТА УМОВНИХ ПОЗНАЧЕНЬ .................................... 5
ВСТУП ........................................................................................................................... 6
1 ПРИЗНАЧЕННЯ ТА ОБЛАСТЬ ЗАСТОСУВАННЯ........................................ 7
2 ОГЛЯД ІСНУЮЧИХ РІШЕНЬ ТА ОБҐРУНТУВАННЯ ВИБОРУ
ПРИЙНЯТОГО ПРИНЦИПУ ПОБУДОВИ .......................................................... 9
2.1 Огляд існуючих рішень ..................................................................................... 9
2.2 Використані технології ................................................................................... 13
3 ОПИС ТА ОБҐРУНТУВАННЯ ОБРАНИХ ПРОЕКТНИХ РІШЕНЬ ......... 18
3.1 База даних .......................................................................................................... 18
3.2 Розробка та опис структурних та функціональних схем. ........................ 22
4 РОЗРАХУНКИ ТА МАТЕРІАЛИ, ЩО ПІДТВЕРДЖУЮТЬ
ПРАЦЕЗДАТНІСТЬ ТА НАДІЙНІСТЬ СИСТЕМИ, ЩО
РОЗРОБЛЯЄТЬСЯ. .................................................................................................. 34
5 ОПИС ОРГАНІЗАЦІЇ РОБІТ, ЩО ПОВ'ЯЗАНІ ІЗ ЗАСТОСУВАННЯМ 37
СПИСОК ВИКОРИСТАНИХ ДЖЕРЕЛ .............................................................. 45
ДОДАТОК А ............................................................................................................... 47
ЧДТУ.222080.001 ПЗ
Змн. Лист № докум. Підпис Дата
Розроб. Короп Система автоматизації експрес Літ. Лист Листів
Перевір. Чичужко доставок У 2 65
Реценз. Пояснювальна записка
Н. Контр. ЧДТУ, АКІТС-2099
Затверд. Лукашенко
СПИСОК СКОРОЧЕНЬ ТА УМОВНИХ ПОЗНАЧЕНЬ
IDE – Integrated Development Environment
JDK – Java Development Kit
JRE – Java Runtime Environment
RFID Радіочастотна ідентифікація
UI User Interface
URL Uniform Resource Locator
ПЗ – Програмне забезпечення
ОС – Операційна система
ТСД Термінали збору даних
Лист
ЧДТУ. 222080.001 ПЗ
5
Змн. Лист № докум. Підпис Дата
ВСТУП
У сучасному світі інформаційні технології повністю проникають в життя
простих людей, стаючи її невід'ємною частиною. Комп'ютер, мобільний телефон,
Інтернет, - неможливо собі уявити життя без них. Аналогічні процеси
спостерігаються і в бізнесі: проникнення сучасних інформаційних систем
дозволяє всьому підприємству вдосконалювати свою ефективність.
Для підприємства яке займається послугами експрес-доставки важливих
термінових документів і невеликих вантажів по території України та інших країн
Європи, особливо нагальними є завдання щодо скорочення трудовитрат,
вдосконалення надійності та якості послуг, що стосуються до роботи кур'єрської
служби.
Розглядається проект по розробці автоматизованої системи підтримки
діяльності кур'єрської служби (далі ExpressDelivery). В процесі реалізації даного
проекту мною будуть досліджені існуючі бізнес-процеси підприємства. По
результатам проведеного аналізу буде створена система, що реалізує зниження
трудовитрат, підвищення надійності та оперативності внесення даних в
інформаційні системи.
Все це в цілому підвищить надійність і якість послуг, що стосуються
роботи кур'єрської служби, при значному скороченні трудовитрат на їх надання.
Лист
ЧДТУ. 222080.001 ПЗ
6
Змн. Лист № докум. Підпис Дата
1 ПРИЗНАЧЕННЯ ТА ОБЛАСТЬ ЗАСТОСУВАННЯ
ExpressDelivery – програмне забезпечення в логістиці дозволяє
багаторазово скоротити витрати і зусилля, так як виключить паперову роботу з
створення заявок, підтримку відповідального за прийняття та супровід заявки,
створення різних звітів про виконану роботу. Програма буде діючитм
інструментом для автоматизації обліку, який дає добру можливість у досягненні
чималих результатів на ринку надання послуг. Керування перевезеннями і
транспортно-експедиційними послугами передбачає особливого підходу.
Необхідно вести різного виду облік і контроль: облік створених заявок на
перевезення вантажу, облік перевезення вантажів, контроль перевезення, облік
рух вантажу, контроль заявок на перевезення вантажу. Програмне забезпечення
ExpressDelivery допоможе суттєво скоротити витрати і зусилля на ці основні
моменти. Модуль автоматизації кур'єрської служби та програмне забезпечення
дозволяє провести глобальну автоматизацію, так як замінить паперову роботу з
ведення заявок, відстеження особи, яка прийняла та реалізує супровід заявки,
складає різні звіти про виконану роботу. Облік транспортно-експедиторських
послуг включає свої особливості та нюанси.
Переваги автоматизації кур'єрської служби помітять багато - від скромного
інтернет-магазину до великих торгових компаній з власною службою доставки.
Завдяки ExpressDelivery зростає ефективність роботи діючих кур'єрів, отже -
загальний компанії серед інших та її торговий оборот. На ринку лідирує той, хто
уважно відноситься до своїх клієнтів. Одним з важливих складових успішної
політики в галузі продажів є повна організація та сувора налагодженість системи
доставки товарів замовнику. Все це позитивно впливає на доходи.
Розглянемо функціонал програми.
Функції програми:
Адміністратор:
1. Може створювати акаунти з різними рівнями доступу
(Адміністратор, Менеджер, Клієнт).
Лист
ЧДТУ. 222080.001 ПЗ
7
Змн. Лист № докум. Підпис Дата
2. Редагувати акаунти з окремими рівнями доступу (Адміністратор,
Менеджер, Клієнт).
3. Видаляти акаунти з окремими рівнями доступу (Адміністратор,
Менеджер, Клієнт).
4. Проводити пошук серед населених пунктів, складів, користувачів.
Менеджер:
1. Створення нового замовлення.
2. Зміна даних замовлення, що не відправлено.
3. Відслідковування траєкторії руху вантажу.
4. Видача вантажу, та зберігання інформації про отримувача.
5. Сортування вантажів різних типів.
6. Пошук серед діючих користувачів та активних замовлень.
Клієнт:
- Відслідковування траєкторії руху вантажу.
Лист
ЧДТУ. 222080.001 ПЗ
8
Змн. Лист № докум. Підпис Дата
2 ОГЛЯД ІСНУЮЧИХ РІШЕНЬ ТА ОБҐРУНТУВАННЯ ВИБОРУ
ПРИЙНЯТОГО ПРИНЦИПУ ПОБУДОВИ
2.1 Огляд існуючих рішень
В даний час на ринку існує небагато програм автоматизації служб
доставки, які автоматизують саме робочий процес. Прикладом такого продукту
є «Кур’єрска служба 2018». Веб-сайт знаходиться за адресою http://courierexe.uа
Система автоматизації «Кур’єрска служба 2018» розроблена для повної
автоматизації роботи кур'єрської служби доставки, що забезпечує доставку
товарів від інтернет-магазинів, термінову доставку важливої кореспонденції по
місту, міжміського / міжнародного доставкою, обробка великих обсягів
кореспонденції (як адресно, наприклад, рахунки або запрошення, так і
знеособленою - тиражі друкованої рекламної продукції тощо). Це одне з
галузевих рішень, що реалізує вичерпну функціональність при невисокій ціні
при купівлі та загальної вартості користування. Програма майже повністю
автоматизує основні етапи бізнес-процесів доставки кореспонденції від
реєстрації оператором замовлення по телефону до формування, доставки та
контролю оплати рахунку.
Можливості системи:
⎯ Гнучкий і простий пошук інформації по базі даних;
⎯ Облік всієї актуальної кореспонденції, що проходить через кур'єрську
службу;
⎯ Облік клієнтів. Формування рахунків, контроль їх оплати.
⎯ Облік співробітників. Нарахування та переведення зарплати, облік
посвідчень.
⎯ Імпорт баз даних одержувачів з MS Excel. Настройка під різні формати
вхідних файлів. Значне число форматів. Повна інтеграція з обліковими
системами клієнтів. Використання штрих-кодів клієнтів.
Лист
ЧДТУ. 222080.001 ПЗ
9
Змн. Лист № докум. Підпис Дата
⎯ Експорт даних про доставки в MS Excel для наступної обробки або
відправлення електронних звітів клієнтам (з можливістю автоматичної
відправки звітів клієнтам).
⎯ Друк маркувальних стікерів, постачальних форм 3-х видів.
⎯ Автоматизація видачі / прийняття заявки кур'єрам (з повною історією
видачі). Автоматизація діяльності менеджерів з продажу. (Облік клієнтів,
прив'язаних до менеджерів, розрахунок ЗП).
⎯ Підтримка декількох валют розрахунку з клієнтами.
⎯ Автоматизація роботи диспетчерів швидкої та надстрокової доставки
кореспонденції.
⎯ Розвинена система звітності.
⎯ Гнучка настройка поточних тарифних планів і знижок клієнтам.
⎯ Гнучка настройка тарифних сіток, премій, бонусів та штрафів кур'єрам (у
тому числі автоматичне застосування бонусів / штрафів кур'єрам, і
менеджерам, що розподіляє їм роботу, за своєчасну / НЕ своєчасну
доставку кореспонденції відповідно.)
⎯ Гнучкий облік часу роботи кур'єрів, графіків їх роботи (підтримка різних
графіків роботи).
⎯ Проста у використанні настройка прав користувачів.
⎯ Інтеграція з 1С-бухгалтерією і модулями банк-клієнт для більш
охоплюючої автоматизації всіх бізнес-процесів кур'єрської служби.
Основні можливості інтеграції системи:
⎯ 1С-бухгалтерія: для передачі даних про сформовані рахунки.
⎯ Банк-клієнт: для імпорту діючих платежів.
⎯ Сайт: особистий кабінет для клієнтів реалізує відстеження замовлення,
формувати нові замовлення.
⎯ Мобільні термінали кур'єрів: Кур'єри можуть оформити доставку
використовуючи мобільні телефони.
Лист
ЧДТУ. 222080.001 ПЗ
10
Змн. Лист № докум. Підпис Дата
⎯ SMS-провайдер: Можливість відправити дані про замовлення кур'єру,
проінформувати клієнта, одержувача про стан замовлення.
⎯ Карти Інгит, Mosmap: Планування доставки лише обводячи мишкою
потрібні адреси на карті. Автоматична прокладка маршрутів для автопарку
(для карт Інгит).
⎯ Карти Google: Відображення адреси, встановлення територіальної
приналежності, координат.
⎯ КІС клієнтів: Автоматичне формування замовлень і штрих-кодів до них з
баз даних клієнтів безпосередньо в систему, автоматична передача
інформації про доставку в БД клієнтів.
Підтримка ріного обладнання:
⎯ Сканери штрих-кодів всіх типів.
⎯ Електронні ваги МІРА.
⎯ Клеючі термо-принтери.
⎯ Банківські POS-термінали.
⎯ Фіскальні реєстратори Штрих-М.
⎯ Переносні касові апарати.
Користувальницький інтерфейс створено так, щоб мінімізувати роботу
персоналу на всіх етапах бізнес-процесів від створення замовлення до
виставлення рахунку клієнту, і його відправлення за допомогою кур'єрської
служби, при цьому максимально знизити виникнення помилки (людський
фактор), але реалізувати користувачеві як можна більш гнучкий і потужний
інструмент управління інформацією. На всіх етапах повністю використовуються
такі засоби швидкого введення інформації, як сканери штрих-кодів
(використовуються різні види сканерів), гарячі клавіші, автопідставка даних з
БД, і т.д.
Унікальний механізм автоматизації збору даних дозволяє оператору вводити
в базу даних кореспонденцію витрачаючи на кожну позицію від 1 до 10 секунд
(до 50 листів в хвилину!), Змінивши при цьому адресу доставки, якщо він у
Лист
ЧДТУ. 222080.001 ПЗ
11
Змн. Лист № докум. Підпис Дата
одержувача змінився (а відправник, ожливо, посилає за старою адресою).
Приблизно з такою ж швидкістю система реалізує ввод інформації про доставку
- ПІБ одержувача, дату / час вручення і т.д.
Програма реалізує роботу з клеючими термо-принтерами, пристроями для
друку маркувальних наклейок на кореспонденцію, системами відеозахвату (у
тому числі з веб-камерами), для оперативного внесення в базу даних фотографій
співробітників.
Це програмне забезпечення має клієнт-серверну архітектуру, яка реалізує
обробку абсолютно необмеженої кількості користувачів і даних. Реалізовані
впровадження мають у базах даних необмежену кількість кореспонденції.
Масштабність серверного оснащення дозволяє реалізовувати резервні сервера,
кластери серверів і багато різного.
Система реалізує принцип типового інтерфейсу - всі співробітники компанії
працюють з єдиним програмним модулем, який дозволяє обробляти завдання
всіх активних процесів кур'єрської служби. Інтерфейс програми налаштовується
залежно від посадових обов'язків співробітника шляхом налаштування прав
користувача.
Крім модуля для роботи співробітників компанії, є наступні модулі для
роботи з головною базою даних:
⎯ Модуль реплікації даних. Налаштований для синхронізації даних між
версіями системи, а так само між головною базою даних і сайтом;
⎯ Модуль резервного зберігання бази даних. Забезпечує час від часу резервне
копіювання даних на CD, DVD-диски;
⎯ Модуль складського обліку. Автоматизує процес обліку товарів на складі,
дозволяє організовувати кореспонденцію для доставки з товарів, що
знаходяться на складі. Використовується для взаємодії з інтернет-магазинами
а також для відповідального зберігання.
⎯ Модуль інтеграції з системою "1С-бухгалтерія" Дозволяє обробляти дані про
виставлені рахунках у 1C. Мінімізує рутинну роботу бухгалтера з обліку
Лист
ЧДТУ. 222080.001 ПЗ
12
Змн. Лист № докум. Підпис Дата
рахунків. Є версії для 1С версій 7.7 (спрощена та звичайна системи
оподаткування), 8.0 і 8.2.
⎯ Модуль друку касових чеків. Взаємодіє з фіскальними реєстраторами
виробництва "Штрих-М". Реалізує автоматичний друк касових чеків при
передачі кур'єру завдання, при необхідності наявності чека.
⎯ Модуль особистого кабінету в розділі сайту. Рекомендується використовувати
сумісно з модулем реплікації. Побудований з 4-х частин: Трейсинг за номером
накладної, Авторизація співробітника, пошук і відображення замовлень
співробітника, стан доставки. Експорт до Ексель. Введення інформації про
доставку стороннім агентом; Тарифний калькулятор.
⎯ Модуль інтеграції з сторонніми системами. Дозволяє налаштовувати
автоматичний файловий обмін інформацією з обліковими системами клієнтів
за допомогою ftp, e-mail і т.д.
⎯ Модуль для використання мобільних девайсів кур'єрів. Оптимально
використовувати спільно з модулем реплікації. Дозволяє кур'єру обробляти на
мобільному пристрої (смартфони, КПК) замовлення, які видані йому для
доставки, і оперативно вносити в систему інформацію про результат доставки.
⎯ Модуль обробки SMS-повідомлень. Працює з наступними сервісами: Світ
SMS, ZANZARA, Intis, Мегател, WebSMS, Epochta. Дозволяє передавати
інформацію кур'єрам у вигляді SMS-повідомлення з інтерфейсу системи через
мережу інтернет.
2.2 Використані технології
Apache Tomcat — контейнер сервлетів, заснований Apache Software
Foundation. Повністю скомпільований мовою програмування Java та базується на
специфікації сервлетів і Java Server Pages від Sun Microsystems, що вважається
стандартами для розробки веб-застосунків на Java.
Java (вимовляється Джава; інколи - Ява) — об'єктно-орієнтована мова
програмування, заснована та випущена компанією Sun Microsystems у 1995 році
Лист
ЧДТУ. 222080.001 ПЗ
13
Змн. Лист № докум. Підпис Дата
як базовий програмний компонент платформи Java. Зараз мовою опікується
компанія Oracle, яка придбала компанію Sun Microsystems у 2009 році.
Синтаксис мови багато в чому схожий на синтаксіс від C та C++. У офіційній
реалізації програми, Java додатки компілюються у байткод, який при виконанні
перетворюється віртуальною машиною для конкретної платформи.
Oracle реалізує компілятор Java та віртуальну машину Java, які
відповідають специфікації Java Community Process, реалізовані під ліцезією GNU
General Public License.
Мова суттєво запозичила синтаксис із C і C++. Зокрема, прийнято за базу
об'єктну модель С++, проте її незначно модифіковано. Зменшено вирогідність
появи деяких проблемних ситуацій, що могли з’явитися через помилки
програміста та спрощено сам процес розробки та вдосконалення об'єктно-
орієнтованих програм. Ряд дій, які в С/C++ зазвичай здійснювали програмісти,
доручено виконання віртуальній машині. Передусім, Java проєктувалась як
платформо-незалежна мова, тому вона включає менше низькорівневих
можливостей для реалізації роботи з апаратним забезпеченням. За необхідності
таких дій java релізує виклик підпрограм, створені за допомогою інших мов
програмування.
Java вплинула на процес розвитку J++, що створено компанією Microsoft.
Розвиток J++ було затримано через судовий позов компанії Sun Microsystems, в
якому зазначено, що ця мова програмування була модифікацією Java. Пізніше в
новій компіляції платформи Microsoft .NET випустило J#, щоб спростити
міграцію програмістів J++ або Java на іншу платформу. З часом новітня мова
програмування С#, стала базовою мовою платформи, перейнявши багато
функцій з Java. J# востаннє інтегровано в версію Microsoft Visual Studio 2005.
Мова сценаріїв JavaScript має спільну із Java назву і синтаксис, але не зовсім
пов'язана із Java.
JSP (Java Server Pages) — технологія, що надає можливість веб-
розробникам динамічно створювати HTML, XML та інші веб-сторінки. Не є
Лист
ЧДТУ. 222080.001 ПЗ
14
Змн. Лист № докум. Підпис Дата
діючою частиною єдиної платформи створення бізнес-програм Java EE, оскільки
може використовуватись сама по собі, а технологія Java EE може
застосовуватись без використання JSP. Технологія дозволяє інтегрувати Java-
код, в статичний склад сторінки. Також можуть застосовуватись бібліотеки JSP
тегів для інтеграції їх в JSP-сторінки. Сторінки автоматично компілюються JSP-
компілятором в сервлети, які є Java-класами, і запускаються на сервері. Сервлети
також можуть бути скомпільовані розробником, не використовуючи JSP-
сторінки. Ці технології частково замінюють одна одну.
JSP — одна із високопродуктивних технологій, так як весь код сторінки
транслюється в java-код сервлету за участю компілятора JSP сторінок (напр.
Jasper), а далі компілюється в байт-код віртуальної програмної машини java
(JVM).
JavaScript — назва реалізації типу мови програмування ECMAScript
компанії Netscape, основана на принципах прототипного програмування.
Найпоширеніше і найтиповіше застосування мови — формування сценаріїв для
веб-сторінок, але, також, астосовується для впровадження сценаріїв управління
об’єктами інтегрованими в інші програми.
Незважаючи на подібність назв, JavaScript та мова програмування Java
мають не багато спільного. Права на торгову марку Java належать корпорації Sun
Microsystems.
JavaScript заснований у компанії Netscape. На сьогоднішній день
підтримується абсолютною більшістю браузерів. Текст програми інтегрується
безпосередньо в HTML-документ і обробляється самим браузером (точніше,
вбудованим у браузер рушієм JavaScript). Застосовується в більшості випадків
для часткової автоматизації обробки і маніпуляції даними, які використовує веб-
сторінка.
Станом на сьогодні, останній стандарт мови — JavaScript 1.8.5. Якщо
скорочено, то ECMA-262 є класичним варіантом мови JavaScript. Стандартом
ECMA-357 наведено E4X, розширення мови для роботи з XML.
Лист
ЧДТУ. 222080.001 ПЗ
15
Змн. Лист № докум. Підпис Дата
Каскадні таблиці стилів (англ. Cascading Style Sheets або скорочено CSS)
— особлива мова, що застосовується для відображення сторінок, створених
мовами розмітки даних. Найчастіше CSS застосовують для візуальної
презентації сторінок, створених HTML та XHTML, але формат CSS може мати
відношення до інших видів XML-документів.
Специфікації CSS були засновані та вдосконалюються Консорціумом
Всесвітньої мережі.
CSS включає різні рівні та профілі. Наступний рівень CSS формується на
основі попередніх, вносячі нову функціональність або вдосконалюючі вже
існуючі функції. Рівні позначаються як CSS1, CSS2 та CSS3. Профілі —
сукупність законів CSS одного або більше рівнів сформовані для окремих типів
пристроїв або інтерфейсів. Наприклад, існують окремі профілі CSS для
мобільних пристроїв, принтерів тощо.
CSS (каскадна або блочна верстка) створена на заміну табличній верстці
веб-сторінок. Головна мета блочної верстки — розділення складових сторінки
(даних) та їх візуального представлення.
HTML (англ. HyperText Markup Language — Мова розмітки гіпертексту) —
класична мова розмітки веб-сторінок в мережі Інтернет. Переважна більшість
веб-сторінок створюються за допомогою мови HTML (або XHTML). Документ
HTML оброблюється браузером та відображається на екрані у класичному для
людини вигляді.
HTML разом із вбудованими скриптами та каскадними таблицями стилів —
це три базові технології побудови веб-сторінок.
HTML є похідною мовою від SGML, перейнявши від неї визначення типу
документу та модель структурної розмітки тексту.
HTML формує засоби для:
⎯ побудови структурованого документу методом позначення
структурного вигляду тексту: заголовки, абзаци, таблиці, списки, цитати
та багато іншого;
Лист
ЧДТУ. 222080.001 ПЗ
16
Змн. Лист № докум. Підпис Дата
⎯ створення різних інтерактивних форм;
⎯отримання інформації із мережі Інтернет через використання
гіперпосилань;
⎯приєднання зображень, звуку, відео, та багато інших об'єктів до тексту.
MySQL — повністю вільна система управління реляційними базами даних.
MySQL був заснований компанією «ТсХ» для підвищення процесу обробки
значних баз даних. Ця система управління базами даних (СКБД) з відкритим
кодом була розроблена як альтернатива великим комерційним системам. MySQL
з самого початку була мав багато схожого із mSQL, проте в процесі
вдосконалення вона все розширювалася і на цей час MySQL — одна з
найпоширеніших систем управління базами даних. Вона використовується,
найчастіше, для реалізації динамічних веб-сторінок, оскільки має добру
підтримку з боку різноманітних мов програмування.
Лист
ЧДТУ. 222080.001 ПЗ
17
Змн. Лист № докум. Підпис Дата
3 ОПИС ТА ОБҐРУНТУВАННЯ ОБРАНИХ ПРОЕКТНИХ РІШЕНЬ
3.1 База даних
Перш, ніж розпочинати створення системи автоматизованої обробки
інформації, потрібно розібрати поняття про предмети, факти та події, якими
оперує зазначена система. Для цього було досліджено їх інформаційне
представлення. Одним з найбільш зрозумілих інструментів уніфікованого
представлення даних є модель «сутність-зв'язок» (entity-relationship model, ER-
model).
Модель «сутність-зв'язок» базується на деякій важливій семантичній
інформації про реальний світ і застосовується для логічного представлення
даних. Вона описує значення даних в процесі їх взаємозв'язку з іншими даними.
Суттєвим є той факт, що з моделі «сутність-зв'язок» можуть бути сформовані всі
основні моделі даних (ієрархічна, мережева, реляційна, об'єктна), тому вона
вважається найбільш загальною.
Модель «сутність-зв'язок» не є моделлю даних в абсолютному вигляді,
оскільки не визначає операцій над інформацією і обмежується описом лише їх
логічної структури. Будь-який фрагмент предметної області можливо описати як
множина сутностей, між якими існує площина множини зв'язків.
Сутність (entity) - це об'єкт, який може бути описаний таким собі способом,
що відрізняє його від більшості об'єктів.
Набор сутностей (entity set) - массив сутностей одного типу (що наділені
однаковими властивостями). Сутність реально представляє з себе масив
атрибутів, які описують властивості всіх компонентів даного набору сутностей.
Специфікація сутностей
В розробленій базі даних відображено 5 сутностей, (рис. 3.1).
1. Location – таблиця, яка складається з 5 полів. Призначенням таблиці
є збереження інформації про рух вантажів.
⎯ idLocation – порядковий номер інформації в базі, первинний ключ. Поле
має числовий вид довжиною 11 байт.
Лист
ЧДТУ. 222080.001 ПЗ
18
Змн. Лист № докум. Підпис Дата
⎯ idStore – зовнішній ключ з сутністю Store. Поле має числовий тип
довжиною 11 байт.
⎯ idOrder – зовнішній ключ з сутністю Order. Поле має числовий вид
довжиною 11 байт.
⎯ Import – поле типу дата/час, зберігає дату доставки вантажу на склад.
⎯ Export – поле типу дата/час, зберігає дату відгрузки вантажу з складу.
2. Places – таблиця яка складається з 4 полів. Призначенням таблиці є
розміщення інформації про місто розташування складу.
⎯ Settlement – поле типу varchar довжиною 30 байт. Містить назву
населеного пункту в якому розміщено склад.
⎯ idPlace – порядковий номер запису в базі, первинний ключ. Поле має
числовий тип довжиною 11 байт.
⎯ Region – поле типу varchar довжиною 30 байт. Містить назву області
в якому розташований склад.
⎯ District – поле типу varchar довжиною 30 байт. Містить поле району
в якому розташований склад.
3. Store – таблиця яка складається з 5 полів. Призначенням таблиці є
розміщення інформації про місце знаходження складу.
⎯ idStore – порядковий номер запису в базі, первинний ключ. Поле має
числовий тип довжиною 11 байт.
⎯ idPlace – зовнішній ключ з сутністю Place. Поле має числовий тип
довжиною 11 байт.
⎯ Address – поле типу varchar довжиною 50 байт. Розміщено адресу
складу.
⎯ xCoord – поле типу float. Містить інформацію про горизонтальну
координату розміщення складу на карті.
⎯ yCoord – поле типу float. Містить інформацію про вертикальну
координату розміщення складу на карті.
Лист
ЧДТУ. 222080.001 ПЗ
19
Змн. Лист № докум. Підпис Дата
4. Orders – таблиця яка містить 12 полів. Призначення таблиці –
збереження докладної інформації про замовлення.
⎯ idOrder – порядковий номер запису в базі, первинний ключ. Поле має
числовий тип довжиною 11 байт.
⎯ Weight – поле числового типу довжиною 5 байт. Містить інформацію
про вагові складові вантажу в грамах.
⎯ Description – поле типу текст. Поле розміщує додаткову
інформацію про замовлення.
⎯ beginId – зовнішній ключ з сутністю Store. Поле має числовий тип
довжиною 11 байт.
⎯ destinationId – зовнішній ключ з сутністю Store. Поле має числовий
тип довжиною 11 байт.
⎯ timeStart – поле типу дата/час. Містить дату початку відгрузки
вантажу.
⎯ Delivered – поле логічного типу. Призначено для перевірки видання
вантажу.
⎯ trackingNumber – поле типу varchar, довжиною 15 байт. Містить в
собі унікальний особливий номер вантажу.
⎯ idSender – зовнішній ключ з сутністю Users. Поле має числовий тип
довжиною 11 байт. Зберігає унікальний порядковий номер відправника.
⎯ idPicker – зовнішній ключ з сутністю Users. Поле має числовий тип
довжиною 11 байт. Зберігає унікальний порядковий номер отримувача вантажу.
⎯ idReceiver – зовнішній ключ з сутністю Users. Поле має числовий тип
довжиною 11 байт. Зберігає унікальний порядковий номер адресата.
⎯ timeDelivered – поле типу дата/час. Зберігає дату відгрузки вантажу.
5. Users – таблиця містить 9 полів. Містить різнобічну інформацію про
користувачів.
⎯ idUser – порядковий номер запису в базі, первинний ключ. Поле має
числовий тип довжиною 11 байт.
Лист
ЧДТУ. 222080.001 ПЗ
20
Змн. Лист № докум. Підпис Дата
⎯ Login – поле типу varchar, довжиною 30 байт. Містить логін
робітника.
⎯ Pass – поле типу varchar, довжиною 30 байт. Містить пароль
робітника.
⎯ Phone – поле типу varchar, довжиною 15 байт. Містить телефон
робітника.
⎯ firstName – поле типу varchar, довжиною 20 байт. Містить ім’я
робітника.
⎯ lastName – поле типу varchar, довжиною 20 байт. Містить прізвище
робітника.
⎯ Document – поле типу varchar, довжиною 100 байт. Містить
інформацію про наданий документ при реєстрації користувача, наприклад,
паспорт.
⎯ Access – поле типу char розміром 1 байт. Містить рівень доступу
робітника.
⎯ Description – поле типу varchar, довжиною 100 байт. Містить
інформацію про робітника.
Рисунок 3.1 – Структура бази даних.
Лист
ЧДТУ. 222080.001 ПЗ
21
Змн. Лист № докум. Підпис Дата
3.2 Розробка та опис структурних та функціональних схем.
В проекті використовується визначена авторизація з різними правами
доступу до функціоналу та даних. Цей функціонал забезпечує компонент Spring
Security (Рисунок 3.1).
1. Співробітнику буде запропоновано увійти в програму з ім'ям
користувача і паролем.
2. Система (успішно) підтверджує, що введений вірний пароль для
даного запису користувача.
3. З’являється контекстна інформація для даного співробітника (список
ролей і т. д.).
4. Для співробітника встановлюється контекст безпеки.
Співробітник перенаправляється на проведення операцій, які можуть бути
встановлені механізмом контролю доступу, який визначає необхідні дозволи для
проведення операцій на підставі інформації поточного маніфесту безпеки. Перші
три пункти становлять безпосередньо процес аутентифікації, тому ми опишемо,
як це відбувається в Spring Security.
1. Виходять ім'я співробітника та пароль і об'єднуються в екземпляр
класу UsernamePasswordAuthenticationToken (екземпляр інтерфейсу
Authentication, який ми наводили раніше).
2. Токен надсилається екземпляру AuthenticationManager для
перевірки. AuthenticationManager повертає повністю заповнений параметр
Authentication у разі вірної аутентифікації.
3. Встановлюється контекст безпеки через виклик
SecurityContextHolder.getContext(). SetAuthentication, куди передається значення
примірника Authentication.
Механізм аутентифікації.
Як тільки браузер відправить підтвердження справжності вашої особистості
(POST запит HTTP форми, або HTTP заголовок) на сервері має бути присутнім
параметр, що буде "збирає" ці параметри аутентифікації. У Spring Security є
Лист
ЧДТУ. 222080.001 ПЗ
22
Змн. Лист № докум. Підпис Дата
окрема назва для реалізації збору аутентифікаційних даних від агента
користувача (зазвичай це веб-браузер). Зазвичай її визначають, як "механізм
аутентифікації". Наприклад, аутентифікація на базі форми, або основна
аутентифікація. Відразу як тільки параметри аутентифікації будуть зібрані від
агента користувача, для нашого «запиту» буде створено об'єкт Authentication та
надано AuthenticationManager. Якщо в результаті цього механізм аутентифікації
отримає назад відповідно заповнений об'єкт Authentication, він буде вважати
запит вірним і помістить об'єкт Authentication в SecurityContextHolder, і ще раз
викличе первісний запит. Якщо ж AuthenticationManager відхилить запит, то
процедура аутентифікації повторно запросить інформацію у агента користувача.
Рисунок 3.2 - Модель Spring Security.
Розробка алгоритмів, що забезпечують роботу виробу.
Лист
ЧДТУ. 222080.001 ПЗ
23
Змн. Лист № докум. Підпис Дата
ExpressDelivery - Автоматизовани інформаційний додаток компанії експрес-
доставок, з підпрограмою відслідковування вантажів.
Базовим призначенням програмного продукту є автоматизація об’ємних
процесів обробки інформації та представлення простих візуальних елементів
управління цими процесами.
В основі програми покладено Spring FrameWork.
Spring Framework - універсальний Фреймворк з відкритим вихідним кодом
для Java-платформи. Spring Framework дозволяє вирішити багато завдань, які
виникають у Java розробників та організації, які бажають створити інформаційну
систему, яка базується на платформі Java. Через багату функціональність важко
визначити найбільш важливі структурні елементи, з яких він складається. Spring
Framework частковою пов'язаний з платформою Java Enterprise, незважаючи на
його значну інтеграцію з нею, що є суттєвою причиною його популярності.
Spring Framework, ймовірно, найбільш поширений як джерело розширень
(features), потрібних для продуктивної розробки складних бізнес-додатків поза
великовагових програмних моделей, які завжди були домінуючими в
промисловості. Ще одна його цінність – те, що він залучив раніше не
використовувані функціональні можливості в сучасні панівні методи розробки,
навіть поза платформи Java. Цей фреймворк реалізує послідовну модель і робить
її придатною до більшості типів додатків, які вже написані на основі платформи
Java. Вважається, що Spring Framework застосовує модель розробки, засновану
на кращих стандартах індустрії, і робить її придатною в багатьох областях Java.
Проекти в яких за основу взято Spring Framework дуже схожі своєю
архітектурою, стандартно вона складається з шести потоків обробки даних.(рис.
3.3).
Лист
ЧДТУ. 222080.001 ПЗ
24
Змн. Лист № докум. Підпис Дата
Рисунок 3.3 - Архітектура проекту з Spring Framework
Першим потоком є база даних, яка включає інформацію. З базою даних
працює бібліотека Hibernate — засіб зв’язку між об'єктами та реляційними
структурами. З бібліотекою Hibernate працює наступний поток DAO. В цьому
потоці формуються необхідні інструменти для взаємодії з Hibernate. Потім йде
потік логічної обробки даних Service. В сервісі присутні класи, які відповідають
за логічну обробку інформації. Далі йде потік контролера. Контролери - це той
потік, в якому повинна реалізовуватися логіка обробки форм, відповіді сервера,
розбір параметрів, зібраних зі сторінки і т.д., тобто це базис логіки програми.
Далі JSP — технологія, що надає можливість веб-розробникам динамічно
генерувати HTML, XML та інші веб-сторінки.
Лист
ЧДТУ. 222080.001 ПЗ
25
Змн. Лист № докум. Підпис Дата
Рисунок 3.4 - Архітектура
Архітектура даної програми несуттєво відрізняється від базової. Вона
складається з 4 пакетів та папки з WEB-вмістом.
Лист
ЧДТУ. 222080.001 ПЗ
26
Змн. Лист № докум. Підпис Дата
org.chpt.expressdelivery.dao – містить клас ExpressDeliveryDAO в якому
описані поля та способи для вибірки, редагування, видалення інформації з бази
даних.
org.chpt.expressdelivery.controller – містить в собі класи контролери.
org.chpt.expressdelivery.service – містить класи які працюють з логічною
обробкою інформації.
org.chpt.expressdelivery.entity – містить бін –класи.
Проект містить в себе 5 контролерів AdminController – відповідає за дії
користувача з правами доступу адміністратор.
ClientController - відповідає за дії користувача з правами доступу клієнт.
ManagerController - відповідає за дії користувача з правами доступу
менеджер.
SearchController – відповідає за пошук в акаунтах з різним правом доступу.
LoginController – відповідає за процедуру авторизації та вихід з акаунту.
Клас EDBindingInitializer – реалізує прив'язку активних об'єктів та
текстових значень з сторінки html.
Метою Hibernate є звільнення розробника від суттєвих типових завдань із
програмування взаємодії з базою даних.
Hibernate займається зв'язками класів з таблицями бази даних (і типів даних
мови програмування із типами даних SQL), і реалізує засоби автоматичної
побудови SQL запитів й зчитування/запису інформації, і може значно скоротити
час розробки, який зазвичай витрачається на ручне створення типового SQL і
JDBC коду. Hibernate генерує SQL запити і вивільняє розробника від ручної
обробки результуючого набору інформації, конвертації об'єктів і забезпечення
сумісності із іншими базами даних.
Hibernate надає прозору підтримку збереження інформації, тобто їхньої
персистентності для POJO-об'єктів, тобто для звичайних Java-об'єктів.
Лист
ЧДТУ. 222080.001 ПЗ
27
Змн. Лист № докум. Підпис Дата
Для роботи необхідно змапити базу даних. Для цього існують бін класи.
Mapping Java класів з таблицями бази даних реалізується за допомогою (в
нашому випадку) Java анотацій.
Забезпечуються можливості з організації сполучення між класами «один-
до-багатьох» і «багато-до-багатьох». Додатково до керування зв'язками між
об'єктами, Hibernate також може управляти рефлексивними асоціаціями, де
об'єкт має зв'язок «один-до-багатьох» з різними примірниками свого власного
типу даних.
Бін-класи даної програми зображено на (рис. 3.5).
Рисунок 3.5 - Бін класи
Для того, щоб змапити таблицю з бази даних з використанням анотацій,
потрібно в бін-класі зазначити за допомогою анотації: @Entity яка явно вказує, що
даний клас буде призначений для мапінгу бази даних.
Далі йде анотація @Table(name="orders"), яка проводить мапінг таблиці orders.
Опис первинного ключа відбувається за допомогою анотацій:
@Id
@GeneratedValue
@Column(name = "idOrder")
Integer idOrder;
Для мапінгу зв’язку багато-до-одного використовується анотація:
@ManyToOne(cascade = CascadeType.ALL)
@JoinColumn(name = "destinationId")
Store destinationStore;
Лист
ЧДТУ. 222080.001 ПЗ
28
Змн. Лист № докум. Підпис Дата
Hibernate забезпечує застосування SQL-подібної мови Hibernate Query
Language (HQL), яка дозволяє реалізовувати SQL-подібні запити, записані поряд
з об'єктами даних Hibernate. Запити критеріїв використовуються як об'єктно-
орієнтована альтернатива до HQL.
В проекті HQL використовую в потоці DAO. Далі наведено метод пошуку,
з використанням мови HQL:
@SuppressWarnings("unchecked")
public List<Users> searchUsers(String searchString) {
searchString = "%" + searchString + "%";
return sessionFactory
openSession()
.createQuery(
"from Users where login like '" + searchString + "'
or pass like '" + searchString + "'
or firstName like '" + searchString + "'
or lastName like '" + searchString + "'
or phone like '" + searchString + "'
or document like '" + searchString + "'
or description like '" + searchString + "'").list();
}
В конфігураціонному xml файлі зазначаються класи які повинні мапитися:
<bean id="sessionFactory"
class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean" p:dataSource-
ref="dataSource">
<property name="annotatedClasses"><list>
<value>org.chpt.expressdelivery.entity.Places</value>
<value>org.chpt.expressdelivery.entity.Users</value>
<value>org.chpt.expressdelivery.entity.Orders</value>
<value>org.chpt.expressdelivery.entity.Store</value>
<value>org.chpt.expressdelivery.entity.Location</value>
</list></property>
За вивід інформації відповідальним є Моде́ль-вид-контро́лер (або Модель-
вигляд-контролер, англ. Model-view-controller, MVC) — архітектурний шаблон,
Лист
ЧДТУ. 222080.001 ПЗ
29
Змн. Лист № докум. Підпис Дата
який застосовується під час проектування та розробки програмного
забезпечення. (рис. 3.6).
Цей шаблон поділяє систему на три складові: вигляд даних, модель даних
та керування. Застосовується для відокремлення даних (модель) від інтерфейсу
робітника (вигляду) так, щоб зміни інтерфейсу робітника мінімально впливали
на роботу з даними, а зміни в моделі даних могли проводитись без змін
інтерфейсу робітника.
Мета шаблону — гнучкий дизайн програмного забезпечення, який дозволяє
полегшувати наступні зміни чи розширення програм, а також надавати
можливість повторного використання різних компонент програми. Крім того
використання цього шаблону у масштабних системах призводить до певної
впорядкованості їх структури і робить їх простішими завдяки зменшенню
складності.
Рисунок 3.6 - Model-view-controller
Приклад MVC методу паттерну:
@RequestMapping("/manager")
public ModelAndView manager(HttpServletRequest request) {
ModelAndView mvc = new ModelAndView("manager");
mvc.addObject("cookies", request.getCookies());
return mvc;
}
Для генерації html сторінок які відображаються в браузері застосовується
технологія JSP.
Лист
ЧДТУ. 222080.001 ПЗ
30
Змн. Лист № докум. Підпис Дата
JSP (Java Server Pages) — технологія, що дає можливість веб-розробникам
динамічно генерувати HTML, XML та інші веб-сторінки. Не є складовою
частиною базової технології створення бізнес-програм Java EE, оскільки може
застосовуватись окремо, а технологія Java EE може застосовуватись без
використання JSP. Технологія дозволяє інтегрувати Java-код, в статичний вміст
сторінки. Також можуть застосовуватись бібліотеки JSP тегів для вставки їх в
JSP-сторінки. Сторінки компілюються JSP-компілятором в сервлети, які є Java-
класами, і працюють на сервері. Сервлети також можуть бути скомпільовані
розробником, не використовуючи JSP-сторінки. Ці технології замінюють одна
одну.
Прикладом послугує JSP сторінка авторизації:
<%@ include file="header.jsp"%>
<%@taglib uri="http://www.springframework.org/tags/form"
prefix="loginForm"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<%@taglib uri="http://www.springframework.org/tags" prefix="spring"%>
<div class="header_login">
<div class="logo">
<a href="#"><img src="images/logo.gif" alt="" title="" border="0" /></a>
</div>
</div>
<div class="login_form">
<h3>Авторизация</h3>
<loginForm:form action="start.php" method="POST" commandName="authorization"
class="niceform">
<fieldset>
<dl><dt><loginForm:label path="login">Логин:</loginForm:label></dt>
<dd><loginForm:input path="login" size="54" /></dd></dl>
<dl><dt><loginForm:label path="pass">Пароль:</loginForm:label></dt>
<dd><loginForm:input path="pass" type="password" size="54" /></dd></dl>
<dl class="submit"><input type="submit" name="submit" id="submit" value="Авторизация"
/></dl>
<dl><c:forEach var="error" items="${errorLog}">
Лист
ЧДТУ. 222080.001 ПЗ
31
Змн. Лист № докум. Підпис Дата
<div class="error_box">${error}</div>
</c:forEach></dl></fieldset>
</loginForm:form>
</div>
<div class="footer_login">
<div class="right_footer_login">
<img src="images/indeziner_logo.gif" alt="" title="" border="0" />
</div>
</div>
</div>
</body>
</html>
Для відображення сторінки в веб-браузері застосовуються теги
форматування HTML.
HTML (HyperText Markup Language) — стандартна мова розмітки веб-
сторінок в мережі Інтернет. Більшість веб-сторінок написано за допомогою мови
HTML (або XHTML). Документ HTML оброблюється браузером та
відображається на екрані у звичному для людини вигляді.
HTML є похідною мовою від SGML, скопіювавши від неї визначення типу
документу та принцип структурної розмітки тексту.
HTML разом із каскадними таблицями стилів та вбудованими скриптами —
це три базові технології побудови веб-сторінок.
HTML впроваджує засоби для:
⎯ отримання інформації із мережі Інтернет через гіперпосилання;
⎯ формування структурованого документу шляхом позначення
структурного складу тексту: заголовки, списки, абзаци, цитати, таблиці та інше;;
⎯ створення інтерактивних форм;
⎯ інтеграцію зображень, звуку, відео, та інших об'єктів до тексту.
Щоб придати тегам HTML більш зрозумілого вигляду, застосуємо каскадні
таблиці стилів.
Лист
ЧДТУ. 222080.001 ПЗ
32
Змн. Лист № докум. Підпис Дата
Каскадні таблиці стилів (Cascading Style Sheets) — спеціальна мова, що
застосовується для відображення сторінок, створених мовами розмітки даних.
Найчастіше CSS застосовують для візуальної презентації сторінок, написаних
HTML та XHTML, але формат CSS може використовуватись до інших видів
XML-документів.
Лист
ЧДТУ. 222080.001 ПЗ
33
Змн. Лист № докум. Підпис Дата
4 РОЗРАХУНКИ ТА МАТЕРІАЛИ, ЩО ПІДТВЕРДЖУЮТЬ
ПРАЦЕЗДАТНІСТЬ ТА НАДІЙНІСТЬ СИСТЕМИ, ЩО
РОЗРОБЛЯЄТЬСЯ.
При введенні невірної інформації у форму входу в акаунт, ми побачимо
наступне повідомлення. (рис. 4.1).
Рисунок 4.1 – Повідомлення при введені не вірних даних.
При вводі забороненого символу «’» в строку пошуку, отримаєм
повідомлення про помилку. (рис 4.2). В якому говорить, що в строчці запиту
присутній непередбачуваний символ.
Лист
ЧДТУ. 222080.001 ПЗ
34
Змн. Лист № докум. Підпис Дата
Рисунок 4.2 – Повідомлення про помилку.
На (рис 4.3) показано успішне створення замовлення і генерацію
порядкового номера замовлення.
Рисунок 4.3 – Успішне створення замовлення.
Додане замовлення необхідно направити за рішенням менеджеру на інший
склад. На (рис 4.4) показано успішне направлення замовлення на інший склад,
менеджером.
Рисунок 4.4 – Успішне направлення замовлення на інший склад.
Лист
ЧДТУ. 222080.001 ПЗ
35
Змн. Лист № докум. Підпис Дата
Для видачі замовлення, необхідно додати або вибрати зі списку людину, яка
отримує особисто замовлення. При успішній видачі, буде інформація з серійним
номером замовлення. (рис 4.5).
Рисунок 4.5 – Повідомлення при успішній видачі замовлення.
Лист
ЧДТУ. 222080.001 ПЗ
36
Змн. Лист № докум. Підпис Дата
5 ОПИС ОРГАНІЗАЦІЇ РОБІТ, ЩО ПОВ'ЯЗАНІ ІЗ ЗАСТОСУВАННЯМ
Основні функції додатку.
В програмі передбачено 3 рівні прав доступу до програми:
⎯ Адміністратор
⎯ Менеджер
⎯ Клієнт
Адміністратор – може створювати нові акаунти з рівнями прав доступу
адміністратор, менеджер, клієнт, та редагувати їх. Має можливість створювати
нові склади та редагувати їх. Адміністратор проводить аналогічні дії з
населеними пунктами. В системі присутній пошук, в межах в залежності від
рівня доступу. (рис. 5.1, 5.2, 5.3).
При створенні або редагуванні користувача, пароль потрібно ввести в 2
поля, сформовано це для того щоб працівник запам’ятав пароль та не було
різниці між введеним та запам’ятованим паролем. Біля поля «пароль» є кнопка
«show» з використанням цієї кнопки користувач може побачити пароль та
сховати його за зірочками по замовчуванню.
При створенні нового складу, потрібно позначити склад на карті простим
кліком миші. Для більшої точності координату можна редагувати в текстовому
полі.
Лист
ЧДТУ. 222080.001 ПЗ
37
Змн. Лист № докум. Підпис Дата
Рисунок 5.1 – Список користувачів
Рисунок 5.2 - Додавання нового складу.
Лист
ЧДТУ. 222080.001 ПЗ
38
Змн. Лист № докум. Підпис Дата
Рисунок 5.3 - Редагування користувача.
Менеджер – створює нові замовлення, відслідковує місце знаходження
вантажу з деталізацією всього ланцюга переміщення. Також менеджер має права
переглядати всі замовлення. Створено зручний фільтр для пошуку замовлень,
якщо їх буде багато. Ще менеджер може створювати та редагувати і видаляти
нові акаунти але тільки з рівнем прав доступу «Клієнт». В системі реалізовано
пошук, в містах в залежності від рівня прав доступу. При вході в акаунт,
менеджер має вибрати склад на якому він працює, а вже потім проводити дії з
системою. (рис. 5.4, 5.5, 5.6).
В меню «Закази» менеджер може вивчати замовлення які знаходяться на
цьому складі, та замовлення які готові до відвантаження, а також всі інші
замовлення. Створюється клієнт точно так же як і під правами користування
адміністратор, але не має можливості вибору рівня прав доступу. Рівень прав
доступу для нового користувача буде реалізовуватись за замовчуванням.
Коли створюється нове замовлення, генерується унікальний серійний номер
цього замовлення. Який надається користувачеві. (рис 5.7).
Лист
ЧДТУ. 222080.001 ПЗ
39
Змн. Лист № докум. Підпис Дата
Рисунок 5.4 - Створення нового замовлення.
Рисунок 5.5 - Редагування клієнта.
Лист
ЧДТУ. 222080.001 ПЗ
40
Змн. Лист № докум. Підпис Дата
Рисунок 5.6 - Перегляд існуючого замовлення.
Клієнт – має можливість лише відслідковувати рух замовлення, з переліком
всіх перевезень. (рис 5.7). Для відслідковування замовлення, клієнт зобов’язаний
ввести індивідуальний порядковий номер замовлення.
Рисунок 5.7 - Відслідковування вантажу клієнтом.
Лист
ЧДТУ. 222080.001 ПЗ
41
Змн. Лист № докум. Підпис Дата
Користувачі кожного рівня прав доступу мають можливість скористатися
пошуком. Пошук виконується по всім ячейкам в залежності від рівня прав
доступу. І тому в результаті пошуку можна побачити інформацію з різних
таблиць.
На головній сторінці акаунтів знаходиться статистика. (рис 5.8).
Рисунок 5.8 - Статистика менеджера.
Рисунок 5.9 - Пошук.
Лист
ЧДТУ. 222080.001 ПЗ
42
Змн. Лист № докум. Підпис Дата
Рисунок 5.10 - Успішне додавання замовлення.
Лист
ЧДТУ. 222080.001 ПЗ
43
Змн. Лист № докум. Підпис Дата
ВИСНОВКИ
У процесі роботи над кваліфікаційною роботою бакалавра була створена
інформаційна система для автоматизації роботи фірм експрес доставок.
Система представляє веб-програму яка створює дані в реляційній базі
даних, котра складається з п’яти таблиць. Програма включає три рівні доступу.
Кожна роль наділена своїми обмеженнями та привілеями. Додавання та зміни
замовлення реалізують користувачі з рівнем прав доступу менеджер. Завдання
адміністратора – керування складами та населеними пунктами. Користувачі з
рівнем прав доступу клієнт, можуть лише переглядати маршрут замовлення.
Можливості системи: зручне керування замовленнями та їх відстежування,
керування користувачами та управління складами, населеними пунктами.
Для перевірки ефективності наведено ряд розрахунків і порівнянь, що
дозволяють кількісно співставити переваги даної програми відносно систем які
існували раніше на ринку. Для того щоб точно вирахувати ефективність було
розглянуто 5 етапів: постановка задачі, створення алгоритму, створення
програми, налагодження програми та дослідна експлуатація.
Лист
ЧДТУ. 222080.001 ПЗ
44
Змн. Лист № докум. Підпис Дата
СПИСОК ВИКОРИСТАНИХ ДЖЕРЕЛ
1 Мартін Р. Чистий код. Створення, аналіз і рефакторинг. [Текст] / Р. Мартін.
— К.: УкрІНТЕІ, 2018 — 358 c.
2 Пономаренко В. Проектування інформаційних систем. [Текст] / В.
Пономаренко. — К. Київ: Видавничий центр «Академія», 2017 — 440 с.
3 IntelliJ Community [Електронний ресурс] Режим доступу:
http://www.jetbrains.org/display/IJOS/Home;jsessionid=C81C7C8B74643ABBEE1
D4D8C34D5C3D1
4 James Strachan. Groovy — the birth of a new dynamic language for the Java
platform [Електронний ресурс] Режим доступу: http://radio-
weblogs.com/0112098/2017/08/29.html
5 Scala as the long term replacement for java/javac? (July 6, 2009). [Електронний
ресурс] Режим доступу: http://macstrac.blogspot.com/2019/04/scala-as-long-term-
replacement-for.html
6 Сервер баз даних MySQL [Електронний ресурс] Режим доступу:
http://mysql.com.
7 Бегг К. Бази даних. Проектування, реалізація і супровід. Теорія та
практика / К. Бегг, Т. Конноллі. – 2016. – 1238 с.
8 Берюх И. С. Вибір технології розробки програмного забезпечення
інформаційних систем. ScienceRise. Харкsв, 2018. № 5/2. С. 40–43
9 Брюс У. Javaсервлети і JSP. Збірник рецептів. [Текст] / У. Брюс. —
Львів, Захід-Прес, 2019 — 768 с.
10 Васильєв Н. Об'єктно-орієнтоване програмування. [Текст] / Н.
Васильєв. — К. Львів: «Афіша», 2015 — 400 с.
11 Вольфсон Б. Гнучкі методології розробки [Електронний ресурс] / Б.
Вольфсон // Електронна бібліотека Аdm-lib.ru. – Режим доступа: http://Аdm-
lib.ru/books/10/Gibkie-metodologii.pdf
Лист
ЧДТУ. 222080.001 ПЗ
45
Змн. Лист № докум. Підпис Дата
12 Інтернет-бізнес в Україні [Електронний ресурс] // Український
інтернет-журнал АIN.UА – Режим доступу: http://Аin.uА/5-trendov-
progrАmmirovАniyА-kotorye-izmenyАt-industriyu.
13 Інженерія якості програмного забезпечення: навч. посібник / Г.В
Табунщик, Р.К. Кудерметов, Т.І. Брагіна. - Запоріжжя: ЗНТУ, 2018. - 180 с.
14 Кеннеді Б. Вивчаємо HTML / Б. Кеннеді, Ч. Маскиано. – 2018. – 272 с.
15 Концепція розвитку цифрової економіки та суспільства України на
2018-2020 роки: Розпорядженням Кабінету Міністрів України від 17 січня 2018
р. № 67-р. URL : https://zakon.rada.gov.ua/laws/show/67-2018-%D1%80. (дата
звернення: 17.10.20).
16 Лоусон Б. HTML і XHTML. Детальне керівництво / Б. Лоусон, Р. Шарп.
– 2017. – 752 с.
17 МатовО.Я., ХрамоваІ.О. Сучасні технології інтеграції інформаційних
ресурсів. Реєстрація, зберігання і обробка даних. 2019, Т. 11, № 1. С.33-42.
18 Офіційний сайт MySQL [Електронний ресурс]. - Режим
доступа: http://dev.mysql.com/
19 Панченко С. В. Математичне моделювання в розподілених
інформаційних системах: Монографія. Харків: ФОП Бровін О. В., 2017. – 220с.
Лист
ЧДТУ. 222080.001 ПЗ
46
Змн. Лист № докум. Підпис Дата
ДОДАТОК А
МІНІСТЕРСТВО ОСВІТИ І НАУКИ УКРАЇНИ
СИСТЕМА АВТОМАТИЗАЦІЇ ЕКСПРЕС ДОСТАВОК
Текст програми
UA.ЧДТУ.222080-01 12 01
Листів 21
2022
Лист
ЧДТУ. 222080.001 ПЗ
47
Змн. Лист № докум. Підпис Дата
Файл web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
version="2.5">
<display-name>Spring ExpressDelivery</display-name>
<description>Spring ExpressDelivery application</description>
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/spring/applicationContext-
hibernate.xml</param-value>
</context-param>
<listener>
<listener-
class>org.springframework.web.context.ContextLoaderListener</liste
ner-class>
</listener>
<servlet>
<servlet-name>expressdelivery</servlet-name>
<servlet-
class>org.springframework.web.servlet.DispatcherServlet</servlet-
class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>default</servlet-name>
<url-pattern>*.css</url-pattern>
<url-pattern>*.js</url-pattern>
<url-pattern>*.png</url-pattern>
<url-pattern>*.gif</url-pattern>
<url-pattern>*.jpg</url-pattern>
<url-pattern>*.ico</url-pattern>
Лист
ЧДТУ. 222080.001 ПЗ
48
Змн. Лист № докум. Підпис Дата
</servlet-mapping>
<servlet-mapping>
<servlet-name>expressdelivery</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
<filter>
<filter-name>httpMethodFilter</filter-name>
<filter-
class>org.springframework.web.filter.HiddenHttpMethodFilter</filte
r-class>
</filter>
<filter-mapping>
<filter-name>httpMethodFilter</filter-name>
<servlet-name>expressdelivery</servlet-name>
</filter-mapping>
<filter>
<filter-name>characterEncodingFilter</filter-name>
<filter-
class>org.springframework.web.filter.CharacterEncodingFilter</filt
er-class>
<init-param>
<param-name>encoding</param-name>
<param-value>UTF-8</param-value>
</init-param>
<init-param>
<param-name>forceEncoding</param-name>
<param-value>true</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>characterEncodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<session-config>
<session-timeout>10</session-timeout>
Лист
ЧДТУ. 222080.001 ПЗ
49
Змн. Лист № докум. Підпис Дата
</session-config>
<welcome-file-list>
<welcome-file>redirect.jsp</welcome-file>
</welcome-file-list>
<filter>
<filter-name>springSecurityFilterChain</filter-name>
<filter-
class>org.springframework.web.filter.DelegatingFilterProxy</filter
-class>
</filter>
<filter-mapping>
<filter-name>springSecurityFilterChain</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
</web-app>
Файл expressdelivery-servlet.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:p="http://www.springframework.org/schema/p"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:oxm="http://www.springframework.org/schema/oxm"
xmlns:mvc="http://www.springframework.org/schema/mvc"
xsi:schemaLocation="http://www.springframework.org/schema/bea
ns http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd
http://www.springframework.org/schema/oxm
http://www.springframework.org/schema/oxm/spring-oxm-3.0.xsd
http://www.springframework.org/schema/mvc
http://www.springframework.org/schema/mvc/spring-
mvc.xsd">
<context:component-scan base-
package="org.chpt.expressdelivery.controller" />
Лист
ЧДТУ. 222080.001 ПЗ
50
Змн. Лист № докум. Підпис Дата
<context:component-scan base-
package="org.chpt.expressdelivery.dao" />
<bean
class="org.springframework.web.servlet.handler.SimpleMappingE
xceptionResolver">
<property name="exceptionMappings">
<props>
<prop
key="org.springframework.web.servlet.PageNotFound">pageNotFound</p
rop>
<prop
key="org.springframework.dao.DataAccessException">dataAccessFailur
e</prop>
<prop
key="org.springframework.transaction.TransactionException">dataAcc
essFailure</prop>
</props>
</property>
</bean>
<bean
class="org.springframework.web.servlet.mvc.annotation.Annotat
ionMethodHandlerAdapter">
<property name="webBindingInitializer">
<bean
class="org.chpt.expressdelivery.controller.EDBindingInitializer"
/>
</property>
</bean>
<bean
class="org.springframework.validation.beanvalidation.LocalVal
idatorFactoryBean"
id="validator" />
<mvc:annotation-driven validator="validator" />
<bean
Лист
ЧДТУ. 222080.001 ПЗ
51
Змн. Лист № докум. Підпис Дата
class="org.springframework.web.servlet.view.InternalResourceV
iewResolver”
p:prefix="/WEB-INF/jsp/" p:suffix=".jsp" p:order="2" />
<bean id="messageSource"
class="org.springframework.context.support.ResourceBundleMess
ageSource"
p:basename="messages" />
</beans>
Файл applicationContext-dataSourse.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:p="http://www.springframework.org/schema/p"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:jdbc="http://www.springframework.org/schema/jdbc"
xsi:schemaLocation="
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd
http://www.springframework.org/schema/jdbc
http://www.springframework.org/schema/jdbc/spring-jdbc.xsd">
<context:property-placeholder
location="classpath:jdbc.properties"/>
<bean id="dataSource"
class="org.apache.commons.dbcp.BasicDataSource" destroy-
method="close"
p:driverClassName="${jdbc.driverClassName}"
p:url="${jdbc.url}"
Лист
ЧДТУ. 222080.001 ПЗ
52
Змн. Лист № докум. Підпис Дата
p:username="${jdbc.username}"
p:password="${jdbc.password}"/>
</beans>
applicationContext-hibernate.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:p="http://www.springframework.org/schema/p"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:tx="http://www.springframework.org/schema/tx"
xsi:schemaLocation="
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx.xsd">
<import resource="applicationContext-dataSource.xml" />
<context:property-placeholder
location="classpath:jdbc.properties" />
<bean id="sessionFactory"
class="org.springframework.orm.hibernate3.annotation.Annotati
onSessionFactoryBean"
p:dataSource-ref="dataSource">
<property name="packagesToScan">
<list>
<value>org.chpt.expressdelivery.entity.*</value>
</list>
Лист
ЧДТУ. 222080.001 ПЗ
53
Змн. Лист № докум. Підпис Дата
</property>
<property name="annotatedClasses">
<list>
<value>org.chpt.expressdelivery.entity.Places</value>
<value>org.chpt.expressdelivery.entity.Users</value>
<value>org.chpt.expressdelivery.entity.Orders</value>
<value>org.chpt.expressdelivery.entity.Store</value>
<value>org.chpt.expressdelivery.entity.Location</value>
</list>
</property>
<property name="hibernateProperties">
<props>
<prop
key="hibernate.dialect">${hibernate.dialect}</prop>
<prop
key="hibernate.show_sql">${hibernate.show_sql}</prop>
<prop
key="hibernate.generate_statistics">${hibernate.generate_statistic
s}</prop>
<prop
key="hibernate.connection.release_mode">${hibernate.connection.rel
ease_mode}</prop>
</props>
</property>
<property name="eventListeners">
<map>
<entry key="merge">
<bean
Лист
ЧДТУ. 222080.001 ПЗ
54
Змн. Лист № докум. Підпис Дата
class="org.springframework.orm.hibernate3.support.IdTransferr
ingMergeEventListener" />
</entry>
</map>
</property>
</bean>
<import resource="applicationContext-security.xml" />
<bean id="transactionManager"
class="org.springframework.orm.hibernate3.HibernateTransactio
nManager"
p:sessionFactory-ref="sessionFactory" />
<context:annotation-config />
<tx:annotation-driven />
</beans>
Лист
ЧДТУ. 222080.001 ПЗ
55
Змн. Лист № докум. Підпис Дата
applicationContext-Security.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans:beans
xmlns="http://www.springframework.org/schema/security"
xmlns:beans="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/bea
ns http://www.springframework.org/schema/beans/spring-beans-
3.0.xsd
http://www.springframework.org/schema/security
http://www.springframework.org/schema/security/spring-security-
3.1.xsd">
<http access-denied-page="/error403.jsp">
<intercept-url pattern="/managing" access="ROLE_MANAGER"
/>
<intercept-url pattern="/managing/*"
access="ROLE_MANAGER" />
<intercept-url pattern="/admin" access="ROLE_ADMIN" />
<intercept-url pattern="/admin/*" access="ROLE_ADMIN" />
<intercept-url pattern="/client" access="ROLE_CLIENT" />
<intercept-url pattern="/client/*" access="ROLE_CLIENT"
/>
<form-login login-page="/start" default-target-
url="/whoAreWho" authentication-failure-url="/start?error=true" />
<logout logout-url="/logout" logout-success-url="/start"
/>
<remember-me />
</http>
<authentication-manager>
<authentication-provider>
<jdbc-user-service data-source-ref="dataSource"
users-by-username-query="SELECT login as
username, pass, 'true' FROM users where login=?"
Лист
ЧДТУ. 222080.001 ПЗ
56
Змн. Лист № докум. Підпис Дата
authorities-by-username-query="SELECT
users.login as username, users.access as authorities FROM users
WHERE users.login = ? " />
</authentication-provider>
</authentication-manager>
</beans:beans>
LoginController.java
package org.chpt.expressdelivery.controller;
import org.chpt.expressdelivery.dao.ExpressDeliveryDAO;
import org.chpt.expressdelivery.entity.Users;
import org.springframework.beans.factory.annotation.Autowired;
import
org.springframework.security.core.context.SecurityContextHolder;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.servlet.ModelAndView;
@Controller
public class LoginController {
@Autowired
ExpressDeliveryDAO dao;
public Users getThisUser() {
return
dao.getUserFromLogin(SecurityContextHolder.getContext()
.getAuthentication().getName());
}
@RequestMapping("/")
public ModelAndView first() {
ModelAndView mvc = new ModelAndView("start");
Лист
ЧДТУ. 222080.001 ПЗ
57
Змн. Лист № докум. Підпис Дата
mvc.addObject("title", "Авторизация");
return mvc;
}
@RequestMapping(value = "/start", method = RequestMethod.GET)
public String start(Model mav) {
try {
Users user = getThisUser();
if (user.getAccess().equals("ROLE_ADMIN")) {
return "redirect:/admin";
}
if (user.getAccess().equals("ROLE_MANAGER")) {
return "redirect:/managing";
}
if (user.getAccess().equals("ROLE_CLIENT")) {
return "redirect:/client";
}
} catch (Exception e) {
e.printStackTrace();
}
mav.addAttribute("title", "Авторизация");
return "start";
}
@RequestMapping("/whoAreWho")
public String redirectAfterLogin() {
Users user = getThisUser();
if (user.getAccess().equals("ROLE_ADMIN")) {
return "redirect:/admin";
}
if (user.getAccess().equals("ROLE_MANAGER")) {
return "redirect:/managing";
}
if (user.getAccess().equals("ROLE_CLIENT")) {
return "redirect:/client";
Лист
ЧДТУ. 222080.001 ПЗ
58
Змн. Лист № докум. Підпис Дата
}
return "redirect:/";
}
@RequestMapping("/logouts")
public String logout() {
ManagerController.localStore = null;
return "redirect:/logout";
}
}
ExpressDeliveryDAO.java
package org.chpt.expressdelivery.dao;
import java.util.List;
import org.chpt.expressdelivery.controller.ManagerController;
import org.chpt.expressdelivery.entity.Location;
import org.chpt.expressdelivery.entity.Orders;
import org.chpt.expressdelivery.entity.Places;
import org.chpt.expressdelivery.entity.Store;
import org.chpt.expressdelivery.entity.Users;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.criterion.Order;
import org.hibernate.criterion.Restrictions;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Repository;
@Repository
public class ExpressDeliveryDAO {
@Autowired
SessionFactory sessionFactory;
Лист
ЧДТУ. 222080.001 ПЗ
59
Змн. Лист № докум. Підпис Дата
// Read#
@SuppressWarnings("unchecked")
public List<Places> readPlaces() {
return sessionFactory.openSession().createQuery("from
Places").list();
}
// Insert#
public void insertUsers(Users user) {
Session openedSession = sessionFactory.openSession();
Transaction transAction =
openedSession.beginTransaction();
openedSession.save(user);
transAction.commit();
openedSession.close();
}
// Update#
public void updatePlace(Places place) {
Session session = sessionFactory.openSession();
session.beginTransaction();
session.update(place);
session.getTransaction().commit();
session.close();
}
public void deleteUsers(Users user) {
Session session = sessionFactory.openSession();
session.beginTransaction();
session.delete(user);
session.getTransaction().commit();
session.close();
}
public Users getUserFromId(int id) {
Session session = sessionFactory.openSession();
Лист
ЧДТУ. 222080.001 ПЗ
60
Змн. Лист № докум. Підпис Дата
Users thisUser = (Users) session.get(Users.class, id);
session.close();
return thisUser;
}
public Users getUserFromLogin(String login) {
@SuppressWarnings("unchecked")
List<Users> tempUser = sessionFactory.openSession()
.createQuery("from Users where login='" + login
+ "'").list();
if (tempUser.size() == 1) {
return tempUser.get(0);
} else {
return null;
}
}
public boolean checkUniqTrackingNumber(String number) {
@SuppressWarnings("unchecked")
List<Orders> tempOrder = sessionFactory
.openSession()
.createQuery(
"from Orders where trackingNumber='"
+ number + "'")
.list();
if (tempOrder.size() == 1) {
return true;
} else {
return false;
}
}
@SuppressWarnings("unchecked")
public List<Location> getLocationByOrderAsk(Orders order) {
List<Location> list = sessionFactory.openSession()
Лист
ЧДТУ. 222080.001 ПЗ
61
Змн. Лист № докум. Підпис Дата
.createCriteria(Location.class)
.add(Restrictions.eq("order", order))
.addOrder(Order.asc("importt")).list();
return list;
}
@SuppressWarnings("unchecked")
public List<Users> searchUsers(String searchString) {
searchString = "%" + searchString + "%";
return sessionFactory
.openSession()
.createQuery(
"from Users where login like '" +
searchString
+ "' or pass like '" +
searchString
+ "' or firstName like '" +
searchString
+ "' or lastName like '" +
searchString
+ "' or phone like '" +
searchString
+ "' or document like '" +
searchString
+ "' or description like '"
+ searchString
+ "'").list();
}
Place.java
package org.chpt.expressdelivery.entity;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.Table;
Лист
ЧДТУ. 222080.001 ПЗ
62
Змн. Лист № докум. Підпис Дата
@Entity
@Table(name = "places")
public class Places extends SearchResult {
@Id
@GeneratedValue
@Column(name = "idPlace")
Integer idPlace;
String settlement;
String region;
String district;
public Integer getIdPlace() {
return idPlace;
}
public void setIdPlace(Integer idPlace) {
this.idPlace = idPlace;
}
public String getSettlement() {
return settlement;
}
public void setSettlement(String settlement) {
this.settlement = settlement;
}
public String getRegion() {
return region;
}
public void setRegion(String region) {
this.region = region;
Лист
ЧДТУ. 222080.001 ПЗ
63
Змн. Лист № докум. Підпис Дата
}
public String getDistrict() {
return district;
}
public void setDistrict(String district) {
this.district = district;
}
@Override
public String toString() {
return region + "," + district + "," + settlement;
}
public void setSearchResult() {
setUrl("placeEdit.php?editId=" + idPlace);
setBody(toString());
setDomain("Населенный пункт");
}
}
Лист
ЧДТУ. 222080.001 ПЗ
64
Змн. Лист № докум. Підпис Дата
ExpressDeliveryService.java
package org.chpt.expressdelivery.service;
import java.util.ArrayList;
import java.util.List;
import java.util.Random;
import org.chpt.expressdelivery.dao.ExpressDeliveryDAO;
import org.chpt.expressdelivery.entity.Location;
import org.chpt.expressdelivery.entity.Orders;
import org.chpt.expressdelivery.entity.Places;
import org.chpt.expressdelivery.entity.SearchResult;
import org.chpt.expressdelivery.entity.Store;
import org.chpt.expressdelivery.entity.Users;
import org.springframework.stereotype.Service;
@Service
public class ExpressDeliveryService {
ExpressDeliveryDAO dao;
public ExpressDeliveryService(ExpressDeliveryDAO dao) {
this.dao = dao;
}
public void addUser(Users user) {
dao.insertUsers(user);
}
public void editUser(Users user) {
dao.updateUsers(user);
}
public void deleteUser(Users user) {
dao.deleteUsers(user);
}
Лист
ЧДТУ. 222080.001 ПЗ
65
Змн. Лист № докум. Підпис Дата
public void insertOrder(Orders order) {
dao.insertOrder(order);
}
public String generateTrackingNumber() {
Random rand = new Random();
String str = "";
do {
str = "";
for (int i = 0; i <= 12; i++) {
str += (0 + rand.nextInt(9));
}
str = "ED" + str;
} while (dao.checkUniqTrackingNumber(str) == true);
return str;
}
public List<Orders> readOrderToDelivery() {
return dao.getOrderReadyToDelivey();
}
public List<Orders> readOrderOnCurrentStore() {
return dao.getOrderOnCurrentStore();
}
public void addStore(Store store) {
dao.insertStore(store);
}
public void updateStore(Store store) {
dao.updateStore(store);
}
public void deleteStore(Store store) {
Лист
ЧДТУ. 222080.001 ПЗ
66
Змн. Лист № докум. Підпис Дата
dao.deleteStore(store);
}
public void addPlace(Places place) {
dao.insertPlace(place);
}
public void updatePlace(Places place) {
dao.updatePlace(place);
}
public void deleteStore(Places place) {
dao.deletePlace(place);
}
public List<Users> getCountUsersWithChoosenAccesLevel(String
level)
throws NoSuchMethodError {
return dao.getUsersWithAccessLevel(level);
}
public void insertLocation(Location loc) {
dao.insertLocation(loc);
}
public void updateOrder(Orders order) {
dao.updateOrder(order);
}
public void updateLocation(Location location) {
dao.updateLocation(location);
}
public List<SearchResult> searchAdmin(String searchWord) {
ArrayList<SearchResult> result = new
ArrayList<SearchResult>();
for (Users u : dao.searchUsers(searchWord)) {
u.setSearchResult();
Лист
ЧДТУ. 222080.001 ПЗ
67
Змн. Лист № докум. Підпис Дата
SearchResult searchResultTemp = u;
result.add(searchResultTemp);
}
for (Places p : dao.searchPlaces(searchWord)) {
p.setSearchResult();
SearchResult searchResultTemp = p;
result.add(searchResultTemp);
}
for (Store s : dao.searchStore(searchWord)) {
s.setSearchResult();
SearchResult searchResultTemp = s;
result.add(searchResultTemp);
}
return result;
}
public ArrayList<SearchResult> searchManager(String
searchWord) {
ArrayList<SearchResult> result = new
ArrayList<SearchResult>();
for (Users u : dao.searchUsers(searchWord)) {
if (u.getAccess() == "ROLE_CLIENT") {
u.setSearchResult();
u.setUrl("clientEdit?editId=" + u.getIdUser());
SearchResult searchResultTemp = u;
result.add(searchResultTemp);
}
}
for (Orders s : dao.searchOrder(searchWord)) {
s.setSearchResult();
SearchResult searchResultTemp = s;
result.add(searchResultTemp);
}
return result;
}
}
Лист
ЧДТУ. 222080.001 ПЗ
68
Змн. Лист № докум. Підпис Дата