Система управления парковкой
предисловие
Этот проект представляет собой систему управления парковкой, которая в основном включает в себя мониторинг данных, управление транспортными средствами, управление черным списком, управление парковкой, управление парковочными местами, управление бронированием, управление журналом, управление пользователями и управление ролями. Сделайте функцию парковки как можно более полной, а затем завершите весь интерфейсный и внутренний код в соответствии со стандартами разработки на уровне предприятия.Используется ли он в качестве выпускного проекта или используется для обучения, я считаю, что это будет здорово помощь новичкам.
(Студенты, которым нужен исходный код и видеоуроки, пишите мне в личные сообщения~~~)
Инженерная архитектура
многоуровневое приложение
Приведенная выше многоуровневая структура взята из руководства по разработке Java для Alibaba. Я внес в нее некоторые коррективы. Фактическая многоуровневая структура выглядит следующим образом:
доменная модель
-
DO (DataObject): однозначное соответствие со структурой таблицы базы данных, и объект источника данных передается вверх через уровень DAO.
-
BO (BusinessObject): бизнес-объект. Объекты, которые инкапсулируют выходные данные бизнес-логики на уровне службы.
-
VO (Объект просмотра): объект слоя отображения, обычно объект, передаваемый из Интернета на уровень механизма рендеринга шаблона.
Модели предметной области BO и VO далее делятся на BoRequest (входная модель), BoResponse (выходная модель), VoRequest (входная модель) и VoResponse (выходная модель).
стек технологий
Интерфейс: vue + элемент
Серверная часть: jdk1.8 + springboot + redis + mysql
Системный дизайн
дизайн интерфейса
Весь интерфейс проекта выполнен в популярном в Интернете дизайне спокойного стиля, и каждый интерфейс и каждый параметр имеют подробную документацию. Поскольку разработка на предприятии должна быть командной, а режим разработки должен быть отделен от фронтенда и бекенда, сначала нужно определить интерфейс, а затем фронтенд и бэкэнд можно разрабатывать синхронно. Другой — предоставить интерфейс для внешнего мира. Например, ваша соседская команда также хочет вызвать интерфейс вашей службы, но ваши два расписания приходятся на одну и ту же неделю. В это время вы должны определить интерфейс для другие сначала, а затем все будут разрабатывать его синхронно.После завершения разработки снова провести совместную отладку.
текущий результат
вход в систему
dashboard
Рынок данных домашней страницы анализирует всесторонние данные визуального анализа в соответствии с долей круговой диаграммы за последние 7 дней, трендом линейного графика за последние 30 дней, анализом гистограммы за последний год и долей каждый период времени за последние 7 дней.
управление транспортным средством
Управление черным списком
Для некоторых транспортных средств, которые пропустили оплату, не припарковались в соответствии с правилами или повторно забронировали парковочное место, но нарушили договор, мы можем добавить черный список, и автомобили, внесенные в черный список, не будут допущены на парковку.
управление парковкой
После того, как транспортное средство въедет на склад, будет сгенерирована запись о парковке. В это время статус «на хранении» и «не оплачен». После выезда транспортного средства система рассчитает в соответствии с почасовой платой за парковку. * фактическая стоянка актуальна (рассчитывается по часам, более чем по часам). Здесь всем следует обратить внимание на то, что реальная плата за парковку снимается камерой.Например, когда машина покидает склад, камера снимает номерной знак, а затем генерирует информацию о зарядке.После того, как вы оплатите сбор, Вы можете покинуть склад. Здесь мы являемся фоном управления, система не подключена к устройству камеры, поэтому исходящий нужно вручную нажать на кнопку исходящего. (Вы также можете получить доступ к интерфейсу удержания Alipay и интерфейсу камеры, чтобы наша система была такой же, как настоящая система управления парковкой ~)
экспорт Excel
Все модули поддерживают экспорт данных в Excel для удобного анализа данных.
Экспорт записей парковки
Экспорт данных парковки
управление парковочными местами
Управление назначением
Владелец может договориться о встрече заранее, и автомобиль будет иметь приоритет для парковки в гараже после встречи.
управление журналом
Управление журналом по умолчанию открыто для администраторов.Все операции в системе будут записываться, а также администраторам удобно устранять неполадки, когда система работает ненормально.
Управление пользователями
По умолчанию только администратор имеет права доступа к меню управления пользователями, которое может создавать/редактировать пользователей, назначать роли пользователей, отключать/включать операции и т. д.
Изменить информацию о пользователе
управление ролями
Чрезвычайно гибкое управление разрешениями, всем кнопкам в системе могут быть назначены индивидуальные разрешения, вы можете назначить только запросы и разрешения на экспорт для роли A, и вы можете назначить запрос, редактирование и новые разрешения для роли B, а также вы можете назначить роль Только разрешения C. Назначьте разрешения запроса. Он может удовлетворить практически все потребности бизнеса, и вы можете свободно определять комбинацию разрешений.
Запрашивать страницу, когда страница не существует
Вход для обычных читателей
Система по умолчанию создаст две роли: одна роль супер-менеджера, а другая — роль обычного пользователя (конечно, вы можете настроить роли, как указано выше). Обычные пользователи входят в систему, например, в меню управления парковкой, обычные пользователи имеют право только на запрос и никаких других разрешений на добавление, редактирование, удаление, экспорт и хранение. Скриншот ниже:
Изменение личной информации
изменить пароль
Пароль по умолчанию после того, как администратор создаст пользователя — «123456», пользователь может войти в систему, чтобы изменить пароль самостоятельно.
дизайн разрешения
Разрешения реализованы на основе безопасности и весенней сессии. Разрешения можно разделить на аутентификацию и авторизацию. Аутентификация - это фактически вход в систему. Когда пользователь входит в систему, пароль учетной записи будет проверен. После успешной проверки сессия будет сохранена в Redis. Авторизация относится к тому, есть ли у пользователя разрешение на доступ к внутренним ресурсам. Каждому новому пользователю назначается роль после создания. Роль на самом деле представляет собой набор разрешений. Под разрешением здесь можно понимать разрешение на доступ к внутренним интерфейсам ( Ресурсы).
Дизайн разрешений здесь очень гибкий, детализированный до уровня кнопок, таких как добавление, удаление, изменение, запрос и заимствование действий.Обычные пользователи могут иметь только разрешения на запросы, в то время как администраторы имеют разрешения на добавление, удаление и изменить. Даже если обычный пользователь напрямую обращается к интерфейсу модификации или удаления серверной части через интерфейс, серверная часть вернет ошибку сбоя авторизации, поскольку каждый интерфейс, требующий разрешений на серверной части, помечается знаком разрешения, и только пользователи с разрешениями на ресурсы могут получить к нему доступ.
Например, в следующем интерфейсе модификации транспортного средства только пользователи с идентификатором разрешения «CAR_UPDATE» могут получить доступ к этому интерфейсу, в противном случае будет возвращена «неавторизованная» ошибка.
@PutMapping("/{id}")
@PreAuthorize("hasAuthority(T(com.senior.book.console.api.security.Authority).BOOK_UPDATE.name())")
public Result<Boolean> update(@PathVariable("id") Long id, @Valid @RequestBody BookUpdateVoRequest request) {
}
схема журнала
Журнал принимает схему реализации аннотации ломбока + slf4j + log4j2 и реализует конфигурацию журнала нескольких сред на основе профиля, потому что стратегия печати журнала разных сред отличается, например, в среде разработки, мне может понадобиться для печати на консольную консоль, для которой требуется уровень отладки.Журнал удобен для локальной разработки и отладки.В тестовой среде может потребоваться печать в файл журнала.В онлайн-среде может потребоваться печать в файл и отправка журнала в kafka, а затем собрать его в es. Таким образом, когда несколько машин развернуты в сети, нам не нужно проверять логи по одной машине, потому что все es собраны, нам нужно только войти в kibana для поиска , что очень удобно. Упомянутое здесь решение для ведения журнала, такое как kafka+es+kibana, также представляет собой набор решений, обычно используемых интернет-компаниями. Если ваши практические способности достаточно сильны, вы можете создать набор kafka, es и kibana локально, а затем вам нужно всего лишь добавить несколько строк конфигурации в файл конфигурации, чтобы реализовать такое решение для журнала уровня предприятия ( по умолчанию выводится в файл журнала).
Ниже приведены некоторые ключевые конфигурации.Если вы хотите настроить kafka, вам нужно только настроить конфигурацию в теге.
<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="WARN" xmlns:xi="http://www.w3.org/2001/XInclude">
<Properties>
<Property name="LOG_FILE">system.log</Property>
<Property name="LOG_PATH">./logs</Property>
<Property name="PID">????</Property>
<Property name="LOG_EXCEPTION_CONVERSION_WORD">%xwEx</Property>
<Property name="LOG_LEVEL_PATTERN">%5p</Property>
<Property name="LOG_DATE_FORMAT_PATTERN">yyyy-MM-dd HH:mm:ss.SSS</Property>
<Property name="CONSOLE_LOG_PATTERN">%clr{%d{${LOG_DATE_FORMAT_PATTERN}}}{faint} %clr{${LOG_LEVEL_PATTERN}} %clr{${sys:PID}}{magenta} %clr{---}{faint} %clr{[%15.15t]}{faint} %clr{%-40.40c{1.}}{cyan} %clr{:}{faint} %m%n${sys:LOG_EXCEPTION_CONVERSION_WORD}
</Property>
<Property name="FILE_LOG_PATTERN">%d{${LOG_DATE_FORMAT_PATTERN}} ${LOG_LEVEL_PATTERN} ${sys:PID} --- [%t] %-40.40c{1.}:%L : %m%n${sys:LOG_EXCEPTION_CONVERSION_WORD}
</Property>
</Properties>
<Appenders>
<xi:include href="log4j2/file-appender.xml"/>
</Appenders>
<Loggers>
<logger name="com.senior.park" level="info"/>
<Root level="info">
<AppenderRef ref="FileAppender"/>
</Root>
</Loggers>
</Configuration>