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

OSCHINA-MIRROR/lwydyby_admin-wwmxd-log

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

badge Maven Central License

Введение

При редактировании бизнес-контента, записывается информация о том, кто, когда и с какого IP-адреса внес изменения (включая исходное и измененное значения), сохраняется в базе данных (начиная с версии OnClickListener.3, ограничение на использование базы данных снято, теперь можно использовать любые пользовательские способы сохранения). С версии 1.1.0 проект перенесен на Spring Boot 2.0. Для использования версии 1.0 используйте 1.0.9.

Обновление 8 июня 2020: Удалены неправильные реализации кэширования, улучшена структура методов API, разделены методы получения новых и старых данных для удобства кэширования, удалены стандартные реализации кэширования, рекомендуется реализовать собственное кэширование.

Обновление 20 января 2020: Удалены зависимости от FastJSON, уменьшено количество лишних зависимостей, добавлено стандартное кэширование для предотвращения необходимости обращения к базе данных при каждом запросе. Если требуется кэширование, рекомендуется использовать стандартное кэширование как пример для реализации собственного парсера и включения собственного кэширования. Обновление 19 января 2020: Решены проблемы с параллельным доступом, проект перенесен на GitHub (будет обновляться и на Gitee), используется GitHub Actions для автоматической загрузки в официальный Maven репозиторий.

Обновление 12 декабря 2019: Улучшена структура хранения информации в объекте operateLog, улучшена возможность настройки пользовательского logService, добавлены примеры кода для упрощения использования.

Обновление 2 июля 2019: В связи с тем, что некоторые пользователи спрашивали, как использовать проект, добавлена функция автоматической загрузки через starter, теперь можно использовать проект, добавив зависимость в pom.

GitHub адрес: https://github.com/lwydyby/wwmxd-log

 <dependency>
  <groupId>com.gitee.lwydyby</groupId>
  <artifactId>wwmxd-log</artifactId>
  <version>${latest.version}</version>
</dependency>
```### Требования
 - Maven
 - JDK 1. 8
 - Spring Boot 2. 1. 5 RELEASE

### Использование
 1. Используйте аннотацию `@EnableModifyLog` на методах, где требуется запись. Параметры аннотации следующие:
    ```java
    @Documented
    @Retention(RetentionPolicy.RUNTIME)
    @Target({ElementType.METHOD})
    public @interface EnableModifyLog {
        /**
         * @return Описание операции на русском языке. Можно использовать ModifyName.
         */
        ModifyName modifyType() default ModifyName.UPDATE;
        /**
         * @return Класс для парсинга данных. По умолчанию используется DefaultContentParse.
         */
        Class parseclass() default DefaultContentParse.class;
        /**
         * @return Класс сервиса для выполнения запроса к базе данных.
         */
        Class serviceclass() default IService.class;
        /**
         * @return Имя конкретной бизнес-операции.
         */
        String handleName() default "";
        /**
         * @return Необходимость использования стандартного сравнения изменений.
         */
        boolean needDefaultCompare() default false;
        /**
         * @return Тип идентификатора.
         */
        Class idType() default String.class;
        /**
         * @return Использование стандартного кэша.
         */
        boolean defaultCache() default false;
    }
    ```
 Пример простого использования:
    ```java
    @EnableModifyLog(modifyType = ModifyName.SAVE, serviceclass = DemoService.class)
    public BaseResponse addDemo(@RequestBody Demo demo) {
        // . . .
    }
    ```
 2. Создайте класс для парсинга данных. По умолчанию используется `DefaultContentParse`, который использует идентификатор для запроса. Для создания собственного парсера, наследуйте интерфейс `ContentParser` и укажите его в аннотации.
    ```java
    /**
     * Базовый класс для парсинга данных.
     */```markdown
    * Для одиночных таблиц можно использовать идентификатор для запроса.
     * Для сложных запросов к нескольким таблицам создайте собственные классы.
     * @author zk
     * @date 2018-03-02
     */
    public class DefaultContentParse implements ContentParser {
        @Override
        public Object getOldResult(JoinPoint joinPoint, EnableModifyLog enableModifyLog) {
            Object info = joinPoint.getArgs()[0];
            Object id = ReflectionUtils.getFieldValue(info, "id");
            Assert.notNull(id, "Не удалось получить идентификатор. Проверьте переданные параметры.");
            Class idType = enableModifyLog.idType();
            if (idType.isInstance(id)) {
                Class cls = enableModifyLog.serviceclass();
                IService service = (IService) SpringUtil.getBean(cls);
                Object result = service.selectById((S) idType.cast(id));
                return result;
            } else {
                throw new RuntimeException("Проверьте тип id");
            }
        }
        @Override
        public Object getNewResult(JoinPoint joinPoint, EnableModifyLog enableModifyLog) {
            return getOldResult(joinPoint, enableModifyLog);
        }
    }
3. Реализация пользовательского метода запроса для интерфейса IService (не ограничивается только прямым запросом к базе данных, если учитывать нагрузку на производительность, можно использовать кэш)
```java
public interface IService<T, S> {
    T selectById(S id);
}
```4. Реализация интерфейса OperatelogService по требованию (можно использовать JPA или MyBatis)

```java
public interface OperatelogService {
    void insert(Operatelog operatelog);
}
  1. По умолчанию доступны следующие методы:
public enum ModifyName {
   SAVE, UPDATE, DELETE, GET;
}
  1. Если необходимо записывать операции на китайском языке, используйте аннотацию DataName в классе entity Например:
@DataName(name="Дата операции")
private String modifydate;
  1. Сохранение информации пользователя в BaseContextHandler (если необходимо записывать пользователя, который выполняет операцию, добавьте его в интерцептор)

Схема

Схема

SQL-запросы для создания таблиц

Для справки, можно использовать свои запросы

DROP TABLE IF EXISTS `operatelog`;
CREATE TABLE `operatelog`  (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `username` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT 'Пользователь',
  `modifydate` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT 'Дата операции',
  `modifyname` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT 'Название операции',
  `modifyobject` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT 'Объект операции',
  `modifycontent` varchar(3000) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT 'Содержание операции',
  `modifyip` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT 'IP',
  PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = Dynamic;

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

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

Введение

Используя AOP, при изменении бизнес-информации записывайте, кто, когда и с какого IP-адреса внёс изменения в какое поле (включая исходное значение и изменённое значение). Развернуть Свернуть
Java
Apache-2.0
Отмена

Обновления

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

Участники

все

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

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