package com.yunhai.userbase.entity; import lombok.Data; import lombok.EqualsAndHashCode; import lombok.NoArgsConstructor; import javax.persistence.Column; import javax.persistence.Entity; import javax.persistence.GeneratedValue; import javax.persistence.GenerationType; import javax.persistence.Id; import javax.persistence.Index; import javax.persistence.Table; import java.io.Serializable; import java.time.LocalDateTime; import org.hibernate.annotations.CreationTimestamp; /** * 系统操作日志实体。
* 记录用户的关键操作(增删改查),便于审计与问题排查。
* * @author chenx * @date 2026/7/28 */ @NoArgsConstructor @Data @Entity @Table(name = "sys_operation_log", indexes = { @Index(name = "idx_create_time", columnList = "create_time"), @Index(name = "idx_user_time", columnList = "user_id, create_time"), @Index(name = "idx_uri_time", columnList = "request_uri, create_time"), @Index(name = "idx_level_time", columnList = "log_level, create_time"), @Index(name = "idx_ip_time", columnList = "request_ip, create_time") }) @EqualsAndHashCode(onlyExplicitlyIncluded = true, callSuper = false) public class SysOperationLog implements Serializable { private static final long serialVersionUID = 1L; /** * 主键 */ @EqualsAndHashCode.Include @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; /** * 日志级别:1-重要(删除) 2-次要(新增/编辑) 3-一般(查询) */ @Column(name = "log_level", nullable = false, columnDefinition = "TINYINT") private Integer logLevel; /** * 操作用户ID */ @Column(name = "user_id", nullable = false) private Long userId; /** * 操作用户名 */ @Column(name = "username", nullable = false, length = 64) private String username; /** * 请求IP */ @Column(name = "request_ip", nullable = false, length = 64) private String requestIp; /** * 请求路径 */ @Column(name = "request_uri", nullable = false, length = 512) private String requestUri; /** * 请求方法 GET/POST/PUT/DELETE */ @Column(name = "request_method", nullable = false, length = 16) private String requestMethod; /** * 操作类型 DELETE/CREATE/UPDATE/QUERY */ @Column(name = "operation_type", nullable = false, length = 32) private String operationType; /** * 类名.方法名 */ @Column(name = "class_method", nullable = false, length = 512) private String classMethod; /** * 请求参数JSON */ @Column(name = "request_params", columnDefinition = "TEXT") private String requestParams; /** * 响应结果(GZIP压缩) */ @Column(name = "response_data", columnDefinition = "MEDIUMBLOB") private byte[] responseData; /** * HTTP状态码 */ @Column(name = "status_code", nullable = false) private Integer statusCode; /** * 耗时(ms) */ @Column(name = "cost_time", nullable = false) private Long costTime; /** * 浏览器UA */ @Column(name = "user_agent", length = 512) private String userAgent; /** * 错误信息 */ @Column(name = "error_msg", columnDefinition = "TEXT") private String errorMsg; /** * 操作时间 */ @CreationTimestamp @Column(name = "create_time", nullable = false, updatable = false, columnDefinition = "DATETIME(3)") private LocalDateTime createTime; }