Commit e68d4f54f73dd853e69b6c20dee20c29e4ef69c5

Authored by YunaiV
1 parent b1aa9f48

优化 yudao-spring-boot-starter-biz-operatelog 的封装,和 yudao-cloud 保持一致

Showing 15 changed files with 423 additions and 177 deletions
yudao-framework/yudao-spring-boot-starter-biz-operatelog/pom.xml
@@ -34,6 +34,13 @@ @@ -34,6 +34,13 @@
34 <scope>provided</scope> 34 <scope>provided</scope>
35 </dependency> 35 </dependency>
36 36
  37 + <!-- 业务组件 -->
  38 + <dependency>
  39 + <groupId>cn.iocoder.boot</groupId>
  40 + <artifactId>yudao-module-system-api</artifactId> <!-- 需要使用它,进行操作日志的记录 -->
  41 + <version>${revision}</version>
  42 + </dependency>
  43 +
37 <!-- 工具类相关 --> 44 <!-- 工具类相关 -->
38 <dependency> 45 <dependency>
39 <groupId>com.google.guava</groupId> 46 <groupId>com.google.guava</groupId>
yudao-framework/yudao-spring-boot-starter-biz-operatelog/src/main/java/cn/iocoder/yudao/framework/operatelog/config/YudaoOperateLogAutoConfiguration.java
1 package cn.iocoder.yudao.framework.operatelog.config; 1 package cn.iocoder.yudao.framework.operatelog.config;
2 2
3 import cn.iocoder.yudao.framework.operatelog.core.aop.OperateLogAspect; 3 import cn.iocoder.yudao.framework.operatelog.core.aop.OperateLogAspect;
  4 +import cn.iocoder.yudao.framework.operatelog.core.service.OperateLogFrameworkService;
  5 +import cn.iocoder.yudao.framework.operatelog.core.service.OperateLogFrameworkServiceImpl;
  6 +import cn.iocoder.yudao.module.system.api.logger.OperateLogApi;
4 import org.springframework.context.annotation.Bean; 7 import org.springframework.context.annotation.Bean;
5 import org.springframework.context.annotation.Configuration; 8 import org.springframework.context.annotation.Configuration;
6 9
@@ -12,4 +15,9 @@ public class YudaoOperateLogAutoConfiguration { @@ -12,4 +15,9 @@ public class YudaoOperateLogAutoConfiguration {
12 return new OperateLogAspect(); 15 return new OperateLogAspect();
13 } 16 }
14 17
  18 + @Bean
  19 + public OperateLogFrameworkService operateLogFrameworkService(OperateLogApi operateLogApi) {
  20 + return new OperateLogFrameworkServiceImpl(operateLogApi);
  21 + }
  22 +
15 } 23 }
yudao-framework/yudao-spring-boot-starter-biz-operatelog/src/main/java/cn/iocoder/yudao/framework/operatelog/core/aop/OperateLogAspect.java
@@ -9,9 +9,8 @@ import cn.iocoder.yudao.framework.common.pojo.CommonResult; @@ -9,9 +9,8 @@ import cn.iocoder.yudao.framework.common.pojo.CommonResult;
9 import cn.iocoder.yudao.framework.common.util.json.JsonUtils; 9 import cn.iocoder.yudao.framework.common.util.json.JsonUtils;
10 import cn.iocoder.yudao.framework.common.util.monitor.TracerUtils; 10 import cn.iocoder.yudao.framework.common.util.monitor.TracerUtils;
11 import cn.iocoder.yudao.framework.common.util.servlet.ServletUtils; 11 import cn.iocoder.yudao.framework.common.util.servlet.ServletUtils;
12 -import cn.iocoder.yudao.framework.operatelog.core.annotations.OperateLog;  
13 -import cn.iocoder.yudao.framework.operatelog.core.dto.OperateLogCreateReqDTO;  
14 import cn.iocoder.yudao.framework.operatelog.core.enums.OperateTypeEnum; 12 import cn.iocoder.yudao.framework.operatelog.core.enums.OperateTypeEnum;
  13 +import cn.iocoder.yudao.framework.operatelog.core.service.OperateLog;
15 import cn.iocoder.yudao.framework.operatelog.core.service.OperateLogFrameworkService; 14 import cn.iocoder.yudao.framework.operatelog.core.service.OperateLogFrameworkService;
16 import cn.iocoder.yudao.framework.web.core.util.WebFrameworkUtils; 15 import cn.iocoder.yudao.framework.web.core.util.WebFrameworkUtils;
17 import com.google.common.collect.Maps; 16 import com.google.common.collect.Maps;
@@ -57,13 +56,13 @@ public class OperateLogAspect { @@ -57,13 +56,13 @@ public class OperateLogAspect {
57 /** 56 /**
58 * 用于记录操作内容的上下文 57 * 用于记录操作内容的上下文
59 * 58 *
60 - * @see OperateLogCreateReqDTO#getContent() 59 + * @see OperateLog#getContent()
61 */ 60 */
62 private static final ThreadLocal<String> CONTENT = new ThreadLocal<>(); 61 private static final ThreadLocal<String> CONTENT = new ThreadLocal<>();
63 /** 62 /**
64 * 用于记录拓展字段的上下文 63 * 用于记录拓展字段的上下文
65 * 64 *
66 - * @see OperateLogCreateReqDTO#getExts() 65 + * @see OperateLog#getExts()
67 */ 66 */
68 private static final ThreadLocal<Map<String, Object>> EXTS = new ThreadLocal<>(); 67 private static final ThreadLocal<Map<String, Object>> EXTS = new ThreadLocal<>();
69 68
@@ -73,16 +72,20 @@ public class OperateLogAspect { @@ -73,16 +72,20 @@ public class OperateLogAspect {
73 @Around("@annotation(apiOperation)") 72 @Around("@annotation(apiOperation)")
74 public Object around(ProceedingJoinPoint joinPoint, ApiOperation apiOperation) throws Throwable { 73 public Object around(ProceedingJoinPoint joinPoint, ApiOperation apiOperation) throws Throwable {
75 // 可能也添加了 @ApiOperation 注解 74 // 可能也添加了 @ApiOperation 注解
76 - OperateLog operateLog = getMethodAnnotation(joinPoint, OperateLog.class); 75 + cn.iocoder.yudao.framework.operatelog.core.annotations.OperateLog operateLog = getMethodAnnotation(joinPoint,
  76 + cn.iocoder.yudao.framework.operatelog.core.annotations.OperateLog.class);
77 return around0(joinPoint, operateLog, apiOperation); 77 return around0(joinPoint, operateLog, apiOperation);
78 } 78 }
79 79
80 @Around("!@annotation(io.swagger.annotations.ApiOperation) && @annotation(operateLog)") // 兼容处理,只添加 @OperateLog 注解的情况 80 @Around("!@annotation(io.swagger.annotations.ApiOperation) && @annotation(operateLog)") // 兼容处理,只添加 @OperateLog 注解的情况
81 - public Object around(ProceedingJoinPoint joinPoint, OperateLog operateLog) throws Throwable { 81 + public Object around(ProceedingJoinPoint joinPoint,
  82 + cn.iocoder.yudao.framework.operatelog.core.annotations.OperateLog operateLog) throws Throwable {
82 return around0(joinPoint, operateLog, null); 83 return around0(joinPoint, operateLog, null);
83 } 84 }
84 85
85 - private Object around0(ProceedingJoinPoint joinPoint, OperateLog operateLog, ApiOperation apiOperation) throws Throwable { 86 + private Object around0(ProceedingJoinPoint joinPoint,
  87 + cn.iocoder.yudao.framework.operatelog.core.annotations.OperateLog operateLog,
  88 + ApiOperation apiOperation) throws Throwable {
86 // 目前,只有管理员,才记录操作日志!所以非管理员,直接调用,不进行记录 89 // 目前,只有管理员,才记录操作日志!所以非管理员,直接调用,不进行记录
87 Integer userType = WebFrameworkUtils.getLoginUserType(); 90 Integer userType = WebFrameworkUtils.getLoginUserType();
88 if (!Objects.equals(userType, UserTypeEnum.ADMIN.getValue())) { 91 if (!Objects.equals(userType, UserTypeEnum.ADMIN.getValue())) {
@@ -121,7 +124,9 @@ public class OperateLogAspect { @@ -121,7 +124,9 @@ public class OperateLogAspect {
121 EXTS.remove(); 124 EXTS.remove();
122 } 125 }
123 126
124 - private void log(ProceedingJoinPoint joinPoint, OperateLog operateLog, ApiOperation apiOperation, 127 + private void log(ProceedingJoinPoint joinPoint,
  128 + cn.iocoder.yudao.framework.operatelog.core.annotations.OperateLog operateLog,
  129 + ApiOperation apiOperation,
125 Date startTime, Object result, Throwable exception) { 130 Date startTime, Object result, Throwable exception) {
126 try { 131 try {
127 // 判断不记录的情况 132 // 判断不记录的情况
@@ -136,113 +141,119 @@ public class OperateLogAspect { @@ -136,113 +141,119 @@ public class OperateLogAspect {
136 } 141 }
137 } 142 }
138 143
139 - private void log0(ProceedingJoinPoint joinPoint, OperateLog operateLog, ApiOperation apiOperation, 144 + private void log0(ProceedingJoinPoint joinPoint,
  145 + cn.iocoder.yudao.framework.operatelog.core.annotations.OperateLog operateLog,
  146 + ApiOperation apiOperation,
140 Date startTime, Object result, Throwable exception) { 147 Date startTime, Object result, Throwable exception) {
141 - OperateLogCreateReqDTO operateLogDTO = new OperateLogCreateReqDTO(); 148 + OperateLog operateLogObj = new OperateLog();
142 // 补全通用字段 149 // 补全通用字段
143 - operateLogDTO.setTraceId(TracerUtils.getTraceId());  
144 - operateLogDTO.setStartTime(startTime); 150 + operateLogObj.setTraceId(TracerUtils.getTraceId());
  151 + operateLogObj.setStartTime(startTime);
145 // 补充用户信息 152 // 补充用户信息
146 - fillUserFields(operateLogDTO); 153 + fillUserFields(operateLogObj);
147 // 补全模块信息 154 // 补全模块信息
148 - fillModuleFields(operateLogDTO, joinPoint, operateLog, apiOperation); 155 + fillModuleFields(operateLogObj, joinPoint, operateLog, apiOperation);
149 // 补全请求信息 156 // 补全请求信息
150 - fillRequestFields(operateLogDTO); 157 + fillRequestFields(operateLogObj);
151 // 补全方法信息 158 // 补全方法信息
152 - fillMethodFields(operateLogDTO, joinPoint, operateLog, startTime, result, exception); 159 + fillMethodFields(operateLogObj, joinPoint, operateLog, startTime, result, exception);
153 160
154 // 异步记录日志 161 // 异步记录日志
155 - operateLogFrameworkService.createOperateLogAsync(operateLogDTO); 162 + operateLogFrameworkService.createOperateLog(operateLogObj);
156 } 163 }
157 164
158 - private static void fillUserFields(OperateLogCreateReqDTO operateLogDTO) {  
159 - operateLogDTO.setUserId(WebFrameworkUtils.getLoginUserId());  
160 - operateLogDTO.setUserType(WebFrameworkUtils.getLoginUserType()); 165 + private static void fillUserFields(OperateLog operateLogObj) {
  166 + operateLogObj.setUserId(WebFrameworkUtils.getLoginUserId());
  167 + operateLogObj.setUserType(WebFrameworkUtils.getLoginUserType());
161 } 168 }
162 169
163 - private static void fillModuleFields(OperateLogCreateReqDTO operateLogDTO,  
164 - ProceedingJoinPoint joinPoint, OperateLog operateLog, ApiOperation apiOperation) { 170 + private static void fillModuleFields(OperateLog operateLogObj,
  171 + ProceedingJoinPoint joinPoint,
  172 + cn.iocoder.yudao.framework.operatelog.core.annotations.OperateLog operateLog,
  173 + ApiOperation apiOperation) {
165 // module 属性 174 // module 属性
166 if (operateLog != null) { 175 if (operateLog != null) {
167 - operateLogDTO.setModule(operateLog.module()); 176 + operateLogObj.setModule(operateLog.module());
168 } 177 }
169 - if (StrUtil.isEmpty(operateLogDTO.getModule())) { 178 + if (StrUtil.isEmpty(operateLogObj.getModule())) {
170 Api api = getClassAnnotation(joinPoint, Api.class); 179 Api api = getClassAnnotation(joinPoint, Api.class);
171 if (api != null) { 180 if (api != null) {
172 // 优先读取 @API 的 name 属性 181 // 优先读取 @API 的 name 属性
173 if (StrUtil.isNotEmpty(api.value())) { 182 if (StrUtil.isNotEmpty(api.value())) {
174 - operateLogDTO.setModule(api.value()); 183 + operateLogObj.setModule(api.value());
175 } 184 }
176 // 没有的话,读取 @API 的 tags 属性 185 // 没有的话,读取 @API 的 tags 属性
177 - if (StrUtil.isEmpty(operateLogDTO.getModule()) && ArrayUtil.isNotEmpty(api.tags())) {  
178 - operateLogDTO.setModule(api.tags()[0]); 186 + if (StrUtil.isEmpty(operateLogObj.getModule()) && ArrayUtil.isNotEmpty(api.tags())) {
  187 + operateLogObj.setModule(api.tags()[0]);
179 } 188 }
180 } 189 }
181 } 190 }
182 // name 属性 191 // name 属性
183 if (operateLog != null) { 192 if (operateLog != null) {
184 - operateLogDTO.setName(operateLog.name()); 193 + operateLogObj.setName(operateLog.name());
185 } 194 }
186 - if (StrUtil.isEmpty(operateLogDTO.getName()) && apiOperation != null) {  
187 - operateLogDTO.setName(apiOperation.value()); 195 + if (StrUtil.isEmpty(operateLogObj.getName()) && apiOperation != null) {
  196 + operateLogObj.setName(apiOperation.value());
188 } 197 }
189 // type 属性 198 // type 属性
190 if (operateLog != null && ArrayUtil.isNotEmpty(operateLog.type())) { 199 if (operateLog != null && ArrayUtil.isNotEmpty(operateLog.type())) {
191 - operateLogDTO.setType(operateLog.type()[0].getType()); 200 + operateLogObj.setType(operateLog.type()[0].getType());
192 } 201 }
193 - if (operateLogDTO.getType() == null) { 202 + if (operateLogObj.getType() == null) {
194 RequestMethod requestMethod = obtainFirstMatchRequestMethod(obtainRequestMethod(joinPoint)); 203 RequestMethod requestMethod = obtainFirstMatchRequestMethod(obtainRequestMethod(joinPoint));
195 OperateTypeEnum operateLogType = convertOperateLogType(requestMethod); 204 OperateTypeEnum operateLogType = convertOperateLogType(requestMethod);
196 - operateLogDTO.setType(operateLogType != null ? operateLogType.getType() : null); 205 + operateLogObj.setType(operateLogType != null ? operateLogType.getType() : null);
197 } 206 }
198 // content 和 exts 属性 207 // content 和 exts 属性
199 - operateLogDTO.setContent(CONTENT.get());  
200 - operateLogDTO.setExts(EXTS.get()); 208 + operateLogObj.setContent(CONTENT.get());
  209 + operateLogObj.setExts(EXTS.get());
201 } 210 }
202 211
203 - private static void fillRequestFields(OperateLogCreateReqDTO operateLogDTO) { 212 + private static void fillRequestFields(OperateLog operateLogObj) {
204 // 获得 Request 对象 213 // 获得 Request 对象
205 HttpServletRequest request = ServletUtils.getRequest(); 214 HttpServletRequest request = ServletUtils.getRequest();
206 if (request == null) { 215 if (request == null) {
207 return; 216 return;
208 } 217 }
209 // 补全请求信息 218 // 补全请求信息
210 - operateLogDTO.setRequestMethod(request.getMethod());  
211 - operateLogDTO.setRequestUrl(request.getRequestURI());  
212 - operateLogDTO.setUserIp(ServletUtil.getClientIP(request));  
213 - operateLogDTO.setUserAgent(ServletUtils.getUserAgent(request)); 219 + operateLogObj.setRequestMethod(request.getMethod());
  220 + operateLogObj.setRequestUrl(request.getRequestURI());
  221 + operateLogObj.setUserIp(ServletUtil.getClientIP(request));
  222 + operateLogObj.setUserAgent(ServletUtils.getUserAgent(request));
214 } 223 }
215 224
216 - private static void fillMethodFields(OperateLogCreateReqDTO operateLogDTO,  
217 - ProceedingJoinPoint joinPoint, OperateLog operateLog, 225 + private static void fillMethodFields(OperateLog operateLogObj,
  226 + ProceedingJoinPoint joinPoint,
  227 + cn.iocoder.yudao.framework.operatelog.core.annotations.OperateLog operateLog,
218 Date startTime, Object result, Throwable exception) { 228 Date startTime, Object result, Throwable exception) {
219 MethodSignature methodSignature = (MethodSignature) joinPoint.getSignature(); 229 MethodSignature methodSignature = (MethodSignature) joinPoint.getSignature();
220 - operateLogDTO.setJavaMethod(methodSignature.toString()); 230 + operateLogObj.setJavaMethod(methodSignature.toString());
221 if (operateLog == null || operateLog.logArgs()) { 231 if (operateLog == null || operateLog.logArgs()) {
222 - operateLogDTO.setJavaMethodArgs(obtainMethodArgs(joinPoint)); 232 + operateLogObj.setJavaMethodArgs(obtainMethodArgs(joinPoint));
223 } 233 }
224 if (operateLog == null || operateLog.logResultData()) { 234 if (operateLog == null || operateLog.logResultData()) {
225 - operateLogDTO.setResultData(obtainResultData(result)); 235 + operateLogObj.setResultData(obtainResultData(result));
226 } 236 }
227 - operateLogDTO.setDuration((int) (System.currentTimeMillis() - startTime.getTime())); 237 + operateLogObj.setDuration((int) (System.currentTimeMillis() - startTime.getTime()));
228 // (正常)处理 resultCode 和 resultMsg 字段 238 // (正常)处理 resultCode 和 resultMsg 字段
229 if (result != null) { 239 if (result != null) {
230 if (result instanceof CommonResult) { 240 if (result instanceof CommonResult) {
231 CommonResult<?> commonResult = (CommonResult<?>) result; 241 CommonResult<?> commonResult = (CommonResult<?>) result;
232 - operateLogDTO.setResultCode(commonResult.getCode());  
233 - operateLogDTO.setResultMsg(commonResult.getMsg()); 242 + operateLogObj.setResultCode(commonResult.getCode());
  243 + operateLogObj.setResultMsg(commonResult.getMsg());
234 } else { 244 } else {
235 - operateLogDTO.setResultCode(SUCCESS.getCode()); 245 + operateLogObj.setResultCode(SUCCESS.getCode());
236 } 246 }
237 } 247 }
238 // (异常)处理 resultCode 和 resultMsg 字段 248 // (异常)处理 resultCode 和 resultMsg 字段
239 if (exception != null) { 249 if (exception != null) {
240 - operateLogDTO.setResultCode(INTERNAL_SERVER_ERROR.getCode());  
241 - operateLogDTO.setResultMsg(ExceptionUtil.getRootCauseMessage(exception)); 250 + operateLogObj.setResultCode(INTERNAL_SERVER_ERROR.getCode());
  251 + operateLogObj.setResultMsg(ExceptionUtil.getRootCauseMessage(exception));
242 } 252 }
243 } 253 }
244 254
245 - private static boolean isLogEnable(ProceedingJoinPoint joinPoint, OperateLog operateLog) { 255 + private static boolean isLogEnable(ProceedingJoinPoint joinPoint,
  256 + cn.iocoder.yudao.framework.operatelog.core.annotations.OperateLog operateLog) {
246 // 有 @OperateLog 注解的情况下 257 // 有 @OperateLog 注解的情况下
247 if (operateLog != null) { 258 if (operateLog != null) {
248 return operateLog.enable(); 259 return operateLog.enable();
@@ -256,9 +267,9 @@ public class OperateLogAspect { @@ -256,9 +267,9 @@ public class OperateLogAspect {
256 return null; 267 return null;
257 } 268 }
258 return Arrays.stream(requestMethods).filter(requestMethod -> 269 return Arrays.stream(requestMethods).filter(requestMethod ->
259 - requestMethod == RequestMethod.POST  
260 - || requestMethod == RequestMethod.PUT  
261 - || requestMethod == RequestMethod.DELETE) 270 + requestMethod == RequestMethod.POST
  271 + || requestMethod == RequestMethod.PUT
  272 + || requestMethod == RequestMethod.DELETE)
262 .findFirst().orElse(null); 273 .findFirst().orElse(null);
263 } 274 }
264 275
yudao-framework/yudao-spring-boot-starter-biz-operatelog/src/main/java/cn/iocoder/yudao/framework/operatelog/core/dto/OperateLogCreateReqDTO.java deleted
1 -package cn.iocoder.yudao.framework.operatelog.core.dto;  
2 -  
3 -import io.swagger.annotations.ApiModelProperty;  
4 -import lombok.Data;  
5 -  
6 -import javax.validation.constraints.NotEmpty;  
7 -import javax.validation.constraints.NotNull;  
8 -import java.util.Date;  
9 -import java.util.Map;  
10 -  
11 -/**  
12 - * 操作日志创建 Request DTO  
13 - */  
14 -@Data  
15 -public class OperateLogCreateReqDTO {  
16 -  
17 - @ApiModelProperty(value = "链路追踪编号", required = true, example = "89aca178-a370-411c-ae02-3f0d672be4ab")  
18 - @NotEmpty(message = "链路追踪编号不能为空")  
19 - private String traceId;  
20 -  
21 - @ApiModelProperty(value = "用户编号", required = true, example = "1024")  
22 - @NotNull(message = "用户编号不能为空")  
23 - private Long userId;  
24 - @ApiModelProperty(value = "用户类型", required = true, example = "1")  
25 - @NotNull(message = "用户类型不能为空")  
26 - private Integer userType;  
27 -  
28 - @ApiModelProperty(value = "操作模块", required = true, example = "订单")  
29 - @NotEmpty(message = "操作模块不能为空")  
30 - private String module;  
31 -  
32 - @ApiModelProperty(value = "操作名", required = true, example = "创建订单")  
33 - @NotEmpty(message = "操作名")  
34 - private String name;  
35 -  
36 - @ApiModelProperty(value = "操作分类", required = true, example = "1", notes = "参见 SysOperateLogTypeEnum 枚举类")  
37 - @NotNull(message = "操作分类不能为空")  
38 - private Integer type;  
39 -  
40 - @ApiModelProperty(value = "操作明细", example = "修改编号为 1 的用户信息,将性别从男改成女,将姓名从芋道改成源码。")  
41 - private String content;  
42 -  
43 - @ApiModelProperty(value = "拓展字段", example = "{'orderId': 1}")  
44 - private Map<String, Object> exts;  
45 -  
46 - @ApiModelProperty(value = "请求方法名", required = true, example = "GET")  
47 - @NotEmpty(message = "请求方法名不能为空")  
48 - private String requestMethod;  
49 -  
50 - @ApiModelProperty(value = "请求地址", required = true, example = "/xxx/yyy")  
51 - @NotEmpty(message = "请求地址不能为空")  
52 - private String requestUrl;  
53 -  
54 - @ApiModelProperty(value = "用户 IP", required = true, example = "127.0.0.1")  
55 - @NotEmpty(message = "用户 IP 不能为空")  
56 - private String userIp;  
57 -  
58 - @ApiModelProperty(value = "浏览器 UserAgent", required = true, example = "Mozilla/5.0")  
59 - @NotEmpty(message = "浏览器 UserAgent 不能为空")  
60 - private String userAgent;  
61 -  
62 - @ApiModelProperty(value = "Java 方法名", required = true, example = "cn.iocoder.yudao.UserController.save(...)")  
63 - @NotEmpty(message = "Java 方法名不能为空")  
64 - private String javaMethod;  
65 -  
66 - @ApiModelProperty(value = "Java 方法的参数")  
67 - private String javaMethodArgs;  
68 -  
69 - @ApiModelProperty(value = "开始时间", required = true)  
70 - @NotNull(message = "开始时间不能为空")  
71 - private Date startTime;  
72 -  
73 - @ApiModelProperty(value = "执行时长,单位:毫秒", required = true)  
74 - @NotNull(message = "执行时长不能为空")  
75 - private Integer duration;  
76 -  
77 - @ApiModelProperty(value = "结果码", required = true)  
78 - @NotNull(message = "结果码不能为空")  
79 - private Integer resultCode;  
80 -  
81 - @ApiModelProperty(value = "结果提示")  
82 - private String resultMsg;  
83 -  
84 - @ApiModelProperty(value = "结果数据")  
85 - private String resultData;  
86 -  
87 -}  
yudao-framework/yudao-spring-boot-starter-biz-operatelog/src/main/java/cn/iocoder/yudao/framework/operatelog/core/service/OperateLog.java 0 → 100644
  1 +package cn.iocoder.yudao.framework.operatelog.core.service;
  2 +
  3 +import lombok.Data;
  4 +
  5 +import java.util.Date;
  6 +import java.util.Map;
  7 +
  8 +/**
  9 + * 操作日志
  10 + *
  11 + * @author 芋道源码
  12 + */
  13 +@Data
  14 +public class OperateLog {
  15 +
  16 + /**
  17 + * 链路追踪编号
  18 + */
  19 + private String traceId;
  20 +
  21 + /**
  22 + * 用户编号
  23 + */
  24 + private Long userId;
  25 + /**
  26 + * 用户类型
  27 + */
  28 + private Integer userType;
  29 +
  30 + /**
  31 + * 操作模块
  32 + */
  33 + private String module;
  34 +
  35 + /**
  36 + * 操作名
  37 + */
  38 + private String name;
  39 +
  40 + /**
  41 + * 操作分类
  42 + */
  43 + private Integer type;
  44 +
  45 + /**
  46 + * 操作明细
  47 + */
  48 + private String content;
  49 +
  50 + /**
  51 + * 拓展字段
  52 + */
  53 + private Map<String, Object> exts;
  54 +
  55 + /**
  56 + * 请求方法名
  57 + */
  58 + private String requestMethod;
  59 +
  60 + /**
  61 + * 请求地址
  62 + */
  63 + private String requestUrl;
  64 +
  65 + /**
  66 + * 用户 IP
  67 + */
  68 + private String userIp;
  69 +
  70 + /**
  71 + * 浏览器 UserAgent
  72 + */
  73 + private String userAgent;
  74 +
  75 + /**
  76 + * Java 方法名
  77 + */
  78 + private String javaMethod;
  79 +
  80 + /**
  81 + * Java 方法的参数
  82 + */
  83 + private String javaMethodArgs;
  84 +
  85 + /**
  86 + * 开始时间
  87 + */
  88 + private Date startTime;
  89 +
  90 + /**
  91 + * 执行时长,单位:毫秒
  92 + */
  93 + private Integer duration;
  94 +
  95 + /**
  96 + * 结果码
  97 + */
  98 + private Integer resultCode;
  99 +
  100 + /**
  101 + * 结果提示
  102 + */
  103 + private String resultMsg;
  104 +
  105 + /**
  106 + * 结果数据
  107 + */
  108 + private String resultData;
  109 +
  110 +}
yudao-framework/yudao-spring-boot-starter-biz-operatelog/src/main/java/cn/iocoder/yudao/framework/operatelog/core/service/OperateLogFrameworkService.java
1 package cn.iocoder.yudao.framework.operatelog.core.service; 1 package cn.iocoder.yudao.framework.operatelog.core.service;
2 2
3 -import cn.iocoder.yudao.framework.operatelog.core.dto.OperateLogCreateReqDTO;  
4 -  
5 -import java.util.concurrent.Future;  
6 - 3 +/**
  4 + * 操作日志 Framework Service 接口
  5 + *
  6 + * @author 芋道源码
  7 + */
7 public interface OperateLogFrameworkService { 8 public interface OperateLogFrameworkService {
8 9
9 /** 10 /**
10 - * 异步记录操作日志 11 + * 记录操作日志
11 * 12 *
12 - * @param reqVO 操作日志请求  
13 - * @return true: 记录成功,false: 记录失败 13 + * @param operateLog 操作日志请求
14 */ 14 */
15 - Future<Boolean> createOperateLogAsync(OperateLogCreateReqDTO reqVO); 15 + void createOperateLog(OperateLog operateLog);
16 16
17 } 17 }
yudao-framework/yudao-spring-boot-starter-biz-operatelog/src/main/java/cn/iocoder/yudao/framework/operatelog/core/service/OperateLogFrameworkServiceImpl.java 0 → 100644
  1 +package cn.iocoder.yudao.framework.operatelog.core.service;
  2 +
  3 +import cn.hutool.core.bean.BeanUtil;
  4 +import cn.iocoder.yudao.module.system.api.logger.OperateLogApi;
  5 +import cn.iocoder.yudao.module.system.api.logger.dto.OperateLogCreateReqDTO;
  6 +import lombok.RequiredArgsConstructor;
  7 +import org.springframework.scheduling.annotation.Async;
  8 +
  9 +/**
  10 + * 操作日志 Framework Service 实现类
  11 + *
  12 + * 基于 {@link OperateLogApi} 实现,记录操作日志
  13 + *
  14 + * @author 芋道源码
  15 + */
  16 +@RequiredArgsConstructor
  17 +public class OperateLogFrameworkServiceImpl implements OperateLogFrameworkService {
  18 +
  19 + private final OperateLogApi operateLogApi;
  20 +
  21 + @Override
  22 + @Async
  23 + public void createOperateLog(OperateLog operateLog) {
  24 + OperateLogCreateReqDTO reqDTO = BeanUtil.copyProperties(operateLog, OperateLogCreateReqDTO.class);
  25 + operateLogApi.createOperateLog(reqDTO);
  26 + }
  27 +
  28 +}
yudao-module-system/yudao-module-system-api/src/main/java/cn/iocoder/yudao/module/system/api/logger/OperateLogApi.java 0 → 100644
  1 +package cn.iocoder.yudao.module.system.api.logger;
  2 +
  3 +import cn.iocoder.yudao.module.system.api.logger.dto.OperateLogCreateReqDTO;
  4 +
  5 +import javax.validation.Valid;
  6 +
  7 +/**
  8 + * 操作日志 API 接口
  9 + *
  10 + * @author 芋道源码
  11 + */
  12 +public interface OperateLogApi {
  13 +
  14 + /**
  15 + * 创建操作日志
  16 + *
  17 + * @param createReqDTO 请求
  18 + */
  19 + void createOperateLog(@Valid OperateLogCreateReqDTO createReqDTO);
  20 +
  21 +}
yudao-module-system/yudao-module-system-api/src/main/java/cn/iocoder/yudao/module/system/api/logger/dto/OperateLogCreateReqDTO.java 0 → 100644
  1 +package cn.iocoder.yudao.module.system.api.logger.dto;
  2 +
  3 +import lombok.Data;
  4 +
  5 +import javax.validation.constraints.NotEmpty;
  6 +import javax.validation.constraints.NotNull;
  7 +import java.util.Date;
  8 +import java.util.Map;
  9 +
  10 +/**
  11 + * 操作日志创建 Request DTO
  12 + */
  13 +@Data
  14 +public class OperateLogCreateReqDTO {
  15 +
  16 + /**
  17 + * 链路追踪编号
  18 + */
  19 + private String traceId;
  20 +
  21 + /**
  22 + * 用户编号
  23 + */
  24 + @NotNull(message = "用户编号不能为空")
  25 + private Long userId;
  26 + /**
  27 + * 用户类型
  28 + */
  29 + @NotNull(message = "用户类型不能为空")
  30 + private Integer userType;
  31 +
  32 + /**
  33 + * 操作模块
  34 + */
  35 + @NotEmpty(message = "操作模块不能为空")
  36 + private String module;
  37 +
  38 + /**
  39 + * 操作名
  40 + */
  41 + @NotEmpty(message = "操作名")
  42 + private String name;
  43 +
  44 + /**
  45 + * 操作分类
  46 + */
  47 + @NotNull(message = "操作分类不能为空")
  48 + private Integer type;
  49 +
  50 + /**
  51 + * 操作明细
  52 + */
  53 + private String content;
  54 +
  55 + /**
  56 + * 拓展字段
  57 + */
  58 + private Map<String, Object> exts;
  59 +
  60 + /**
  61 + * 请求方法名
  62 + */
  63 + @NotEmpty(message = "请求方法名不能为空")
  64 + private String requestMethod;
  65 +
  66 + /**
  67 + * 请求地址
  68 + */
  69 + @NotEmpty(message = "请求地址不能为空")
  70 + private String requestUrl;
  71 +
  72 + /**
  73 + * 用户 IP
  74 + */
  75 + @NotEmpty(message = "用户 IP 不能为空")
  76 + private String userIp;
  77 +
  78 + /**
  79 + * 浏览器 UserAgent
  80 + */
  81 + @NotEmpty(message = "浏览器 UserAgent 不能为空")
  82 + private String userAgent;
  83 +
  84 + /**
  85 + * Java 方法名
  86 + */
  87 + @NotEmpty(message = "Java 方法名不能为空")
  88 + private String javaMethod;
  89 +
  90 + /**
  91 + * Java 方法的参数
  92 + */
  93 + private String javaMethodArgs;
  94 +
  95 + /**
  96 + * 开始时间
  97 + */
  98 + @NotNull(message = "开始时间不能为空")
  99 + private Date startTime;
  100 +
  101 + /**
  102 + * 执行时长,单位:毫秒
  103 + */
  104 + @NotNull(message = "执行时长不能为空")
  105 + private Integer duration;
  106 +
  107 + /**
  108 + * 结果码
  109 + */
  110 + @NotNull(message = "结果码不能为空")
  111 + private Integer resultCode;
  112 +
  113 + /**
  114 + * 结果提示
  115 + */
  116 + private String resultMsg;
  117 +
  118 + /**
  119 + * 结果数据
  120 + */
  121 + private String resultData;
  122 +
  123 +}
yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/api/logger/OperateLogApiImpl.java 0 → 100644
  1 +package cn.iocoder.yudao.module.system.api.logger;
  2 +
  3 +import cn.iocoder.yudao.module.system.api.logger.dto.OperateLogCreateReqDTO;
  4 +import cn.iocoder.yudao.module.system.service.logger.OperateLogService;
  5 +import org.springframework.stereotype.Service;
  6 +import org.springframework.validation.annotation.Validated;
  7 +
  8 +import javax.annotation.Resource;
  9 +
  10 +/**
  11 + * 操作日志 API 实现类
  12 + *
  13 + * @author 芋道源码
  14 + */
  15 +@Service
  16 +@Validated
  17 +public class OperateLogApiImpl implements OperateLogApi {
  18 +
  19 + @Resource
  20 + private OperateLogService operateLogService;
  21 +
  22 + @Override
  23 + public void createOperateLog(OperateLogCreateReqDTO createReqDTO) {
  24 + operateLogService.createOperateLog(createReqDTO);
  25 + }
  26 +
  27 +}
yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/sms/SmsTemplateController.http
@@ -5,7 +5,8 @@ Content-Type: application/json @@ -5,7 +5,8 @@ Content-Type: application/json
5 tenant-id: {{adminTenentId}} 5 tenant-id: {{adminTenentId}}
6 6
7 { 7 {
8 - "code": "test_01", 8 + "templateCode": "test_01",
  9 + "mobile": "156016913900",
9 "params": { 10 "params": {
10 "key01": "value01", 11 "key01": "value01",
11 "key02": "value02" 12 "key02": "value02"
yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/convert/logger/OperateLogConvert.java
@@ -6,7 +6,7 @@ import cn.iocoder.yudao.module.system.dal.dataobject.logger.OperateLogDO; @@ -6,7 +6,7 @@ import cn.iocoder.yudao.module.system.dal.dataobject.logger.OperateLogDO;
6 import cn.iocoder.yudao.module.system.dal.dataobject.user.AdminUserDO; 6 import cn.iocoder.yudao.module.system.dal.dataobject.user.AdminUserDO;
7 import cn.iocoder.yudao.framework.common.pojo.PageResult; 7 import cn.iocoder.yudao.framework.common.pojo.PageResult;
8 import cn.iocoder.yudao.framework.common.util.collection.MapUtils; 8 import cn.iocoder.yudao.framework.common.util.collection.MapUtils;
9 -import cn.iocoder.yudao.framework.operatelog.core.dto.OperateLogCreateReqDTO; 9 +import cn.iocoder.yudao.module.system.api.logger.dto.OperateLogCreateReqDTO;
10 import org.mapstruct.Mapper; 10 import org.mapstruct.Mapper;
11 import org.mapstruct.factory.Mappers; 11 import org.mapstruct.factory.Mappers;
12 12
yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/logger/OperateLogService.java
1 package cn.iocoder.yudao.module.system.service.logger; 1 package cn.iocoder.yudao.module.system.service.logger;
2 2
3 import cn.iocoder.yudao.framework.common.pojo.PageResult; 3 import cn.iocoder.yudao.framework.common.pojo.PageResult;
  4 +import cn.iocoder.yudao.framework.operatelog.core.service.OperateLog;
4 import cn.iocoder.yudao.framework.operatelog.core.service.OperateLogFrameworkService; 5 import cn.iocoder.yudao.framework.operatelog.core.service.OperateLogFrameworkService;
  6 +import cn.iocoder.yudao.module.system.api.logger.dto.OperateLogCreateReqDTO;
5 import cn.iocoder.yudao.module.system.controller.admin.logger.vo.operatelog.OperateLogExportReqVO; 7 import cn.iocoder.yudao.module.system.controller.admin.logger.vo.operatelog.OperateLogExportReqVO;
6 import cn.iocoder.yudao.module.system.controller.admin.logger.vo.operatelog.OperateLogPageReqVO; 8 import cn.iocoder.yudao.module.system.controller.admin.logger.vo.operatelog.OperateLogPageReqVO;
7 import cn.iocoder.yudao.module.system.dal.dataobject.logger.OperateLogDO; 9 import cn.iocoder.yudao.module.system.dal.dataobject.logger.OperateLogDO;
@@ -10,8 +12,17 @@ import java.util.List; @@ -10,8 +12,17 @@ import java.util.List;
10 12
11 /** 13 /**
12 * 操作日志 Service 接口 14 * 操作日志 Service 接口
  15 + *
  16 + * @author 芋道源码
13 */ 17 */
14 -public interface OperateLogService extends OperateLogFrameworkService { 18 +public interface OperateLogService {
  19 +
  20 + /**
  21 + * 记录操作日志
  22 + *
  23 + * @param createReqDTO 操作日志请求
  24 + */
  25 + void createOperateLog(OperateLogCreateReqDTO createReqDTO);
15 26
16 /** 27 /**
17 * 获得操作日志分页列表 28 * 获得操作日志分页列表
yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/logger/OperateLogServiceImpl.java
@@ -4,7 +4,7 @@ import cn.hutool.core.collection.CollUtil; @@ -4,7 +4,7 @@ import cn.hutool.core.collection.CollUtil;
4 import cn.hutool.core.util.StrUtil; 4 import cn.hutool.core.util.StrUtil;
5 import cn.iocoder.yudao.framework.common.pojo.PageResult; 5 import cn.iocoder.yudao.framework.common.pojo.PageResult;
6 import cn.iocoder.yudao.framework.common.util.string.StrUtils; 6 import cn.iocoder.yudao.framework.common.util.string.StrUtils;
7 -import cn.iocoder.yudao.framework.operatelog.core.dto.OperateLogCreateReqDTO; 7 +import cn.iocoder.yudao.module.system.api.logger.dto.OperateLogCreateReqDTO;
8 import cn.iocoder.yudao.module.system.controller.admin.logger.vo.operatelog.OperateLogExportReqVO; 8 import cn.iocoder.yudao.module.system.controller.admin.logger.vo.operatelog.OperateLogExportReqVO;
9 import cn.iocoder.yudao.module.system.controller.admin.logger.vo.operatelog.OperateLogPageReqVO; 9 import cn.iocoder.yudao.module.system.controller.admin.logger.vo.operatelog.OperateLogPageReqVO;
10 import cn.iocoder.yudao.module.system.convert.logger.OperateLogConvert; 10 import cn.iocoder.yudao.module.system.convert.logger.OperateLogConvert;
@@ -13,8 +13,6 @@ import cn.iocoder.yudao.module.system.dal.dataobject.user.AdminUserDO; @@ -13,8 +13,6 @@ import cn.iocoder.yudao.module.system.dal.dataobject.user.AdminUserDO;
13 import cn.iocoder.yudao.module.system.dal.mysql.logger.OperateLogMapper; 13 import cn.iocoder.yudao.module.system.dal.mysql.logger.OperateLogMapper;
14 import cn.iocoder.yudao.module.system.service.user.AdminUserService; 14 import cn.iocoder.yudao.module.system.service.user.AdminUserService;
15 import lombok.extern.slf4j.Slf4j; 15 import lombok.extern.slf4j.Slf4j;
16 -import org.springframework.scheduling.annotation.Async;  
17 -import org.springframework.scheduling.annotation.AsyncResult;  
18 import org.springframework.stereotype.Service; 16 import org.springframework.stereotype.Service;
19 import org.springframework.validation.annotation.Validated; 17 import org.springframework.validation.annotation.Validated;
20 18
@@ -22,7 +20,6 @@ import javax.annotation.Resource; @@ -22,7 +20,6 @@ import javax.annotation.Resource;
22 import java.util.Collection; 20 import java.util.Collection;
23 import java.util.Collections; 21 import java.util.Collections;
24 import java.util.List; 22 import java.util.List;
25 -import java.util.concurrent.Future;  
26 23
27 import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.convertSet; 24 import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.convertSet;
28 import static cn.iocoder.yudao.module.system.dal.dataobject.logger.OperateLogDO.JAVA_METHOD_ARGS_MAX_LENGTH; 25 import static cn.iocoder.yudao.module.system.dal.dataobject.logger.OperateLogDO.JAVA_METHOD_ARGS_MAX_LENGTH;
@@ -40,19 +37,11 @@ public class OperateLogServiceImpl implements OperateLogService { @@ -40,19 +37,11 @@ public class OperateLogServiceImpl implements OperateLogService {
40 private AdminUserService userService; 37 private AdminUserService userService;
41 38
42 @Override 39 @Override
43 - @Async  
44 - public Future<Boolean> createOperateLogAsync(OperateLogCreateReqDTO reqVO) {  
45 - boolean success = false;  
46 - try {  
47 - OperateLogDO logDO = OperateLogConvert.INSTANCE.convert(reqVO);  
48 - logDO.setJavaMethodArgs(StrUtils.maxLength(logDO.getJavaMethodArgs(), JAVA_METHOD_ARGS_MAX_LENGTH));  
49 - logDO.setResultData(StrUtils.maxLength(logDO.getResultData(), RESULT_MAX_LENGTH));  
50 - success = operateLogMapper.insert(logDO) == 1;  
51 - } catch (Throwable throwable) {  
52 - // 仅仅打印日志,不对外抛出。原因是,还是要保留现场数据。  
53 - log.error("[createOperateLogAsync][记录操作日志异常,日志为 ({})]", reqVO, throwable);  
54 - }  
55 - return new AsyncResult<>(success); 40 + public void createOperateLog(OperateLogCreateReqDTO createReqDTO) {
  41 + OperateLogDO logDO = OperateLogConvert.INSTANCE.convert(createReqDTO);
  42 + logDO.setJavaMethodArgs(StrUtils.maxLength(logDO.getJavaMethodArgs(), JAVA_METHOD_ARGS_MAX_LENGTH));
  43 + logDO.setResultData(StrUtils.maxLength(logDO.getResultData(), RESULT_MAX_LENGTH));
  44 + operateLogMapper.insert(logDO);
56 } 45 }
57 46
58 @Override 47 @Override
yudao-module-system/yudao-module-system-biz/src/test/java/cn/iocoder/yudao/module/system/service/logger/OperateLogServiceImplTest.java
@@ -7,9 +7,10 @@ import cn.iocoder.yudao.framework.common.exception.enums.GlobalErrorCodeConstant @@ -7,9 +7,10 @@ import cn.iocoder.yudao.framework.common.exception.enums.GlobalErrorCodeConstant
7 import cn.iocoder.yudao.framework.common.pojo.PageResult; 7 import cn.iocoder.yudao.framework.common.pojo.PageResult;
8 import cn.iocoder.yudao.framework.common.util.monitor.TracerUtils; 8 import cn.iocoder.yudao.framework.common.util.monitor.TracerUtils;
9 import cn.iocoder.yudao.framework.common.util.object.ObjectUtils; 9 import cn.iocoder.yudao.framework.common.util.object.ObjectUtils;
10 -import cn.iocoder.yudao.framework.operatelog.core.dto.OperateLogCreateReqDTO;  
11 import cn.iocoder.yudao.framework.operatelog.core.enums.OperateTypeEnum; 10 import cn.iocoder.yudao.framework.operatelog.core.enums.OperateTypeEnum;
  11 +import cn.iocoder.yudao.framework.test.core.ut.BaseDbUnitTest;
12 import cn.iocoder.yudao.framework.test.core.util.RandomUtils; 12 import cn.iocoder.yudao.framework.test.core.util.RandomUtils;
  13 +import cn.iocoder.yudao.module.system.api.logger.dto.OperateLogCreateReqDTO;
13 import cn.iocoder.yudao.module.system.controller.admin.logger.vo.operatelog.OperateLogExportReqVO; 14 import cn.iocoder.yudao.module.system.controller.admin.logger.vo.operatelog.OperateLogExportReqVO;
14 import cn.iocoder.yudao.module.system.controller.admin.logger.vo.operatelog.OperateLogPageReqVO; 15 import cn.iocoder.yudao.module.system.controller.admin.logger.vo.operatelog.OperateLogPageReqVO;
15 import cn.iocoder.yudao.module.system.dal.dataobject.logger.OperateLogDO; 16 import cn.iocoder.yudao.module.system.dal.dataobject.logger.OperateLogDO;
@@ -17,7 +18,6 @@ import cn.iocoder.yudao.module.system.dal.dataobject.user.AdminUserDO; @@ -17,7 +18,6 @@ import cn.iocoder.yudao.module.system.dal.dataobject.user.AdminUserDO;
17 import cn.iocoder.yudao.module.system.dal.mysql.logger.OperateLogMapper; 18 import cn.iocoder.yudao.module.system.dal.mysql.logger.OperateLogMapper;
18 import cn.iocoder.yudao.module.system.enums.common.SexEnum; 19 import cn.iocoder.yudao.module.system.enums.common.SexEnum;
19 import cn.iocoder.yudao.module.system.service.user.AdminUserService; 20 import cn.iocoder.yudao.module.system.service.user.AdminUserService;
20 -import cn.iocoder.yudao.framework.test.core.ut.BaseDbUnitTest;  
21 import org.junit.jupiter.api.Test; 21 import org.junit.jupiter.api.Test;
22 import org.springframework.boot.test.mock.mockito.MockBean; 22 import org.springframework.boot.test.mock.mockito.MockBean;
23 import org.springframework.context.annotation.Import; 23 import org.springframework.context.annotation.Import;
@@ -25,8 +25,6 @@ import org.springframework.context.annotation.Import; @@ -25,8 +25,6 @@ import org.springframework.context.annotation.Import;
25 import javax.annotation.Resource; 25 import javax.annotation.Resource;
26 import java.util.Collections; 26 import java.util.Collections;
27 import java.util.List; 27 import java.util.List;
28 -import java.util.concurrent.ExecutionException;  
29 -import java.util.concurrent.Future;  
30 28
31 import static cn.hutool.core.util.RandomUtil.randomEle; 29 import static cn.hutool.core.util.RandomUtil.randomEle;
32 import static cn.iocoder.yudao.framework.common.exception.enums.GlobalErrorCodeConstants.BAD_REQUEST; 30 import static cn.iocoder.yudao.framework.common.exception.enums.GlobalErrorCodeConstants.BAD_REQUEST;
@@ -49,7 +47,7 @@ public class OperateLogServiceImplTest extends BaseDbUnitTest { @@ -49,7 +47,7 @@ public class OperateLogServiceImplTest extends BaseDbUnitTest {
49 private AdminUserService userService; 47 private AdminUserService userService;
50 48
51 @Test 49 @Test
52 - public void testCreateOperateLogAsync() throws InterruptedException, ExecutionException { 50 + public void testCreateOperateLogAsync() {
53 String traceId = TracerUtils.getTraceId(); 51 String traceId = TracerUtils.getTraceId();
54 OperateLogCreateReqDTO reqVO = RandomUtils.randomPojo(OperateLogCreateReqDTO.class, o -> { 52 OperateLogCreateReqDTO reqVO = RandomUtils.randomPojo(OperateLogCreateReqDTO.class, o -> {
55 o.setTraceId(traceId); 53 o.setTraceId(traceId);
@@ -59,8 +57,7 @@ public class OperateLogServiceImplTest extends BaseDbUnitTest { @@ -59,8 +57,7 @@ public class OperateLogServiceImplTest extends BaseDbUnitTest {
59 }); 57 });
60 58
61 // 执行service方法 59 // 执行service方法
62 - Future<Boolean> future = operateLogServiceImpl.createOperateLogAsync(reqVO);  
63 - future.get(); 60 + operateLogServiceImpl.createOperateLog(reqVO);
64 // 断言插入是否正确 61 // 断言插入是否正确
65 OperateLogDO sysOperateLogDO = operateLogMapper.selectOne("trace_id", traceId); 62 OperateLogDO sysOperateLogDO = operateLogMapper.selectOne("trace_id", traceId);
66 assertPojoEquals(reqVO, sysOperateLogDO); 63 assertPojoEquals(reqVO, sysOperateLogDO);