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

OSCHINA-MIRROR/hmfdev-CloudOffice

Присоединиться к Gitlife
Откройте для себя и примите участие в публичных проектах с открытым исходным кодом с участием более 10 миллионов разработчиков. Приватные репозитории также полностью бесплатны :)
Присоединиться бесплатно
Клонировать/Скачать
Внести вклад в разработку кода
Синхронизировать код
Отмена
Подсказка: Поскольку Git не поддерживает пустые директории, создание директории приведёт к созданию пустого файла .keep.
Loading...
README.md

CloudOffice

Введение

  Цель данного проекта — реализация системы онлайн-офиса для малых и средних предприятий. Онлайн-система управления офисом CloudOffice предназначена для управления повседневной работой, включая различные процессы одобрения, новостей, объявлений, информации о файлах, финансов, кадров, расходов, активов, административных вопросов, проектов и мобильной работы.   Основная цель системы — обеспечить удобство управления через программное обеспечение, сделать процесс более простым, эффективным и стандартизованным, что позволит повысить уровень управления и операционной деятельности.

Архитектура программы

Архитектурное описание программы

Примеры экранов API сервера

Инструкция по установке

  1. xxxx
  2. xxxx
  3. xxxx#### Инструкция по использованию
  4. При получении меню используется кэширование, поэтому здесь требуется конфигурирование Redis и запуск Redis.
  5. При добавлении сотрудников используется RabbitMQ для отправки писем после завершения добавления. Требуются настройка IP адреса сервиса и авторизация почтового клиента в конфигурационном файле, а также запуск RabbitMQ.
  6. При обновлении аватара используется FastDFS для передачи изображений. Требуются настройка IP адреса сервиса и запуск трекера, хранителя и Nginx сервера FastDFS.
  7. Для доступа к API используйте http://localhost:8081/doc.html.#### Детали журнала коммитов
  8. [1. Локальная инициализация]
  1. Создайте проект Spring Boot с помощью Spring Initializr в IDEA
  2. Клонируйте новый репозиторий из Gitee в локальную систему, добавьте содержимое клонированного репозитория в созданный проект Spring Boot и выполните локальную инициализацию
  3. Объедините .gitignore, созданное IDEA, с .gitignore, склонированным из Gitee
  1. [2. Подготовка проекта]
  1. Подготовка базы данных, создание базы данных yeb с выбором символьного набора utf8mb4, импорт SQL-скрипта yeb.sql из папки database
  2. Установите плагин Lombok в IDEA
  1. [Настройка проекта]
  1. Новый созданный Spring Boot проект будет использоваться как родительский проект. Этот родительский проект будет служить для управления зависимостями pom всех наших проектов, поэтому большинство файлов и папок можно удалить.

  2. Измените файл pom.xml, удалите тег зависимости <dependencies> и тег сборки <build>, а также его содержимое. Добавьте тег <packaging> со значением pom.

  3. Создайте модульный проект Module. Используйте Maven для создания быстрого запуска модульного подпроекта yeb-server, который будет отвечать за всю бизнес-логику.

  4. Внесите изменения в новый модульный проект yeb-server. Удалите сгенерированный класс App и тестовый класс AppTest, затем добавьте пакет server.

  5. В файле pom.xml подпроекта yeb-server добавьте координаты родительского проекта, связывая его с основным проектом.6) Удалите тег сборки <build> и зависимости (так как мы будем копировать необходимые зависимости).

  6. Дополните структуру директорий нового модульного проекта, такие как resources, директории уровней и так далее, и добавьте конфигурационный файл application.yml. Обратите внимание, что при копировании содержимого конфигурационного файла легко возникнуть ошибки.

  7. Добавьте запуск класс YebApplication и аннотацию сканирования мапперов.

  8. Разместите конфигурационный файл application.yml в директории config.

Рефакторинг проекта (создание резервной копии всех таблиц базы данных перед рефакторингом)

  1. Используйте встроенный генератор обратной инженерии AutoGenerator из MyBatisPlus для быстрого создания Entity, Mapper, Mapper XML, Service и Controller. Это значительно повышает эффективность разработки.
  2. Создайте новый модуль субпроекта Module с помощью maven quickstart для специализированного использования в генерации кода различных модулей.
  3. Удалите ненужные части файла pom.xml нового yeb-generator субпроекта, укажите координаты родительского проекта, скопируйте зависимости и создайте пакет generator.
  4. Этот субпроект генератора кода не требует тестирования, поэтому удалены все сгенерированные test файлы.5. Обратная инженерия (создание классов, соответствующих всем таблицам базы данных для каждого модуля)
  5. В субпроекте yeb-generator после создания классов для каждого модуля скопируйте их в субпроект yeb-server.
  6. После того как вы скопировали эти классы в субпроект yeb-server, удалите их из субпроекта yeb-generator, так как они будут отмечены ошибками.
  7. Добавьте необходимые зависимости для решения проблем с красными маркерами, такие как зависимость swagger2.
  8. В файле CodeGenerator генератора кода вам потребуется указать пакеты, для которых требуется создание классов. В этом файле есть подробные комментарии.6. Создание класса-инструмента Jwt Token
  9. Для реализации функции входа используется SpringSecurity + JWT токен. Необходимо добавить соответствующие зависимости.
  10. В конфигурационном файле application.yml следует настроить JWT и создать конфигурацию config для хранения некоторых конфигураций проекта.
  11. Создайте и заполните класс-инструмент JwtTokenUtil.
  1. Публичный объект ответа
  1. Объекты JSON, возвращаемые при вызове API, должны быть упакованы в объект RespBean.
  1. Возврат токена после входа
  1. Вход осуществляется с использованием Spring Security + JWT.
  2. Передняя часть отправляет имя пользователя и пароль. Если данные верны, создаётся JWT токен, который вместе с заголовком запроса возвращается впереди.
  1. Получение информации о текущем пользователе и выход из системы
  1. Процесс выхода состоит в том, чтобы передняя часть отправила запрос на соответствующий интерфейс. При успешном выполнении запроса передняя часть должна удалить заголовок запроса.
  1. Настройка фильтров авторизации безопасности

  2. Персонализация результатов возврата безопасности

  1. Основные настройки Spring Security завершены.
  1. Настройка Swagger2
  1. Необходимо также настроить доступ к ресурсам Swagger2.
  2. Исправлены некоторые ошибки, пропущенные при написании кода.
  1. Добавление Authorize в Swagger2
  1. Исправлены некоторые содержательные ошибки в коде.
  1. [Генерация CAPTCHA]1) Используйте графический CAPTCHA от Google и создайте конфигурационный класс для CAPTCHA — CaptchaConfig, добавив аннотацию @Configuration.
  1. Напишите интерфейс CaptchaController.

  2. В SecurityConfig разрешите доступ к графическому CAPTCHA, указав адреса, которые должны быть разрешены.

  3. Измените документацию API так, чтобы она также отображала графический CAPTCHA, используя аннотацию @GetMapping(value = "/captcha", produces = "image/jpeg").

  4. При истечении срока действия токена будет выдано сообщение об ошибке: io.jsonwebtoken.ExpiredJwtException: JWT expired at 202-7-23723:18.2 Current time:2001-47-2412208.34, a difference of 82207652 milliseconds. Allowed clock skew:0 milliseconds.

15. Проверка кода подтверждения

  1. В классе AdminLoginParam добавьте параметр кода подтверждения, а также добавьте параметр code в соответствующие методы слоёв.
  2. Затем в методе login() класса AdminServiceImpl проверьте, совпадает ли введённый пользователем код подтверждения с тем, что хранится в сессии.

16. Получение списка меню по id пользователя

  1. Мы используем Spring Security; после входа в систему мы устанавливаем глобальный объект пользователя, который можно получить через SecurityContextHolder.getContext().getAuthentication().getPrincipal().

17. Составление SQL-запроса для получения списка меню по id пользователя

  1. Здесь SQL-запросы многочисленны и сложны.
  2. Поскольку ранее код был написан в неправильном слое, он должен был быть написан в процессе MenuController, поэтому здесь была проведена корректировка.18. [18. Интеграция Redis для управления меню]
  3. Добавьте зависимость Redis, затем настройте Redis в application.yml.
  4. Настройте сериализацию Redis, если она ещё не настроена, то в Redis могут появиться некорректные символы. Не забудьте про аннотацию @Configuration, иначе конфигурация не будет применена.
  5. Если меню было изменено, следует очистить Redis, чтобы он заново получал данные из базы данных и снова записывал их в Redis, таким образом обеспечивая актуальность данных.
  1. [19. Определение роли пользователя по URL запроса]
  1. Для получения списка меню по роли необходимо поместить это в фильтр.
  2. Создайте пакет component и измените пути хранения некоторых .java файлов.
  1. [20. Определение роли пользователя]
  1. Конфигурирование динамических прав доступа завершено, настройка меню и прав доступа завершена.21. [21. Реализация функционала управления должностями - реализация создания, удаления, изменения и просмотра должностей]
  2. Префикс URL должен соответствовать префиксу системы управления из таблицы t_menu, иначе возникнет ошибка недостаточных прав доступа.
  3. Для форматирования времени используйте аннотацию @JsonFormat(pattern = "yyyy-MM-dd", timezone = "Asia/Shanghai") в классах сущностей, где pattern — это формат времени, а timezone — временная зона.
  4. Односвязные операции CRUD выполняются очень быстро с помощью MyBatisPlus, даже можно использовать готовые методы MyBatisPlus для выполнения запросов.
  5. Вы можете использовать LocalDateTime.now(), чтобы получить текущее время системы.
  6. Преобразование данных в список: Arrays.asList(ids)
  7. Используя методы CRUD, предоставляемые MyBatisPlus, вам достаточно выполнять действия в контроллере, без необходимости модификации слоёв сервиса и маппера.22. [22. Глобальное управление исключениями]
  8. Аннотация @RestControllerAdvice указывает на класс, расширяющий возможности контроллеров, и позволяет перехватывать соответствующие исключения.
  1. Реализация функционала управления званием
  1. Для времени требуется добавить аннотацию @JsonFormat(pattern = "yyyy-MM-dd", timezone = "Asia/Shanghai") к соответствующим полям в сущностях для форматирования времени.
  2. Преобразование массива в коллекцию List выполняется через Arrays.asList(ids) .
  3. Поле titleLevel таблицы t_joblevel имеет фиксированное значение, что следует учитывать.
  4. В случае, когда значения уже установлены в базе данных, рекомендуется использовать тип данных Enum.
  1. Реализация функционала управления группами прав доступа
  1. Изменение RequestMapping MenuController на "system/config" .
  2. Получение всех данных из таблицы с помощью метода list() MyBatisPlus roleService.list() .
  3. Добавление данных с использованием метода save() MyBatisPlus roleService.save() .
  4. Удаление записи по Id с использованием метода removeById() MyBatisPlus roleService.removeById() .
  1. Реализация функционала поиска меню группы прав доступа
  1. Обратите внимание на запись resultMap в MenuMapper.xml.
  2. Обратите внимание на содержание метода (поиск меню id по роли id): menuRoleService.list(new QueryWrapper<MenuRole>().eq("rid", rid)).stream().map(MenuRole::getMid).collect(Collectors.toList()).26. Реализация функционала обновления меню группы прав доступа
  3. При выполнении операций обновления и удаления в слое Service добавьте аннотацию @Transactional
  4. Обратите внимание на аннотацию @Param, применяемую к параметрам слоя dao, которая находится в пакете org.apache.ibatis.annotations.Param;27. Обзор хранимых процедур
  1. Создание и вызов хранимых процедур

  2. Обзор хранимых процедур проекта

  3. Получение всех отделов

  1. Обратите внимание на SQL-запрос, используйте рекурсивный запрос SQL для понимания
  1. Добавление отдела
  1. Поскольку используется хранимая процедура, то при добавлении отдела вместо использования <insert> тега в xxxMapper.xml файле используется <select> тег
  2. Обратите внимание на правильность написания слов
  1. Удаление отдела
  1. Здесь рассматривается работа с хранимыми процедурами
  2. Таким образом, все необходимые для работы с отделами API были реализованы
  1. Получение всех пользователей
  1. Создайте инструментальный класс AdminUtils для получения информации о входящем пользователе, такой как ID, который берется из Spring Security
  2. К параметрам методов слоя DAO/MAPPER следует добавить аннотацию @Param
  3. В SQL-запросах используйте функцию concat(), предоставляемую базой данных, для соединения строк
  4. Обратите внимание на запись <resultMap> в файле AdminMapper.xml
  1. Обновление и удаление оператора
  1. Обновляем данные с помощью метода updateById(), предоставленного MyBatisPlus

  2. Здесь следует обратить внимание на @Data. Добавьте аннотацию @Getter(AccessLevel.NONE), чтобы не генерировать getter метод для этого поля

  3. Интерфейсы для обновления и удаления данных не были протестированы35. [Реализация функционала роли оператора]

  4. Обратите внимание на цикл SQL-запросов в AdminRoleMapper.xml при массовой обработке данных

  5. Эти интерфейсы также не были протестированы

  1. [Подготовка к управлению сотрудниками]
  1. Настройте плагин пагинации и добавьте общий объект возврата RespPageBean для пагинации
  2. Примените документационные аннотации Alibaba для объекта возврата RespPageBean
  3. Создайте глобальный класс DateConverter для конвертации дат, не забудьте добавить аннотацию @Component
  4. В классе Employee добавьте аннотацию @JsonFormat для форматирования времени, что удобно для передачи на фронтенд
  5. Необходимо добавить внешние ключи в POJO-классах и использовать аннотацию @TableField, так как соответствующие столбцы таблицы отсутствуют
  1. [Получение всех сотрудников с пагинацией]
  1. Установите значение по умолчанию с помощью аннотации @RequestParam(defaultValue = "1")
  2. При наличии нескольких параметров в методах интерфейсов DAO/MAPPER используйте аннотацию @Param
  3. В EmployeeMapper.xml продолжайте использовать функцию CONCAT() для соединения строк, а также проверяйте наличие полей с помощью IF
  4. Плагин пагинации IPage был разработан китайским разработчиком для реализации пагинации
  5. Основные настройки пагинации находятся здесь
  6. Глобальная конвертация дат была выполнена
  1. [Тестирование получения всех сотрудников с пагинацией]1) После завершения каждого интерфейса его обязательно следует протестировать, исправлять ошибки и улучшать качество.

  2. [Подготовка к добавлению сотрудника]

  1. В классе EmployeeServiceImpl используйте String.format для форматирования строки, чтобы избежать проблем с кодировкой.
  1. [Исправление проблемы 500 ошибки при получении номера рабочего места]
  1. Ошибка возникла из-за неверного написания max(workID) вместо max(workId).
  1. [Реализация функционала добавления сотрудника]
  1. Здесь требуется вычисление срока действия контракта.
  2. Выполните вычисление сроков действия контрактов с использованием встроенной Java-библиотеки LocalDate.
  1. [Обновление и удаление сотрудников]
  1. Используйте методы обновления и удаления, предоставляемые MyBatisPlus, чтобы быстро выполнить задачи.
  2. Интерфейсы для обновления и удаления были полностью протестированы.
  3. Операции с данными модуля сотрудников теперь завершены.
  4. Теперь можно приступить к реализации импорта и экспорта данных сотрудников.
  1. 【43. Использование аннотаций EasyPoi】1) Используйте инструмент EasyPoi для импорта и экспорта данных в Excel.
  1. В файле pom.xml добавьте зависимости EasyPoi; одной из его основных особенностей является возможность использования аннотаций для определения полей, которые вы хотите экспортировать.

  2. В полях соответствующих POJO-классов добавьте аннотацию @Excel от EasyPoi. Обратите внимание на использование аннотации @ExcelEntity.

  3. Классы следует пометить аннотацией @ExcelEntity, а затем использовать аннотацию @Excel для полей внутри объекта.44. 【44. Экспорт данных сотрудников】

  4. Обратите внимание на использование свойства produces в аннотации @GetMapping(value = "/export", produces = "application/octet-stream"), чтобы избежать проблем с кодировкой, как это было сделано для CAPTCHA.

  5. Экспортируемые данные отправляются потоковым образом.

  6. Для запроса информации о сотрудниках используется SQL-запрос из раздела [37. Получение всех сотрудников с пагинацией].

  7. Я протестировал экспорт и считаю это очень мощным решением.

  8. Дата увольнения и стаж работы не содержатся в базе данных, поэтому они не экспортируются.

  1. 【45. Импорт данных сотрудников】
  1. При импорте данных обратите внимание на поля "национальность", "политическое положение", "отдел", "звание" и "должность". Эти поля связаны с объектами, и в базе данных хранятся только их ID.
  2. Переопределите метод @EqualsAndHashCode.
  3. Аннотация для конструктора с параметрами должна быть добавлена, также рекомендуется добавить аннотацию для конструктора без параметров.
  4. При импорте данных поля "национальность", "политическое положение", "отдел", "звание" и "должность" должны быть преобразованы в соответствующие ID перед сохранением в базе данных.
  1. 【46. Тестирование импорта и экспорта данных сотрудников】1) Удаление строк в Excel может привести к ошибкам при импорте, когда строки будут считаться пустыми. Это стоит иметь в виду.
  1. Успешный импорт, но отсутствие данных в базе данных могут указывать на то, что все данные не были проверены или находятся на следующей странице. Этот опыт показывает.

  2. Аргумент ExcelType.HSSF указывает на использование версии Excel 2003, так как она обеспечивает лучшую совместимость.47. 【47. Создание проекта для отправки электронных сообщений】

  3. Отправка электронных сообщений требует активации SMTP-сервера для почты.

  4. Создайте новый подпроект yeb-mail, обновите файл pom.xml для добавления необходимых зависимостей, создайте запускающий класс.

  5. Подготовьте шаблоны электронных сообщений, используя Thymeleaf. Шаблоны должны быть расположены в директории templates в каталоге resources, такие как файл mail.html.

  6. Для использования Thymeleaf необходимо добавить заголовок <html lang="en" xmlns:th="http://www.thymeleaf.org"> в html-файле.

  7. Для безопасности авторизация для отправки электронных сообщений не была загружена. При использовании необходимо добавить ваш ключ авторизации в файл application.yml службы почты.

  1. [48. Реализация отправки почты]
  1. В подпроекте yeb-server в файле pom.xml необходимо добавить зависимость rabbitmq, так как требуется её использование.

  2. Кроме зависимости, также потребуется конфигурация rabbitmq в файле application.yml подпроекта yeb-server.

  3. Конфигурацию rabbitmq следует настроить с использованием вашего имени пользователя, пароля и адреса сервера.

  4. Здесь реализовано только отправка письма при добавлении сотрудника; импорт данных через Excel пока не реализован.

  5. Отправка сообщений осуществляется в подпроекте yeb-server, а получение сообщений и отправка электронной почты — в подпроекте yeb-mail.6) В запускающем классе проекта yeb-mail необходимо настроить привязку к rabbitmq, такие как очереди и обменники.

  6. В проекте yeb-mail была добавлена зависимость от yeb-server, что требует подключения к базе данных. Поэтому необходимо указать источник данных, убрав аннотацию @SpringBootApplication(exclude = {DataSourceAutoConfiguration.class}) в запускающем классе MailApplication.

  7. Обратите внимание, что вам необходимо настроить ваш авторизационный код почтового сервиса.

  1. [Добавление комментариев для понимания процесса отправки почты]
  1. Добавлены некоторые комментарии для объяснения процесса отправки электронной почты.
  1. [Описание надёжной доставки сообщений на стороне производителя]

  2. [Включение обратного вызова сообщений]

  1. Основная цель — обеспечить правильную отправку электронной почты.

  2. Необходим класс конфигурации RabbitMQConfig, использующий режим маршрутизации DirectExchange.

  3. Также следует настроить обратный вызов успешной доставки и обратный вызов ошибочной доставки в файле application.yml.

  4. Успешный и неудачный обратные вызовы должны быть правильно обработаны.

  1. [Надёжная доставка сообщений на стороне производителя]
  1. Создание задачи отправки электронной почты с расписанием.

  2. В запускающем классе добавьте аннотацию @EnableScheduling для включения задач с расписанием.3) Теперь сообщения будут записываться в базу данных.

  1. [53. Атомарность операций на стороне потребителя]
  1. Включите ручное подтверждение RabbitMQ.

  2. В файле application.yml проекта yeb-mail добавьте конфигурацию Redis.

  3. Измените местоположение отправки электронной почты; изменения довольно существенные.

  4. Сохраните данные в Redis при отправке электронной почты.

  5. Здесь важно понять этот процесс.

  1. [54. Модуль зарплаты сотрудников — реализация функции учета заработной платы]
  1. В полях класса POJO добавьте аннотацию @JsonFormat(pattern = "yyyy-MM-dd", timezone = "Asia/Shanghai"), чтобы форматировать время.

  2. Поскольку все пути запросов уже определены в базе данных, каждый раз при создании контроллеров необходимо указывать соответствующие пути @RequestMapping().

  3. Получение текущего времени выполняется с помощью LocalDateTime.now().

  4. Процесс добавления, удаления, изменения и выборки можно использовать методы, предоставляемые MyBatisPlus.

  1. [Получение всех схем зарплат сотрудников]
  1. Схема зарплат может рассматриваться как шаблон зарплаты.
  2. Для пагинационного запроса возвращается объект RespPageBean; здесь важно понять процесс пагинации.
  3. В методах контроллера используйте аннотацию @RequestParam для указания значений по умолчанию.
  1. [Реализация функционала схем зарплат сотрудников]1) Обратите внимание на обновление данных employeeService.update(new UpdateWrapper<Employee>().set("salaryId", sid).eq("id", eid))
  1. На уровне контроллера используйте аннотации @RestController и @RequestMapping("/salary/sobcfg")57. [Модуль онлайн-чат — конфигурация webSocket]

  2. Добавьте зависимости для работы с webSocket

  3. Создайте конфигурационный класс WebSocketConfig и примените к нему аннотации @Configuration и @EnableWebSocketMessageBroker, где @Configuration обязательна для конфигурационного класса

  4. Класс WebSocketConfig также должен реализовать интерфейс WebSocketMessageBrokerConfigurer

  5. В фронтенд части обычно используют sockJS для соединения с webSocket, а использование нативной реализации сейчас мало распространено

  1. [Конфигурация JWT для webSocket]
  1. При использовании JWT для входа требуется дополнительная конфигурация каналов отправки сообщений
  2. Примените аннотацию @Value("${jwt.tokenHead}") для получения значения из файла application.yml и привязки его к полю
  3. Создайте класс сообщений ChatMsg для хранения содержимого сообщений
  4. Обратите внимание на аннотацию @MessageMapping в методах контроллера
  5. Также потребуется конфигурирование доступа для webSocket
  1. [Объяснение процесса работы webSocket]
  1. Добавьте комментарии для лучшего понимания процесса работы webSocket

  2. Конфигурируйте конечную точку /ws/ep

  3. Установите токен Auth-Token

  4. Установите глобальный объект пользователя безопасности и вызов accessor.setUser(), чтобы обеспечить подключение

  5. Установите пространство имен registry.enableSimpleBroker("/queue"), которое может быть расширено по необходимости бизнеса

  6. Наконец, не забудьте открыть пути для отправки сообщений в классе SecurityConfig с помощью аннотации @MessageMapping("/ws/chat")60. [Модуль личного центра — реализация функционала личного центра]

  7. Реализованы основные операции личного центра, такие как обновление информации пользователя и замена аватара (используя FastDFS).

  8. Основные операции личного центра: обновление информации пользователя, обновление пароля.

  9. После изменения пароля пользователю требуется выйти из системы и войти снова; этот процесс обрабатывается на стороне клиента.

  1. Пользовательская десериализация

  2. При обновлении информации о залогиненном пользователе возникает проблема с JSON-преобразованием, связанная с некорректной передачей полей authorities. По умолчанию GrantedAuthority не может быть десериализован.

  3. Для решения этой проблемы необходимо создать пользовательский класс десериализации CustomAuthorityDeserializer.

  4. В местах, где требуется десериализация, следует использовать аннотацию @JsonDeserialize(using = CustomAuthorityDeserializer.class).

  5. Тестирование обновления информации о текущем пользователе и изменения пароля пользователя завершено.

  6. [Написание вспомогательных классов для FastDFS]1) Основной задачей является реализация функционала изменения аватара, поэтому важно убедиться, что сервис FastDFS запущен, то есть сначала следует установить FastDFS.

  1. FastDFS — это открытый легковесный распределённый файловый системный проект.

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

  3. Конфигурационный файл fdfs_client.conf включает в себя настройку IP-адреса вашего трекера и порта.

  4. Далее следует написать вспомогательные классы для FastDFS, содержащие различные методы операций, такие как загрузка и скачивание файлов.63. [63. Реализация функционала изменения аватара]

  5. Интерфейсы тестирования функционала изменения аватара завершены

  1. [64. Завершение основных функций серверной части]
  1. На этом этапе базовая функциональность серверной части проекта Yun E Ban завершена, далее будут добавлены необходимые функции по мере необходимости.
  2. Добавление руководства по использованию, например, указаний по запуску некоторых серверов, таких как redis, rabbitmq, fastdfs, nginx и т.д.
  3. Уважаемые коллеги, всего вам хорошего — мир!
  1. [65. Переключение интерфейса Swagger UI]
  1. Для сравнения оригинального интерфейса Swagger UI и стороннего интерфейса Swagger UI достаточно выполнить три простых шага.
  2. Обратитесь ко всему сайту за запросом "переключение интерфейса Swagger UI", затем следуйте инструкциям, отображенным после этого запроса (переключение интерфейса Swagger UI первый/второй/третий шаг), открыв соответствующие строки кода.
  3. Если первые два шага были успешно выполнены, третий шаг можно пропустить.
  1. [Добавление команд запуска служб redis, rabbitmq, fastdfs (tracker/storage), nginx]
  1. При выполнении следующих команд запуска необходимо сначала настроить ip адреса сервисов в конфигурационном файле application.yml и авторизационный код для отправки электронной почты новым сотрудникам, например для почтового сервера 163.1) Команда запуска Redis: ./redis-server redis.conf

  2. Проверка состояния запуска Redis: ps -ef | grep redis

  3. Команда запуска RabbitMQ: systemctl start rabbitmq-server.service

  4. Проверка состояния запуска RabbitMQ: systemctl status rabbitmq-server.service

  5. Команда запуска трекера FastDFS: /etc/init.d/fdfs_trackerd start (Если трекер настроен на автоматический запуск при старте системы, то данная команда не требуется)

  6. Команда запуска ноды хранения FastDFS: /etc/init.d/fdfs_storaged start (При условии, что трекер уже запущен, рекомендуется не использовать автоматический запуск данной службы)

  7. Проверка состояния запуска трекера и ноды хранения: ps aux | grep fdfs

  8. Команда запуска Nginx: /usr/local/nginx/sbin/nginx

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

  10. В местах, требующих изменений, были указаны IP-адреса с примечаниями 67. [Добавление процесса входа в систему в документацию Swagger]

  11. Вызовите метод /captcha контроллера CaptchaController, чтобы получить капчу

  12. Вызовите метод /login контроллера LoginController, передайте полученную капчу, имя пользователя admin и пароль 123. Получите возвращенный токен

  13. Найдите Authorize, добавьте полученный токен в значение параметра, добавьте слово Bearer перед токеном, разделите их пробелом и нажмите Сохранить68. [Пояснение запуска проекта]

  14. Клонируйте проект на локальную машину, откройте его в IDEA, создайте базу данных с именем yeb, выполните скрипт файла yeb.sql из папки database, настройте источник данных в файле pom.xml.

  15. Запустите основной класс YebApplication.java, откройте браузер и перейдите по адресу http://localhost:8081/doc.html, чтобы открыть API управления.

  16. Вызовите метод /captcha контроллера CaptchaController, чтобы получить капчу.

  17. Вызовите метод /login контроллера LoginController, передайте полученную капчу, имя пользователя admin и пароль 123. Получите возвращенный токен.

  18. Найдите Authorize, добавьте полученный токен в значение параметра, добавьте слово Bearer перед токеном, разделите их пробелом и нажмите Сохранить.

  19. Теперь вы можете нормально использовать остальные интерфейсы, иначе будет сообщено "Вы ещё не вошли в систему, пожалуйста, войдите!".

  1. [Изменение проекта]
  1. Измените содержание файла pom.xml родительского проекта.
  2. При создании подпроекта выберите Module -> Maven -> maven-archetype-quickstart.
  3. Включите сканирование пакетов слоев DAO/MAPPER при старте программы с помощью аннотации @MapperScan("com.xxxx.server.mapper").
  1. [Описание класса-инструмента Jwt Token]
  1. Основное содержание связано с генерацией и анализом токена.
  1. [Устранение проблемы графического кода CAPTCHA в контроллере CaptchaController]
  1. Устранили проблему преобразования must-revalidate в must-revalidate.#### Как сделать вклад
  1. Создайте форк этого репозитория
  2. Создайте новую ветку Feat_xxx
  3. Добавьте изменения
  4. Отправьте pull request

Примечания

  1. Для создания pull request используйте ветку Feat_xxx.
  2. Убедитесь, что ваш код проходит все тесты.
  3. Обратите внимание на правила оформления кода.

Особая благодарность

Особая благодарность следующим участникам:


Благодарность

Благодарю следующих участников:


Используйте Readme_XXX.md для поддержки различных языков, например Readme_en.md, Readme_zh.md
Официальный блог Gitee blog.gitee.com
Вы можете https://gitee.com/explore посетить этот адрес, чтобы узнать о лучших открытых проектах на Gitee
GVP расшифровывается как "Gitee Most Valuable Open Source Project", что означает лучшие открытые проекты, выбранные по совокупности критериев
Официальное руководство по использованию от Gitee https://gitee.com/help
Проект "Обложка Gitee" представляет собой рубрику, которая демонстрирует достижения членов сообщества Gitee https://gitee.com/gitee-stars/

Комментарии ( 0 )

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

Введение

Онлайн-система для малого и среднего бизнеса — облачное решение E (бэкенд). Развернуть Свернуть
Apache-2.0
Отмена

Обновления

Пока нет обновлений

Участники

все

Недавние действия

Загрузить больше
Больше нет результатов для загрузки
1
https://api.gitlife.ru/oschina-mirror/hmfdev-CloudOffice.git
git@api.gitlife.ru:oschina-mirror/hmfdev-CloudOffice.git
oschina-mirror
hmfdev-CloudOffice
hmfdev-CloudOffice
master