Целью данного проекта является создание онлайн-системы для управления офисной работой для малых и средних предприятий. Система CloudOffice предназначена для упрощения и оптимизации процессов, связанных с повседневной офисной деятельностью, таких как управление различными рабочими процессами, новостями, уведомлениями, объявлениями, файловой информацией, финансами, кадрами, расходами, активами, административными задачами, проектами и мобильной работой.
Система CloudOffice призвана повысить эффективность и стандартизацию управления, обеспечивая более удобное и простое решение для офисных задач.
Описание архитектуры программного обеспечения.
Инициализация на локальном компьютере
Подготовка проекта
Создание проекта
Обратное проектирование (создание резервной копии всех таблиц базы данных перед обратным проектированием)
Обратное проектирование (генерация кода для всех таблиц базы данных)
Разработка инструмента класса Jwt Token
Общий объект ответа
Получение токена после успешной аутентификации
Информация о текущем пользователе и выход из системы
Настройка фильтра безопасности для авторизации
Пользовательские результаты безопасности
Конфигурация Swagger2
Добавление авторизации в Swagger2
Генерация проверочных кодов
Проверка проверочного кода
Запрос списка меню на основе идентификатора пользователя
SQL-запросы для получения списка меню по идентификатору пользователя
Интеграция Redis с функцией меню
Определение роли на основе URL-запроса
Идентификация роли пользователя
Реализация функций управления должностями — добавление, изменение, удаление и запрос информации о должностях
Для преобразования массива в список используется метод Arrays.asList().
6)Использование методов MyBatisPlus для добавления, изменения и удаления данных:
Методы MyBatisPlus позволяют выполнять операции добавления, изменения и удаления данных без необходимости модификации service и mapper слоёв.
22. Глобальная обработка исключений:
Используется аннотация @RestControllerAdvice для создания класса-расширения контроллеров, который будет перехватывать исключения.
23. Реализация функции управления званиями:
Для работы с датами используются аннотации @JsonFormat с параметрами pattern и timezone.
Массив преобразуется в список с помощью метода Arrays.asList() и оператора asList().
Поле titleLevel в таблице t_joblevel имеет фиксированное значение, что следует учитывать.
Рекомендуется использовать тип перечисления Enum для полей с фиксированными значениями.
24. Реализация функций управления правами доступа:
Изменён RequestMapping в MenuController на «system/config».
Метод list() из MyBatisPlus используется для получения всех данных таблицы через roleService.list().
Метод save() из MyBatisPlus применяется для добавления данных через roleService.save().
Метод removeById() из MyBatisPlus удаляет данные по идентификатору через roleService.removeById().
25. Реализация функции поиска меню по правам доступа:
Обратить внимание на написание resultMap в файле MenuMapper.xml.
В методе (согласно роли id поиск меню id) используется код: menuRoleService.list(new QueryWrapper().eq("rid", rid)).stream().map(MenuRole::getMid).collect(Collectors.toList());.
26. Реализация функции обновления и удаления меню с учётом прав доступа:
При обновлении и удалении данных добавляется аннотация @Transactional для обеспечения транзакционности.
Параметр dao слоя использует аннотацию @Param из пакета org.apache.ibatis.annotations.Param.
27. Введение в хранимые процедуры:
Хранимые процедуры представляют собой набор SQL-инструкций, которые хранятся в базе данных и могут быть вызваны для выполнения определённых задач.
28. Создание и вызов хранимых процедур:
Процесс создания и вызова хранимых процедур включает определение структуры процедуры, написание кода и выполнение процедуры.
29. Объяснение проекта с использованием хранимых процедур:
В данном контексте не предоставляется конкретная информация о проекте, использующем хранимые процедуры.
30. Получение всех отделов:
Используются SQL-запросы с рекурсивным запросом для получения информации обо всех отделах.
31. Добавление отдела:
При добавлении отдела используется хранимая процедура, поэтому в файле xxxMapper.xml вместо тега используется тег .
32. Удаление отдела:
Операция удаления отдела выполняется с использованием хранимой процедуры. Все интерфейсы для работы с отделами реализованы.
33. Получение всех операторов:
Создаётся класс AdminUtils для получения информации о текущем пользователе, включая его идентификатор. Параметры метода в слое dao/mapper используют аннотацию @Param. В SQL-запросах используется функция concat() для объединения строк.
34. Обновление и удаление операторов:
Обновление данных осуществляется с помощью метода updateById() из MyBatisPlus. Используется аннотация @Data с параметром AccessLevel.NONE для предотвращения генерации геттеров для определённого поля. Интерфейсы для обновления и удаления операторов не были протестированы.
35. Управление ролями операторов:
Реализуется массовое обновление данных операторов с использованием AdminRolMapper.xml и SQL-запросов с циклами. Интерфейсы также не были протестированы.
36. Подготовка к управлению сотрудниками:
Конфигурируется плагин разбиения на страницы, создаётся общий объект RespPageBean для возврата результатов. Создаётся инструмент DateConverter для глобального преобразования дат. В классе Employee используется аннотация @JsonFormat для форматирования дат при возврате данных.
37. Разбиение на страницы и получение всех сотрудников:
Устанавливается значение по умолчанию для параметра запроса с помощью аннотации @RequestParam(defaultValue = "1"). Методы слоя dao/mapper с несколькими параметрами используют аннотацию @Param. SQL-запрос использует функцию concat(). Используется плагин MyBatisPlus IPage для разбиения на страницы.
38. Тестирование разбиения на страницы для получения сотрудников:
После завершения каждого интерфейса проводится тестирование для выявления и устранения проблем.
39. Подготовка перед добавлением сотрудника:
В классе EmployeeServiceImpl используется String.format для предотвращения проблем с кодировкой.
40. Устранение ошибки 500 при получении номера сотрудника:
Ошибка была вызвана опечаткой в имени столбца. Вместо max(workID) было написано max(workId).
41. Реализация добавления сотрудника:
Включает расчёт срока контракта с использованием класса LocalDate.
42. Обновление и удаление сотрудников:
Применяются методы MyBatisPlus для обновления и удаления данных. Оба интерфейса были протестированы. Модуль управления сотрудниками практически завершён.
43. Использование аннотаций EasyPoi:
EasyPoi используется для импорта и экспорта данных Excel. Зависимость easy poi добавляется в файл pom.xml. Аннотации @Excel и @ExcelEntity используются для определения полей, которые будут экспортироваться.
44. Экспорт данных сотрудников:
Применяется аннотация @GetMapping(value = "/export", produces = "application/octet-stream") для экспорта данных. Данные возвращаются в виде потока. Используются ранее созданные SQL-запросы.
45. Импорт данных сотрудников:
Поля, связанные с национальностью, политической принадлежностью, отделом, званием и должностью, требуют особого внимания при импорте, так как они связаны с объектами и их значения сохраняются в виде идентификаторов в базе данных.
46. Тестирование импорта и экспорта сотрудников:
Рекомендуется проверить результаты импорта после удаления строк в Excel. Если данные не отображаются после успешного импорта, необходимо проверить, все ли данные были импортированы или они находятся на следующей странице.
47. Создание проекта службы электронной почты:
Необходимо настроить SMTP-сервер для отправки электронных писем. Новый проект yeb-mail создаётся с использованием файла pom.xml для управления зависимостями и запуска класса. Шаблоны электронных писем создаются с использованием thymeleaf.
48. Реализация отправки электронной почты:
Зависимости rabbitmq добавляются в файл pom.xml проекта yeb-server. Конфигурация rabbitmq также требуется в файле application.yml. 7. В YEB-Mail мы ввели зависимость от YEB-Server, и для подключения к базе данных нам нужно настроить источник данных. Чтобы исключить конфигурацию DataSourceAutoConfiguration.class в классе запуска MailApplication, мы используем аннотацию @SpringBootApplication.
Добавление комментариев для понимания процесса отправки электронных писем.
Введение в надёжную систему доставки сообщений на производстве.
Включение механизма обратного вызова сообщений.
— Основной целью является обеспечение успешной отправки электронных писем. — Требуется класс конфигурации RabbitMQConfig с использованием режима маршрутизации DirectExchange. — В application.yml настраиваются обратные вызовы подтверждения и сбоя сообщений. — Обратные вызовы подтверждения и сбоя обрабатываются соответствующим образом.
— Создаётся задача по отправке электронных писем по расписанию. — Класс запуска @EnableScheduling используется для активации задачи по расписанию. — После этого сообщения будут сохранены в базе данных.
— RabbitMQ активирует механизм ручного подтверждения. — Конфигурация Redis добавляется в файл yeb-mail.application.yml. — Место отправки электронных писем требует значительных изменений. — Информация хранится в Redis. Здесь требуется глубокое понимание процесса.
— Поля классов POJO снабжены аннотациями @JsonFormat(pattern = "yyyy-MM-dd", timezone = "Asia/Shanghai") для форматирования времени. — Поскольку адреса запросов определены в базе данных, каждый раз при написании контроллера необходимо указывать соответствующий путь @RequestMapping(). — Для получения текущего времени используется LocalDateTime.now(). — Здесь можно изучить процесс добавления, удаления и изменения данных, который полностью использует методы, предоставляемые MyBatisPlus.
— Зарплатная ведомость фактически представляет собой шаблон заработной платы. — Разбиение на страницы возвращает RespPageBean, и здесь необходимо понять процесс разбиения на страницы. — Аннотация @RequestParam используется в методе параметров контроллера для указания значений по умолчанию.
— Следует обратить внимание на оператор обновления employeeService.update(new UpdateWrapper().set("salaryId", sid).eq("id", eid)). — Классу контроллера требуются аннотации @RestController и @RequestMapping("/salary/sobcfg").
— Добавляются необходимые зависимости для WebSocket. — Новый класс конфигурации WebSocketConfig снабжается аннотациями @Configuratioin и @EnableWebSocketMessageBroker, где @Configuration является обязательной аннотацией для класса конфигурации. — Классу конфигурации WebSocket также необходимо реализовать интерфейс WebSocketMessageBrokerConfigurer. — Обычно для соединения с WebSocket используется sockJs.
— Используется аутентификация JWT. Здесь также требуется дополнительная настройка, то есть настройка входного канала. — Используя аннотацию @Value("${jwt.tokenHead}"), можно получить значение, настроенное в файле application.yml, и связать его с переменной поля. — Создается новый класс сообщений ChatMsg для хранения отправляемых сообщений. — Обратите внимание на аннотацию @MessageMapping в методах контроллера. — Также необходимо настроить маршрутизацию для WebSocket.
— Добавлены комментарии для облегчения понимания процесса WebSocket. — Настроен конечная точка /ws/ep. — Установлен токен Auth-Token. — Доступ к глобальному объекту пользователя Security и accessor.setUser() необходим для успешного подключения. — Настройка прокси-домена registry.enableSimpleBroker("/queue") может быть адаптирована к различным потребностям бизнеса. — Наконец, не забудьте разрешить отправку сообщений в SecurityConfig, используя аннотацию @MessageMapping("/ws/chat") для пути запроса.
— Реализованные функции включают в себя обычные операции личного центра, обновление аватара (с использованием FastDFS). — Обычные операции для личного центра включают обновление информации о пользователе и обновление пароля. — После обновления пароля пользователь принудительно выходит из системы и должен снова войти в систему. Этот процесс обрабатывается на передней панели.
— При обновлении информации о текущем пользователе возникает проблема с преобразованием JSON, особенно с полем GrantedAuthority, которое не может быть десериализовано по умолчанию. — Необходимо создать собственный класс десериализации CustomAuthorityDeserializer. — Используйте аннотацию @JsonDeserialize(using = CustomAuthorityDeserializer.class) в местах, где требуется десериализация. — Завершите тестирование интерфейса обновления информации о текущем пользователе и пароле.
— Основное внимание уделяется реализации функции обновления аватара, которая требует, чтобы служба FastDFS была запущена заранее. — FastDFS — это лёгкая распределённая файловая система с открытым исходным кодом. — Сначала настройте файл конфигурации fdfs_client.conf, обратите внимание на расширение .conf. — Файл конфигурации fdfs_client.conf в основном используется для настройки IP-адреса и номера порта вашего трекера. — Затем создайте инструментальный класс для FastDFS, содержащий различные операции, такие как загрузка и скачивание файлов.
— Функции обновления аватара завершены.
— Проект E-Office на основе облачных вычислений достиг базового уровня функциональности серверной части. Дополнительные функции могут быть добавлены в соответствии с требованиями. — Добавьте инструкции по использованию, включая необходимость запуска серверов, таких как redis, rabbitmq, fastdfs, nginx и т.д. — Таким образом, проект завершается.
— Нужно сравнить исходный интерфейс SwaggerUI и интерфейс третьей стороны SwaggerUI. Всего три шага, чтобы легко переключаться между ними. — Глобальный поиск «переключение интерфейса SwaggerUI», следуйте инструкциям на следующих шагах, чтобы раскомментировать их. — Если первые два шага успешно выполнены, третий шаг можно пропустить.
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Комментарии ( 0 )