Диплом: Разработка электронного магазина по реализации компьютерных комплектующих для компании "Технодом"

Внимание! Если размещение файла нарушает Ваши авторские права, то обязательно сообщите нам
67
Имя столбца
Тип
данных
Ограничения
Описание
id
bigint
PRIMARY KEY
Идентификатор
created
timestamp
Дата и время создания
lastchanged
timestamp
Дата и время последнего
изменения
address
varchar
NOT NULL
Адрес доставки, сохраненный
в профиле
email
varchar
Электронная почта,
указанная при регистрации
firstname
varchar
Имя
lastlogin
timestamp
Дата и время последней
аутентификации
lastname
varchar
FOREIGN KEY
Фамилия
logincount
integer
Количество успешных входов
в систему
passwordhash
varchar
Хэш пароля
phone
varchar
Телефон
registrationtime
timestamp
Дата и время регистрации
totalsum
integer
Общая сумма заказов для
накопления скидки
username
varchar
Логин
group_id
bigint
Идентификатор группы
пользователей
Группы пользователей хранятся в таблице UserGroup
Таблица 14.
UserGroup (Группа пользователей)
Имя
столбца
Тип
данных
Ограничения
Описание
id
bigint
PRIMARY KEY
Идентификатор
created
timestamp
Дата и время создания
lastchanged
timestamp
Дата и время последнего
изменения
description
varchar
Описание группы
profile
varchar
Код профиля для авторизации
title
varchar
Название группы
3.4. Дизайн сайта электронного магазина
68
Компанией «Технодом» был предоставлен дизайн для сайта,
выполненный на заказ для приобретенного домена irkmarket.com.
Рисунок 15. Текстовая страница интернет-магазина
Рисунок 16. Блок каталога для страницы интернет-магазина
69
Рисунок 17. Карточка товара интернет-магазина
При нажатии на кнопку «Купить» клиенту предлагается сразу перейти
в корзину или продолжить покупки. В корзине есть возможность изменить
количество каждого товара в позиции, удалить ненужные товары. пересчитать
общий итог.
70
Рисунок 18. Корзина интернет-магазина
Система управления сайтом сделана с помощью Twitter Bootstrap.
Рисунок 19. Страница администрирования каталога
Создание или редактирование карточки товара происходит с помощью
такой формы
71
Рисунок 20. Форма редактирования карточки товара
3.5. Разработка основных модулей системы
Разработка основных модулей системы производилась в соответствии
с архитектурным принципом REST. Поскольку реализованы все заявленные
функции и модули, включая интеграцию с 1С и Яндекс.Маркетом, рассылку
сообщений, функции «заказать звонок», поиск по сайту, резервное
копирование и кэширование, группы одного товара от разных поставщиков, и
др., не видно каким образом можно более или менее подробно изложить в
рамках данной выпускной квалификационной работы технические
подробности реализации. Ниже приведен листинг файла conf/routes (см.
Листинг 1), который содержит информацию о маршрутизации запросов
72
соответствующим контроллерам. В PlayFramework маршрутизация вынесена
в отдельный файл, все пути как бы навешиваются сверху, не прописаны
статически в коде контроллеров, что позволяет изменять URL без изменения
кода методов обработки серверных запросов. Такая же технология
применяется и для вызова контроллеров из JavaScript посредством AJAX
запросов. Так как принципы, заложенные в именование URL, соответствуют
REST, это повышает читабельность кода и упрощает понимание того, что
именно делается в данном методе контроллера.
Листинг 1.
Файл маршрутизации conf/routes
* / module:secure
# Home page
GET /search/ Application.search
GET /sitemap.xml SiteMap.build
GET /sitemap/ Application.sitemap
* /order-phone/ Application.orderPhone
GET /user/login Application.login
POST /user/authenticate Application.authenticate
* /user/register Application.registrationForm
GET /user/profile Application.profile
* /user/profile/edit Application.profileForm
GET /captcha/ Application.captcha
#redactor
* /redactor/upload/image/ Redactor.uploadImage
* /redactor/upload/file/ Redactor.uploadFile
GET /user/buy/step1 Application.buy
POST /user/buy/step2 Application.buyForm
POST /user/buy/step3 Application.buyCommit
* /user/buy/json/ Application.buyProcessJSON
GET /user/message/{message} Application.message(message)
GET /user/info/ API.userInfoJson()
GET /user/isAdmin/ API.isAdmin()
* /admin/xls/loadprice/? XLS.uploadPrice()
GET /admin/xls/export/ XLS.export
GET /admin/xls/export/{catalogId}/ XLS.export
GET /export/yml.xml Yandex.exportYML
#news
GET /admin/discount/ DiscountController.list
73
GET /admin/discount/new
DiscountController.edit(id:null)
GET /admin/discount/{id}
DiscountController.edit(id)
POST /admin/discount/form DiscountController.form
GET /admin/discount/{id}/delete DiscountController.delete
GET /admin/backup/ Backup.list
GET /admin/backup/do Backup.run
GET /admin/backup/{name}/delete Backup.delete
GET /admin/backup/{name}/rollback Backup.rollback
GET /admin/resize/ Admin.resizeImages
#twins
GET /admin/twins/ Admin.twins
GET /admin/twins/new Admin.newTwins
POST /admin/twins/form Admin.twinsForm
GET /admin/twins/{id} Admin.editTwins
GET /admin/twins/{id}/delete Admin.deleteTwins
GET /admin/twins/clone/ Admin.twinsClone
GET /admin/twins/disable/ Admin.twinsChoose
GET /admin/brr/ Admin.buyRecordRewrite
GET /admin/brt/ Admin.buyRecordTransform
GET /admin/ Admin.index
#text pages
GET /admin/pages/ Admin.pages
GET /admin/pages/new/ Admin.newPage
GET /admin/pages/edit/ Admin.editPage
GET /admin/pages/delete/ Admin.deletePage
POST /admin/pages/form/ Admin.pageForm
#catalog
GET /offer/{<[0-9]+>id}/{<.*>url} Application.goods(id, url)
GET /offer/{code} Application.goodsByCode(code)
GET /catalog/super-offers/ Application.superOffers
GET /catalog/{<.*>url} Application.catalog
GET /admin/catalog/ Admin.catalog
GET /admin/catalog/new/ Admin.newCatalog
GET /admin/catalog/{id}/edit/ Admin.editCatalog(id)
GET /admin/catalog/{id}/delete/ Admin.deleteCatalog(id)
POST /admin/catalog/form/ Admin.catalogForm
POST /admin/catalog/{id}/properties/add Admin.addCatalogProperty
GET /admin/catalog/properties/delete Admin.deleteCatalogProperty
POST /admin/catalog/properties/ Admin.processPropertiesForm
GET /admin/catalog/goods/new Admin.newGood
GET /admin/catalog/goods/{id} Admin.editGood(id)
GET /admin/catalog/goods/code/{code} Admin.editGoodByCode(code)
GET /admin/catalog/goods/{id}/delete Admin.deleteGood(id)
GET /admin/catalog/goods/{id}/delete/{comeBackId}
Admin.deleteGoodWithBackId(id,comeBackId)
POST /admin/catalog/goods/form/ Admin.goodsForm
GET /admin/catalog/goods/image/delete/{id}/{imgId}
Admin.deleteGoodsImage(id,imgId)
POST /admin/catalog/goods/{id}/image/upload
Admin.uploadGoodsImage(id)
GET /admin/catalog/goods-without-foto/ Admin.noFotoCatalog
74
#reports
GET /admin/reports Admin.reports
GET /api/reports Admin.reportsJSON
POST /api/offer/delete
Admin.deleteGoodWithJsonResponse
#news
GET /news/{id} Application.news
GET /admin/news/ NewsModule.list
GET /admin/news/new NewsModule.edit(id:null)
GET /admin/news/{id} NewsModule.edit(id)
POST /admin/news/form NewsModule.form
GET /admin/news/{id}/delete NewsModule.delete
#cart
GET /cart/ Application.cart
GET /cart/put/{id} Application.toCart(id)
GET /cart/pull/{id}
Application.removeFromCart(id)
POST /cart/process Application.processCart
#users
GET /admin/users/ Admin.users
GET /admin/users/new/ Admin.newUser
GET /admin/users/delete/ Admin.deleteUser
POST /admin/users/form/ Admin.userForm
GET /admin/users/{id}/ Admin.editUser
GET /admin/users/{id}/discount Admin.editUserDiscount
POST /admin/users/discount/form/ Admin.userDiscountForm
GET /admin/users/role Admin.userRole
GET /admin/users/recover Application.recover
#cache
GET /admin/cache/clear Admin.clearCache
#orders
GET /admin/orders/ Admin.orders
#old prices clear
GET /admin/oldprice/clear Admin.clearOldPrices
GET /admin/api/catalogs
Workbench.catalogsWithLevelsText
GET /admin/api/propertiesfacto Workbench.propertiesFacto
GET /admin/api/propertiesByGoods Workbench.propertiesByGoods
GET /admin/api/catalogsByProperties Workbench.catsByProperties2
# favicon requests
GET /{<favicon.ico>url} Application.statics
# Map static resources from the /app/public folder to the /public path
GET /public/ staticDir:public
GET /{<.*>url} Application.page
# Catch all with default
* /{controller}/{action} {controller}.{action}
75
В соответствии с архитектурным паттерном Model-View-Controller
(MVC), программный код на стороне сервера разделен на три логически
различные части.
Все, что касается взаимодействия с данными и системой хранения
информации находится в пакете model и является Моделью (Model). В данном
пакете реализовано 23 класса, 12 из которых являются сущностями,
сериализуемыми в реляционные таблицы базы данных с помощью JPA-
аннотаций ORM библиотеки Ebean. В качестве примера приведем листинг
класса UserGroup, который сериализуется в одноименную таблицу
посредством аннотации @Entity. Данный класс используется в механизме
авторизации.
Листинг 2.
Класс модели UserGroup
@Entity
public class UserGroup extends AbstractEntityBean {
private String title;
private String description;
private String profile;
public UserGroup() {
}
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
public String getDescription() {
return description;
}
public void setDescription(String description) {
this.description = description;
}
public String getProfile() {
return profile;
}
public void setProfile(String profile) {
76
this.profile = profile;
}
}
Вторая часть MVC, Контроллеры (Controller), по конвенциям
PlayFramework находятся в пакете controllers. Данные классы представляют
код обработки серверных запросов, в котором заключена вся логика
изменения базы данных приложения посредством управления объектами
классов Модели. В системе реализовано 17 классов контроллеров, самые
объемные из которых Admin и Application. В классе Admin сконцентрированы
основные методы, отвечающие за систему управления сайтом, так
называемую область администрирования. В классе Application большая часть
публичных методов, доступных Гостю сайта и аутентифицированному
Пользователю. В листинге 3 в качестве примера приведен самый маленький
контроллер, отвечающий за генерацию XML карты сайта по запросу GET
/sitemap.xml. Тем не менее, в нем продемонстрированы техники кэширования
по времени (карта сайта кэшируется на 24 часа); взаимодействие с моделью
посредством трех классов пакета model и более сложных параметрических
JPA-запросов на встроенном диалекте языка HQL (традиционно, развитие
языка SQL для Hibernate); вывод информации с помощью не типовых
Представлений с указанием ContentType в формате XML и передачей
параметров в шаблон.
Листинг 3.
Класс контроллера SiteMap
public class SiteMap extends Controller {
@CacheFor("24h")
public static void build(){
SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd");
List<GoodsCatalog> catalogs = GoodsCatalog.all().fetch();
//List<Goods> offers = Goods.all().fetch();
List<News> news = News.all().fetch();
List<Page> pages = Page.all().fetch();
pages.remove(Page.findRootPage());
GenericModel.JPAQuery query = Goods.find("SELECT g FROM Goods g

Смотрите также:

"Автоматизация обработки заявок ООО "Проектно-Строительная Компания"
"Автоматизация процесса аттестации персонала для ООО "Нэт Бай Нэт Холдинг"
"Анализ интернет-активности конкурентов ( на примере конкурентов "Газпром нефть")
"Бухгалтерский учёт и аудит расчётов с подотчётними лицами в организации на примере ООО "ЛОЦ 10""
«Психологическое сопровождение персонала в организации на примере ООО «Крокус»
Cовершенствование деловой оценки персонала в организации (на примере ООО "Даймонд кейтеринг развитие")
PR как средство продвижения организации (на примере ПАО "Тамбовский завод "Комсомолец им. Н.С. Артемова")
PR-коммуникации в сфере общественного питания (на примере кафе-кондитерской «Cream Cheese»)
SMM как средство повышения эффективности работы учреждений социокультурной сферы (на примере Малого театра)
Value-based education: ценности в системе образования и способы их реализации на уроке английского языка. Опыт Европейских стран