Дипломный проект - Система управления парковкой

задняя часть Vue.js
Дипломный проект - Система управления парковкой

Система управления парковкой

предисловие

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

(Студенты, которым нужен исходный код и видеоуроки, пишите мне в личные сообщения~~~)

Инженерная архитектура

многоуровневое приложение

image-20201226111957265

Приведенная выше многоуровневая структура взята из руководства по разработке Java для Alibaba. Я внес в нее некоторые коррективы. Фактическая многоуровневая структура выглядит следующим образом:

image-20210814222319932

доменная модель

  • DO (DataObject): однозначное соответствие со структурой таблицы базы данных, и объект источника данных передается вверх через уровень DAO.

  • BO (BusinessObject): бизнес-объект. Объекты, которые инкапсулируют выходные данные бизнес-логики на уровне службы.

  • VO (Объект просмотра): объект слоя отображения, обычно объект, передаваемый из Интернета на уровень механизма рендеринга шаблона.

    Модели предметной области BO и VO далее делятся на BoRequest (входная модель), BoResponse (выходная модель), VoRequest (входная модель) и VoResponse (выходная модель).

стек технологий

Интерфейс: vue + элемент

Серверная часть: jdk1.8 + springboot + redis + mysql

Системный дизайн

дизайн интерфейса

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

image-20210814222543063

текущий результат

вход в систему

image-20210814222918495

dashboard

Рынок данных домашней страницы анализирует всесторонние данные визуального анализа в соответствии с долей круговой диаграммы за последние 7 дней, трендом линейного графика за последние 30 дней, анализом гистограммы за последний год и долей каждый период времени за последние 7 дней.

image-20210814223026088

управление транспортным средством

image-20210815081233437

Управление черным списком

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

image-20210815081307131

управление парковкой

После того, как транспортное средство въедет на склад, будет сгенерирована запись о парковке. В это время статус «на хранении» и «не оплачен». После выезда транспортного средства система рассчитает в соответствии с почасовой платой за парковку. * фактическая стоянка актуальна (рассчитывается по часам, более чем по часам). Здесь всем следует обратить внимание на то, что реальная плата за парковку снимается камерой.Например, когда машина покидает склад, камера снимает номерной знак, а затем генерирует информацию о зарядке.После того, как вы оплатите сбор, Вы можете покинуть склад. Здесь мы являемся фоном управления, система не подключена к устройству камеры, поэтому исходящий нужно вручную нажать на кнопку исходящего. (Вы также можете получить доступ к интерфейсу удержания Alipay и интерфейсу камеры, чтобы наша система была такой же, как настоящая система управления парковкой ~)

image-20210815081618931

экспорт Excel

Все модули поддерживают экспорт данных в Excel для удобного анализа данных.

Экспорт записей парковки

image-20210815083758271

Экспорт данных парковки

image-20210815083919978

управление парковочными местами

image-20210815082151937

Управление назначением

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

image-20210815082301459

управление журналом

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

image-20210815082330122

Управление пользователями

​ По умолчанию только администратор имеет права доступа к меню управления пользователями, которое может создавать/редактировать пользователей, назначать роли пользователей, отключать/включать операции и т. д.

image-20210815082348987

Изменить информацию о пользователе

image-20210815082407636

управление ролями

Чрезвычайно гибкое управление разрешениями, всем кнопкам в системе могут быть назначены индивидуальные разрешения, вы можете назначить только запросы и разрешения на экспорт для роли A, и вы можете назначить запрос, редактирование и новые разрешения для роли B, а также вы можете назначить роль Только разрешения C. Назначьте разрешения запроса. Он может удовлетворить практически все потребности бизнеса, и вы можете свободно определять комбинацию разрешений.

image-20210815082437624

Запрашивать страницу, когда страница не существует

image-20210815082839734

Вход для обычных читателей

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

image-20210815083029659

Изменение личной информации

image-20201226090334871

изменить пароль

Пароль по умолчанию после того, как администратор создаст пользователя — «123456», пользователь может войти в систему, чтобы изменить пароль самостоятельно.

image-20210815083303801

дизайн разрешения

Разрешения реализованы на основе безопасности и весенней сессии. Разрешения можно разделить на аутентификацию и авторизацию. Аутентификация - это фактически вход в систему. Когда пользователь входит в систему, пароль учетной записи будет проверен. После успешной проверки сессия будет сохранена в 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>