# operator-log-record **Repository Path**: lin_chenghao/operator-log-record ## Basic Information - **Project Name**: operator-log-record - **Description**: 对象变更内容记录通用工具 - **Primary Language**: Java - **License**: Apache-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 3 - **Forks**: 1 - **Created**: 2023-09-27 - **Last Updated**: 2024-09-14 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README ## 使用 1. 下载项目gitee 2. MySQL执行sql.sql文件 3. 启动项目 4. 请求controller的接口 # 背景 对象变更内容记录通用工具 ## 需求 1. 需要记录新增、删除、更新对象等操作的详细日志 2. 模板如下 | 操作视图 | 操作对象名 | 操作内容 | 操作者 | 处理开始时间 | 处理结束时间 | 是否完成 | 失败原因 | | -------- | ---------- | ------------------------------------------------------------ | ---------- | ------------------- | ------------------- | -------- | -------- | | 新增用户 | 用户A | 新增用户[用户A] :姓名:"用户A";邮箱:"123@hirain.com"; | 超级管理员 | 2023-09-15 14:34:22 | 2023-09-15 14:35:22 | 是 | | | 删除用户 | 用户A | 删除用户[用户A] | 超级管理员 | 2023-09-15 15:34:22 | 2023-09-15 15:35:22 | 否 | 数据原因 | | 编辑用户 | 用户A | 修改用户[用户B]:姓名:"用户A" -> "用户B";邮箱:"123@hirain.com" -> "234@hirian.com" | 超级管理员 | 2023-09-15 17:34:22 | 2023-09-15 17:35:22 | 是 | | | 重置密码 | 用户B | 修改用户[用户B]:重置密码 | 超级管理员 | 2023-09-15 17:40:22 | 2023-09-15 17:42:22 | 是 | | | 分配角色 | 用户B | 修改用户[用户B]:设置为数据管理员 | 超级管理员 | 2023-09-15 17:50:22 | 2023-09-15 17:59:22 | 是 | | ## 方案对比 | | 业务 | 切面 | 切面+策略模式+spel+自定义对象比较工具 | | ---------- | ---- | ---- | ------------------------------------- | | 是否入侵 | 是 | 否 | 否 | | 代码通用性 | 弱 | 若 | 强 | | 代码量 | 多 | 多 | 少 | ## 方案 1. AOP+注解:非入侵。 2. 策略模式:减少AOP切面。 3. spel+注解:获取前端参数。 4. object_change_log项目:利用反射和注解获取更新对象的变更内容。[object_change_log](https://gitee.com/lin_chenghao/object_change_log) # 使用要求 ## 依赖 1. 强绑定Mybatis-plus,会用到Mybatis-plus中的注解:TableName、TableField,若不想用Mybatis-plus,可以自己定义类似于Mybatis-plus中的注解,并替换。 2. 强绑定Lombok ## 操作要求 ### 表要求 1. Id命名为obj_id; 2. 名称命名为name; ### 新增操作 1. 要求返回值是新增的Id。 ### 名称搜索方案 1. 通过content模糊搜索,后通过UUID查询。 2. 维护operator_obj_name字段(新增、更新Name操作时维护) # 优化点 ### 策略类是Spring bean时怎么办 采用类扫描的方式把策略类放到一个Map。OperatorLogAspect获取策略类,从该Map获取。