diff --git a/aioj-backend-common/aioj-backend-common-log/src/main/java/cn/meowrain/aioj/backend/framework/log/LogAutoConfiguration.java b/aioj-backend-common/aioj-backend-common-log/src/main/java/cn/meowrain/aioj/backend/framework/log/LogAutoConfiguration.java new file mode 100644 index 0000000..0c53bf4 --- /dev/null +++ b/aioj-backend-common/aioj-backend-common-log/src/main/java/cn/meowrain/aioj/backend/framework/log/LogAutoConfiguration.java @@ -0,0 +1,32 @@ +package cn.meowrain.aioj.backend.framework.log; + +import cn.meowrain.aioj.backend.framework.log.aspect.SysLogAspect; +import cn.meowrain.aioj.backend.framework.log.config.AIOJLogPropertiesConfiguration; +import cn.meowrain.aioj.backend.framework.log.event.SysLogListener; +import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; +import org.springframework.boot.context.properties.EnableConfigurationProperties; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.scheduling.annotation.EnableAsync; + +@EnableAsync +@Configuration(proxyBeanMethods = false) +@EnableConfigurationProperties(AIOJLogPropertiesConfiguration.class) +@ConditionalOnProperty(value = "aioj.log.enabled", matchIfMissing = true) +public class LogAutoConfiguration { + /** + * 创建并返回SysLogListener的Bean实例 + */ + @Bean + public SysLogListener sysLogListener(AIOJLogPropertiesConfiguration logProperties, RemoteLogService remoteLogService) { + return new SysLogListener(remoteLogService, logProperties); + } + /** + * 返回切面类实例 + * @return {@link SysLogAspect} + */ + @Bean + public SysLogAspect sysLogAspect() { + return new SysLogAspect(); + } +} diff --git a/aioj-backend-common/aioj-backend-common-log/src/main/java/cn/meowrain/aioj/backend/framework/log/config/AIOJLogPropertiesConfiguration.java b/aioj-backend-common/aioj-backend-common-log/src/main/java/cn/meowrain/aioj/backend/framework/log/config/AIOJLogPropertiesConfiguration.java new file mode 100644 index 0000000..d026916 --- /dev/null +++ b/aioj-backend-common/aioj-backend-common-log/src/main/java/cn/meowrain/aioj/backend/framework/log/config/AIOJLogPropertiesConfiguration.java @@ -0,0 +1,21 @@ +package cn.meowrain.aioj.backend.framework.log.config; + +import lombok.Getter; +import lombok.Setter; +import org.springframework.boot.context.properties.ConfigurationProperties; + +@Getter +@Setter +@ConfigurationProperties(AIOJLogPropertiesConfiguration.PREFIX) +public class AIOJLogPropertiesConfiguration { + public static final String PREFIX = "aioj.log"; + /** + * 开启日志记录 + */ + private boolean enabled = true; + + /** + * 请求报文最大存储长度 + */ + private Integer maxLength = 20000; +} diff --git a/aioj-backend-common/aioj-backend-common-log/src/main/java/cn/meowrain/aioj/backend/framework/log/entity/SysLog.java b/aioj-backend-common/aioj-backend-common-log/src/main/java/cn/meowrain/aioj/backend/framework/log/entity/SysLog.java new file mode 100644 index 0000000..7b560ec --- /dev/null +++ b/aioj-backend-common/aioj-backend-common-log/src/main/java/cn/meowrain/aioj/backend/framework/log/entity/SysLog.java @@ -0,0 +1,92 @@ +package cn.meowrain.aioj.backend.framework.log.entity; + +import lombok.Data; + +import java.io.Serial; +import java.io.Serializable; +import java.time.LocalDateTime; + +/** + * 日志对象 + */ +@Data +public class SysLog implements Serializable { + + @Serial + private static final long serialVersionUID = 1L; + + /** + * 编号 + */ + private Long id; + + /** + * 日志类型 + */ + private String logType; + + /** + * 日志标题 + */ + private String title; + + /** + * 创建者 + */ + private String createBy; + + /** + * 创建时间 + */ + private LocalDateTime createTime; + + /** + * 更新时间 + */ + private LocalDateTime updateTime; + + /** + * 操作IP地址 + */ + private String remoteAddr; + + /** + * 用户代理 + */ + private String userAgent; + + /** + * 请求URI + */ + private String requestUri; + + /** + * 操作方式 + */ + private String method; + + /** + * 操作提交的数据 + */ + private String params; + + /** + * 执行时间 + */ + private Long time; + + /** + * 异常信息 + */ + private String exception; + + /** + * 服务ID + */ + private String serviceId; + + /** + * 删除标记 + */ + private String delFlag; +} diff --git a/aioj-backend-common/aioj-backend-common-log/src/main/java/cn/meowrain/aioj/backend/framework/log/enums/LogTypeEnum.java b/aioj-backend-common/aioj-backend-common-log/src/main/java/cn/meowrain/aioj/backend/framework/log/enums/LogTypeEnum.java new file mode 100644 index 0000000..fd50f96 --- /dev/null +++ b/aioj-backend-common/aioj-backend-common-log/src/main/java/cn/meowrain/aioj/backend/framework/log/enums/LogTypeEnum.java @@ -0,0 +1,33 @@ +package cn.meowrain.aioj.backend.framework.log.enums; + +import lombok.Getter; +import lombok.RequiredArgsConstructor; + +/** + * 日志类型枚举 + */ +@Getter +@RequiredArgsConstructor +public enum LogTypeEnum { + + /** + * 正常日志类型 + */ + NORMAL("0", "正常日志"), + + /** + * 错误日志类型 + */ + ERROR("9", "错误日志"); + + /** + * 类型 + */ + private final String type; + + /** + * 描述 + */ + private final String description; + +} diff --git a/aioj-backend-common/aioj-backend-common-log/src/main/java/cn/meowrain/aioj/backend/framework/log/event/SysLogEvent.java b/aioj-backend-common/aioj-backend-common-log/src/main/java/cn/meowrain/aioj/backend/framework/log/event/SysLogEvent.java new file mode 100644 index 0000000..709e246 --- /dev/null +++ b/aioj-backend-common/aioj-backend-common-log/src/main/java/cn/meowrain/aioj/backend/framework/log/event/SysLogEvent.java @@ -0,0 +1,20 @@ +package cn.meowrain.aioj.backend.framework.log.event; + +import cn.meowrain.aioj.backend.framework.log.annotation.SysLog; +import org.springframework.context.ApplicationEvent; + +import java.io.Serial; + +/** + * 系统日志事件类 + */ +public class SysLogEvent extends ApplicationEvent { + @Serial + private static final long serialVersionUID = 1L; + /** + * 构造方法,根据源SysLog对象创建SysLogEvent + */ + public SysLogEvent(SysLog source) { + super(source); + } +} diff --git a/aioj-backend-common/aioj-backend-common-log/src/main/java/cn/meowrain/aioj/backend/framework/log/event/SysLogEventSource.java b/aioj-backend-common/aioj-backend-common-log/src/main/java/cn/meowrain/aioj/backend/framework/log/event/SysLogEventSource.java new file mode 100644 index 0000000..1323c57 --- /dev/null +++ b/aioj-backend-common/aioj-backend-common-log/src/main/java/cn/meowrain/aioj/backend/framework/log/event/SysLogEventSource.java @@ -0,0 +1,24 @@ +package cn.meowrain.aioj.backend.framework.log.event; + +import lombok.Data; +import lombok.EqualsAndHashCode; + +import java.io.Serial; +import java.io.Serializable; + +/** + * 系统 + */ +@Data +@EqualsAndHashCode(callSuper = false) +public class SysLogEventSource extends SysLogEvent implements Serializable { + + @Serial + private static final long serialVersionUID = 1L; + + /** + * 参数重写成object + */ + private Object body; + +} diff --git a/aioj-backend-common/aioj-backend-common-log/src/main/java/cn/meowrain/aioj/backend/framework/log/event/SysLogListener.java b/aioj-backend-common/aioj-backend-common-log/src/main/java/cn/meowrain/aioj/backend/framework/log/event/SysLogListener.java new file mode 100644 index 0000000..cca750c --- /dev/null +++ b/aioj-backend-common/aioj-backend-common-log/src/main/java/cn/meowrain/aioj/backend/framework/log/event/SysLogListener.java @@ -0,0 +1,36 @@ +package cn.meowrain.aioj.backend.framework.log.event; + +import cn.meowrain.aioj.backend.framework.log.config.AIOJLogPropertiesConfiguration; +import cn.meowrain.aioj.backend.framework.log.entity.SysLog; +import com.fasterxml.jackson.databind.ObjectMapper; +import lombok.RequiredArgsConstructor; +import lombok.SneakyThrows; +import org.springframework.beans.BeanUtils; +import org.springframework.beans.factory.InitializingBean; +import org.springframework.context.event.EventListener; +import org.springframework.core.annotation.Order; +import org.springframework.scheduling.annotation.Async; + +@RequiredArgsConstructor +public class SysLogListener implements InitializingBean { + private final static ObjectMapper objectMapper = new ObjectMapper(); + + private final RemoteLogService remoteLogService; + + private final AIOJLogPropertiesConfiguration logProperties; + + @SneakyThrows + @Async + @Order + @EventListener(SysLogEvent.class) + public void saveLog(SysLogEvent sysLogEvent){ + SysLogEventSource source = (SysLogEventSource) sysLogEvent.getSource(); + SysLog sysLog = new SysLog(); + BeanUtils.copyProperties(source, sysLog); + + } + @Override + public void afterPropertiesSet() throws Exception { + + } +} diff --git a/aioj-backend-common/aioj-backend-common-log/src/main/java/cn/meowrain/aioj/backend/framework/log/init/ApplicationLoggerInitializer.java b/aioj-backend-common/aioj-backend-common-log/src/main/java/cn/meowrain/aioj/backend/framework/log/init/ApplicationLoggerInitializer.java new file mode 100644 index 0000000..96f00ad --- /dev/null +++ b/aioj-backend-common/aioj-backend-common-log/src/main/java/cn/meowrain/aioj/backend/framework/log/init/ApplicationLoggerInitializer.java @@ -0,0 +1,18 @@ +package cn.meowrain.aioj.backend.framework.log.init; + +import org.springframework.boot.SpringApplication; +import org.springframework.boot.env.EnvironmentPostProcessor; +import org.springframework.core.Ordered; +import org.springframework.core.env.ConfigurableEnvironment; + +public class ApplicationLoggerInitializer implements EnvironmentPostProcessor, Ordered { + @Override + public void postProcessEnvironment(ConfigurableEnvironment environment, SpringApplication application) { + + } + + @Override + public int getOrder() { + return Ordered.LOWEST_PRECEDENCE; + } +} diff --git a/aioj-backend-common/aioj-backend-common-log/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports b/aioj-backend-common/aioj-backend-common-log/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports new file mode 100644 index 0000000..f1b033e --- /dev/null +++ b/aioj-backend-common/aioj-backend-common-log/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports @@ -0,0 +1 @@ +cn.meowrain.aioj.backend.framework.log.LogAutoConfiguration \ No newline at end of file diff --git a/aioj-backend-common/aioj-backend-common-mybatis/src/main/java/cn/meowrain/backend/common/mybaits/base/BaseEntity.java b/aioj-backend-common/aioj-backend-common-mybatis/src/main/java/cn/meowrain/backend/common/mybaits/base/BaseEntity.java new file mode 100644 index 0000000..f4370bc --- /dev/null +++ b/aioj-backend-common/aioj-backend-common-mybatis/src/main/java/cn/meowrain/backend/common/mybaits/base/BaseEntity.java @@ -0,0 +1,48 @@ +package cn.meowrain.backend.common.mybaits.base; + +import com.baomidou.mybatisplus.annotation.FieldFill; +import com.baomidou.mybatisplus.annotation.TableField; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Getter; +import lombok.Setter; + +import java.io.Serial; +import java.io.Serializable; +import java.time.LocalDateTime; + +/** + * 基础实体抽象类,包含通用实体字段 + */ +@Getter +@Setter +public class BaseEntity implements Serializable { + @Serial + private static final long serialVersionUID = 1L; + /** + * 创建者 + */ + @Schema(description = "创建人") + @TableField(fill = FieldFill.INSERT) + private String createBy; + + /** + * 创建时间 + */ + @Schema(description = "创建时间") + @TableField(fill = FieldFill.INSERT) + private LocalDateTime createTime; + + /** + * 更新者 + */ + @Schema(description = "更新人") + @TableField(fill = FieldFill.INSERT_UPDATE) + private String updateBy; + + /** + * 更新时间 + */ + @Schema(description = "更新时间") + @TableField(fill = FieldFill.INSERT_UPDATE) + private LocalDateTime updateTime; +} diff --git a/aioj-backend-common/aioj-backend-common-mybatis/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports b/aioj-backend-common/aioj-backend-common-mybatis/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports new file mode 100644 index 0000000..f1783c2 --- /dev/null +++ b/aioj-backend-common/aioj-backend-common-mybatis/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports @@ -0,0 +1 @@ +com.pig4cloud.pig.common.mybatis.MybatisAutoConfiguration diff --git a/aioj-backend-upms/aioj-backend-upms-api/src/main/java/cn/meowrain/aioj/backend/upms/api/dto/SysLogDTO.java b/aioj-backend-upms/aioj-backend-upms-api/src/main/java/cn/meowrain/aioj/backend/upms/api/dto/SysLogDTO.java new file mode 100644 index 0000000..4d3fe53 --- /dev/null +++ b/aioj-backend-upms/aioj-backend-upms-api/src/main/java/cn/meowrain/aioj/backend/upms/api/dto/SysLogDTO.java @@ -0,0 +1,83 @@ +package cn.meowrain.aioj.backend.upms.api.dto; + +import lombok.Data; + +import java.time.LocalDateTime; + +@Data +@Schema(description = "日志查询对象") +public class SysLogDTO { + + /** + * 编号 + */ + private Long id; + + /** + * 日志类型 + */ + @NotBlank(message = "日志类型不能为空") + private String logType; + + /** + * 日志标题 + */ + @NotBlank(message = "日志标题不能为空") + private String title; + + /** + * 创建者 + */ + private String createBy; + + /** + * 更新时间 + */ + private LocalDateTime updateTime; + + /** + * 操作IP地址 + */ + private String remoteAddr; + + /** + * 用户代理 + */ + private String userAgent; + + /** + * 请求URI + */ + private String requestUri; + + /** + * 操作方式 + */ + private String method; + + /** + * 操作提交的数据 + */ + private String params; + + /** + * 执行时间 + */ + private Long time; + + /** + * 异常信息 + */ + private String exception; + + /** + * 服务ID + */ + private String serviceId; + + /** + * 创建时间区间 [开始时间,结束时间] + */ + private LocalDateTime[] createTime; + +}