package com.xuekairui.user.entity; import com.baomidou.mybatisplus.annotation.*; import com.xuekairui.user.enums.AuditResult; import lombok.Data; import lombok.NoArgsConstructor; import lombok.AllArgsConstructor; import lombok.Builder; import java.time.LocalDateTime; /** * 操作审计日志实体 * * 记录运营和用户的所有关键操作,用于审计、追溯和问题排查 */ @Data @NoArgsConstructor @AllArgsConstructor @Builder @TableName("t_operation_audit_log") public class OperationAuditLog { /** 主键ID */ @TableId(type = IdType.ASSIGN_ID) private Long id; /** 操作人ID(用户ID或运营人员ID) */ private Long operatorId; /** 操作人姓名/昵称 */ private String operatorName; /** 操作人角色:USER-普通用户 ADMIN-运营人员 SUPER_ADMIN-超级管理员 */ private String operatorRole; /** 操作时间 */ @Builder.Default private LocalDateTime operationTime = LocalDateTime.now(); /** 操作IP地址 */ private String ipAddress; /** 操作设备信息(User-Agent) */ private String userAgent; /** 操作模块:USER-用户管理 LEVEL-等级配置 PLATFORM-平台配置 LICENSE-入驻信息 INVITE-邀请系统 COUPON-优惠券 SYSTEM-系统管理 */ private String module; /** 操作类型(见OperationType枚举) */ private String operationType; /** 操作来源:ADMIN_CREATE-管理员新增 USER_SUBMIT-用户自主提交 EXTERNAL-外部系统(见 OperationSource 枚举) */ private String operationSource; /** 操作描述(中文描述,便于阅读) */ private String description; /** 目标对象类型:USER-用户 LEVEL_CONFIG-等级配置 PLATFORM-平台 ACCOUNT-账号 LICENSE-执照 */ private String targetType; /** 目标对象ID */ private Long targetId; /** 目标对象标识(如:用户名、版本号等) */ private String targetIdentifier; /** 操作前的数据快照(JSON格式) */ private String beforeData; /** 操作后的数据快照(JSON格式) */ private String afterData; /** 操作结果:SUCCESS-成功 FAILED-失败 PARTIAL-部分成功(见 AuditResult 枚举) */ @Builder.Default private String result = AuditResult.SUCCESS.getCode(); /** 错误信息(操作失败时记录) */ private String errorMessage; /** 请求URL */ private String requestUrl; /** 请求方法:GET/POST/PUT/DELETE */ private String requestMethod; /** 请求参数(JSON格式,敏感信息脱敏) */ private String requestParams; /** 响应状态码 */ private Integer responseCode; /** 耗时(毫秒) */ private Long duration; /** 备注说明 */ private String remark; /** 是否敏感操作(需要特别关注) */ @Builder.Default private Boolean isSensitive = false; /** 创建时间 */ @TableField(fill = FieldFill.INSERT) private LocalDateTime createTime; }