Язык: Английский | Китайский.
Функция поиска книг: пагинация сглаживает нагрузку из-за большого объема данных, и бэкенд может установить количество запросов, чтобы предотвратить избыточные запросы от скраперов и нагрузку на сервер. Точечный поиск по полям. Таблицы могут быть экспортированы в PDF и Excel.
Функция правил для читателя: запрос существующих правил выдачи книг, правила выдачи включают: количество одновременных выдач, количество книг, которое можно взять, количество дней, на которое можно взять книги, библиотеку, из которой можно взять книги, и штраф за просрочку/день.
Просмотр объявлений: вы можете проверить список объявлений, опубликованных библиотекарем, с эффектом прокрутки текста.
Личная информация: вы можете просмотреть номер читательского билета, имя читательского билета, номер правила, статус и изменить пароль своего личного аккаунта.
Информация о выдаче книг: вы можете просмотреть записи и статус возврата книг, которые вы взяли.
Информация о нарушениях: вы можете проверить, содержат ли возвращённые книги информацию о нарушениях.7) Сообщения для читателя: Реализация функции сообщений и её отображение в виде чата.
Интеллектуальное рекомендательное Пользователи вводят свои предпочтения, и ИИ рекомендует книги пользователям на основе списка книг в базе данных и предпочтений пользователей.
Выдача книг: Библиотекарь вводит номер читательского билета (пользователь), номер книги для выдачи, и текущее время, и нажимает кнопку "выдать".
Возврат книг: Вводится номер книги для проверки просрочки, устанавливается информация о нарушении, затем выбирается, возвращать ли книгу.
Отчёт о выдаче книг: Используется для запроса списка выданных и возвращённых книг. Используется конструктор пагинации и поля для размытого поиска для отображения номера читательского билета, номера книги, даты выдачи, срока возврата, даты возврата, информации о нарушении и исполнителя.
Отчёт о возврате книг: Используется для запроса списка выданных, но ещё не возвращённых книг, отображается номер читательского билета, номер книги, дата выдачи и срок возврата.
Объявления: Вы можете запросить текущий список объявлений и удалять, изменять и добавлять объявления. Используется конструктор пагинации для смягчения ситуации с большим объёмом данных.### Функции администратора системы
Управление книгами: Можно запросить все текущие книги, отображаются номера книг, псевдонимы книг, авторы, библиотеки, классификации, местоположения, статусы и описания. Можно добавлять, изменять и удалять книги. Реализована пагинация для выполнения групповых запросов. Используются размытые запросы для реализации функции поиска книг. Используются плагины для экспорта в PDF и Excel.
Типы книг: Отображение и запрос всех текущих типов книг, которые можно добавлять, изменять или удалять. Используйте конструктор пагинации для выполнения пакетных запросов и снятия нагрузки с данных.
Управление читательскими карточками: Возможность запроса текущего списка всех читательских карточек, то есть количество пользователей, и выполнения операций добавления, изменения и удаления. Также реализуйте пагинацию.
Запрос информации о заёмах: можно запросить текущие завершённые записи о заёмах и возвратах, отобразить номер читательской карточки, номер книги, дату заёма, срок возврата, дату возврата, информацию о нарушениях и исполнителя. Функция пагинации, экспорт в PDF и Excel.
Управление правилами заёмов: можно запросить все текущие правила заёмов, отобразить запрещённые дни заёмов, максимальное количество книг, запрещённые библиотеки, пени за просрочку, а также выполнять операции добавления, удаления и изменения.6) Управление библиотекарями: Отображение текущего списка библиотекарей, включая учетные записи, имена и адреса электронной почты, позволяющие добавлять, удалять и изменять записи.
Управление системой: Возможность запроса объема заёмов за месяц, вычисления объема заёмов с интервалом в неделю и использование Echarts для отображения различных графиков.
Анализ системы: Возможность загрузки объема заёмов и дат за определённый период времени, а также ввода целей анализа и типа графика, который вы хотите сгенерировать. После ожидания некоторое время, AI предоставит выводы анализа и визуальные графики.
В этом проекте используется разделение на фронтенд и бэкенд, где фронтенд создаёт страницы, а бэкенд выполняет роль интерфейса данных. Фронтенд вызывает интерфейс данных бэкенда для получения данных и перерисовки страницы.
Фронтенд предоставляет токен в поле Authorization, аутентификация API использует аутентификацию токеном, HTTP Status Code представляет статус, а формат возврата данных использует JSON.
Бэкенд включает поддержку CORS для кросс-доменных запросов, использует перехватчики разрешений для проверки разрешений и проверки статуса входа.
Добавлен механизм глобального обработчика исключений для перехвата исключений и повышения устойчивости системы.5) Фронтенд использует библиотеку визуализации ECharts для реализации аналитических иконок (линейные графики, круговые диаграммы) для заёмов книг и улучшения опыта загрузки через конфигурацию загрузки. 6) Компонент сообщений использует формат пула сообщений, что соответствует предпочтениям пользователей.
Внедрить зависимость knife4j и использовать Swagger+Knife4j для автоматического создания документации интерфейсов в соответствии с спецификацией OpenAPI. Фронтенд может использовать плагины для автоматического создания кода запросов интерфейсов на основе этого, что снижает затраты на взаимодействие фронтенда и бэкенда.
Используя библиотеку компонентов ElementUI для построения фронтенд-интерфейсов, можно быстро создавать страницы и обеспечивать унифицированное управление правами доступа и переключение среды для как фронтенда, так и бэкенда.
Компонент QueryWrapper, основанный на фреймворке MyBatis Plus, обеспечивает гибкий поиск в базах данных MySQL и, в сочетании с плагином MyBatisX, автоматически генерирует базовый код CRUD для бэкенда, что снижает повторяющуюся работу.
Ленивая загрузка маршрутов фронтенда, оптимизация кэширования статических ресурсов CDN и эффект ленивой загрузки изображений.
Фронтенд
Программное обеспечение: Vscore или Webstorm (рекомендуется)
Среда: версия Node 16 или 18 (рекомендуется) Примечание: не выбирайте версии выше 18
Бэкенд
Программное обеспечение: Eclipse или IDEA (рекомендуется)
Среда: MySQL 5.7 или 8.0 (рекомендуется) Redis (необязательно)
2) Откройте фронтендную страницу с помощью VSCode или Webstorm и настройте конфигурацию. Настройте среду Node и инструменты управления пакетами. Инструмент управления пакетами, который я выбрал, — это Npm, хотя другие инструменты управления пакетами, такие как Yarn, Cnpm и Pnpm, также доступны. Примечание: Пожалуйста, измените адрес изображения Npm на новый адрес изображения на Taobao, в противном случае npm install будет постоянно застревать в процессе установки.3) Просто нажмите на запуск dev или откройте консоль и введите
npm run serve
, чтобы успешно запустить фронтенд-проект.
npm config set registry https://registry.npmmirror.com/
2) После получения файла симуляции базы данных используйте программное обеспечение, такое как Navicat или SQLYog, чтобы импортировать файл базы данных. Не забудьте сначала создать базу данных с именем bms_boot, а затем правым щелчком мыши запустить файл SQL. После успешного запуска без ошибок перезагрузите базу данных и проверьте наличие данных. Если данные присутствуют, это указывает на успешный импорт.
Откройте проект бэкенда с помощью IDEA, найдите файл application-dev.yml, измените конфигурацию MySQL и убедитесь, что имя пользователя и пароль указаны правильно. Примечание: Пароли не могут начинаться с цифры 0.
При импорте зависимостей Maven убедитесь, что проверили правильность версии Maven. Рекомендуется выбрать ту же версию, что и у меня, версию 3.8 или выше. Я обнаружил, что импорт зависимостей происходит медленно, так как нет конфигурации для внутренних изображений, и по умолчанию подключение осуществляется к внешним серверам. Поэтому конфигурация изображений Alibaba Cloud может быть найдена в этом блоге посту. CSDN Maven конфигурация
### Отладка фронтенда и бэкенда
| ---------------------------- | ------------------------------------------------------------ | ---------------------------------------------------- |
| Vue | Предоставляет фронтенд-интерфейс | 2.6.14 |
| Vue-Router | Программное навигационное роутинг | 3.5.1 |
| Element-UI | Модульная библиотека компонентов для отрисовки интерфейса | 2.4.5 |
| Axios | Отправка AJAX-запросов для получения данных от сервера | 1.2.1 |
| core-js | Улучшенная совместимость, адаптация для браузеров | 3.8.3 |
| Swiper | Плагин для слайдера (быстрое создание) | 3.4.2 |
| vue-baberrage | Плагин для бабелей Vue (реализация функции комментариев) | 3.2.4 |
| vue-json-excel | Экспорт таблицы в Excel | 0.3.0 |
| html2canvas+jspdf | Экспорт таблицы в PDF | 1.4.1 2.5.1 |
| node-polyfill-webpack-plugin | Удаление полифиллов для ядра Node.js в Webpack 5 | 2.0.1 | | default-passive-events | Chrome добавил новую механику для пассивного отслеживания событий (Passive Event Listeners) | Улучшение плавности прокрутки страниц, особенно для мобильных устройств |
| nprogress | Отображение прогресса запросов (дружественный интерфейс пользователя) | 0.2.0 |
| echarts | Отличный инструмент для преобразования данных в графики (мощные возможности) | 5.4.1 || less lessloader | Упрощает разработку стилей | 4.1.3 11.1.0 |### Back-end| Технологии и версии | Описание | Версия |
| ------------------------ | ------------ | ---------- |
| SpringBoot | Фреймворк для разработки приложений | 2.7.8 |
| JDK | Java Development Kit | 1.8 |
| MySQL | База данных для backend | 8.0.23 |
| MyBatisPlus | Инструмент для подключения к базе данных и быстрых операций CRUD | 3.5.1 |
| SpringBoot-Configuration-processor | Конфигурационный процессор, который связывает определенные классы и файлы конфигурации | |
| SpringBoot-Starter-Web | Интеграция backend с Tomcat MVC | Для подключения к frontend |
| SpringBoot-starter-test | Junit4 для unit-тестирования, выполняется перед вызовом интерфейсов frontend | |
| Lombok | Быстрое создание методов для сущностей, упрощает код | |
| mybatis-plus-generator | Генератор кода | 3.5.1 |
| MyBatisX | MyBatisPlus плагин для генерации мапперов, сущностей и сервисов | |
| jjwt | Инструментарий для работы с токенами | 0.9.0 || fastjson | JSON инструментарий от Alibaba | 1.2.83 |
| hutool | Инструментарий hutool для упрощения разработки | Документация || knife4j-openapi2-spring-boot-starter | Инструмент тестирования онлайн-документации Knife4j | 4.0.0 |
| gson | JSON-инструменты от Google | 2.8.5 |
| Java-WebSocket | Конфигурация AI от iFlytek | 1.3.8 |
| okhttp | Конфигурация AI от iFlytek | 4.10.0 |
| okio | Конфигурация AI от iFlytek | 2.10.0 |
| jsoup | Инструмент для создания простых веб-скраперов | 1.15.3 |
| guava | Инструменты от Google | 30.1-jre |
| spring-boot-starter-data-redis | Starter для Redis | |
| broadscope-bailian-sdk-java | Модель AI от Alibaba | 1.1.7 |
| spring-boot-starter-websocket | Starter для WebSocket | |## ☀️Архитектура
Пользователи вводят информацию о своих предпочтениях в книгах.
Передняя часть отправляет запросы Axios.
Система сначала проверяет, является ли текст незаконным (пустым или слишком длинным).
Проверяет наличие интерфейса.
Проверяет, достаточно ли запросов к интерфейсу AI.
GuavaRateLimiter выполняет ограничение потока для каждого пользователя, чтобы определить, превышает ли количество запросов нормальную частоту бизнес-трафика.
Ручная настройка AI модели и запрос списка книг в базе данных для конкатенации.
Запрос AI модели и последних пяти исторических записей пользователя для ассоциации контекста.
FutureTask синхронно вызывает для получения результатов AI и устанавливает таймаут (таймаут выбрасывает исключение).
Сохраняет рекомендации AI после получения информации и уменьшает количество запросов к интерфейсу (чтобы определить успешность).
Возвращает обработанные рекомендации AI передней части и устанавливает код состояния ответа на 200.
Пользователи вводят целевые объекты анализа, имена иконок, выбирают типы иконок, загружают файлы Excel, нажимают кнопку отправки и отправляют запросы Axios в систему.2) Проверяет, пуст ли файл, слишком ли длинно имя файла, размер файла и расширение файла.
Получает ID администратора и запрашивает интерфейс, управляемый ID администратора из таблицы информации об интерфейсах. Интерфейс обнаруживается пустым.
Определяет, достаточно ли запросов к интерфейсу AI.
GuavaRateLimiter выполняет ограничение потока для каждого пользователя, чтобы определить, превышает ли количество запросов нормальную частоту бизнес-трафика.
Подсказки слов и ролей для построения AI моделей.
Построение пользовательского ввода, конкатенация информации о пользовательском вводе и использование классов инструментов для преобразования Excel в строковые данные CSV.
Использование AI модели iFlytek Starfire, ввод ID вызывающего и входных параметров, использование FutureTask для синхронного получения и установка времени таймаута (таймаут выбрасывает исключение).
Оценка результатов, сгенерированных AI, если есть ошибка форматирования, возвращение сообщения об ошибке передней части и предложение повторного вызова (в будущем рассмотреть RabbitMQ для механизма повторной попытки и компенсации).
Сохранение результатов, сгенерированных AI, в базе данных, обновление количества вызовов интерфейса (для определения успешности) и динамическое возвращение иконок и вывода данных на фронтенд.## ☀️Что вы получите после завершения этого проекта
Просто вызовите модель AI (iFlytek Starfire | Alibaba Bailian), чтобы получить пользовательский текстовый контент.
Простая проверка прав доступа с помощью JWT, используя backend-интерцепторы для проверки входа.
Загрузите файл Excel, преобразуйте файл Excel в CSV-данные и генерируйте визуальные диаграммы онлайн с помощью AIGC.
Jousp может выполнять пакетное извлечение списков книг и выполнять их в сочетании с задачами планировщика SpringSchedule.
Как работает взаимодействие между фронтендом и бэкендом в простой системе для добавления, удаления, изменения и поиска данных.
Как реализуются ленивая загрузка маршрутов фронтенда, оптимизация кэширования статических ресурсов CDN и ленивая загрузка изображений.
Используйте Lodash для управления затуханием, чтобы минимизировать ненужные злонамеренные сообщения.
Используйте пользовательские пулы потоков и FutureTasks для обработки запросов с таймаутом.
Используйте Google Guava RateLimited для управления ограничением потока для каждого пользователя.
Объедините задачи планировщика с Redis для предварительного нагрева кэша, чтобы ускорить скорость запросов и улучшить пользовательский опыт.
Основная реализация выполнена с использованием Vue2 и SpringBoot2+ Контроль прав доступа проекта: пользователь, библиотекарь и системный администратор
Инструмент разработки: IDEA 2022.1.3 (я действительно не рекомендую использовать Eclipse для разработки. Проекты IDEA могут быть экспортированы как проекты Eclipse, и они не влияют друг на друга, но вам нужно самостоятельно изучить руководство)
Если преподаватели школы настаивают на использовании определенного ПО, следует все равно следовать требованиям. Необходимо сперва уточнить, возможно ли выбрать другие варианты разработки ПО.
Пароль учетной записи пользователя: Xiangsi Duan Hongchang 123456
Пароль учетной записи библиотекаря: admin 123456
Пароль учетной записи системного администратора: root 123456
Ссылка на стили фронтенда Спасибо оригинальному автору Mingyue Resurrection
Возникла ошибка функции взаимодействия или страница не может быть открыта. Пожалуйста, используйте инструмент разработчика F12 для проверки статусного кода запроса и ответа. Конечно, новичок может не понять, так что это нормально. Вы можете добавить меня QQ: 909088445. Учусь днем, могу отвечать только когда есть время ночью. Спасибо за понимание! ⭐⭐⭐
Бэкенд включил поддержку CORS для кросс-доменных запросов.
Аутентификация API с использованием токенов.
Фронтенд предоставляет токен в поле Authorization.
Использование HTTP статусных кодов для представления статуса.
Использование JSON для формата возврата данных.
Бэкенд использует перехватчики разрешений для проверки разрешений и статуса входа.
Добавлен механизм глобального обработчика исключений для перехвата исключений и повышения устойчивости системы.
Фронтенд использует библиотеку визуализации Echarts для реализации аналитических значков (линейные графики, круговые диаграммы) для аренды книг и улучшения опыта загрузки через конфигурацию загрузки.
Компонент сообщений использует формат пула сообщений, что соответствует предпочтениям пользователей.
Введение зависимости knife4j и использование Swagger+Knife4j для автоматического генерирования документации интерфейсов по спецификации OpenAPI. Фронтенд может использовать плагины для автоматического генерирования кода запросов интерфейсов на основе этого, что снижает затраты на взаимодействие фронтенда и бэкенда.+ Использование библиотеки компонентов ElementUI для построения фронтенд-интерфейсов позволяет быстро создавать страницы и обеспечивать унифицированное управление разрешениями и переключение среды для как фронтенда, так и бэкенда.
Использование QueryWrapper на основе фреймворка MyBatis Plus позволяет гибко выполнять запросы к базам данных MySQL и, в сочетании с плагином MyBatisX, автоматически генерировать базовый код CRUD для бэкенда, что снижает повторяющуюся работу.
Ленивая загрузка маршрутов фронтенда, оптимизация кэширования статических ресурсов CDN и эффект ленивой загрузки изображений.
Функция запроса книги: Конструктор пагинации снимает нагрузку из-за избыточного количества данных, и серверная часть может установить количество запросов, чтобы предотвратить избыточные запросы от скраперов и нагрузку на сервер. Точечный поиск для поиска по полям. Таблицы могут быть экспортированы в формат PDF и Excel.
Функция прав читателя: Запрос существующих прав на выдачу книг, права на выдачу включают: количество одновременных выдач, количество книг, которые можно взять, количество дней, на которое можно взять книги, библиотека, в которой можно взять книги, штраф за просрочку/день.+ Просмотр объявлений: Вы можете проверить список объявлений, опубликованных библиотекарем, с эффектом прокрутки текста.
Личная информация: Вы можете просмотреть номер карты читателя, имя читателя, номер прав, статус и изменить пароль своего личного аккаунта.
Информация о выдаче книг: Вы можете просмотреть записи и статус возврата книг, которые вы взяли.
Информация о нарушениях: Вы можете проверить, содержат ли возвращённые книги информацию о нарушениях.
Сообщения читателя: Реализует функцию сообщений и отображает её в формате бульетного списка.
Выдача книг: Библиотекарь вводит номер карты читателя (пользователя), номер книги для выдачи и текущее время, затем нажимает кнопку "Выдать".
Возврат книг: Вводится номер книги для проверки просрочки, устанавливается информация о нарушениях, затем выбирается, возвращать ли книгу.
Отчёт о выдаче книг: Используется для запроса списка выданных и возвращённых книг. Также использует конструктор пагинации и точечный поиск по полям для отображения номера карты читателя, номера книги, даты выдачи, срока возврата, даты возврата, информации о нарушениях и исполнителя.+ Отчет о возврате книг: Используется для запроса списка выданных, но еще не возвращённых книг, отображает номер карты читателя, номер книги, дату выдачи и срок возврата.+ Объявление: Вы можете запросить текущий список объявлений и использовать функции удаления, редактирования и добавления. Конструктор пагинации используется для снятия нагрузки из-за большого объёма данных.
Управление книгами: Можно запросить все текущие книги, отображать номера книг, прозвища книг, авторов, библиотек, классификации, местоположения, статус и описания. Вы можете добавлять, изменять и удалять книги. Реализовать пакетные запросы с использованием конструктора пагинации. Использовать размытые запросы для реализации функциональности поиска книг. Использовать плагины для экспорта в PDF и Excel.
Типы книг: Отображать и запрашивать все текущие типы книг, которые можно добавлять, изменять или удалять. Использовать конструктор пагинации для реализации пакетных запросов и снятия нагрузки с данных.
Управление карточками выдачи: Можно запросить текущий список всех карточек выдачи, то есть количество пользователей, и выполнять операции добавления, изменения и удаления. Реализовать пагинацию также.
Запрос информации о выдаче: можно запросить текущие завершенные записи выдачи и возврата, отображать номер карточки выдачи, номер книги, дату выдачи, срок возврата, дату возврата, информацию о нарушении и исполнителя. Функция пагинации, экспорт в PDF и Excel.+ Управление правилами выдачи: Можно запросить все текущие правила выдачи, отображать запрещённые дни выдачи, максимальное количество книг, запрещённые библиотеки, пени за просрочку, и выполнять операции добавления, удаления и изменения.
Управление библиотекарями: Отображать текущий список библиотекарей, включая учётные записи, имена и адреса электронной почты, позволяющие выполнять операции добавления, удаления и изменения.
Управление системой: Можно запросить объём выдачи за месяц, вычислять объём выдачи по недельному интервалу и использовать Echarts для отображения линейного графика.
| ----------------- | ------------------- | ------------------------------------------------------- | | user_id | int(11) | Первичный ключ, обязательное поле, автоинкремент, уникальный идентификатор пользователя | | username | varchar(32) | Имя пользователя, обязательное поле | | password | varchar(32) | Пароль (MD5-шифрование), обязательное поле | | card_name | varchar(10) | Полное имя, обязательное поле | | card_number | bigint(11) | Номер читательского билета, фиксированное значение, 11-значное случайное число, обязательное поле | | rule_number | int(11) | Номер правила, может быть задан пользователем, то есть функция прав доступа | | status | int(1) | 1 — доступен, 0 — заблокирован | | create_time | datetime | Время создания, аннотация Java, JsonFormatter | | update_time | datetime | Время обновления, аннотация Java, JsonFormatter |
| ----------------- | -------------------- | --------------------------------------------- | | admin_id | int(11) | Первичный ключ, не может быть пустым, автоинкремент, уникальный идентификатор для таблицы администраторов | | username | varchar(32) | Имя пользователя, не может быть пустым | | password | varchar(32) | Пароль (MD5-шифрование), не может быть пустым | | admin_name | varchar(10) | Имя администратора, не может быть пустым | | status | int(1) | 1 - доступен, 0 - заблокирован | | create_time | datetime | Время создания, аннотация Java, JsonFormatter | | update_time | datetime | Время обновления, аннотация Java, JsonFormatter |
| ----------------- | -------------------- | --------------------------------------------- | | book_admin_id | int(11) | Первичный ключ, не может быть пустым, автоинкремент, уникальный идентификатор для таблицы администраторов | | username | varchar(32) | Имя пользователя, не может быть пустым | | password | varchar(32) | Пароль (MD5-шифрование), не может быть пустым | | book_admin_name | varchar(10) | Имя администратора библиотеки, не может быть пустым | | status | int(1) | 1 - доступен, 0 - заблокирован | | email | varchar(255) | Электронная почта | | create_time | datetime | Время создания, аннотация Java, JsonFormatter | | update_time | datetime | Время обновления, аннотация Java, JsonFormatter |### t_books таблица| Название столбца | Тип данных и длина | Примечание | | ----------------- | -------------------- | ------------------------------------- | | book_id | int(11) | Первичный ключ, автоинкремент, не может быть пустым, уникальный идентификатор книги | | book_number | int(11) | Номер книги, не может быть пустым, уникальный идентификатор книги | | book_name | varchar(32) | Название книги, не может быть пустым | | book_author | varchar(32) | Автор книги, не может быть пустым | | book_library | varchar(32) | Название библиотеки, где находится книга, не может быть пустым | | book_type | varchar(32) | Категория книги, не может быть пустым | | book_location | varchar(32) | Расположение книги, не может быть пустым | | book_status | varchar(32) | Статус книги (не взята/взята) | | book_description | varchar(100) | Описание книги | | create_time | datetime | Время создания, аннотация Java, JsonFormatter | | update_time | datetime | Время обновления, аннотация Java, JsonFormatter |### t_books_borrow таблица| Название столбца | Тип данных и размер | Описание | | ----------------- | -------------------- | ---------------------------------------------------------------- | | borrow_id | int(11) | Первичный ключ, автоинкремент, не может быть пустым, уникальный идентификатор записи о заимствовании | | card_number | int(11) | Номер заимствования, фиксированный, 11-значный случайно сгенерированный, не может быть пустым, уникальный идентификатор пользователя и книги | | book_number | int(11) | Номер книги, не может быть пустым, уникальный идентификатор книги | | borrow_date | datetime | Дата заимствования, аннотация Java, JsonFormatter | | close_date | datetime | Дата окончания, аннотация Java, JsonFormatter | | return_date | datetime | Дата возврата, аннотация Java, JsonFormatter | | create_time | datetime | Дата создания, аннотация Java, JsonFormatter | | update_time | datetime | Дата обновления, аннотация Java, JsonFormatter |### t_notice таблица
Название столбца | Тип данных и размер | Описание |
---|---|---|
notice_id | int(11) | Первичный ключ, не может быть пустым, автоинкремент, уникальный идентификатор записи о сообщении |
notice_title | varchar(32) | Заголовок сообщения, не может быть пустым |
notice_content | varchar(255) | Содержание сообщения, не может быть пустым |
notice_admin_id | int(11) | ID администратора, опубликовавшего сообщение |
create_time | datetime | Дата создания, аннотация Java, JsonFormatter |
update_time | datetime | Дата обновления, аннотация Java, JsonFormatter |
------------------ | -------------------- | ----------------------------------------------- |
violation_id | int(11) | Первичный ключ, обязательное поле, автоинкремент, уникальный идентификатор записи о нарушении |
card_number | int(11) | Номер читательского билета, обязательное поле, 11-значное случайное число |
book_number | int(11) | Номер книги, обязательное поле, уникальный идентификатор книги |
borrow_date | datetime | Дата выдачи, аннотация Java, JsonFormatter |
close_date | datetime | Дата окончания, аннотация Java, JsonFormatter |
return_date | datetime | Дата возврата, аннотация Java, JsonFormatter |
violation_message | varchar(100) | Сообщение о нарушении, обязательное поле |
violation_admin_id | int(11) | ID администратора, связанного с нарушением |
create_time | datetime | Время создания, аннотация Java, JsonFormatter |
update_time | datetime | Время обновления, аннотация Java, JsonFormatter |
| ------------------ | -------------------- | ----------------------------------------------- | | comment_id | int(11) | Первичный ключ, обязательное поле, автоинкремент, уникальный идентификатор записи в таблице комментариев | | comment_avatar | varchar(255) | Аватар комментария | | comment_barrage_style | varchar(32) | Стиль субтитров | | comment_message | varchar(255) | Содержание комментария | | comment_time | int(11) | Время комментария (управление скоростью) | | create_time | datetime | Время создания, аннотация Java, JsonFormatter | | update_time | datetime | Время обновления, аннотация Java, JsonFormatter |
| ------------------ | -------------------- | ----------------------------------------------- | | rule_id | int(11) | Первичный ключ, обязательное поле, автоинкремент, уникальный идентификатор записи в таблице правил | | book_rule_id | int(11) | Номер правила, обязательное поле | | book_days | int(11) | Количество дней для аренды, обязательное поле | | book_limit_number | int(11) | Ограничение количества книг для аренды, обязательное поле | | book_limit_library| varchar(255) | Ограниченная библиотека, обязательное поле | | book_overdue_fee | double | Ежедневная плата за просрочку аренды, обязательное поле | | create_time | datetime | Время создания, аннотация Java, JsonFormatter | | update_time | datetime | Время обновления, аннотация Java, JsonFormatter |### t_book_type таблица
Название столбца | Тип данных и размер | Примечание |
---|---|---|
type_id | int(11) | Первичный ключ, обязательное поле, автоинкремент, уникальный идентификатор записи в таблице типов книг |
type_name | varchar(32) | Название категории книг, обязательное поле |
type_content | varchar(255) | Описание категории книг, обязательное поле |
create_time | datetime | Время создания, аннотация Java, JsonFormatter |
update_time | datetime | Время обновления, аннотация Java, JsonFormatter |
Демонстрация карусели на главной странице
Демонстрация поиска книг
Демонстрация прав читателя
Демонстрация просмотра объявлений
Демонстрация просмотра личной информации
Демонстрация представления информации о заимствовании
Демонстрация информации о нарушениях
Демонстрация сообщений читателя
Демонстрация интеллектуального рекомендательного алгоритма
Демонстрация заимствования книг
Демонстрация возврата книг
Демонстрация представления отчета о заимствованиях
Демонстрация представления отчета о возвратах
Демонстрация объявлений
Демонстрация управления системой
Демонстрация интеллектуального анализа
Вы можете скачать ZIP-архивы или использовать клонирование (Git clone)
Скопировать HTTP или SSH ссылки (GitHub рекомендует SSH, GitLab может использовать оба)
Создайте новую папку на диске D, перейдите в папку, щелкните правой кнопкой мыши и выберите Git Bash Here
Если вы еще не скачали Git или не знаете Git, рекомендуется сначала ознакомиться с базовым руководством (примерное время: 30 минут)
Введите git init
для инициализации проекта Git и появится папка .git
Введите git remote add origin xxxxxx
(xxx — это HTTP или SSH ссылка, только что скопированная)+ Введите git pull origin master
для получения кода из удаленного репозитория хостинга кода
Успешно получен проект (как для фронтенда, так и для бэкенда)
Проекты фронтенда должны обратить внимание на использование npm install
или yarn install
для загрузки и использования (Vscode или Webstorm)
Проекты бэкенда должны обратить внимание на загрузку зависимостей Maven (IDEA (рекомендуется) или Eclipse)
Рекомендуется использовать Taobao источник изображений для фронтенда NPM и Alibaba Cloud источник изображений для бэкенда Maven (необязательно, но быстрая загрузка после замены)
⭐
Использование UTF-8 в проекте с проблемами с замусориванием кода
В целом, замусориванные символы противоположны UTF-8 и GBK
Пожалуйста, предоставьте ясное описание проблемы замусоривания кода в Baidu IDEA и Eclipse
⭐
Нажатие кнопки взаимодействия не приводит к никакой реакции.
Очевидно, что запрос не удался. Откройте инструменты разработчика в браузере, а в браузере Edge нажмите Ctrl+Shift+I, а в других браузерах нажмите F12
Просмотрите проблемы с кодами состояния запросов и ответов красного цвета
⭐
Прочитайте документацию перед тем, как задавать вопросы или искать ответы
Специфические вопросы и расплывчатые утверждения затрудняют выявление ошибок старшими архитекторами⭐
QQ: 909088445
Обычно онлайн ночью, рекомендуется сначала найти проблему самостоятельно!!!
Открытый исходный код бесплатен, а кастомизация и отладка проектов оплачиваются.
Документы по анализу требований и проектированию. Для тех, у кого есть (оплачиваемые) требования, можно добавить QQ: 909088445. Подходит для тех, кто завершил проектирование и курсовое проектирование. Для тех, кто хочет сэкономить время, пожалуйста, обращайтесь ко мне.
Документация интерфейса слишком длинная
Я изначально планировал полностью использовать стиль RESTFUL, но забыл на полпути
Ясно прочитайте ссылку на документацию
Чтобы объединить подробное содержание API интерфейса бэкенда с структурой и содержанием базы данных, фронтенду и бэкенду будет добавлена звездочка ⭐ Сделайте скриншот и добавьте его в мой QQ: 909088445 Отправьте мне для сбора~Благодарю за вашу поддержку
Адрес личного блога: https://luoye6.github.io/
Личный блог размещается на Hexo+Github+ Использование темы бабочка позволяет достичь кастомизации
Рекомендуется тем, у кого есть свободное время, потратить 1-2 дня на создание личного блога для записи заметок.
Если этот проект был полезен для вас, не могли бы вы угостить автора чашкой кофе:)
Введение зависимости knife4j и использование Swagger+Knife4j для автоматического генерирования документации интерфейсов для спецификации OpenAPI. Фронтенд может использовать плагины для автоматического генерирования кода запросов интерфейсов на этой основе, что снижает затраты на взаимодействие фронтенда и бэкенда.
Введение зависимостей JSOUP позволяет добавлять кастомизированные функции парсинга, что позволяет добавлять книги с относительно реальными данными в пакетном режиме.
Добавление менеджера транзакций для возможности использования @Transactional для указания типов исключений для отката и поведения пропагации транзакций.
Внимание: Не удаляйте пользователей и объявления произвольно!!! Это может вызвать логические ошибки при использовании другими пользователями!!! Пожалуйста, поймите логику проекта перед выполнением операции удаления!!! Спасибо за ваше сотрудничество!!!
В следующем выпуске мы планируем оптимизировать отображение графиков и функций, таких как уведомления о тревогах после просроченных книг. Спасибо за вашу поддержку. Я буду продолжать поддерживать и оптимизировать функции. Если вы обнаружите ошибки, вы можете добавить меня в QQ или создать issue. Не злоупотребляйте ошибками. Спасибо еще раз.
Видео по проекту развертывания для Дня труда будет опубликовано на Bilibili, и развертывание будет объяснено ясно, чтобы облегчить завершение курсовых или финальных проектов. Этот проект включает в себя дизайн таблиц базы данных, документацию API-интерфейсов, введение содержимого и функций, а также введение ключевых моментов. Отсутствующими могут быть только схемы потока данных, ER-диаграммы и т.д. Поскольку на платформе Star много пользователей, я добавлю их.### 1 мая 2023 года
Добавить функцию управления системой с правами "Системный администратор" и добавить анализ типа заимствований и статистический график (диаграмма круговая) с использованием Echarts.
Оптимизировать задержку отображения при отсутствии данных, добавить статус "загрузка", использовать v-loading (компонентная библиотека ElementUI), оптимизировать пользовательский опыт взаимодействия с человеком-машиной, и обеспечить хороший интерфейс взаимодействия при медленном вызове интерфейса сервером.
Оптимизация вращающихся изображений: сжать объём изображений, а также использовать Lazy loading Swiper для достижения статуса загрузки изображений, и только после полной загрузки отображать изображение, оптимизировать процесс пользовательского опыта.
Добавить класс перечисления пользовательских кодов ошибок в backend, что позволяет возвращать пользовательские статусные коды, сохраняя при этом исходное перечисление.
Раздел оптимизации фронтенда отображает содержимое таблицы. Когда вертикальное содержимое слишком длинное и задано максимальное высота таблицы, будет отображаться скроллинг, если содержимое превышает лимит. Оптимизировать ширину столбцов таблицы и улучшить эстетику таблицы.6) Добавить функцию пакетного удаления книг компонента управления книгами для оптимизации опыта администратора, исключив необходимость отдельного удаления каждой книги и повысив эффективность.7) JMeter провёл нагрузочное тестирование, и интерфейс сервера достиг QPS 50 или выше при одновременной отправке запросов 100 пользователями.
Обновления backend
Чтобы предотвратить захват пакетов фронтендом и получение простотекстовых паролей, фронтенд вводит пароль и выполняет шифрование MD5 (смешанные соли для предотвращения коллизий). Backend напрямую сравнивает зашифрованный пароль с базой данных, и равенство означает успешный вход. Улучшить безопасность системы. 2) Устраните проблемы слоя контроллера, разместив весь бизнес-код в слое сервиса, где контроллер вызывает сервис и изменяет позицию аннотации @Transactional на бизнес-слой, снижая связывание и уменьшая объем кода контроллера. Будьте открытыми для расширений и закрытыми для модификаций. В будущем мы рассмотрим использование шаблонов проектирования для оптимизации кода и многопоточности для улучшения скорости отклика интерфейса при высокой конкуренции.
Измените код в соответствии с руководством Alibaba, уменьшите предупреждения и сделайте код более элегантным и стандартизованным.4) Исправление ошибки: Время заимствования пустое, что приводит к сбою сервера. Если дата возврата пустая, все равно отображается успешное заимствование. (Решение: Проверьте параметр времени, чтобы определить, пустое ли он)
Увеличение класса инструментов: SQLUtils (предотвращение SQL-инъекции), NetUtils (сетевой класс инструментов)
Обновление статуса фронтенда
Измените метод загрузки маршрута на ленивую загрузку, что эффективно снижает нагрузку на загрузку главной страницы и уменьшает время загрузки главной страницы.
Добавьте страницу 404, и когда пользователь посещает страницу с адресом запроса, который не существует, он будет перенаправлен напрямую на страницу 404 для улучшения пользовательского опыта.
Добавьте статус загрузки кнопки, оптимизируйте взаимодействие человека с компьютером, и улучшите пользовательский опыт. Измените кнопку: Кнопка входа, другие кнопки могут быть настроены и изменены по необходимости. Добавьте: loading="loading".
Статус исправления ошибок
Книга с номером 1.11 может быть заимствована, но не может быть проверена на просрочку платежа. Выяснилось, что параметр метода все еще является Integer. В прошлый раз заимствование и возврат книг были изменены на Long, но проверка просрочки платежа не была изменена на Long, что привело к проблеме. Это было исправлено.### 10 июня 2023 года
Обновление статуса фронтенда
Добавьте кнопки для перехода в полноэкранный режим на определенных страницах для удобства пользователей при увеличении и просмотре данных таблицы.
Добавьте иконки адресов для GitHub и Gitee для удобства выкачивания и клонирования проектов.
Усилим компонент и функцию комментариев читателей для предотвращения появления бессмысленных чисел, букв и пробелов в данных. В будущем будут сделаны дополнительные рассмотрения.
Компонент сообщений для читателей, использующий lodash для фильтрации, может отправлять сетевые запросы только один раз в течение 5 секунд для предотвращения злонамеренного касания недействительных сообщений.
Обновления серверной части
Состояние устранения ошибок1) Изменена функция изменения пароля на странице пользователя, так как последнее обновление уже добавило соль, но логика кода на серверной стороне не была изменена. Это исправление "невозможности входа после изменения пароля" связано с тем, что на серверной стороне не добавлялась соль, что было исправлено.2) Исправлена проблема, когда администратор системы менял пароль заёмного сертификата и не мог войти. Причина та же, как и в первой ошибке, так как на серверной стороне не добавлялась соль, что было исправлено.
Состояние обновления фронтенда
Добавлена страница интеллектуального рекомендования, которая может взаимодействовать с AI. Пользователи могут ввести свои любимые книги, и AI может анализировать их в существующих базах данных для рекомендаций. Внутренняя модель AI называется, а нижний слой — это OpenAI.
Добавлена страница интеллектуального анализа, ввод целей анализа, типов значков и файлов Excel, генерация аналитических выводов и визуальных значков через AI, что значительно повышает эффективность и снижает затраты на анализ.
Добавлена функция для администраторов системы для загрузки книг в пакетном режиме с использованием файлов Excel на фронтенде (в разработке), для справки только.Обновления серверной части
Добавлены интерфейсы для интеллектуального анализа и получения последних 5 записей чата, и используется пул потоков и Future для обработки запросов с таймаутом. Если вызов интерфейса превышает 40 секунд, будет возвращено сообщение об ошибке.
Используйте RateLimiter из Google Guava для управления ограничением потока, позволяя пропускать только один запрос в секунду, чтобы предотвратить крауд-брushing поведение.
Обновления backend
Переключите модель AI для чата пользователей на модель Alibaba Tongyi Qianwen Plus и поддержите многокруговую историю сессий, больше не используйте модель AI iFlytek Starfire, но сохраните класс инструмента. Основная цель — получать более быстрый ответ, и документация Alibaba более детализирована, позволяя создавать кастомизированные скрипты. Когда пользователи вводят несоответствующие рекомендации по книгам, они могут напрямую отказаться от ответа.
Добавьте расписание задачи IncSyncDeleteAIMessage, которая будет удалять записи с пустым содержимым из-за системных ошибок и других причин каждый день. Количество раз, когда интерфейс будет восстановлен для этих пользователей, также будет уменьшено. В будущем может быть выбран RabbitMQ для помещения неудачных сообщений в очередь сообщений, а затем гарантируется, что неудачные сообщения будут обработаны.3) Шифрование входа было изменено с фронтенда на бэкенд. Поскольку фронтенд может быть взломан, шифрование всё ещё будет размещено на бэкенде. Решение: передача на фронтенде, шифрование с помощью HTTPS для шифротекста, шифрование на бэкенде с использованием соли+алгоритма, и хранение шифротекста в базе данных.
Храните страницу сообщений в Redis, уменьшите запросы к базе данных IO, и увеличьте QPS на сотни раз!
Обновления фронтенда
Измените фоновые изображения и аватары трёх страниц входа, чтобы они хранились в папке изображений папки assets, в основном для пользователей проекта. Многие люди не понимают технологию графического сервера, поэтому я временно изменю страницы входа на статические изображения.
Оптимизация предупреждений переключения разрешений, теперь на значке есть текстовый стиль переключения разрешений входа, указывающий, что у пользователей есть несколько страниц входа для переключения.
Шифрование входа было изменено с фронтенда на бэкенд. Поскольку фронтенд может быть взломан, шифрование всё ещё будет размещено на бэкенде. Решение: передача на фронтенде, шифрование с помощью HTTPS для шифротекста, шифрование на бэкенде с использованием соли+алгоритма, и хранение шифротекста в базе данных.### Март 2024
Обновления backend
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Опубликовать ( 0 )