当前位置: 首页 > news >正文

活动日志系统集成指南

1. 系统概述

活动日志系统用于记录用户在系统中的所有操作行为,包括成功操作和失败操作,便于系统审计、问题排查和用户行为分析。

2. 已创建的文件

2.1 后端文件

  • entity/ActivityLog.java - 活动日志实体类
  • mapper/ActivityLogMapper.java - 数据访问层接口
  • service/ActivityLogService.java - 业务层接口
  • service/impl/ActivityLogServiceImpl.java - 业务层实现
  • controller/ActivityLogController.java - 控制器层
  • utils/ActivityLogUtil.java - 工具类
  • sql/activity_log.sql - 数据库建表脚本

2.2 数据库表结构

CREATE TABLE `activity_log` (`id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键ID',`user_id` varchar(50) DEFAULT NULL COMMENT '用户ID',`username` varchar(100) DEFAULT NULL COMMENT '用户名',`module` varchar(50) NOT NULL COMMENT '操作模块',`action` varchar(50) NOT NULL COMMENT '操作动作',`description` varchar(500) DEFAULT NULL COMMENT '操作描述',`target_id` varchar(50) DEFAULT NULL COMMENT '操作对象ID',`target_type` varchar(50) DEFAULT NULL COMMENT '操作对象类型',`old_data` text COMMENT '操作前数据',`new_data` text COMMENT '操作后数据',`ip_address` varchar(50) DEFAULT NULL COMMENT 'IP地址',`user_agent` varchar(500) DEFAULT NULL COMMENT '浏览器信息',`status` varchar(20) DEFAULT 'success' COMMENT '操作状态',`error_message` text COMMENT '错误信息',`created_at` datetime DEFAULT CURRENT_TIMESTAMP COMMENT '操作时间',`duration` bigint(20) DEFAULT NULL COMMENT '操作耗时(毫秒)',`remark` varchar(500) DEFAULT NULL COMMENT '备注',PRIMARY KEY (`id`),-- 索引省略...
);

3. 使用方法

3.1 在现有Controller中集成日志记录

示例1:OwnerinfoController中添加日志记录
import com.parkingmanage.utils.ActivityLogUtil;@RestController
@RequestMapping("/parking/ownerinfo")
public class OwnerinfoController {@PostMapping("/add")public Result addOwnerinfo(@RequestBody Ownerinfo ownerinfo, HttpServletRequest request) {try {// 获取当前用户信息(从session或token中获取)String userId = getCurrentUserId(request);String username = getCurrentUsername(request);// 执行业务操作boolean success = ownerinfoService.save(ownerinfo);if (success) {// 记录成功日志ActivityLogUtil.logOwnerOperation(userId, username, "添加", "添加车主信息:" + ownerinfo.getOwnername(), ownerinfo.getId().toString());return Result.success("添加成功");} else {// 记录失败日志ActivityLogUtil.logError(userId, username, "车主管理", "添加", "添加车主信息失败:" + ownerinfo.getOwnername(),"数据保存失败");return Result.error("添加失败");}} catch (Exception e) {// 记录异常日志ActivityLogUtil.logError(getCurrentUserId(request), getCurrentUsername(request), "车主管理", "添加", "添加车主信息异常:" + ownerinfo.getOwnername(),e.getMessage());return Result.error("系统异常:" + e.getMessage());}}@PutMapping("/update")public Result updateOwnerinfo(@RequestBody Ownerinfo ownerinfo, HttpServletRequest request) {try {String userId = getCurrentUserId(request);String username = getCurrentUsername(request);// 获取更新前的数据Ownerinfo oldOwnerinfo = ownerinfoService.getById(ownerinfo.getId());// 执行更新操作boolean success = ownerinfoService.updateById(ownerinfo);if (success) {// 记录成功日志(包含操作前后数据对比)ActivityLogUtil.logSuccess(userId, username, "车主管理", "修改", "修改车主信息:" + ownerinfo.getOwnername(),ownerinfo.getId().toString(),"ownerinfo",JSON.toJSONString(oldOwnerinfo), // 操作前数据JSON.toJSONString(ownerinfo)     // 操作后数据);return Result.success("修改成功");} else {return Result.error("修改失败");}} catch (Exception e) {ActivityLogUtil.logError(getCurrentUserId(request), getCurrentUsername(request), "车主管理", "修改", "修改车主信息异常",e.getMessage());return Result.error("系统异常:" + e.getMessage());}}@DeleteMapping("/{id}")public Result deleteOwnerinfo(@PathVariable Integer id, HttpServletRequest request) {try {String userId = getCurrentUserId(request);String username = getCurrentUsername(request);// 获取要删除的数据Ownerinfo ownerinfo = ownerinfoService.getById(id);if (ownerinfo == null) {return Result.error("数据不存在");}// 执行删除操作boolean success = ownerinfoService.removeById(id);if (success) {// 记录删除日志ActivityLogUtil.logOwnerOperation(userId, username, "删除", "删除车主信息:" + ownerinfo.getOwnername(), id.toString());return Result.success("删除成功");} else {return Result.error("删除失败");}} catch (Exception e) {ActivityLogUtil.logError(getCurrentUserId(request), getCurrentUsername(request), "车主管理", "删除", "删除车主信息异常",e.getMessage());return Result.error("系统异常:" + e.getMessage());}}// 工具方法:获取当前用户IDprivate String getCurrentUserId(HttpServletRequest request) {// 这里需要根据实际的认证机制来获取用户ID// 可能从session、JWT token、或其他方式获取return "current_user_id"; // 示例值}// 工具方法:获取当前用户名private String getCurrentUsername(HttpServletRequest request) {// 这里需要根据实际的认证机制来获取用户名return "current_username"; // 示例值}
}

3.2 使用工具类的便捷方法

// 记录车主管理操作
ActivityLogUtil.logOwnerOperation(userId, username, "添加", "添加车主", ownerId);// 记录预约管理操作
ActivityLogUtil.logAppointmentOperation(userId, username, "创建", "创建预约", appointmentId);// 记录违规管理操作
ActivityLogUtil.logViolationOperation(userId, username, "处理", "处理违规记录", violationId);// 记录用户管理操作
ActivityLogUtil.logUserOperation(userId, username, "登录", "用户登录", userId);// 记录系统操作
ActivityLogUtil.logSystemOperation(userId, username, "备份", "数据库备份");

4. API接口使用

4.1 查询活动日志

GET /parking/activity-log/page?pageNum=1&pageSize=20&userId=user1&module=车主管理

4.2 统计数据

GET /parking/activity-log/statistics?startTime=2024-01-01 00:00:00&endTime=2024-12-31 23:59:59

4.3 清理过期日志

DELETE /parking/activity-log/clean-expired?days=90

5. 集成步骤

  1. 执行SQL脚本:在数据库中执行 sql/activity_log.sql 创建表
  1. 配置依赖:确保项目中有MyBatis-Plus相关依赖
  1. 集成到现有Controller:按照上述示例在现有Controller中添加日志记录
  1. 配置用户信息获取:实现获取当前用户ID和用户名的方法
  1. 测试验证:测试各种操作是否正确记录日志

6. 注意事项

  1. 性能考虑:日志记录是异步的,不会影响主要业务流程
  1. 数据量控制:定期清理过期日志,避免表数据过大
  1. 敏感信息:避免在日志中记录密码等敏感信息
  1. 异常处理:日志记录失败不应影响主要业务流程
  1. 索引优化:根据查询需求优化数据库索引
http://www.dtcms.com/a/435171.html

相关文章:

  • 弹幕网站是怎么做的软件开发工程师级别
  • 贵阳市建设局信息管理网站中国建设会计学网站
  • 函数简单传入参数的汇编分析
  • 怎样做已有网站的编辑维护大沥九江网站制作
  • 自己网站首页如何设置网站托管维护方案
  • 安卓基础组件024-底部导航栏
  • 【ROS2学习笔记】话题通信篇:话题通信项目实践——系统状态监测与可视化工具
  • 苏州门户网站平台推广员
  • ICT 数字测试原理 4 --电源监控电路(PMC)
  • 网站内页要不要加上关键词和描述广告型网站怎么做的
  • 深圳市建设局工程交易中心网站贵州 网站建设
  • 【C/C++】 函数形参—指针传递
  • 门限签名与多方安全计算(MPC)
  • 东莞公司高端网站建设高大上网站
  • 基于websocket的多用户网页五子棋(一)
  • PCA 主成分分析:数据世界的 “旅行清单整理师”—— 从 30 维杂乱到 2 维清晰的诗意降维
  • wordpress兼容mipseo加盟代理
  • 台州网站排名优化费用网站建设设计风格描述
  • 利用 ZoneABC 免费域名 零成本接入 Cloudflare 企业版 CDN
  • 企业网站建设费用属于什么科目dw软件网站建设教程
  • Streamlit:基础入门——零基础搭建第一个 Web 应用
  • Netty粘包和半包问题产生的原因和解决方案
  • 【小沐学GIS】基于C++绘制地形DEM(OpenGL、Terrain、TIFF、hgt)第十二期
  • 怎么搭建本地网站外贸营销工具
  • MySQL常用命令全攻略
  • 郑州市网站和公众号建设长沙公积金网站怎么做异动
  • 平面设计有什么网站wordpress 汽车模板下载
  • 珠宝首饰网站开发郑州微盟网站建设公司
  • 网站建设毕业设计指导老师意见什么网站可以做设计
  • 想学做网站要去哪里学健身网站开发过程中遇到的麻烦