1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/falle22222n-leaves-vue_-book-manage-system_backend

Присоединиться к Gitlife
Откройте для себя и примите участие в публичных проектах с открытым исходным кодом с участием более 10 миллионов разработчиков. Приватные репозитории также полностью бесплатны :)
Присоединиться бесплатно
Клонировать/Скачать
README_en.md 91 КБ
Копировать Редактировать Web IDE Исходные данные Просмотреть построчно История
Отправлено 23.04.2025 18:55 85de5c0

Документация для открытых библиотечных проектов

Автор: Маленький белый флаг программиста

Страница проекта на Gitee

Страница проекта на Github

Язык: Английский | Китайский.

☀️Начинающим стоит обязательно прочитать

star gitee github

☀️Личное представление

☀️ВведениеAI-интеллектуальная библиотека — это система, использующая AI-модели и анализ данных для точной рекомендации книг, которые нравятся пользователям, и предоставляющая онлайн-генерацию BI-диаграмм для анализа объема заимствований, что может служить аналитиком данных. Основные пользователи системы: пользователи (заемщики), библиотекари и администраторы системы.> Примечание: Если вам нужна простота и новизна, то этот проект будет хорошим выбором.

☀️Функции и возможности

Функции пользователей

  1. Функция поиска книг: пагинация сглаживает нагрузку из-за большого объема данных, и бэкенд может установить количество запросов, чтобы предотвратить избыточные запросы от скраперов и нагрузку на сервер. Точечный поиск по полям. Таблицы могут быть экспортированы в PDF и Excel.

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

  3. Просмотр объявлений: вы можете проверить список объявлений, опубликованных библиотекарем, с эффектом прокрутки текста.

  4. Личная информация: вы можете просмотреть номер читательского билета, имя читательского билета, номер правила, статус и изменить пароль своего личного аккаунта.

  5. Информация о выдаче книг: вы можете просмотреть записи и статус возврата книг, которые вы взяли.

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

  7. Интеллектуальное рекомендательное Пользователи вводят свои предпочтения, и ИИ рекомендует книги пользователям на основе списка книг в базе данных и предпочтений пользователей.

Функции администратора библиотеки

  1. Выдача книг: Библиотекарь вводит номер читательского билета (пользователь), номер книги для выдачи, и текущее время, и нажимает кнопку "выдать".

  2. Возврат книг: Вводится номер книги для проверки просрочки, устанавливается информация о нарушении, затем выбирается, возвращать ли книгу.

  3. Отчёт о выдаче книг: Используется для запроса списка выданных и возвращённых книг. Используется конструктор пагинации и поля для размытого поиска для отображения номера читательского билета, номера книги, даты выдачи, срока возврата, даты возврата, информации о нарушении и исполнителя.

  4. Отчёт о возврате книг: Используется для запроса списка выданных, но ещё не возвращённых книг, отображается номер читательского билета, номер книги, дата выдачи и срок возврата.

  5. Объявления: Вы можете запросить текущий список объявлений и удалять, изменять и добавлять объявления. Используется конструктор пагинации для смягчения ситуации с большим объёмом данных.### Функции администратора системы

  6. Управление книгами: Можно запросить все текущие книги, отображаются номера книг, псевдонимы книг, авторы, библиотеки, классификации, местоположения, статусы и описания. Можно добавлять, изменять и удалять книги. Реализована пагинация для выполнения групповых запросов. Используются размытые запросы для реализации функции поиска книг. Используются плагины для экспорта в PDF и Excel.

  7. Типы книг: Отображение и запрос всех текущих типов книг, которые можно добавлять, изменять или удалять. Используйте конструктор пагинации для выполнения пакетных запросов и снятия нагрузки с данных.

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

  9. Запрос информации о заёмах: можно запросить текущие завершённые записи о заёмах и возвратах, отобразить номер читательской карточки, номер книги, дату заёма, срок возврата, дату возврата, информацию о нарушениях и исполнителя. Функция пагинации, экспорт в PDF и Excel.

  10. Управление правилами заёмов: можно запросить все текущие правила заёмов, отобразить запрещённые дни заёмов, максимальное количество книг, запрещённые библиотеки, пени за просрочку, а также выполнять операции добавления, удаления и изменения.6) Управление библиотекарями: Отображение текущего списка библиотекарей, включая учетные записи, имена и адреса электронной почты, позволяющие добавлять, удалять и изменять записи.

  11. Управление системой: Возможность запроса объема заёмов за месяц, вычисления объема заёмов с интервалом в неделю и использование Echarts для отображения различных графиков.

  12. Анализ системы: Возможность загрузки объема заёмов и дат за определённый период времени, а также ввода целей анализа и типа графика, который вы хотите сгенерировать. После ожидания некоторое время, AI предоставит выводы анализа и визуальные графики.

Основные функции (выделяемые моменты)

  1. В этом проекте используется разделение на фронтенд и бэкенд, где фронтенд создаёт страницы, а бэкенд выполняет роль интерфейса данных. Фронтенд вызывает интерфейс данных бэкенда для получения данных и перерисовки страницы.

  2. Фронтенд предоставляет токен в поле Authorization, аутентификация API использует аутентификацию токеном, HTTP Status Code представляет статус, а формат возврата данных использует JSON.

  3. Бэкенд включает поддержку CORS для кросс-доменных запросов, использует перехватчики разрешений для проверки разрешений и проверки статуса входа.

  4. Добавлен механизм глобального обработчика исключений для перехвата исключений и повышения устойчивости системы.5) Фронтенд использует библиотеку визуализации ECharts для реализации аналитических иконок (линейные графики, круговые диаграммы) для заёмов книг и улучшения опыта загрузки через конфигурацию загрузки. 6) Компонент сообщений использует формат пула сообщений, что соответствует предпочтениям пользователей.

  5. Внедрить зависимость knife4j и использовать Swagger+Knife4j для автоматического создания документации интерфейсов в соответствии с спецификацией OpenAPI. Фронтенд может использовать плагины для автоматического создания кода запросов интерфейсов на основе этого, что снижает затраты на взаимодействие фронтенда и бэкенда.

  6. Используя библиотеку компонентов ElementUI для построения фронтенд-интерфейсов, можно быстро создавать страницы и обеспечивать унифицированное управление правами доступа и переключение среды для как фронтенда, так и бэкенда.

  7. Компонент QueryWrapper, основанный на фреймворке MyBatis Plus, обеспечивает гибкий поиск в базах данных MySQL и, в сочетании с плагином MyBatisX, автоматически генерирует базовый код CRUD для бэкенда, что снижает повторяющуюся работу.

  8. Ленивая загрузка маршрутов фронтенда, оптимизация кэширования статических ресурсов CDN и эффект ленивой загрузки изображений.

☀️Режим работы

2 минуты для быстрого запуска проекта1) Найти класс запуска SpringBoot, нажать на Run

  1. Открыть Knife4j для регистрации как пользователя, или вы можете связаться со мной для получения данных симуляции базы данных (простая).

  1. После ввода содержимого формы в фронтенд, нажать на отправку для успешного запуска функции~

☀️Метод развертывания

Предварительные условия

Фронтенд

Программное обеспечение: Vscore или Webstorm (рекомендуется)

Среда: версия Node 16 или 18 (рекомендуется) Примечание: не выбирайте версии выше 18

Бэкенд

Программное обеспечение: Eclipse или IDEA (рекомендуется)

Среда: MySQL 5.7 или 8.0 (рекомендуется) Redis (необязательно)

Развертывание фронтенда

  1. Нажатие на Clone/Download Project будет использовать Git для контроля версий. Рекомендуется использовать Git Clone. Если вы не знаете, как это сделать, вы можете выбрать загрузку архива Zip и распаковать его на диск D вашего компьютера. Рекомендуется использовать Star напрямую, а затем получить файл симуляции базы данных и документацию API интерфейсов от меня.

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/

  1. Настройте и переключите ссылки изображений на свой собственный сервер изображений, такой как Qiniuyun, GitHub и т.д. Вы также можете искать онлайн-изображения и копировать ссылки изображений Baidu Wenku (попробуйте несколько раз, некоторые изображения имеют защитные ссылки). После изменения фона вы можете увидеть иконку переключения разрешений в нижнем правом углу.

Развертывание бэкенда

  1. Нажмите на клонирование/скачивание проекта, чтобы использовать Git для управления версиями. Рекомендуется использовать Git Clone. Если вы не знаете, как это сделать, вы можете выбрать загрузку архива Zip и распаковать его на диск D вашего компьютера. Рекомендуется использовать Star напрямую, а затем получить файл симуляции базы данных и документацию API интерфейса напрямую от меня.

2) После получения файла симуляции базы данных используйте программное обеспечение, такое как Navicat или SQLYog, чтобы импортировать файл базы данных. Не забудьте сначала создать базу данных с именем bms_boot, а затем правым щелчком мыши запустить файл SQL. После успешного запуска без ошибок перезагрузите базу данных и проверьте наличие данных. Если данные присутствуют, это указывает на успешный импорт.

  1. Откройте проект бэкенда с помощью IDEA, найдите файл application-dev.yml, измените конфигурацию MySQL и убедитесь, что имя пользователя и пароль указаны правильно. Примечание: Пароли не могут начинаться с цифры 0.

  2. При импорте зависимостей Maven убедитесь, что проверили правильность версии Maven. Рекомендуется выбрать ту же версию, что и у меня, версию 3.8 или выше. Я обнаружил, что импорт зависимостей происходит медленно, так как нет конфигурации для внутренних изображений, и по умолчанию подключение осуществляется к внешним серверам. Поэтому конфигурация изображений Alibaba Cloud может быть найдена в этом блоге посту. CSDN Maven конфигурация

  1. Найдите класс запуска SpringBoot, и я рекомендую использовать режим отладки для запуска проекта для лучшего отладочного анализа.

  1. Если вы столкнулись с ошибкой, это, вероятно, проблема версии JDK. Мой проект использует JDK 8, поэтому рекомендуется выбрать ту же версию, что и у меня.

  1. Успешный запуск проекта показан ниже

### Отладка фронтенда и бэкенда

  1. Если вам нужно изменить порт и префикс (например, /API), вам нужно изменить как фронтенд, так и бэкенд.

☀️Технический выбор### Фронтенд| Технология | Задача | Версия |

| ---------------------------- | ------------------------------------------------------------ | ---------------------------------------------------- | | 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 | |## ☀️Архитектура

☀️Основной дизайн

Функция умных рекомендаций

  1. Пользователи вводят информацию о своих предпочтениях в книгах.

  2. Передняя часть отправляет запросы Axios.

  3. Система сначала проверяет, является ли текст незаконным (пустым или слишком длинным).

  4. Проверяет наличие интерфейса.

  5. Проверяет, достаточно ли запросов к интерфейсу AI.

  6. GuavaRateLimiter выполняет ограничение потока для каждого пользователя, чтобы определить, превышает ли количество запросов нормальную частоту бизнес-трафика.

  7. Ручная настройка AI модели и запрос списка книг в базе данных для конкатенации.

  8. Запрос AI модели и последних пяти исторических записей пользователя для ассоциации контекста.

  9. FutureTask синхронно вызывает для получения результатов AI и устанавливает таймаут (таймаут выбрасывает исключение).

  10. Сохраняет рекомендации AI после получения информации и уменьшает количество запросов к интерфейсу (чтобы определить успешность).

  11. Возвращает обработанные рекомендации AI передней части и устанавливает код состояния ответа на 200.

Функция умного анализа

  1. Пользователи вводят целевые объекты анализа, имена иконок, выбирают типы иконок, загружают файлы Excel, нажимают кнопку отправки и отправляют запросы Axios в систему.2) Проверяет, пуст ли файл, слишком ли длинно имя файла, размер файла и расширение файла.

  2. Получает ID администратора и запрашивает интерфейс, управляемый ID администратора из таблицы информации об интерфейсах. Интерфейс обнаруживается пустым.

  3. Определяет, достаточно ли запросов к интерфейсу AI.

  4. GuavaRateLimiter выполняет ограничение потока для каждого пользователя, чтобы определить, превышает ли количество запросов нормальную частоту бизнес-трафика.

  5. Подсказки слов и ролей для построения AI моделей.

  6. Построение пользовательского ввода, конкатенация информации о пользовательском вводе и использование классов инструментов для преобразования Excel в строковые данные CSV.

  7. Использование AI модели iFlytek Starfire, ввод ID вызывающего и входных параметров, использование FutureTask для синхронного получения и установка времени таймаута (таймаут выбрасывает исключение).

  8. Оценка результатов, сгенерированных AI, если есть ошибка форматирования, возвращение сообщения об ошибке передней части и предложение повторного вызова (в будущем рассмотреть RabbitMQ для механизма повторной попытки и компенсации).

  9. Сохранение результатов, сгенерированных AI, в базе данных, обновление количества вызовов интерфейса (для определения успешности) и динамическое возвращение иконок и вывода данных на фронтенд.## ☀️Что вы получите после завершения этого проекта

  10. Просто вызовите модель AI (iFlytek Starfire | Alibaba Bailian), чтобы получить пользовательский текстовый контент.

  11. Простая проверка прав доступа с помощью JWT, используя backend-интерцепторы для проверки входа.

  12. Загрузите файл Excel, преобразуйте файл Excel в CSV-данные и генерируйте визуальные диаграммы онлайн с помощью AIGC.

  13. Jousp может выполнять пакетное извлечение списков книг и выполнять их в сочетании с задачами планировщика SpringSchedule.

  14. Как работает взаимодействие между фронтендом и бэкендом в простой системе для добавления, удаления, изменения и поиска данных.

  15. Как реализуются ленивая загрузка маршрутов фронтенда, оптимизация кэширования статических ресурсов CDN и ленивая загрузка изображений.

  16. Используйте Lodash для управления затуханием, чтобы минимизировать ненужные злонамеренные сообщения.

  17. Используйте пользовательские пулы потоков и FutureTasks для обработки запросов с таймаутом.

  18. Используйте Google Guava RateLimited для управления ограничением потока для каждого пользователя.

  19. Объедините задачи планировщика с Redis для предварительного нагрева кэша, чтобы ускорить скорость запросов и улучшить пользовательский опыт.

☀️Введение в проект

  • Основная реализация выполнена с использованием Vue2 и SpringBoot2+ Контроль прав доступа проекта: пользователь, библиотекарь и системный администратор

  • Инструмент разработки: IDEA 2022.1.3 (я действительно не рекомендую использовать Eclipse для разработки. Проекты IDEA могут быть экспортированы как проекты Eclipse, и они не влияют друг на друга, но вам нужно самостоятельно изучить руководство)

  • IDEA -> Eclipse

  • Eclipse -> IDEA

  • Если преподаватели школы настаивают на использовании определенного ПО, следует все равно следовать требованиям. Необходимо сперва уточнить, возможно ли выбрать другие варианты разработки ПО.

  • Пароль учетной записи пользователя: Xiangsi Duan Hongchang 123456

  • Пароль учетной записи библиотекаря: admin 123456

  • Пароль учетной записи системного администратора: root 123456

  • Ссылка на стили фронтенда Спасибо оригинальному автору Mingyue Resurrection

  • Возникла ошибка функции взаимодействия или страница не может быть открыта. Пожалуйста, используйте инструмент разработчика F12 для проверки статусного кода запроса и ответа. Конечно, новичок может не понять, так что это нормально. Вы можете добавить меня QQ: 909088445. Учусь днем, могу отвечать только когда есть время ночью. Спасибо за понимание! ⭐⭐⭐

☀️Подробное описание проекта (Основные моменты)+ В этом проекте используется режим разделения фронтенда и бэкенда, где фронтенд строит страницы, а бэкенд предоставляет интерфейс данных. Фронтенд вызывает интерфейс данных бэкенда для получения данных и перерendering страницы.

  • Бэкенд включил поддержку 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 для отображения линейного графика.

☀️Проектирование таблиц базы данных### Таблица t_users | Название столбца | Тип данных и длина | Примечание |

| ----------------- | ------------------- | ------------------------------------------------------- | | 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 |

Таблица t_admins| Название столбца | Тип данных и размер | Описание |

| ----------------- | -------------------- | --------------------------------------------- | | 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 |

Таблица t_book_admins| Название столбца | Тип данных и размер | Описание |

| ----------------- | -------------------- | --------------------------------------------- | | 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

t_comment таблица| Название столбца | Тип данных и размер | Примечание |

| ------------------ | -------------------- | ----------------------------------------------- | | 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 |

Таблица t_book_rule| Название столбца | Тип данных и размер | Примечание |

| ------------------ | -------------------- | ----------------------------------------------- | | 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. Подходит для тех, кто завершил проектирование и курсовое проектирование. Для тех, кто хочет сэкономить время, пожалуйста, обращайтесь ко мне.

🐼 Документация API интерфейса проекта

  • Документация интерфейса слишком длинная

  • Я изначально планировал полностью использовать стиль RESTFUL, но забыл на полпути

  • Ясно прочитайте ссылку на документацию

  • Чтобы объединить подробное содержание API интерфейса бэкенда с структурой и содержанием базы данных, фронтенду и бэкенду будет добавлена звездочка ⭐ Сделайте скриншот и добавьте его в мой QQ: 909088445 Отправьте мне для сбора~Благодарю за вашу поддержку

Пример скриншота извлечения данных из базы данных (Gitee&GitHub):

🐷 Другое

  • Адрес личного блога: https://luoye6.github.io/

  • Личный блог размещается на Hexo+Github+ Использование темы бабочка позволяет достичь кастомизации

  • Рекомендуется тем, у кого есть свободное время, потратить 1-2 дня на создание личного блога для записи заметок.

☕ Пожалуйста, угостите меня кофе

Если этот проект был полезен для вас, не могли бы вы угостить автора чашкой кофе:)

Итерации версий

19 марта 2023 года

  1. Введение зависимости knife4j и использование Swagger+Knife4j для автоматического генерирования документации интерфейсов для спецификации OpenAPI. Фронтенд может использовать плагины для автоматического генерирования кода запросов интерфейсов на этой основе, что снижает затраты на взаимодействие фронтенда и бэкенда.

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

  3. Добавление менеджера транзакций для возможности использования @Transactional для указания типов исключений для отката и поведения пропагации транзакций.

13 апреля 2023 года1) При ручном добавлении и удалении операций с базой данных с сложной логикой были добавлены аннотации @Transactional. При возникновении исключений во время выполнения, база данных может быть откатана напрямую, чтобы предотвратить логические ошибки при заимствовании и возврате книг.2) Исправление ошибки, при которой 11-значный номер книги не может быть заимствован, так как он превышает 2147483647 (10 цифр) целого числа. Решение: Изменение базы данных на BigInt и Java на Long.

  1. Внимание: Не удаляйте пользователей и объявления произвольно!!! Это может вызвать логические ошибки при использовании другими пользователями!!! Пожалуйста, поймите логику проекта перед выполнением операции удаления!!! Спасибо за ваше сотрудничество!!!

  2. В следующем выпуске мы планируем оптимизировать отображение графиков и функций, таких как уведомления о тревогах после просроченных книг. Спасибо за вашу поддержку. Я буду продолжать поддерживать и оптимизировать функции. Если вы обнаружите ошибки, вы можете добавить меня в QQ или создать issue. Не злоупотребляйте ошибками. Спасибо еще раз.

  3. Видео по проекту развертывания для Дня труда будет опубликовано на Bilibili, и развертывание будет объяснено ясно, чтобы облегчить завершение курсовых или финальных проектов. Этот проект включает в себя дизайн таблиц базы данных, документацию API-интерфейсов, введение содержимого и функций, а также введение ключевых моментов. Отсутствующими могут быть только схемы потока данных, ER-диаграммы и т.д. Поскольку на платформе Star много пользователей, я добавлю их.### 1 мая 2023 года

  4. Добавить функцию управления системой с правами "Системный администратор" и добавить анализ типа заимствований и статистический график (диаграмма круговая) с использованием Echarts.

  5. Оптимизировать задержку отображения при отсутствии данных, добавить статус "загрузка", использовать v-loading (компонентная библиотека ElementUI), оптимизировать пользовательский опыт взаимодействия с человеком-машиной, и обеспечить хороший интерфейс взаимодействия при медленном вызове интерфейса сервером.

  6. Оптимизация вращающихся изображений: сжать объём изображений, а также использовать Lazy loading Swiper для достижения статуса загрузки изображений, и только после полной загрузки отображать изображение, оптимизировать процесс пользовательского опыта.

  7. Добавить класс перечисления пользовательских кодов ошибок в backend, что позволяет возвращать пользовательские статусные коды, сохраняя при этом исходное перечисление.

  8. Раздел оптимизации фронтенда отображает содержимое таблицы. Когда вертикальное содержимое слишком длинное и задано максимальное высота таблицы, будет отображаться скроллинг, если содержимое превышает лимит. Оптимизировать ширину столбцов таблицы и улучшить эстетику таблицы.6) Добавить функцию пакетного удаления книг компонента управления книгами для оптимизации опыта администратора, исключив необходимость отдельного удаления каждой книги и повысив эффективность.7) JMeter провёл нагрузочное тестирование, и интерфейс сервера достиг QPS 50 или выше при одновременной отправке запросов 100 пользователями.

20 мая 2023 года

Обновления backend

  1. Чтобы предотвратить захват пакетов фронтендом и получение простотекстовых паролей, фронтенд вводит пароль и выполняет шифрование MD5 (смешанные соли для предотвращения коллизий). Backend напрямую сравнивает зашифрованный пароль с базой данных, и равенство означает успешный вход. Улучшить безопасность системы. 2) Устраните проблемы слоя контроллера, разместив весь бизнес-код в слое сервиса, где контроллер вызывает сервис и изменяет позицию аннотации @Transactional на бизнес-слой, снижая связывание и уменьшая объем кода контроллера. Будьте открытыми для расширений и закрытыми для модификаций. В будущем мы рассмотрим использование шаблонов проектирования для оптимизации кода и многопоточности для улучшения скорости отклика интерфейса при высокой конкуренции.

  2. Измените код в соответствии с руководством Alibaba, уменьшите предупреждения и сделайте код более элегантным и стандартизованным.4) Исправление ошибки: Время заимствования пустое, что приводит к сбою сервера. Если дата возврата пустая, все равно отображается успешное заимствование. (Решение: Проверьте параметр времени, чтобы определить, пустое ли он)

  3. Увеличение класса инструментов: SQLUtils (предотвращение SQL-инъекции), NetUtils (сетевой класс инструментов)

Обновление статуса фронтенда

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

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

  3. Добавьте статус загрузки кнопки, оптимизируйте взаимодействие человека с компьютером, и улучшите пользовательский опыт. Измените кнопку: Кнопка входа, другие кнопки могут быть настроены и изменены по необходимости. Добавьте: loading="loading".

Статус исправления ошибок

Книга с номером 1.11 может быть заимствована, но не может быть проверена на просрочку платежа. Выяснилось, что параметр метода все еще является Integer. В прошлый раз заимствование и возврат книг были изменены на Long, но проверка просрочки платежа не была изменена на Long, что привело к проблеме. Это было исправлено.### 10 июня 2023 года

Обновление статуса фронтенда

  1. Добавьте кнопки для перехода в полноэкранный режим на определенных страницах для удобства пользователей при увеличении и просмотре данных таблицы.

  2. Добавьте иконки адресов для GitHub и Gitee для удобства выкачивания и клонирования проектов.

  3. Усилим компонент и функцию комментариев читателей для предотвращения появления бессмысленных чисел, букв и пробелов в данных. В будущем будут сделаны дополнительные рассмотрения.

  4. Компонент сообщений для читателей, использующий lodash для фильтрации, может отправлять сетевые запросы только один раз в течение 5 секунд для предотвращения злонамеренного касания недействительных сообщений.

Обновления серверной части

  1. Добавлена функция пакетного импорта книг на серверной стороне с использованием EasyExcel для взаимодействия с хранением данных книг с помощью Excel в реальной жизни, что повышает эффективность импорта и обеспечивает такой же эффект, как у функции-скрейпера. Она также может импортировать большие объёмы данных. Рекомендуется использовать EasyExcel для пакетного импорта, так как это будет быстрее, чем функция-скрейпер.

Состояние устранения ошибок1) Изменена функция изменения пароля на странице пользователя, так как последнее обновление уже добавило соль, но логика кода на серверной стороне не была изменена. Это исправление "невозможности входа после изменения пароля" связано с тем, что на серверной стороне не добавлялась соль, что было исправлено.2) Исправлена проблема, когда администратор системы менял пароль заёмного сертификата и не мог войти. Причина та же, как и в первой ошибке, так как на серверной стороне не добавлялась соль, что было исправлено.

  1. Исправлена проблема, когда администратор системы непосредственно нажимал на "изменить книгу" в функции управления книгами и обнаруживал, что классификация книги была неверной. Это было связано с тем, что фронтенд отправлял запрос только для получения классификации в диалоговом окне "добавить книгу", и забыл добавить запрос для получения классификации при изменении диалогового окна. Эта проблема была исправлена.

Сентябрь 2023 года

Состояние обновления фронтенда

  1. Добавлена страница интеллектуального рекомендования, которая может взаимодействовать с AI. Пользователи могут ввести свои любимые книги, и AI может анализировать их в существующих базах данных для рекомендаций. Внутренняя модель AI называется, а нижний слой — это OpenAI.

  2. Добавлена страница интеллектуального анализа, ввод целей анализа, типов значков и файлов Excel, генерация аналитических выводов и визуальных значков через AI, что значительно повышает эффективность и снижает затраты на анализ.

  3. Добавлена функция для администраторов системы для загрузки книг в пакетном режиме с использованием файлов Excel на фронтенде (в разработке), для справки только.Обновления серверной части

  4. Добавлены интерфейсы для интеллектуального анализа и получения последних 5 записей чата, и используется пул потоков и Future для обработки запросов с таймаутом. Если вызов интерфейса превышает 40 секунд, будет возвращено сообщение об ошибке.

  5. Используйте RateLimiter из Google Guava для управления ограничением потока, позволяя пропускать только один запрос в секунду, чтобы предотвратить крауд-брushing поведение.

Ноябрь 2023

Обновления backend

  1. Переключите модель AI для чата пользователей на модель Alibaba Tongyi Qianwen Plus и поддержите многокруговую историю сессий, больше не используйте модель AI iFlytek Starfire, но сохраните класс инструмента. Основная цель — получать более быстрый ответ, и документация Alibaba более детализирована, позволяя создавать кастомизированные скрипты. Когда пользователи вводят несоответствующие рекомендации по книгам, они могут напрямую отказаться от ответа.

  2. Добавьте расписание задачи IncSyncDeleteAIMessage, которая будет удалять записи с пустым содержимым из-за системных ошибок и других причин каждый день. Количество раз, когда интерфейс будет восстановлен для этих пользователей, также будет уменьшено. В будущем может быть выбран RabbitMQ для помещения неудачных сообщений в очередь сообщений, а затем гарантируется, что неудачные сообщения будут обработаны.3) Шифрование входа было изменено с фронтенда на бэкенд. Поскольку фронтенд может быть взломан, шифрование всё ещё будет размещено на бэкенде. Решение: передача на фронтенде, шифрование с помощью HTTPS для шифротекста, шифрование на бэкенде с использованием соли+алгоритма, и хранение шифротекста в базе данных.

  3. Храните страницу сообщений в Redis, уменьшите запросы к базе данных IO, и увеличьте QPS на сотни раз!

Обновления фронтенда

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

  2. Оптимизация предупреждений переключения разрешений, теперь на значке есть текстовый стиль переключения разрешений входа, указывающий, что у пользователей есть несколько страниц входа для переключения.

  3. Шифрование входа было изменено с фронтенда на бэкенд. Поскольку фронтенд может быть взломан, шифрование всё ещё будет размещено на бэкенде. Решение: передача на фронтенде, шифрование с помощью HTTPS для шифротекста, шифрование на бэкенде с использованием соли+алгоритма, и хранение шифротекста в базе данных.### Март 2024

Обновления backend

  1. Добавьте аннотации @ApiOperation в Knife4J для указания цели каждого интерфейса, что облегчит чтение и тестирование интерфейсов разработчиками.

Опубликовать ( 0 )

Вы можете оставить комментарий после Вход в систему

1
https://api.gitlife.ru/oschina-mirror/falle22222n-leaves-vue_-book-manage-system_backend.git
git@api.gitlife.ru:oschina-mirror/falle22222n-leaves-vue_-book-manage-system_backend.git
oschina-mirror
falle22222n-leaves-vue_-book-manage-system_backend
falle22222n-leaves-vue_-book-manage-system_backend
master