mirror of
				https://gitee.com/hhyykk/ipms-sjy.git
				synced 2025-10-31 18:28:43 +08:00 
			
		
		
		
	【功能修复】全局:请求租户不存在时,记录访问日志、操作日志异常的问题
This commit is contained in:
		| @@ -3,6 +3,7 @@ package cn.iocoder.yudao.framework.apilog.core.service; | ||||
| import cn.iocoder.yudao.module.infra.api.logger.ApiAccessLogApi; | ||||
| import cn.iocoder.yudao.module.infra.api.logger.dto.ApiAccessLogCreateReqDTO; | ||||
| import lombok.RequiredArgsConstructor; | ||||
| import lombok.extern.slf4j.Slf4j; | ||||
| import org.springframework.scheduling.annotation.Async; | ||||
|  | ||||
| /** | ||||
| @@ -13,6 +14,7 @@ import org.springframework.scheduling.annotation.Async; | ||||
|  * @author 芋道源码 | ||||
|  */ | ||||
| @RequiredArgsConstructor | ||||
| @Slf4j | ||||
| public class ApiAccessLogFrameworkServiceImpl implements ApiAccessLogFrameworkService { | ||||
|  | ||||
|     private final ApiAccessLogApi apiAccessLogApi; | ||||
| @@ -20,7 +22,12 @@ public class ApiAccessLogFrameworkServiceImpl implements ApiAccessLogFrameworkSe | ||||
|     @Override | ||||
|     @Async | ||||
|     public void createApiAccessLog(ApiAccessLogCreateReqDTO reqDTO) { | ||||
|         try { | ||||
|             apiAccessLogApi.createApiAccessLog(reqDTO); | ||||
|         } catch (Throwable ex) { | ||||
|             // 由于 @Async 异步调用,这里打印下日志,更容易跟进 | ||||
|             log.error("[createApiAccessLog][url({}) log({}) 发生异常]", reqDTO.getRequestUrl(), reqDTO, ex); | ||||
|         } | ||||
|     } | ||||
|  | ||||
| } | ||||
|   | ||||
| @@ -3,6 +3,7 @@ package cn.iocoder.yudao.framework.apilog.core.service; | ||||
| import cn.iocoder.yudao.module.infra.api.logger.ApiErrorLogApi; | ||||
| import cn.iocoder.yudao.module.infra.api.logger.dto.ApiErrorLogCreateReqDTO; | ||||
| import lombok.RequiredArgsConstructor; | ||||
| import lombok.extern.slf4j.Slf4j; | ||||
| import org.springframework.scheduling.annotation.Async; | ||||
|  | ||||
| /** | ||||
| @@ -13,6 +14,7 @@ import org.springframework.scheduling.annotation.Async; | ||||
|  * @author 芋道源码 | ||||
|  */ | ||||
| @RequiredArgsConstructor | ||||
| @Slf4j | ||||
| public class ApiErrorLogFrameworkServiceImpl implements ApiErrorLogFrameworkService { | ||||
|  | ||||
|     private final ApiErrorLogApi apiErrorLogApi; | ||||
| @@ -20,7 +22,12 @@ public class ApiErrorLogFrameworkServiceImpl implements ApiErrorLogFrameworkServ | ||||
|     @Override | ||||
|     @Async | ||||
|     public void createApiErrorLog(ApiErrorLogCreateReqDTO reqDTO) { | ||||
|         try { | ||||
|             apiErrorLogApi.createApiErrorLog(reqDTO); | ||||
|         } catch (Throwable ex) { | ||||
|             // 由于 @Async 异步调用,这里打印下日志,更容易跟进 | ||||
|             log.error("[createApiErrorLog][url({}) log({}) 发生异常]", reqDTO.getRequestUrl(), reqDTO, ex); | ||||
|         } | ||||
|     } | ||||
|  | ||||
| } | ||||
|   | ||||
| @@ -328,6 +328,12 @@ public class GlobalExceptionHandler { | ||||
|             return CommonResult.error(NOT_IMPLEMENTED.getCode(), | ||||
|                     "[支付模块 yudao-module-pay - 表结构未导入][参考 https://doc.iocoder.cn/pay/build/ 开启]"); | ||||
|         } | ||||
|         // 8. AI 大模型 | ||||
|         if (message.contains("ai_")) { | ||||
|             log.error("[AI 大模型 yudao-module-ai - 表结构未导入][参考 https://doc.iocoder.cn/ai/build/ 开启]"); | ||||
|             return CommonResult.error(NOT_IMPLEMENTED.getCode(), | ||||
|                     "[AI 大模型 yudao-module-ai - 表结构未导入][参考 https://doc.iocoder.cn/ai/build/ 开启]"); | ||||
|         } | ||||
|         return null; | ||||
|     } | ||||
|  | ||||
|   | ||||
| @@ -3,6 +3,8 @@ package cn.iocoder.yudao.module.infra.service.logger; | ||||
| import cn.hutool.core.util.StrUtil; | ||||
| import cn.iocoder.yudao.framework.common.pojo.PageResult; | ||||
| import cn.iocoder.yudao.framework.common.util.object.BeanUtils; | ||||
| import cn.iocoder.yudao.framework.tenant.core.context.TenantContextHolder; | ||||
| import cn.iocoder.yudao.framework.tenant.core.util.TenantUtils; | ||||
| import cn.iocoder.yudao.module.infra.api.logger.dto.ApiAccessLogCreateReqDTO; | ||||
| import cn.iocoder.yudao.module.infra.controller.admin.logger.vo.apiaccesslog.ApiAccessLogPageReqVO; | ||||
| import cn.iocoder.yudao.module.infra.dal.dataobject.logger.ApiAccessLogDO; | ||||
| @@ -35,7 +37,12 @@ public class ApiAccessLogServiceImpl implements ApiAccessLogService { | ||||
|         ApiAccessLogDO apiAccessLog = BeanUtils.toBean(createDTO, ApiAccessLogDO.class); | ||||
|         apiAccessLog.setRequestParams(StrUtil.maxLength(apiAccessLog.getRequestParams(), REQUEST_PARAMS_MAX_LENGTH)); | ||||
|         apiAccessLog.setResultMsg(StrUtil.maxLength(apiAccessLog.getResultMsg(), RESULT_MSG_MAX_LENGTH)); | ||||
|         if (TenantContextHolder.getTenantId() != null) { | ||||
|             apiAccessLogMapper.insert(apiAccessLog); | ||||
|         } else { | ||||
|             // 极端情况下,上下文中没有租户时,此时忽略租户上下文,避免插入失败! | ||||
|             TenantUtils.executeIgnore(() -> apiAccessLogMapper.insert(apiAccessLog)); | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     @Override | ||||
|   | ||||
| @@ -3,6 +3,8 @@ package cn.iocoder.yudao.module.infra.service.logger; | ||||
| import cn.hutool.core.util.StrUtil; | ||||
| import cn.iocoder.yudao.framework.common.pojo.PageResult; | ||||
| import cn.iocoder.yudao.framework.common.util.object.BeanUtils; | ||||
| import cn.iocoder.yudao.framework.tenant.core.context.TenantContextHolder; | ||||
| import cn.iocoder.yudao.framework.tenant.core.util.TenantUtils; | ||||
| import cn.iocoder.yudao.module.infra.api.logger.dto.ApiErrorLogCreateReqDTO; | ||||
| import cn.iocoder.yudao.module.infra.controller.admin.logger.vo.apierrorlog.ApiErrorLogPageReqVO; | ||||
| import cn.iocoder.yudao.module.infra.dal.dataobject.logger.ApiErrorLogDO; | ||||
| @@ -25,9 +27,9 @@ import static cn.iocoder.yudao.module.infra.enums.ErrorCodeConstants.API_ERROR_L | ||||
|  * | ||||
|  * @author 芋道源码 | ||||
|  */ | ||||
| @Slf4j | ||||
| @Service | ||||
| @Validated | ||||
| @Slf4j | ||||
| public class ApiErrorLogServiceImpl implements ApiErrorLogService { | ||||
|  | ||||
|     @Resource | ||||
| @@ -38,7 +40,12 @@ public class ApiErrorLogServiceImpl implements ApiErrorLogService { | ||||
|         ApiErrorLogDO apiErrorLog = BeanUtils.toBean(createDTO, ApiErrorLogDO.class) | ||||
|                 .setProcessStatus(ApiErrorLogProcessStatusEnum.INIT.getStatus()); | ||||
|         apiErrorLog.setRequestParams(StrUtil.maxLength(apiErrorLog.getRequestParams(), REQUEST_PARAMS_MAX_LENGTH)); | ||||
|         if (TenantContextHolder.getTenantId() != null) { | ||||
|             apiErrorLogMapper.insert(apiErrorLog); | ||||
|         } else { | ||||
|             // 极端情况下,上下文中没有租户时,此时忽略租户上下文,避免插入失败! | ||||
|             TenantUtils.executeIgnore(() -> apiErrorLogMapper.insert(apiErrorLog)); | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     @Override | ||||
|   | ||||
| @@ -23,9 +23,9 @@ public interface OperateLogApi { | ||||
|     /** | ||||
|      * 获取指定模块的指定数据的操作日志分页 | ||||
|      * | ||||
|      * @param pageReqVO 请求 | ||||
|      * @param pageReqDTO 请求 | ||||
|      * @return 操作日志分页 | ||||
|      */ | ||||
|     PageResult<OperateLogRespDTO> getOperateLogPage(OperateLogPageReqDTO pageReqVO); | ||||
|     PageResult<OperateLogRespDTO> getOperateLogPage(OperateLogPageReqDTO pageReqDTO); | ||||
|  | ||||
| } | ||||
|   | ||||
| @@ -33,8 +33,8 @@ public class OperateLogApiImpl implements OperateLogApi { | ||||
|  | ||||
|     @Override | ||||
|     @TransMethodResult | ||||
|     public PageResult<OperateLogRespDTO> getOperateLogPage(OperateLogPageReqDTO pageReqVO) { | ||||
|         PageResult<OperateLogDO> operateLogPage = operateLogService.getOperateLogPage(pageReqVO); | ||||
|     public PageResult<OperateLogRespDTO> getOperateLogPage(OperateLogPageReqDTO pageReqDTO) { | ||||
|         PageResult<OperateLogDO> operateLogPage = operateLogService.getOperateLogPage(pageReqDTO); | ||||
|         return BeanUtils.toBean(operateLogPage, OperateLogRespDTO.class); | ||||
|     } | ||||
|  | ||||
|   | ||||
		Reference in New Issue
	
	Block a user
	 YunaiV
					YunaiV