Commit 12ce87b3056718a28d2f5d9c0e5344bab6dacc8a

Authored by YunaiV
1 parent c8ebad91

【功能修复】框架:操作日志异步记录时,丢失 request 的问题

yudao-framework/yudao-spring-boot-starter-security/src/main/java/cn/iocoder/yudao/framework/operatelog/core/service/LogRecordServiceImpl.java
@@ -11,7 +11,6 @@ import com.mzt.logapi.service.ILogRecordService; @@ -11,7 +11,6 @@ import com.mzt.logapi.service.ILogRecordService;
11 import jakarta.annotation.Resource; 11 import jakarta.annotation.Resource;
12 import jakarta.servlet.http.HttpServletRequest; 12 import jakarta.servlet.http.HttpServletRequest;
13 import lombok.extern.slf4j.Slf4j; 13 import lombok.extern.slf4j.Slf4j;
14 -import org.springframework.scheduling.annotation.Async;  
15 14
16 import java.util.List; 15 import java.util.List;
17 16
@@ -29,7 +28,6 @@ public class LogRecordServiceImpl implements ILogRecordService { @@ -29,7 +28,6 @@ public class LogRecordServiceImpl implements ILogRecordService {
29 private OperateLogApi operateLogApi; 28 private OperateLogApi operateLogApi;
30 29
31 @Override 30 @Override
32 - @Async  
33 public void record(LogRecord logRecord) { 31 public void record(LogRecord logRecord) {
34 OperateLogCreateReqDTO reqDTO = new OperateLogCreateReqDTO(); 32 OperateLogCreateReqDTO reqDTO = new OperateLogCreateReqDTO();
35 try { 33 try {
@@ -42,7 +40,7 @@ public class LogRecordServiceImpl implements ILogRecordService { @@ -42,7 +40,7 @@ public class LogRecordServiceImpl implements ILogRecordService {
42 fillRequestFields(reqDTO); 40 fillRequestFields(reqDTO);
43 41
44 // 2. 异步记录日志 42 // 2. 异步记录日志
45 - operateLogApi.createOperateLog(reqDTO); 43 + operateLogApi.createOperateLogAsync(reqDTO);
46 } catch (Throwable ex) { 44 } catch (Throwable ex) {
47 // 由于 @Async 异步调用,这里打印下日志,更容易跟进 45 // 由于 @Async 异步调用,这里打印下日志,更容易跟进
48 log.error("[record][url({}) log({}) 发生异常]", reqDTO.getRequestUrl(), reqDTO, ex); 46 log.error("[record][url({}) log({}) 发生异常]", reqDTO.getRequestUrl(), reqDTO, ex);
yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/dal/mysql/receivable/CrmReceivableMapper.java
@@ -92,7 +92,7 @@ public interface CrmReceivableMapper extends BaseMapperX<CrmReceivableDO> { @@ -92,7 +92,7 @@ public interface CrmReceivableMapper extends BaseMapperX<CrmReceivableDO> {
92 List<Map<String, Object>> result = selectMaps(new QueryWrapper<CrmReceivableDO>() 92 List<Map<String, Object>> result = selectMaps(new QueryWrapper<CrmReceivableDO>()
93 .select("contract_id, SUM(price) AS total_price") 93 .select("contract_id, SUM(price) AS total_price")
94 .in("audit_status", CrmAuditStatusEnum.DRAFT.getStatus(), // 草稿 + 审批中 + 审批通过 94 .in("audit_status", CrmAuditStatusEnum.DRAFT.getStatus(), // 草稿 + 审批中 + 审批通过
95 - CrmAuditStatusEnum.PROCESS, CrmAuditStatusEnum.APPROVE.getStatus()) 95 + CrmAuditStatusEnum.PROCESS.getStatus(), CrmAuditStatusEnum.APPROVE.getStatus())
96 .groupBy("contract_id") 96 .groupBy("contract_id")
97 .in("contract_id", contractIds)); 97 .in("contract_id", contractIds));
98 // 获得金额 98 // 获得金额
yudao-module-system/yudao-module-system-api/src/main/java/cn/iocoder/yudao/module/system/api/logger/OperateLogApi.java
@@ -5,6 +5,7 @@ import cn.iocoder.yudao.module.system.api.logger.dto.OperateLogCreateReqDTO; @@ -5,6 +5,7 @@ import cn.iocoder.yudao.module.system.api.logger.dto.OperateLogCreateReqDTO;
5 import cn.iocoder.yudao.module.system.api.logger.dto.OperateLogPageReqDTO; 5 import cn.iocoder.yudao.module.system.api.logger.dto.OperateLogPageReqDTO;
6 import cn.iocoder.yudao.module.system.api.logger.dto.OperateLogRespDTO; 6 import cn.iocoder.yudao.module.system.api.logger.dto.OperateLogRespDTO;
7 import jakarta.validation.Valid; 7 import jakarta.validation.Valid;
  8 +import org.springframework.scheduling.annotation.Async;
8 9
9 /** 10 /**
10 * 操作日志 API 接口 11 * 操作日志 API 接口
@@ -21,6 +22,16 @@ public interface OperateLogApi { @@ -21,6 +22,16 @@ public interface OperateLogApi {
21 void createOperateLog(@Valid OperateLogCreateReqDTO createReqDTO); 22 void createOperateLog(@Valid OperateLogCreateReqDTO createReqDTO);
22 23
23 /** 24 /**
  25 + * 【异步】创建操作日志
  26 + *
  27 + * @param createReqDTO 请求
  28 + */
  29 + @Async
  30 + default void createOperateLogAsync(OperateLogCreateReqDTO createReqDTO) {
  31 + createOperateLog(createReqDTO);
  32 + }
  33 +
  34 + /**
24 * 获取指定模块的指定数据的操作日志分页 35 * 获取指定模块的指定数据的操作日志分页
25 * 36 *
26 * @param pageReqDTO 请求 37 * @param pageReqDTO 请求
yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/api/logger/OperateLogApiImpl.java
@@ -9,7 +9,6 @@ import cn.iocoder.yudao.module.system.dal.dataobject.logger.OperateLogDO; @@ -9,7 +9,6 @@ import cn.iocoder.yudao.module.system.dal.dataobject.logger.OperateLogDO;
9 import cn.iocoder.yudao.module.system.service.logger.OperateLogService; 9 import cn.iocoder.yudao.module.system.service.logger.OperateLogService;
10 import com.fhs.core.trans.anno.TransMethodResult; 10 import com.fhs.core.trans.anno.TransMethodResult;
11 import jakarta.annotation.Resource; 11 import jakarta.annotation.Resource;
12 -import org.springframework.scheduling.annotation.Async;  
13 import org.springframework.stereotype.Service; 12 import org.springframework.stereotype.Service;
14 import org.springframework.validation.annotation.Validated; 13 import org.springframework.validation.annotation.Validated;
15 14
@@ -26,7 +25,6 @@ public class OperateLogApiImpl implements OperateLogApi { @@ -26,7 +25,6 @@ public class OperateLogApiImpl implements OperateLogApi {
26 private OperateLogService operateLogService; 25 private OperateLogService operateLogService;
27 26
28 @Override 27 @Override
29 - @Async  
30 public void createOperateLog(OperateLogCreateReqDTO createReqDTO) { 28 public void createOperateLog(OperateLogCreateReqDTO createReqDTO) {
31 operateLogService.createOperateLog(createReqDTO); 29 operateLogService.createOperateLog(createReqDTO);
32 } 30 }