|
@@ -2,6 +2,7 @@ package cn.iocoder.yudao.framework.web.core.handler;
|
|
|
|
|
|
import cn.hutool.core.exceptions.ExceptionUtil;
|
|
|
import cn.hutool.core.map.MapUtil;
|
|
|
+import cn.hutool.core.util.StrUtil;
|
|
|
import cn.iocoder.yudao.framework.apilog.core.service.ApiErrorLog;
|
|
|
import cn.iocoder.yudao.framework.apilog.core.service.ApiErrorLogFrameworkService;
|
|
|
import cn.iocoder.yudao.framework.common.exception.ServiceException;
|
|
@@ -219,6 +220,13 @@ public class GlobalExceptionHandler {
|
|
|
*/
|
|
|
@ExceptionHandler(value = Exception.class)
|
|
|
public CommonResult<?> defaultExceptionHandler(HttpServletRequest req, Throwable ex) {
|
|
|
+ // 情况一:处理表不存在的异常
|
|
|
+ CommonResult<?> tableNotExistsResult = handleTableNotExists(ex);
|
|
|
+ if (tableNotExistsResult != null) {
|
|
|
+ return tableNotExistsResult;
|
|
|
+ }
|
|
|
+
|
|
|
+ // 情况二:处理异常
|
|
|
log.error("[defaultExceptionHandler]", ex);
|
|
|
// 插入异常日志
|
|
|
this.createExceptionLog(req, ex);
|
|
@@ -269,4 +277,48 @@ public class GlobalExceptionHandler {
|
|
|
errorLog.setExceptionTime(LocalDateTime.now());
|
|
|
}
|
|
|
|
|
|
+ /**
|
|
|
+ * 处理 Table 不存在的异常情况
|
|
|
+ *
|
|
|
+ * @param ex 异常
|
|
|
+ * @return 如果是 Table 不存在的异常,则返回对应的 CommonResult
|
|
|
+ */
|
|
|
+ private CommonResult<?> handleTableNotExists(Throwable ex) {
|
|
|
+ String message = ExceptionUtil.getRootCauseMessage(ex);
|
|
|
+ if (!message.contains("doesn't exist")) {
|
|
|
+ return null;
|
|
|
+ }
|
|
|
+ // 1. 数据报表
|
|
|
+ if (message.contains("report_")) {
|
|
|
+ log.error("[报表模块 yudao-module-report - 表结构未导入][参考 https://doc.iocoder.cn/report/ 开启]");
|
|
|
+ return CommonResult.error(NOT_IMPLEMENTED.getCode(),
|
|
|
+ "[报表模块 yudao-module-report - 表结构未导入][参考 https://doc.iocoder.cn/report/ 开启]");
|
|
|
+ }
|
|
|
+ // 2. 工作流
|
|
|
+ if (message.contains("bpm_")) {
|
|
|
+ log.error("[工作流模块 yudao-module-bpm - 表结构未导入][参考 https://doc.iocoder.cn/bpm/ 开启]");
|
|
|
+ return CommonResult.error(NOT_IMPLEMENTED.getCode(),
|
|
|
+ "[工作流模块 yudao-module-bpm - 表结构未导入][参考 https://doc.iocoder.cn/bpm/ 开启]");
|
|
|
+ }
|
|
|
+ // 3. 微信公众号
|
|
|
+ if (message.contains("mp_")) {
|
|
|
+ log.error("[微信公众号 yudao-module-mp - 表结构未导入][参考 https://doc.iocoder.cn/mp/build/ 开启]");
|
|
|
+ return CommonResult.error(NOT_IMPLEMENTED.getCode(),
|
|
|
+ "[微信公众号 yudao-module-mp - 表结构未导入][参考 https://doc.iocoder.cn/mp/build/ 开启]");
|
|
|
+ }
|
|
|
+ // 4. 商城系统
|
|
|
+ if (StrUtil.containsAny(message, "product_", "promotion_", "trade_")) {
|
|
|
+ log.error("[商城系统 yudao-module-mall - 已禁用][参考 https://doc.iocoder.cn/mall/build/ 开启]");
|
|
|
+ return CommonResult.error(NOT_IMPLEMENTED.getCode(),
|
|
|
+ "[商城系统 yudao-module-mall - 已禁用][参考 https://doc.iocoder.cn/mall/build/ 开启]");
|
|
|
+ }
|
|
|
+ // 5. 支付平台
|
|
|
+ if (message.contains("pay_")) {
|
|
|
+ log.error("[支付模块 yudao-module-pay - 表结构未导入][参考 https://doc.iocoder.cn/pay/build/ 开启]");
|
|
|
+ return CommonResult.error(NOT_IMPLEMENTED.getCode(),
|
|
|
+ "[支付模块 yudao-module-pay - 表结构未导入][参考 https://doc.iocoder.cn/pay/build/ 开启]");
|
|
|
+ }
|
|
|
+ return null;
|
|
|
+ }
|
|
|
+
|
|
|
}
|