From ade70583e9164d48dbe577c02da8d0ee22ebceaa Mon Sep 17 00:00:00 2001 From: RuoYi <yzz_ivy@163.com> Date: 星期四, 16 二月 2023 10:22:39 +0800 Subject: [PATCH] 操作日志新增消耗时间属性 --- ruoyi-system/src/main/resources/mapper/system/SysOperLogMapper.xml | 7 ++- sql/ry_20230216.sql | 1 ruoyi-framework/src/main/java/com/ruoyi/framework/aspectj/LogAspect.java | 20 ++++++++++ ruoyi-system/src/main/java/com/ruoyi/system/domain/SysOperLog.java | 14 +++++++ ruoyi-ui/src/views/monitor/operlog/index.vue | 21 +++++++--- 5 files changed, 53 insertions(+), 10 deletions(-) diff --git a/ruoyi-framework/src/main/java/com/ruoyi/framework/aspectj/LogAspect.java b/ruoyi-framework/src/main/java/com/ruoyi/framework/aspectj/LogAspect.java index 323f0b7..684a639 100644 --- a/ruoyi-framework/src/main/java/com/ruoyi/framework/aspectj/LogAspect.java +++ b/ruoyi-framework/src/main/java/com/ruoyi/framework/aspectj/LogAspect.java @@ -8,8 +8,10 @@ import org.aspectj.lang.annotation.AfterReturning; import org.aspectj.lang.annotation.AfterThrowing; import org.aspectj.lang.annotation.Aspect; +import org.aspectj.lang.annotation.Before; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import org.springframework.core.NamedThreadLocal; import org.springframework.stereotype.Component; import org.springframework.validation.BindingResult; import org.springframework.web.multipart.MultipartFile; @@ -40,6 +42,18 @@ /** 排除敏感属性字段 */ public static final String[] EXCLUDE_PROPERTIES = { "password", "oldPassword", "newPassword", "confirmPassword" }; + + /** 计算操作消耗时间 */ + private static final ThreadLocal<Long> TIME_THREADLOCAL = new NamedThreadLocal<Long>("Cost Time"); + + /** + * 处理请求前执行 + */ + @Before(value = "@annotation(controllerLog)") + public void boBefore(JoinPoint joinPoint, Log controllerLog) + { + TIME_THREADLOCAL.set(System.currentTimeMillis()); + } /** * 处理完请求后执行 @@ -96,6 +110,8 @@ operLog.setRequestMethod(ServletUtils.getRequest().getMethod()); // 处理设置注解上的参数 getControllerMethodDescription(joinPoint, controllerLog, operLog, jsonResult); + // 设置消耗时间 + operLog.setCostTime(System.currentTimeMillis() - TIME_THREADLOCAL.get()); // 保存数据库 AsyncManager.me().execute(AsyncFactory.recordOper(operLog)); } @@ -105,6 +121,10 @@ log.error("异常信息:{}", exp.getMessage()); exp.printStackTrace(); } + finally + { + TIME_THREADLOCAL.remove(); + } } /** diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/domain/SysOperLog.java b/ruoyi-system/src/main/java/com/ruoyi/system/domain/SysOperLog.java index 4110b8a..7286573 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/system/domain/SysOperLog.java +++ b/ruoyi-system/src/main/java/com/ruoyi/system/domain/SysOperLog.java @@ -83,6 +83,10 @@ @Excel(name = "操作时间", width = 30, dateFormat = "yyyy-MM-dd HH:mm:ss") private Date operTime; + /** 消耗时间 */ + @Excel(name = "消耗时间", suffix = "毫秒") + private Long costTime; + public Long getOperId() { return operId; @@ -252,4 +256,14 @@ { this.operTime = operTime; } + + public Long getCostTime() + { + return costTime; + } + + public void setCostTime(Long costTime) + { + this.costTime = costTime; + } } diff --git a/ruoyi-system/src/main/resources/mapper/system/SysOperLogMapper.xml b/ruoyi-system/src/main/resources/mapper/system/SysOperLogMapper.xml index 71a9ecb..647a3f7 100644 --- a/ruoyi-system/src/main/resources/mapper/system/SysOperLogMapper.xml +++ b/ruoyi-system/src/main/resources/mapper/system/SysOperLogMapper.xml @@ -21,16 +21,17 @@ <result property="status" column="status" /> <result property="errorMsg" column="error_msg" /> <result property="operTime" column="oper_time" /> + <result property="costTime" column="cost_time" /> </resultMap> <sql id="selectOperLogVo"> - select oper_id, title, business_type, method, request_method, operator_type, oper_name, dept_name, oper_url, oper_ip, oper_location, oper_param, json_result, status, error_msg, oper_time + select oper_id, title, business_type, method, request_method, operator_type, oper_name, dept_name, oper_url, oper_ip, oper_location, oper_param, json_result, status, error_msg, oper_time, cost_time from sys_oper_log </sql> <insert id="insertOperlog" parameterType="SysOperLog"> - insert into sys_oper_log(title, business_type, method, request_method, operator_type, oper_name, dept_name, oper_url, oper_ip, oper_location, oper_param, json_result, status, error_msg, oper_time) - values (#{title}, #{businessType}, #{method}, #{requestMethod}, #{operatorType}, #{operName}, #{deptName}, #{operUrl}, #{operIp}, #{operLocation}, #{operParam}, #{jsonResult}, #{status}, #{errorMsg}, sysdate()) + insert into sys_oper_log(title, business_type, method, request_method, operator_type, oper_name, dept_name, oper_url, oper_ip, oper_location, oper_param, json_result, status, error_msg, cost_time, oper_time) + values (#{title}, #{businessType}, #{method}, #{requestMethod}, #{operatorType}, #{operName}, #{deptName}, #{operUrl}, #{operIp}, #{operLocation}, #{operParam}, #{jsonResult}, #{status}, #{errorMsg}, #{costTime}, sysdate()) </insert> <select id="selectOperLogList" parameterType="SysOperLog" resultMap="SysOperLogResult"> diff --git a/ruoyi-ui/src/views/monitor/operlog/index.vue b/ruoyi-ui/src/views/monitor/operlog/index.vue index c1b5377..23f1d70 100644 --- a/ruoyi-ui/src/views/monitor/operlog/index.vue +++ b/ruoyi-ui/src/views/monitor/operlog/index.vue @@ -102,16 +102,15 @@ </el-row> <el-table ref="tables" v-loading="loading" :data="list" @selection-change="handleSelectionChange" :default-sort="defaultSort" @sort-change="handleSortChange"> - <el-table-column type="selection" width="55" align="center" /> + <el-table-column type="selection" width="50" align="center" /> <el-table-column label="日志编号" align="center" prop="operId" /> - <el-table-column label="系统模块" align="center" prop="title" /> + <el-table-column label="系统模块" align="center" prop="title" :show-overflow-tooltip="true" /> <el-table-column label="操作类型" align="center" prop="businessType"> <template slot-scope="scope"> <dict-tag :options="dict.type.sys_oper_type" :value="scope.row.businessType"/> </template> </el-table-column> - <el-table-column label="请求方式" align="center" prop="requestMethod" /> - <el-table-column label="操作人员" align="center" prop="operName" width="100" :show-overflow-tooltip="true" sortable="custom" :sort-orders="['descending', 'ascending']" /> + <el-table-column label="操作人员" align="center" prop="operName" width="110" :show-overflow-tooltip="true" sortable="custom" :sort-orders="['descending', 'ascending']" /> <el-table-column label="操作地址" align="center" prop="operIp" width="130" :show-overflow-tooltip="true" /> <el-table-column label="操作地点" align="center" prop="operLocation" :show-overflow-tooltip="true" /> <el-table-column label="操作状态" align="center" prop="status"> @@ -119,9 +118,14 @@ <dict-tag :options="dict.type.sys_common_status" :value="scope.row.status"/> </template> </el-table-column> - <el-table-column label="操作日期" align="center" prop="operTime" sortable="custom" :sort-orders="['descending', 'ascending']" width="180"> + <el-table-column label="操作日期" align="center" prop="operTime" width="160" sortable="custom" :sort-orders="['descending', 'ascending']"> <template slot-scope="scope"> <span>{{ parseTime(scope.row.operTime) }}</span> + </template> + </el-table-column> + <el-table-column label="消耗时间" align="center" prop="costTime" width="110" :show-overflow-tooltip="true" sortable="custom" :sort-orders="['descending', 'ascending']"> + <template slot-scope="scope"> + <span>{{ scope.row.costTime }}毫秒</span> </template> </el-table-column> <el-table-column label="操作" align="center" class-name="small-padding fixed-width"> @@ -168,13 +172,16 @@ <el-col :span="24"> <el-form-item label="返回参数:">{{ form.jsonResult }}</el-form-item> </el-col> - <el-col :span="12"> + <el-col :span="6"> <el-form-item label="操作状态:"> <div v-if="form.status === 0">正常</div> <div v-else-if="form.status === 1">失败</div> </el-form-item> </el-col> - <el-col :span="12"> + <el-col :span="8"> + <el-form-item label="消耗时间:">{{ form.costTime }}毫秒</el-form-item> + </el-col> + <el-col :span="10"> <el-form-item label="操作时间:">{{ parseTime(form.operTime) }}</el-form-item> </el-col> <el-col :span="24"> diff --git a/sql/ry_20220822.sql b/sql/ry_20230216.sql similarity index 99% rename from sql/ry_20220822.sql rename to sql/ry_20230216.sql index 83a33b9..d30cfbf 100644 --- a/sql/ry_20220822.sql +++ b/sql/ry_20230216.sql @@ -432,6 +432,7 @@ status int(1) default 0 comment '操作状态(0正常 1异常)', error_msg varchar(2000) default '' comment '错误消息', oper_time datetime comment '操作时间', + cost_time bigint(20) default 0 comment '消耗时间', primary key (oper_id) ) engine=innodb auto_increment=100 comment = '操作日志记录'; -- Gitblit v1.9.2